fallout2-ce/src/character_editor.h

314 lines
10 KiB
C
Raw Normal View History

2022-05-19 01:51:26 -07:00
#ifndef CHARACTER_EDITOR_H
#define CHARACTER_EDITOR_H
#include "art.h"
#include "db.h"
#include "geometry.h"
#include "message.h"
#include "perk_defs.h"
#include "proto_types.h"
#include "skill_defs.h"
#include "stat_defs.h"
#include "trait_defs.h"
#define DIALOG_PICKER_NUM_OPTIONS max(PERK_COUNT, TRAIT_COUNT)
#define TOWN_REPUTATION_COUNT 19
#define ADDICTION_REPUTATION_COUNT 8
typedef enum EditorFolder {
EDITOR_FOLDER_PERKS,
EDITOR_FOLDER_KARMA,
EDITOR_FOLDER_KILLS,
} EditorFolder;
enum {
EDITOR_DERIVED_STAT_ARMOR_CLASS,
EDITOR_DERIVED_STAT_ACTION_POINTS,
EDITOR_DERIVED_STAT_CARRY_WEIGHT,
EDITOR_DERIVED_STAT_MELEE_DAMAGE,
EDITOR_DERIVED_STAT_DAMAGE_RESISTANCE,
EDITOR_DERIVED_STAT_POISON_RESISTANCE,
EDITOR_DERIVED_STAT_RADIATION_RESISTANCE,
EDITOR_DERIVED_STAT_SEQUENCE,
EDITOR_DERIVED_STAT_HEALING_RATE,
EDITOR_DERIVED_STAT_CRITICAL_CHANCE,
EDITOR_DERIVED_STAT_COUNT,
};
enum {
EDITOR_FIRST_PRIMARY_STAT,
EDITOR_HIT_POINTS = 43,
EDITOR_POISONED,
EDITOR_RADIATED,
EDITOR_EYE_DAMAGE,
EDITOR_CRIPPLED_RIGHT_ARM,
EDITOR_CRIPPLED_LEFT_ARM,
EDITOR_CRIPPLED_RIGHT_LEG,
EDITOR_CRIPPLED_LEFT_LEG,
EDITOR_FIRST_DERIVED_STAT,
EDITOR_FIRST_SKILL = EDITOR_FIRST_DERIVED_STAT + EDITOR_DERIVED_STAT_COUNT,
EDITOR_TAG_SKILL = EDITOR_FIRST_SKILL + SKILL_COUNT,
EDITOR_SKILLS,
EDITOR_OPTIONAL_TRAITS,
EDITOR_FIRST_TRAIT,
EDITOR_BUTTONS_COUNT = EDITOR_FIRST_TRAIT + TRAIT_COUNT,
};
enum {
EDITOR_GRAPHIC_BIG_NUMBERS,
EDITOR_GRAPHIC_AGE_MASK,
EDITOR_GRAPHIC_AGE_OFF,
EDITOR_GRAPHIC_DOWN_ARROW_OFF,
EDITOR_GRAPHIC_DOWN_ARROW_ON,
EDITOR_GRAPHIC_NAME_MASK,
EDITOR_GRAPHIC_NAME_ON,
EDITOR_GRAPHIC_NAME_OFF,
EDITOR_GRAPHIC_FOLDER_MASK, // mask for all three folders
EDITOR_GRAPHIC_SEX_MASK,
EDITOR_GRAPHIC_SEX_OFF,
EDITOR_GRAPHIC_SEX_ON,
EDITOR_GRAPHIC_SLIDER, // image containing small plus/minus buttons appeared near selected skill
EDITOR_GRAPHIC_SLIDER_MINUS_OFF,
EDITOR_GRAPHIC_SLIDER_MINUS_ON,
EDITOR_GRAPHIC_SLIDER_PLUS_OFF,
EDITOR_GRAPHIC_SLIDER_PLUS_ON,
EDITOR_GRAPHIC_SLIDER_TRANS_MINUS_OFF,
EDITOR_GRAPHIC_SLIDER_TRANS_MINUS_ON,
EDITOR_GRAPHIC_SLIDER_TRANS_PLUS_OFF,
EDITOR_GRAPHIC_SLIDER_TRANS_PLUS_ON,
EDITOR_GRAPHIC_UP_ARROW_OFF,
EDITOR_GRAPHIC_UP_ARROW_ON,
EDITOR_GRAPHIC_LITTLE_RED_BUTTON_UP,
EDITOR_GRAPHIC_LILTTLE_RED_BUTTON_DOWN,
EDITOR_GRAPHIC_AGE_ON,
EDITOR_GRAPHIC_AGE_BOX, // image containing right and left buttons with age stepper in the middle
EDITOR_GRAPHIC_ATTRIBOX, // ??? black image with two little arrows (up and down) in the right-top corner
EDITOR_GRAPHIC_ATTRIBWN, // ??? not sure where and when it's used
EDITOR_GRAPHIC_CHARWIN, // ??? looks like metal plate
EDITOR_GRAPHIC_DONE_BOX, // metal plate holding DONE button
EDITOR_GRAPHIC_FEMALE_OFF,
EDITOR_GRAPHIC_FEMALE_ON,
EDITOR_GRAPHIC_MALE_OFF,
EDITOR_GRAPHIC_MALE_ON,
EDITOR_GRAPHIC_NAME_BOX, // placeholder for name
EDITOR_GRAPHIC_LEFT_ARROW_UP,
EDITOR_GRAPHIC_LEFT_ARROW_DOWN,
EDITOR_GRAPHIC_RIGHT_ARROW_UP,
EDITOR_GRAPHIC_RIGHT_ARROW_DOWN,
EDITOR_GRAPHIC_BARARRWS, // ??? two arrows up/down with some strange knob at the top, probably for scrollbar
EDITOR_GRAPHIC_OPTIONS_BASE, // options metal plate
EDITOR_GRAPHIC_OPTIONS_BUTTON_OFF,
EDITOR_GRAPHIC_OPTIONS_BUTTON_ON,
EDITOR_GRAPHIC_KARMA_FOLDER_SELECTED, // all three folders with middle folder selected (karma)
EDITOR_GRAPHIC_KILLS_FOLDER_SELECTED, // all theee folders with right folder selected (kills)
EDITOR_GRAPHIC_PERKS_FOLDER_SELECTED, // all three folders with left folder selected (perks)
EDITOR_GRAPHIC_KARMAFDR_PLACEOLDER, // ??? placeholder for traits folder image <- this is comment from intrface.lst
EDITOR_GRAPHIC_TAG_SKILL_BUTTON_OFF,
EDITOR_GRAPHIC_TAG_SKILL_BUTTON_ON,
EDITOR_GRAPHIC_COUNT,
};
typedef struct KarmaEntry {
int gvar;
int art_num;
int name;
int description;
} KarmaEntry;
typedef struct GenericReputationEntry {
int threshold;
int name;
} GenericReputationEntry;
typedef struct TownReputationEntry {
int gvar;
int city;
} TownReputationEntry;
typedef struct STRUCT_56FCB0 {
int field_0;
char* field_4;
} STRUCT_56FCB0;
// TODO: Field order is probably wrong.
typedef struct KillInfo {
const char* name;
int killTypeId;
int kills;
} KillInfo;
extern int _grph_id[50];
extern const unsigned char _copyflag[EDITOR_GRAPHIC_COUNT];
extern const int word_431D3A[EDITOR_DERIVED_STAT_COUNT];
extern const int _StatYpos[7];
extern const int word_431D6C[EDITOR_DERIVED_STAT_COUNT];
extern char byte_431D93[64];
extern const int dword_431DD4[7];
extern const double dbl_50170B;
extern const double dbl_501713;
extern const double dbl_5018F0;
extern const double dbl_5019BE;
extern bool _bk_enable_0;
extern int _skill_cursor;
extern int _slider_y;
extern int characterEditorRemainingCharacterPoints;
extern KarmaEntry* gKarmaEntries;
extern int gKarmaEntriesLength;
extern GenericReputationEntry* gGenericReputationEntries;
extern int gGenericReputationEntriesLength;
extern const TownReputationEntry gTownReputationEntries[TOWN_REPUTATION_COUNT];
extern const int gAddictionReputationVars[ADDICTION_REPUTATION_COUNT];
extern const int gAddictionReputationFrmIds[ADDICTION_REPUTATION_COUNT];
extern int _folder_up_button;
extern int _folder_down_button;
extern char _folder_card_string[256];
extern int _skillsav[SKILL_COUNT];
extern MessageList editorMessageList;
extern STRUCT_56FCB0 _name_sort_list[DIALOG_PICKER_NUM_OPTIONS];
extern int _trait_bids[TRAIT_COUNT];
extern MessageListItem editorMessageListItem;
extern char _old_str1[48];
extern char _old_str2[48];
extern int _tag_bids[SKILL_COUNT];
extern char _name_save[32];
extern Size _GInfo[EDITOR_GRAPHIC_COUNT];
extern CacheEntry* _grph_key[EDITOR_GRAPHIC_COUNT];
extern unsigned char* _grphcpy[EDITOR_GRAPHIC_COUNT];
extern unsigned char* _grphbmp[EDITOR_GRAPHIC_COUNT];
extern int _folder_max_lines;
extern int _folder_line;
extern int _folder_card_fid;
extern int _folder_top_line;
extern char* _folder_card_title;
extern char* _folder_card_title2;
extern int _folder_yoffset;
extern int _folder_karma_top_line;
extern int _folder_highlight_line;
extern char* _folder_card_desc;
extern int _folder_ypos;
extern int _folder_kills_top_line;
extern int _folder_perk_top_line;
extern unsigned char* gEditorPerkBackgroundBuffer;
extern int gEditorPerkWindow;
extern int _SliderPlusID;
extern int _SliderNegID;
extern int _stat_bids_minus[7];
extern unsigned char* characterEditorWindowBuf;
extern int characterEditorWindowHandle;
extern int _stat_bids_plus[7];
extern unsigned char* gEditorPerkWindowBuffer;
extern CritterProtoData _dude_data;
extern unsigned char* characterEditorWindowBackgroundBuf;
extern int _cline;
extern int _oldsline;
extern int _upsent_points_back;
extern int _last_level;
extern int characterEditorWindowOldFont;
extern int _kills_count;
extern CacheEntry* _bck_key;
extern int _hp_back;
extern int _mouse_ypos;
extern int _mouse_xpos;
extern int characterEditorSelectedItem;
extern int characterEditorWindowSelectedFolder;
extern int _frstc_draw1;
extern int _crow;
extern int _frstc_draw2;
extern int _perk_back[PERK_COUNT];
extern unsigned int _repFtime;
extern unsigned int _frame_time;
extern int _old_tags;
extern int _last_level_back;
extern bool gCharacterEditorIsCreationMode;
extern int _tag_skill_back[NUM_TAGGED_SKILLS];
extern int _card_old_fid2;
extern int _card_old_fid1;
extern int _trait_back[3];
extern int _trait_count;
extern int _optrt_count;
extern int _temp_trait[3];
extern int _tagskill_count;
extern int _temp_tag_skill[NUM_TAGGED_SKILLS];
extern char _free_perk_back;
extern unsigned char _free_perk;
extern unsigned char _first_skill_list;
int _editor_design(bool isCreationMode);
int characterEditorWindowInit();
void characterEditorWindowFree();
void _CharEditInit();
int _get_input_str(int win, int cancelKeyCode, char* text, int maxLength, int x, int y, int textColor, int backgroundColor, int flags);
bool _isdoschar(int ch);
char* _strmfe(char* dest, const char* name, const char* ext);
void editorRenderFolders();
void editorRenderPerks();
int _kills_list_comp(const KillInfo* a, const KillInfo* b);
int editorRenderKills();
void characterEditorRenderBigNumber(int x, int y, int flags, int value, int previousValue, int windowHandle);
void editorRenderPcStats();
void editorRenderPrimaryStat(int stat, bool animate, int previousValue);
void editorRenderGender();
void editorRenderAge();
void editorRenderName();
void editorRenderSecondaryStats();
void editorRenderSkills(int a1);
void editorRenderDetails();
int characterEditorEditName();
void _PrintName(unsigned char* buf, int a2);
int characterEditorRunEditAgeDialog();
void characterEditorEditGender();
void characterEditorHandleIncDecPrimaryStat(int eventCode);
int _OptionWindow();
bool characterFileExists(const char* fname);
int characterPrintToFile(const char* fileName);
char* _AddSpaces(char* string, int length);
char* _AddDots(char* string, int length);
void _ResetScreen();
void _RegInfoAreas();
void _SavePlayer();
void _RestorePlayer();
char* _itostndn(int value, char* dest);
int _DrawCard(int graphicId, const char* name, const char* attributes, char* description);
void _FldrButton();
void _InfoButton(int eventCode);
void editorAdjustSkill(int a1);
void characterEditorToggleTaggedSkill(int skill);
void characterEditorWindowRenderTraits();
void characterEditorToggleOptionalTrait(int trait);
void editorRenderKarma();
int _editor_save(File* stream);
int _editor_load(File* stream);
void _editor_reset();
int _UpdateLevel();
void _RedrwDPrks();
int editorSelectPerk();
int _InputPDLoop(int count, void (*refreshProc)());
int _ListDPerks();
void _RedrwDMPrk();
bool editorHandleMutate();
void _RedrwDMTagSkl();
bool editorHandleTag();
void _ListNewTagSkills();
int _ListMyTraits(int a1);
int _name_sort_comp(const void* a1, const void* a2);
int _DrawCard2(int frmId, const char* name, const char* rank, char* description);
void _pop_perks();
int _is_supper_bonus();
int _folder_init();
void _folder_scroll(int direction);
void _folder_clear();
int _folder_print_seperator(const char* string);
bool _folder_print_line(const char* string);
bool editorDrawKillsEntry(const char* name, int kills);
int karmaInit();
void karmaFree();
int karmaEntryCompare(const void* a1, const void* a2);
int genericReputationInit();
void genericReputationFree();
int genericReputationCompare(const void* a1, const void* a2);
#endif /* CHARACTER_EDITOR_H */