name WaitingIcon

This commit is contained in:
Akashi Akira
2023-05-16 21:26:03 +01:00
parent ae6abfb433
commit ed49e366ae
15 changed files with 97 additions and 186 deletions

View File

@@ -546,8 +546,8 @@ gScriptCmdTable: ; 0x020F355C
.word ScrCmd_Unk018A
.word ScrCmd_Unk018B
.word ScrCmd_Unk018C
.word ScrCmd_ShowSaveClock
.word ScrCmd_HideSaveClock
.word ScrCmd_ShowWaitingIcon
.word ScrCmd_HideWaitingIcon
.word ScrCmd_Unk018F
.word ScrCmd_WaitButtonABTime
.word ScrCmd_ChoosePokemonMenu

View File

@@ -421,7 +421,7 @@ FUN_020487E4: ; 0x020487E4
add r0, r4, #0x0
ldr r1, _02048834 ; =0x000003E2
add r0, #0x1c
bl FUN_0200D858
bl WaitingIcon_new
str r0, [r4, #0x30]
pop {r4-r6, pc}
.balign 4

View File

@@ -486,7 +486,7 @@ _0208984C:
add r0, r4, #0x0
ldr r1, _02089898 ; =0x000001E2
add r0, #0x1c
bl FUN_0200D858
bl WaitingIcon_new
str r0, [r4, #0x34]
mov r0, #0x5
str r0, [r4, #0x4]

View File

@@ -701,7 +701,7 @@
.extern FUN_0200D300
.extern DrawFrameAndWindow3
.extern ClearFrameAndWindow3
.extern FUN_0200D858
.extern WaitingIcon_new
.extern FUN_0200DBFC
.extern FUN_0200DC24
.extern FUN_0200DC4C
@@ -2771,8 +2771,8 @@
.extern ScrCmd_Unk003B
.extern ScrCmd_Menu
.extern ScrCmd_YesNoMenu
.extern ScrCmd_ShowSaveClock
.extern ScrCmd_HideSaveClock
.extern ScrCmd_ShowWaitingIcon
.extern ScrCmd_HideWaitingIcon
.extern ScrCmd_Unk0040
.extern ScrCmd_Unk0041
.extern ScrCmd_Unk0042

View File

@@ -234,7 +234,7 @@ _0222F30E:
bl FUN_02003210
ldr r0, [r5, #8]
mov r1, #1
bl FUN_0200D858
bl WaitingIcon_new
ldr r1, _0222F4E0 ; =0x00001024
str r0, [r5, r1]
bl FUN_02033E74
@@ -65184,7 +65184,7 @@ MOD11_0224EBF4: ; 0x0224EBF4
mov r1, #0
bl MOD11_0222FF6C
mov r1, #1
bl FUN_0200D858
bl WaitingIcon_new
add r1, r0, #0
add r0, r5, #0
bl MOD11_022312C8

View File

@@ -1676,7 +1676,7 @@ _02212BA2:
lsl r0, r0, #2
ldr r1, _02212BE4 ; =0x000001E2
add r0, r5, r0
bl FUN_0200D858
bl WaitingIcon_new
mov r1, #6
lsl r1, r1, #6
str r0, [r5, r1]
@@ -1855,7 +1855,7 @@ _02212CEC:
lsl r0, r0, #2
ldr r1, _02212D50 ; =0x000001E2
add r0, r5, r0
bl FUN_0200D858
bl WaitingIcon_new
mov r1, #6
lsl r1, r1, #6
str r0, [r5, r1]
@@ -1921,7 +1921,7 @@ _02212D74:
lsl r0, r0, #2
ldr r1, _02212DD4 ; =0x000001E2
add r0, r5, r0
bl FUN_0200D858
bl WaitingIcon_new
mov r1, #6
lsl r1, r1, #6
str r0, [r5, r1]
@@ -2531,7 +2531,7 @@ _02213226:
lsl r0, r0, #2
ldr r1, _02213278 ; =0x000001E2
add r0, r6, r0
bl FUN_0200D858
bl WaitingIcon_new
mov r1, #6
lsl r1, r1, #6
str r0, [r6, r1]
@@ -6031,7 +6031,7 @@ _02214D76:
lsl r0, r0, #2
ldr r1, _02214E24 ; =0x000001E2
add r0, r4, r0
bl FUN_0200D858
bl WaitingIcon_new
mov r1, #6
lsl r1, r1, #6
str r0, [r4, r1]
@@ -7922,7 +7922,7 @@ _02215CB8:
lsl r0, r0, #2
ldr r1, _02215D1C ; =0x000001E2
add r0, r5, r0
bl FUN_0200D858
bl WaitingIcon_new
mov r1, #6
lsl r1, r1, #6
str r0, [r5, r1]
@@ -8092,7 +8092,7 @@ _02215DCA:
lsl r0, r0, #2
ldr r1, _02215E70 ; =0x000001E2
add r0, r5, r0
bl FUN_0200D858
bl WaitingIcon_new
mov r1, #6
lsl r1, r1, #6
str r0, [r5, r1]

View File

@@ -6503,7 +6503,7 @@ MOD71_02230B88: ; 0x02230B88
ldr r0, _02230B9C ; =0x000005A8
ldr r1, _02230BA0 ; =0x000001D9
add r0, r4, r0
bl FUN_0200D858
bl WaitingIcon_new
ldr r1, _02230BA4 ; =0x000036A8
str r0, [r4, r1]
pop {r4, pc}

View File

@@ -2464,7 +2464,7 @@ MOD80_0222E8BC: ; 0x0222E8BC
ldr r0, _0222E8D0 ; =0x00000E98
mov r1, #1
add r0, r4, r0
bl FUN_0200D858
bl WaitingIcon_new
ldr r1, _0222E8D4 ; =0x00000FD8
str r0, [r4, r1]
pop {r4, pc}

View File

@@ -4322,7 +4322,7 @@ MOD82_0222F700: ; 0x0222F700
lsl r0, r0, #6
add r0, r4, r0
mov r1, #1
bl FUN_0200D858
bl WaitingIcon_new
ldr r1, _0222F720 ; =0x00000EB4
str r0, [r4, r1]
_0222F71C:

View File

@@ -3618,7 +3618,7 @@ _0222F2C4:
add r0, r4, #0
add r0, #0x28
mov r1, #0xa
bl FUN_0200D858
bl WaitingIcon_new
ldr r1, _0222F5E4 ; =0x000034D8
str r0, [r4, r1]
mov r0, #3
@@ -3859,7 +3859,7 @@ _0222F4AA:
add r0, r4, #0
add r0, #0x28
mov r1, #0xa
bl FUN_0200D858
bl WaitingIcon_new
ldr r1, _0222F5E4 ; =0x000034D8
str r0, [r4, r1]
add r0, r4, #0
@@ -4573,7 +4573,7 @@ MOD83_0222FA0C: ; 0x0222FA0C
add r0, r4, #0
add r0, #0x18
mov r1, #1
bl FUN_0200D858
bl WaitingIcon_new
ldr r1, _0222FA40 ; =0x00002994
str r0, [r4, r1]
pop {r4, pc}
@@ -8417,7 +8417,7 @@ MOD83_02231930: ; 0x02231930
ldr r0, _022319C0 ; =0x00002B70
mov r1, #0x13
add r0, r4, r0
bl FUN_0200D858
bl WaitingIcon_new
ldr r1, _022319C4 ; =0x00003CF0
str r0, [r4, r1]
mov r1, #0xad
@@ -10190,7 +10190,7 @@ _0223270E:
ldr r0, _02232780 ; =0x00002B70
mov r1, #0x13
add r0, r5, r0
bl FUN_0200D858
bl WaitingIcon_new
ldr r1, _02232784 ; =0x00003CF0
str r0, [r5, r1]
_02232746:
@@ -18845,7 +18845,7 @@ _02236A10:
ldr r1, _02236B5C ; =0x00000498
add r0, r4, r1
sub r1, #0xc6
bl FUN_0200D858
bl WaitingIcon_new
ldr r1, _02236B60 ; =0x0000E898
str r0, [r4, r1]
mov r0, #0xa
@@ -19162,7 +19162,7 @@ _02236CAE:
ldr r1, _02236DA8 ; =0x00000498
add r0, r4, r1
sub r1, #0xc6
bl FUN_0200D858
bl WaitingIcon_new
ldr r1, _02236DBC ; =0x0000E898
str r0, [r4, r1]
mov r0, #0x15

View File

@@ -596,176 +596,98 @@ THUMB_FUNC void ClearFrameAndWindow3(struct Window *window, u8 param1, BOOL copy
}
}
THUMB_FUNC struct UnkStruct_0200CABC_1 *FUN_0200D858(struct Window *window, u32 param1)
{
THUMB_FUNC WaitingIcon *WaitingIcon_new(struct Window *window, u32 param1) {
u32 heap_id = BgConfig_GetHeapId(window->bgConfig);
void *charptr = BgGetCharPtr(GetWindowBgId(window));
struct UnkStruct_0200CABC_1 *ptr = AllocFromHeap(heap_id, sizeof(struct UnkStruct_0200CABC_1));
memcpy(ptr->unk004[8], charptr + (param1 + 18) * 32, 0x80);
WaitingIcon *waitingIcon = AllocFromHeap(heap_id, sizeof(WaitingIcon));
memcpy(waitingIcon->unk004[8], charptr + (param1 + 18) * 32, 0x80);
void *ptr2 = AllocFromHeap(heap_id, 0x80);
memcpy(ptr2, charptr + (param1 + 10) * 32, 0x20);
memcpy(ptr2 + 0x20, charptr + (param1 + 11) * 32, 0x20);
memcpy(ptr2 + 0x40, charptr + (param1 + 10) * 32, 0x20);
memcpy(ptr2 + 0x60, charptr + (param1 + 11) * 32, 0x20);
for (u8 i = 0; i < 8; i++)
{
memcpy(ptr->unk004[i], ptr2, 0x80);
for (u8 i = 0; i < 8; i++) {
memcpy(waitingIcon->unk004[i], ptr2, 0x80);
}
FreeToHeap(ptr2);
NNSG2dCharacterData *pCharData;
void *r5 = GfGfxLoader_GetCharData(
NARC_GRAPHIC_WINFRAME, NARC_winframe_narc_0023_NCGR, FALSE, &pCharData, heap_id);
BlitRect4Bit(
pCharData->pRawData, 0, 0, 0x10, 0x80, ptr->unk004[0], 0x10, 0x80, 0, 0, 0x10, 0x80);
void *r5 = GfGfxLoader_GetCharData(NARC_GRAPHIC_WINFRAME, NARC_winframe_narc_0023_NCGR, FALSE, &pCharData, heap_id);
BlitRect4Bit(pCharData->pRawData, 0, 0, 0x10, 0x80, waitingIcon->unk004[0], 0x10, 0x80, 0, 0, 0x10, 0x80);
FreeToHeap(r5);
ptr->unk000 = window;
ptr->fillValue = (u16)param1;
ptr->unk486 = 0;
ptr->unk487 = 0;
ptr->unk488 = 0;
waitingIcon->window = window;
waitingIcon->fillValue = (u16)param1;
waitingIcon->unk486 = 0;
waitingIcon->unk487 = 0;
waitingIcon->unk488 = 0;
FUN_0200CA60(FUN_0200DB7C, ptr, 0);
FUN_0200D980(ptr, 1);
FUN_0200CA60(FUN_0200DB7C, waitingIcon, 0);
FUN_0200D980(waitingIcon, 1);
return ptr;
return waitingIcon;
}
THUMB_FUNC void FUN_0200D980(struct UnkStruct_0200CABC_1 *param0, u32 param1)
{
u8 bg_id = GetWindowBgId(param0->unk000);
u8 x = GetWindowX(param0->unk000);
u8 y = GetWindowY(param0->unk000);
u8 width = GetWindowWidth(param0->unk000);
THUMB_FUNC void FUN_0200D980(WaitingIcon *waitingIcon, u32 param1) {
u8 bg_id = GetWindowBgId(waitingIcon->window);
u8 x = GetWindowX(waitingIcon->window);
u8 y = GetWindowY(waitingIcon->window);
u8 width = GetWindowWidth(waitingIcon->window);
if (param1 == 2)
{
BG_LoadCharTilesData(param0->unk000->bgConfig,
bg_id,
(u32 *)param0->unk004[8],
0x80,
(u32)(param0->fillValue + 18));
FillBgTilemapRect(param0->unk000->bgConfig,
bg_id,
(u16)(param0->fillValue + 10),
(u8)(x + width + 1),
(u8)(y + 2),
1,
1,
0x10);
FillBgTilemapRect(param0->unk000->bgConfig,
bg_id,
(u16)(param0->fillValue + 11),
(u8)(x + width + 2),
(u8)(y + 2),
1,
1,
0x10);
FillBgTilemapRect(param0->unk000->bgConfig,
bg_id,
(u16)(param0->fillValue + 10),
(u8)(x + width + 1),
(u8)(y + 3),
1,
1,
0x10);
FillBgTilemapRect(param0->unk000->bgConfig,
bg_id,
(u16)(param0->fillValue + 11),
(u8)(x + width + 2),
(u8)(y + 3),
1,
1,
0x10);
BgCommitTilemapBufferToVram(param0->unk000->bgConfig, bg_id);
if (param1 == 2) {
BG_LoadCharTilesData(waitingIcon->window->bgConfig, bg_id, (u32 *)waitingIcon->unk004[8], 0x80, (u32)(waitingIcon->fillValue + 18));
FillBgTilemapRect(waitingIcon->window->bgConfig, bg_id, (u16)(waitingIcon->fillValue + 10), (u8)(x + width + 1), (u8)(y + 2), 1, 1, 0x10);
FillBgTilemapRect(waitingIcon->window->bgConfig, bg_id, (u16)(waitingIcon->fillValue + 11), (u8)(x + width + 2), (u8)(y + 2), 1, 1, 0x10);
FillBgTilemapRect(waitingIcon->window->bgConfig, bg_id, (u16)(waitingIcon->fillValue + 10), (u8)(x + width + 1), (u8)(y + 3), 1, 1, 0x10);
FillBgTilemapRect(waitingIcon->window->bgConfig, bg_id, (u16)(waitingIcon->fillValue + 11), (u8)(x + width + 2), (u8)(y + 3), 1, 1, 0x10);
BgCommitTilemapBufferToVram(waitingIcon->window->bgConfig, bg_id);
return;
}
BG_LoadCharTilesData(param0->unk000->bgConfig,
bg_id,
(u32 *)param0->unk004[param0->unk487],
0x80,
(u32)(param0->fillValue + 18));
if (param1 != 0)
{
FillBgTilemapRect(param0->unk000->bgConfig,
bg_id,
(u16)(param0->fillValue + 18),
(u8)(x + width + 1),
(u8)(y + 2),
1,
1,
0x10);
FillBgTilemapRect(param0->unk000->bgConfig,
bg_id,
(u16)(param0->fillValue + 19),
(u8)(x + width + 2),
(u8)(y + 2),
1,
1,
0x10);
FillBgTilemapRect(param0->unk000->bgConfig,
bg_id,
(u16)(param0->fillValue + 20),
(u8)(x + width + 1),
(u8)(y + 3),
1,
1,
0x10);
FillBgTilemapRect(param0->unk000->bgConfig,
bg_id,
(u16)(param0->fillValue + 21),
(u8)(x + width + 2),
(u8)(y + 3),
1,
1,
0x10);
BgCommitTilemapBufferToVram(param0->unk000->bgConfig, bg_id);
BG_LoadCharTilesData(waitingIcon->window->bgConfig, bg_id, (u32 *)waitingIcon->unk004[waitingIcon->unk487], 0x80, (u32)(waitingIcon->fillValue + 18));
if (param1 != 0) {
FillBgTilemapRect(waitingIcon->window->bgConfig, bg_id, (u16)(waitingIcon->fillValue + 18), (u8)(x + width + 1), (u8)(y + 2), 1, 1, 0x10);
FillBgTilemapRect(waitingIcon->window->bgConfig, bg_id, (u16)(waitingIcon->fillValue + 19), (u8)(x + width + 2), (u8)(y + 2), 1, 1, 0x10);
FillBgTilemapRect(waitingIcon->window->bgConfig, bg_id, (u16)(waitingIcon->fillValue + 20), (u8)(x + width + 1), (u8)(y + 3), 1, 1, 0x10);
FillBgTilemapRect(waitingIcon->window->bgConfig, bg_id, (u16)(waitingIcon->fillValue + 21), (u8)(x + width + 2), (u8)(y + 3), 1, 1, 0x10);
BgCommitTilemapBufferToVram(waitingIcon->window->bgConfig, bg_id);
}
}
THUMB_FUNC void FUN_0200DB7C(u32 param0, void *param1)
{
struct UnkStruct_0200CABC_1 *r1 = (struct UnkStruct_0200CABC_1 *)param1;
THUMB_FUNC void FUN_0200DB7C(u32 param0, void *param1) {
WaitingIcon *waitingIcon = (WaitingIcon *)param1; //todo: see if this matches using a param
if (r1->unk488 != 0)
{
if (r1->unk488 == 1)
{
FUN_0200D980(r1, 2);
if (waitingIcon->unk488 != 0) {
if (waitingIcon->unk488 == 1) {
FUN_0200D980(waitingIcon, 2);
}
FUN_0200CAB4((s32)param0);
return;
}
r1->unk486++;
if (r1->unk486 == 16)
{
r1->unk486 = 0;
r1->unk487 = (r1->unk487 + 1) & 7;
FUN_0200D980(r1, 0);
waitingIcon->unk486++;
if (waitingIcon->unk486 == 16) {
waitingIcon->unk486 = 0;
waitingIcon->unk487 = (waitingIcon->unk487 + 1) & 7;
FUN_0200D980(waitingIcon, 0);
}
}
THUMB_FUNC void FUN_0200DBE8(u32 param0, void *param1)
{
THUMB_FUNC void FUN_0200DBE8(u32 param0, void *param1) {
FreeToHeap(param1);
FUN_0200CAB4((s32)param0);
}
THUMB_FUNC void FUN_0200DBFC(struct UnkStruct_0200CABC_1 *param0)
{
FUN_0200CA98(FUN_0200DBE8, param0, 0);
param0->unk488 = 1;
THUMB_FUNC void FUN_0200DBFC(WaitingIcon *waitingIcon) {
FUN_0200CA98(FUN_0200DBE8, waitingIcon, 0);
waitingIcon->unk488 = 1;
}
THUMB_FUNC void FUN_0200DC24(struct UnkStruct_0200CABC_1 *param0)
{
FUN_0200CA98(FUN_0200DBE8, param0, 0);
param0->unk488 = 2;
THUMB_FUNC void FUN_0200DC24(WaitingIcon *waitingIcon) {
FUN_0200CA98(FUN_0200DBE8, waitingIcon, 0);
waitingIcon->unk488 = 2;
}
THUMB_FUNC u8 *FUN_0200DC4C(struct BgConfig *bg_config,

View File

@@ -1148,19 +1148,17 @@ THUMB_FUNC static BOOL FUN_0203AB00(struct ScriptContext *ctx)
return TRUE;
}
THUMB_FUNC BOOL ScrCmd_ShowSaveClock(struct ScriptContext *ctx) //018D
{
THUMB_FUNC BOOL ScrCmd_ShowWaitingIcon(struct ScriptContext *ctx) { //018D
struct Window *window = (struct Window *)FieldSysGetAttrAddr(ctx->fieldSystem, SCRIPTENV_WINDOW);
struct UnkStruct_0200CABC_1 **unk2 = (struct UnkStruct_0200CABC_1 **)FieldSysGetAttrAddr(ctx->fieldSystem, 18);
*unk2 = FUN_0200D858(window, 994);
WaitingIcon **waitingIcon = FieldSysGetAttrAddr(ctx->fieldSystem, 18);
*waitingIcon = WaitingIcon_new(window, 994);
return FALSE;
}
THUMB_FUNC BOOL ScrCmd_HideSaveClock(struct ScriptContext *ctx) //018E
THUMB_FUNC BOOL ScrCmd_HideWaitingIcon(struct ScriptContext *ctx) //018E
{
struct UnkStruct_0200CABC_1 **unk = (struct UnkStruct_0200CABC_1 **)FieldSysGetAttrAddr(ctx->fieldSystem, 18);
FUN_0200DBFC(*unk);
WaitingIcon **waitingIcon = FieldSysGetAttrAddr(ctx->fieldSystem, 18);
FUN_0200DBFC(*waitingIcon);
return FALSE;
}

View File

@@ -6,15 +6,14 @@
#include "pokemon.h"
#include "unk_02008DEC.h"
struct UnkStruct_0200CABC_1
{
struct Window *unk000;
typedef struct WaitingIcon {
struct Window *window;
u8 unk004[9][0x80];
u16 fillValue;
u8 unk486;
u8 unk487 : 7;
u8 unk488 : 2;
};
} WaitingIcon;
struct UnkStruct_0200CABC_2
{
@@ -102,24 +101,15 @@ void DrawFrame3(struct BgConfig *bgConfig,
u8 paletteNum,
u16 fillValue);
void DrawWindowCorner(struct Window *window, u16 fillValue, u8 paletteNum);
void DrawFrameAndWindow3(
struct Window *window, BOOL copy_to_vram, u16 fillValue, u8 paletteNum, u8 param4);
void DrawFrameAndWindow3(struct Window *window, BOOL copy_to_vram, u16 fillValue, u8 paletteNum, u8 param4);
void ClearFrameAndWindow3(struct Window *window, u8 param1, BOOL copy_to_vram);
struct UnkStruct_0200CABC_1 *FUN_0200D858(struct Window *window, u32 param1);
void FUN_0200D980(struct UnkStruct_0200CABC_1 *param0, u32 param1);
WaitingIcon *WaitingIcon_new(struct Window *window, u32 param1);
void FUN_0200D980(WaitingIcon *waitingIcon, u32 param1);
void FUN_0200DB7C(u32 param0, void *param1);
void FUN_0200DBE8(u32 param0, void *param1);
void FUN_0200DBFC(struct UnkStruct_0200CABC_1 *param0);
void FUN_0200DC24(struct UnkStruct_0200CABC_1 *param0);
u8 *FUN_0200DC4C(struct BgConfig *bg_config,
u8 bg_id,
u8 param2,
u8 param3,
u8 param4,
u16 param5,
u16 param6,
u8 param7,
s32 param8);
void FUN_0200DBFC(WaitingIcon *waitingIcon);
void FUN_0200DC24(WaitingIcon *waitingIcon);
u8 *FUN_0200DC4C(struct BgConfig *bg_config, u8 bg_id, u8 param2, u8 param3, u8 param4, u16 param5, u16 param6, u8 param7, s32 param8);
u8 *FUN_0200DCA4(struct BgConfig *bg_config,
u8 bg_id,
u8 param2,
@@ -129,8 +119,7 @@ u8 *FUN_0200DCA4(struct BgConfig *bg_config,
struct Pokemon *param6,
s32 param7);
void FUN_0200DCF8(u32 param0, void *param1);
struct UnkStruct_0200CABC_2 *FUN_0200DD70(
struct BgConfig *bg_config, u8 bg_id, u8 param2, u8 param3, u32 param4);
struct UnkStruct_0200CABC_2 *FUN_0200DD70(struct BgConfig *bg_config, u8 bg_id, u8 param2, u8 param3, u32 param4);
void FUN_0200DDAC(struct UnkStruct_0200CABC_2 *param0, u32 param1);
void FUN_0200DDD8(struct UnkStruct_0200CABC_2 *param0);
void FUN_0200DE30(struct UnkStruct_0200CABC_2 *param0, u8 param1, u8 param2);

View File

@@ -108,8 +108,8 @@ BOOL ScrCmd_Unk003A(struct ScriptContext* ctx);
BOOL ScrCmd_Unk003B(struct ScriptContext *ctx);
BOOL ScrCmd_Menu(struct ScriptContext *ctx);
BOOL ScrCmd_YesNoMenu(struct ScriptContext *ctx);
BOOL ScrCmd_ShowSaveClock(struct ScriptContext *ctx);
BOOL ScrCmd_HideSaveClock(struct ScriptContext *ctx);
BOOL ScrCmd_ShowWaitingIcon(struct ScriptContext *ctx);
BOOL ScrCmd_HideWaitingIcon(struct ScriptContext *ctx);
BOOL ScrCmd_Unk0040(struct ScriptContext *ctx);
BOOL ScrCmd_Unk0041(struct ScriptContext *ctx);
BOOL ScrCmd_Unk0042(struct ScriptContext *ctx);

View File

@@ -14,6 +14,7 @@ struct ScriptContext;
typedef u8 (*ScrCmdFunc)(struct ScriptContext *);
typedef u8 Script[];
typedef struct WaitingIcon WaitingIcon; //todo: define and move to another file
struct UnkStruct_020464D4
{
@@ -91,6 +92,7 @@ typedef enum ScriptEnvField {
SCRIPTENV_MESSAGE_FORMAT,
SCRIPTENV_STRING_BUFFER_0,
SCRIPTENV_STRING_BUFFER_1,
SCRIPTENV_WAITING_ICON,
} ScriptEnvField;
#define ScriptReadByte(ctx) (*(ctx->scriptPtr++))