mirror of
https://github.com/zeldaret/ss
synced 2026-05-23 15:01:38 -04:00
210 lines
4.8 KiB
C++
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
|