mirror of
https://github.com/pret/pokeruby.git
synced 2026-08-20 09:24:17 -05:00
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:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -31,5 +31,6 @@ types_*.taghl
|
||||
*.swp
|
||||
*.swo
|
||||
*.s.old
|
||||
*.s.old2
|
||||
*.dump
|
||||
*.sa*
|
||||
|
||||
@@ -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.
|
||||
@@ -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
305
src/safari_zone.c
Normal 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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user