321 lines
12 KiB
C
321 lines
12 KiB
C
#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"
|
|
|
|
// TODO: Should be MAX(PERK_COUNT, TRAIT_COUNT).
|
|
#define DIALOG_PICKER_NUM_OPTIONS PERK_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 PerkDialogOption {
|
|
// Depending on the current mode this value is the id of either
|
|
// perk, trait (handling Mutate perk), or skill (handling Tag perk).
|
|
int value;
|
|
char* name;
|
|
} PerkDialogOption;
|
|
|
|
// TODO: Field order is probably wrong.
|
|
typedef struct KillInfo {
|
|
const char* name;
|
|
int killTypeId;
|
|
int kills;
|
|
} KillInfo;
|
|
|
|
extern int gCharacterEditorFrmIds[50];
|
|
extern const unsigned char gCharacterEditorFrmShouldCopy[EDITOR_GRAPHIC_COUNT];
|
|
extern const int gCharacterEditorDerivedStatFrmIds[EDITOR_DERIVED_STAT_COUNT];
|
|
extern const int gCharacterEditorPrimaryStatY[7];
|
|
extern const int gCharacterEditorDerivedStatsMap[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 gCharacterEditorIsoWasEnabled;
|
|
extern int gCharacterEditorCurrentSkill;
|
|
extern int gCharacterEditorSkillValueAdjustmentSliderY;
|
|
extern int gCharacterEditorRemainingCharacterPoints;
|
|
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 gCharacterEditorFolderViewScrollUpBtn;
|
|
extern int gCharacterEditorFolderViewScrollDownBtn;
|
|
|
|
extern char gCharacterEditorFolderCardString[256];
|
|
extern int gCharacterEditorSkillsBackup[SKILL_COUNT];
|
|
extern MessageList gCharacterEditorMessageList;
|
|
extern PerkDialogOption gPerkDialogOptionList[DIALOG_PICKER_NUM_OPTIONS];
|
|
extern int gCharacterEditorOptionalTraitBtns[TRAIT_COUNT];
|
|
extern MessageListItem gCharacterEditorMessageListItem;
|
|
extern char gCharacterEditorCardTitle[48];
|
|
extern char gPerkDialogCardTitle[48];
|
|
extern int gCharacterEditorTagSkillBtns[SKILL_COUNT];
|
|
extern char gCharacterEditorNameBackup[32];
|
|
extern Size gCharacterEditorFrmSize[EDITOR_GRAPHIC_COUNT];
|
|
extern CacheEntry* gCharacterEditorFrmHandle[EDITOR_GRAPHIC_COUNT];
|
|
extern unsigned char* gCharacterEditorFrmCopy[EDITOR_GRAPHIC_COUNT];
|
|
extern unsigned char* gCharacterEditorFrmData[EDITOR_GRAPHIC_COUNT];
|
|
extern int gCharacterEditorFolderViewMaxLines;
|
|
extern int gCharacterEditorFolderViewCurrentLine;
|
|
extern int gCharacterEditorFolderCardFrmId;
|
|
extern int gCharacterEditorFolderViewTopLine;
|
|
extern char* gCharacterEditorFolderCardTitle;
|
|
extern char* gCharacterEditorFolderCardSubtitle;
|
|
extern int gCharacterEditorFolderViewOffsetY;
|
|
extern int gCharacterEditorKarmaFolderTopLine;
|
|
extern int gCharacterEditorFolderViewHighlightedLine;
|
|
extern char* gCharacterEditorFolderCardDescription;
|
|
extern int gCharacterEditorFolderViewNextY;
|
|
extern int gCharacterEditorKillsFolderTopLine;
|
|
extern int gCharacterEditorPerkFolderTopLine;
|
|
extern unsigned char* gPerkDialogBackgroundBuffer;
|
|
extern int gPerkDialogWindow;
|
|
extern int gCharacterEditorSliderPlusBtn;
|
|
extern int gCharacterEditorSliderMinusBtn;
|
|
extern int gCharacterEditorPrimaryStatMinusBtns[7];
|
|
extern unsigned char* gCharacterEditorWindowBuffer;
|
|
extern int gCharacterEditorWindow;
|
|
extern int gCharacterEditorPrimaryStatPlusBtns[7];
|
|
extern unsigned char* gPerkDialogWindowBuffer;
|
|
extern CritterProtoData gCharacterEditorDudeDataBackup;
|
|
extern unsigned char* gCharacterEditorWindowBackgroundBuffer;
|
|
extern int gPerkDialogCurrentLine;
|
|
extern int gPerkDialogPreviousCurrentLine;
|
|
extern int gCharacterEditorUnspentSkillPointsBackup;
|
|
extern int gCharacterEditorLastLevel;
|
|
extern int gCharacterEditorOldFont;
|
|
extern int gCharacterEditorKillsCount;
|
|
extern CacheEntry* gCharacterEditorWindowBackgroundHandle;
|
|
extern int gCharacterEditorHitPointsBackup;
|
|
extern int gCharacterEditorMouseY;
|
|
extern int gCharacterEditorMouseX;
|
|
extern int characterEditorSelectedItem;
|
|
extern int characterEditorWindowSelectedFolder;
|
|
extern bool gCharacterEditorCardDrawn;
|
|
extern int gPerkDialogTopLine;
|
|
extern bool gPerkDialogCardDrawn;
|
|
extern int gCharacterEditorPerksBackup[PERK_COUNT];
|
|
extern unsigned int _repFtime;
|
|
extern unsigned int _frame_time;
|
|
extern int gCharacterEditorOldTaggedSkillCount;
|
|
extern int gCharacterEditorLastLevelBackup;
|
|
extern bool gCharacterEditorIsCreationMode;
|
|
extern int gCharacterEditorTaggedSkillsBackup[NUM_TAGGED_SKILLS];
|
|
extern int gPerkDialogCardFrmId;
|
|
extern int gCharacterEditorCardFrmId;
|
|
extern int gCharacterEditorOptionalTraitsBackup[3];
|
|
extern int gCharacterEditorTempTraitCount;
|
|
extern int gPerkDialogOptionCount;
|
|
extern int gCharacterEditorTempTraits[3];
|
|
extern int gCharacterEditorTaggedSkillCount;
|
|
extern int gCharacterEditorTempTaggedSkills[NUM_TAGGED_SKILLS];
|
|
extern char gCharacterEditorHasFreePerkBackup;
|
|
extern unsigned char gCharacterEditorHasFreePerk;
|
|
extern unsigned char gCharacterEditorIsSkillsFirstDraw;
|
|
|
|
int characterEditorShow(bool isCreationMode);
|
|
int characterEditorWindowInit();
|
|
void characterEditorWindowFree();
|
|
void characterEditorInit();
|
|
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 characterEditorDrawFolders();
|
|
void characterEditorDrawPerksFolder();
|
|
int characterEditorKillsCompare(const void* a1, const void* a2);
|
|
int characterEditorDrawKillsFolder();
|
|
void characterEditorDrawBigNumber(int x, int y, int flags, int value, int previousValue, int windowHandle);
|
|
void characterEditorDrawPcStats();
|
|
void characterEditorDrawPrimaryStat(int stat, bool animate, int previousValue);
|
|
void characterEditorDrawGender();
|
|
void characterEditorDrawAge();
|
|
void characterEditorDrawName();
|
|
void characterEditorDrawDerivedStats();
|
|
void characterEditorDrawSkills(int a1);
|
|
void characterEditorDrawCard();
|
|
int characterEditorEditName();
|
|
void _PrintName(unsigned char* buf, int pitch);
|
|
int characterEditorEditAge();
|
|
void characterEditorEditGender();
|
|
void characterEditorAdjustPrimaryStat(int eventCode);
|
|
int characterEditorShowOptions();
|
|
bool characterFileExists(const char* fname);
|
|
int characterPrintToFile(const char* fileName);
|
|
char* _AddSpaces(char* string, int length);
|
|
char* _AddDots(char* string, int length);
|
|
void characterEditorResetScreen();
|
|
void characterEditorRegisterInfoAreas();
|
|
void characterEditorSavePlayer();
|
|
void characterEditorRestorePlayer();
|
|
char* _itostndn(int value, char* dest);
|
|
int characterEditorDrawCardWithOptions(int graphicId, const char* name, const char* attributes, char* description);
|
|
void characterEditorHandleFolderButtonPressed();
|
|
void characterEditorHandleInfoButtonPressed(int eventCode);
|
|
void characterEditorHandleAdjustSkillButtonPressed(int a1);
|
|
void characterEditorToggleTaggedSkill(int skill);
|
|
void characterEditorDrawOptionalTraits();
|
|
void characterEditorToggleOptionalTrait(int trait);
|
|
void characterEditorDrawKarmaFolder();
|
|
int characterEditorSave(File* stream);
|
|
int characterEditorLoad(File* stream);
|
|
void characterEditorReset();
|
|
int characterEditorUpdateLevel();
|
|
void perkDialogRefreshPerks();
|
|
int perkDialogShow();
|
|
int perkDialogHandleInput(int count, void (*refreshProc)());
|
|
int perkDialogDrawPerks();
|
|
void perkDialogRefreshTraits();
|
|
bool perkDialogHandleMutatePerk();
|
|
void perkDialogRefreshSkills();
|
|
bool perkDialogHandleTagPerk();
|
|
void perkDialogDrawSkills();
|
|
int perkDialogDrawTraits(int a1);
|
|
int perkDialogOptionCompare(const void* a1, const void* a2);
|
|
int perkDialogDrawCard(int frmId, const char* name, const char* rank, char* description);
|
|
void _pop_perks();
|
|
int _is_supper_bonus();
|
|
int characterEditorFolderViewInit();
|
|
void characterEditorFolderViewScroll(int direction);
|
|
void characterEditorFolderViewClear();
|
|
int characterEditorFolderViewDrawHeading(const char* string);
|
|
bool characterEditorFolderViewDrawString(const char* string);
|
|
bool characterEditorFolderViewDrawKillsEntry(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);
|
|
|
|
void customKarmaFolderInit();
|
|
void customKarmaFolderFree();
|
|
int customKarmaFolderGetFrmId();
|
|
|
|
#endif /* CHARACTER_EDITOR_H */
|