mirror of
https://github.com/pret/pokeheartgold.git
synced 2026-05-10 04:45:27 -05:00
202 lines
5.6 KiB
C
202 lines
5.6 KiB
C
#ifndef POKEHEARTGOLD_SCRIPT_H
|
|
#define POKEHEARTGOLD_SCRIPT_H
|
|
|
|
#include "save.h"
|
|
#include "map_events_internal.h"
|
|
#include "map_matrix.h"
|
|
#include "msgdata.h"
|
|
#include "window.h"
|
|
#include "field_player_avatar.h"
|
|
#include "constants/vars.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 UnkSavStruct80 UnkSavStruct80;
|
|
typedef struct SCRIPTCONTEXT SCRIPTCONTEXT;
|
|
typedef struct UnkSavStruct80_Sub3C UnkSavStruct80_Sub3C;
|
|
|
|
#define Unk80_10_C_MAGIC (222271)
|
|
|
|
typedef struct UnkSavStruct80_Sub10_SubC_Sub54 {
|
|
int unk0;
|
|
int unk4;
|
|
int unk8;
|
|
int unkC;
|
|
int unk10;
|
|
UnkSavStruct80_Sub3C *unk14;
|
|
int unk18;
|
|
} UnkSavStruct80_Sub10_SubC_Sub54;
|
|
|
|
typedef struct UnkSavStruct80_Sub10_SubC {
|
|
u32 check;
|
|
u8 unk_4;
|
|
u8 unk_5;
|
|
u8 unk_6;
|
|
u8 unk_7;
|
|
u8 unk_8;
|
|
u8 unk_9;
|
|
u16 unk_A;
|
|
u32 unk_C;
|
|
u32 unk_10;
|
|
u32 unk_14;
|
|
u32 unk_18;
|
|
u32 unk_1C;
|
|
u32 unk_20;
|
|
u32 unk_24;
|
|
void* unk_28;
|
|
UnkSavStruct80_Sub3C* unk_2C;
|
|
u32 unk_30;
|
|
void* unk_34;
|
|
SCRIPTCONTEXT* unk_38[3];
|
|
MSGFMT* unk_44;
|
|
STRING* unk_48;
|
|
STRING* unk_4C;
|
|
u32 unk_50;
|
|
UnkSavStruct80_Sub10_SubC_Sub54 unk_54[2];
|
|
u16 unk_8C[NUM_SPECIAL_VARS];
|
|
void (*scrctx_end_cb)(UnkSavStruct80* fsys);
|
|
u32 unk_AC;
|
|
u32 unk_B0;
|
|
u32 unk_B4;
|
|
u32 unk_B8;
|
|
WINDOW unk_BC;
|
|
WINDOW unk_CC;
|
|
u32 unk_DC;
|
|
} UnkSavStruct80_Sub10_SubC;
|
|
|
|
enum Unk80_10_C_Field {
|
|
UNK80_10_C_10 = 0,
|
|
UNK80_10_C_14 = 1,
|
|
UNK80_10_C_24 = 2,
|
|
UNK80_10_C_05 = 3,
|
|
UNK80_10_C_06 = 4,
|
|
UNK80_10_C_07 = 5,
|
|
UNK80_10_C_08 = 6,
|
|
UNK80_10_C_09 = 7,
|
|
UNK80_10_C_0A = 8,
|
|
UNK80_10_C_28 = 9,
|
|
UNK80_10_C_2C = 10,
|
|
UNK80_10_C_30 = 11,
|
|
UNK80_10_C_34 = 12,
|
|
UNK80_10_C_SCRCTX_0 = 13,
|
|
UNK80_10_C_SCRCTX_1 = 14,
|
|
UNK80_10_C_SCRCTX_2 = 15,
|
|
UNK80_10_C_MSGFMT = 16,
|
|
UNK80_10_C_STRBUF1 = 17,
|
|
UNK80_10_C_STRBUF2 = 18,
|
|
UNK80_10_C_50 = 19,
|
|
UNK80_10_C_AC = 20,
|
|
UNK80_10_C_B0 = 21,
|
|
UNK80_10_C_B4 = 22,
|
|
UNK80_10_C_B8 = 23,
|
|
UNK80_10_C_0C = 24,
|
|
UNK80_10_C_54_0_00 = 25,
|
|
UNK80_10_C_54_0_04 = 26,
|
|
UNK80_10_C_54_0_08 = 27,
|
|
UNK80_10_C_54_0_0C = 28,
|
|
UNK80_10_C_54_0_10 = 29,
|
|
UNK80_10_C_54_0_14 = 30,
|
|
UNK80_10_C_54_0_18 = 31,
|
|
UNK80_10_C_54_1_00 = 32,
|
|
UNK80_10_C_54_1_04 = 33,
|
|
UNK80_10_C_54_1_08 = 34,
|
|
UNK80_10_C_54_1_0C = 35,
|
|
UNK80_10_C_54_1_10 = 36,
|
|
UNK80_10_C_54_1_14 = 37,
|
|
UNK80_10_C_54_1_18 = 38,
|
|
UNK80_10_C_BC = 39,
|
|
UNK80_10_C_CC = 40,
|
|
UNK80_10_C_DC = 41,
|
|
UNK80_10_C_8C_00 = 42,
|
|
UNK80_10_C_8C_01 = 43,
|
|
UNK80_10_C_8C_02 = 44,
|
|
UNK80_10_C_8C_03 = 45,
|
|
UNK80_10_C_8C_04 = 46,
|
|
UNK80_10_C_8C_05 = 47,
|
|
UNK80_10_C_8C_06 = 48,
|
|
UNK80_10_C_8C_07 = 49,
|
|
UNK80_10_C_8C_08 = 50,
|
|
UNK80_10_C_8C_09 = 51,
|
|
UNK80_10_C_8C_10 = 52,
|
|
UNK80_10_C_8C_11 = 53,
|
|
UNK80_10_C_8C_12 = 54,
|
|
UNK80_10_C_8C_13 = 55,
|
|
};
|
|
|
|
typedef struct UnkSavStruct80_Sub10 {
|
|
u32 unk0;
|
|
u32 unk4;
|
|
u32 unk8;
|
|
void *unkC; // maybe a union? sometimes cast to UnkSavStruct80_Sub10_SubC
|
|
u32 unk10;
|
|
u32 unk14;
|
|
u32 unk18;
|
|
void *unk1C; // size=4
|
|
} UnkSavStruct80_Sub10;
|
|
|
|
typedef struct UnkSavStruct80_Sub20 {
|
|
int unk0;
|
|
} UnkSavStruct80_Sub20;
|
|
|
|
struct UnkSavStruct80 {
|
|
u8 unk0[0x8];
|
|
void* bg_config;
|
|
SAVEDATA* savedata;
|
|
UnkSavStruct80_Sub10* unk10;
|
|
MAP_EVENTS* map_events;
|
|
u8 unk18[0x8];
|
|
UnkSavStruct80_Sub20* unk20;
|
|
u8 unk24[0xC];
|
|
MAPMATRIX* map_matrix;
|
|
u8 unk34[0x8];
|
|
UnkSavStruct80_Sub3C* unk3C;
|
|
FIELD_PLAYER_AVATAR *unk40;
|
|
u8 unk44[0x68];
|
|
u32 unkAC;
|
|
u8 unkB0[0x58];
|
|
}; // size: 0x128
|
|
|
|
typedef struct SCRIPTCONTEXT SCRIPTCONTEXT;
|
|
typedef BOOL (*ScrCmdFunc)(SCRIPTCONTEXT* ctx);
|
|
|
|
struct SCRIPTCONTEXT {
|
|
u8 stack_depth;
|
|
u8 mode;
|
|
u8 comparison_result;
|
|
u8 unk3;
|
|
ScrCmdFunc native_ptr;
|
|
const u8* script_ptr;
|
|
const u8* stack[20];
|
|
const ScrCmdFunc* cmd_table;
|
|
u32 cmd_count;
|
|
u32 data[4];
|
|
UnkSavStruct80_Sub10* unk74;
|
|
MSGDATA* msg_data;
|
|
u8* mapScripts;
|
|
UnkSavStruct80* unk80;
|
|
};
|
|
|
|
void InitScriptContext(SCRIPTCONTEXT* ctx, const ScrCmdFunc* cmd_table, u32 cmd_count);
|
|
BOOL SetupBytecodeScript(SCRIPTCONTEXT* ctx, const u8* ptr);
|
|
void SetupNativeScript(SCRIPTCONTEXT* ctx, ScrCmdFunc ptr);
|
|
void StopScript(SCRIPTCONTEXT* ctx);
|
|
void sub_0203FD68(SCRIPTCONTEXT* ctx, UnkSavStruct80_Sub10 *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
|