pokeheartgold/include/script.h
2023-05-25 07:20:55 +01:00

190 lines
5.5 KiB
C

#ifndef POKEHEARTGOLD_SCRIPT_H
#define POKEHEARTGOLD_SCRIPT_H
#include "map_events_internal.h"
#include "msgdata.h"
#include "window.h"
#include "field_player_avatar.h"
#include "gear_phone.h"
#include "save_pokegear.h"
#include "bug_contest_internal.h"
#include "constants/vars.h"
#include "overlay_manager.h"
#include "unk_0200E320.h"
#include "list_menu_2d.h"
#include "render_window.h"
#include "unk_02022D74.h"
#include "field_system.h"
#include "render_window.h"
#define SCRIPT_MODE_STOPPED 0
#define SCRIPT_MODE_BYTECODE 1
#define SCRIPT_MODE_NATIVE 2
#define SCRIPT_COMPARISON_RESULT_LESS 0
#define SCRIPT_COMPARISON_RESULT_EQUAL 1
#define SCRIPT_COMPARISON_RESULT_GREATER 2
#define ScriptReadByte(ctx) *(ctx->script_ptr++)
typedef struct SCRIPTCONTEXT SCRIPTCONTEXT;
#define Unk80_10_C_MAGIC (222271)
typedef struct EngagedTrainer {
int unk0;
int unk4;
int unk8;
int trainerId;
int encounterType; // 0: single trainer; 1: double-battle trainer; 2: two trainers
LocalMapObject *overworldEvent;
int unk18;
} EngagedTrainer;
typedef struct _NPC_TRADE_WORK NPC_TRADE_WORK;
typedef struct ScriptEnvironment {
u32 check;
u8 state;
u8 textPrinterNum;
u8 activeMovementCounter;
u8 unk_7;
u8 unk_8;
u8 activeScriptContextCount;
u16 activeScriptNumber;
u32 battleWinFlag;
u32 unk_10;
WINDOW unk_14;
struct ListMenu2D *listMenu2D;
int facingDirection;
LocalMapObject *lastInteracted;
u32 cameraTarget;
LocalMapObject *unk_34;
SCRIPTCONTEXT *scriptContexts[3];
MessageFormat *msgfmt;
STRING *stringBuffer0;
STRING *stringBuffer1;
WaitingIcon *waitingIcon;
EngagedTrainer engagedTrainers[2];
u16 specialVars[NUM_SPECIAL_VARS];
void (*scrctx_end_cb)(FieldSystem *fsys);
void *runningAppData;
void *miscDataPtr;
void *unk_B4;
void *unk_B8; //PlayerMovementState
WINDOW unk_BC;
WINDOW moneyBox;
struct SaveStatsPrinter *unk_DC;
} ScriptEnvironment;
typedef enum ScriptEnvField {
SCRIPTENV_MENU_WINDOW,
SCRIPTENV_WINDOW,
SCRIPTENV_LIST_MENU_2D,
SCRIPTENV_TEXT_PRINTER_NUMBER,
SCRIPTENV_ACTIVE_MOVEMENT_COUNTER,
SCRIPTENV_FIELD_07,
SCRIPTENV_FIELD_08,
SCRIPTENV_ACTIVE_SCRIPT_CONTEXT_COUNT,
SCRIPTENV_ACTIVE_SCRIPT_NUMBER,
SCRIPTENV_FACING_DIRECTION,
SCRIPTENV_LAST_INTERACTED,
SCRIPTENV_CAMERA_TARGET,
SCRIPTENV_FIELD_34,
SCRIPTENV_SCRIPT_CONTEXT_0,
SCRIPTENV_SCRIPT_CONTEXT_1,
SCRIPTENV_SCRIPT_CONTEXT_2,
SCRIPTENV_MESSAGE_FORMAT,
SCRIPTENV_STRING_BUFFER_0,
SCRIPTENV_STRING_BUFFER_1,
SCRIPTENV_WAITING_ICON,
SCRIPTENV_RUNNING_APP_DATA,
SCRIPTENV_MISC_DATA_PTR,
SCRIPTENV_FIELD_B4,
SCRIPTENV_FIELD_B8,
SCRIPTENV_BATTLE_WIN_FLAG,
SCRIPTENV_ENGAGED_TRAINER_0_FIELD_00,
SCRIPTENV_ENGAGED_TRAINER_0_FIELD_04,
SCRIPTENV_ENGAGED_TRAINER_0_FIELD_08,
SCRIPTENV_ENGAGED_TRAINER_0_ID,
SCRIPTENV_ENGAGED_TRAINER_0_ENCOUNTER_TYPE,
SCRIPTENV_ENGAGED_TRAINER_0_EVENT,
SCRIPTENV_ENGAGED_TRAINER_0_FIELD_18,
SCRIPTENV_ENGAGED_TRAINER_1_FIELD_00,
SCRIPTENV_ENGAGED_TRAINER_1_FIELD_04,
SCRIPTENV_ENGAGED_TRAINER_1_FIELD_08,
SCRIPTENV_ENGAGED_TRAINER_1_ID,
SCRIPTENV_ENGAGED_TRAINER_1_ENCOUNTER_TYPE,
SCRIPTENV_ENGAGED_TRAINER_1_EVENT,
SCRIPTENV_ENGAGED_TRAINER_1_FIELD_18,
SCRIPTENV_BC = 39,
SCRIPTENV_MONEY_BOX = 40,
SCRIPTENV_DC = 41,
SCRIPTENV_SPECIAL_VAR_8000 = 42,
SCRIPTENV_SPECIAL_VAR_8001 = 43,
SCRIPTENV_SPECIAL_VAR_8002 = 44,
SCRIPTENV_SPECIAL_VAR_8003 = 45,
SCRIPTENV_SPECIAL_VAR_8004 = 46,
SCRIPTENV_SPECIAL_VAR_8005 = 47,
SCRIPTENV_SPECIAL_VAR_8006 = 48,
SCRIPTENV_SPECIAL_VAR_8007 = 49,
SCRIPTENV_SPECIAL_VAR_8008 = 50,
SCRIPTENV_SPECIAL_VAR_8009 = 51,
SCRIPTENV_SPECIAL_VAR_800A = 52,
SCRIPTENV_SPECIAL_VAR_800B = 53,
SCRIPTENV_SPECIAL_VAR_RESULT = 54,
SCRIPTENV_SPECIAL_VAR_LAST_TALKED = 55,
} ScriptEnvField;
struct UnkStruct_020FC5CC {
u32 unk0_00:4;
u32 unk0_04:4;
u32 unk0_08:4;
u32 unk0_0C:4;
u32 unk0_10:4;
u32 unk0_14:4;
u32 unk0_18:8;
u8 unk_4;
u8 unk_5;
u8 unk_6;
};
struct UnkStruct_02059E1C;
struct UnkStruct_0205AC88;
typedef BOOL (*ScrCmdFunc)(SCRIPTCONTEXT *ctx);
struct SCRIPTCONTEXT {
u8 stackDepth;
u8 mode;
u8 comparisonResult;
u8 id;
ScrCmdFunc native_ptr;
const u8 *script_ptr;
const u8 *stack[20];
const ScrCmdFunc *cmdTable;
u32 cmd_count;
u32 data[4];
TaskManager *taskman;
MSGDATA *msgdata;
u8 *mapScripts;
FieldSystem *fsys;
};
void InitScriptContext(SCRIPTCONTEXT *ctx, const ScrCmdFunc *cmd_table, u32 cmd_count);
BOOL SetupBytecodeScript(SCRIPTCONTEXT *ctx, const u8 *ptr);
void SetupNativeScript(SCRIPTCONTEXT *ctx, ScrCmdFunc ptr);
BOOL ScrNative_WaitApplication_DestroyTaskData(SCRIPTCONTEXT *ctx);
void StopScript(SCRIPTCONTEXT *ctx);
void sub_0203FD68(SCRIPTCONTEXT *ctx, TaskManager *unk);
BOOL RunScriptCommand(SCRIPTCONTEXT *ctx);
BOOL ScriptPush(SCRIPTCONTEXT *ctx, const u8 *ptr);
const u8 *ScriptPop(SCRIPTCONTEXT *ctx);
void ScriptJump(SCRIPTCONTEXT *ctx, const u8 *ptr);
void ScriptCall(SCRIPTCONTEXT *ctx, const u8 *ptr);
void ScriptReturn(SCRIPTCONTEXT *ctx);
u16 ScriptReadHalfword(SCRIPTCONTEXT *ctx);
u32 ScriptReadWord(SCRIPTCONTEXT *ctx);
#endif