Merge branch 'master' of https://github.com/pret/pmd-red into ld_script_ld

This commit is contained in:
DizzyEggg
2025-05-16 23:56:06 +02:00
34 changed files with 2350 additions and 4892 deletions

View File

@@ -1,382 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_803C3E0
sub_803C3E0:
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x54
adds r7, r0, 0
movs r6, 0
ldr r5, _0803C42C
movs r4, 0
mov r8, sp
_0803C3F2:
movs r1, 0
ldrsh r0, [r5, r1]
bl sub_803C110
lsls r0, 24
cmp r0, 0
beq _0803C41A
movs r1, 0x2
ldrsh r0, [r5, r1]
bl sub_803C110
lsls r0, 24
cmp r0, 0
beq _0803C41A
mov r0, r8
adds r0, 0x4
mov r8, r0
subs r0, 0x4
stm r0!, {r4}
adds r6, 0x1
_0803C41A:
adds r5, 0x8
adds r4, 0x1
cmp r4, 0x14
ble _0803C3F2
ldr r5, _0803C42C
cmp r6, 0
bne _0803C430
movs r0, 0
b _0803C44E
.align 2, 0
_0803C42C: .4byte gUnknown_80E9920
_0803C430:
adds r0, r6, 0
bl RandInt
lsls r0, 2
add r0, sp
ldr r4, [r0]
lsls r0, r4, 3
adds r5, r0, r5
ldrh r0, [r5]
strh r0, [r7, 0xC]
ldrh r0, [r5, 0x2]
strh r0, [r7, 0xE]
movs r0, 0x7
strb r0, [r7, 0x2]
movs r0, 0x1
_0803C44E:
add sp, 0x54
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_803C3E0
thumb_func_start sub_803C45C
sub_803C45C:
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0xB4
adds r7, r0, 0
movs r6, 0
ldr r5, _0803C4CC
movs r4, 0
mov r8, sp
_0803C46E:
movs r1, 0
ldrsh r0, [r5, r1]
bl sub_803C110
lsls r0, 24
cmp r0, 0
beq _0803C496
movs r1, 0x2
ldrsh r0, [r5, r1]
bl sub_803C110
lsls r0, 24
cmp r0, 0
beq _0803C496
mov r0, r8
adds r0, 0x4
mov r8, r0
subs r0, 0x4
stm r0!, {r4}
adds r6, 0x1
_0803C496:
adds r5, 0xC
adds r4, 0x1
cmp r4, 0x2C
ble _0803C46E
ldr r5, _0803C4CC
cmp r6, 0
beq _0803C4E0
adds r0, r6, 0
bl RandInt
lsls r0, 2
add r0, sp
ldr r4, [r0]
lsls r0, r4, 1
adds r0, r4
lsls r0, 2
adds r5, r0, r5
bl Rand32Bit
movs r1, 0x10
ands r1, r0
cmp r1, 0
beq _0803C4D0
ldrh r0, [r5]
strh r0, [r7, 0xC]
ldrh r0, [r5, 0x2]
b _0803C4D6
.align 2, 0
_0803C4CC: .4byte gUnknown_80E9F8C
_0803C4D0:
ldrh r0, [r5, 0x2]
strh r0, [r7, 0xC]
ldrh r0, [r5]
_0803C4D6:
strh r0, [r7, 0xE]
movs r0, 0x8
strb r0, [r7, 0x2]
movs r0, 0x1
b _0803C4E2
_0803C4E0:
movs r0, 0
_0803C4E2:
add sp, 0xB4
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_803C45C
thumb_func_start sub_803C4F0
sub_803C4F0:
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x18
adds r7, r0, 0
movs r6, 0
ldr r5, _0803C55C
movs r4, 0
mov r8, sp
_0803C502:
movs r1, 0
ldrsh r0, [r5, r1]
bl sub_803C110
lsls r0, 24
cmp r0, 0
beq _0803C52A
movs r1, 0x2
ldrsh r0, [r5, r1]
bl sub_803C110
lsls r0, 24
cmp r0, 0
beq _0803C52A
mov r0, r8
adds r0, 0x4
mov r8, r0
subs r0, 0x4
stm r0!, {r4}
adds r6, 0x1
_0803C52A:
adds r5, 0x4
adds r4, 0x1
cmp r4, 0x5
ble _0803C502
ldr r5, _0803C55C
cmp r6, 0
beq _0803C570
adds r0, r6, 0
bl RandInt
lsls r0, 2
add r0, sp
ldr r4, [r0]
lsls r0, r4, 2
adds r5, r0, r5
bl Rand32Bit
movs r1, 0x10
ands r1, r0
cmp r1, 0
beq _0803C560
ldrh r0, [r5]
strh r0, [r7, 0xC]
ldrh r0, [r5, 0x2]
b _0803C566
.align 2, 0
_0803C55C: .4byte gUnknown_80E8168
_0803C560:
ldrh r0, [r5, 0x2]
strh r0, [r7, 0xC]
ldrh r0, [r5]
_0803C566:
strh r0, [r7, 0xE]
movs r0, 0x9
strb r0, [r7, 0x2]
movs r0, 0x1
b _0803C572
_0803C570:
movs r0, 0
_0803C572:
add sp, 0x18
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_803C4F0
thumb_func_start sub_803C580
sub_803C580:
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x54
adds r6, r0, 0
movs r7, 0
ldr r5, _0803C5D8
movs r0, 0x6
bl sub_80023E4
lsls r0, 24
cmp r0, 0
beq _0803C5D2
movs r4, 0
mov r8, sp
_0803C59E:
movs r1, 0
ldrsh r0, [r5, r1]
bl sub_803C110
lsls r0, 24
cmp r0, 0
beq _0803C5C6
ldrb r0, [r6, 0x4]
ldrb r1, [r5, 0x2]
bl xxx_bit_lut_lookup_8091E50
lsls r0, 24
cmp r0, 0
beq _0803C5C6
mov r0, r8
adds r0, 0x4
mov r8, r0
subs r0, 0x4
stm r0!, {r4}
adds r7, 0x1
_0803C5C6:
adds r5, 0x4
adds r4, 0x1
cmp r4, 0x14
ble _0803C59E
cmp r7, 0
bne _0803C5DC
_0803C5D2:
movs r0, 0
b _0803C600
.align 2, 0
_0803C5D8: .4byte gUnknown_80E8180
_0803C5DC:
adds r0, r7, 0
bl RandInt
lsls r0, 2
add r0, sp
ldr r4, [r0]
lsls r1, r4, 2
ldr r0, _0803C60C
adds r5, r1, r0
ldrh r0, [r5]
strh r0, [r6, 0xC]
ldrh r0, [r5]
strh r0, [r6, 0xE]
ldrb r0, [r5, 0x2]
strb r0, [r6, 0x10]
movs r0, 0x5
strb r0, [r6, 0x2]
movs r0, 0x1
_0803C600:
add sp, 0x54
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0803C60C: .4byte gUnknown_80E8180
thumb_func_end sub_803C580
thumb_func_start sub_803C610
sub_803C610:
push {r4-r7,lr}
mov r7, r8
push {r7}
ldr r4, _0803C660
add sp, r4
adds r6, r0, 0
movs r7, 0
ldr r4, _0803C664
movs r5, 0
mov r8, sp
_0803C624:
movs r1, 0
ldrsh r0, [r4, r1]
bl sub_803C110
lsls r0, 24
cmp r0, 0
beq _0803C64C
ldrb r0, [r6, 0x4]
ldrb r1, [r4, 0x2]
bl xxx_bit_lut_lookup_8091E50
lsls r0, 24
cmp r0, 0
beq _0803C64C
mov r0, r8
adds r0, 0x4
mov r8, r0
subs r0, 0x4
stm r0!, {r5}
adds r7, 0x1
_0803C64C:
adds r4, 0x4
adds r5, 0x1
ldr r0, _0803C668
cmp r5, r0
ble _0803C624
cmp r7, 0
bne _0803C66C
movs r0, 0
b _0803C690
.align 2, 0
_0803C660: .4byte 0xfffff9f8
_0803C664: .4byte gUnknown_80E81D4
_0803C668: .4byte 0x00000181
_0803C66C:
adds r0, r7, 0
bl RandInt
lsls r0, 2
add r0, sp
ldr r5, [r0]
lsls r1, r5, 2
ldr r0, _0803C6A0
adds r4, r1, r0
ldrh r0, [r4]
strh r0, [r6, 0xC]
ldrh r0, [r4]
strh r0, [r6, 0xE]
ldrb r0, [r4, 0x2]
strb r0, [r6, 0x10]
movs r0, 0x6
strb r0, [r6, 0x2]
movs r0, 0x1
_0803C690:
movs r3, 0xC1
lsls r3, 3
add sp, r3
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0803C6A0: .4byte gUnknown_80E81D4
thumb_func_end sub_803C610
.align 2,0

View File

