mirror of
https://github.com/pret/pmd-red.git
synced 2026-07-19 17:32:00 -05:00
Merge pull request #390 from DizzyEggg/ground_event
Some checks failed
GithubCI / build (push) Has been cancelled
Some checks failed
GithubCI / build (push) Has been cancelled
ground_event.c
This commit is contained in:
commit
2e724efa76
|
|
@ -1,993 +0,0 @@
|
|||
#include "asm/constants/gba_constants.inc"
|
||||
#include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start GroundEvent_Add
|
||||
GroundEvent_Add:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r9
|
||||
mov r6, r8
|
||||
push {r6,r7}
|
||||
sub sp, 0x14
|
||||
mov r8, r1
|
||||
lsls r0, 16
|
||||
asrs r7, r0, 16
|
||||
lsls r2, 16
|
||||
asrs r6, r2, 16
|
||||
lsls r3, 24
|
||||
asrs r3, 24
|
||||
mov r9, r3
|
||||
ldr r5, [r1, 0x8]
|
||||
cmp r7, 0
|
||||
bge _080ADB60
|
||||
ldr r0, _080ADB38
|
||||
ldr r4, [r0]
|
||||
movs r2, 0
|
||||
movs r0, 0x2
|
||||
ldrsh r1, [r4, r0]
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
cmp r1, r0
|
||||
bne _080ADB3C
|
||||
movs r7, 0
|
||||
b _080ADB68
|
||||
.align 2, 0
|
||||
_080ADB38: .4byte gGroundEvents
|
||||
_080ADB3C:
|
||||
adds r0, r2, 0x1
|
||||
lsls r0, 16
|
||||
asrs r2, r0, 16
|
||||
adds r4, 0x20
|
||||
cmp r2, 0x1F
|
||||
bgt _080ADB56
|
||||
movs r3, 0x2
|
||||
ldrsh r1, [r4, r3]
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
cmp r1, r0
|
||||
bne _080ADB3C
|
||||
adds r7, r2, 0
|
||||
_080ADB56:
|
||||
cmp r7, 0
|
||||
bge _080ADB68
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
b _080ADC24
|
||||
_080ADB60:
|
||||
ldr r0, _080ADBA0
|
||||
lsls r1, r7, 5
|
||||
ldr r0, [r0]
|
||||
adds r4, r0, r1
|
||||
_080ADB68:
|
||||
ldr r1, _080ADBA4
|
||||
movs r0, 0
|
||||
ldrsh r3, [r5, r0]
|
||||
str r6, [sp]
|
||||
mov r2, r9
|
||||
str r2, [sp, 0x4]
|
||||
mov r2, r8
|
||||
ldr r0, [r2, 0x8]
|
||||
ldr r0, [r0, 0x8]
|
||||
str r0, [sp, 0x8]
|
||||
movs r0, 0
|
||||
adds r2, r7, 0
|
||||
bl Log
|
||||
strh r7, [r4]
|
||||
ldrh r0, [r5]
|
||||
strh r0, [r4, 0x2]
|
||||
strh r6, [r4, 0x4]
|
||||
mov r3, r9
|
||||
strb r3, [r4, 0x6]
|
||||
movs r6, 0x2
|
||||
ldrsh r0, [r5, r6]
|
||||
cmp r0, 0x1
|
||||
blt _080ADBA8
|
||||
cmp r0, 0x2
|
||||
bgt _080ADBA8
|
||||
movs r0, 0x60
|
||||
b _080ADBAA
|
||||
.align 2, 0
|
||||
_080ADBA0: .4byte gGroundEvents
|
||||
_080ADBA4: .4byte gGroundEventAddText
|
||||
_080ADBA8:
|
||||
movs r0, 0x20
|
||||
_080ADBAA:
|
||||
str r0, [r4, 0x8]
|
||||
mov r3, r8
|
||||
ldrb r0, [r3]
|
||||
lsls r1, r0, 11
|
||||
ldrb r0, [r3, 0x1]
|
||||
lsls r2, r0, 11
|
||||
mov r5, r8
|
||||
adds r5, 0x4
|
||||
add r6, sp, 0xC
|
||||
mov r12, r6
|
||||
ldrb r6, [r5, 0x2]
|
||||
movs r0, 0x4
|
||||
ands r0, r6
|
||||
cmp r0, 0
|
||||
bne _080ADBDE
|
||||
ldrb r0, [r3, 0x4]
|
||||
lsls r3, r0, 11
|
||||
str r3, [sp, 0xC]
|
||||
movs r0, 0x2
|
||||
ands r0, r6
|
||||
cmp r0, 0
|
||||
beq _080ADBDE
|
||||
movs r6, 0x80
|
||||
lsls r6, 3
|
||||
adds r0, r3, r6
|
||||
str r0, [sp, 0xC]
|
||||
_080ADBDE:
|
||||
ldrb r6, [r5, 0x3]
|
||||
movs r0, 0x4
|
||||
ands r0, r6
|
||||
cmp r0, 0
|
||||
bne _080ADC02
|
||||
ldrb r0, [r5, 0x1]
|
||||
lsls r3, r0, 11
|
||||
mov r0, r12
|
||||
str r3, [r0, 0x4]
|
||||
movs r0, 0x2
|
||||
ands r0, r6
|
||||
cmp r0, 0
|
||||
beq _080ADC02
|
||||
movs r5, 0x80
|
||||
lsls r5, 3
|
||||
adds r0, r3, r5
|
||||
mov r6, r12
|
||||
str r0, [r6, 0x4]
|
||||
_080ADC02:
|
||||
ldr r0, [sp, 0xC]
|
||||
str r0, [r4, 0xC]
|
||||
ldr r0, [sp, 0xC]
|
||||
adds r0, r1
|
||||
str r0, [r4, 0x14]
|
||||
ldr r0, [sp, 0x10]
|
||||
str r0, [r4, 0x10]
|
||||
ldr r0, [sp, 0x10]
|
||||
adds r0, r2
|
||||
str r0, [r4, 0x18]
|
||||
mov r1, r8
|
||||
ldr r0, [r1, 0x8]
|
||||
ldr r0, [r0, 0x8]
|
||||
str r0, [r4, 0x1C]
|
||||
bl GroundLives_CancelBlank_2
|
||||
adds r0, r7, 0
|
||||
_080ADC24:
|
||||
add sp, 0x14
|
||||
pop {r3,r4}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end GroundEvent_Add
|
||||
|
||||
thumb_func_start GroundEvent_Delete
|
||||
GroundEvent_Delete:
|
||||
push {r4,lr}
|
||||
adds r2, r0, 0
|
||||
lsls r2, 16
|
||||
asrs r2, 16
|
||||
ldr r0, _080ADC58
|
||||
lsls r1, r2, 5
|
||||
ldr r4, [r0]
|
||||
adds r4, r1
|
||||
ldr r1, _080ADC5C
|
||||
movs r0, 0
|
||||
bl Log
|
||||
ldr r0, _080ADC60
|
||||
strh r0, [r4, 0x2]
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080ADC58: .4byte gGroundEvents
|
||||
_080ADC5C: .4byte gGroundEventDeleteText
|
||||
_080ADC60: .4byte 0x0000ffff
|
||||
thumb_func_end GroundEvent_Delete
|
||||
|
||||
thumb_func_start sub_80ADC64
|
||||
sub_80ADC64:
|
||||
push {lr}
|
||||
adds r3, r1, 0
|
||||
lsls r0, 16
|
||||
ldr r1, _080ADC84
|
||||
asrs r0, 11
|
||||
ldr r1, [r1]
|
||||
adds r2, r1, r0
|
||||
movs r0, 0x2
|
||||
ldrsh r1, [r2, r0]
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
cmp r1, r0
|
||||
bne _080ADC88
|
||||
movs r0, 0
|
||||
b _080ADC9A
|
||||
.align 2, 0
|
||||
_080ADC84: .4byte gGroundEvents
|
||||
_080ADC88:
|
||||
ldr r0, [r2, 0x1C]
|
||||
str r0, [r3]
|
||||
movs r0, 0x2
|
||||
strh r0, [r3, 0x4]
|
||||
ldrh r0, [r2, 0x4]
|
||||
strh r0, [r3, 0x6]
|
||||
ldrb r0, [r2, 0x6]
|
||||
strb r0, [r3, 0x8]
|
||||
movs r0, 0x1
|
||||
_080ADC9A:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80ADC64
|
||||
|
||||
thumb_func_start FindGroundEvent
|
||||
FindGroundEvent:
|
||||
push {r4-r7,lr}
|
||||
adds r7, r0, 0
|
||||
adds r4, r1, 0
|
||||
ldr r0, _080ADCEC
|
||||
ldr r3, [r0]
|
||||
movs r5, 0
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
mov r12, r0
|
||||
movs r6, 0x80
|
||||
lsls r6, 9
|
||||
_080ADCB6:
|
||||
movs r1, 0x2
|
||||
ldrsh r0, [r3, r1]
|
||||
cmp r0, r12
|
||||
beq _080ADCF0
|
||||
ldr r0, [r3, 0x8]
|
||||
ands r0, r7
|
||||
cmp r0, 0
|
||||
beq _080ADCF0
|
||||
ldr r1, [r3, 0xC]
|
||||
ldr r0, [r2]
|
||||
cmp r1, r0
|
||||
bge _080ADCF0
|
||||
ldr r1, [r3, 0x14]
|
||||
ldr r0, [r4]
|
||||
cmp r1, r0
|
||||
ble _080ADCF0
|
||||
ldr r1, [r3, 0x10]
|
||||
ldr r0, [r2, 0x4]
|
||||
cmp r1, r0
|
||||
bge _080ADCF0
|
||||
ldr r1, [r3, 0x18]
|
||||
ldr r0, [r4, 0x4]
|
||||
cmp r1, r0
|
||||
ble _080ADCF0
|
||||
adds r0, r5, 0
|
||||
b _080ADD04
|
||||
.align 2, 0
|
||||
_080ADCEC: .4byte gGroundEvents
|
||||
_080ADCF0:
|
||||
adds r0, r6, 0
|
||||
movs r1, 0x80
|
||||
lsls r1, 9
|
||||
adds r6, r1
|
||||
asrs r5, r0, 16
|
||||
adds r3, 0x20
|
||||
cmp r5, 0x1F
|
||||
ble _080ADCB6
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
_080ADD04:
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end FindGroundEvent
|
||||
|
||||
thumb_func_start sub_80ADD0C
|
||||
sub_80ADD0C:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r9
|
||||
mov r6, r8
|
||||
push {r6,r7}
|
||||
mov r8, r0
|
||||
adds r6, r1, 0
|
||||
adds r5, r2, 0
|
||||
ldr r0, _080ADD74
|
||||
ldr r4, [r0]
|
||||
movs r7, 0
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
mov r9, r0
|
||||
movs r1, 0x80
|
||||
lsls r1, 9
|
||||
mov r12, r1
|
||||
_080ADD2C:
|
||||
movs r1, 0x2
|
||||
ldrsh r0, [r4, r1]
|
||||
cmp r0, r9
|
||||
beq _080ADD78
|
||||
ldr r0, [r4, 0x8]
|
||||
mov r1, r8
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _080ADD78
|
||||
ldr r0, [r4, 0xC]
|
||||
ldr r1, [r4, 0x14]
|
||||
adds r0, r1
|
||||
lsrs r1, r0, 31
|
||||
adds r0, r1
|
||||
asrs r2, r0, 1
|
||||
ldr r0, [r4, 0x10]
|
||||
ldr r1, [r4, 0x18]
|
||||
adds r0, r1
|
||||
lsrs r1, r0, 31
|
||||
adds r0, r1
|
||||
asrs r3, r0, 1
|
||||
ldr r0, [r5]
|
||||
cmp r2, r0
|
||||
bge _080ADD78
|
||||
ldr r0, [r6]
|
||||
cmp r2, r0
|
||||
ble _080ADD78
|
||||
ldr r0, [r5, 0x4]
|
||||
cmp r3, r0
|
||||
bge _080ADD78
|
||||
ldr r0, [r6, 0x4]
|
||||
cmp r3, r0
|
||||
ble _080ADD78
|
||||
adds r0, r7, 0
|
||||
b _080ADD8C
|
||||
.align 2, 0
|
||||
_080ADD74: .4byte gGroundEvents
|
||||
_080ADD78:
|
||||
mov r0, r12
|
||||
movs r1, 0x80
|
||||
lsls r1, 9
|
||||
add r12, r1
|
||||
asrs r7, r0, 16
|
||||
adds r4, 0x20
|
||||
cmp r7, 0x1F
|
||||
ble _080ADD2C
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
_080ADD8C:
|
||||
pop {r3,r4}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80ADD0C
|
||||
|
||||
thumb_func_start nullsub_124
|
||||
nullsub_124:
|
||||
bx lr
|
||||
thumb_func_end nullsub_124
|
||||
|
||||
thumb_func_start sub_80ADD9C
|
||||
sub_80ADD9C:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0x30
|
||||
str r0, [sp, 0x20]
|
||||
str r1, [sp, 0x24]
|
||||
str r2, [sp, 0x28]
|
||||
str r3, [sp, 0x2C]
|
||||
ldr r5, [sp, 0x54]
|
||||
ldr r0, [sp, 0x5C]
|
||||
mov r9, r0
|
||||
movs r0, 0x93
|
||||
lsls r0, 4
|
||||
movs r1, 0x7
|
||||
bl MemoryAlloc
|
||||
mov r10, r0
|
||||
ldr r0, _080ADEB4
|
||||
ldr r7, _080ADEB8
|
||||
adds r1, r7, 0
|
||||
bl OpenFileAndGetFileDataPtr
|
||||
adds r6, r0, 0
|
||||
add r4, sp, 0x1C
|
||||
adds r0, r4, 0
|
||||
adds r1, r5, 0
|
||||
bl sub_80901D8
|
||||
ldrb r5, [r4]
|
||||
ldrb r4, [r4, 0x1]
|
||||
cmp r5, 0x3E
|
||||
bls _080ADDE2
|
||||
movs r5, 0x3E
|
||||
_080ADDE2:
|
||||
cmp r4, 0
|
||||
bgt _080ADDE8
|
||||
movs r4, 0x1
|
||||
_080ADDE8:
|
||||
adds r0, r5, 0
|
||||
bl GetDungeonFloorCount
|
||||
cmp r4, r0
|
||||
blt _080ADDFA
|
||||
adds r0, r5, 0
|
||||
bl GetDungeonFloorCount
|
||||
subs r4, r0, 0x1
|
||||
_080ADDFA:
|
||||
ldr r2, [r6, 0x4]
|
||||
ldr r1, [r2]
|
||||
lsls r0, r5, 2
|
||||
adds r0, r1
|
||||
lsls r1, r4, 4
|
||||
ldr r0, [r0]
|
||||
adds r0, r1
|
||||
movs r3, 0
|
||||
ldrsh r1, [r0, r3]
|
||||
ldr r2, [r2, 0x4]
|
||||
lsls r0, r1, 3
|
||||
subs r0, r1
|
||||
lsls r0, 2
|
||||
adds r0, r2
|
||||
ldrb r0, [r0, 0x2]
|
||||
mov r8, r0
|
||||
adds r0, r6, 0
|
||||
bl CloseFile
|
||||
ldr r1, _080ADEBC
|
||||
ldr r0, _080ADEC0
|
||||
add r0, r8
|
||||
ldrb r5, [r0]
|
||||
add r0, sp, 0x10
|
||||
adds r2, r5, 0
|
||||
bl sprintf
|
||||
add r0, sp, 0x10
|
||||
adds r1, r7, 0
|
||||
bl OpenFileAndGetFileDataPtr
|
||||
adds r4, r0, 0
|
||||
ldr r0, [sp, 0x28]
|
||||
movs r1, 0
|
||||
adds r2, r4, 0
|
||||
bl DecompressATGlobalFile
|
||||
adds r0, r4, 0
|
||||
bl CloseFile
|
||||
ldr r1, _080ADEC4
|
||||
add r0, sp, 0x10
|
||||
mov r2, r8
|
||||
bl sprintf
|
||||
add r0, sp, 0x10
|
||||
adds r1, r7, 0
|
||||
bl OpenFile
|
||||
ldr r1, [sp, 0x20]
|
||||
str r0, [r1]
|
||||
ldr r1, _080ADEC8
|
||||
add r0, sp, 0x10
|
||||
adds r2, r5, 0
|
||||
bl sprintf
|
||||
add r0, sp, 0x10
|
||||
adds r1, r7, 0
|
||||
bl OpenFileAndGetFileDataPtr
|
||||
adds r4, r0, 0
|
||||
ldr r1, _080ADECC
|
||||
ldr r0, [sp, 0x2C]
|
||||
adds r2, r4, 0
|
||||
bl DecompressATFile
|
||||
adds r0, r4, 0
|
||||
bl CloseFile
|
||||
mov r2, r8
|
||||
cmp r2, 0x3F
|
||||
bgt _080ADED4
|
||||
ldr r1, _080ADED0
|
||||
add r0, sp, 0x10
|
||||
adds r2, r5, 0
|
||||
bl sprintf
|
||||
add r0, sp, 0x10
|
||||
adds r1, r7, 0
|
||||
bl OpenFileAndGetFileDataPtr
|
||||
adds r4, r0, 0
|
||||
mov r0, r10
|
||||
movs r1, 0x93
|
||||
lsls r1, 4
|
||||
adds r2, r4, 0
|
||||
bl DecompressATFile
|
||||
adds r0, r4, 0
|
||||
bl CloseFile
|
||||
b _080ADEFC
|
||||
.align 2, 0
|
||||
_080ADEB4: .4byte gMapparamText
|
||||
_080ADEB8: .4byte gDungeonFileArchive
|
||||
_080ADEBC: .4byte gUnknown_811889C
|
||||
_080ADEC0: .4byte gUnknown_8108EC0
|
||||
_080ADEC4: .4byte gUnknown_81188A8
|
||||
_080ADEC8: .4byte gUnknown_81188B4
|
||||
_080ADECC: .4byte 0x00001194
|
||||
_080ADED0: .4byte gUnknown_81188C0
|
||||
_080ADED4:
|
||||
ldr r1, _080ADF80
|
||||
add r0, sp, 0x10
|
||||
mov r2, r8
|
||||
ldr r3, [sp, 0x58]
|
||||
bl sprintf
|
||||
add r0, sp, 0x10
|
||||
adds r1, r7, 0
|
||||
bl OpenFileAndGetFileDataPtr
|
||||
adds r4, r0, 0
|
||||
movs r1, 0x90
|
||||
lsls r1, 2
|
||||
mov r0, r10
|
||||
adds r2, r4, 0
|
||||
bl DecompressATFile
|
||||
adds r0, r4, 0
|
||||
bl CloseFile
|
||||
_080ADEFC:
|
||||
movs r5, 0
|
||||
ldr r3, [sp, 0x60]
|
||||
cmp r5, r3
|
||||
bge _080ADF52
|
||||
_080ADF04:
|
||||
mov r0, r8
|
||||
bl IsWaterDungeon
|
||||
lsls r0, 24
|
||||
movs r7, 0
|
||||
cmp r0, 0
|
||||
beq _080ADF14
|
||||
movs r7, 0x3
|
||||
_080ADF14:
|
||||
movs r4, 0
|
||||
adds r6, r5, 0x1
|
||||
cmp r4, r9
|
||||
bge _080ADF4A
|
||||
_080ADF1C:
|
||||
ldr r0, [sp, 0x64]
|
||||
str r0, [sp]
|
||||
str r7, [sp, 0x4]
|
||||
mov r1, r10
|
||||
str r1, [sp, 0x8]
|
||||
mov r2, r8
|
||||
str r2, [sp, 0xC]
|
||||
adds r0, r4, 0
|
||||
adds r1, r5, 0
|
||||
mov r2, r9
|
||||
ldr r3, [sp, 0x60]
|
||||
bl sub_80ADFB8
|
||||
mov r1, r9
|
||||
muls r1, r5
|
||||
adds r1, r4
|
||||
lsls r1, 1
|
||||
ldr r3, [sp, 0x50]
|
||||
adds r1, r3
|
||||
strh r0, [r1]
|
||||
adds r4, 0x1
|
||||
cmp r4, r9
|
||||
blt _080ADF1C
|
||||
_080ADF4A:
|
||||
adds r5, r6, 0
|
||||
ldr r0, [sp, 0x60]
|
||||
cmp r5, r0
|
||||
blt _080ADF04
|
||||
_080ADF52:
|
||||
ldr r1, _080ADF84
|
||||
add r0, sp, 0x10
|
||||
mov r2, r8
|
||||
bl sprintf
|
||||
ldr r1, _080ADF88
|
||||
add r0, sp, 0x10
|
||||
bl OpenFile
|
||||
ldr r1, [sp, 0x24]
|
||||
str r0, [r1]
|
||||
mov r0, r10
|
||||
bl MemoryFree
|
||||
add sp, 0x30
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080ADF80: .4byte gUnknown_81188CC
|
||||
_080ADF84: .4byte gUnknown_81188DC
|
||||
_080ADF88: .4byte gDungeonFileArchive
|
||||
thumb_func_end sub_80ADD9C
|
||||
|
||||
thumb_func_start sub_80ADF8C
|
||||
sub_80ADF8C:
|
||||
push {r4,lr}
|
||||
adds r4, r0, 0
|
||||
ldr r0, [sp, 0xC]
|
||||
cmp r4, 0
|
||||
blt _080ADFB0
|
||||
cmp r1, 0
|
||||
blt _080ADFB0
|
||||
cmp r4, r2
|
||||
bge _080ADFB0
|
||||
cmp r1, r3
|
||||
bge _080ADFB0
|
||||
adds r0, r1, 0
|
||||
muls r0, r2
|
||||
adds r0, r4, r0
|
||||
lsls r0, 1
|
||||
ldr r1, [sp, 0x8]
|
||||
adds r0, r1
|
||||
ldrh r0, [r0]
|
||||
_080ADFB0:
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80ADF8C
|
||||
|
||||
thumb_func_start sub_80ADFB8
|
||||
sub_80ADFB8:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
sub sp, 0x30
|
||||
mov r9, r0
|
||||
mov r10, r1
|
||||
adds r6, r2, 0
|
||||
mov r8, r3
|
||||
ldr r4, [sp, 0x5C]
|
||||
movs r7, 0
|
||||
ldr r0, [sp, 0x50]
|
||||
str r0, [sp]
|
||||
ldr r1, [sp, 0x54]
|
||||
str r1, [sp, 0x4]
|
||||
mov r0, r9
|
||||
mov r1, r10
|
||||
bl sub_80ADF8C
|
||||
str r0, [sp, 0x28]
|
||||
cmp r4, 0x3F
|
||||
ble _080AE000
|
||||
mov r0, r9
|
||||
cmp r0, 0x17
|
||||
bgt _080ADFFC
|
||||
mov r1, r10
|
||||
cmp r1, 0x17
|
||||
bgt _080ADFFC
|
||||
lsls r0, r1, 1
|
||||
add r0, r10
|
||||
lsls r0, 3
|
||||
add r0, r9
|
||||
b _080AE24E
|
||||
_080ADFFC:
|
||||
ldr r0, [sp, 0x54]
|
||||
b _080AE254
|
||||
_080AE000:
|
||||
mov r0, r10
|
||||
adds r0, 0x1
|
||||
str r0, [sp, 0x2C]
|
||||
ldr r1, [sp, 0x50]
|
||||
str r1, [sp]
|
||||
ldr r0, [sp, 0x54]
|
||||
str r0, [sp, 0x4]
|
||||
mov r0, r9
|
||||
ldr r1, [sp, 0x2C]
|
||||
adds r2, r6, 0
|
||||
mov r3, r8
|
||||
bl sub_80ADF8C
|
||||
str r0, [sp, 0x8]
|
||||
mov r4, r9
|
||||
adds r4, 0x1
|
||||
ldr r1, [sp, 0x50]
|
||||
str r1, [sp]
|
||||
ldr r0, [sp, 0x54]
|
||||
str r0, [sp, 0x4]
|
||||
adds r0, r4, 0
|
||||
ldr r1, [sp, 0x2C]
|
||||
adds r2, r6, 0
|
||||
mov r3, r8
|
||||
bl sub_80ADF8C
|
||||
str r0, [sp, 0xC]
|
||||
ldr r1, [sp, 0x50]
|
||||
str r1, [sp]
|
||||
ldr r0, [sp, 0x54]
|
||||
str r0, [sp, 0x4]
|
||||
adds r0, r4, 0
|
||||
mov r1, r10
|
||||
adds r2, r6, 0
|
||||
mov r3, r8
|
||||
bl sub_80ADF8C
|
||||
str r0, [sp, 0x10]
|
||||
mov r5, r10
|
||||
subs r5, 0x1
|
||||
ldr r1, [sp, 0x50]
|
||||
str r1, [sp]
|
||||
ldr r0, [sp, 0x54]
|
||||
str r0, [sp, 0x4]
|
||||
adds r0, r4, 0
|
||||
adds r1, r5, 0
|
||||
adds r2, r6, 0
|
||||
mov r3, r8
|
||||
bl sub_80ADF8C
|
||||
str r0, [sp, 0x14]
|
||||
ldr r1, [sp, 0x50]
|
||||
str r1, [sp]
|
||||
ldr r0, [sp, 0x54]
|
||||
str r0, [sp, 0x4]
|
||||
mov r0, r9
|
||||
adds r1, r5, 0
|
||||
adds r2, r6, 0
|
||||
mov r3, r8
|
||||
bl sub_80ADF8C
|
||||
str r0, [sp, 0x18]
|
||||
subs r4, 0x2
|
||||
ldr r1, [sp, 0x50]
|
||||
str r1, [sp]
|
||||
ldr r0, [sp, 0x54]
|
||||
str r0, [sp, 0x4]
|
||||
adds r0, r4, 0
|
||||
adds r1, r5, 0
|
||||
adds r2, r6, 0
|
||||
mov r3, r8
|
||||
bl sub_80ADF8C
|
||||
str r0, [sp, 0x1C]
|
||||
ldr r1, [sp, 0x50]
|
||||
str r1, [sp]
|
||||
ldr r0, [sp, 0x54]
|
||||
str r0, [sp, 0x4]
|
||||
adds r0, r4, 0
|
||||
mov r1, r10
|
||||
adds r2, r6, 0
|
||||
mov r3, r8
|
||||
bl sub_80ADF8C
|
||||
str r0, [sp, 0x20]
|
||||
ldr r1, [sp, 0x50]
|
||||
str r1, [sp]
|
||||
ldr r0, [sp, 0x54]
|
||||
str r0, [sp, 0x4]
|
||||
adds r0, r4, 0
|
||||
ldr r1, [sp, 0x2C]
|
||||
adds r2, r6, 0
|
||||
mov r3, r8
|
||||
bl sub_80ADF8C
|
||||
adds r1, r0, 0
|
||||
str r1, [sp, 0x24]
|
||||
ldr r0, [sp, 0x28]
|
||||
cmp r0, 0x1
|
||||
bne _080AE12A
|
||||
movs r7, 0xFF
|
||||
ldr r0, [sp, 0x8]
|
||||
cmp r0, 0
|
||||
bne _080AE0D2
|
||||
movs r7, 0xFE
|
||||
_080AE0D2:
|
||||
ldr r0, [sp, 0xC]
|
||||
cmp r0, 0
|
||||
bne _080AE0DE
|
||||
movs r0, 0x3
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE0DE:
|
||||
ldr r0, [sp, 0x10]
|
||||
cmp r0, 0
|
||||
bne _080AE0EA
|
||||
movs r0, 0x5
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE0EA:
|
||||
ldr r0, [sp, 0x14]
|
||||
cmp r0, 0
|
||||
bne _080AE0F6
|
||||
movs r0, 0x9
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE0F6:
|
||||
ldr r0, [sp, 0x18]
|
||||
cmp r0, 0
|
||||
bne _080AE102
|
||||
movs r0, 0x11
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE102:
|
||||
ldr r0, [sp, 0x1C]
|
||||
cmp r0, 0
|
||||
bne _080AE10E
|
||||
movs r0, 0x21
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE10E:
|
||||
ldr r0, [sp, 0x20]
|
||||
cmp r0, 0
|
||||
bne _080AE11A
|
||||
movs r0, 0x41
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE11A:
|
||||
cmp r1, 0
|
||||
bne _080AE124
|
||||
movs r0, 0x81
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE124:
|
||||
movs r0, 0x80
|
||||
lsls r0, 2
|
||||
b _080AE248
|
||||
_080AE12A:
|
||||
ldr r0, [sp, 0x28]
|
||||
cmp r0, 0x2
|
||||
bne _080AE192
|
||||
movs r7, 0xFF
|
||||
ldr r0, [sp, 0x8]
|
||||
cmp r0, 0x2
|
||||
beq _080AE13A
|
||||
movs r7, 0xFE
|
||||
_080AE13A:
|
||||
ldr r0, [sp, 0xC]
|
||||
cmp r0, 0x2
|
||||
beq _080AE146
|
||||
movs r0, 0x3
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE146:
|
||||
ldr r0, [sp, 0x10]
|
||||
cmp r0, 0x2
|
||||
beq _080AE152
|
||||
movs r0, 0x5
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE152:
|
||||
ldr r0, [sp, 0x14]
|
||||
cmp r0, 0x2
|
||||
beq _080AE15E
|
||||
movs r0, 0x9
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE15E:
|
||||
ldr r0, [sp, 0x18]
|
||||
cmp r0, 0x2
|
||||
beq _080AE16A
|
||||
movs r0, 0x11
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE16A:
|
||||
ldr r0, [sp, 0x1C]
|
||||
cmp r0, 0x2
|
||||
beq _080AE176
|
||||
movs r0, 0x21
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE176:
|
||||
ldr r0, [sp, 0x20]
|
||||
cmp r0, 0x2
|
||||
beq _080AE182
|
||||
movs r0, 0x41
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE182:
|
||||
cmp r1, 0x2
|
||||
beq _080AE18C
|
||||
movs r0, 0x81
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE18C:
|
||||
movs r0, 0x80
|
||||
lsls r0, 1
|
||||
b _080AE248
|
||||
_080AE192:
|
||||
ldr r1, [sp, 0x28]
|
||||
cmp r1, 0x3
|
||||
bne _080AE1FC
|
||||
movs r7, 0xFF
|
||||
ldr r0, [sp, 0x8]
|
||||
cmp r0, 0x3
|
||||
beq _080AE1A2
|
||||
movs r7, 0xFE
|
||||
_080AE1A2:
|
||||
ldr r0, [sp, 0xC]
|
||||
cmp r0, 0x3
|
||||
beq _080AE1AE
|
||||
movs r0, 0x3
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE1AE:
|
||||
ldr r0, [sp, 0x10]
|
||||
cmp r0, 0x3
|
||||
beq _080AE1BA
|
||||
movs r0, 0x5
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE1BA:
|
||||
ldr r0, [sp, 0x14]
|
||||
cmp r0, 0x3
|
||||
beq _080AE1C6
|
||||
movs r0, 0x9
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE1C6:
|
||||
ldr r0, [sp, 0x18]
|
||||
cmp r0, 0x3
|
||||
beq _080AE1D2
|
||||
movs r0, 0x11
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE1D2:
|
||||
ldr r0, [sp, 0x1C]
|
||||
cmp r0, 0x3
|
||||
beq _080AE1DE
|
||||
movs r0, 0x21
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE1DE:
|
||||
ldr r0, [sp, 0x20]
|
||||
cmp r0, 0x3
|
||||
beq _080AE1EA
|
||||
movs r0, 0x41
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE1EA:
|
||||
ldr r0, [sp, 0x24]
|
||||
cmp r0, 0x3
|
||||
beq _080AE1F6
|
||||
movs r0, 0x81
|
||||
negs r0, r0
|
||||
ands r7, r0
|
||||
_080AE1F6:
|
||||
movs r0, 0x80
|
||||
lsls r0, 1
|
||||
b _080AE248
|
||||
_080AE1FC:
|
||||
ldr r0, [sp, 0x8]
|
||||
cmp r0, 0
|
||||
bne _080AE204
|
||||
movs r7, 0x1
|
||||
_080AE204:
|
||||
ldr r0, [sp, 0xC]
|
||||
cmp r0, 0
|
||||
bne _080AE20E
|
||||
movs r0, 0x2
|
||||
orrs r7, r0
|
||||
_080AE20E:
|
||||
ldr r0, [sp, 0x10]
|
||||
cmp r0, 0
|
||||
bne _080AE218
|
||||
movs r0, 0x4
|
||||
orrs r7, r0
|
||||
_080AE218:
|
||||
ldr r0, [sp, 0x14]
|
||||
cmp r0, 0
|
||||
bne _080AE222
|
||||
movs r0, 0x8
|
||||
orrs r7, r0
|
||||
_080AE222:
|
||||
ldr r0, [sp, 0x18]
|
||||
cmp r0, 0
|
||||
bne _080AE22C
|
||||
movs r0, 0x10
|
||||
orrs r7, r0
|
||||
_080AE22C:
|
||||
ldr r0, [sp, 0x1C]
|
||||
cmp r0, 0
|
||||
bne _080AE236
|
||||
movs r0, 0x20
|
||||
orrs r7, r0
|
||||
_080AE236:
|
||||
ldr r0, [sp, 0x20]
|
||||
cmp r0, 0
|
||||
bne _080AE240
|
||||
movs r0, 0x40
|
||||
orrs r7, r0
|
||||
_080AE240:
|
||||
ldr r0, [sp, 0x24]
|
||||
cmp r0, 0
|
||||
bne _080AE24A
|
||||
movs r0, 0x80
|
||||
_080AE248:
|
||||
orrs r7, r0
|
||||
_080AE24A:
|
||||
lsls r0, r7, 1
|
||||
adds r0, r7
|
||||
_080AE24E:
|
||||
ldr r1, [sp, 0x58]
|
||||
adds r0, r1, r0
|
||||
ldrb r0, [r0]
|
||||
_080AE254:
|
||||
add sp, 0x30
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_80ADFB8
|
||||
|
||||
.align 2,0
|
||||
File diff suppressed because it is too large
Load Diff
6908
data/data_8115F5C_3.s
Normal file
6908
data/data_8115F5C_3.s
Normal file
File diff suppressed because it is too large
Load Diff
|
|
@ -131,7 +131,7 @@ typedef struct GroundMapAction
|
|||
|
||||
typedef struct ScriptRef
|
||||
{
|
||||
u16 id;
|
||||
s16 id;
|
||||
s16 type;
|
||||
u8 *name;
|
||||
const ScriptCommand *script;
|
||||
|
|
|
|||
23
include/structs/dungeon_mapparam.h
Normal file
23
include/structs/dungeon_mapparam.h
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
#ifndef GUARD_DUNGEON_MAPPARAM_H
|
||||
#define GUARD_DUNGEON_MAPPARAM_H
|
||||
|
||||
#include "dungeon.h"
|
||||
|
||||
struct DungeonMapParam1
|
||||
{
|
||||
s16 unk0;
|
||||
s16 unk2;
|
||||
s16 unk4;
|
||||
s16 unk6[5];
|
||||
};
|
||||
|
||||
struct DungeonMapParam2
|
||||
{
|
||||
struct DungeonMapParam1 **unk0;
|
||||
FloorProperties *unk4;
|
||||
u16 **unk8;
|
||||
UnkDungeonGlobal_unk1CD98 **unkC;
|
||||
u16 **unk10;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
@ -356,7 +356,7 @@ SECTIONS {
|
|||
asm/ground_effect.o(.text);
|
||||
src/ground_link.o(.text);
|
||||
src/ground_event.o(.text);
|
||||
asm/ground_event.o(.text);
|
||||
src/unk_dungeon_load_maybe.o(.text);
|
||||
src/m4a_1.o(.text);
|
||||
src/m4a.o(.text);
|
||||
*libagbsyscall.a:CpuSet.o(.text);
|
||||
|
|
@ -696,6 +696,9 @@ SECTIONS {
|
|||
data/data_8115F5C.o(.rodata);
|
||||
src/code_809A560.o(.rodata);
|
||||
data/data_8115F5C_2.o(.rodata);
|
||||
src/ground_event.o(.rodata);
|
||||
src/unk_dungeon_load_maybe.o(.rodata);
|
||||
data/data_8115F5C_3.o(.rodata);
|
||||
src/ground_event_data.o(.rodata);
|
||||
data/friend_area_dialogue.o(.rodata);
|
||||
src/ground_data_t00p01_station.o(.rodata);
|
||||
|
|
|
|||
|
|
@ -19,29 +19,13 @@
|
|||
#include "text_1.h"
|
||||
#include "text_3.h"
|
||||
#include "dungeon_config.h"
|
||||
#include "structs/dungeon_mapparam.h"
|
||||
|
||||
// File split is correct.
|
||||
|
||||
extern s32 sub_80902C8(u8 dungeon);
|
||||
extern void sub_808E9C4(UnkDungeonGlobal_unk1CD98 *r0, s16 r1);
|
||||
|
||||
struct UnkDungeonFileData
|
||||
{
|
||||
s16 unk0;
|
||||
s16 unk2;
|
||||
s16 unk4;
|
||||
s16 unk6[5];
|
||||
};
|
||||
|
||||
struct UnkDataFileStruct
|
||||
{
|
||||
struct UnkDungeonFileData **unk0;
|
||||
FloorProperties *unk4;
|
||||
u16 **unk8;
|
||||
UnkDungeonGlobal_unk1CD98 **unkC;
|
||||
u16 **unk10;
|
||||
};
|
||||
|
||||
void sub_803D4AC(void)
|
||||
{
|
||||
gDungeon->unk1C570.id = 0x63;
|
||||
|
|
@ -53,7 +37,7 @@ void sub_803D4D0(void)
|
|||
s16 spArray[NUM_ITEM_CATEGORIES + NUMBER_OF_ITEM_IDS];
|
||||
s32 i, j, k;
|
||||
OpenedFile *file;
|
||||
struct UnkDungeonFileData *strPtr;
|
||||
struct DungeonMapParam1 *strPtr;
|
||||
|
||||
sub_80901D8(&gDungeon->unk644.dungeonLocation2, &gDungeon->unk644.dungeonLocation);
|
||||
if (gDungeon->unk1C570.id == gDungeon->unk644.dungeonLocation2.id && gDungeon->unk1C570.floor == gDungeon->unk644.dungeonLocation2.floor)
|
||||
|
|
@ -61,18 +45,18 @@ void sub_803D4D0(void)
|
|||
|
||||
gDungeon->unk1C570 = gDungeon->unk644.dungeonLocation2;
|
||||
file = OpenFileAndGetFileDataPtr("mapparam", &gDungeonFileArchive);
|
||||
strPtr = &((struct UnkDataFileStruct *)(file->data))->unk0[gDungeon->unk1C570.id][gDungeon->unk1C570.floor];
|
||||
strPtr = &((struct DungeonMapParam2 *)(file->data))->unk0[gDungeon->unk1C570.id][gDungeon->unk1C570.floor];
|
||||
|
||||
gDungeon->unk1CEC8 = GetDungeonFloorCount(gDungeon->unk644.dungeonLocation.id);
|
||||
gDungeon->unk14 = sub_80902C8(gDungeon->unk644.dungeonLocation.id);
|
||||
|
||||
gDungeon->floorProperties = ((struct UnkDataFileStruct *)(file->data))->unk4[strPtr->unk0];
|
||||
gDungeon->floorProperties = ((struct DungeonMapParam2 *)(file->data))->unk4[strPtr->unk0];
|
||||
|
||||
for (i = 0; i < 20; i++) {
|
||||
gDungeon->unk1CD70[i] = ((struct UnkDataFileStruct *)(file->data))->unk10[strPtr->unk4][i];
|
||||
gDungeon->unk1CD70[i] = ((struct DungeonMapParam2 *)(file->data))->unk10[strPtr->unk4][i];
|
||||
}
|
||||
for (i = 0; i < 31; i++) {
|
||||
gDungeon->unk1CD98[i] = ((struct UnkDataFileStruct *)(file->data))->unkC[strPtr->unk2][i];
|
||||
gDungeon->unk1CD98[i] = ((struct DungeonMapParam2 *)(file->data))->unkC[strPtr->unk2][i];
|
||||
if (ExtractSpeciesIndex(&gDungeon->unk1CD98[i]) == 0)
|
||||
break;
|
||||
}
|
||||
|
|
@ -83,7 +67,7 @@ void sub_803D4D0(void)
|
|||
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
u16 *src = ((struct UnkDataFileStruct *)(file->data))->unk8[strPtr->unk6[i]];
|
||||
u16 *src = ((struct DungeonMapParam2 *)(file->data))->unk8[strPtr->unk6[i]];
|
||||
s32 arrId = 0;
|
||||
|
||||
for (j = 0; j < NUM_ITEM_CATEGORIES + NUMBER_OF_ITEM_IDS; ) {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include "global.h"
|
||||
#include "globaldata.h"
|
||||
#include "ground_script.h"
|
||||
#include "debug.h"
|
||||
#include "memory.h"
|
||||
|
|
@ -7,22 +8,27 @@ typedef struct GroundEvent
|
|||
{
|
||||
s16 unk0;
|
||||
s16 unk2;
|
||||
s16 unk4; // scriptID
|
||||
s16 unk4; // scriptID or group?
|
||||
s8 unk6; // sector
|
||||
u8 unk7[0x20 - 0x7];
|
||||
s32 unk8;
|
||||
s32 unkC;
|
||||
s32 unk10;
|
||||
s32 unk14;
|
||||
s32 unk18;
|
||||
const ScriptCommand *unk1C;
|
||||
} GroundEvent;
|
||||
|
||||
IWRAM_INIT GroundEvent *gGroundEvents = NULL;
|
||||
|
||||
extern void GroundLives_CancelBlank_2(void);
|
||||
|
||||
void DeleteGroundEvents(void);
|
||||
void GroundEvent_Delete(s32);
|
||||
const struct GroundScriptHeader *GetGroundScript(s16 a0, DebugLocation *);
|
||||
s16 GroundEvent_Add(s32 id, const GroundEventData*, s32 group, s32 sector);
|
||||
extern DebugLocation gUnknown_81187DC;
|
||||
extern u8 gGroundEventSelectText[];
|
||||
extern u8 gGroundEventCancelText[];
|
||||
const struct GroundScriptHeader *GetGroundScript(s16 a0, const DebugLocation *);
|
||||
s32 GroundEvent_Add(s32 id, const GroundEventData*, s32 group, s32 sector);
|
||||
|
||||
void AllocGroundEvents(void) {
|
||||
void AllocGroundEvents(void)
|
||||
{
|
||||
s32 ind;
|
||||
GroundEvent *ptr;
|
||||
gGroundEvents = MemoryAlloc(sizeof(GroundEvent) * 0x20, 0x6);
|
||||
|
|
@ -34,12 +40,13 @@ void AllocGroundEvents(void) {
|
|||
DeleteGroundEvents();
|
||||
}
|
||||
|
||||
void DeleteGroundEvents(void) {
|
||||
void DeleteGroundEvents(void)
|
||||
{
|
||||
s32 v1;
|
||||
GroundEvent* current;
|
||||
|
||||
|
||||
current = &gGroundEvents[0];
|
||||
for (v1 = 0; v1 < 0x20; v1 = (s16) (v1 + 0x1), current++) {
|
||||
for (v1 = 0; v1 < 0x20; v1 = (s16) (v1 + 0x1), current++) {
|
||||
if(current->unk2 != -1)
|
||||
GroundEvent_Delete(v1);
|
||||
}
|
||||
|
|
@ -52,6 +59,15 @@ void FreeGroundEvents(void)
|
|||
gGroundEvents = NULL;
|
||||
}
|
||||
|
||||
ALIGNED(4) static const char sFileName[] = "../ground/ground_event.c";
|
||||
ALIGNED(4) static const char sFuncName[] = "GroundEvent_Select";
|
||||
|
||||
static const DebugLocation sGroundEvent_DebugLoc = {
|
||||
.file = sFileName,
|
||||
.line = 160, // Nice, the line here is 63...
|
||||
.func = sFuncName,
|
||||
};
|
||||
|
||||
void GroundEvent_Select(s32 scriptID, s32 group, s32 sector)
|
||||
{
|
||||
const struct GroundScriptHeader *scriptPtr;
|
||||
|
|
@ -68,8 +84,8 @@ void GroundEvent_Select(s32 scriptID, s32 group, s32 sector)
|
|||
scriptID_s32 = (s16)scriptID;
|
||||
group_s32 = (s16)group;
|
||||
sector_s32 = (s8)sector;
|
||||
scriptPtr = GetGroundScript(scriptID_s32, &gUnknown_81187DC);
|
||||
Log('\0',gGroundEventSelectText, scriptID_s32, group_s32, sector_s32);
|
||||
scriptPtr = GetGroundScript(scriptID_s32, &sGroundEvent_DebugLoc);
|
||||
Log('\0',"GroundEvent Select %3d %3d %3d", scriptID_s32, group_s32, sector_s32);
|
||||
|
||||
groupPtr = &scriptPtr->groups[group_s32];
|
||||
sectorPtr = &groupPtr->sectors[sector_s32];
|
||||
|
|
@ -92,8 +108,7 @@ void GroundEvent_Cancel(s32 scriptID, s32 sector)
|
|||
scriptID_s32 = (s16)scriptID;
|
||||
sector_s32 = (s8) sector;
|
||||
|
||||
|
||||
Log('\0',gGroundEventCancelText, scriptID_s32, sector_s32);
|
||||
Log('\0',"GroundEvent Cancel %3d %3d", scriptID_s32, sector_s32);
|
||||
|
||||
index = 0;
|
||||
ptr = &gGroundEvents[0];
|
||||
|
|
@ -105,3 +120,161 @@ void GroundEvent_Cancel(s32 scriptID, s32 sector)
|
|||
}
|
||||
}
|
||||
|
||||
static inline void SetUnkInGroundEvent(const CompactPos *posPtr, s32 *dst)
|
||||
{
|
||||
if (!(posPtr->xFlags & 4)) {
|
||||
s32 unk = posPtr->xTiles << 11;
|
||||
dst[0] = unk;
|
||||
if (posPtr->xFlags & 2) {
|
||||
dst[0] = unk + 0x400;
|
||||
}
|
||||
}
|
||||
if (!(posPtr->yFlags & 4)) {
|
||||
s32 unk = posPtr->yTiles << 11;
|
||||
dst[1] = unk;
|
||||
if (posPtr->yFlags & 2) {
|
||||
dst[1] = unk + 0x400;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct TestStruct
|
||||
{
|
||||
s32 unk0;
|
||||
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;
|
||||
s32 scriptID_s32 = (s16) id;
|
||||
s32 group_s32 = (s16) group;
|
||||
s32 sector_s32 = (s8) sector;
|
||||
const ScriptRef *script;
|
||||
GroundEvent *ptr;
|
||||
struct TestStruct r;
|
||||
s32 sp[2];
|
||||
|
||||
ASM_MATCH_TRICK(sector_s32);
|
||||
|
||||
script = eventData->script;
|
||||
|
||||
if (scriptID_s32 < 0) {
|
||||
ptr = &gGroundEvents[0];
|
||||
for (i = 0; i < 0x20; i = (s16)(i + 1), ptr++) {
|
||||
if (ptr->unk2 == -1) {
|
||||
scriptID_s32 = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (scriptID_s32 < 0) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
ptr = &gGroundEvents[scriptID_s32];
|
||||
}
|
||||
|
||||
Log(0, "GroundEvent Add id %3d kind %3d group %3d sector %3d script %p\0", scriptID_s32, script->id, group_s32, sector_s32, eventData->script->script);
|
||||
|
||||
ptr->unk0 = scriptID_s32;
|
||||
ptr->unk2 = script->id;
|
||||
ptr->unk4 = group_s32;
|
||||
ptr->unk6 = sector_s32;
|
||||
switch (script->type) {
|
||||
case 1:
|
||||
case 2:
|
||||
ptr->unk8 = 0x60;
|
||||
break;
|
||||
case 7:
|
||||
default:
|
||||
ptr->unk8 = 0x20;
|
||||
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;
|
||||
SetUnkInGroundEvent(&eventData->pos, sp);
|
||||
|
||||
ptr->unkC = sp[0];
|
||||
ptr->unk14 = sp[0] + r.unk0;
|
||||
ptr->unk10 = sp[1];
|
||||
ptr->unk18 = sp[1] + r.unk4;
|
||||
ptr->unk1C = eventData->script->script;
|
||||
|
||||
GroundLives_CancelBlank_2();
|
||||
return scriptID_s32;
|
||||
}
|
||||
|
||||
void GroundEvent_Delete(s32 id)
|
||||
{
|
||||
s32 scriptID_s32 = (s16) id;
|
||||
GroundEvent *ptr = &gGroundEvents[scriptID_s32];
|
||||
Log(0, "GroundEvent Delete id %3d\0", scriptID_s32);
|
||||
ptr->unk2 = -1;
|
||||
}
|
||||
|
||||
bool8 sub_80ADC64(s32 id, ScriptInfoSmall *dst)
|
||||
{
|
||||
s32 scriptID_s32 = (s16) id;
|
||||
GroundEvent *ptr = &gGroundEvents[scriptID_s32];
|
||||
|
||||
if (ptr->unk2 != -1) {
|
||||
dst->ptr = ptr->unk1C;
|
||||
dst->state = 2;
|
||||
dst->group = ptr->unk4;
|
||||
dst->sector = ptr->unk6;
|
||||
return TRUE;
|
||||
}
|
||||
else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
s16 FindGroundEvent(u32 flags, s32 *arg1, s32 *arg2)
|
||||
{
|
||||
s32 i;
|
||||
GroundEvent *ptr = &gGroundEvents[0];
|
||||
for (i = 0; i < 0x20; i = (s16)(i + 1), ptr++) {
|
||||
if (ptr->unk2 != -1
|
||||
&& (ptr->unk8 & flags)
|
||||
&& ptr->unkC < arg2[0]
|
||||
&& ptr->unk14 > arg1[0]
|
||||
&& ptr->unk10 < arg2[1]
|
||||
&& ptr->unk18 > arg1[1])
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
UNUSED static s16 UnusedFindGroundEvent(u32 flags, s32 *arg1, s32 *arg2)
|
||||
{
|
||||
s32 i;
|
||||
GroundEvent *ptr = &gGroundEvents[0];
|
||||
for (i = 0; i < 0x20; i = (s16)(i + 1), ptr++) {
|
||||
if (ptr->unk2 != -1 && (ptr->unk8 & flags)) {
|
||||
struct TestStruct r = {0};
|
||||
r.unk0 = (ptr->unkC + ptr->unk14) / 2;
|
||||
r.unk4 = (ptr->unk10 + ptr->unk18) / 2;
|
||||
if (r.unk0 < arg2[0]
|
||||
&& r.unk0 > arg1[0]
|
||||
&& r.unk4 < arg2[1]
|
||||
&& r.unk4 > arg1[1])
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
void nullsub_124(void) {}
|
||||
|
|
|
|||
172
src/unk_dungeon_load_maybe.c
Normal file
172
src/unk_dungeon_load_maybe.c
Normal file
|
|
@ -0,0 +1,172 @@
|
|||
#include "global.h"
|
||||
#include "globaldata.h"
|
||||
#include "memory.h"
|
||||
#include "dungeon.h"
|
||||
#include "decompress_at.h"
|
||||
#include "def_filearchives.h"
|
||||
#include "file_system.h"
|
||||
#include "constants/dungeon.h"
|
||||
#include "structs/dungeon_mapparam.h"
|
||||
|
||||
extern bool8 IsWaterDungeon(u32 r0);
|
||||
|
||||
extern const u8 gUnknown_8108EC0[];
|
||||
|
||||
static s32 sub_80ADFB8(s32 a0, s32 a1, s32 a2, s32 a3, u16 *a4, s32 a5, u8 *a6, s32 a7);
|
||||
|
||||
// This function is called when loading a transition between a dungeon and its summit, where the player can continue, save, or go back.
|
||||
void sub_80ADD9C(OpenedFile **a0, OpenedFile **a1, u32 *a2, u32 *a3, u16 *a4, DungeonLocation *a5, s32 a6, s32 a7, s32 a8, u16 *a9)
|
||||
{
|
||||
OpenedFile *file;
|
||||
s32 r8;
|
||||
s32 i, j;
|
||||
u8 name[12];
|
||||
DungeonLocation dungLoc;
|
||||
u8 dungId;
|
||||
s32 dungFloor;
|
||||
struct DungeonMapParam1 *strPtr;
|
||||
void *r10 = MemoryAlloc(0x930, 7);
|
||||
OpenedFile *mapParamFile = OpenFileAndGetFileDataPtr("mapparam", &gDungeonFileArchive);
|
||||
|
||||
sub_80901D8(&dungLoc, a5);
|
||||
dungId = dungLoc.id;
|
||||
dungFloor = dungLoc.floor;
|
||||
if (dungId > 62) {
|
||||
dungId = 62;
|
||||
}
|
||||
|
||||
if (dungFloor <= 0) {
|
||||
dungFloor = 1;
|
||||
}
|
||||
if (dungFloor >= GetDungeonFloorCount(dungId)) {
|
||||
dungFloor = GetDungeonFloorCount(dungId) - 1;
|
||||
}
|
||||
|
||||
strPtr = &((struct DungeonMapParam2 *)(mapParamFile->data))->unk0[dungId][dungFloor];
|
||||
r8 = ((struct DungeonMapParam2 *)(mapParamFile->data))->unk4[strPtr->unk0].unk2;
|
||||
|
||||
CloseFile(mapParamFile);
|
||||
|
||||
sprintf(name, "b%02dfon", gUnknown_8108EC0[r8]);
|
||||
file = OpenFileAndGetFileDataPtr(name, &gDungeonFileArchive);
|
||||
DecompressATGlobalFile(a2, 0, file);
|
||||
CloseFile(file);
|
||||
|
||||
sprintf(name, "b%02dpal", r8);
|
||||
*a0 = OpenFile(name, &gDungeonFileArchive);
|
||||
|
||||
sprintf(name, "b%02dcel", gUnknown_8108EC0[r8]);
|
||||
file = OpenFileAndGetFileDataPtr(name, &gDungeonFileArchive);
|
||||
DecompressATFile(a3, 0x1194, file);
|
||||
CloseFile(file);
|
||||
|
||||
if (r8 < 64) {
|
||||
sprintf(name, "b%02dcex", gUnknown_8108EC0[r8]);
|
||||
file = OpenFileAndGetFileDataPtr(name, &gDungeonFileArchive);
|
||||
DecompressATFile(r10, 0x930, file);
|
||||
CloseFile(file);
|
||||
}
|
||||
else {
|
||||
sprintf(name, "b%02demap%01d", r8, a6);
|
||||
file = OpenFileAndGetFileDataPtr(name, &gDungeonFileArchive);
|
||||
DecompressATFile(r10, 0x240, file);
|
||||
CloseFile(file);
|
||||
}
|
||||
|
||||
for (i = 0; i < a8; i++) {
|
||||
s32 r7 = !IsWaterDungeon(r8) ? 0 : 3;
|
||||
for (j = 0; j < a7; j++) {
|
||||
a4[(i * a7) + j] = sub_80ADFB8(j, i, a7, a8, a9, r7, r10, r8);
|
||||
}
|
||||
}
|
||||
|
||||
sprintf(name, "b%02dcanm", r8);
|
||||
*a1 = OpenFile(name, &gDungeonFileArchive);
|
||||
MemoryFree(r10);
|
||||
}
|
||||
|
||||
static s32 sub_80ADF8C(s32 a0, s32 a1, s32 a2, s32 a3, u16 *a4, s32 a5)
|
||||
{
|
||||
s32 ret = a5;
|
||||
if (a0 >= 0 && a1 >= 0 && a0 < a2 && a1 < a3) {
|
||||
ret = a4[a0 + (a1 * a2)];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static s32 sub_80ADFB8(s32 a0, s32 a1, s32 a2, s32 a3, u16 *a4, s32 a5, u8 *a6, s32 a7)
|
||||
{
|
||||
s32 id;
|
||||
s32 offsets[8];
|
||||
u32 mask = 0;
|
||||
s32 baseResult = sub_80ADF8C(a0, a1, a2, a3, a4, a5);
|
||||
|
||||
if (a7 >= 64) {
|
||||
if (a0 < 24 && a1 < 24) {
|
||||
id = a0 + (a1 * 24);
|
||||
return a6[id];
|
||||
}
|
||||
else {
|
||||
return a5;
|
||||
}
|
||||
}
|
||||
|
||||
offsets[0] = sub_80ADF8C(a0 + 0, a1 + 1, a2, a3, a4, a5);
|
||||
offsets[1] = sub_80ADF8C(a0 + 1, a1 + 1, a2, a3, a4, a5);
|
||||
offsets[2] = sub_80ADF8C(a0 + 1, a1 + 0, a2, a3, a4, a5);
|
||||
offsets[3] = sub_80ADF8C(a0 + 1, a1 - 1, a2, a3, a4, a5);
|
||||
offsets[4] = sub_80ADF8C(a0 + 0, a1 - 1, a2, a3, a4, a5);
|
||||
offsets[5] = sub_80ADF8C(a0 - 1, a1 - 1, a2, a3, a4, a5);
|
||||
offsets[6] = sub_80ADF8C(a0 - 1, a1 + 0, a2, a3, a4, a5);
|
||||
offsets[7] = sub_80ADF8C(a0 - 1, a1 + 1, a2, a3, a4, a5);
|
||||
if (baseResult == 1) {
|
||||
mask = 0xFF;
|
||||
if (offsets[0] == 0) mask &= ~0x01;
|
||||
if (offsets[1] == 0) mask &= ~0x02;
|
||||
if (offsets[2] == 0) mask &= ~0x04;
|
||||
if (offsets[3] == 0) mask &= ~0x08;
|
||||
if (offsets[4] == 0) mask &= ~0x10;
|
||||
if (offsets[5] == 0) mask &= ~0x20;
|
||||
if (offsets[6] == 0) mask &= ~0x40;
|
||||
if (offsets[7] == 0) mask &= ~0x80;
|
||||
mask |= 0x200;
|
||||
}
|
||||
else if (baseResult == 2) {
|
||||
mask = 0xFF;
|
||||
if (offsets[0] != 2) mask &= ~0x01;
|
||||
if (offsets[1] != 2) mask &= ~0x02;
|
||||
if (offsets[2] != 2) mask &= ~0x04;
|
||||
if (offsets[3] != 2) mask &= ~0x08;
|
||||
if (offsets[4] != 2) mask &= ~0x10;
|
||||
if (offsets[5] != 2) mask &= ~0x20;
|
||||
if (offsets[6] != 2) mask &= ~0x40;
|
||||
if (offsets[7] != 2) mask &= ~0x80;
|
||||
mask |= 0x100;
|
||||
}
|
||||
else if (baseResult == 3) {
|
||||
mask = 0xFF;
|
||||
if (offsets[0] != 3) mask &= ~0x01;
|
||||
if (offsets[1] != 3) mask &= ~0x02;
|
||||
if (offsets[2] != 3) mask &= ~0x04;
|
||||
if (offsets[3] != 3) mask &= ~0x08;
|
||||
if (offsets[4] != 3) mask &= ~0x10;
|
||||
if (offsets[5] != 3) mask &= ~0x20;
|
||||
if (offsets[6] != 3) mask &= ~0x40;
|
||||
if (offsets[7] != 3) mask &= ~0x80;
|
||||
mask |= 0x100;
|
||||
}
|
||||
else {
|
||||
mask = 0;
|
||||
if (offsets[0] == 0) mask |= 0x01;
|
||||
if (offsets[1] == 0) mask |= 0x02;
|
||||
if (offsets[2] == 0) mask |= 0x04;
|
||||
if (offsets[3] == 0) mask |= 0x08;
|
||||
if (offsets[4] == 0) mask |= 0x10;
|
||||
if (offsets[5] == 0) mask |= 0x20;
|
||||
if (offsets[6] == 0) mask |= 0x40;
|
||||
if (offsets[7] == 0) mask |= 0x80;
|
||||
}
|
||||
|
||||
id = mask * 3;
|
||||
return a6[id];
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user