Files
robojumper 33efdfeec9 More docs
2025-05-15 19:05:48 +02:00

210 lines
4.8 KiB
C++

#ifndef FI_CONTEXT_H
#define FI_CONTEXT_H
#include "common.h"
struct AnalysisEntry;
class FiAnalysisHandle {
public:
FiAnalysisHandle(AnalysisEntry *entry) : mpEntry(entry) {}
s16 getEquipmentFocus() const;
s16 getAreaIndexForFiAreaName() const;
s32 getSuitabilityPercentageArg() const;
s16 getEquipmentRecommendation() const;
s16 getShieldMessage() const;
s16 getThreatenedShield() const;
bool isValid() const;
private:
enum FiAnalysisEquipmentFocus_e {
FOCUS_COMBAT,
FOCUS_SURVIVAL,
FOCUS_TREASURE,
FOCUS_BALANCED,
};
static FiAnalysisEquipmentFocus_e getCurrentFocus();
AnalysisEntry *mpEntry;
};
class FiContext {
public:
enum KEN8_Button_e {
KEN8_Summary = 0,
KEN8_Hint = 1,
KEN8_Objective = 2,
KEN8_Analysis = 3,
KEN8_PlayTime = 4,
KEN8_Rumors = 5,
KEN8_Other = 6,
KEN8_Nevermind = 7,
KEN8_Advice = 9,
KEN8_None = 10,
};
static void create();
static void initialize(void *data);
static s32 getGlobalFiInfo0(s32);
static u8 rateBattlePerformance(u8 enemyActorId);
/** KEN0 - player progress */
static s16 getNaviTableProgressSummary();
/** KEN1 - hint */
static s16 getFiAdviceHintEntry();
/** KEN2 - objective */
static s16 getObjective();
/* KEN3 - analysis*/
static FiAnalysisHandle getNaviTableEquipmentCheckEntry();
static s32 setTargetedActorTextId(s32 id);
static u16 prepareFiHelpIndex();
bool getIsInFiMainMenu() const {
return mIsInFiMainMenu;
}
static bool getIsInFiMainMenuChecked() {
if (sInstance != nullptr) {
return sInstance->getIsInFiMainMenu();
} else {
return false;
}
}
static void setIsInFiMainMenu(bool val) {
if (sInstance != nullptr) {
sInstance->mIsInFiMainMenu = val;
}
}
static const wchar_t *getMessageForFiInfo(s32 arg) {
return getButtonText(getGlobalFiInfo0(arg));
}
static FiContext *GetInstance() {
return sInstance;
}
static bool getField_0x47() {
if (sInstance != nullptr) {
return sInstance->field_0x47;
} else {
return false;
}
}
static void setField_0x48(bool val) {
if (sInstance != nullptr) {
sInstance->field_0x48 = val;
}
}
static bool getField_0x48() {
if (sInstance != nullptr) {
return sInstance->field_0x48;
} else {
return false;
}
}
static void setField_0x4A(bool val) {
if (sInstance != nullptr) {
sInstance->field_0x4A = val;
}
}
static bool getField_0x4A() {
if (sInstance != nullptr) {
return sInstance->field_0x4A;
} else {
return false;
}
}
static s32 getHelpIndex() {
if (sInstance != nullptr) {
return sInstance->mFiHelpIndex;
} else {
return -1;
}
}
static s32 getTargetActorId() {
if (sInstance != nullptr) {
return sInstance->mTargetActorId;
} else {
return -1;
}
}
static void do_setAdviceOptions(s32 arg) {
if (sInstance != nullptr) {
sInstance->setAdviceOptions(arg);
}
}
static void do_fn_8016CB40() {
if (sInstance != nullptr) {
sInstance->fn_8016CB40();
}
}
static void do_prepareFiCallOptions() {
if (sInstance != nullptr) {
sInstance->prepareFiCallOptions();
}
}
static void do_resetAdviceOptions() {
if (sInstance != nullptr) {
sInstance->resetAdviceOptions();
}
}
void reset();
void resetSaveTimeRelated();
void setAdviceOptions(s32 unused);
void resetAdviceOptions();
static const wchar_t *getButtonText(s32 idx);
private:
static void setTargetActorId(s32 id) {
if (sInstance != nullptr) {
sInstance->mTargetActorId = id;
}
}
static void setHelpIndex(s32 idx) {
if (sInstance != nullptr) {
sInstance->mFiHelpIndex = idx;
}
}
static FiContext *sInstance;
void fn_8016CB40();
void prepareFiCallOptions();
bool isInLeviasFightMaybe();
/* 0x00 */ s32 mFiButtonOptions[10]; // correspond to KEN8 with an offset of +1
/* 0x28 */ s32 field_0x28;
/* 0x2C */ s32 field_0x2C;
/* 0x30 */ s32 field_0x30;
/* 0x34 */ s32 mTargetActorId;
/* 0x38 */ s32 mFiHelpIndex;
/* 0x3C */ u8 mSaveTimeRelated;
/* 0x3D */ u8 field_0x3D[10];
/* 0x47 */ bool field_0x47;
/* 0x48 */ bool field_0x48;
/* 0x49 */ bool field_0x49;
/* 0x4A */ bool field_0x4A;
/* 0x4B */ bool mIsInFiMainMenu;
};
#endif