@@ -1,791 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start xxx_script_related_8098468
xxx_script_related_8098468:
push {r4-r7,lr}
sub sp, 0x8
ldr r1, _08098494
str r0, [r1]
ldr r4, _08098498
movs r2, 0
strb r2, [r4]
ldr r3, _0809849C
movs r1, 0x1
strb r1, [r3]
ldr r1, _080984A0
strb r2, [r1]
subs r0, 0xD
adds r2, r1, 0
cmp r0, 0x4
bhi _08098504
lsls r0, 2
ldr r1, _080984A4
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08098494: .4byte gUnknown_20398B4
_08098498: .4byte gUnknown_20398B9
_0809849C: .4byte gUnknown_20398B8
_080984A0: .4byte gScriptMode
_080984A4: .4byte _080984A8
.align 2, 0
_080984A8:
.4byte _080984BC
.4byte _080984C8
.4byte _080984CE
.4byte _080984D4
.4byte _080984FC
_080984BC:
movs r1, 0x1
strb r1, [r2]
movs r0, 0
strb r0, [r3]
strb r1, [r4]
b _08098504
_080984C8:
movs r0, 0x1
strb r0, [r3]
b _08098502
_080984CE:
movs r0, 0x1
strb r0, [r3]
b _08098502
_080984D4:
add r2, sp, 0x4
movs r0, 0x3
mov r1, sp
bl GetScriptVarScenario
ldr r2, _080984F4
movs r1, 0
ldr r0, [sp]
cmp r0, 0
bne _080984EA
movs r1, 0x1
_080984EA:
strb r1, [r2]
ldr r1, _080984F8
movs r0, 0x1
strb r0, [r1]
b _08098504
.align 2, 0
_080984F4: .4byte gUnknown_20398B8
_080984F8: .4byte gUnknown_20398B9
_080984FC:
movs r0, 0
strb r0, [r3]
movs r0, 0x1
_08098502:
strb r0, [r4]
_08098504:
bl sub_801180C
ldr r0, _080985B0
ldrb r0, [r0]
cmp r0, 0
bne _08098522
movs r0, 0xD
bl sub_80023E4
lsls r0, 24
cmp r0, 0
bne _08098522
movs r0, 0x10
bl FadeOutAllMusic
_08098522:
ldr r1, _080985B4
ldr r2, _080985B8
adds r0, r2, 0
strh r0, [r1]
movs r0, 0
bl UpdateFadeInTile
bl sub_8099648
bl sub_809975C
bl sub_809D0AC
bl sub_80A7744
bl sub_809D490
bl sub_80A62F0
bl sub_809C5C4
bl sub_809A560
bl sub_809CB50
bl AllocGroundMapAction
bl nullsub_117
bl AllocGroundEvents
bl AllocGroundLives
bl AllocGroundObjects
bl AllocGroundEffects
bl sub_809A62C
ldr r0, _080985BC
movs r1, 0
strb r1, [r0]
ldr r0, _080985C0
strb r1, [r0]
ldr r6, _080985C4
movs r0, 0x1
str r0, [r6]
ldr r1, _080985C8
movs r0, 0
str r0, [r1]
ldr r0, _080985CC
movs r4, 0x1
negs r4, r4
str r4, [r0]
ldr r5, _080985D0
movs r0, 0
movs r1, 0xD
bl GetScriptVarValue
strh r0, [r5]
movs r0, 0
movs r1, 0xE
bl GetScriptVarValue
ldr r1, _080985D4
str r0, [r1]
ldr r0, _080985D8
strh r4, [r0]
adds r7, r4, 0
ldr r0, [r6]
b _08098988
.align 2, 0
_080985B0: .4byte gUnknown_20398B9
_080985B4: .4byte gUnknown_2026E4E
_080985B8: .4byte 0x00000808
_080985BC: .4byte gUnknown_203B49C
_080985C0: .4byte gUnknown_203B49D
_080985C4: .4byte gUnknown_20398A8
_080985C8: .4byte gUnknown_20398AC
_080985CC: .4byte gUnknown_20398B0
_080985D0: .4byte gUnknown_20398BE
_080985D4: .4byte gUnknown_20398C0
_080985D8: .4byte gUnknown_20398C4
_080985DC:
movs r0, 0x1
negs r0, r0
bl sub_809A71C
bl ScriptPrintNullTextbox
bl sub_809977C
ldr r0, _08098600
ldr r0, [r0]
cmp r0, 0x11
bls _080985F6
b _08098756
_080985F6:
lsls r0, 2
ldr r1, _08098604
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08098600: .4byte gUnknown_20398B4
_08098604: .4byte _08098608
.align 2, 0
_08098608:
.4byte _08098650
.4byte _08098756
.4byte _08098660
.4byte _08098660
.4byte _08098756
.4byte _08098666
.4byte _08098756
.4byte _08098756
.4byte _08098756
.4byte _0809866A
.4byte _0809866A
.4byte _0809866A
.4byte _0809866A
.4byte _0809870C
.4byte _08098748
.4byte _0809874C
.4byte _08098750
.4byte _08098754
_08098650:
bl sub_8098C58
ldr r1, _0809865C
movs r0, 0x1
str r0, [r1]
b _08098756
.align 2, 0
_0809865C: .4byte gUnknown_20398B4
_08098660:
bl sub_8001D88
b _08098756
_08098666:
movs r7, 0x70
b _08098756
_0809866A:
ldr r0, _080986BC
ldr r2, [r0]
movs r0, 0
movs r1, 0x16
bl SetScriptVarValue
movs r0, 0
movs r1, 0x25
movs r2, 0
bl SetScriptVarValue
bl sub_8098C58
movs r0, 0
movs r1, 0x15
movs r2, 0x1
movs r3, 0x2
bl UpdateScriptVarWithImmediate
movs r0, 0
movs r1, 0x13
bl GetScriptVarValue
lsls r0, 16
asrs r4, r0, 16
movs r0, 0x1
negs r0, r0
cmp r4, r0
beq _08098756
cmp r4, 0x51
bne _080986C0
movs r0, 0
movs r1, 0x14
bl GetScriptVarValue
lsls r0, 16
asrs r0, 16
bl GetDungeonInfo_80A2608
b _080986C6
.align 2, 0
_080986BC: .4byte gUnknown_20398B4
_080986C0:
adds r0, r4, 0
bl GetDungeonInfo_80A2608
_080986C6:
movs r1, 0xA
ldrsh r7, [r0, r1]
ldr r5, _08098700
ldr r0, [r5]
cmp r0, 0x9
bne _080986E0
lsls r2, r4, 16
lsrs r2, 16
movs r0, 0
movs r1, 0x31
movs r3, 0x1
bl SetScriptVarArrayValue
_080986E0:
ldr r0, [r5]
bl sub_8098FCC
lsls r0, 16
asrs r1, r0, 16
movs r0, 0x1
negs r0, r0
cmp r1, r0
beq _08098756
ldr r0, _08098704
strh r1, [r0]
ldr r1, _08098708
movs r0, 0
str r0, [r1]
b _08098756
.align 2, 0
_08098700: .4byte gUnknown_20398B4
_08098704: .4byte gUnknown_20398BE
_08098708: .4byte gUnknown_20398C0
_0809870C:
bl sub_8098C58
ldr r1, _08098744
movs r0, 0x1
str r0, [r1]
movs r0, 0
movs r1, 0x18
movs r2, 0x1
bl SetScriptVarValue
movs r0, 0
movs r1, 0xF
movs r2, 0
bl SetScriptVarValue
movs r0, 0
movs r1, 0xD
movs r2, 0
bl SetScriptVarValue
movs r0, 0
movs r1, 0xE
movs r2, 0
bl SetScriptVarValue
movs r7, 0x71
b _08098756
.align 2, 0
_08098744: .4byte gUnknown_20398B4
_08098748:
movs r7, 0x73
b _08098756
_0809874C:
movs r7, 0x74
b _08098756
_08098750:
movs r7, 0x75
b _08098756
_08098754:
movs r7, 0x76
_08098756:
ldr r0, _08098790
ldrb r0, [r0]
cmp r0, 0
bne _080987C0
movs r0, 0
movs r1, 0xD
bl GetScriptVarValue
adds r5, r0, 0
ldr r4, _08098794
ldr r2, [r4]
movs r0, 0
movs r1, 0x18
bl SetScriptVarValue
ldr r4, [r4]
cmp r4, 0x1
beq _080987A6
cmp r4, 0x3
bne _0809879C
ldr r0, _08098798
movs r1, 0
ldrsh r2, [r0, r1]
movs r0, 0
movs r1, 0xF
bl SetScriptVarValue
b _080987A6
.align 2, 0
_08098790: .4byte gUnknown_20398B9
_08098794: .4byte gUnknown_20398B4
_08098798: .4byte gUnknown_20398BE
_0809879C:
movs r0, 0
movs r1, 0xF
adds r2, r5, 0
bl SetScriptVarValue
_080987A6:
ldr r0, _0809882C
movs r1, 0
ldrsh r2, [r0, r1]
movs r0, 0
movs r1, 0xD
bl SetScriptVarValue
ldr r0, _08098830
ldr r2, [r0]
movs r0, 0
movs r1, 0xE
bl SetScriptVarValue
_080987C0:
ldr r1, _08098834
movs r0, 0x2
str r0, [r1]
ldr r0, _08098838
movs r1, 0
str r1, [r0]
ldr r0, _0809883C
str r1, [r0]
ldr r0, _08098840
movs r4, 0x1
negs r4, r4
str r4, [r0]
ldr r2, _08098844
ldr r1, _0809882C
ldrh r0, [r1]
strh r0, [r2]
strh r4, [r1]
bl sub_809977C
bl sub_809D4B0
adds r0, r4, 0
bl GroundSprite_Reset
bl sub_809C63C
bl sub_809A62C
bl GroundMap_Reset
bl sub_809D0BC
bl DeleteGroundEvents
bl DeleteGroundLives
bl DeleteGroundObjects
bl DeleteGroundEffects
bl sub_809C658
bl nullsub_16
bl UpdateAdventureAchievements
cmp r7, r4
beq _08098848
adds r0, r7, 0
movs r1, 0
bl GroundMap_ExecuteEvent
b _08098850
.align 2, 0
_0809882C: .4byte gUnknown_20398BE
_08098830: .4byte gUnknown_20398C0
_08098834: .4byte gUnknown_20398B4
_08098838: .4byte gUnknown_20398A8
_0809883C: .4byte gUnknown_20398AC
_08098840: .4byte gUnknown_20398B0
_08098844: .4byte gUnknown_20398BC
_08098848:
movs r0, 0x66
movs r1, 0
bl GroundMap_ExecuteEvent
_08098850:
bl GroundMap_Action
movs r0, 0
movs r1, 0
bl sub_8005838
bl sub_80060EC
bl xxx_call_update_bg_sound_input
_08098864:
bl xxx_call_update_bg_sound_input
bl sub_80A6E68
ldr r0, _08098890
ldr r0, [r0]
cmp r0, 0
beq _080988B2
ldr r1, _08098894
ldr r0, [r1]
cmp r0, 0
ble _0809889C
subs r0, 0x1
str r0, [r1]
cmp r0, 0
bgt _080988F8
ldr r0, _08098898
ldr r0, [r0]
bl sub_80999D4
b _080988F8
.align 2, 0
_08098890: .4byte gUnknown_20398A8
_08098894: .4byte gUnknown_20398AC
_08098898: .4byte gUnknown_20398B0
_0809889C:
bl sub_8099B94
lsls r0, 24
cmp r0, 0
bne _080988F8
bl sub_809C740
lsls r0, 24
cmp r0, 0
bne _0809897C
b _080988F8
_080988B2:
ldr r0, _08098968
ldrb r0, [r0]
cmp r0, 0
beq _080988F8
ldr r0, _0809896C
ldrb r0, [r0]
cmp r0, 0
bne _080988F8
bl sub_809AFAC
lsls r0, 24
cmp r0, 0
bne _080988F8
ldr r0, _08098970
ldrh r0, [r0, 0x2]
ldr r2, _08098974
adds r1, r2, 0
ands r0, r1
cmp r0, 0
bne _080988E4
bl sub_80048BC
lsls r0, 24
cmp r0, 0
beq _080988F8
_080988E4:
movs r0, 0x72
movs r1, 0
bl GroundMap_ExecuteEvent
movs r0, 0x1E
bl GroundMainGameCancelRequest
movs r0, 0x1E
bl FadeOutAllMusic
_080988F8:
bl GroundMap_Action
bl nullsub_124
bl GroundLives_Action
bl GroundObject_Action
bl GroundEffect_Action
bl nullsub_105
bl sub_809B474
bl GroundScript_Unlock
bl sub_809D25C
bl sub_80A59DC
bl sub_809B614
bl sub_809CA20
bl sub_80A6E80
bl sub_8099BE4
bl sub_8099744
bl sub_8011860
ldr r0, _08098978
ldr r0, [r0]
bl IncrementPlayTime
bl WaitForNextFrameAndAdvanceRNG
bl LoadBufferedInputs
bl nullsub_120
bl sub_80A5E70
bl sub_809B638
bl nullsub_106
bl sub_80A73EC
bl sub_8099750
bl sub_8009908
b _08098864
.align 2, 0
_08098968: .4byte gUnknown_20398B9
_0809896C: .4byte gUnknown_20398B8
_08098970: .4byte gRealInputs
_08098974: .4byte 0x0000030f
_08098978: .4byte gPlayTimeRef
_0809897C:
bl GroundMap_Reset
movs r7, 0x1
negs r7, r7
ldr r0, _080989E8
ldr r0, [r0]
_08098988:
subs r0, 0x1
cmp r0, 0x1
bhi _08098990
b _080985DC
_08098990:
bl FreeGroundMapAction
bl nullsub_118
bl FreeGroundLives
bl FreeGroundObjects
bl FreeGroundEffects
bl FreeGroundEvents
bl sub_809CB74
bl sub_809A610
bl sub_809C618
bl sub_80A658C
bl sub_809D508
bl sub_80A7754
bl nullsub_119
bl sub_8099768
bl nullsub_103
bl nullsub_16
ldr r0, _080989EC
ldrb r0, [r0]
cmp r0, 0
beq _080989FA
ldr r0, _080989E8
ldr r0, [r0]
cmp r0, 0x9
beq _080989F0
cmp r0, 0xA
bne _080989F0
movs r0, 0x10
b _08098BD2
.align 2, 0
_080989E8: .4byte gUnknown_20398A8
_080989EC: .4byte gUnknown_20398B9
_080989F0:
movs r0, 0x1E
bl FadeOutAllMusic
movs r0, 0xF
b _08098BD2
_080989FA:
ldr r0, _08098A10
ldr r0, [r0]
subs r0, 0x3
cmp r0, 0x5
bls _08098A06
b _08098BC0
_08098A06:
lsls r0, 2
ldr r1, _08098A14
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08098A10: .4byte gUnknown_20398A8
_08098A14: .4byte _08098A18
.align 2, 0
_08098A18:
.4byte _08098A30
.4byte _08098A72
.4byte _08098AA0
.4byte _08098B08
.4byte _08098B58
.4byte _08098B8C
_08098A30:
movs r4, 0x1
negs r4, r4
movs r0, 0
movs r1, 0x13
adds r2, r4, 0
bl SetScriptVarValue
movs r0, 0
movs r1, 0x14
adds r2, r4, 0
bl SetScriptVarValue
movs r0, 0
movs r1, 0x18
movs r2, 0x4
bl SetScriptVarValue
movs r0, 0
movs r1, 0x16
movs r2, 0x4
bl SetScriptVarValue
movs r0, 0
movs r1, 0xD
bl GetScriptVarValue
adds r2, r0, 0
movs r0, 0
movs r1, 0xF
bl SetScriptVarValue
movs r0, 0x5
b _08098BD2
_08098A72:
movs r0, 0
movs r1, 0x13
movs r2, 0
bl SetScriptVarValue
movs r0, 0
movs r1, 0x18
movs r2, 0x5
bl SetScriptVarValue
movs r0, 0
movs r1, 0x16
movs r2, 0x5
bl SetScriptVarValue
movs r2, 0x1
negs r2, r2
movs r0, 0
movs r1, 0x13
bl SetScriptVarValue
movs r0, 0x6
b _08098BD2
_08098AA0:
ldr r5, _08098B04
movs r1, 0
ldrsh r0, [r5, r1]
bl sub_80A2654
adds r4, r0, 0
lsls r4, 16
asrs r4, 16
movs r0, 0
ldrsh r2, [r5, r0]
movs r0, 0
movs r1, 0x13
bl SetScriptVarValue
movs r0, 0
movs r1, 0x14
adds r2, r4, 0
bl SetScriptVarValue
ldrh r2, [r5]
movs r0, 0
movs r1, 0x30
movs r3, 0x1
bl SetScriptVarArrayValue
movs r0, 0
movs r1, 0x18
movs r2, 0x7
bl SetScriptVarValue
movs r0, 0
movs r1, 0x16
movs r2, 0x7
bl SetScriptVarValue
movs r0, 0
movs r1, 0x11
bl GetScriptVarValue
lsls r0, 16
asrs r0, 16
cmp r0, 0xA
bne _08098B00
movs r0, 0
movs r1, 0x11
movs r2, 0
bl SetScriptVarValue
_08098B00:
movs r0, 0x7
b _08098BD2
.align 2, 0
_08098B04: .4byte gUnknown_20398C4
_08098B08:
movs r0, 0
movs r1, 0x13
movs r2, 0x51
bl SetScriptVarValue
ldr r0, _08098B54
movs r1, 0
ldrsh r2, [r0, r1]
movs r0, 0
movs r1, 0x14
bl SetScriptVarValue
movs r0, 0
movs r1, 0x18
movs r2, 0x7
bl SetScriptVarValue
movs r0, 0
movs r1, 0x16
movs r2, 0x7
bl SetScriptVarValue
movs r0, 0
movs r1, 0x11
bl GetScriptVarValue
lsls r0, 16
asrs r0, 16
cmp r0, 0xA
bne _08098B4E
movs r0, 0
movs r1, 0x11
movs r2, 0
bl SetScriptVarValue
_08098B4E:
movs r0, 0x8
b _08098BD2
.align 2, 0
_08098B54: .4byte gUnknown_20398C4
_08098B58:
movs r0, 0
movs r1, 0x13
movs r2, 0x50
bl SetScriptVarValue
ldr r0, _08098B88
ldrb r2, [r0]
movs r0, 0
movs r1, 0x14
bl SetScriptVarValue
movs r0, 0
movs r1, 0x18
movs r2, 0x7
bl SetScriptVarValue
movs r0, 0
movs r1, 0x16
movs r2, 0x7
bl SetScriptVarValue
movs r0, 0x9
b _08098BD2
.align 2, 0
_08098B88: .4byte gUnknown_2039950
_08098B8C:
movs r0, 0
movs r1, 0x13
movs r2, 0x52
bl SetScriptVarValue
ldr r0, _08098BBC
movs r1, 0
ldrsh r2, [r0, r1]
movs r0, 0
movs r1, 0x14
bl SetScriptVarValue
movs r0, 0
movs r1, 0x18
movs r2, 0x7
bl SetScriptVarValue
movs r0, 0
movs r1, 0x16
movs r2, 0x7
bl SetScriptVarValue
movs r0, 0xA
b _08098BD2
.align 2, 0
_08098BBC: .4byte gUnknown_20398C4
_08098BC0:
movs r0, 0
movs r1, 0x18
movs r2, 0x1
bl SetScriptVarValue
movs r0, 0x10
bl FadeOutAllMusic
movs r0, 0xE
_08098BD2:
add sp, 0x8
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end xxx_script_related_8098468
.align 2,0 @ Don't pad with nop

File diff suppressed because it is too large Load Diff

487
data/data_8115F5C_1.s Normal file
View File

