safari_zone.c (#94)

* about halfway through with safari_zone.c

* Figured out more of UnkSafariZoneStruct

* Finished safari_zone.c
This commit is contained in:
fl4shk
2016-11-09 02:51:59 -05:00
committed by YamaArashi
parent ed1f329d16
commit 926ecbe822
5 changed files with 309 additions and 550 deletions

1
.gitignore vendored
View File

@@ -31,5 +31,6 @@ types_*.taghl
*.swp
*.swo
*.s.old
*.s.old2
*.dump
*.sa*

View File

@@ -1,544 +0,0 @@
.include "constants/gba_constants.inc"
.include "constants/species_constants.inc"
.include "asm/macros.inc"
.syntax unified
.text
thumb_func_start GetSafariZoneFlag
GetSafariZoneFlag: @ 80C8184
push {lr}
ldr r0, _080C8194 @ =0x0000082c
bl FlagGet
lsls r0, 24
lsrs r0, 24
pop {r1}
bx r1
.align 2, 0
_080C8194: .4byte 0x0000082c
thumb_func_end GetSafariZoneFlag
thumb_func_start SetSafariZoneFlag
SetSafariZoneFlag: @ 80C8198
push {lr}
ldr r0, _080C81A4 @ =0x0000082c
bl FlagSet
pop {r0}
bx r0
.align 2, 0
_080C81A4: .4byte 0x0000082c
thumb_func_end SetSafariZoneFlag
thumb_func_start ResetSafariZoneFlag
ResetSafariZoneFlag: @ 80C81A8
push {lr}
ldr r0, _080C81B4 @ =0x0000082c
bl FlagReset
pop {r0}
bx r0
.align 2, 0
_080C81B4: .4byte 0x0000082c
thumb_func_end ResetSafariZoneFlag
thumb_func_start sub_80C81B8
sub_80C81B8: @ 80C81B8
push {lr}
movs r0, 0x11
bl sav12_xor_increment
bl SetSafariZoneFlag
bl sub_80C82D8
ldr r1, _080C81DC @ =gUnknown_02038808
movs r0, 0x1E
strb r0, [r1]
ldr r1, _080C81E0 @ =gUnknown_0203880A
movs r2, 0xFA
lsls r2, 1
adds r0, r2, 0
strh r0, [r1]
pop {r0}
bx r0
.align 2, 0
_080C81DC: .4byte gUnknown_02038808
_080C81E0: .4byte gUnknown_0203880A
thumb_func_end sub_80C81B8
thumb_func_start sub_80C81E4
sub_80C81E4: @ 80C81E4
push {lr}
bl ResetSafariZoneFlag
bl sub_80C82D8
ldr r1, _080C8200 @ =gUnknown_02038808
movs r0, 0
strb r0, [r1]
ldr r1, _080C8204 @ =gUnknown_0203880A
movs r0, 0
strh r0, [r1]
pop {r0}
bx r0
.align 2, 0
_080C8200: .4byte gUnknown_02038808
_080C8204: .4byte gUnknown_0203880A
thumb_func_end sub_80C81E4
thumb_func_start safari_step
safari_step: @ 80C8208
push {lr}
bl GetSafariZoneFlag
cmp r0, 0
beq _080C8224
bl sub_80C8508
ldr r1, _080C8228 @ =gUnknown_0203880A
ldrh r0, [r1]
subs r0, 0x1
strh r0, [r1]
lsls r0, 16
cmp r0, 0
beq _080C822C
_080C8224:
movs r0, 0
b _080C8234
.align 2, 0
_080C8228: .4byte gUnknown_0203880A
_080C822C:
ldr r0, _080C8238 @ =gUnknown_081C3448
bl ScriptContext1_SetupScript
movs r0, 0x1
_080C8234:
pop {r1}
bx r1
.align 2, 0
_080C8238: .4byte gUnknown_081C3448
thumb_func_end safari_step
thumb_func_start sub_80C823C
sub_80C823C: @ 80C823C
push {lr}
ldr r0, _080C8248 @ =gUnknown_081C342D
bl ScriptContext1_SetupScript
pop {r0}
bx r0
.align 2, 0
_080C8248: .4byte gUnknown_081C342D
thumb_func_end sub_80C823C
thumb_func_start sub_80C824C
sub_80C824C: @ 80C824C
push {lr}
ldr r0, _080C8260 @ =gUnknown_02038808
ldrb r0, [r0]
cmp r0, 0
beq _080C8268
ldr r0, _080C8264 @ =c2_exit_to_overworld_2_switch
bl SetMainCallback2
b _080C82B0
.align 2, 0
_080C8260: .4byte gUnknown_02038808
_080C8264: .4byte c2_exit_to_overworld_2_switch
_080C8268:
ldr r0, _080C8288 @ =gUnknown_02024D26
ldrb r0, [r0]
cmp r0, 0x8
bne _080C829C
ldr r0, _080C828C @ =gUnknown_081C340A
bl ScriptContext2_RunNewScript
bl warp_in
ldr r1, _080C8290 @ =gUnknown_0300485C
ldr r0, _080C8294 @ =sub_8080E44
str r0, [r1]
ldr r0, _080C8298 @ =CB2_LoadMap
bl SetMainCallback2
b _080C82B0
.align 2, 0
_080C8288: .4byte gUnknown_02024D26
_080C828C: .4byte gUnknown_081C340A
_080C8290: .4byte gUnknown_0300485C
_080C8294: .4byte sub_8080E44
_080C8298: .4byte CB2_LoadMap
_080C829C:
cmp r0, 0x7
bne _080C82B0
ldr r0, _080C82B4 @ =gUnknown_081C3459
bl ScriptContext1_SetupScript
bl ScriptContext1_Stop
ldr r0, _080C82B8 @ =c2_exit_to_overworld_1_continue_scripts_restart_music
bl SetMainCallback2
_080C82B0:
pop {r0}
bx r0
.align 2, 0
_080C82B4: .4byte gUnknown_081C3459
_080C82B8: .4byte c2_exit_to_overworld_1_continue_scripts_restart_music
thumb_func_end sub_80C824C
thumb_func_start sub_80C82BC
sub_80C82BC: @ 80C82BC
push {lr}
lsls r0, 24
lsrs r0, 20
ldr r1, _080C82D4 @ =gUnknown_0203880C
adds r0, r1
movs r1, 0
movs r2, 0x10
bl memset
pop {r0}
bx r0
.align 2, 0
_080C82D4: .4byte gUnknown_0203880C
thumb_func_end sub_80C82BC
thumb_func_start sub_80C82D8
sub_80C82D8: @ 80C82D8
push {lr}
ldr r0, _080C82E8 @ =gUnknown_0203880C
movs r1, 0
movs r2, 0xA0
bl memset
pop {r0}
bx r0
.align 2, 0
_080C82E8: .4byte gUnknown_0203880C
thumb_func_end sub_80C82D8
thumb_func_start sub_80C82EC
sub_80C82EC: @ 80C82EC
push {r4-r6,lr}
sub sp, 0x4
mov r4, sp
adds r4, 0x2
mov r0, sp
adds r1, r4, 0
bl GetXYCoordsOneStepInFrontOfPlayer
movs r3, 0
adds r5, r4, 0
ldr r4, _080C8344 @ =gSaveBlock1
_080C8302:
ldr r1, _080C8348 @ =gUnknown_0203880C
lsls r0, r3, 4
adds r2, r0, r1
movs r1, 0x5
ldrsb r1, [r4, r1]
movs r0, 0x4
ldrsb r0, [r2, r0]
cmp r1, r0
bne _080C8358
mov r0, sp
movs r6, 0
ldrsh r1, [r2, r6]
movs r6, 0
ldrsh r0, [r0, r6]
cmp r1, r0
bne _080C8358
movs r0, 0x2
ldrsh r1, [r2, r0]
movs r6, 0
ldrsh r0, [r5, r6]
cmp r1, r0
bne _080C8358
ldr r0, _080C834C @ =gScriptResult
strh r3, [r0]
ldr r1, _080C8350 @ =gUnknown_083F7EB8
ldrb r0, [r2, 0x8]
lsls r0, 2
adds r0, r1
ldr r1, [r0]
ldr r0, _080C8354 @ =gStringVar1
bl StringCopy
b _080C836A
.align 2, 0
_080C8344: .4byte gSaveBlock1
_080C8348: .4byte gUnknown_0203880C
_080C834C: .4byte gScriptResult
_080C8350: .4byte gUnknown_083F7EB8
_080C8354: .4byte gStringVar1
_080C8358:
adds r0, r3, 0x1
lsls r0, 16
lsrs r3, r0, 16
cmp r3, 0x9
bls _080C8302
ldr r1, _080C8374 @ =gScriptResult
ldr r2, _080C8378 @ =0x0000ffff
adds r0, r2, 0
strh r0, [r1]
_080C836A:
add sp, 0x4
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080C8374: .4byte gScriptResult
_080C8378: .4byte 0x0000ffff
thumb_func_end sub_80C82EC
thumb_func_start sub_80C837C
sub_80C837C: @ 80C837C
push {r4-r7,lr}
sub sp, 0x4
mov r4, sp
adds r4, 0x2
mov r0, sp
adds r1, r4, 0
bl PlayerGetDestCoords
movs r5, 0
adds r6, r4, 0
ldr r0, _080C83E8 @ =gSaveBlock1
movs r7, 0x5
ldrsb r7, [r0, r7]
mov r4, sp
ldr r0, _080C83EC @ =gUnknown_0203880C
mov r12, r0
_080C839C:
lsls r0, r5, 4
mov r1, r12
adds r2, r0, r1
movs r0, 0x4
ldrsb r0, [r2, r0]
cmp r7, r0
bne _080C83F4
ldrh r0, [r4]
ldrh r1, [r2]
subs r0, r1
strh r0, [r4]
adds r3, r6, 0
ldrh r0, [r3]
ldrh r1, [r2, 0x2]
subs r0, r1
strh r0, [r3]
movs r2, 0
ldrsh r0, [r4, r2]
cmp r0, 0
bge _080C83C8
negs r0, r0
strh r0, [r4]
_080C83C8:
movs r2, 0
ldrsh r0, [r3, r2]
cmp r0, 0
bge _080C83D4
negs r0, r0
strh r0, [r3]
_080C83D4:
movs r2, 0
ldrsh r0, [r4, r2]
movs r2, 0
ldrsh r1, [r6, r2]
adds r0, r1
cmp r0, 0x5
bgt _080C83F4
ldr r0, _080C83F0 @ =gScriptResult
strh r5, [r0]
b _080C8406
.align 2, 0
_080C83E8: .4byte gSaveBlock1
_080C83EC: .4byte gUnknown_0203880C
_080C83F0: .4byte gScriptResult
_080C83F4:
adds r0, r5, 0x1
lsls r0, 16
lsrs r5, r0, 16
cmp r5, 0x9
bls _080C839C
ldr r1, _080C8410 @ =gScriptResult
ldr r2, _080C8414 @ =0x0000ffff
adds r0, r2, 0
strh r0, [r1]
_080C8406:
add sp, 0x4
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080C8410: .4byte gScriptResult
_080C8414: .4byte 0x0000ffff
thumb_func_end sub_80C837C
thumb_func_start unref_sub_80C8418
unref_sub_80C8418: @ 80C8418
push {lr}
bl sub_80C82EC
ldr r2, _080C8434 @ =gScriptResult
ldrh r1, [r2]
ldr r0, _080C8438 @ =0x0000ffff
cmp r1, r0
beq _080C8440
adds r0, r1, 0
lsls r0, 4
ldr r1, _080C843C @ =gUnknown_02038814
adds r0, r1
b _080C8442
.align 2, 0
_080C8434: .4byte gScriptResult
_080C8438: .4byte 0x0000ffff
_080C843C: .4byte gUnknown_02038814
_080C8440:
movs r0, 0
_080C8442:
pop {r1}
bx r1
thumb_func_end unref_sub_80C8418
thumb_func_start sub_80C8448
sub_80C8448: @ 80C8448
push {lr}
bl sub_80C837C
ldr r2, _080C8464 @ =gScriptResult
ldrh r1, [r2]
ldr r0, _080C8468 @ =0x0000ffff
cmp r1, r0
beq _080C8470
adds r0, r1, 0
lsls r0, 4
ldr r1, _080C846C @ =gUnknown_02038814
adds r0, r1
b _080C8472
.align 2, 0
_080C8464: .4byte gScriptResult
_080C8468: .4byte 0x0000ffff
_080C846C: .4byte gUnknown_02038814
_080C8470:
movs r0, 0
_080C8472:
pop {r1}
bx r1
thumb_func_end sub_80C8448
thumb_func_start sub_80C8478
sub_80C8478: @ 80C8478
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
sub sp, 0x4
lsls r0, 24
movs r2, 0
ldr r3, _080C84E8 @ =gUnknown_0203880C
mov r6, sp
adds r6, 0x2
ldr r7, _080C84EC @ =gSaveBlock1
movs r1, 0x8
adds r1, r3
mov r9, r1
movs r4, 0xFF
lsls r4, 3
adds r1, r7, r4
lsrs r0, 21
adds r0, r1
mov r8, r0
_080C84A0:
lsls r5, r2, 4
adds r4, r5, r3
movs r0, 0x4
ldrsb r0, [r4, r0]
cmp r0, 0
bne _080C84F0
movs r1, 0
ldrsh r0, [r4, r1]
cmp r0, 0
bne _080C84F0
movs r1, 0x2
ldrsh r0, [r4, r1]
cmp r0, 0
bne _080C84F0
mov r0, sp
adds r1, r6, 0
bl GetXYCoordsOneStepInFrontOfPlayer
ldrb r0, [r7, 0x5]
strb r0, [r4, 0x4]
mov r3, r9
adds r2, r5, r3
mov r3, r8
ldr r0, [r3]
ldr r1, [r3, 0x4]
str r0, [r2]
str r1, [r2, 0x4]
movs r0, 0x64
strb r0, [r4, 0x5]
mov r0, sp
ldrh r0, [r0]
strh r0, [r4]
ldrh r0, [r6]
strh r0, [r4, 0x2]
b _080C84FA
.align 2, 0
_080C84E8: .4byte gUnknown_0203880C
_080C84EC: .4byte gSaveBlock1
_080C84F0:
adds r0, r2, 0x1
lsls r0, 24
lsrs r2, r0, 24
cmp r2, 0x9
bls _080C84A0
_080C84FA:
add sp, 0x4
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_80C8478
thumb_func_start sub_80C8508
sub_80C8508: @ 80C8508
push {r4,r5,lr}
movs r4, 0
ldr r5, _080C8538 @ =gUnknown_0203880C
_080C850E:
lsls r0, r4, 4
adds r1, r0, r5
ldrb r0, [r1, 0x5]
cmp r0, 0
beq _080C8528
subs r0, 0x1
strb r0, [r1, 0x5]
lsls r0, 24
cmp r0, 0
bne _080C8528
adds r0, r4, 0
bl sub_80C82BC
_080C8528:
adds r0, r4, 0x1
lsls r0, 24
lsrs r4, r0, 24
cmp r4, 0x9
bls _080C850E
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080C8538: .4byte gUnknown_0203880C
thumb_func_end sub_80C8508
thumb_func_start unref_sub_80C853C
unref_sub_80C853C: @ 80C853C
push {lr}
bl sub_80C82EC
ldr r3, _080C8564 @ =gScriptResult
ldrh r1, [r3]
ldr r0, _080C8568 @ =0x0000ffff
cmp r1, r0
beq _080C8574
ldr r0, _080C856C @ =gStringVar2
ldr r2, _080C8570 @ =gUnknown_0203880C
lsls r1, 4
adds r1, r2
ldrb r1, [r1, 0x5]
movs r2, 0x2
movs r3, 0x3
bl ConvertIntToDecimalStringN
movs r0, 0x1
b _080C8576
.align 2, 0
_080C8564: .4byte gScriptResult
_080C8568: .4byte 0x0000ffff
_080C856C: .4byte gStringVar2
_080C8570: .4byte gUnknown_0203880C
_080C8574:
movs r0, 0
_080C8576:
pop {r1}
bx r1
thumb_func_end unref_sub_80C853C
.align 2, 0 @ Don't pad with nop.

View File

@@ -135,7 +135,7 @@ SECTIONS {
src/truck_scene.o(.text);
asm/porthole.o(.text);
asm/rotating_gate.o(.text);
asm/safari_zone.o(.text);
src/safari_zone.o(.text);
asm/contest_link_80C857C.o(.text);
asm/item_use.o(.text);
asm/battle_anim_80CA710.o(.text);

305
src/safari_zone.c Normal file
View File

@@ -0,0 +1,305 @@
#include "global.h"
#include "flag.h"
#include "main.h"
#include "script.h"
#include "string_util.h"
#define FLAG_ID_SAFARI_ZONE 0x082C
struct UnkSafariZoneStruct
{
/*0x00*/ s16 x;
/*0x02*/ s16 y;
/*0x04*/ s8 mapNum;
/*0x05*/ u8 counter;
/*0x06*/ u8 field_4;
/*0x07*/ u8 field_5;
/*0x08*/ struct Pokeblock pokeblock;
};
void ClearEveryUnkSafariZoneStruct(void);
void sub_80C8508(void);
extern void c2_exit_to_overworld_2_switch(void);
extern void c2_exit_to_overworld_1_continue_scripts_restart_music(void);
extern void sub_8080E44(void);
extern void CB2_LoadMap(void);
extern void sav12_xor_increment(u8);
extern void warp_in(void);
extern void GetXYCoordsOneStepInFrontOfPlayer(void *, void *);
extern void PlayerGetDestCoords(u16 *, u16 *);
extern u8 gUnknown_02024D26;
extern u8 gUnknown_02038808;
extern u16 gUnknown_0203880A;
extern struct UnkSafariZoneStruct gUnkSafariZoneStructArr[10];
extern void (*gUnknown_0300485C)(void);
extern u8 gUnknown_081C340A;
extern u8 gUnknown_081C342D;
extern u8 gUnknown_081C3448;
extern u8 gUnknown_081C3459;
extern u8 *gUnknown_083F7EB8[];
extern u16 gScriptResult;
bool32 GetSafariZoneFlag(void)
{
bool8 ret = FlagGet(FLAG_ID_SAFARI_ZONE);
return ret;
}
void SetSafariZoneFlag(void)
{
FlagSet(FLAG_ID_SAFARI_ZONE);
}
void ResetSafariZoneFlag(void)
{
FlagReset(FLAG_ID_SAFARI_ZONE);
}
void sub_80C81B8(void)
{
sav12_xor_increment(0x11);
SetSafariZoneFlag();
ClearEveryUnkSafariZoneStruct();
gUnknown_02038808 = 0x1E;
gUnknown_0203880A = 0x1F4;
}
void sub_80C81E4(void)
{
ResetSafariZoneFlag();
ClearEveryUnkSafariZoneStruct();
gUnknown_02038808 = 0;
gUnknown_0203880A = 0;
}
bool8 safari_step(void)
{
if (GetSafariZoneFlag() == FALSE)
{
return FALSE;
}
sub_80C8508();
if (!(--gUnknown_0203880A))
{
ScriptContext1_SetupScript(&gUnknown_081C3448);
return TRUE;
}
return FALSE;
}
void sub_80C823C(void)
{
ScriptContext1_SetupScript(&gUnknown_081C342D);
}
void sub_80C824C(void)
{
if (gUnknown_02038808 != 0)
{
SetMainCallback2(c2_exit_to_overworld_2_switch);
}
else if (gUnknown_02024D26 == 8)
{
ScriptContext2_RunNewScript(&gUnknown_081C340A);
warp_in();
gUnknown_0300485C = sub_8080E44;
SetMainCallback2(CB2_LoadMap);
}
else if (gUnknown_02024D26 == 7)
{
ScriptContext1_SetupScript(&gUnknown_081C3459);
ScriptContext1_Stop();
SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
}
}
void ClearSingleUnkSafariZoneStruct(u8 index)
{
memset(&gUnkSafariZoneStructArr[index], 0,
sizeof(struct UnkSafariZoneStruct));
}
void ClearEveryUnkSafariZoneStruct(void)
{
// 10 is the number of struct UnkSafariZoneStruct's in
// gUnkSafariZoneStructArr. It might be a good idea to create a #define
// for it.
memset(gUnkSafariZoneStructArr, 0, sizeof(struct UnkSafariZoneStruct)
* 10);
}
void sub_80C82EC(void)
{
s16 x, y;
u16 i;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
// 10 is the number of struct UnkSafariZoneStruct's in
// gUnkSafariZoneStructArr. It might be a good idea to create a #define
// for it.
for (i = 0; i < 10; i++)
{
if (gSaveBlock1.location.mapNum == gUnkSafariZoneStructArr[i].mapNum
&& gUnkSafariZoneStructArr[i].x == x
&& gUnkSafariZoneStructArr[i].y == y)
{
gScriptResult = i;
StringCopy(gStringVar1, gUnknown_083F7EB8
[gUnkSafariZoneStructArr[i].pokeblock.color]);
return;
}
}
gScriptResult = -1;
}
void sub_80C837C(void)
{
s16 x, y;
u16 i;
PlayerGetDestCoords(&x, &y);
// 10 is the number of struct UnkSafariZoneStruct's in
// gUnkSafariZoneStructArr. It might be a good idea to create a #define
// for it.
for (i = 0; i < 10; i++)
{
if (gSaveBlock1.location.mapNum
== gUnkSafariZoneStructArr[i].mapNum)
{
x -= gUnkSafariZoneStructArr[i].x;
y -= gUnkSafariZoneStructArr[i].y;
if (x < 0)
{
x *= -1;
}
if (y < 0)
{
y *= -1;
}
if ((x + y) <= 5)
{
gScriptResult = i;
return;
}
}
}
gScriptResult = -1;
}
struct Pokeblock *unref_sub_80C8418(void)
{
sub_80C82EC();
if (gScriptResult == 0xFFFF)
{
return NULL;
}
return &gUnkSafariZoneStructArr[gScriptResult].pokeblock;
}
struct Pokeblock *sub_80C8448(void)
{
sub_80C837C();
if (gScriptResult == 0xFFFF)
{
return NULL;
}
return &gUnkSafariZoneStructArr[gScriptResult].pokeblock;
}
void sub_80C8478(u8 pokeblock_index)
{
s16 x, y;
u8 i;
// 10 is the number of struct UnkSafariZoneStruct's in
// gUnkSafariZoneStructArr. It might be a good idea to create a #define
// for it.
for (i = 0; i < 10; i++)
{
if (gUnkSafariZoneStructArr[i].mapNum == 0
&& gUnkSafariZoneStructArr[i].x == 0
&& gUnkSafariZoneStructArr[i].y == 0)
{
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
gUnkSafariZoneStructArr[i].mapNum
= gSaveBlock1.location.mapNum;
gUnkSafariZoneStructArr[i].pokeblock
= gSaveBlock1.pokeblocks[pokeblock_index];
gUnkSafariZoneStructArr[i].counter = 0x64;
gUnkSafariZoneStructArr[i].x = x;
gUnkSafariZoneStructArr[i].y = y;
break;
}
}
}
void sub_80C8508(void)
{
u8 i;
// 10 is the number of struct UnkSafariZoneStruct's in
// gUnkSafariZoneStructArr. It might be a good idea to create a #define
// for it.
for (i = 0; i < 10; i++)
{
if (gUnkSafariZoneStructArr[i].counter != 0)
{
gUnkSafariZoneStructArr[i].counter--;
if (gUnkSafariZoneStructArr[i].counter == 0)
{
ClearSingleUnkSafariZoneStruct(i);
}
}
}
}
bool8 unref_sub_80C853C(void)
{
sub_80C82EC();
if (gScriptResult == 0xFFFF)
{
return FALSE;
}
ConvertIntToDecimalStringN(gStringVar2,
gUnkSafariZoneStructArr[gScriptResult].counter,
STR_CONV_MODE_LEADING_ZEROS, 3);
return TRUE;
}

View File

@@ -914,11 +914,8 @@ gUnknown_02038808: @ 2038808
gUnknown_0203880A: @ 203880A
.space 0x2
gUnknown_0203880C: @ 203880C
.space 0x8
gUnknown_02038814: @ 2038814
.space 0x98
gUnkSafariZoneStructArr: @ 203880C
.space 0xa0
gUnknown_020388AC: @ 20388AC
.space 0x4