@@ -0,0 +1,487 @@
.section .rodata
.align 2
.string "pksdir0\0"
.align 2,0
.global gGroundLivesCallbacks
gGroundLivesCallbacks: @ 8117F10
.byte 0x01, 0x00, 0x00, 0x00
.4byte CallbackLivesGetIndex
.4byte CallbackLivesGetSize
.4byte CallbackLivesGetHitboxCenter
.4byte CallbackLivesGetPosHeightAndUnk
.4byte CallbackLivesGetDirection
.4byte CallbackLivesGetFlags
.4byte CallbackLivesSetHitboxPos
.4byte CallbackLivesSetPositionBounds
.4byte CallbackLivesMoveReal
.4byte CallbackLivesSetPosHeight
.4byte CallbackLivesSetDirection
.4byte CallbackLivesSetEventIndex
.4byte nullsub_211
.4byte CallbackLivesSetUnk_80AB194
.4byte CallbackLivesSetFlags
.4byte CallbackLivesClearFlags
.4byte CallbackLivesSpriteRelated_80AB238
.4byte CallbackLivesMoveRelative
.4byte CallbackLivesSpriteRelatedCheck_80AB1C0
.4byte CallbackLivesSpriteRelated_80AB1E4
.global gUnknown_8117F64
gUnknown_8117F64: @ 8117F64
@ replacing .incbin "baserom.gba", 0x117F64, 0x6A
.byte 0xff, 0xff, 0x00, 0x08, 0x00, 0x03, 0x00, 0x03, 0x07, 0x08, 0x00, 0x08, 0x05, 0x08, 0x02, 0x03
.byte 0x06, 0x03, 0x0b, 0x08, 0x07, 0x03, 0x06, 0x10, 0x02, 0x10, 0x01, 0x10, 0x08, 0x10, 0x0c, 0x10
.byte 0x09, 0x10, 0x0a, 0x10, 0x03, 0x10, 0x04, 0x10, 0x03, 0x08, 0x04, 0x08, 0x0d, 0x10, 0x0e, 0x10
.byte 0x0f, 0x10, 0x10, 0x10, 0x11, 0x10, 0x12, 0x10, 0x13, 0x10, 0x14, 0x10, 0x0d, 0x08, 0x0e, 0x08
.byte 0x0f, 0x08, 0x10, 0x08, 0x11, 0x08, 0x12, 0x08, 0x13, 0x08, 0x14, 0x08, 0x0d, 0x08, 0x0e, 0x10
.byte 0x0f, 0x10, 0x10, 0x10, 0x11, 0x10, 0x12, 0x08, 0x13, 0x10, 0x14, 0x10, 0x15, 0x10, 0x16, 0x10
.byte 0x17, 0x10, 0x18, 0x08, 0x19, 0x10, 0x1a, 0x08, 0x1b, 0x08
.global gUnknown_8117FCE
gUnknown_8117FCE: @ 8117FCE
@ replacing .incbin "baserom.gba", 0x117FCE, 0x22
.byte 0x19, 0x00, 0x34, 0x00, 0x85, 0x00, 0x45, 0x01, 0x07, 0x00, 0x9e, 0x00, 0x1b, 0x01, 0x36, 0x00
.byte 0x04, 0x00, 0x18, 0x01, 0x9b, 0x00, 0x68, 0x00, 0x42, 0x00, 0x01, 0x00, 0x98, 0x00, 0x15, 0x01
.byte 0x00, 0x00
.global gUnknown_8117FF0
gUnknown_8117FF0: @ 8117FF0
@ replacing .incbin "baserom.gba", 0x117FF0, 0x20
.byte 0x00, 0x06, 0x00, 0x00, 0x41, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x41, 0x04, 0x00, 0x00
.byte 0x00, 0x06, 0x00, 0x00, 0x41, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x41, 0x04, 0x00, 0x00
.global gUnknown_8118010
gUnknown_8118010: @ 8118010
@ replacing .incbin "baserom.gba", 0x118010, 0x20
.byte 0x00, 0x20, 0x00, 0x00, 0xb1, 0x16, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0xb1, 0x16, 0x00, 0x00
.byte 0x00, 0x20, 0x00, 0x00, 0xb1, 0x16, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0xb1, 0x16, 0x00, 0x00
.global gUnknown_8118030
gUnknown_8118030: @ 8118030
@ replacing .incbin "baserom.gba", 0x118030, 0x20
.byte 0x00, 0x08, 0x00, 0x00, 0xac, 0x05, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0xac, 0x05, 0x00, 0x00
.byte 0x00, 0x08, 0x00, 0x00, 0xac, 0x05, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0xac, 0x05, 0x00, 0x00
.global gUnknown_8118050
gUnknown_8118050: @ 8118050
.byte 0x00, 0x14, 0x00, 0x00
.byte 0x00, 0x14, 0x00, 0x00
.byte 0x00, 0x18, 0x00, 0x00
.global GroundLivesFile_Text
GroundLivesFile_Text: @ Text
.string "../ground/ground_lives.c\0"
.align 2,0
.global GroundLives_Select_Text
GroundLives_Text: @ Text
.string "GroundLives_Select\0"
.align 2,0
.global gUnknown_811808C
gUnknown_811808C: @ 811808C
.4byte GroundLivesFile_Text
.byte 0x1E, 0x02, 0x00, 0x00
.4byte GroundLives_Text
.global gUnknown_8118098
gUnknown_8118098: @ 8118098
.string "GroundLives Select %3d %3d %3d\0"
.align 2,0
.global gUnknown_81180BC
gUnknown_81180BC: @ 81180BC
.string "GroundLives Cancel %3d %3d\0"
.align 2,0
.global gUnknown_81180D8
gUnknown_81180D8: @ 81180D8
.string "GroundLives CancelBlank\0"
.align 2,0
.global gUnknown_81180F0
gUnknown_81180F0: @ 81180F0
.byte 0x5F, 0x00
.byte 0x22, 0x00
.byte 0x10, 0x00
.byte 0x13, 0x00
.byte 0x1B, 0x00
.byte 0x29, 0x00
.global gUnknown_81180FC
gUnknown_81180FC: @ 81180FC
@ replacing .incbin "baserom.gba", 0x1180FC, 0x20
.byte 0x19, 0x00, 0x34, 0x00, 0x85, 0x00, 0x45, 0x01, 0x07, 0x00, 0x9e, 0x00, 0x1b, 0x01, 0x36, 0x00
.byte 0x04, 0x00, 0x18, 0x01, 0x9b, 0x00, 0x68, 0x00, 0x42, 0x00, 0x01, 0x00, 0x98, 0x00, 0x15, 0x01
.global gUnknown_811811C
gUnknown_811811C: @ 811811C
.string "GroundLive Add id %3d kind %3d type %3d group %3d sector %3d\0"
.align 2,0
.global GroundLives_Add_Text
GroundLives_Add_Text: @ Add
.string "GroundLives_Add\0"
.align 2,0
.global gUnknown_8118170
gUnknown_8118170: @ 8118170
.4byte GroundLivesFile_Text
.byte 0x89, 0x05, 0x00, 0x00
.4byte GroundLives_Add_Text
.global gUnknown_811817C
gUnknown_811817C: @ 811817C
.4byte GroundLivesFile_Text
.byte 0xb4, 0x05, 0x00, 0x00
.4byte GroundLives_Add_Text
.global gUnknown_8118188
gUnknown_8118188: @ 8118188
.4byte GroundLivesFile_Text
.byte 0xba, 0x05, 0x00, 0x00
.4byte GroundLives_Add_Text
.global gUnknown_8118194
gUnknown_8118194: @ 8118194
.string "GroundLives Delete id %3d\0"
.align 2,0
.global gUnknown_81181B0
gUnknown_81181B0: @ 81181B0
.string "GroundLives Execute %3d kind %3d %p\0"
.align 2,0
.global GroundLives_ExecuteScript_Text
GroundLives_ExecuteScript_Text: @ ExecuteScript
.string "GroundLives_ExecuteScript\0"
.align 2,0
.global gUnknown_81181F4
gUnknown_81181F4: @ 81181F4
.4byte GroundLivesFile_Text
.byte 0xa7, 0x06, 0x00, 0x00
.4byte GroundLives_ExecuteScript_Text
.global ExecutePlayerScript_Text
ExecutePlayerScript_Text: @ Text
.string "_ExecutePlayerScript\0"
.align 2,0
.global gUnknown_8118218
gUnknown_8118218: @ 8118218
.4byte GroundLivesFile_Text
.byte 0xC8, 0x06, 0x00, 0x00
.4byte ExecutePlayerScript_Text
.global ExecutePlayerScriptActionLives_Text
ExecutePlayerScriptActionLives_Text: @ Text
.string "GroundLives_ExecutePlayerScriptActionLives\0"
.align 2,0
.global gUnknown_8118250
gUnknown_8118250: @ 8118250
.4byte GroundLivesFile_Text
.byte 0xF9, 0x06, 0x00, 0x00
.4byte ExecutePlayerScriptActionLives_Text
.global gGroundLives_InvalidityText
gGroundLives_InvalidityText: @ 811825C
.string "{COLOR RED_W}invalidity{RESET}\0"
.align 2,0
.global GroundLives_ActionText
GroundLives_ActionText: @ ActionText
.string "GroundLives_Action\0"
.align 2,0
.global gUnknown_8118280
gUnknown_8118280: @ 8118280
.4byte GroundLivesFile_Text
.byte 0xA2, 0x11, 0x00, 0x00
.4byte GroundLives_ActionText
.global gUnknown_811828C
gUnknown_811828C: @ 811828C
.4byte GroundLivesFile_Text
.byte 0x0E, 0x12, 0x00, 0x00
.4byte GroundLives_ActionText
.string "pksdir0\0"
.align 2,0
.global gGroundObjectCallbacks
gGroundObjectCallbacks: @ 81182A0
@ replacing .incbin "baserom.gba", 0x1182A0, 0x54
.byte 0x02, 0x00, 0x00, 0x00
.4byte CallbackObjectGetIndex
.4byte CallbackObjectGetSize
.4byte CallbackObjectGetHitboxCenter
.4byte CallbackObjectGetPosHeightAndUnk
.4byte CallbackObjectGetDirection
.4byte CallbackObjectGetFlags
.4byte CallbackObjectSetHitboxPos
.4byte CallbackObjectSetPositionBounds
.4byte CallbackObjectMoveReal
.4byte CallbackObjectSetPosHeight
.4byte CallbackObjectSetDirection
.4byte CallbackObjectSetEventIndex
.byte 0x00, 0x00, 0x00, 0x00
.4byte CallbackObjectSetUnk_80AC998
.4byte CallbackObjectSetFlags
.4byte CallbackObjectClearFlags
.byte 0x00, 0x00, 0x00, 0x00
.4byte CallbackObjectMoveRelative
.4byte CallbackObjectSpriteRelatedCheck_80AC9B8
.4byte CallbackObjectSpriteRelated_80AC9DC
.global gUnknown_81182F4
gUnknown_81182F4: @ 81182F4
.byte 0xF6, 0x0, 0x9F, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x34, 0x83, 0x11, 0x8, 0xF4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xDB, 0x0, 0x78, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xE7, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0
.global GroundObjectFile_Text
GroundObjectFile_Text: @ Text
.global gUnknown_8118334
gUnknown_8118334: @ 8118334
.string "../ground/ground_object.c"
.align 2,0
.global gUnknown_8118350
gUnknown_8118350: @ 8118350
@ replacing .incbin "baserom.gba", 0x118350, 0x50
.byte 0xf6, 0x00, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.4byte gUnknown_8118334
.byte 0x54, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0xdb, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.global gUnknown_81183A0
gUnknown_81183A0: @ 81183A0
.byte 0xFF, 0xFF, 0x0, 0x8, 0x1, 0x8, 0x0, 0x10, 0x1, 0x10, 0x2, 0x10, 0x3, 0x10, 0x0, 0x8, 0x1, 0x8, 0x2, 0x8, 0x3, 0x8, 0x4, 0x8, 0x5, 0x8, 0x6, 0x8, 0x7, 0x8, 0x8, 0x8, 0x9, 0x8, 0xA, 0x8, 0xB, 0x8, 0xC, 0x8, 0xD, 0x8, 0xE, 0x8, 0xF, 0x8, 0x0, 0x0
.global GroundObject_Select_Text
GroundObject_Select_Text: @ Select
.string "GroundObject_Select"
.align 2,0
.global gUnknown_81183E4
gUnknown_81183E4: @ 81183E4
.4byte GroundObjectFile_Text
.4byte 0x126
.4byte GroundObject_Select_Text
.global gUnknown_81183F0
gUnknown_81183F0: @ 81183F0
.string "GroundObject Select %3d %3d %3d\0"
.align 2,0
.global gUnknown_8118414
gUnknown_8118414: @ 8118414
.string "GroundObject Cancel %3d\0"
.align 2,0
.global gUnknown_811842C
gUnknown_811842C: @ 811842C
.string "GroundObject CancelBlank\0"
.align 2,0
.global gUnknown_8118448
gUnknown_8118448: @ 8118448
.string "GroundObject Add id %3d kind %3d[%3d] type %3d group %3d sector %3d\0"
.align 2,0
.global GroundObject_AddText
GroundObject_AddText: @ AddText
.string "GroundObject_Add\0"
.align 2,0
.global gUnknown_81184A4
gUnknown_81184A4: @ 81184A4
.4byte GroundObjectFile_Text
.4byte 0x283
.4byte GroundObject_AddText
.global gUnknown_81184B0
gUnknown_81184B0: @ 81184B0
.string "GroundObject Delete id %3d\0"
.align 2,0
.global gUnknown_81184CC
gUnknown_81184CC: @ 81184CC
.string "GroundObject Execute %3d \0"
.align 2,0
.global GroundObject_ExecuteScript_Text
GroundObject_ExecuteScript_Text: @ ExecuteScript
.string "GroundObject_ExecuteScript\0"
.align 2,0
.global gUnknown_8118504
gUnknown_8118504: @ 8118504
.4byte GroundObjectFile_Text
.4byte 0x303
.4byte GroundObject_ExecuteScript_Text
.global GroundObject_Action_Text
GroundObject_Action_Text: @ Action
.string "GroundObject_Action\0"
.align 2,0
.global gUnknown_8118524
gUnknown_8118524: @ 8118524
.4byte GroundObjectFile_Text
.4byte 0x60D
.4byte GroundObject_Action_Text
.global gUnknown_8118530
gUnknown_8118530: @ 8118530
.4byte GroundObjectFile_Text
.4byte 0x617
.4byte GroundObject_Action_Text
.string "pksdir0\0"
.align 2,0
.global gGroundEffectCallbacks
gGroundEffectCallbacks: @ 8118544
@ replacing .incbin "baserom.gba", 0x118544, 0xAE
.byte 0x03, 0x00, 0x00, 0x00
.4byte CallbackEffectGetIndex
.4byte CallbackEffectGetSize
.4byte CallbackEffectGetHitboxCenter
.4byte CallbackEffectGetPosHeightAndUnk
.4byte CallbackEffectGetDirection
.4byte CallbackEffectGetFlags
.4byte CallbackEffectSetHitboxPos
.4byte CallbackEffectSetPositionBounds
.4byte CallbackEffectMoveReal
.4byte CallbackEffectSetPosHeight
.4byte CallbackEffectSetDirection
.4byte CallbackEffectSetEventIndex
.byte 0x00, 0x00, 0x00, 0x00
.4byte CallbackEffectSetUnk_80AD670
.4byte CallbackEffectSetFlags
.4byte CallbackEffectClearFlags
.byte 0x00, 0x00, 0x00, 0x00
.4byte CallbackEffectMoveRelative
.4byte CallbackEffectSpriteRelatedCheck_80AD690
.4byte CallbackEffectSpriteRelated_80AD6B4
.byte 0xf6, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.4byte gUnknown_81185D8
.byte 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.global gUnknown_81185D8
gUnknown_81185D8: @ 81185D8
.string "../ground/ground_effect.c\0"
.global gUnknown_81185F2
gUnknown_81185F2: @ 81185F2
@ replacing .incbin "baserom.gba", 0x1185F2, 0x1E
.byte 0xff, 0xff, 0x00, 0x08, 0x01, 0x08, 0x00, 0x10, 0x00, 0x00
.global gUnknown_81185FC
gUnknown_81185FC: @ 81185FC
.string "GroundEffect_Select\0"
.align 2, 0
.global gUnknown_8118610
gUnknown_8118610: @ 8118610
.4byte gUnknown_81185D8
.4byte 0x106
.4byte gUnknown_81185FC
.global gUnknown_811861C
gUnknown_811861C: @ 811861C
.string "GroundEffect Select %3d %3d %3d"
.align 2,0
.global gUnknown_8118640
gUnknown_8118640: @ 8118640
.string "GroundEffect Cancel %3d"
.align 2,0
.global gUnknown_8118658
gUnknown_8118658: @ 8118658
.string "GroundEffect CancelBlank\0"
.align 2,0
.global gUnknown_8118674
gUnknown_8118674: @ 8118674
@ replacing .incbin "baserom.gba", 0x118674, 0x58
.string "GroundEffect Add id %3d kind %3d type %3d group %3d sector %3d\0"
.align 2, 0
.global gUnknown_81186B8
gUnknown_81186B8: @ 81186B8
.string "GroundEffect_Add\0"
.align 2, 0
.global gUnknown_81186CC
gUnknown_81186CC: @ 81186CC
@ replacing .incbin "baserom.gba", 0x1186CC, 0xC
.4byte gUnknown_81185D8
.byte 0x10, 0x02, 0x00, 0x00
.4byte gUnknown_81186B8
.global gUnknown_81186D8
gUnknown_81186D8: @ 81186D8
.string "GroundEffect Delete id %3d"
.align 2,0
.global gUnknown_81186F4
gUnknown_81186F4: @ 81186F4
.string "GroundEffect Execute %3d "
.align 2,0
.global GroundEffect_ExecuteScript_Text
GroundEffect_ExecuteScript_Text: @ ExecuteScript
.string "GroundEffect_ExecuteScript"
.align 2,0
.global gUnknown_811872C
gUnknown_811872C: @ 811872C
.4byte gUnknown_81185D8
.4byte 0x290
.4byte GroundEffect_ExecuteScript_Text
.global GroundEffect_Action_Text
GroundEffect_Action_Text: @ Action
.string "GroundEffect_Action\0"
.align 2,0
.global gUnknown_811874C
gUnknown_811874C: @ 811874C
.4byte gUnknown_81185D8
.4byte 0x560
.4byte GroundEffect_Action_Text
.global gUnknown_8118758
gUnknown_8118758: @ 8118758
.4byte gUnknown_81185D8
.4byte 0x56A
.4byte GroundEffect_Action_Text
.string "pksdir0\0"
.align 2,0
@ Ground Link
.global GroundLink_FileText
GroundLink_FileText: @ FileText
.string "../ground/ground_link.c\0"
.align 2,0
.global GroundLink_SelectText
GroundLink_SelectText: @ SelectText
.string "GroundLink_Select\0"
.align 2,0
.global gUnknown_8118798
gUnknown_8118798: @ 8118798
.4byte GroundLink_FileText
.byte 0x4D, 0x00, 0x00, 0x00
.4byte GroundLink_SelectText

File diff suppressed because it is too large Load Diff

9
data/pksdir_6.s Normal file
View File

@@ -0,0 +1,9 @@
.section .rodata
.align 2, 0
@ ???
.string "pksdir0\0"
.align 2, 0

View File

@@ -9,6 +9,13 @@ typedef struct DebugLocation
/* 0x8 */ const u8 *func;
} DebugLocation;
// Macros for easier FatalError handling. FATAL_ERROR should be used as it gets the file, line and function name from gcc, however for matching purposes we always explicitly use FATAL_ERROR_ARGS
#define DEBUG_LOC_PTR(file, line, func)((&((DebugLocation){file, line, func})))
#define FATAL_ERROR_ARGS(file, line, str, ...) FatalError(DEBUG_LOC_PTR(file, line, __func__), str, __VA_ARGS__ )
#define FATAL_ERROR(str, ...) FATAL_ERROR_ARGS(__FILE__, __LINE__, str, __VA_ARGS__)
void FatalError(const DebugLocation *debug, const char *text, ...) NORETURN;
void Log(u8 num, const u8 *text, ...);
void NDS_DebugInit(void);

View File

@@ -1,12 +1,49 @@
#ifndef GUARD_GROUND_SPRITE_H
#define GUARD_GROUND_SPRITE_H
#include "structs/axdata.h"
#include "structs/sprite_oam.h"
#include "structs/str_position.h"
// TODO: Clean up these structs
struct UnkGroundSpriteSubStructx48
{
s16 unk0;
u16 unk2;
axmain *axmain;
};
// size: 0x80 (probably the last sub-struct of GroundLives)
struct UnkGroundSpriteStruct
{
axdata axdata;
unkStruct_2039DB0 unk3C;
struct UnkGroundSpriteSubStructx48 unk48;
u16 flags_0x50;
s16 unk52;
OpenedFile *unk54;
s16 unk58;
u8 unk5A;
s32 unk5C;
s32 unk60;
s16 unk64;
s16 unk66;
u16 unk68;
s16 unk6A;
u16 unk6C;
s16 unk6E;
u8 unk70;
PixelPos unk74;
s32 unk7C;
};
// size: 0xC
typedef struct unkStruct_3001B7C_sub0
{
u32 unk0;
s32 unk4;
u32 unk8;
struct UnkGroundSpriteStruct *unk8;
} unkStruct_3001B7C_sub0;
// size: 0x4
@@ -16,13 +53,24 @@ typedef struct unkStruct_3001B7C_sub108
s16 unk2;
} unkStruct_3001B7C_sub108;
#define UNK_3001B7C_SUB0_COUNT 22
#define UNK_3001B7C_SUB108_COUNT 2
// size: 0x110
typedef struct unkStruct_3001B7C
{
unkStruct_3001B7C_sub0 unk0[22];
unkStruct_3001B7C_sub108 unk108[2];
unkStruct_3001B7C_sub0 unk0[UNK_3001B7C_SUB0_COUNT];
unkStruct_3001B7C_sub108 unk108[UNK_3001B7C_SUB108_COUNT];
} unkStruct_3001B7C;
void GroundSprite_Reset(s16);
void GroundSprite_Reset(s32);
void GroundSprite_ExtendPaletteAdd(struct UnkGroundSpriteStruct *ptr, u16);
void GroundSprite_ExtendPaletteDelete(struct UnkGroundSpriteStruct *ptr);
void sub_80A67CC(struct UnkGroundSpriteStruct *ptr, struct UnkGroundSpriteSubStructx48 *a1, s32 a2);
void sub_80A68A0(struct UnkGroundSpriteStruct *ptr);
void sub_80A6EFC(struct UnkGroundSpriteStruct *ptr, s32 a1_, s32 a2_);
void sub_80A7040(struct UnkGroundSpriteStruct *ptr, s32 a1_, s32 a2_, s32 a3);
bool8 sub_80A7094(struct UnkGroundSpriteStruct *ptr, PixelPos *r10, PixelPos *posArg, s32 a3);
bool8 sub_80A7310(struct UnkGroundSpriteStruct *ptr, PixelPos *posArg1, PixelPos *posArg2, s32 a3);
#endif // GUARD_GROUND_SPRITE_H
#endif // GUARD_GROUND_SPRITE_H

View File

@@ -0,0 +1,15 @@
#ifndef GUARD_GROUND_SPRITE_DATA_H
#define GUARD_GROUND_SPRITE_DATA_H
struct GroundObjectKind
{
s8 unk0;
u16 unk2;
const char *fileName;
};
extern const char *const gUnknown_81178F4[];
extern const struct GroundObjectKind gGroundObjectKinds[];
extern const struct GroundObjectKind gUnknown_8117E8C[];
#endif // GUARD_GROUND_SPRITE_DATA_H

View File

@@ -38,4 +38,7 @@ void sub_803B6B0(s32 x, s32 y, u8 index, u32);
bool8 sub_803C0DC(s16 species);
bool8 sub_803C110(s16 index);
extern const unkStruct_80E9920 gUnknown_80E9920[21];
extern const unkStruct_80E9F8C gUnknown_80E9F8C[45];
#endif // POKEMON_MAIL_H

View File

@@ -1,6 +1,22 @@
#ifndef POKEMON_MAIL_PRE_H
#define POKEMON_MAIL_PRE_H
struct PokemonPair
{
s16 speciesA;
s16 speciesB;
};
struct PokemonItem
{
s16 species;
u8 itemId;
};
extern const struct PokemonPair gUnknown_80E8168[6];
extern const struct PokemonItem gUnknown_80E8180[21];
extern const struct PokemonItem gUnknown_80E81D4[386];
extern const s16 gUnknown_80E80E0[35];
extern const s16 gUnknown_80E8126[33];
extern const u8 gMankeyMission[];
@@ -35,4 +51,4 @@ extern const u8 gDifficultyText[];
extern const u8 gRewardText[];
extern const u8 gUnknown_80E8B7C[];
#endif // POKEMON_MAIL_PRE_H
#endif // POKEMON_MAIL_PRE_H

View File

@@ -53,7 +53,7 @@ void sub_8005180(void);
void sub_8005304(void);
void sub_8005610(OpenedFile *, s32 vramIdx, s32 brightness, const RGB *ramp);
const RGB *sub_8005674(const EfoFileData *, s32 vramIdx);
void sub_800569C(DungeonPos *, axObject *, u8);
void sub_800569C(DungeonPos *, axdata *, u8);
void sub_8005700(DungeonPos *, axObject *);
void sub_8005770(s32, const RGB *color, s32 brightness, const RGB *ramp);

View File

@@ -100,32 +100,6 @@ typedef struct axObject
} info;
} axObject;
// size: 0x80? (assuming it's the last sub-struct of GroundLives)
typedef struct axPokemon
{
axObject obj;
/* 0x4C */ axmain *axmain;
u16 flags_0x50;
s16 unk52;
u8 fill54[0x58 - 0x54];
u16 unk58;
u8 unk5A;
// 1b padding
s32 unk5C;
s32 unk60;
u8 fill64[0x66 - 0x64];
s16 unk66;
s16 unk68;
s16 unk6A;
u16 unk6C;
u16 unk6E;
u8 unk70;
u8 fill71[0x74 - 0x71];
s32 unk74;
s32 unk78;
s32 unk7C;
} axPokemon;
typedef struct Palette256
{
RGB pal[256];

View File

@@ -191,7 +191,6 @@ SECTIONS {
asm/code_803B050.o(.text);
src/pokemon_mail.o(.text);
src/code_803C1B4.o(.text);
asm/code_803C1D0.o(.text);
src/personality_test1.o(.text);
src/personality_test2.o(.text);
src/code_803D0D8.o(.text);
@@ -329,7 +328,6 @@ SECTIONS {
src/code_8097F40.o(.text);
src/exclusive_pokemon.o(.text);
src/position_util.o(.text);
asm/code_8098468.o(.text);
src/ground_main.o(.text);
src/code_8099328.o(.text);
src/code_8099360.o(.text);
@@ -346,8 +344,10 @@ SECTIONS {
asm/code_80A59DC.o(.text);
src/ground_map_2.o(.text);
src/ground_sprite.o(.text);
asm/ground_sprite.o(.text);
src/code_80A7714.o(.text);
src/ground_sprite_data.o(.text);
src/ground_sprite_monster.o(.text);
src/ground_sprite_util.o(.text);
src/ground_script_file.o(.text);
src/ground_lives.o(.text);
asm/ground_lives.o(.text);
src/ground_object.o(.text);
@@ -696,6 +696,13 @@ SECTIONS {
data/data_8115F5C.o(.rodata);
src/code_809A560.o(.rodata);
data/data_8115F5C_2.o(.rodata);
src/ground_sprite.o(.rodata);
src/ground_sprite_data.o(.rodata);
src/ground_sprite_monster.o(.rodata);
src/ground_sprite_util.o(.rodata);
data/pksdir_6.o(.rodata);
src/ground_script_file.o(.rodata);
data/data_8115F5C_1.o(.rodata);
src/ground_event.o(.rodata);
src/unk_dungeon_load_maybe.o(.rodata);
data/data_8115F5C_3.o(.rodata);

View File

@@ -26,7 +26,7 @@ u8 sub_803C1D0(struct DungeonLocation *dungeon, u8 missionType)
s32 a = sub_803C1B4(dungeon, missionType);
a /= 2;
if ((u8)a >= 7) {
a = 6;
a = 6;
return a;
}
return a;
@@ -51,7 +51,7 @@ void sub_803C21C(WonderMail *param_1, unkStruct_802F204 *param_2)
uVar2 = sub_803C1D0(&param_1->unk4.dungeon,param_1->missionType);
param_2->moneyReward = 0;
for(index = 0; index < MAX_ITEM_REWARDS; index++)
for(index = 0; index < MAX_ITEM_REWARDS; index++)
{
param_2->itemRewards[index] = ITEM_NOTHING;
}
@@ -116,11 +116,12 @@ void sub_803C21C(WonderMail *param_1, unkStruct_802F204 *param_2)
param_2->teamRankPtsReward = GetDungeonTeamRankPts(&param_1->unk4.dungeon,param_1->missionType);
}
void sub_803C37C(DungeonLocation *location, u8 r1, u8 *itemReward) {
void sub_803C37C(DungeonLocation *location, u8 r1, u8 *itemReward)
{
s32 r7;
bool8 flag;
u8 r4;
r7 = sub_803C1B4(location, r1);
sub_8090910(location, r7);
@@ -135,3 +136,159 @@ void sub_803C37C(DungeonLocation *location, u8 r1, u8 *itemReward) {
*itemReward = r4;
}
// TODO: Figure out if this is the right file
#include "random.h"
#include "pokemon_mail.h"
#include "pokemon_mail_pre.h"
bool8 sub_803C3E0(WonderMail *mail)
{
const unkStruct_80E9920 *ptr;
s32 counter, id;
s32 stack[ARRAY_COUNT(gUnknown_80E9920)];
counter = 0;
for (ptr = gUnknown_80E9920, id = 0; id < ARRAY_COUNT_INT(gUnknown_80E9920); ptr++, id++) {
if (sub_803C110(ptr->parentSpecies) && sub_803C110(ptr->childSpecies)) {
stack[counter++] = id;
}
}
if (counter != 0) {
id = stack[RandInt(counter)];
ptr = &gUnknown_80E9920[id];
mail->clientSpecies = ptr->parentSpecies;
mail->targetSpecies = ptr->childSpecies;
mail->unk2 = 7;
return TRUE;
}
return FALSE;
}
bool8 sub_803C45C(WonderMail *mail)
{
s32 counter, id;
s32 stack[ARRAY_COUNT(gUnknown_80E9F8C)];
const unkStruct_80E9F8C *ptr;
counter = 0;
ptr = &gUnknown_80E9F8C[0];
for (id = 0; id < ARRAY_COUNT_INT(gUnknown_80E9F8C); ptr++, id++) {
if (sub_803C110(ptr->speciesA) && sub_803C110(ptr->speciesB)) {
stack[counter++] = id;
}
}
if (counter != 0) {
id = stack[RandInt(counter)];
ptr = &gUnknown_80E9F8C[id];
if ((Rand32Bit() & 0x10)) {
mail->clientSpecies = ptr->speciesA;
mail->targetSpecies = ptr->speciesB;
}
else {
mail->clientSpecies = ptr->speciesB;
mail->targetSpecies = ptr->speciesA;
}
mail->unk2 = 8;
return TRUE;
}
return FALSE;
}
bool8 sub_803C4F0(WonderMail *mail)
{
s32 counter, id;
s32 stack[ARRAY_COUNT(gUnknown_80E8168)];
const struct PokemonPair *ptr;
counter = 0;
ptr = &gUnknown_80E8168[0];
for (id = 0; id < ARRAY_COUNT_INT(gUnknown_80E8168); ptr++, id++) {
if (sub_803C110(ptr->speciesA) && sub_803C110(ptr->speciesB)) {
stack[counter++] = id;
}
}
if (counter != 0) {
id = stack[RandInt(counter)];
ptr = &gUnknown_80E8168[id];
if ((Rand32Bit() & 0x10)) {
mail->clientSpecies = ptr->speciesA;
mail->targetSpecies = ptr->speciesB;
}
else {
mail->clientSpecies = ptr->speciesB;
mail->targetSpecies = ptr->speciesA;
}
mail->unk2 = 9;
return TRUE;
}
return FALSE;
}
bool8 sub_803C580(WonderMail *param_1)
{
s32 counter, id;
s32 array[ARRAY_COUNT(gUnknown_80E8180)];
const struct PokemonItem *ptr;
counter = 0;
ptr = gUnknown_80E8180;
if (!sub_80023E4(6))
return FALSE;
for (id = 0; id < ARRAY_COUNT_INT(gUnknown_80E8180); ptr++, id++) {
if (sub_803C110(ptr->species) && xxx_bit_lut_lookup_8091E50(param_1->unk4.dungeon.id, ptr->itemId)) {
array[counter++] = id;
}
}
if (counter != 0) {
id = array[RandInt(counter)];
ptr = &gUnknown_80E8180[id];
param_1->clientSpecies = ptr->species;
param_1->targetSpecies = ptr->species;
param_1->targetItem = ptr->itemId;
param_1->unk2 = 5;
return TRUE;
}
return FALSE;
}
bool8 sub_803C610(WonderMail *param_1)
{
s32 counter, id;
s32 array[ARRAY_COUNT(gUnknown_80E81D4)];
const struct PokemonItem *ptr;
counter = 0;
ptr = gUnknown_80E81D4;
for (id = 0; id < ARRAY_COUNT_INT(gUnknown_80E81D4); ptr++, id++) {
if (sub_803C110(ptr->species) && xxx_bit_lut_lookup_8091E50(param_1->unk4.dungeon.id, ptr->itemId)) {
array[counter++] = id;
}
}
if (counter != 0) {
id = array[RandInt(counter)];
ptr = &gUnknown_80E81D4[id];
param_1->clientSpecies = ptr->species;
param_1->targetSpecies = ptr->species;
param_1->targetItem = ptr->itemId;
param_1->unk2 = 6;
return TRUE;
}
return FALSE;
}

View File

@@ -100,7 +100,7 @@ static void sub_8040C4C(Entity *entity, Move *move, bool32 a2)
s32 r2 = sub_800E710(apparentId, sub_80412E0(move->id, GetApparentWeather(entity), TRUE));
if (r2 != -1) {
sub_800569C(&sp.unk8, &entity->axObj, r2);
sub_800569C(&sp.unk8, &entity->axObj.axdata, r2);
}
else {
sp.unk8 = (DungeonPos) {0};
@@ -252,7 +252,7 @@ static void sub_8041038(struct UnkStruct_8040094 *a0, Entity *entity, Move *move
s32 r2 = sub_800E710(entInfo->apparentID, sub_80412E0(move->id, GetApparentWeather(entity), a2));
if (r2 != -1) {
sub_800569C(&a0->unk8, &entity->axObj, r2);
sub_800569C(&a0->unk8, &entity->axObj.axdata, r2);
}
else {
a0->unk8 = (DungeonPos) {0};
@@ -312,7 +312,7 @@ void sub_8041168(Entity *entity, Entity *entity2, Move *move, DungeonPos *pos)
var2 = sub_800ECA4(var)->unk1c;
if (var2 != -1) {
if (EntityIsValid(entity2)) {
sub_800569C(&sp.unk8, &entity2->axObj, var2);
sub_800569C(&sp.unk8, &entity2->axObj.axdata, var2);
}
else {
sp.unk8 = (DungeonPos) {0};

View File

@@ -229,7 +229,7 @@ s32 sub_8041550(Entity *entity, s32 a1, u8 a2, u8 a3, s32 a4, u8 a5)
sub_804178C(a4 == 2);
}
sub_800569C(&pos, &entity->axObj, a3);
sub_800569C(&pos, &entity->axObj.axdata, a3);
if (pos.x != 99 && pos.y != 99) {
pixelPos.x = entity->pixelPos.x + (pos.x << 8);
pixelPos.y = (entity->pixelPos.y + (pos.y << 8)) - entInfo->unk174.raw;
@@ -1718,7 +1718,7 @@ void sub_8042EC8(Entity *a0, s32 a1)
if (strPtr->unk8 != -1) {
sub_800569C(&sp4,
&a0->axObj,
&a0->axObj.axdata,
strPtr->unk8);
}

View File

@@ -1489,7 +1489,7 @@ s32 sub_80861F8(s32 param_1,Entity *param_2,bool32 param_3)
pos.y = 0;
uStack_38 = sub_800E700(param_1Copy);
if (uStack_38 != -1) {
sub_800569C(&pos, &param_2->axObj, uStack_38);
sub_800569C(&pos, &param_2->axObj.axdata, uStack_38);
}
stack.unk0 = param_1Copy;
stack.unk4 = 0;

View File

@@ -1,73 +0,0 @@
#include "global.h"
#include "structs/axdata.h"
extern void sub_80A68A0(u32);
extern void sub_80A7094(axPokemon *, u32, u32, u32);
extern void sub_80A7310(axPokemon *, u32, u32, u32);
extern void ResetCurrentScriptFile();
static EWRAM_DATA s16 sUnknown_2039DE0 = {0};
extern const struct GroundScriptHeader gNullGroundScript;
extern const struct GroundScriptHeader *gMapScriptTable[]; // 811E2F8
void sub_80A7714(u32 a0)
{
sub_80A68A0(a0);
}
void sub_80A7720(axPokemon *a0, u32 a1, u32 a2)
{
sub_80A7094(a0, 0, a1, a2);
sub_80A7310(a0, a1, 0, a2);
}
void sub_80A7744(void)
{
sUnknown_2039DE0 = -1;
}
void sub_80A7754(void)
{
sUnknown_2039DE0 = -1;
}
void SetCurrentScriptFile(s16 a0)
{
s32 temp = a0;
ResetCurrentScriptFile();
if (temp != -1)
sUnknown_2039DE0 = temp;
}
void ResetCurrentScriptFile(void)
{
if (sUnknown_2039DE0 != -1)
sUnknown_2039DE0 = -1;
}
bool8 ChangeScriptFile(s16 a0)
{
s32 temp;
s32 temp2;
temp = a0;
temp2 = temp;
if (sUnknown_2039DE0 != temp) {
if (temp < 0)
ResetCurrentScriptFile();
else
SetCurrentScriptFile(temp2);
return TRUE;
}
return FALSE;
}
const struct GroundScriptHeader *GetGroundScript(s16 a0)
{
if (a0 != -1)
return gMapScriptTable[a0];
else
return &gNullGroundScript;
}

View File

@@ -175,7 +175,3 @@ const struct GroundEventTableEntry gGroundEnterLookupTable[58] = {
{ 161, 57},
{ -1, 0},
};
ALIGNED(4) const u8 gScenarioCalcLogString[] = "SCENARIO CALC [%3d] %4d %4d -> %4d %4d";
ALIGNED(4) const u8 EventFlagFile_Text[] = "../main/event_flag.c";

View File

@@ -95,7 +95,7 @@ const s16 gUnknown_80E8126[33] = {
MONSTER_NONE
};
const s16 gUnknown_80E8168[6][2] = {
const struct PokemonPair gUnknown_80E8168[6] = {
{ MONSTER_NIDORAN_M, MONSTER_NIDORAN_F },
{ MONSTER_NIDORINO, MONSTER_NIDORINA },
{ MONSTER_NIDOKING, MONSTER_NIDOQUEEN },
@@ -104,7 +104,7 @@ const s16 gUnknown_80E8168[6][2] = {
{ MONSTER_MINUN, MONSTER_PLUSLE }
};
const s16 gUnknown_80E8180[21][2] = {
const struct PokemonItem gUnknown_80E8180[21] = {
{ MONSTER_GLOOM, ITEM_LEAF_STONE },
{ MONSTER_WEEPINBELL, ITEM_LEAF_STONE },
{ MONSTER_EXEGGCUTE, ITEM_LEAF_STONE },
@@ -129,7 +129,7 @@ const s16 gUnknown_80E8180[21][2] = {
};
// List of preferred gummis
const s16 gUnknown_80E81D4[386][2] = {
const struct PokemonItem gUnknown_80E81D4[386] = {
{ MONSTER_EKANS, ITEM_PINK_GUMMI },
{ MONSTER_ARBOK, ITEM_PINK_GUMMI },
{ MONSTER_ARMALDO, ITEM_GRAY_GUMMI },

View File

@@ -567,7 +567,7 @@ s32 sub_8056564(Entity *entity, DungeonPos *pos, Move *move, s32 r4)
DungeonRunFrameActions(0x5E);
someRetVal = sub_800E710(entInfo->apparentID, sub_80412E0(move->id, GetApparentWeather(entity), 1));
if (someRetVal != -1) {
sub_800569C(&unkSp1.unk8, &entity->axObj, someRetVal);
sub_800569C(&unkSp1.unk8, &entity->axObj.axdata, someRetVal);
}
else {
unkSp1.unk8 = (DungeonPos) {0};

View File

@@ -463,7 +463,7 @@ void ScenarioCalc(s16 param_1,s32 param_2,s32 param_3)
param_1_s32 = param_1;
GetScriptVarScenario(param_1_s32,&local_18,&local_14);
Log(6,gScenarioCalcLogString,param_1_s32,local_18,local_14,param_2,param_3); // SCENARIO CALC [%3d] %4d %4d -> %4d %4d
Log(6,"SCENARIO CALC [%3d] %4d %4d -> %4d %4d",param_1_s32,local_18,local_14,param_2,param_3);
if ((param_1_s32 == 3) && ((param_2 != local_18 || (param_3 != local_14)))) {
SetScriptVarValue(NULL,CLEAR_COUNT,0);
}
@@ -650,14 +650,6 @@ void sub_8001D88(void)
}
}
ALIGNED(4) static const u8 sFlagCalc_Text[] = "_FlagCalc";
static const DebugLocation sFlagCalcDebugLocation = {
EventFlagFile_Text,
0x551,
sFlagCalc_Text
};
// arm9.bin::0200EC08
s32 _FlagCalc(s32 param_1, s32 param_2, enum FlagCalcOperation operation)
{
@@ -687,18 +679,10 @@ s32 _FlagCalc(s32 param_1, s32 param_2, enum FlagCalcOperation operation)
case CALC_RANDOM:
return OtherRandInt(param_2);
default:
FatalError(&sFlagCalcDebugLocation,"event flag expansion error %d", operation); // event flag expansion error %d
FATAL_ERROR_ARGS("../main/event_flag.c", 1361, "event flag expansion error %d", operation);
}
}
ALIGNED(4) static const u8 sFlagJudge_Text[] = "_FlagJudge";
static const DebugLocation sFlagJudgeDebugLocation = {
EventFlagFile_Text,
0x57C,
sFlagJudge_Text
};
// arm9.bin::0200EAE4
bool8 _FlagJudge(s32 param_1, s32 param_2, enum FlagJudgeOperation operation)
{
@@ -726,7 +710,7 @@ bool8 _FlagJudge(s32 param_1, s32 param_2, enum FlagJudgeOperation operation)
case JUDGE_BIT_SET:
return param_1 >> (param_2) & 1;
default:
FatalError(&sFlagJudgeDebugLocation,"event flag rule error %d", operation); // event flag rule error %d
FATAL_ERROR_ARGS("../main/event_flag.c", 1404, "event flag rule error %d", operation);
}
}

View File

@@ -144,8 +144,6 @@ struct TestStruct
s32 unk4;
};
extern struct TestStruct sUnknown; // Todo: figure out or guess what this variable could be.
s32 GroundEvent_Add(s32 id, const GroundEventData *eventData, s32 group, s32 sector)
{
s32 i;
@@ -194,11 +192,7 @@ s32 GroundEvent_Add(s32 id, const GroundEventData *eventData, s32 group, s32 sec
break;
}
// The line below effectively does nothing(it's not even generated in the asm, agbcc ignores it, but changes regalloc...), because 'r' is overwritten in the next two instructions, however it is REQUIRED to match. Only discovered, because it's present in Blue's asm.
r = sUnknown;
r.unk0 = eventData->kind << 11;
r.unk4 = eventData->unk1 << 11;
r = (struct TestStruct) {eventData->kind << 11, eventData->unk1 << 11};
SetUnkInGroundEvent(&eventData->pos, sp);
ptr->unkC = sp[0];

View File

@@ -15,9 +15,10 @@
#include "play_time.h"
#include "pokemon.h"
#include "text_util.h"
#include "code_80A26CC.h"
EWRAM_DATA u32 gUnknown_20398A8 = {0};
EWRAM_DATA u32 gUnknown_20398AC = {0};
EWRAM_DATA s32 gUnknown_20398AC = {0};
EWRAM_DATA u32 gUnknown_20398B0 = {0};
EWRAM_DATA u32 gUnknown_20398B4 = {0};
EWRAM_DATA u8 gUnknown_20398B8 = {0};
@@ -25,7 +26,7 @@ EWRAM_DATA bool8 gUnknown_20398B9 = {0};
EWRAM_DATA bool8 gScriptMode = {0};
UNUSED EWRAM_DATA static u8 gUnknown_20398BB = {0};
EWRAM_DATA u16 gUnknown_20398BC = {0};
EWRAM_DATA u16 gUnknown_20398BE = {0};
EWRAM_DATA s16 gUnknown_20398BE = {0};
EWRAM_DATA u32 gUnknown_20398C0 = {0};
EWRAM_DATA s16 gUnknown_20398C4 = {0};
EWRAM_DATA struct unkStruct_20398C8 gUnknown_20398C8 = {0};
@@ -48,12 +49,6 @@ extern void nullsub_120();
extern void sub_809B638();
extern void nullsub_106();
extern void sub_80A73EC();
extern void sub_80A6E68();
extern void GroundMap_Action();
extern void nullsub_124();
extern void GroundLives_Action();
extern void GroundObject_Action();
extern void GroundEffect_Action();
extern void sub_809CB8C();
extern void sub_8098CC8();
@@ -61,6 +56,427 @@ extern void ClearAllItems_8091FB4();
extern u8 sub_809C730();
extern void sub_8095494(WonderMailSub *param_1, u8 index);
extern u16 gUnknown_2026E4E;
// TODO: Move these externs to headers
extern void GroundSprite_Reset(s32);
extern s16 sub_8098FCC(u32 unused);
extern s16 sub_80A2654(s16 r0);
extern void sub_809A71C(s32);
extern bool8 sub_809AFAC(void);
extern bool8 sub_80048BC(void);
void FadeOutAllMusic(u16 speed);
extern u8 sub_80023E4(u32);
extern bool8 sub_809C740(void);
extern bool8 sub_8099B94(void);
extern void FreeGroundMapAction(void);
extern void nullsub_118(void);
extern void FreeGroundLives(void);
extern void FreeGroundObjects(void);
extern void FreeGroundEffects(void);
extern void FreeGroundEvents(void);
extern void sub_809CB74(void);
extern void sub_809A610(void);
extern void sub_809C618(void);
extern void sub_80A658C(void);
extern void sub_809D508(void);
extern void sub_80A7754(void);
extern void nullsub_119(void);
extern void sub_8099768(void);
extern void nullsub_103(void);
extern void sub_8099648(void);
extern void sub_809975C(void);
extern void sub_809D0AC(void);
extern void sub_80A7744(void);
extern void sub_809D490(void);
extern void sub_80A62F0(void);
extern void sub_809C5C4(void);
extern void sub_809A560(void);
extern void sub_809CB50(void);
extern void AllocGroundMapAction(void);
extern void nullsub_117(void);
extern void AllocGroundEvents(void);
extern void AllocGroundLives(void);
extern void AllocGroundObjects(void);
extern void AllocGroundEffects(void);
extern void sub_809A62C(void);
extern void nullsub_124(void);
extern void GroundLives_Action(void);
extern void GroundObject_Action(void);
extern void GroundEffect_Action(void);
extern void nullsub_105(void);
extern void sub_809B474(void);
extern void GroundScript_Unlock();
extern void sub_809D25C(void);
extern void sub_80A59DC(void);
extern void sub_809B614(void);
extern void sub_809CA20(void);
extern void sub_80A6E80(void);
extern void sub_8099BE4(void);
extern void sub_8099744(void);
extern void sub_8011860(void);
extern void IncrementPlayTime(struct PlayTimeStruct *);
extern void WaitForNextFrameAndAdvanceRNG(void);
extern void LoadBufferedInputs(void);
extern void nullsub_120(void);
extern void sub_80A5E70(void);
extern void sub_809B638(void);
extern void nullsub_106(void);
extern void sub_80A73EC(void);
extern void sub_8099750(void);
extern void sub_8009908(void);
extern void GroundMap_Reset(void);
extern void sub_809D0BC(void);
extern void DeleteGroundEvents(void);
extern void DeleteGroundLives(void);
extern void DeleteGroundObjects(void);
extern void DeleteGroundEffects(void);
extern void sub_809C658(void);
extern void nullsub_16(void);
extern void UpdateAdventureAchievements(void);
extern void xxx_call_update_bg_sound_input(void);
extern void sub_80A6E68(void);
extern void sub_80060EC(void);
extern void sub_801180C(void);
extern void ScriptPrintNullTextbox(void);
extern void sub_809977C(void);
extern void GroundMap_ExecuteEvent(s32, u32);
extern void UpdateFadeInTile(s32);
extern void GroundMap_Action(void);
extern void sub_8098C58(void);
extern void sub_8001D88(void);
extern u32 GroundMainGameCancelRequest(u32 r0);
extern void sub_80999D4(s32);
extern void sub_809D4B0(void);
extern void sub_809C63C(void);
extern void sub_8005838(s32, s32);
u32 xxx_script_related_8098468(s32 param_1)
{
s32 r7;
s32 varE;
gUnknown_20398B4 = param_1;
gUnknown_20398B9 = 0;
gUnknown_20398B8 = 1;
gScriptMode = 0;
switch (param_1) {
case 0xd:
gScriptMode = 1;
gUnknown_20398B8 = 0;
gUnknown_20398B9 = 1;
break;
case 0xe:
gUnknown_20398B8 = 1;
gUnknown_20398B9 = 1;
break;
case 0xf:
gUnknown_20398B8 = 1;
gUnknown_20398B9 = 1;
break;
case 0x10: {
s32 local_1c;
u32 auStack24;
GetScriptVarScenario(3,&local_1c,&auStack24);
gUnknown_20398B8 = local_1c == 0;
gUnknown_20398B9 = 1;
break;
}
case 0x11:
gUnknown_20398B8 = 0;
gUnknown_20398B9 = 1;
break;
default:
break;
}
sub_801180C();
if (gUnknown_20398B9 == 0 && !sub_80023E4(0xd)) {
FadeOutAllMusic(0x10);
}
gUnknown_2026E4E = 0x808;
UpdateFadeInTile(0);
sub_8099648();
sub_809975C();
sub_809D0AC();
sub_80A7744();
sub_809D490();
sub_80A62F0();
sub_809C5C4();
sub_809A560();
sub_809CB50();
AllocGroundMapAction();
nullsub_117();
AllocGroundEvents();
AllocGroundLives();
AllocGroundObjects();
AllocGroundEffects();
sub_809A62C();
gUnknown_203B49C = 0;
gUnknown_203B49D = 0;
gUnknown_20398A8 = 1;
gUnknown_20398AC = 0;
gUnknown_20398B0 = -1;
gUnknown_20398BE = GetScriptVarValue(0,GROUND_ENTER);
varE = GetScriptVarValue(0,GROUND_ENTER_LINK);
gUnknown_20398C0 = varE;
gUnknown_20398C4 = -1;
r7 = -1;
while (gUnknown_20398A8 - 1 <= 1) {
sub_809A71C(-1);
ScriptPrintNullTextbox();
sub_809977C();
switch (gUnknown_20398B4) {
case 0:
sub_8098C58();
gUnknown_20398B4 = 1;
break;
case 2:
case 3:
sub_8001D88();
break;
case 5:
r7 = 0x70;
break;
case 9:
case 10:
case 0xb:
case 0xc: {
s32 scriptVar13;
SetScriptVarValue(0,DUNGEON_RESULT,gUnknown_20398B4);
SetScriptVarValue(0,WARP_LOCK,0);
sub_8098C58();
UpdateScriptVarWithImmediate(0,DUNGEON_ENTER_FREQUENCY,1,2);
scriptVar13 = (s16)GetScriptVarValue(0,DUNGEON_ENTER);
if (scriptVar13 != -1) {
s32 var;
const DungeonInfo *dungInfo;
if (scriptVar13 == 0x51) {
dungInfo = GetDungeonInfo_80A2608((s16)GetScriptVarValue(0,DUNGEON_ENTER_INDEX));
}
else {
dungInfo = GetDungeonInfo_80A2608(scriptVar13);
}
r7 = dungInfo->unkA;
if (gUnknown_20398B4 == 9) {
SetScriptVarArrayValue(0,DUNGEON_CLEAR_LIST,(u16) scriptVar13,1);
}
var = sub_8098FCC(gUnknown_20398B4);
if (var != -1) {
gUnknown_20398BE = var;
gUnknown_20398C0 = 0;
}
}
break;
}
case 0xd:
sub_8098C58();
gUnknown_20398B4 = 1;
SetScriptVarValue(0,START_MODE,1);
SetScriptVarValue(0,GROUND_GETOUT,0);
SetScriptVarValue(0,GROUND_ENTER,0);
SetScriptVarValue(0,GROUND_ENTER_LINK,0);
r7 = 0x71;
break;
case 0xe:
r7 = 0x73;
break;
case 0xf:
r7 = 0x74;
break;
case 0x10:
r7 = 0x75;
break;
case 0x11:
r7 = 0x76;
break;
}
if (gUnknown_20398B9 == 0) {
s32 var = GetScriptVarValue(0,GROUND_ENTER);
SetScriptVarValue(0,START_MODE,gUnknown_20398B4);
if (gUnknown_20398B4 != 1) {
if (gUnknown_20398B4 == 3) {
SetScriptVarValue(0,GROUND_GETOUT,gUnknown_20398BE);
}
else {
SetScriptVarValue(0,GROUND_GETOUT,var);
}
}
SetScriptVarValue(0,GROUND_ENTER,gUnknown_20398BE);
SetScriptVarValue(0,GROUND_ENTER_LINK,gUnknown_20398C0);
}
gUnknown_20398B4 = 2;
gUnknown_20398A8 = 0;
gUnknown_20398AC = 0;
gUnknown_20398B0 = -1;
gUnknown_20398BC = gUnknown_20398BE;
gUnknown_20398BE = -1;
sub_809977C();
sub_809D4B0();
GroundSprite_Reset(-1);
sub_809C63C();
sub_809A62C();
GroundMap_Reset();
sub_809D0BC();
DeleteGroundEvents();
DeleteGroundLives();
DeleteGroundObjects();
DeleteGroundEffects();
sub_809C658();
nullsub_16();
UpdateAdventureAchievements();
if (r7 != -1) {
GroundMap_ExecuteEvent(r7,0);
}
else {
GroundMap_ExecuteEvent(0x66,0);
}
GroundMap_Action();
sub_8005838(0,0);
sub_80060EC();
xxx_call_update_bg_sound_input();
while ( 1 ) {
xxx_call_update_bg_sound_input();
sub_80A6E68();
if (gUnknown_20398A8 != 0) {
if (gUnknown_20398AC > 0) {
gUnknown_20398AC--;
if (gUnknown_20398AC < 1) {
sub_80999D4(gUnknown_20398B0);
}
}
else if (!sub_8099B94()) {
if (sub_809C740())
break;
}
}
else if (gUnknown_20398B9 != 0 && gUnknown_20398B8 == 0 && !sub_809AFAC()) {
u16 pressed = gRealInputs.pressed;
if ((pressed & (A_BUTTON | B_BUTTON | SELECT_BUTTON | START_BUTTON | R_BUTTON | L_BUTTON)) || sub_80048BC()) {
GroundMap_ExecuteEvent(0x72,0);
GroundMainGameCancelRequest(0x1e);
FadeOutAllMusic(0x1e);
}
}
GroundMap_Action();
nullsub_124();
GroundLives_Action();
GroundObject_Action();
GroundEffect_Action();
nullsub_105();
sub_809B474();
GroundScript_Unlock();
sub_809D25C();
sub_80A59DC();
sub_809B614();
sub_809CA20();
sub_80A6E80();
sub_8099BE4();
sub_8099744();
sub_8011860();
IncrementPlayTime(gPlayTimeRef);
WaitForNextFrameAndAdvanceRNG();
LoadBufferedInputs();
nullsub_120();
sub_80A5E70();
sub_809B638();
nullsub_106();
sub_80A73EC();
sub_8099750();
sub_8009908();
}
GroundMap_Reset();
r7 = -1;
}
FreeGroundMapAction();
nullsub_118();
FreeGroundLives();
FreeGroundObjects();
FreeGroundEffects();
FreeGroundEvents();
sub_809CB74();
sub_809A610();
sub_809C618();
sub_80A658C();
sub_809D508();
sub_80A7754();
nullsub_119();
sub_8099768();
nullsub_103();
nullsub_16();
if (gUnknown_20398B9 != 0) {
if (gUnknown_20398A8 == 9) {
FadeOutAllMusic(0x1e);
return 0xf;
}
else if (gUnknown_20398A8 == 10) {
return 0x10;
}
else {
FadeOutAllMusic(0x1e);
return 0xf;
}
}
else {
switch (gUnknown_20398A8) {
case 3:
SetScriptVarValue(0,DUNGEON_ENTER,-1);
SetScriptVarValue(0,DUNGEON_ENTER_INDEX,-1);
SetScriptVarValue(0,START_MODE,4);
SetScriptVarValue(0,DUNGEON_RESULT,4);
SetScriptVarValue(0,GROUND_GETOUT,GetScriptVarValue(0,GROUND_ENTER));
return 5;
case 4:
SetScriptVarValue(0,DUNGEON_ENTER,0);
SetScriptVarValue(0,START_MODE,5);
SetScriptVarValue(0,DUNGEON_RESULT,5);
SetScriptVarValue(0,DUNGEON_ENTER,-1);
return 6;
case 5: {
s32 sVar2 = sub_80A2654(gUnknown_20398C4);
SetScriptVarValue(0,DUNGEON_ENTER,gUnknown_20398C4);
SetScriptVarValue(0,DUNGEON_ENTER_INDEX,sVar2);
SetScriptVarArrayValue(0,DUNGEON_ENTER_LIST,(u16) gUnknown_20398C4,1);
SetScriptVarValue(0,START_MODE,7);
SetScriptVarValue(0,DUNGEON_RESULT,7);
if ((s16)GetScriptVarValue(0,GROUND_PLACE) == 10) {
SetScriptVarValue(0,GROUND_PLACE,0);
}
return 7;
}
case 6:
SetScriptVarValue(0,DUNGEON_ENTER,0x51);
SetScriptVarValue(0,DUNGEON_ENTER_INDEX,gUnknown_20398C4);
SetScriptVarValue(0,START_MODE,7);
SetScriptVarValue(0,DUNGEON_RESULT,7);
if ((s16)GetScriptVarValue(0,GROUND_PLACE) == 10) {
SetScriptVarValue(0,GROUND_PLACE,0);
}
return 8;
case 7:
SetScriptVarValue(0,DUNGEON_ENTER,0x50);
SetScriptVarValue(0,DUNGEON_ENTER_INDEX,gUnknown_2039950);
SetScriptVarValue(0,START_MODE,7);
SetScriptVarValue(0,DUNGEON_RESULT,7);
return 9;
case 8:
SetScriptVarValue(0,DUNGEON_ENTER,0x52);
SetScriptVarValue(0,DUNGEON_ENTER_INDEX,gUnknown_20398C4);
SetScriptVarValue(0,START_MODE,7);
SetScriptVarValue(0,DUNGEON_RESULT,7);
return 10;
default:
SetScriptVarValue(0,START_MODE,1);
FadeOutAllMusic(0x10);
return 0xe;
}
}
}
void sub_8098BDC(void)
{
sub_809B57C();

View File

@@ -245,8 +245,6 @@ void sub_80AC1B0(s16, s32);
void sub_80AD0C8(s16, s32);
s32 sub_80A5984();
void sub_80A59A0(s32, s32 *, u16);
void GroundSprite_ExtendPaletteAdd(u32, u16);
void GroundSprite_ExtendPaletteDelete(u32);
extern void sub_80997F4(u16, u16);
s32 sub_809CFE8(u16 param_1);
extern bool8 sub_80A579C(PixelPos *a0, PixelPos *a1);
@@ -3157,7 +3155,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
if (dungLocation.id == DUNGEON_HOWLING_FOREST_2 && ret == 0x104) {
return 2;
}
ret2 = sub_80A90C8((action->unkC).arr[1]);
InlineStrcpy(text, gFriendAreaDialogue[ret2]);
if (ScriptPrintText(0, 1, text) != 0)
@@ -3184,7 +3182,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
return sub_8097640() ? 1 : 0;
break;
case 0xE:
{
{
s32 index;
for(index = 0x11; index < NUM_DUNGEON_MAZE; index++)
{
@@ -3218,11 +3216,11 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
else
return 0;
}
case 0x13:
{
PokemonStruct1 *ptr;
ptr = sub_80A8D54(r2);
if(ptr)
return PokemonFlag2(ptr);
@@ -3244,7 +3242,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
r4 = (r3 << 8);
action->callbacks->getHitboxCenter(action->parentObject, &sp_318);
sub_80A8FD8(r5, &sp_320);
if(sp_318.x - r4 <= sp_320.x
&& sp_318.x + r4 >= sp_320.x
&& sp_318.y - r4 <= sp_320.y
@@ -3282,8 +3280,8 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
PokemonStruct1 sp_2c;
PokemonStruct1 *ptr;
s32 index;
UnlockFriendArea(GetFriendArea(MONSTER_MAGNEMITE));
sp_4 = gUnknown_8116710;
sub_808D144(&sp_2c, &sp_4);
@@ -3308,7 +3306,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
PokemonStruct1 *pokemon;
struct unkStruct_808D144 sp_84;
PokemonStruct1 sp_ac;
UnlockFriendArea(GetFriendArea(MONSTER_ABSOL));
sp_84 = gUnknown_8116738;
sub_808D144(&sp_ac, &sp_84);
@@ -3335,14 +3333,14 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
case 0x1E:
sub_80A8F50(gUnknown_2039D98, 0x7C, POKEMON_NAME_LENGTH);
return 0;
case 0x1F:
{
PokemonStruct1 *pokemon;
s32 index;
struct unkStruct_808D144 sp_108;
PokemonStruct1 sp_130;
sp_108 = gUnknown_8116760;
sub_808D144(&sp_130, &sp_108);
pokemon = sub_808D1DC(&sp_130);
@@ -3354,7 +3352,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
sub_80922B4(gFormatBuffer_Names[r2], gUnknown_2039D98, POKEMON_NAME_LENGTH);
IncrementAdventureNumJoined();
return 0;
}
break;
@@ -3379,7 +3377,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
return 0;
}
break;
case 0x21:
if(HasRecruitedMon(MONSTER_ARTICUNO))
@@ -3390,7 +3388,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
case 0x22:
{
PokemonStruct1 *pokemon = GetPlayerPokemonStruct();
if(pokemon->speciesNum != MONSTER_ARTICUNO && pokemon->speciesNum != MONSTER_ZAPDOS && pokemon->speciesNum != MONSTER_MOLTRES)
return 1;
}
@@ -3415,7 +3413,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
s32 index;
struct unkStruct_808D144 sp_188;
PokemonStruct1 sp_1b0;
if(!GetFriendAreaStatus(GetFriendArea(MONSTER_LATIOS)))
UnlockFriendArea(GetFriendArea(MONSTER_LATIOS));
sp_188 = gUnknown_8116794;
@@ -3429,7 +3427,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
IncrementAdventureNumJoined();
return 0;
}
break;
case 0x26:
sub_80A8F50(gUnknown_2039D98, 0x7A, POKEMON_NAME_LENGTH);
@@ -3440,7 +3438,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
s32 index;
struct unkStruct_808D144 sp_208;
PokemonStruct1 sp_230;
sp_208 = gUnknown_81167BC;
sub_808D144(&sp_230, &sp_208);
pokemon = sub_808D1DC(&sp_230);
@@ -3463,7 +3461,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
if(IsNotMoneyOrUsedTMItem(id))
if(gTeamInventoryRef->teamStorage[id] < 999)
gTeamInventoryRef->teamStorage[id] += 1;
}
else
{
@@ -3527,7 +3525,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
|| indexS16 == MONSTER_REGICE
|| indexS16 == MONSTER_REGISTEEL
|| indexS16 == MONSTER_CELEBI
)
)
continue;
if(!IsExclusivePokemonUnlocked(index)) continue;
if(GetFriendAreaStatus(GetFriendArea(index))) {
@@ -3540,7 +3538,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
if (r4 < 0)
break;
}
SetScriptVarValue(NULL, NEW_FRIEND_KIND, index);
WriteFriendAreaName(gFormatBuffer_FriendArea, GetFriendArea(index), FALSE);
if (GetFriendAreaStatus(GetFriendArea(index)) != 0)
@@ -3552,7 +3550,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
{
s32 id = (s16) GetScriptVarValue(0, NEW_FRIEND_KIND);
WriteFriendAreaName(gFormatBuffer_FriendArea,(GetFriendArea(id)), FALSE);
if (id == 0)
if (id == 0)
return 0;
else if(GetFriendAreaStatus(GetFriendArea(id)) != 0)
return 1;
@@ -3572,15 +3570,15 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
s32 id = (s16) GetScriptVarValue(0, NEW_FRIEND_KIND);
s32 matchMe = id;
WriteFriendAreaName(gFormatBuffer_FriendArea,(GetFriendArea((s16) id)), FALSE);
if(id == 0)
if(id == 0)
return 0;
if(!GetFriendAreaStatus(GetFriendArea(id)))
UnlockFriendArea(GetFriendArea(id));
pokemon = sub_808D2E8(matchMe, NULL ,ITEM_NOTHING, &gUnknown_81167E8, MOVE_NOTHING);
if(pokemon == NULL)
return 0;
for(index = 0; index < POKEMON_NAME_LENGTH; index++)
pokemon->name[index] = gUnknown_2039D98[index];
IncrementAdventureNumJoined();
@@ -3632,7 +3630,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
return 0;
case 0x32:
{
{
struct unkStruct_808D144 sp_288;
PokemonStruct1 sp_2b0;
sp_288 = gUnknown_811681C;
@@ -3654,7 +3652,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
{
if(OtherRandInt(0x100) == 0)
{
SetScriptVarArrayValue(0, EVENT_GONBE, 0, 4);
SetScriptVarArrayValue(0, EVENT_GONBE, 0, 4);
return 1;
}
else
@@ -3663,7 +3661,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
}
}
return 0;
case 0x34:
{
s32 index;
@@ -3677,7 +3675,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
if(IsNotMoneyOrUsedTMItem(id))
if(gTeamInventoryRef->teamStorage[id] < 999)
gTeamInventoryRef->teamStorage[id] += 1;
}
else
{
@@ -3760,7 +3758,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
PixelPos sp_348;
PixelPos sp_350;
PixelPos sp_358;
sp_308.kind = 1;
sp_308.unk1 = 0;
sp_308.width = 1;
@@ -3815,7 +3813,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
if(held & B_BUTTON) {
to = 4;
}
for(index = 0; index < to; index++)
{
if(action->callbacks->moveRelative(action->parentObject, &sp_368) != 0)
@@ -3827,13 +3825,13 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
action->callbacks->moveRelative(action->parentObject, &pixelPos);
}
}
}
}
}
return -1;
}
}
break;
case 0x40:
sub_80993C0(r2 == 0 ? 0 : 1);
return 0;
@@ -3848,7 +3846,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
return 0;
case 0x43:
gUnknown_2039DA8 = GetCurrentBGSong();
if(gUnknown_2039DA8 != STOP_BGM)
if(gUnknown_2039DA8 != STOP_BGM)
return 1;
return 0;
case 0x44:
@@ -3892,7 +3890,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3)
return 0;
}
void GroundScript_Unlock(void)
void GroundScript_Unlock(void)
{
s32 index;
bool8 cond;

61
src/ground_script_file.c Normal file
View File

@@ -0,0 +1,61 @@
#include "global.h"
#include "globaldata.h"
#include "ground_script.h"
static EWRAM_DATA s16 sScriptFileId = {0};
extern const struct GroundScriptHeader *gMapScriptTable[]; // 811E2F8
static void ResetCurrentScriptFile(void);
void sub_80A7744(void)
{
sScriptFileId = -1;
}
void sub_80A7754(void)
{
sScriptFileId = -1;
}
void SetCurrentScriptFile(s16 a0)
{
s32 temp = a0;
ResetCurrentScriptFile();
if (temp != -1)
sScriptFileId = temp;
}
void ResetCurrentScriptFile(void)
{
if (sScriptFileId != -1)
sScriptFileId = -1;
}
bool8 ChangeScriptFile(s16 a0)
{
s32 temp;
s32 temp2;
temp = a0;
temp2 = temp;
if (sScriptFileId != temp) {
if (temp < 0)
ResetCurrentScriptFile();
else
SetCurrentScriptFile(temp2);
return TRUE;
}
return FALSE;
}
static const struct GroundScriptHeader sNullGroundScript = {0};
const struct GroundScriptHeader *GetGroundScript(s16 a0)
{
if (a0 != -1)
return gMapScriptTable[a0];
else
return &sNullGroundScript;
}

View File

@@ -1,5 +1,5 @@
#include "gba/defines.h"
#include "global.h"
#include "globaldata.h"
#include "structs/axdata.h"
#include "code_800DAC0.h"
#include "debug.h"
@@ -7,27 +7,23 @@
#include "file_system.h"
#include "ground_map_1.h"
#include "ground_sprite.h"
#include "ground_sprite_data.h"
#include "memory.h"
#include "sprite.h"
#include "code_800ED38.h"
IWRAM_INIT unkStruct_3001B7C *gUnknown_3001B7C = {NULL};
static IWRAM_INIT unkStruct_3001B7C *gUnknown_3001B7C = {NULL};
EWRAM_DATA unkStruct_2039DB0 gUnknown_2039DB0 = {0};
EWRAM_DATA u32 sUnknown_2039DBC = {0}; // Unused, for alignment
EWRAM_DATA unkStruct_2039DB0 gUnknown_2039DC0 = {0};
EWRAM_DATA u16 gUnknown_2039DCC = {0};
EWRAM_DATA u16 gUnknown_2039DCE = {0};
EWRAM_DATA u8 gUnknown_2039DD0 = {0};
EWRAM_DATA u8 gUnknown_2039DD1[3] = {0, 0, 0}; // Unused, for alignment
EWRAM_DATA u32 gUnknown_2039DD4 = {0};
static EWRAM_DATA unkStruct_2039DB0 gUnknown_2039DB0 = {0};
UNUSED static EWRAM_DATA u32 sUnknown_2039DBC = {0}; // Unused, for alignment
static EWRAM_DATA unkStruct_2039DB0 gUnknown_2039DC0 = {0};
static EWRAM_DATA u16 gUnknown_2039DCC = {0};
static EWRAM_DATA u16 gUnknown_2039DCE = {0};
static EWRAM_DATA u8 gUnknown_2039DD0 = {0};
static EWRAM_DATA u32 gUnknown_2039DD4 = {0};
static EWRAM_DATA PixelPos gUnknown_2039DD8 = {0};
EWRAM_INIT OpenedFile *gUnknown_203B4B4 = {NULL};
// data_8115F5C.s
extern const u8 gUnknown_81177CC[];
extern const u8 gUnknown_81177D8[];
extern const u8 gUnknown_81177EC[];
extern const u8 *gUnknown_81178F4[];
static EWRAM_INIT OpenedFile *gUnknown_203B4B4 = {NULL};
// code_8098BDC.s
extern void sub_809971C(u16, const u8 *, s16);
@@ -35,8 +31,17 @@ extern void sub_80997F4(u16, u16);
// pokemon_2.s
extern void InitShadowSprites(u32, u32);
// ground_sprite.s
extern void sub_80A6460(void);
extern void sub_80ABA7C(void);
extern void sub_80ACAD4(void);
extern void sub_80AD7AC(void);
extern void sub_800E970(void);
extern u8 sub_809D248(PixelPos *r0);
static bool8 sub_80A68F8(struct UnkGroundSpriteStruct *ptr, struct UnkGroundSpriteSubStructx48 *a1, s32 a2);
static bool8 sub_80A6CF4(struct UnkGroundSpriteSubStructx48 *a0);
static void sub_80A69FC(struct UnkGroundSpriteStruct *ptr);
static void sub_80A6460(void);
static void sub_80A72B8(struct UnkGroundSpriteStruct *ptr, bool8 a1);
void sub_80A62F0(void)
{
@@ -46,7 +51,7 @@ void sub_80A62F0(void)
s32 r6;
gUnknown_3001B7C = MemoryAlloc(sizeof(unkStruct_3001B7C), 6);
gUnknown_203B4B4 = OpenFileAndGetFileDataPtr(gUnknown_81177CC, &gDungeonFileArchive);
gUnknown_203B4B4 = OpenFileAndGetFileDataPtr("etcfonta", &gDungeonFileArchive);
sub_800DAC0(1);
@@ -71,53 +76,45 @@ void sub_80A62F0(void)
GroundSprite_Reset(-1);
}
void GroundSprite_Reset(s16 a0)
void GroundSprite_Reset(s32 a0)
{
s32 uVar2;
unkStruct_2039DB0 *bee;
unkStruct_2039DB0 *see;
s32 uVar2 = (s16) a0;
uVar2 = a0;
Log(0, gUnknown_81177D8);
Log(0, "GroundSprite Reset");
gUnknown_2039DCC = 0;
gUnknown_2039DCE = 0;
sub_80A6460();
InitShadowSprites(496, sub_80A4D48(uVar2) ? 3 : 2);
sub_8004E8C(&gUnknown_2039DB0);
sub_8004E8C(&gUnknown_2039DC0);
bee = &gUnknown_2039DB0;
sub_8004E8C(bee);
see = &gUnknown_2039DC0;
sub_8004E8C(see);
see->unk4 &= ~(0x400 | 0x800);
see->unkA &= ~(0x400 | 0x800);
see->unkA |= 0x800;
gUnknown_2039DC0.unk4 &= ~(0x400 | 0x800);
gUnknown_2039DC0.unkA &= ~(0x400 | 0x800);
gUnknown_2039DC0.unkA |= 0x800;
if (sub_80A4D48(a0)) {
bee->unk4 &= ~(0x400 | 0x800);
bee->unkA &= ~(0x400 | 0x800);
bee->unkA |= (0x400 | 0x800);
gUnknown_2039DB0.unk4 &= ~(0x400 | 0x800);
gUnknown_2039DB0.unkA &= ~(0x400 | 0x800);
gUnknown_2039DB0.unkA |= (0x400 | 0x800);
}
else {
bee->unk4 &= ~(0x400 | 0x800);
bee->unkA &= ~(0x400 | 0x800);
bee->unkA |= 0x800;
gUnknown_2039DB0.unk4 &= ~(0x400 | 0x800);
gUnknown_2039DB0.unkA &= ~(0x400 | 0x800);
gUnknown_2039DB0.unkA |= 0x800;
}
ResetSprites(TRUE);
nullsub_10(TRUE);
}
void sub_80A6460(void)
static void sub_80A6460(void)
{
OpenedFile *file;
s32 i;
const u8 *data;
u16 something;
file = OpenFileAndGetFileDataPtr(gUnknown_81177EC, &gMonsterFileArchive);
file = OpenFileAndGetFileDataPtr("palet", &gMonsterFileArchive);
something = 0x100;
data = file->data;
@@ -131,7 +128,7 @@ void sub_80A6460(void)
CloseFile(file);
}
void sub_80A64A4(void)
UNUSED static void sub_80A64A4(void)
{
const u8 *r2;
u16 r4;
@@ -147,7 +144,7 @@ void sub_80A64A4(void)
r7 = gUnknown_3001B7C->unk108;
sub_80A6460();
for (i = 0; i < 2; i++, r7++)
for (i = 0; i < UNK_3001B7C_SUB108_COUNT; i++, r7++)
{
if (r7->unk2 > 0) {
r5 = r7->unk0;
@@ -156,11 +153,12 @@ void sub_80A64A4(void)
flag = r5 & 0x200;
if (flag) {
file = OpenFileAndGetFileDataPtr(gUnknown_81177EC, &gMonsterFileArchive);
file = OpenFileAndGetFileDataPtr("palet", &gMonsterFileArchive);
r2 = file->data + (r5 & 0xFF) * 0x40;
}
else {
file = OpenFileAndGetFileDataPtr((r5 & 0xFF)[gUnknown_81178F4], &gOrnamentFileArchive);
u32 id = r5 & 0xFF;
file = OpenFileAndGetFileDataPtr(id[gUnknown_81178F4], &gOrnamentFileArchive);
r2 = file->data;
}
@@ -201,7 +199,702 @@ UNUSED static u16 sub_80A65D8(u16 *a0)
return a0[40];
}
u16 sub_80A65E0(u32 a0)
static u16 sub_80A65E0(u32 a0)
{
return (a0 >> 16) & 0x337F;
}
static void sub_80A65F0(struct UnkGroundSpriteStruct *ptr, u16 a1)
{
ptr->flags_0x50 = a1;
ptr->unk6A = ((a1 & 4) ? 0x40 : 0) - ((a1 & 2) ? 0x40 : 0) + ((a1 & 1) ? 0x8 : 0) + 0x40;
if (ptr->flags_0x50 & 0x8) {
ptr->unk3C = gUnknown_2039DC0;
}
else {
ptr->unk3C = gUnknown_2039DB0;
}
if (ptr->flags_0x50 & 0x20) {
ptr->unk3C.unk0 &= 0xF3FF;
ptr->unk3C.unk6 &= 0xF3FF;
ptr->unk3C.unk6 |= 0x400;
}
}
void sub_80A6688(struct UnkGroundSpriteStruct *ptr, s32 a0)
{
sub_80A65F0(ptr, sub_80A65E0(a0));
}
bool8 SpriteHasPokemonSize_80A66A4(struct UnkGroundSpriteStruct *ptr)
{
return (ptr->unk48.unk0 > 0);
}
UNUSED static bool8 sub_80A66BC(struct UnkGroundSpriteStruct *ptr)
{
if (ptr->unk52 >= 0)
return TRUE;
else
return FALSE;
}
bool8 sub_80A66D4(struct UnkGroundSpriteStruct *ptr)
{
if (ptr->unk52 < 0 && ptr->unk48.unk0 > 0)
return TRUE;
else
return FALSE;
}
bool8 sub_80A66F8(struct UnkGroundSpriteStruct *ptr)
{
if (ptr->unk52 >= 0 && !(ptr->axdata.flags & 0x2000)) {
return (ptr->axdata.flags & 0x8000) != 0;
}
return FALSE;
}
bool8 sub_80A671C(struct UnkGroundSpriteStruct *ptr)
{
if (ptr->unk58 != 0) {
if (ptr->unk58 == 0x1C0)
return TRUE;
if (ptr->unk5C == -1)
return TRUE;
if (sub_800E9E4(ptr->unk5C))
return TRUE;
ptr->unk5C = -1;
ptr->unk58 = 0;
}
return FALSE;
}
bool8 IsOnscreen_80A675C(struct UnkGroundSpriteStruct *ptr, PixelPos *pixPosArg)
{
PixelPos result;
PixelPos pixelPos;
if (sub_809D248(&pixelPos)) {
result.x = (pixPosArg->x / 256) - pixelPos.x;
result.y = (pixPosArg->y / 256) - pixelPos.y;
}
else {
result.x = (pixPosArg->x / 256);
result.y = (pixPosArg->y / 256);
}
if (result.x >= -64 && result.x <= 303 && result.y >= -16 && result.y <= 207) {
return TRUE;
}
return FALSE;
}
void sub_80A67CC(struct UnkGroundSpriteStruct *ptr, struct UnkGroundSpriteSubStructx48 *a1, s32 a2)
{
bool8 r7;
if (a1 != NULL && a1->unk0 > 0) {
r7 = TRUE;
}
else {
r7 = FALSE;
}
sub_80A65F0(ptr, sub_80A65E0(a2));
ptr->unk74.x = 0;
ptr->unk74.y = 0;
ptr->unk7C = -1;
ptr->unk70 = 0;
ptr->unk6C = 0;
ptr->unk6E = 0;
ptr->unk52 = -1;
ptr->unk54 = NULL;
ptr->unk64 = 0;
ptr->unk66 = -1;
ptr->unk68 = 0;
ptr->unk58 = 0;
ptr->unk5A = 0xFF;
ptr->unk5C = -1;
ptr->unk60 = -1;
if (r7) {
ptr->unk48 = *a1;
if (!sub_80A68F8(ptr, &ptr->unk48, -1) && !(ptr->flags_0x50 & 0x1000) && sub_80A6CF4(&ptr->unk48)) {
sub_80A68F8(ptr, &ptr->unk48, -1);
}
}
else {
ptr->unk48.unk0 = -1;
ptr->unk48.unk2 = 0;
ptr->unk48.axmain = NULL;
}
}
void sub_80A68A0(struct UnkGroundSpriteStruct *ptr)
{
if ((ptr->flags_0x50 & 0x200) && ptr->unk58 != 0 && ptr->unk5C != -1) {
sub_800DC14(ptr->unk5C);
}
if (ptr->unk54 != NULL) {
CloseFile(ptr->unk54);
ptr->unk54 = NULL;
}
sub_80A69FC(ptr);
}
// I guess the code inside the loop was commented out or under an ifdef.
UNUSED static void sub_80A68E8(void)
{
s32 i;
for (i = 0; i < UNK_3001B7C_SUB0_COUNT; i++) {
;
}
}
static bool8 sub_80A68F8(struct UnkGroundSpriteStruct *ptr, struct UnkGroundSpriteSubStructx48 *a1, s32 a2)
{
s32 id, count;
unkStruct_3001B7C_sub0 *unkPtr = &gUnknown_3001B7C->unk0[0];
if (a1->unk0 >= a2) {
a2 = a1->unk0;
count = 0;
for (id = 0; id < UNK_3001B7C_SUB0_COUNT; id = (s16)(id + 1), unkPtr++) {
if (unkPtr->unk0 == 0) {
if (++count >= a2) {
unkPtr -= count - 1;
id = (s16) (id - (count - 1));
break;
}
}
else {
count = 0;
}
}
}
else {
count = 0;
id = UNK_3001B7C_SUB0_COUNT - 1;
unkPtr = &gUnknown_3001B7C->unk0[UNK_3001B7C_SUB0_COUNT - 1];
for (; id >= 0; id = (s16)(id - 1), unkPtr--) {
if (unkPtr->unk0 == 0) {
if (++count >= a2) {
break;
}
}
else {
count = 0;
}
}
}
if (count >= a2) {
s32 i;
ptr->unk52 = id;
ptr->unk64 = a2;
unkPtr->unk0 = 1;
unkPtr->unk8 = ptr;
GroundSprite_ExtendPaletteAdd(ptr, a1->unk2);
for (i = 1; i < a2; i++) {
unkPtr[i].unk0 = 2;
}
gUnknown_2039DD4 -= a2;
return TRUE;
}
else {
gUnknown_2039DD0 = 0;
ptr->unk7C = -1;
ptr->unk70 = 0;
ptr->unk52 = -1;
ptr->unk64 = 0;
ptr->unk6C = 0;
ptr->unk6E = 0;
return FALSE;
}
}
static void sub_80A69FC(struct UnkGroundSpriteStruct *ptr)
{
s32 id = ptr->unk52;
unkStruct_3001B7C_sub0 *unkPtr = &gUnknown_3001B7C->unk0[id];
if (id >= 0) {
GroundSprite_ExtendPaletteDelete(ptr);
unkPtr->unk8 = NULL;
unkPtr->unk0 = 0;
unkPtr++;
gUnknown_2039DD4++;
id = (s16)(id + 1);
for (; id < UNK_3001B7C_SUB0_COUNT && unkPtr->unk0 == 2; id = (s16)(id + 1)) {
unkPtr->unk0 = 0;
unkPtr++;
gUnknown_2039DD4++;
}
ptr->unk52 = -1;
ptr->unk64 = 0;
gUnknown_2039DD0 = 1;
}
}
void GroundSprite_ExtendPaletteAdd(struct UnkGroundSpriteStruct *ptr, u16 a1)
{
OpenedFile *file;
s32 r8;
unkStruct_3001B7C_sub108 *sub108Ptr;
u16 var_28;
u16 var_24;
u16 r6;
const void *r7;
s32 r2;
if (a1 & (0x100 | 0x200)) {
if (a1 & 0x400) {
sub108Ptr = &gUnknown_3001B7C->unk108[1];
if (sub108Ptr->unk0 == a1) {
sub108Ptr->unk2++;
return;
}
}
else {
r8 = 0;
sub108Ptr = &gUnknown_3001B7C->unk108[0];
for (; r8 < UNK_3001B7C_SUB108_COUNT; r8++, sub108Ptr++) {
if (sub108Ptr->unk0 == a1) {
u16 r1 = r8 + 29;
sub108Ptr->unk2++;
if (ptr != NULL) {
ptr->unk68 = r1 - 16;
}
Log(0, "extend palette %3d[%3d] %04x up %04x", r8, r1, r1 - 16, a1);
return;
}
}
}
if (a1 & 0x400) {
r8 = 1;
sub108Ptr = &gUnknown_3001B7C->unk108[1];
if (sub108Ptr->unk2 > 0) {
FATAL_ERROR_ARGS("../ground/ground_sprite.c", 1008, "extend palette buffer error %08x", a1);
}
}
else {
r8 = 0;
sub108Ptr = &gUnknown_3001B7C->unk108[0];
for (; r8 < UNK_3001B7C_SUB108_COUNT; r8++, sub108Ptr++) {
if (sub108Ptr->unk2 <= 0) {
break;
}
}
if (r8 >= UNK_3001B7C_SUB108_COUNT) {
FATAL_ERROR_ARGS("../ground/ground_sprite.c", 1016, "extend palette buffer error %08x", a1);
}
}
var_28 = r8 + 29;
var_24 = (r8 * 16) + 464;
if (a1 & 0x200) {
file = OpenFileAndGetFileDataPtr("palet", &gMonsterFileArchive);
r7 = file->data;
r7 += (a1 & 0xFF) * 64;
}
else {
u32 id = a1 & 0xff;
file = OpenFileAndGetFileDataPtr(id[gUnknown_81178F4], &gOrnamentFileArchive);
r7 = file->data;
}
if (a1 & 0x1000) {
r6 = 1;
}
else {
r6 = 0;
}
if (a1 & 0x2000) {
r6 |= 2;
}
sub_80997F4(var_28, r6);
sub_809971C(var_24, r7, 16);
sub108Ptr->unk0 = a1;
sub108Ptr->unk2 = 1;
r2 = var_28 - 16;
if (ptr != NULL) {
ptr->unk68 = r2;
}
Log(0, "extend palette %3d[%3d] %04x set %04x %04x", r8, var_28, r2, a1, r6);
if (file != NULL) {
CloseFile(file);
}
}
else {
if (ptr != NULL) {
ptr->unk68 = a1;
}
}
}
void GroundSprite_ExtendPaletteDelete(struct UnkGroundSpriteStruct *ptr)
{
s32 r5;
unkStruct_3001B7C_sub108 *sub108Ptr;
if (ptr != NULL) {
r5 = ptr->unk68 - 13;
if (r5 < 0)
return;
}
else {
r5 = 1;
}
sub108Ptr = &gUnknown_3001B7C->unk108[r5];
if (ptr != NULL) {
ptr->unk68 = 0;
}
if (--sub108Ptr->unk2 <= 0) {
Log(0, "extend palette %3d delete %04x", r5, sub108Ptr->unk0);
sub108Ptr->unk0 = 0;
sub108Ptr->unk2 = 0;
sub_80997F4(r5 + 29, 0);
}
}
static bool8 sub_80A6CF4(struct UnkGroundSpriteSubStructx48 *a0)
{
struct UnkGroundSpriteStruct *spArray[UNK_3001B7C_SUB0_COUNT];
s32 i;
unkStruct_3001B7C_sub0 *sub0Ptr;
PixelPos pixelPos;
s32 count = 0;
s32 r9 = a0->unk0;
s32 r10 = 0;
s32 var_28 = -1;
s32 var_24 = -1;
sub_809D248(&pixelPos);
for (i = 0, sub0Ptr = &gUnknown_3001B7C->unk0[0]; i < UNK_3001B7C_SUB0_COUNT; i = (s16)(i+1), sub0Ptr++) {
if (sub0Ptr->unk0 == 1) {
struct UnkGroundSpriteStruct *ptr = sub0Ptr->unk8;
if (!(ptr->flags_0x50 & 0x2000) && ptr->unk7C >= 0) {
PixelPos resultPos;
resultPos.x = (ptr->unk74.x / 256) - pixelPos.x;
resultPos.y = (ptr->unk74.y / 256) - pixelPos.y;
if (resultPos.y > 0) {
ptr->unk7C = 0x28 + resultPos.y;
}
else {
ptr->unk7C = 0x28 - resultPos.y;
}
if (resultPos.x > 0) {
if (resultPos.x > ptr->unk7C) {
ptr->unk7C = resultPos.x;
}
}
else {
if (-resultPos.x > ptr->unk7C) {
ptr->unk7C = -resultPos.x;
}
}
r10 += ptr->unk48.unk0;
if (ptr->unk48.unk0 >= r9 && var_24 < ptr->unk7C) {
var_28 = count;
var_24 = ptr->unk7C;
}
spArray[count++] = ptr;
}
}
}
if (r10 < r9)
return FALSE;
if (var_28 >= 0) {
sub_80A69FC(spArray[var_28]);
return TRUE;
}
while (count > 0) {
s32 i;
s32 r5 = -1;
s32 r3 = -1;
s32 r6 = 0;
for (i = 0; i < count; i++) {
if (r3 < spArray[i]->unk7C) {
r5 = count; // This looks like a mistake to me? I believe it should be r5 = i instead, however I cannot verify the behavior in-game as I can't find where, if anywhere, this function runs.
r3 = spArray[i]->unk7C;
}
}
sub_80A69FC(spArray[r5]);
count--;
for (i = r5; i < count; i++) {
spArray[i] = spArray[i + 1];
}
for (i = 0, sub0Ptr = &gUnknown_3001B7C->unk0[0]; i < UNK_3001B7C_SUB0_COUNT; i++, sub0Ptr++) {
if (sub0Ptr->unk0 == 0) {
if (++r6 >= r9) {
return TRUE;
}
}
else {
r6 = 0;
}
}
}
return FALSE;
}
void sub_80A6E68(void)
{
ResetSprites(FALSE);
nullsub_10(FALSE);
sub_800E970();
}
void sub_80A6E80(void)
{
DungeonPos pos;
if (!sub_809D248(&gUnknown_2039DD8)) {
gUnknown_2039DD8.x = 0;
gUnknown_2039DD8.y = 0;
}
sub_80ABA7C();
sub_80ACAD4();
sub_80AD7AC();
pos.x = gUnknown_2039DD8.x;
pos.y = gUnknown_2039DD8.y;
sub_800E90C(&pos);
sub_8005180();
nullsub_12();
}
void sub_80A6EC8(struct UnkGroundSpriteStruct *ptr, s32 a1)
{
if (ptr->unk52 > 0) {
if (a1 <= ptr->unk48.unk0) {
a1 = ptr->unk48.unk0;
}
if (ptr->unk64 != a1) {
ptr->unk66 = a1;
}
}
}
void sub_80A6EFC(struct UnkGroundSpriteStruct *ptr, s32 a1_, s32 a2_)
{
s32 flagResult;
unkStruct_3001B7C_sub0 *sub0Ptr;
s32 a1 = (s16) a1_;
s32 a2 = (s8) a2_;
if (ptr->unk52 < 0) {
if (ptr->unk66 >= 0) {
if (!sub_80A68F8(ptr, &ptr->unk48, ptr->unk66))
return;
ptr->unk66 = -1;
}
else {
if (ptr->unk48.unk0 <= 0)
return;
if (!sub_80A68F8(ptr, &ptr->unk48, -1))
return;
}
}
else {
if (ptr->unk66 >= 0) {
sub_80A69FC(ptr);
if (!sub_80A68F8(ptr, &ptr->unk48, ptr->unk66))
return;
ptr->unk66 = -1;
}
}
// s16 memes...
flagResult = a1 & 0x400;
if ((s16)flagResult) {
ptr->axdata.flags &= ~(0x1000);
return;
}
sub0Ptr = &gUnknown_3001B7C->unk0[ptr->unk52];
ptr->unk70 = 1;
ptr->unk7C = -1;
switch ((a1 & 0x700)) {
case 0x300:
ptr->unk6C = 0;
break;
case 0x100:
ptr->unk6C = 0x80;
break;
case 0:
default:
ptr->unk6C = 0x100;
break;
case 0x200:
ptr->unk6C = 0x200;
break;
}
ptr->unk6E = 0;
AxResInit(&ptr->axdata, ptr->unk48.axmain, (a1 & 0xFF) + a2 / 8, a2 & 7, sub0Ptr->unk4, 0, ((u16)a1 & 0x800) != 0);
}
void sub_80A7040(struct UnkGroundSpriteStruct *ptr, s32 a1_, s32 a2_, s32 a3)
{
s32 a1 = (s16) a1_;
s32 a2 = (s8) a2_;
if (!(ptr->flags_0x50 & 0x200))
return;
if (a1 == 0 || a1 == 0x1C0) {
if (sub_80A671C(ptr)) {
ptr->unk58 = 0x1C0;
}
}
else {
ptr->unk58 = a1;
ptr->unk5A = a2;
ptr->unk60 = a3;
}
}
bool8 sub_80A7094(struct UnkGroundSpriteStruct *ptr, PixelPos *r10, PixelPos *posArg, s32 a3)
{
PixelPos resultPos;
s32 unkY;
ptr->unk74 = *posArg;
ptr->unk7C = 0;
if (ptr->flags_0x50 & 0x200 && ptr->unk58 != 0) {
if (ptr->unk58 == 0x1C0) {
if (ptr->unk5C != -1) {
sub_800DC14(ptr->unk5C);
ptr->unk5C = -1;
}
ptr->unk58 = 0;
}
else if (ptr->unk5C == -1) {
unkStruct_2039DB0 unkSubStruct = {0xFFFF, 0xFFFF, 0xFFFF, 0, 0, 0};
unkStruct_80416E0 unkStruct;
sub_800EE5C(ptr->unk58);
sub_800EF64();
unkStruct.unk0 = ptr->unk58;
unkStruct.unk4 = 0;
unkStruct.dir = (s8) ptr->unk5A;
unkStruct.x = posArg->x / 256;
unkStruct.y = posArg->y / 256;
unkStruct.unk10 = 0;
unkStruct.unk12 = 0;
unkStruct.unk14 = -1;
unkStruct.unk18 = 0;
unkStruct.unk1C = unkSubStruct;
ptr->unk5C = sub_800E890(&unkStruct);
}
else if (!sub_800E9E4(ptr->unk5C)) {
ptr->unk5C = -1;
ptr->unk58 = 0;
}
}
if (ptr->unk52 < 0)
return FALSE;
if (ptr->flags_0x50 & 0x40)
return FALSE;
resultPos = (PixelPos) {(posArg->x / 256) - gUnknown_2039DD8.x, (posArg->y / 256) - gUnknown_2039DD8.y};
unkY = resultPos.y - (a3 / 256);
if (resultPos.x >= -64 && resultPos.x <= 303 && resultPos.y >= -16 && resultPos.y <= 207 && unkY >= -16 && unkY <= 207) {
if ((ptr->flags_0x50 & 0x10) && (gUnknown_2039DCC & 1)) {
sub_80A72B8(ptr, FALSE);
DoAxFrame_800558C(&ptr->axdata, 304, 208, 0, ptr->unk68, &ptr->unk3C);
ptr->unk70 = 0;
return FALSE;
}
else {
sub_80A72B8(ptr, ptr->unk70);
DoAxFrame_800558C(&ptr->axdata, resultPos.x, unkY, resultPos.y + ptr->unk6A, ptr->unk68, &ptr->unk3C);
ptr->unk70 = 0;
if (r10 != NULL) {
*r10 = resultPos;
}
return TRUE;
}
}
else if (ptr->unk70 != 0) {
sub_80A72B8(ptr, TRUE);
DoAxFrame_800558C(&ptr->axdata, 304, 208, 0, ptr->unk68, &ptr->unk3C);
ptr->unk70 = 0;
return FALSE;
}
else {
return FALSE;
}
}
static void sub_80A72B8(struct UnkGroundSpriteStruct *ptr, bool8 a1)
{
if (a1) {
ptr->unk6E = 0;
RunAxAnimationFrame(&ptr->axdata);
}
else {
ptr->unk6E += ptr->unk6C;
while (ptr->unk6E >= 0x100) {
ptr->unk6E -= 0x100;
RunAxAnimationFrame(&ptr->axdata);
}
}
}
bool8 sub_80A7310(struct UnkGroundSpriteStruct *ptr, PixelPos *posArg1, PixelPos *posArg2, s32 a3)
{
if (ptr->flags_0x50 & 0x200 && ptr->unk5C != -1) {
DungeonPos pos;
s32 r7;
pos.x = posArg1->x / 256;
pos.y = posArg1->y / 256;
r7 = (pos.y - gUnknown_2039DD8.y) + ptr->unk6A + 2;
pos.y -= a3 / 256;
if (posArg2 != NULL) {
pos.x += posArg2->x;
pos.y += posArg2->y;
}
sub_800E8AC(ptr->unk5C, &pos, NULL, r7, &ptr->unk3C);
return TRUE;
}
else {
return FALSE;
}
}
void sub_80A73EC(void)
{
CopySpritesToOam();
nullsub_13();
sub_8005304();
nullsub_14();
gUnknown_2039DCC++;
if (++gUnknown_2039DCE > 11) {
gUnknown_2039DCE = 0;
}
}

127
src/ground_sprite_data.c Normal file
View File

@@ -0,0 +1,127 @@
#include "global.h"
#include "globaldata.h"
#include "ground_sprite_data.h"
const char *const gUnknown_81178F4[] = {
"flag00c",
"flag01c",
"flag02c",
"flag03c",
"flag04c",
"flag05c",
"flag06c",
"flag07c",
"flag08c",
"flag09c",
"flag10c",
"flag11c",
"flag12c",
"flag13c",
"flag14c",
"flag15c",
"flag16c",
"flag100c",
"flag101c",
"flag102c",
"flag103c",
"flag104c",
"flag105c",
"flag106c",
"flag107c",
"flag108c",
"flag109c",
"flag110c",
"flag111c",
"flag112c",
"flag113c",
"flag114c",
"titleopc",
"titlebgc",
"stoneimc",
NULL
};
const struct GroundObjectKind gGroundObjectKinds[] = {
{ -1, 0x000, NULL }, // many dummy/unused entries
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ 1, 0x100, "flag00p" },
{ 1, 0x100, "flag00p" },
{ 1, 0x101, "flag01p" },
{ 1, 0x102, "flag02p" },
{ 1, 0x103, "flag03p" },
{ 1, 0x104, "flag04p" },
{ 1, 0x105, "flag05p" },
{ 1, 0x106, "flag06p" },
{ 1, 0x107, "flag07p" },
{ 1, 0x108, "flag08p" },
{ 1, 0x109, "flag09p" },
{ 1, 0x10A, "flag10p" },
{ 1, 0x10B, "flag11p" },
{ 1, 0x10C, "flag12p" },
{ 1, 0x10D, "flag13p" },
{ 1, 0x10E, "flag14p" },
{ 1, 0x10F, "flag15p" },
{ 1, 0x110, "flag16p" },
{ 1, 0x111, "flag100p" },
{ 1, 0x112, "flag101p" },
{ 1, 0x113, "flag102p" },
{ 1, 0x114, "flag103p" },
{ 1, 0x115, "flag104p" },
{ 1, 0x116, "flag105p" },
{ 1, 0x117, "flag106p" },
{ 1, 0x118, "flag107p" },
{ 1, 0x119, "flag108p" },
{ 1, 0x11A, "flag109p" },
{ 1, 0x11B, "flag110p" },
{ 1, 0x11C, "flag111p" },
{ 1, 0x11D, "flag112p" },
{ 1, 0x11E, "flag113p" },
{ 1, 0x11F, "flag114p" },
{ 6, 0x120, "titleop1" },
{ 1, 0x120, "titleop2" },
{ 4, 0x121, "titlebg1" },
{ 1, 0x006, "npc01p" },
{ 1, 0x006, "npc02p" },
{ 1, 0x005, "npc03p" },
{ 1, 0x006, "npc04p" },
{ 1, 0x000, "item01p" },
{ -1, 0x000, NULL }
};
// Dummy trailing list
const struct GroundObjectKind gUnknown_8117E8C[] = {
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
{ -1, 0x000, NULL },
};

View File

@@ -0,0 +1,95 @@
#include "global.h"
#include "globaldata.h"
#include "def_filearchives.h"
#include "file_system.h"
#include "ground_sprite.h"
#include "sprite.h"
#include "pokemon.h"
extern s32 sub_800E700(s32);
extern bool8 AddShadowSprite(s32 species, DungeonPos* a2, axdata* a3);
void sub_80A7428(struct UnkGroundSpriteStruct *ptr, s32 a1_, s32 monsterId_, s32 a3)
{
u8 name[12];
OpenedFile *file;
struct UnkGroundSpriteSubStructx48 spStruct;
s32 a1 = (s16) a1_;
// s16 memes strike again...
s32 monsterId = (s16) monsterId_;
s32 monsterIdS16 = (s16) monsterId;
sprintf(name, "ax%03d", monsterIdS16);
file = OpenFile(name, &gMonsterFileArchive);
GetFileDataPtr(file, 0); // Unused return value
spStruct.unk0 = GetBodySize(monsterId);
if (monsterId == MONSTER_STATUE) {
spStruct.unk2 = 0x122;
}
else {
bool32 kecleonShop = (a1 == 71);
spStruct.unk2 = GetPokemonOverworldPalette(monsterId, kecleonShop);
}
spStruct.axmain = (axmain *) file->data;
sub_80A67CC(ptr, &spStruct, a3);
ptr->unk54 = file;
if (ptr->unk52 >= 0) {
sub_80A6EFC(ptr, 0x300, 0);
}
}
void sub_80A74E4(struct UnkGroundSpriteStruct *ptr)
{
sub_80A68A0(ptr);
}
void sub_80A74F0(struct UnkGroundSpriteStruct *ptr, s32 a1_, s32 a2_, s32 a3)
{
s32 a1 = (s16) a1_;
s32 a2 = (s8) a2_;
if (a3 < 0) {
if (a1 != 0x1C0) {
a3 = sub_800E700(a1);
}
else {
a3 = 0;
}
}
sub_80A7040(ptr, a1, a2, a3);
}
void sub_80A7524(struct UnkGroundSpriteStruct *ptr, s32 monsterId_, PixelPos *pixelPosArg, s32 a3)
{
PixelPos pixelPosSp;
DungeonPos pos;
s32 monsterId = (s16) monsterId_;
if (sub_80A7094(ptr, &pixelPosSp, pixelPosArg, a3)) {
if (ptr->unk5C != -1) {
PixelPos pixelPosSp2;
switch (ptr->unk60) {
case 0:
case 1:
case 2:
case 3:
sub_800569C(&pos, &ptr->axdata, ptr->unk60);
pixelPosSp2.x = pos.x;
pixelPosSp2.y = pos.y;
sub_80A7310(ptr, pixelPosArg, &pixelPosSp2, a3);
break;
default:
sub_80A7310(ptr, pixelPosArg, NULL, a3);
break;
}
}
if (ptr->flags_0x50 & 0x100) {
DungeonPos shadowPos = {pixelPosSp.x, pixelPosSp.y};
AddShadowSprite(monsterId, &shadowPos, &ptr->axdata);
}
sub_80A7310(ptr, pixelPosArg, NULL, a3);
}
}

77
src/ground_sprite_util.c Normal file
View File

@@ -0,0 +1,77 @@
#include "global.h"
#include "globaldata.h"
#include "def_filearchives.h"
#include "file_system.h"
#include "ground_sprite.h"
#include "ground_sprite_data.h"
void sub_80A75CC(struct UnkGroundSpriteStruct *ptr, s32 unused, s32 a2_, s32 a3)
{
struct UnkGroundSpriteSubStructx48 sp;
s32 a2 = (s16) a2_;
const struct GroundObjectKind *objKind = &gGroundObjectKinds[a2];
OpenedFile *file = NULL;
sp.unk0 = objKind->unk0;
sp.unk2 = objKind->unk2;
if (objKind->fileName != 0) {
file = OpenFile(objKind->fileName, &gOrnamentFileArchive);
GetFileDataPtr(file, 0);
sp.axmain = (axmain *) file->data;
}
else {
sp.axmain = NULL;
}
sub_80A67CC(ptr, &sp, a3);
ptr->unk54 = file;
if (ptr->unk52 >= 0) {
sub_80A6EFC(ptr, 0x800, 0);
}
}
void sub_80A7658(struct UnkGroundSpriteStruct *ptr)
{
sub_80A68A0(ptr);
}
void sub_80A7664(struct UnkGroundSpriteStruct *ptr, PixelPos *pixelPos, s32 a2)
{
sub_80A7094(ptr, NULL, pixelPos, a2);
sub_80A7310(ptr, pixelPos, NULL, a2);
}
// Identical to sub_80A75CC, except uses a different table.
void sub_80A7688(struct UnkGroundSpriteStruct *ptr, s32 unused, s32 a2_, s32 a3)
{
struct UnkGroundSpriteSubStructx48 sp;
s32 a2 = (s16) a2_;
const struct GroundObjectKind *objKind = &gUnknown_8117E8C[a2];
OpenedFile *file = NULL;
sp.unk0 = objKind->unk0;
sp.unk2 = objKind->unk2;
if (objKind->fileName != 0) {
file = OpenFile(objKind->fileName, &gOrnamentFileArchive);
GetFileDataPtr(file, 0);
sp.axmain = (axmain *) file->data;
}
else {
sp.axmain = NULL;
}
sub_80A67CC(ptr, &sp, a3);
ptr->unk54 = file;
if (ptr->unk52 >= 0) {
sub_80A6EFC(ptr, 0x800, 0);
}
}
void sub_80A7714(struct UnkGroundSpriteStruct *ptr)
{
sub_80A68A0(ptr);
}
void sub_80A7720(struct UnkGroundSpriteStruct *ptr, PixelPos *pixelPos, s32 a2)
{
sub_80A7094(ptr, NULL, pixelPos, a2);
sub_80A7310(ptr, pixelPos, NULL, a2);
}

View File

@@ -71,8 +71,6 @@ static HeapDescriptor *DoCreateSubHeap(struct unkMemoryStruct *a, u32 b);
static void *DoAlloc(HeapDescriptor *heap, s32 size, u32 a2);
static void InitHeapInternal(void);
ALIGNED(4) static const char sFileNameText[] = "../system/memory_locate.c";
void InitHeap(void)
{
InitHeapInternal();
@@ -325,14 +323,6 @@ static s32 MemorySearchFromBack(HeapDescriptor *heap, s32 atb, s32 size)
return -1;
}
ALIGNED(4) static const char sText_LocateSetFront[] = "_LocateSetFront";
static const DebugLocation sLocateSetFrontDebugLocation =
{
.file = sFileNameText,
.line = 581,
.func = sText_LocateSetFront
};
static struct HeapFreeListElement * _LocateSetFront(HeapDescriptor *heap, s32 index, s32 atb, s32 size, s32 group)
{
s32 i;
@@ -352,7 +342,7 @@ static struct HeapFreeListElement * _LocateSetFront(HeapDescriptor *heap, s32 in
heap->freeCount++;
if (heap->freeCount > heap->freeListLength) {
FatalError(&sLocateSetFrontDebugLocation, "Memory Locate sprit max over [%3d/%3d]", heap->freeCount, heap->freeListLength);
FATAL_ERROR_ARGS("../system/memory_locate.c", 581, "Memory Locate sprit max over [%3d/%3d]", heap->freeCount, heap->freeListLength);
}
block = &heap->freeList[index + 1];
@@ -369,14 +359,6 @@ static struct HeapFreeListElement * _LocateSetFront(HeapDescriptor *heap, s32 in
return curr;
}
ALIGNED(4) static const char sText_LocateSetBack[] = "_LocateSetBack";
static const DebugLocation sLocateSetBackDebugLocation =
{
.file = sFileNameText,
.line = 673,
.func = sText_LocateSetBack
};
static struct HeapFreeListElement * _LocateSetBack(HeapDescriptor *heap, s32 index, s32 atb, s32 size, s32 group)
{
s32 i;
@@ -397,7 +379,7 @@ static struct HeapFreeListElement * _LocateSetBack(HeapDescriptor *heap, s32 ind
heap->freeCount++;
if (heap->freeCount > heap->freeListLength) {
FatalError(&sLocateSetBackDebugLocation, "Memory Locate sprit max over [%3d/%3d]", heap->freeCount, heap->freeListLength);
FATAL_ERROR_ARGS("../system/memory_locate.c", 673, "Memory Locate sprit max over [%3d/%3d]", heap->freeCount, heap->freeListLength);
}
curr->block.size -= sizeAligned;
@@ -415,14 +397,6 @@ static struct HeapFreeListElement * _LocateSetBack(HeapDescriptor *heap, s32 ind
return curr;
}
ALIGNED(4) static const char sText_LocateSet[] = "_LocateSet";
static const DebugLocation sLocateSetDebugLocation =
{
.file = sFileNameText,
.line = 812,
.func = sText_LocateSet
};
static void * _LocateSet(HeapDescriptor *heap, s32 size, s32 group)
{
s32 index;
@@ -454,9 +428,8 @@ static void * _LocateSet(HeapDescriptor *heap, s32 size, s32 group)
}
error:
FatalError(&sLocateSetDebugLocation,
"Memroy LocateSet [%p] buffer %8x size can't locate\n atb %02x grp %3d ",
heap, size, atb, group);
FATAL_ERROR_ARGS("../system/memory_locate.c", 812, "Memroy LocateSet [%p] buffer %8x size can't locate\n atb %02x grp %3d ",
heap, size, atb, group);
}
// arm9.bin::02010DE0
@@ -470,8 +443,6 @@ void MemoryFree(void *a)
DoFree(&sMainHeapDescriptor, a);
}
ALIGNED(4) static const char sText_MemoryLocate_LocalCreate[] = "MemoryLocate_LocalCreate";
UNUSED static HeapDescriptor *MemoryLocate_LocalCreate(HeapDescriptor *parentHeap, u32 size, u32 param_3, u32 group)
{
s32 index;
@@ -485,12 +456,7 @@ UNUSED static HeapDescriptor *MemoryLocate_LocalCreate(HeapDescriptor *parentHea
index = MemorySearchFromBack(parentHeap, 9, size);
if (index < 0) {
static const DebugLocation debugInfo = {
.file = sFileNameText,
.line = 1109,
.func = sText_MemoryLocate_LocalCreate
};
FatalError(&debugInfo, "Memroy LocalCreate buffer %08x size can't locate", size);
FATAL_ERROR_ARGS("../system/memory_locate.c", 1109, "Memroy LocalCreate buffer %08x size can't locate", size);
}
foundSet = _LocateSetBack(parentHeap, index, 9, size, group);
@@ -609,4 +575,4 @@ UNUSED static void nullsub_141(void)
UNUSED static void nullsub_142(void)
{
}
}

View File

@@ -647,7 +647,7 @@ const RGB *sub_8005674(const EfoFileData *a0, s32 vramIdx)
}
// arm9.bin::02001894
void sub_800569C(DungeonPos *a0, axObject *a1, u8 a2)
void sub_800569C(DungeonPos *a0, axdata *a1, u8 a2)
{
DungeonPos *ptr;
DungeonPos *ptr2;
@@ -656,11 +656,11 @@ void sub_800569C(DungeonPos *a0, axObject *a1, u8 a2)
a0->x = 0;
a0->y = 0;
if (!(a1->axdata.flags >> 15) || a2 >= 4)
if (!(a1->flags >> 15) || a2 >= 4)
return;
if (a1->axdata.positions != NULL) {
ptr = &((DungeonPos*)a1->axdata.positions)[a1->axdata.sub1.poseId * 4];
if (a1->positions != NULL) {
ptr = &((DungeonPos*)a1->positions)[a1->sub1.poseId * 4];
ptr2 = &ptr[a2];
if (*&ptr2->x == 99 && *&ptr2->y == 99) {
a0->x = 99;
@@ -668,8 +668,8 @@ void sub_800569C(DungeonPos *a0, axObject *a1, u8 a2)
}
else {
ptr3 = &ptr[a2];
a0->x = a1->axdata.sub1.offset.x + ptr3->x;
a0->y = a1->axdata.sub1.offset.y + ptr3->y;
a0->x = a1->sub1.offset.x + ptr3->x;
a0->y = a1->sub1.offset.y + ptr3->y;
}
}
else {

View File

@@ -167,8 +167,4 @@ gUnknown_2039DA8: /* 2039DA8 (sub_80A14E8) */
.space 0x8
.include "src/ground_sprite.o"
gUnknown_2039DD8: /* 2039DD8 (sub_80A6E80 - sub_80A7310) */
.space 0x8
.include "src/code_80A7714.o"
.include "src/ground_script_file.o"