mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-22 00:34:40 -05:00
Merge pull request #171 from SethBarberee/dec_2023
This commit is contained in:
@@ -299,29 +299,4 @@ _080140AC: .4byte 0x00003fff
|
||||
_080140B0: .4byte 0x00000fff
|
||||
thumb_func_end sub_8013F84
|
||||
|
||||
thumb_func_start sub_80140B4
|
||||
sub_80140B4:
|
||||
push {r4-r7,lr}
|
||||
ldr r4, _080140D8
|
||||
adds r2, r0, 0
|
||||
movs r3, 0x3
|
||||
_080140BC:
|
||||
adds r1, r2, 0
|
||||
adds r0, r4, 0
|
||||
ldm r0!, {r5-r7}
|
||||
stm r1!, {r5-r7}
|
||||
ldm r0!, {r5-r7}
|
||||
stm r1!, {r5-r7}
|
||||
adds r4, 0x18
|
||||
adds r2, 0x18
|
||||
subs r3, 0x1
|
||||
cmp r3, 0
|
||||
bge _080140BC
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080140D8: .4byte gUnknown_80D47C8
|
||||
thumb_func_end sub_80140B4
|
||||
|
||||
.align 2,0
|
||||
|
||||
@@ -5,35 +5,6 @@
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_8014214
|
||||
sub_8014214:
|
||||
push {r4-r6,lr}
|
||||
sub sp, 0x14
|
||||
lsls r6, r2, 16
|
||||
movs r2, 0x1
|
||||
negs r2, r2
|
||||
ldr r3, _08014244
|
||||
movs r5, 0
|
||||
str r5, [sp]
|
||||
movs r4, 0x3
|
||||
str r4, [sp, 0x4]
|
||||
str r5, [sp, 0x8]
|
||||
str r1, [sp, 0xC]
|
||||
movs r1, 0xC0
|
||||
lsls r1, 18
|
||||
orrs r1, r6
|
||||
lsrs r1, 16
|
||||
str r1, [sp, 0x10]
|
||||
movs r1, 0
|
||||
bl sub_8014248
|
||||
add sp, 0x14
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08014244: .4byte gUnknown_80D4880
|
||||
thumb_func_end sub_8014214
|
||||
|
||||
thumb_func_start sub_8014248
|
||||
sub_8014248:
|
||||
push {r4-r7,lr}
|
||||
|
||||
5060
asm/code_804AFAC.s
5060
asm/code_804AFAC.s
File diff suppressed because it is too large
Load Diff
4620
asm/code_804FD30.s
Normal file
4620
asm/code_804FD30.s
Normal file
File diff suppressed because it is too large
Load Diff
@@ -4665,7 +4665,7 @@ _08054CFE:
|
||||
adds r1, r5, 0
|
||||
mov r2, r8
|
||||
mov r3, r9
|
||||
bl sub_805C3DC
|
||||
bl TrapperOrbAction
|
||||
b _080554BA
|
||||
_08054D0C:
|
||||
adds r0, r7, 0
|
||||
@@ -4800,7 +4800,7 @@ _08054E0C:
|
||||
adds r1, r5, 0
|
||||
mov r2, r8
|
||||
mov r3, r9
|
||||
bl TrapperOrbAction
|
||||
bl SpikesMoveAction
|
||||
b _080554BA
|
||||
_08054E1A:
|
||||
adds r0, r7, 0
|
||||
@@ -5094,7 +5094,7 @@ _08055058:
|
||||
adds r1, r5, 0
|
||||
mov r2, r8
|
||||
mov r3, r9
|
||||
bl sub_805BEAC
|
||||
bl PetrifyOrbAction
|
||||
b _080554BA
|
||||
_08055066:
|
||||
adds r0, r7, 0
|
||||
@@ -5264,7 +5264,7 @@ _080551AC:
|
||||
adds r1, r5, 0
|
||||
mov r2, r8
|
||||
mov r3, r9
|
||||
bl sub_805C128
|
||||
bl InvisifyOrbAction
|
||||
b _080554BA
|
||||
_080551BA:
|
||||
adds r0, r7, 0
|
||||
|
||||
@@ -1135,7 +1135,7 @@ _0805E1BA:
|
||||
bne _0805E1E0
|
||||
_0805E1C6:
|
||||
mov r0, r10
|
||||
bl sub_8067510
|
||||
bl HandleTalkFieldAction
|
||||
bl sub_8044B28
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
@@ -3208,12 +3208,12 @@ _0805F20C: .4byte 0x00000137
|
||||
_0805F210:
|
||||
bl GetLeader
|
||||
movs r1, 0x1
|
||||
bl sub_806675C
|
||||
bl HandleSetItemAction
|
||||
b _0805F226
|
||||
_0805F21C:
|
||||
bl GetLeader
|
||||
movs r1, 0x1
|
||||
bl sub_806684C
|
||||
bl HandleUnsetItemAction
|
||||
_0805F226:
|
||||
movs r0, 0x1
|
||||
bl sub_8044C10
|
||||
|
||||
@@ -851,8 +851,8 @@ _08067508: .4byte gDungeon
|
||||
_0806750C: .4byte 0x00003a08
|
||||
thumb_func_end sub_80671A0
|
||||
|
||||
thumb_func_start sub_8067510
|
||||
sub_8067510:
|
||||
thumb_func_start HandleTalkFieldAction
|
||||
HandleTalkFieldAction:
|
||||
push {r4,lr}
|
||||
adds r4, r0, 0
|
||||
bl sub_806773C
|
||||
@@ -864,7 +864,7 @@ sub_8067510:
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_8067510
|
||||
thumb_func_end HandleTalkFieldAction
|
||||
|
||||
thumb_func_start sub_806752C
|
||||
sub_806752C:
|
||||
@@ -1289,8 +1289,8 @@ _0806787C: .4byte gAvailablePokemonNames
|
||||
_08067880: .4byte 0x0000021d
|
||||
thumb_func_end sub_8067794
|
||||
|
||||
thumb_func_start sub_8067884
|
||||
sub_8067884:
|
||||
thumb_func_start HandleUseMovePlayerAction
|
||||
HandleUseMovePlayerAction:
|
||||
push {r4-r6,lr}
|
||||
sub sp, 0x4
|
||||
adds r5, r0, 0
|
||||
@@ -1351,7 +1351,7 @@ _080678F6:
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08067900: .4byte 0x00000159
|
||||
thumb_func_end sub_8067884
|
||||
thumb_func_end HandleUseMovePlayerAction
|
||||
|
||||
thumb_func_start sub_8067904
|
||||
sub_8067904:
|
||||
|
||||
1236
asm/code_807FCD4.s
1236
asm/code_807FCD4.s
File diff suppressed because it is too large
Load Diff
@@ -1,83 +0,0 @@
|
||||
#include "asm/constants/gba_constants.inc"
|
||||
#include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_8083568
|
||||
sub_8083568:
|
||||
push {r4,r5,lr}
|
||||
lsls r2, 24
|
||||
lsrs r5, r2, 24
|
||||
ldr r2, _080835E0
|
||||
ldr r2, [r2]
|
||||
ldr r4, _080835E4
|
||||
adds r3, r2, r4
|
||||
movs r4, 0
|
||||
ldrsh r3, [r3, r4]
|
||||
subs r3, r0, r3
|
||||
ldr r0, _080835E8
|
||||
adds r2, r0
|
||||
movs r4, 0
|
||||
ldrsh r0, [r2, r4]
|
||||
subs r4, r1, r0
|
||||
movs r0, 0x10
|
||||
negs r0, r0
|
||||
cmp r3, r0
|
||||
blt _080835F8
|
||||
cmp r4, r0
|
||||
blt _080835F8
|
||||
cmp r3, 0xFF
|
||||
bgt _080835F8
|
||||
cmp r4, 0xAF
|
||||
bgt _080835F8
|
||||
ldr r1, _080835EC
|
||||
lsls r0, r5, 1
|
||||
adds r0, r5
|
||||
lsls r0, 2
|
||||
adds r0, r1
|
||||
movs r1, 0x8
|
||||
ldrsh r2, [r0, r1]
|
||||
adds r2, r3, r2
|
||||
ldr r1, _080835F0
|
||||
ands r2, r1
|
||||
ldrh r3, [r0, 0x2]
|
||||
movs r1, 0xFE
|
||||
lsls r1, 8
|
||||
ands r1, r3
|
||||
orrs r1, r2
|
||||
strh r1, [r0, 0x2]
|
||||
movs r1, 0xA
|
||||
ldrsh r2, [r0, r1]
|
||||
adds r2, r4, r2
|
||||
ldr r1, _080835F4
|
||||
ands r2, r1
|
||||
lsls r2, 4
|
||||
ldrh r3, [r0, 0x6]
|
||||
movs r1, 0xF
|
||||
ands r1, r3
|
||||
orrs r1, r2
|
||||
strh r1, [r0, 0x6]
|
||||
movs r1, 0
|
||||
movs r2, 0
|
||||
movs r3, 0
|
||||
bl AddSprite
|
||||
movs r0, 0x1
|
||||
b _080835FA
|
||||
.align 2, 0
|
||||
_080835E0: .4byte gDungeon
|
||||
_080835E4: .4byte 0x000181f0
|
||||
_080835E8: .4byte 0x000181f2
|
||||
_080835EC: .4byte gUnknown_202ED28
|
||||
_080835F0: .4byte 0x000001ff
|
||||
_080835F4: .4byte 0x00000fff
|
||||
_080835F8:
|
||||
movs r0, 0
|
||||
_080835FA:
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8083568
|
||||
|
||||
.align 2, 0
|
||||
5427
asm/code_8098BDC.s
5427
asm/code_8098BDC.s
File diff suppressed because it is too large
Load Diff
3693
asm/code_809A560.s
Normal file
3693
asm/code_809A560.s
Normal file
File diff suppressed because it is too large
Load Diff
589
asm/code_809C5C4.s
Normal file
589
asm/code_809C5C4.s
Normal file
@@ -0,0 +1,589 @@
|
||||
#include "asm/constants/gba_constants.inc"
|
||||
#include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_809CBBC
|
||||
sub_809CBBC:
|
||||
push {r4-r7,lr}
|
||||
sub sp, 0x54
|
||||
adds r4, r0, 0
|
||||
adds r6, r1, 0
|
||||
adds r5, r2, 0
|
||||
adds r7, r3, 0
|
||||
ldrb r1, [r4]
|
||||
cmp r1, 0x69
|
||||
bne _0809CC20
|
||||
ldr r1, _0809CC0C
|
||||
movs r0, 0x2
|
||||
ldrsh r2, [r4, r0]
|
||||
ldr r0, _0809CC10
|
||||
ldr r0, [r0]
|
||||
movs r3, 0xD2
|
||||
lsls r3, 4
|
||||
adds r0, r3
|
||||
ldr r3, [r0]
|
||||
mov r0, sp
|
||||
bl sprintfStatic
|
||||
ldr r0, _0809CC14
|
||||
ldr r0, [r0]
|
||||
movs r1, 0x98
|
||||
lsls r1, 2
|
||||
adds r2, r0, r1
|
||||
movs r3, 0x2
|
||||
ldrsh r1, [r4, r3]
|
||||
ldr r0, [r2]
|
||||
adds r1, r0, r1
|
||||
ldr r0, _0809CC18
|
||||
cmp r1, r0
|
||||
ble _0809CC1C
|
||||
cmp r6, 0
|
||||
beq _0809CC4E
|
||||
movs r1, 0x1
|
||||
negs r1, r1
|
||||
movs r0, 0
|
||||
adds r2, r6, 0
|
||||
b _0809CC4A
|
||||
.align 2, 0
|
||||
_0809CC0C: .4byte gUnknown_81163E4
|
||||
_0809CC10: .4byte gItemParametersData
|
||||
_0809CC14: .4byte gTeamInventoryRef
|
||||
_0809CC18: .4byte 0x0001869f
|
||||
_0809CC1C:
|
||||
str r1, [r2]
|
||||
b _0809CC5E
|
||||
_0809CC20:
|
||||
ldrb r0, [r4, 0x2]
|
||||
lsls r1, 16
|
||||
lsls r0, 8
|
||||
orrs r0, r1
|
||||
str r0, [sp, 0x50]
|
||||
add r4, sp, 0x50
|
||||
mov r0, sp
|
||||
adds r1, r4, 0
|
||||
movs r2, 0
|
||||
bl sub_8090E14
|
||||
bl GetNumberOfFilledInventorySlots
|
||||
cmp r0, 0x13
|
||||
ble _0809CC52
|
||||
cmp r5, 0
|
||||
beq _0809CC4E
|
||||
movs r1, 0x1
|
||||
negs r1, r1
|
||||
movs r0, 0
|
||||
adds r2, r5, 0
|
||||
_0809CC4A:
|
||||
bl sub_809AE90
|
||||
_0809CC4E:
|
||||
movs r0, 0
|
||||
b _0809CC82
|
||||
_0809CC52:
|
||||
ldrb r0, [r4, 0x2]
|
||||
movs r1, 0
|
||||
bl sub_809124C
|
||||
bl FillInventoryGaps
|
||||
_0809CC5E:
|
||||
cmp r7, 0
|
||||
beq _0809CC80
|
||||
ldr r0, _0809CC8C
|
||||
mov r1, sp
|
||||
bl strcpy
|
||||
movs r1, 0x1
|
||||
negs r1, r1
|
||||
movs r0, 0
|
||||
adds r2, r7, 0
|
||||
bl sub_809AE90
|
||||
movs r1, 0x80
|
||||
lsls r1, 1
|
||||
movs r0, 0xCB
|
||||
bl xxx_call_play_fanfare_se
|
||||
_0809CC80:
|
||||
movs r0, 0x1
|
||||
_0809CC82:
|
||||
add sp, 0x54
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0809CC8C: .4byte gUnknown_202DE58
|
||||
thumb_func_end sub_809CBBC
|
||||
|
||||
thumb_func_start sub_809CC90
|
||||
sub_809CC90:
|
||||
push {lr}
|
||||
lsls r0, 2
|
||||
ldr r1, _0809CCBC
|
||||
adds r1, r0, r1
|
||||
ldrb r0, [r1]
|
||||
cmp r0, 0x69
|
||||
bne _0809CCC8
|
||||
ldr r0, _0809CCC0
|
||||
ldr r0, [r0]
|
||||
movs r2, 0x98
|
||||
lsls r2, 2
|
||||
adds r0, r2
|
||||
movs r2, 0x2
|
||||
ldrsh r1, [r1, r2]
|
||||
ldr r0, [r0]
|
||||
adds r0, r1
|
||||
ldr r1, _0809CCC4
|
||||
cmp r0, r1
|
||||
ble _0809CCD4
|
||||
movs r0, 0x2
|
||||
b _0809CCD6
|
||||
.align 2, 0
|
||||
_0809CCBC: .4byte gUnknown_81163BC
|
||||
_0809CCC0: .4byte gTeamInventoryRef
|
||||
_0809CCC4: .4byte 0x0001869f
|
||||
_0809CCC8:
|
||||
bl GetNumberOfFilledInventorySlots
|
||||
cmp r0, 0x13
|
||||
ble _0809CCD4
|
||||
movs r0, 0x2
|
||||
b _0809CCD6
|
||||
_0809CCD4:
|
||||
movs r0, 0x1
|
||||
_0809CCD6:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_809CC90
|
||||
|
||||
thumb_func_start sub_809CCDC
|
||||
sub_809CCDC:
|
||||
push {r4-r6,lr}
|
||||
adds r6, r0, 0
|
||||
adds r4, r1, 0
|
||||
lsls r1, r6, 2
|
||||
ldr r0, _0809CD20
|
||||
adds r5, r1, r0
|
||||
ldr r0, _0809CD24
|
||||
ldr r1, [r0]
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
str r0, [r1, 0x4]
|
||||
movs r0, 0
|
||||
str r0, [r1, 0x8]
|
||||
movs r0, 0x2
|
||||
cmp r4, 0x63
|
||||
bgt _0809CD04
|
||||
movs r0, 0
|
||||
cmp r4, 0x1
|
||||
ble _0809CD04
|
||||
movs r0, 0x1
|
||||
_0809CD04:
|
||||
ldr r1, _0809CD28
|
||||
ldr r2, _0809CD2C
|
||||
ldr r3, _0809CD30
|
||||
lsls r0, 2
|
||||
adds r0, r3
|
||||
ldr r3, [r0]
|
||||
adds r0, r5, 0
|
||||
bl sub_809CBBC
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0809CD34
|
||||
movs r0, 0x2
|
||||
b _0809CD3E
|
||||
.align 2, 0
|
||||
_0809CD20: .4byte gUnknown_81163BC
|
||||
_0809CD24: .4byte gUnknown_20399E0
|
||||
_0809CD28: .4byte gUnknown_81163F0
|
||||
_0809CD2C: .4byte gUnknown_811642C
|
||||
_0809CD30: .4byte gUnknown_203B4A0
|
||||
_0809CD34:
|
||||
ldr r0, _0809CD44
|
||||
ldr r0, [r0]
|
||||
str r6, [r0, 0x4]
|
||||
str r4, [r0, 0x8]
|
||||
movs r0, 0x1
|
||||
_0809CD3E:
|
||||
pop {r4-r6}
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0809CD44: .4byte gUnknown_20399E0
|
||||
thumb_func_end sub_809CCDC
|
||||
|
||||
thumb_func_start sub_809CD48
|
||||
sub_809CD48:
|
||||
push {lr}
|
||||
bl sub_809A750
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0809CD58
|
||||
movs r0, 0x3
|
||||
b _0809CD5A
|
||||
_0809CD58:
|
||||
movs r0, 0
|
||||
_0809CD5A:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_809CD48
|
||||
|
||||
thumb_func_start nullsub_117
|
||||
nullsub_117:
|
||||
bx lr
|
||||
thumb_func_end nullsub_117
|
||||
|
||||
thumb_func_start nullsub_118
|
||||
nullsub_118:
|
||||
bx lr
|
||||
thumb_func_end nullsub_118
|
||||
|
||||
thumb_func_start sub_809CD68
|
||||
sub_809CD68:
|
||||
movs r2, 0
|
||||
str r2, [r0]
|
||||
str r2, [r0, 0x4]
|
||||
movs r1, 0x1
|
||||
negs r1, r1
|
||||
str r1, [r0, 0x10]
|
||||
str r2, [r0, 0x14]
|
||||
str r2, [r0, 0x8]
|
||||
strb r2, [r0, 0x18]
|
||||
bx lr
|
||||
thumb_func_end sub_809CD68
|
||||
|
||||
thumb_func_start sub_809CD7C
|
||||
sub_809CD7C:
|
||||
movs r2, 0
|
||||
str r2, [r0]
|
||||
movs r1, 0x1
|
||||
negs r1, r1
|
||||
str r1, [r0, 0x10]
|
||||
str r2, [r0, 0x14]
|
||||
str r2, [r0, 0x8]
|
||||
bx lr
|
||||
thumb_func_end sub_809CD7C
|
||||
|
||||
thumb_func_start sub_809CD8C
|
||||
sub_809CD8C:
|
||||
push {r4,r5,lr}
|
||||
adds r5, r0, 0
|
||||
adds r4, r1, 0
|
||||
cmp r4, 0x5
|
||||
bne _0809CD9E
|
||||
bl sub_809CD68
|
||||
str r4, [r5]
|
||||
b _0809CDB0
|
||||
_0809CD9E:
|
||||
ldr r0, [r5, 0x4]
|
||||
cmp r0, r4
|
||||
beq _0809CDB0
|
||||
str r4, [r5, 0x4]
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
str r0, [r5, 0x10]
|
||||
movs r0, 0
|
||||
str r0, [r5, 0x14]
|
||||
_0809CDB0:
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_809CD8C
|
||||
|
||||
thumb_func_start sub_809CDB8
|
||||
sub_809CDB8:
|
||||
push {lr}
|
||||
adds r1, r0, 0
|
||||
ldr r0, [r1, 0x4]
|
||||
cmp r0, 0
|
||||
bne _0809CDC4
|
||||
ldr r0, [r1]
|
||||
_0809CDC4:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_809CDB8
|
||||
|
||||
thumb_func_start sub_809CDC8
|
||||
sub_809CDC8:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
sub sp, 0x8
|
||||
adds r4, r0, 0
|
||||
adds r6, r1, 0
|
||||
adds r7, r2, 0
|
||||
ldr r1, [sp, 0x24]
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
str r0, [r3]
|
||||
ldr r0, [r4]
|
||||
cmp r0, 0x1
|
||||
beq _0809CDEA
|
||||
cmp r0, 0x2
|
||||
beq _0809CDFE
|
||||
b _0809CE12
|
||||
_0809CDEA:
|
||||
movs r0, 0x80
|
||||
lsls r0, 6
|
||||
ands r1, r0
|
||||
cmp r1, 0
|
||||
beq _0809CE12
|
||||
adds r0, r4, 0
|
||||
bl sub_809CD68
|
||||
movs r0, 0x2
|
||||
b _0809CE10
|
||||
_0809CDFE:
|
||||
movs r0, 0x80
|
||||
lsls r0, 6
|
||||
ands r1, r0
|
||||
cmp r1, 0
|
||||
bne _0809CE12
|
||||
adds r0, r4, 0
|
||||
bl sub_809CD68
|
||||
movs r0, 0x1
|
||||
_0809CE10:
|
||||
str r0, [r4]
|
||||
_0809CE12:
|
||||
ldr r0, [r4, 0x4]
|
||||
mov r8, r0
|
||||
cmp r0, 0
|
||||
bne _0809CE1E
|
||||
ldr r1, [r4]
|
||||
mov r8, r1
|
||||
_0809CE1E:
|
||||
mov r0, r8
|
||||
subs r0, 0x1
|
||||
cmp r0, 0x6
|
||||
bls _0809CE28
|
||||
b _0809CFCC
|
||||
_0809CE28:
|
||||
lsls r0, 2
|
||||
ldr r1, _0809CE34
|
||||
adds r0, r1
|
||||
ldr r0, [r0]
|
||||
mov pc, r0
|
||||
.align 2, 0
|
||||
_0809CE34: .4byte _0809CE38
|
||||
.align 2, 0
|
||||
_0809CE38:
|
||||
.4byte _0809CE54
|
||||
.4byte _0809CF74
|
||||
.4byte _0809CFCC
|
||||
.4byte _0809CFCC
|
||||
.4byte _0809CECC
|
||||
.4byte _0809CF5C
|
||||
.4byte _0809CF5C
|
||||
_0809CE54:
|
||||
ldr r0, _0809CE70
|
||||
ldrh r2, [r0]
|
||||
ldrh r1, [r0, 0x2]
|
||||
movs r0, 0xF0
|
||||
ands r0, r2
|
||||
cmp r0, 0
|
||||
beq _0809CE74
|
||||
movs r0, 0x2
|
||||
ands r0, r2
|
||||
cmp r0, 0
|
||||
beq _0809CEA4
|
||||
movs r0, 0
|
||||
b _0809CEA8
|
||||
.align 2, 0
|
||||
_0809CE70: .4byte gRealInputs
|
||||
_0809CE74:
|
||||
movs r3, 0x2
|
||||
adds r0, r1, 0
|
||||
ands r0, r3
|
||||
cmp r0, 0
|
||||
beq _0809CE82
|
||||
movs r0, 0x14
|
||||
b _0809CEA8
|
||||
_0809CE82:
|
||||
ldr r0, [r4, 0x10]
|
||||
cmp r0, 0x1
|
||||
ble _0809CEA4
|
||||
subs r0, 0x1
|
||||
str r0, [r4, 0x10]
|
||||
adds r0, r2, 0
|
||||
ands r0, r3
|
||||
cmp r0, 0
|
||||
bne _0809CEAA
|
||||
movs r0, 0x13
|
||||
str r0, [r6]
|
||||
movs r1, 0x1
|
||||
negs r1, r1
|
||||
adds r0, r1, 0
|
||||
strb r0, [r7]
|
||||
movs r0, 0x5
|
||||
b _0809CFDA
|
||||
_0809CEA4:
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
_0809CEA8:
|
||||
str r0, [r4, 0x10]
|
||||
_0809CEAA:
|
||||
movs r0, 0x1
|
||||
ands r1, r0
|
||||
cmp r1, 0
|
||||
beq _0809CEB6
|
||||
movs r0, 0xA
|
||||
b _0809CEC2
|
||||
_0809CEB6:
|
||||
ldr r0, [r4, 0x10]
|
||||
cmp r0, 0
|
||||
bne _0809CEC0
|
||||
movs r0, 0x8
|
||||
b _0809CEC2
|
||||
_0809CEC0:
|
||||
movs r0, 0x7
|
||||
_0809CEC2:
|
||||
str r0, [r6]
|
||||
adds r0, r2, 0
|
||||
bl sub_809CFE8
|
||||
b _0809CF4E
|
||||
_0809CECC:
|
||||
mov r0, sp
|
||||
bl sub_809B260
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0809CFCC
|
||||
ldr r0, _0809CEEC
|
||||
ldr r0, [r0]
|
||||
ldrb r0, [r0, 0xC]
|
||||
cmp r0, 0
|
||||
bne _0809CEF0
|
||||
movs r0, 0x4
|
||||
bl sub_809C6CC
|
||||
b _0809CEF6
|
||||
.align 2, 0
|
||||
_0809CEEC: .4byte gGameOptionsRef
|
||||
_0809CEF0:
|
||||
movs r0, 0x3
|
||||
bl sub_809C6CC
|
||||
_0809CEF6:
|
||||
bl nullsub_104
|
||||
adds r0, r4, 0
|
||||
bl sub_809CD7C
|
||||
movs r5, 0x1
|
||||
str r5, [r4]
|
||||
ldr r0, [sp]
|
||||
cmp r0, 0x2
|
||||
beq _0809CF1E
|
||||
cmp r0, 0x2
|
||||
bgt _0809CF14
|
||||
cmp r0, 0x1
|
||||
beq _0809CF2A
|
||||
b _0809CF54
|
||||
_0809CF14:
|
||||
cmp r0, 0x3
|
||||
beq _0809CF2A
|
||||
cmp r0, 0x4
|
||||
beq _0809CF3C
|
||||
b _0809CF54
|
||||
_0809CF1E:
|
||||
movs r0, 0x4
|
||||
str r0, [r4]
|
||||
movs r0, 0x1E
|
||||
bl sub_8098D80
|
||||
b _0809CF46
|
||||
_0809CF2A:
|
||||
movs r0, 0x4
|
||||
str r0, [r4]
|
||||
str r5, [r6]
|
||||
movs r1, 0x1
|
||||
negs r1, r1
|
||||
adds r0, r1, 0
|
||||
strb r0, [r7]
|
||||
movs r0, 0x4
|
||||
b _0809CFDA
|
||||
_0809CF3C:
|
||||
str r0, [r4]
|
||||
movs r0, 0x45
|
||||
movs r1, 0
|
||||
bl GroundMap_ExecuteEvent
|
||||
_0809CF46:
|
||||
str r5, [r6]
|
||||
movs r1, 0x1
|
||||
negs r1, r1
|
||||
adds r0, r1, 0
|
||||
_0809CF4E:
|
||||
strb r0, [r7]
|
||||
ldr r0, [r4]
|
||||
b _0809CFDA
|
||||
_0809CF54:
|
||||
movs r0, 0x2
|
||||
bl sub_809D9B8
|
||||
b _0809CFCC
|
||||
_0809CF5C:
|
||||
add r0, sp, 0x4
|
||||
bl sub_809B260
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0809CFCC
|
||||
adds r0, r4, 0
|
||||
bl sub_809CD7C
|
||||
movs r0, 0x1
|
||||
str r0, [r4]
|
||||
b _0809CFDA
|
||||
_0809CF74:
|
||||
ldr r0, [r4, 0x8]
|
||||
cmp r0, 0
|
||||
ble _0809CF86
|
||||
subs r0, 0x1
|
||||
str r0, [r4, 0x8]
|
||||
movs r0, 0x9
|
||||
str r0, [r6]
|
||||
ldrb r0, [r4, 0xC]
|
||||
b _0809CFD6
|
||||
_0809CF86:
|
||||
ldr r0, _0809CFA0
|
||||
ldrh r1, [r0]
|
||||
movs r0, 0x9
|
||||
str r0, [r6]
|
||||
movs r0, 0x40
|
||||
ands r0, r1
|
||||
lsls r0, 16
|
||||
lsrs r2, r0, 16
|
||||
cmp r2, 0
|
||||
beq _0809CFA4
|
||||
movs r0, 0x4
|
||||
b _0809CFB6
|
||||
.align 2, 0
|
||||
_0809CFA0: .4byte gRealInputs
|
||||
_0809CFA4:
|
||||
movs r0, 0x80
|
||||
ands r1, r0
|
||||
cmp r1, 0
|
||||
beq _0809CFB0
|
||||
strb r2, [r7]
|
||||
b _0809CFB8
|
||||
_0809CFB0:
|
||||
movs r1, 0x1
|
||||
negs r1, r1
|
||||
adds r0, r1, 0
|
||||
_0809CFB6:
|
||||
strb r0, [r7]
|
||||
_0809CFB8:
|
||||
ldrb r0, [r7]
|
||||
strb r0, [r4, 0xC]
|
||||
lsls r0, 24
|
||||
movs r1, 0xFF
|
||||
lsls r1, 24
|
||||
cmp r0, r1
|
||||
beq _0809CFD8
|
||||
movs r0, 0x20
|
||||
str r0, [r4, 0x8]
|
||||
b _0809CFD8
|
||||
_0809CFCC:
|
||||
movs r0, 0
|
||||
str r0, [r6]
|
||||
movs r1, 0x1
|
||||
negs r1, r1
|
||||
adds r0, r1, 0
|
||||
_0809CFD6:
|
||||
strb r0, [r7]
|
||||
_0809CFD8:
|
||||
mov r0, r8
|
||||
_0809CFDA:
|
||||
add sp, 0x8
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_809CDC8
|
||||
|
||||
.align 2,0
|
||||
@@ -22,7 +22,8 @@ enum TrapID
|
||||
TRAP_CHESTNUT_TRAP,
|
||||
TRAP_WONDER_TILE,
|
||||
TRAP_POKEMON_TRAP,
|
||||
TRAP_SPIKE_TRAP
|
||||
TRAP_SPIKE_TRAP,
|
||||
NUM_TRAPS
|
||||
};
|
||||
|
||||
#endif // GUARD_CONSTANTS_TRAP_H
|
||||
#endif // GUARD_CONSTANTS_TRAP_H
|
||||
|
||||
@@ -4,13 +4,15 @@
|
||||
#include "constants/direction.h"
|
||||
#include "structs/dungeon_entity.h"
|
||||
#include "structs/str_position.h"
|
||||
#include "structs/str_traps.h"
|
||||
|
||||
extern const Position gAdjacentTileOffsets[NUM_DIRECTIONS];
|
||||
|
||||
bool8 EntityExists(Entity *pokemon);
|
||||
u32 GetEntityType(Entity *entity);
|
||||
u8 GetEntityRoom(Entity *entity);
|
||||
EntityInfo *GetTrapData(Entity *entity);
|
||||
Trap *GetTrapData(Entity *entity);
|
||||
Trap* GetTrapData_1(Entity *entity);
|
||||
Item *GetItemData(Entity *entity);
|
||||
struct Tile *GetTileAtEntitySafe(Entity *entity);
|
||||
Item *GetItemData_1(Entity *entity);
|
||||
|
||||
@@ -59,6 +59,7 @@ bool8 AddKecleonWareItem(u8 itemIndex);
|
||||
void FillInventoryGaps();
|
||||
bool8 AddHeldItemToInventory(BulkItem* slot);
|
||||
bool8 IsNotMoneyOrUsedTMItem(u8 id);
|
||||
bool8 IsNotSpecialItem(u8 id);
|
||||
s32 FindItemInInventory(u8 id);
|
||||
bool8 IsHMItem(u8 id);
|
||||
bool8 IsEdibleItem(u8 id);
|
||||
@@ -82,4 +83,4 @@ s32 SaveTeamInventory(u8 *, u32 size);
|
||||
s32 sub_8090FEC(s32, u8 *strbuf, u8);
|
||||
u32 sub_80913E0(Item *slot, u32, struct subStruct_203B240 **);
|
||||
|
||||
#endif // GUARD_ITEMS_H
|
||||
#endif // GUARD_ITEMS_H
|
||||
|
||||
@@ -28,7 +28,7 @@ bool8 RadarOrbAction(Entity *pokemon, Entity *target);
|
||||
bool8 TransferOrbAction(Entity *pokemon,Entity *target);
|
||||
bool8 sub_805BE90(Entity *pokemon, Entity *target);
|
||||
bool8 LuminousOrbAction(Entity *pokemon,Entity *target);
|
||||
bool8 sub_805BEAC(Entity *pokemon, Entity *target);
|
||||
bool8 PetrifyOrbAction(Entity *pokemon, Entity *target);
|
||||
bool8 sub_805BEB8(Entity *pokemon, Entity *target);
|
||||
bool8 sub_805BEC8(Entity *pokemon, Entity *target);
|
||||
bool8 EscapeOrbAction(Entity *pokemon,Entity *target);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include "structs/dungeon_entity.h"
|
||||
#include "structs/str_position.h"
|
||||
|
||||
#define MAX_ROOM_COUNT 24 // Empirical max, not sure if the code supports any more.
|
||||
#define MAX_ROOM_COUNT 32 // Empirical max, not sure if the code supports any more.
|
||||
#define CORRIDOR_ROOM 0xFF
|
||||
|
||||
enum TerrainType
|
||||
@@ -42,7 +42,7 @@ typedef struct Tile
|
||||
// Bitwise flags for whether Pokémon can move to an adjacent tile. Bits correspond to directions in direction.h.
|
||||
// Different sets of flags are used for Pokémon that can cross special terrain, corresponding to the CrossableTerrain enum.
|
||||
/* 0xA */ u8 walkableNeighborFlags[NUM_CROSSABLE_TERRAIN];
|
||||
u8 fillE[0x10 - 0xE];
|
||||
u8 unkE;
|
||||
/* 0x10 */ Entity *monster; // Pokémon on the tile.
|
||||
/* 0x14 */ Entity *object; // Item or trap on the tile.
|
||||
} Tile;
|
||||
@@ -65,4 +65,4 @@ typedef struct RoomData
|
||||
u32 unk18; // top left y
|
||||
} RoomData;
|
||||
|
||||
#endif // GUARD_MAP_H
|
||||
#endif // GUARD_MAP_H
|
||||
|
||||
@@ -119,7 +119,9 @@ typedef struct Dungeon
|
||||
u8 unk678;
|
||||
u8 unk679;
|
||||
u8 unk67A;
|
||||
u8 unk67B[0x688 - 0x67B];
|
||||
u8 unk67B[0x684 - 0x67B];
|
||||
s16 unk684;
|
||||
s16 unk686;
|
||||
s16 unk688;
|
||||
/* 0x68A */ u8 unk68A;
|
||||
u8 fill68B[0x699 - 0x68B];
|
||||
@@ -150,7 +152,9 @@ typedef struct Dungeon
|
||||
u8 fill3A10[0x3A14 - 0x3A12];
|
||||
/* 0x3A14 */ s16 bossBattleIndex;
|
||||
/* 0x3A18 */ Tile tiles[DUNGEON_MAX_SIZE_Y][DUNGEON_MAX_SIZE_X];
|
||||
u8 fillE218[0xE220 - 0xE218];
|
||||
u8 fillE218[0xE21C - 0xE218];
|
||||
u16 unkE21C;
|
||||
u16 unkE21E;
|
||||
Position unkE220[4];
|
||||
u8 unkE230[0xE23C - 0xE230];
|
||||
s16 unkE23C; // x coord of some kind
|
||||
@@ -169,15 +173,14 @@ typedef struct Dungeon
|
||||
/* 0xE277 */ u8 mudSportTurns;
|
||||
/* 0xE278 */ u8 waterSportTurns;
|
||||
/* 0xE279 */ bool8 nullifyWeather; // Air Lock and Cloud Nine toggle this to disable weather effects
|
||||
u8 fillE27A[0xE8C0 - 0xE27A];
|
||||
u8 fillE27A[0xE27C - 0xE27A];
|
||||
/* 0xE27C */ Tile unkE27C[8][8];
|
||||
/* 0xE87C */ u8 fillE87C[68];
|
||||
/* 0xE8C0 */ Tile *tilePointers[DUNGEON_MAX_SIZE_Y][DUNGEON_MAX_SIZE_X];
|
||||
u8 unk104C0;
|
||||
/* 0x104C4 */ RoomData roomData[MAX_ROOM_COUNT];
|
||||
u8 fill10764[0x10844 - 0x10764];
|
||||
/* 0x10844 */ s16 naturalJunctionListCounts[MAX_ROOM_COUNT];
|
||||
u8 fill10874[0x10884 - 0x10874];
|
||||
/* 0x10884 */ Position naturalJunctionList[MAX_ROOM_COUNT][32]; // Arrays of room exits for each room.
|
||||
u8 fill11444[0x11884 - 0x11484];
|
||||
/* 0x10884 */ Position naturalJunctionList[MAX_ROOM_COUNT][MAX_ROOM_COUNT]; // Arrays of room exits for each room.
|
||||
u8 unk11884[0x1194];
|
||||
u8 fill12A18[0x12C24 - 0x12A18];
|
||||
u8 unk12C24[0x930];
|
||||
@@ -186,9 +189,8 @@ typedef struct Dungeon
|
||||
u8 fill1356D[0x13570 - 0x1356D];
|
||||
/* 0x13570 */ u8 unk13570;
|
||||
u8 fill13571[0x13574 - 0x13571];
|
||||
/* 0x13574 */ u16 unk13574;
|
||||
/* 0x13576 */ u16 unk13576;
|
||||
/* 0x13578 */ u8 unk13578;
|
||||
/* 0x13574 */ Position trapPos;
|
||||
/* 0x13578 */ u8 trapID;
|
||||
/* 0x13579 */ u8 unk13579;
|
||||
u8 fill1357A[0x1357C - 0x1357A];
|
||||
/* 0x1357C */ Entity *teamPokemon[MAX_TEAM_MEMBERS];
|
||||
@@ -220,7 +222,10 @@ typedef struct Dungeon
|
||||
/* 0x18209 */ u8 visibilityRange; // Dungeon light level.
|
||||
/* 0x1820A */ bool8 blinded; // Blacks out the screen when the player has the Blinker status.
|
||||
u8 unk1820B;
|
||||
u32 unk1820C;
|
||||
u8 unk1820C;
|
||||
u8 unk1820D;
|
||||
u8 unk1820E;
|
||||
u8 unk1820F;
|
||||
/* 0x18210 */ bool8 hallucinating; // Displays Substitute and flower sprites when the player has the Cross-Eyed status.
|
||||
u8 fill18211[0x18217 - 0x18211];
|
||||
u8 unk18217;
|
||||
|
||||
12
include/structs/str_traps.h
Normal file
12
include/structs/str_traps.h
Normal file
@@ -0,0 +1,12 @@
|
||||
#ifndef GUARD_STR_TRAPS_H
|
||||
#define GUARD_STR_TRAPS_H
|
||||
|
||||
#include "constants/trap.h"
|
||||
|
||||
typedef struct Trap
|
||||
{
|
||||
/* 0x0 */ u8 id;
|
||||
/* 0x1 */ u8 unk1;
|
||||
} Trap;
|
||||
|
||||
#endif // GUARD_STR_TRAPS_H
|
||||
@@ -4,5 +4,7 @@
|
||||
#include "structs/str_position.h"
|
||||
|
||||
bool8 CanLayTrap(Position *pos);
|
||||
bool8 LayTrap(Position *pos, u8 trapID, u8 param_3);
|
||||
void GetTrapName(u8 *buffer, u8 trapIndex);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -217,6 +217,8 @@ SECTIONS {
|
||||
src/dungeon_map_access_1.o(.text);
|
||||
src/tile_types.o(.text);
|
||||
asm/code_804AFAC.o(.text);
|
||||
src/code_804AFAC.o(.text);
|
||||
asm/code_804FD30.o(.text);
|
||||
src/code_80521D0.o(.text);
|
||||
asm/code_80521D0.o(.text);
|
||||
src/charge_move.o(.text);
|
||||
@@ -272,7 +274,7 @@ SECTIONS {
|
||||
asm/code_807FCD4.o(.text);
|
||||
src/code_8083288.o(.text);
|
||||
src/dungeon_range.o(.text);
|
||||
asm/code_808333C.o(.text);
|
||||
src/code_808333C.o(.text);
|
||||
src/dungeon_leader.o(.text);
|
||||
asm/code_8083654.o(.text);
|
||||
src/dungeon_music.o(.text);
|
||||
@@ -327,6 +329,10 @@ SECTIONS {
|
||||
asm/code_8098468.o(.text);
|
||||
src/ground_main.o(.text);
|
||||
asm/code_8098BDC.o(.text);
|
||||
src/code_809A560.o(.text);
|
||||
asm/code_809A560.o(.text);
|
||||
src/code_809C5C4.o(.text);
|
||||
asm/code_809C5C4.o(.text);
|
||||
src/code_809D148.o(.text);
|
||||
asm/code_809D148.o(.text);
|
||||
src/ground_script.o(.text);
|
||||
|
||||
@@ -11,6 +11,21 @@ extern s32 gUnknown_202E73C;
|
||||
extern s32 gUnknown_202E740;
|
||||
|
||||
extern MenuItem gUnknown_80D485C[];
|
||||
extern MenuItem gUnknown_80D4880[];
|
||||
|
||||
extern UnkTextStruct2 gUnknown_80D47C8[4];
|
||||
|
||||
void sub_80140B4(UnkTextStruct2 *a0)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for(i = 0; i < 4; i++)
|
||||
{
|
||||
a0[i] = gUnknown_80D47C8[i];
|
||||
}
|
||||
}
|
||||
|
||||
// End of menu_input.c
|
||||
|
||||
void sub_80140DC(void)
|
||||
{
|
||||
@@ -84,3 +99,9 @@ void sub_80141E0(const u8 *text, OpenedFile **file, u16 param_3)
|
||||
{
|
||||
sub_8014248(text, 0, -1, gUnknown_80D485C, NULL, 3, 0, file, param_3 | 0x300);
|
||||
}
|
||||
|
||||
void sub_8014214(const u8 *text, OpenedFile **file, u16 param_3)
|
||||
{
|
||||
sub_8014248(text, 0, -1, gUnknown_80D4880, NULL, 3, 0, file, param_3 | 0x300);
|
||||
}
|
||||
|
||||
|
||||
@@ -6,15 +6,14 @@
|
||||
#include "dungeon_random.h"
|
||||
#include "items.h"
|
||||
#include "structs/map.h"
|
||||
#include "trap.h"
|
||||
|
||||
extern u8 *gUnknown_80FE6F4[];
|
||||
extern struct unkStruct_8090F58 gUnknown_80F699C;
|
||||
extern struct unkStruct_8090F58 gUnknown_80F69A8;
|
||||
extern struct unkStruct_8090F58 gUnknown_80F6990;
|
||||
|
||||
extern EntityInfo* GetTrapData_1(Entity *entity);
|
||||
extern void SetMessageArgument_2(u8 *, EntityInfo *, u32);
|
||||
extern void GetTrapName(u8 *, u8);
|
||||
extern bool8 IsNotSpecialItem(u8 id);
|
||||
void sub_8045BF8(u8 *, Item *);
|
||||
void sub_8046CE4(void *param_1,u32 param_2);
|
||||
@@ -76,7 +75,7 @@ void SetMessageArgument(char *buffer, Entity *entity, u32 param_3)
|
||||
sub_8045BF8(buffer, GetItemData_1(entity));
|
||||
break;
|
||||
case ENTITY_TRAP:
|
||||
GetTrapName(buffer, *((u8 *)GetTrapData_1(entity)));
|
||||
GetTrapName(buffer, GetTrapData_1(entity)->id);
|
||||
break;
|
||||
default:
|
||||
strcpy(buffer, *gUnknown_80FE6F4);
|
||||
|
||||
393
src/code_804AFAC.c
Normal file
393
src/code_804AFAC.c
Normal file
@@ -0,0 +1,393 @@
|
||||
#include "global.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "dungeon_random.h"
|
||||
#include "structs/str_dungeon.h"
|
||||
|
||||
void sub_804FBE8(void)
|
||||
{
|
||||
Tile *tile;
|
||||
int y;
|
||||
int x;
|
||||
|
||||
for(x = 0; x < DUNGEON_MAX_SIZE_X; x++)
|
||||
{
|
||||
for(y = 0; y < DUNGEON_MAX_SIZE_Y; y++)
|
||||
{
|
||||
tile = GetTileSafe(x,y);
|
||||
if ((tile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) != TERRAIN_TYPE_NORMAL) {
|
||||
if ((tile->terrainType & (TERRAIN_TYPE_UNK_8 | TERRAIN_TYPE_IMPASSABLE_WALL)) != 0) {
|
||||
tile->unk4 &= 0xfffd;
|
||||
}
|
||||
tile->unk4 &= 0xfffb;
|
||||
}
|
||||
if ((tile->unk4 & 1) != 0) {
|
||||
tile->terrainType |= TERRAIN_TYPE_STAIRS;
|
||||
tile->unk4 &= 0xfffb;
|
||||
}
|
||||
if ((tile->unk4 & 2) != 0) {
|
||||
tile->unk4 &= 0xfffb;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_804FC74(void)
|
||||
{
|
||||
Tile *tile;
|
||||
int y;
|
||||
int x;
|
||||
|
||||
for(x = 0; x < DUNGEON_MAX_SIZE_X; x++)
|
||||
{
|
||||
for(y = 0; y < DUNGEON_MAX_SIZE_Y; y++)
|
||||
{
|
||||
if ((GetTile(x, y)->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) == TERRAIN_TYPE_SECONDARY) {
|
||||
tile = GetTileSafe(x,y);
|
||||
tile->terrainType &= ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
|
||||
tile->terrainType |= (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_804FCCC(void)
|
||||
{
|
||||
Tile *tile;
|
||||
int y;
|
||||
int x;
|
||||
|
||||
for(x = 0; x < DUNGEON_MAX_SIZE_X; x++)
|
||||
{
|
||||
for(y = 0; y < DUNGEON_MAX_SIZE_Y; y++)
|
||||
{
|
||||
if ((GetTile(x, y)->terrainType & TERRAIN_TYPE_IMPASSABLE_WALL) != 0) {
|
||||
tile = GetTileSafe(x,y);
|
||||
tile->terrainType &= ~(TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_804FD10(Tile *tile)
|
||||
{
|
||||
tile->terrainType = 0;
|
||||
tile->unk4 = 0;
|
||||
tile->room = -1;
|
||||
tile->unk8 = 0;
|
||||
tile->walkableNeighborFlags[CROSSABLE_TERRAIN_REGULAR] = 0;
|
||||
tile->walkableNeighborFlags[CROSSABLE_TERRAIN_LIQUID] = 0;
|
||||
tile->walkableNeighborFlags[CROSSABLE_TERRAIN_CREVICE] = 0;
|
||||
tile->walkableNeighborFlags[CROSSABLE_TERRAIN_WALL] = 0;
|
||||
tile->unkE = 0;
|
||||
tile->monster = NULL;
|
||||
tile->object = NULL;
|
||||
}
|
||||
|
||||
bool8 static inline boundsCheck(s32 x, s32 y)
|
||||
{
|
||||
if ((((x < 0 || (y < 0)) || (DUNGEON_MAX_SIZE_X <= x)) || (DUNGEON_MAX_SIZE_Y <= y)))
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// https://decomp.me/scratch/w591w (98.17% matching - Seth)
|
||||
// r6 and r7 are swapped
|
||||
#ifdef NONMATCHING
|
||||
void sub_804FD30(void)
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
|
||||
for(x = 0; x < DUNGEON_MAX_SIZE_X; x++)
|
||||
{
|
||||
for(y = 0; y < DUNGEON_MAX_SIZE_Y; y++)
|
||||
{
|
||||
sub_804FD10(GetTileSafe(x,y));
|
||||
|
||||
if ((boundsCheck(x, y - 1)) ||
|
||||
(boundsCheck(x + 1, y - 1)) ||
|
||||
(boundsCheck(x + 1, y - 1)) ||
|
||||
(boundsCheck(x + 1, y + 1)) ||
|
||||
(boundsCheck(x, y + 1)) ||
|
||||
(boundsCheck(x - 1, y + 1)) ||
|
||||
(boundsCheck(x - 1, y)) ||
|
||||
(boundsCheck(x - 1, y - 1)))
|
||||
{
|
||||
GetTileSafe(x,y)->terrainType |= TERRAIN_TYPE_IMPASSABLE_WALL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gDungeon->unkE21C = -1;
|
||||
gDungeon->unkE21E = -1;
|
||||
|
||||
for(x = 0; x < 8; x++)
|
||||
{
|
||||
for(y = 0; y < 8; y++)
|
||||
{
|
||||
sub_804FD10(&gDungeon->unkE27C[x][y]);
|
||||
}
|
||||
}
|
||||
|
||||
gDungeon->unk3904 = 0;
|
||||
for(x = 0; x < 0x40; x++)
|
||||
{
|
||||
gDungeon->unk1371C[x]->type = 0;
|
||||
}
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
void sub_804FD30(void)
|
||||
{
|
||||
asm_unified(
|
||||
"\tpush {r4-r7,lr}\n"
|
||||
"\tmov r7, r8\n"
|
||||
"\tpush {r7}\n"
|
||||
"\tsub sp, 0x4\n"
|
||||
"\tmovs r6, 0\n"
|
||||
"_0804FD3A:\n"
|
||||
"\tmovs r7, 0\n"
|
||||
"\tadds r4, r6, 0x1\n"
|
||||
"_0804FD3E:\n"
|
||||
"\tadds r0, r6, 0\n"
|
||||
"\tadds r1, r7, 0\n"
|
||||
"\tbl GetTileSafe\n"
|
||||
"\tbl sub_804FD10\n"
|
||||
"\tsubs r3, r7, 0x1\n"
|
||||
"\tcmp r6, 0\n"
|
||||
"\tblt _0804FD5C\n"
|
||||
"\tcmp r3, 0\n"
|
||||
"\tblt _0804FD5C\n"
|
||||
"\tcmp r6, 0x37\n"
|
||||
"\tbgt _0804FD5C\n"
|
||||
"\tcmp r3, 0x1F\n"
|
||||
"\tble _0804FD60\n"
|
||||
"_0804FD5C:\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tb _0804FD62\n"
|
||||
"_0804FD60:\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"_0804FD62:\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _0804FE24\n"
|
||||
"\tcmp r4, 0\n"
|
||||
"\tblt _0804FD76\n"
|
||||
"\tcmp r3, 0\n"
|
||||
"\tblt _0804FD76\n"
|
||||
"\tcmp r4, 0x37\n"
|
||||
"\tbgt _0804FD76\n"
|
||||
"\tcmp r3, 0x1F\n"
|
||||
"\tble _0804FD7A\n"
|
||||
"_0804FD76:\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tb _0804FD7C\n"
|
||||
"_0804FD7A:\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"_0804FD7C:\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _0804FE24\n"
|
||||
"\tcmp r4, 0\n"
|
||||
"\tblt _0804FD90\n"
|
||||
"\tcmp r3, 0\n"
|
||||
"\tblt _0804FD90\n"
|
||||
"\tcmp r4, 0x37\n"
|
||||
"\tbgt _0804FD90\n"
|
||||
"\tcmp r3, 0x1F\n"
|
||||
"\tble _0804FD94\n"
|
||||
"_0804FD90:\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tb _0804FD96\n"
|
||||
"_0804FD94:\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"_0804FD96:\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _0804FE24\n"
|
||||
"\tadds r2, r7, 0x1\n"
|
||||
"\tcmp r4, 0\n"
|
||||
"\tblt _0804FDAC\n"
|
||||
"\tcmp r2, 0\n"
|
||||
"\tblt _0804FDAC\n"
|
||||
"\tcmp r4, 0x37\n"
|
||||
"\tbgt _0804FDAC\n"
|
||||
"\tcmp r2, 0x1F\n"
|
||||
"\tble _0804FDB0\n"
|
||||
"_0804FDAC:\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tb _0804FDB2\n"
|
||||
"_0804FDB0:\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"_0804FDB2:\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _0804FE24\n"
|
||||
"\tcmp r6, 0\n"
|
||||
"\tblt _0804FDC6\n"
|
||||
"\tcmp r2, 0\n"
|
||||
"\tblt _0804FDC6\n"
|
||||
"\tcmp r6, 0x37\n"
|
||||
"\tbgt _0804FDC6\n"
|
||||
"\tcmp r2, 0x1F\n"
|
||||
"\tble _0804FDCA\n"
|
||||
"_0804FDC6:\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tb _0804FDCC\n"
|
||||
"_0804FDCA:\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"_0804FDCC:\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _0804FE24\n"
|
||||
"\tadds r0, r2, 0\n"
|
||||
"\tsubs r1, r6, 0x1\n"
|
||||
"\tcmp r1, 0\n"
|
||||
"\tblt _0804FDE4\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tblt _0804FDE4\n"
|
||||
"\tcmp r1, 0x37\n"
|
||||
"\tbgt _0804FDE4\n"
|
||||
"\tcmp r2, 0x1F\n"
|
||||
"\tble _0804FDE8\n"
|
||||
"_0804FDE4:\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tb _0804FDEA\n"
|
||||
"_0804FDE8:\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"_0804FDEA:\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _0804FE24\n"
|
||||
"\tcmp r1, 0\n"
|
||||
"\tblt _0804FDFE\n"
|
||||
"\tcmp r7, 0\n"
|
||||
"\tblt _0804FDFE\n"
|
||||
"\tcmp r1, 0x37\n"
|
||||
"\tbgt _0804FDFE\n"
|
||||
"\tcmp r7, 0x1F\n"
|
||||
"\tble _0804FE02\n"
|
||||
"_0804FDFE:\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tb _0804FE04\n"
|
||||
"_0804FE02:\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"_0804FE04:\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _0804FE24\n"
|
||||
"\tadds r0, r3, 0\n"
|
||||
"\tcmp r1, 0\n"
|
||||
"\tblt _0804FE1A\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tblt _0804FE1A\n"
|
||||
"\tcmp r1, 0x37\n"
|
||||
"\tbgt _0804FE1A\n"
|
||||
"\tcmp r3, 0x1F\n"
|
||||
"\tble _0804FE1E\n"
|
||||
"_0804FE1A:\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tb _0804FE20\n"
|
||||
"_0804FE1E:\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"_0804FE20:\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _0804FE34\n"
|
||||
"_0804FE24:\n"
|
||||
"\tadds r0, r6, 0\n"
|
||||
"\tadds r1, r7, 0\n"
|
||||
"\tbl GetTileSafe\n"
|
||||
"\tldrh r2, [r0]\n"
|
||||
"\tmovs r1, 0x10\n"
|
||||
"\torrs r1, r2\n"
|
||||
"\tstrh r1, [r0]\n"
|
||||
"_0804FE34:\n"
|
||||
"\tadds r7, 0x1\n"
|
||||
"\tcmp r7, 0x1F\n"
|
||||
"\tble _0804FD3E\n"
|
||||
"\tadds r6, 0x1\n"
|
||||
"\tcmp r6, 0x37\n"
|
||||
"\tbgt _0804FE42\n"
|
||||
"\tb _0804FD3A\n"
|
||||
"_0804FE42:\n"
|
||||
"\tldr r3, _0804FEB4\n"
|
||||
"\tldr r1, [r3]\n"
|
||||
"\tldr r0, _0804FEB8\n"
|
||||
"\tadds r2, r1, r0\n"
|
||||
"\tldr r0, _0804FEBC\n"
|
||||
"\tstrh r0, [r2]\n"
|
||||
"\tldr r2, _0804FEC0\n"
|
||||
"\tadds r1, r2\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tnegs r0, r0\n"
|
||||
"\tstrh r0, [r1]\n"
|
||||
"\tmovs r6, 0\n"
|
||||
"\tmov r8, r3\n"
|
||||
"\tldr r1, _0804FEC4\n"
|
||||
"_0804FE5E:\n"
|
||||
"\tadds r5, r1, 0\n"
|
||||
"\tmovs r4, 0\n"
|
||||
"\tmovs r7, 0x7\n"
|
||||
"_0804FE64:\n"
|
||||
"\tmov r2, r8\n"
|
||||
"\tldr r0, [r2]\n"
|
||||
"\tadds r0, r5\n"
|
||||
"\tadds r0, r4\n"
|
||||
"\tstr r1, [sp]\n"
|
||||
"\tbl sub_804FD10\n"
|
||||
"\tadds r4, 0x18\n"
|
||||
"\tsubs r7, 0x1\n"
|
||||
"\tldr r1, [sp]\n"
|
||||
"\tcmp r7, 0\n"
|
||||
"\tbge _0804FE64\n"
|
||||
"\tadds r1, 0xC0\n"
|
||||
"\tadds r6, 0x1\n"
|
||||
"\tcmp r6, 0x7\n"
|
||||
"\tble _0804FE5E\n"
|
||||
"\tldr r0, _0804FEB4\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tldr r2, _0804FEC8\n"
|
||||
"\tadds r1, r2\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tstrh r2, [r1]\n"
|
||||
"\tmovs r6, 0\n"
|
||||
"\tadds r4, r0, 0\n"
|
||||
"\tldr r3, _0804FECC\n"
|
||||
"_0804FE96:\n"
|
||||
"\tldr r0, [r4]\n"
|
||||
"\tlsls r1, r6, 2\n"
|
||||
"\tadds r0, r3\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tldr r0, [r0]\n"
|
||||
"\tstr r2, [r0]\n"
|
||||
"\tadds r6, 0x1\n"
|
||||
"\tcmp r6, 0x3F\n"
|
||||
"\tble _0804FE96\n"
|
||||
"\tadd sp, 0x4\n"
|
||||
"\tpop {r3}\n"
|
||||
"\tmov r8, r3\n"
|
||||
"\tpop {r4-r7}\n"
|
||||
"\tpop {r0}\n"
|
||||
"\tbx r0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_0804FEB4: .4byte gDungeon\n"
|
||||
"_0804FEB8: .4byte 0x0000e21c\n"
|
||||
"_0804FEBC: .4byte 0x0000ffff\n"
|
||||
"_0804FEC0: .4byte 0x0000e21e\n"
|
||||
"_0804FEC4: .4byte 0x0000e27c\n"
|
||||
"_0804FEC8: .4byte 0x00003904\n"
|
||||
"_0804FECC: .4byte 0x0001371c\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
void sub_804FED0(s32 *param_1, s32 param_2)
|
||||
{
|
||||
int idx1;
|
||||
int idx2;
|
||||
s32 temp;
|
||||
int counter;
|
||||
|
||||
for (counter = 0; counter < param_2 << 1; counter++) {
|
||||
idx1 = DungeonRandInt(param_2);
|
||||
idx2 = DungeonRandInt(param_2);
|
||||
temp = param_1[idx1];
|
||||
param_1[idx1] = param_1[idx2];
|
||||
param_1[idx2] = temp;
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,7 @@ extern void sub_80526D0(u8 r0);
|
||||
extern u8 sub_8045888(Entity *r0);
|
||||
extern void sub_80523A8(Entity *r0, const char r1[], u8 r2);
|
||||
extern u8 sub_8052DC0(Entity *);
|
||||
extern u8 sub_803F428(u32);
|
||||
extern u8 sub_803F428(Position *);
|
||||
|
||||
void sub_805229C(void)
|
||||
{
|
||||
@@ -33,17 +33,13 @@ void sub_80522E8(Entity *r0, const char r1[])
|
||||
|
||||
void sub_80522F4(Entity *r0, Entity *r1, const char r2[])
|
||||
{
|
||||
u8 temp;
|
||||
u32 temp_reg;
|
||||
u32 temp2;
|
||||
temp = sub_8045888(r0);
|
||||
temp_reg = (-temp | temp);
|
||||
temp2 = temp_reg >> 31;
|
||||
u8 flag;
|
||||
flag = sub_8045888(r0) ? TRUE : FALSE;
|
||||
if(sub_8052DC0(r1) != 0)
|
||||
{
|
||||
temp2 = 1;
|
||||
flag = TRUE;
|
||||
}
|
||||
if(temp2 != 0)
|
||||
if(flag)
|
||||
{
|
||||
sub_80523A8(r0, r2, 1);
|
||||
}
|
||||
@@ -51,35 +47,27 @@ void sub_80522F4(Entity *r0, Entity *r1, const char r2[])
|
||||
|
||||
void sub_805232C(Entity *r0, Entity *r1, const char r2[])
|
||||
{
|
||||
u8 temp;
|
||||
u32 temp_reg;
|
||||
u32 temp2;
|
||||
temp = sub_8045888(r0);
|
||||
temp_reg = (-temp | temp);
|
||||
temp2 = temp_reg >> 31;
|
||||
u8 flag;
|
||||
flag = sub_8045888(r0) ? TRUE : FALSE;
|
||||
if(sub_8052DC0(r1) != 0)
|
||||
{
|
||||
temp2 = 1;
|
||||
flag = TRUE;
|
||||
}
|
||||
if(temp2 != 0)
|
||||
if(flag)
|
||||
{
|
||||
sub_80523A8(r0, r2, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8052364(Entity *r0, u32 r1, const char r2[])
|
||||
void sub_8052364(Entity *r0, Position *pos, const char r2[])
|
||||
{
|
||||
u8 temp;
|
||||
u32 temp_reg;
|
||||
u32 temp2;
|
||||
temp = sub_8045888(r0);
|
||||
temp_reg = (-temp | temp);
|
||||
temp2 = temp_reg >> 31;
|
||||
if(sub_803F428(r1) != 0)
|
||||
u8 flag;
|
||||
flag = sub_8045888(r0) ? TRUE : FALSE;
|
||||
if(sub_803F428(pos) != 0)
|
||||
{
|
||||
temp2 = 1;
|
||||
flag = TRUE;
|
||||
}
|
||||
if(temp2 != 0)
|
||||
if(flag)
|
||||
{
|
||||
sub_80523A8(r0, r2, 1);
|
||||
}
|
||||
|
||||
@@ -456,6 +456,9 @@ extern void sub_808BB3C(Position *);
|
||||
extern void sub_8046860(Entity *, Position *, Item *, u32);
|
||||
extern u32 sub_803D73C(u32);
|
||||
|
||||
extern void sub_80460F8(Position *, Item *, u8);
|
||||
extern void sub_807FE04(Position *, u8);
|
||||
|
||||
void ZapdosReFightDialogue(void)
|
||||
{
|
||||
Entity *LeaderEntity;
|
||||
@@ -3169,7 +3172,7 @@ void sub_808AE54(char param_1,char param_2,u32 *param_3)
|
||||
LeaderEntity = xxx_call_GetLeader();
|
||||
sub_8052D44(IDStack,LeaderEntity,0);
|
||||
if ((sub_8098100(0x22) == 0) && (param_2 == 0x2E) && (param_1 == 0x17)) {
|
||||
sub_808B1CC(0);
|
||||
sub_808B1CC(ITEM_NOTHING);
|
||||
if (sub_8098100(0x1d) == 0) {
|
||||
xxx_init_itemslot_8090A8C(&item,ITEM_ROCK_PART,0);
|
||||
sub_80464C8(GetLeader(),param_3,&item);
|
||||
@@ -3192,7 +3195,7 @@ void sub_808AEC8(char param_1,char param_2,u32 *param_3)
|
||||
LeaderEntity = xxx_call_GetLeader();
|
||||
sub_8052D44(IDStack,LeaderEntity,0);
|
||||
if ((sub_8098100(0x22) == 0) && (param_2 == 0x2F) && (param_1 == 0x18)) {
|
||||
sub_808B1CC(0);
|
||||
sub_808B1CC(ITEM_NOTHING);
|
||||
if (sub_8098100(0x1d) == 0) {
|
||||
xxx_init_itemslot_8090A8C(&item,ITEM_ICE_PART,0);
|
||||
sub_80464C8(GetLeader(),param_3,&item);
|
||||
@@ -3214,7 +3217,7 @@ void sub_808AF3C(char param_1,char param_2,u32 *param_3)
|
||||
LeaderEntity = xxx_call_GetLeader();
|
||||
sub_8052D44(IDStack,LeaderEntity,0);
|
||||
if ((sub_8098100(0x22) == 0) && (param_2 == 0x30) && (param_1 == 0x19)) {
|
||||
sub_808B1CC(0);
|
||||
sub_808B1CC(ITEM_NOTHING);
|
||||
if (sub_8098100(0x1d) == 0) {
|
||||
xxx_init_itemslot_8090A8C(&item,ITEM_STEEL_PART,0);
|
||||
sub_80464C8(GetLeader(),param_3, &item);
|
||||
@@ -3316,117 +3319,36 @@ void RegisteelPreFightDialogue(void)
|
||||
}
|
||||
}
|
||||
|
||||
NAKED
|
||||
void sub_808B1CC(u8 r0)
|
||||
void sub_808B1CC(u8 itemID)
|
||||
{
|
||||
asm_unified(
|
||||
"\tpush {r4-r7,lr}\n"
|
||||
"\tsub sp, 0x8\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tlsrs r6, r0, 24\n"
|
||||
"\tldr r7, _0808B21C\n"
|
||||
"\tldr r2, [r7]\n"
|
||||
"\tldr r1, _0808B220\n"
|
||||
"\tadds r0, r2, r1\n"
|
||||
"\tldrh r0, [r0]\n"
|
||||
"\tldr r5, _0808B224\n"
|
||||
"\tldr r1, [sp]\n"
|
||||
"\tands r1, r5\n"
|
||||
"\torrs r1, r0\n"
|
||||
"\tstr r1, [sp]\n"
|
||||
"\tldr r3, _0808B228\n"
|
||||
"\tadds r2, r3\n"
|
||||
"\tldrh r0, [r2]\n"
|
||||
"\tlsls r0, 16\n"
|
||||
"\tldr r4, _0808B22C\n"
|
||||
"\tadds r2, r4, 0\n"
|
||||
"\tands r2, r1\n"
|
||||
"\torrs r2, r0\n"
|
||||
"\tstr r2, [sp]\n"
|
||||
"\tmov r0, sp\n"
|
||||
"\tmovs r1, 0\n"
|
||||
"\tldrsh r0, [r0, r1]\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tblt _0808B208\n"
|
||||
"\tcmp r2, 0\n"
|
||||
"\tbge _0808B244\n"
|
||||
"_0808B208:\n"
|
||||
"\tbl GetLeader\n"
|
||||
"\tadds r2, r0, 0\n"
|
||||
"\tcmp r2, 0\n"
|
||||
"\tbne _0808B230\n"
|
||||
"\tldr r1, [r7]\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tstrb r0, [r1, 0x2]\n"
|
||||
"\tb _0808B2A8\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_0808B21C: .4byte gDungeon\n"
|
||||
"_0808B220: .4byte 0x00000684\n"
|
||||
"_0808B224: .4byte 0xffff0000\n"
|
||||
"_0808B228: .4byte 0x00000686\n"
|
||||
"_0808B22C: .4byte 0x0000ffff\n"
|
||||
"_0808B230:\n"
|
||||
"\tldrh r0, [r2, 0x4]\n"
|
||||
"\tldr r1, [sp]\n"
|
||||
"\tands r1, r5\n"
|
||||
"\torrs r1, r0\n"
|
||||
"\tstr r1, [sp]\n"
|
||||
"\tldrh r0, [r2, 0x6]\n"
|
||||
"\tlsls r0, 16\n"
|
||||
"\tands r1, r4\n"
|
||||
"\torrs r1, r0\n"
|
||||
"\tstr r1, [sp]\n"
|
||||
"_0808B244:\n"
|
||||
"\tmov r5, sp\n"
|
||||
"\tmov r0, sp\n"
|
||||
"\tmovs r1, 0\n"
|
||||
"\tbl sub_807FE04\n"
|
||||
"\tmov r0, sp\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tldrsh r0, [r0, r2]\n"
|
||||
"\tmovs r3, 0x2\n"
|
||||
"\tldrsh r1, [r5, r3]\n"
|
||||
"\tbl GetTileSafe\n"
|
||||
"\tldrh r2, [r0]\n"
|
||||
"\tmovs r3, 0x80\n"
|
||||
"\tlsls r3, 2\n"
|
||||
"\tadds r1, r3, 0\n"
|
||||
"\torrs r1, r2\n"
|
||||
"\tstrh r1, [r0]\n"
|
||||
"\tcmp r6, 0\n"
|
||||
"\tbeq _0808B2A0\n"
|
||||
"\tadds r0, r6, 0\n"
|
||||
"\tbl sub_80860A8\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _0808B2A0\n"
|
||||
"\tmovs r0, 0x7A\n"
|
||||
"\tbl sub_80860A8\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _0808B2A0\n"
|
||||
"\tadd r4, sp, 0x4\n"
|
||||
"\tadds r0, r4, 0\n"
|
||||
"\tadds r1, r6, 0\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tbl xxx_init_itemslot_8090A8C\n"
|
||||
"\tldrh r0, [r5, 0x2]\n"
|
||||
"\tsubs r0, 0x1\n"
|
||||
"\tstrh r0, [r5, 0x2]\n"
|
||||
"\tmov r0, sp\n"
|
||||
"\tadds r1, r4, 0\n"
|
||||
"\tmovs r2, 0x1\n"
|
||||
"\tbl sub_80460F8\n"
|
||||
"_0808B2A0:\n"
|
||||
"\tbl sub_8049ED4\n"
|
||||
"\tbl sub_8040A84\n"
|
||||
"_0808B2A8:\n"
|
||||
"\tadd sp, 0x8\n"
|
||||
"\tpop {r4-r7}\n"
|
||||
"\tpop {r0}\n"
|
||||
"\tbx r0");
|
||||
}
|
||||
Entity *entity;
|
||||
Tile *tile;
|
||||
Position pos;
|
||||
Item item;
|
||||
|
||||
pos.x = gDungeon->unk684;
|
||||
pos.y = gDungeon->unk686;
|
||||
if ((pos.x < 0) || (pos.y < 0)) {
|
||||
entity = GetLeader();
|
||||
if (entity == NULL) {
|
||||
gDungeon->unk2 = 1;
|
||||
return;
|
||||
}
|
||||
pos.x = entity->pos.x;
|
||||
pos.y = entity->pos.y;
|
||||
}
|
||||
sub_807FE04(&pos, 0);
|
||||
tile = GetTileSafe(pos.x, pos.y);
|
||||
tile->terrainType = tile->terrainType | TERRAIN_TYPE_STAIRS;
|
||||
if (((itemID != ITEM_NOTHING) && (sub_80860A8(itemID) == 0)) &&
|
||||
(sub_80860A8(ITEM_MUSIC_BOX) == 0)) {
|
||||
xxx_init_itemslot_8090A8C(&item,itemID,0);
|
||||
pos.y--;
|
||||
sub_80460F8(&pos,&item,1);
|
||||
}
|
||||
sub_8049ED4();
|
||||
sub_8040A84();
|
||||
}
|
||||
|
||||
void SetupRegiFacingDirection(Entity *regiEntity)
|
||||
{
|
||||
|
||||
@@ -39,13 +39,13 @@ extern void sub_806A6E8(Entity *);
|
||||
extern void sub_8044DF0(Entity *, u32, u32);
|
||||
extern void sub_8045DB4(Position *, u32);
|
||||
|
||||
void sub_8066744(Entity *entity)
|
||||
void HandlePickUpPlayerAction(Entity *entity)
|
||||
{
|
||||
entity->info->action.unk4[0].actionUseIndex = 1;
|
||||
sub_8045DB4(&entity->pos,0);
|
||||
}
|
||||
|
||||
void sub_806675C(Entity *param_1, bool8 param_2)
|
||||
void HandleSetItemAction(Entity *param_1, bool8 param_2)
|
||||
{
|
||||
Item *item;
|
||||
Item *itemPtr;
|
||||
@@ -88,7 +88,7 @@ void sub_806675C(Entity *param_1, bool8 param_2)
|
||||
}
|
||||
|
||||
|
||||
void sub_806684C(Entity *entity,bool8 enableMessage)
|
||||
void HandleUnsetItemAction(Entity *entity,bool8 enableMessage)
|
||||
{
|
||||
Item *item;
|
||||
int index;
|
||||
@@ -113,7 +113,7 @@ void sub_806684C(Entity *entity,bool8 enableMessage)
|
||||
}
|
||||
|
||||
|
||||
void sub_80668D0(Entity *param_1)
|
||||
void HandleGiveItemAction(Entity *param_1)
|
||||
{
|
||||
Entity *entity;
|
||||
Item *item;
|
||||
@@ -191,7 +191,7 @@ void sub_80668D0(Entity *param_1)
|
||||
}
|
||||
|
||||
|
||||
void sub_8066AC0(Entity *param_1)
|
||||
void HandleTakeItemAction(Entity *param_1)
|
||||
{
|
||||
Entity *entity;
|
||||
EntityInfo *info;
|
||||
@@ -281,7 +281,7 @@ void sub_8066BD4(Entity *param_1)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8066CF0(Entity *param_1)
|
||||
void HandleUseItemAction(Entity *param_1)
|
||||
{
|
||||
Entity *entity;
|
||||
|
||||
@@ -289,7 +289,7 @@ void sub_8066CF0(Entity *param_1)
|
||||
entity->info->useHeldItem = TRUE;
|
||||
}
|
||||
|
||||
void sub_8066D04(Entity *param_1)
|
||||
void HandlePlaceItemAction(Entity *param_1)
|
||||
{
|
||||
Item *item;
|
||||
Tile *tile;
|
||||
|
||||
@@ -5,17 +5,17 @@ extern void sub_8067110(Entity *);
|
||||
extern void sub_80671A0(Entity *);
|
||||
extern void sub_8073D14(Entity *);
|
||||
|
||||
void sub_8073CF0(Entity *pokemon)
|
||||
void HandleEatAIAction(Entity *pokemon)
|
||||
{
|
||||
sub_8067110(pokemon);
|
||||
}
|
||||
|
||||
void sub_8073CFC(Entity *pokemon)
|
||||
void HandleThrowItemAIAction(Entity *pokemon)
|
||||
{
|
||||
sub_80671A0(pokemon);
|
||||
}
|
||||
|
||||
void sub_8073D08(Entity *pokemon)
|
||||
void HandlePickUpAIAction(Entity *pokemon)
|
||||
{
|
||||
sub_8073D14(pokemon);
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ void sub_8075708(Entity *entity)
|
||||
bool8 bVar1;
|
||||
bool8 bVar2;
|
||||
Tile *tile;
|
||||
u8 *trapData;
|
||||
Trap *trapData;
|
||||
Entity *trap;
|
||||
EntityInfo *info;
|
||||
|
||||
@@ -78,7 +78,7 @@ void sub_8075708(Entity *entity)
|
||||
|
||||
switch(GetEntityType(trap)) {
|
||||
case ENTITY_TRAP:
|
||||
trapData = (u8 *)GetTrapData(trap);
|
||||
trapData = GetTrapData(trap);
|
||||
bVar1 = FALSE;
|
||||
bVar2 = FALSE;
|
||||
if ((IQSkillIsEnabled(entity, IQ_TRAP_SEER)) && (!trap->isVisible)) {
|
||||
@@ -87,16 +87,16 @@ void sub_8075708(Entity *entity)
|
||||
bVar2 = TRUE;
|
||||
}
|
||||
|
||||
if (trapData[1] == 0) {
|
||||
if (trapData->unk1 == 0) {
|
||||
if (!trap->isVisible) goto _080757EC;
|
||||
if (info->isNotTeamMember) goto _080757EC;
|
||||
}
|
||||
else {
|
||||
if (trapData[1] == 1) {
|
||||
if (trapData->unk1 == 1) {
|
||||
if (!info->isNotTeamMember) goto _080757EC;
|
||||
goto _ret;
|
||||
}
|
||||
if ((trapData[1] == 2) && (!info->isNotTeamMember)) {
|
||||
if ((trapData->unk1 == 2) && (!info->isNotTeamMember)) {
|
||||
bVar1 = TRUE;
|
||||
}
|
||||
_080757EC:
|
||||
@@ -126,7 +126,7 @@ u32 sub_8075818(Entity *entity)
|
||||
EntityInfo *entityInfo;
|
||||
Entity *subEntity;
|
||||
Item *item;
|
||||
u8 *trapData; // TODO: turn into struct when more research is done..
|
||||
Trap *trapData; // TODO: turn into struct when more research is done..
|
||||
u8 r1;
|
||||
|
||||
entityInfo = entity->info;
|
||||
@@ -147,23 +147,23 @@ u32 sub_8075818(Entity *entity)
|
||||
case ENTITY_UNK_5:
|
||||
break;
|
||||
case ENTITY_TRAP:
|
||||
trapData = (u8*) GetTrapData(subEntity);
|
||||
trapData = GetTrapData(subEntity);
|
||||
r1 = 0;
|
||||
if(trapData[1] == 0)
|
||||
if(trapData->unk1 == 0)
|
||||
{
|
||||
if(!subEntity->isVisible || entityInfo->isNotTeamMember)
|
||||
goto flag_check;
|
||||
else
|
||||
goto error;
|
||||
}
|
||||
else if(trapData[1] == 1)
|
||||
else if(trapData->unk1 == 1)
|
||||
{
|
||||
if(!entityInfo->isNotTeamMember)
|
||||
goto flag_check;
|
||||
else
|
||||
goto error;
|
||||
}
|
||||
else if(trapData[1] == 2)
|
||||
else if(trapData->unk1 == 2)
|
||||
{
|
||||
if(!entityInfo->isNotTeamMember)
|
||||
r1 = 1;
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
#include "global.h"
|
||||
#include "structs/str_dungeon.h"
|
||||
|
||||
void sub_807FC3C(Position *pos, u32 param_2, u32 param_3)
|
||||
void sub_807FC3C(Position *pos, u32 trapID, u32 param_3)
|
||||
{
|
||||
gDungeon->unk13574 = pos->x;
|
||||
gDungeon->unk13576 = pos->y;
|
||||
gDungeon->unk13578 = param_2;
|
||||
gDungeon->trapPos.x = pos->x;
|
||||
gDungeon->trapPos.y = pos->y;
|
||||
gDungeon->trapID = trapID;
|
||||
gDungeon->unk13579 = param_3;
|
||||
gDungeon->unk13570 = 1;
|
||||
}
|
||||
|
||||
61
src/code_808333C.c
Normal file
61
src/code_808333C.c
Normal file
@@ -0,0 +1,61 @@
|
||||
#include "global.h"
|
||||
#include "structs/str_dungeon.h"
|
||||
|
||||
struct unkStruct_202ED28
|
||||
{
|
||||
SpriteOAM sp;
|
||||
s16 unk8;
|
||||
s16 unkA;
|
||||
};
|
||||
|
||||
struct unkStruct_202ED28 gUnknown_202ED28[4]; // seeing index 3 used a lot
|
||||
|
||||
bool8 sub_8083568(s32 inX, s32 inY, u8 index) {
|
||||
s32 x;
|
||||
s32 y;
|
||||
SpriteOAM *sp;
|
||||
s32 tmp2;
|
||||
#ifdef NONMATCHING
|
||||
s32 tmp;
|
||||
#else
|
||||
register s32 tmp asm("r2");
|
||||
#endif
|
||||
|
||||
x = inX - gDungeon->cameraPixelPos.x;
|
||||
y = inY - gDungeon->cameraPixelPos.y;
|
||||
|
||||
if (x >= -16 && y >= -16 && x <= 255 && y <= 175)
|
||||
{
|
||||
struct unkStruct_202ED28 *ptr = gUnknown_202ED28;
|
||||
sp = &ptr[index].sp;
|
||||
|
||||
tmp = ptr[index].unk8;
|
||||
tmp = x + ptr[index].unk8;
|
||||
tmp &= SPRITEOAM_MASK_X;
|
||||
|
||||
x = sp->attrib2;
|
||||
tmp2 = (0xFE00);
|
||||
tmp2 &= x;
|
||||
tmp2 |= tmp;
|
||||
sp->attrib2 = tmp2;
|
||||
|
||||
tmp = ptr[index].unkA;
|
||||
tmp = y + ptr[index].unkA;
|
||||
tmp &= SPRITEOAM_MAX_UNK6_4;
|
||||
tmp <<= SPRITEOAM_SHIFT_UNK6_4;
|
||||
|
||||
x = sp->unk6;
|
||||
tmp2 = 0xF;
|
||||
tmp2 &= x;
|
||||
tmp2 |= tmp;
|
||||
sp->unk6 = tmp2;
|
||||
|
||||
|
||||
AddSprite(sp, 0, NULL, NULL);
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
265
src/code_809A560.c
Normal file
265
src/code_809A560.c
Normal file
@@ -0,0 +1,265 @@
|
||||
#include "global.h"
|
||||
#include "text1.h"
|
||||
#include "memory.h"
|
||||
#include "file_system.h"
|
||||
|
||||
struct unkStruct_3001B64_sub
|
||||
{
|
||||
// size: 0x24
|
||||
u16 unk0;
|
||||
/* 0x2 */ s16 speciesID;
|
||||
u8 unk4;
|
||||
u8 unk5;
|
||||
u8 unk6;
|
||||
u8 unk7;
|
||||
u32 unk8;
|
||||
u32 unkC;
|
||||
u32 unk10;
|
||||
/* 0x14 */ u32 faceData;
|
||||
u32 fill18;
|
||||
u8 unk1C;
|
||||
u8 fill1D[0x20 - 0x1D];
|
||||
/* 0x20 */ OpenedFile *faceFile;
|
||||
};
|
||||
|
||||
struct unkStruct_3001B64
|
||||
{
|
||||
// size: 0x5A8
|
||||
u32 unk0;
|
||||
u32 unk4;
|
||||
u32 unk8;
|
||||
u32 unkC;
|
||||
u8 fill10[0x414 - 0x10];
|
||||
u32 unk414;
|
||||
u32 unk418;
|
||||
u32 unk41C;
|
||||
u32 unk420;
|
||||
u32 unk424;
|
||||
u32 unk428;
|
||||
u32 unk42C;
|
||||
u32 unk430;
|
||||
u32 unk434;
|
||||
u32 fill438;
|
||||
struct unkStruct_3001B64_sub unk43C[10];
|
||||
u16 unk5A4;
|
||||
};
|
||||
|
||||
extern struct unkStruct_3001B64 *gUnknown_3001B64;
|
||||
|
||||
extern u16 gUnknown_20399DC;
|
||||
extern u16 gUnknown_20399DE;
|
||||
extern u8 gInvalidityText[];
|
||||
extern u8 gAvailablePokemonNames[];
|
||||
extern u8 gPlayerName[];
|
||||
|
||||
extern u8 sub_809B2B8(u32 *, u32, u32, u32);
|
||||
extern u32 sub_809B40C(u32 *);
|
||||
extern void sub_801416C(s32, s32);
|
||||
extern void sub_80095CC(u32, u32);
|
||||
extern void sub_8009408(u32, u32);
|
||||
extern void sub_809B294(void);
|
||||
extern void sub_8014144(void);
|
||||
|
||||
u32 sub_809A680(u32 param_1, u32 param_2);
|
||||
void sub_809A62C(void);
|
||||
void sub_809A7EC(void);
|
||||
void sub_809A83C(s16 index);
|
||||
|
||||
|
||||
void sub_809A560(void)
|
||||
{
|
||||
sub_8014144();
|
||||
gUnknown_3001B64 = MemoryAlloc(sizeof(struct unkStruct_3001B64), 6);
|
||||
gUnknown_3001B64->unk0 = 0;
|
||||
gUnknown_3001B64->unk4 = -1;
|
||||
gUnknown_3001B64->unk8 = -1;
|
||||
gUnknown_20399DC = 0;
|
||||
gUnknown_20399DE = 0;
|
||||
sub_80095CC(0,0x14);
|
||||
sub_800641C(0,1,1);
|
||||
sub_8009408(0,0x14);
|
||||
sub_809B294();
|
||||
gUnknown_3001B64->unk414 = 0;
|
||||
gUnknown_3001B64->unk418 = 0;
|
||||
gUnknown_3001B64->unk41C = 0;
|
||||
gUnknown_3001B64->unk420 = 0;
|
||||
gUnknown_3001B64->unk424 = 0;
|
||||
gUnknown_3001B64->unk428 = 0;
|
||||
gUnknown_3001B64->unk42C = 0;
|
||||
gUnknown_3001B64->unk430 = -1;
|
||||
gUnknown_3001B64->unk434 = -1;
|
||||
sub_809A7EC();
|
||||
gUnknown_3001B64->unk5A4 = -1;
|
||||
}
|
||||
|
||||
void sub_809A610(void)
|
||||
{
|
||||
sub_809A62C();
|
||||
MemoryFree(gUnknown_3001B64);
|
||||
gUnknown_3001B64 = NULL;
|
||||
}
|
||||
|
||||
void sub_809A62C(void)
|
||||
{
|
||||
s32 index;
|
||||
|
||||
gUnknown_3001B64->unk0 = 0;
|
||||
gUnknown_3001B64->unk4 = -1;
|
||||
gUnknown_3001B64->unk8 = -1;
|
||||
gUnknown_20399DC = 0;
|
||||
gUnknown_20399DE = 0;
|
||||
for(index = 0; index < 10; index++)
|
||||
{
|
||||
sub_809A83C(index);
|
||||
}
|
||||
gUnknown_3001B64->unk414 = 0;
|
||||
sub_809A680(0, 1);
|
||||
}
|
||||
|
||||
u32 sub_809A680(u32 param_1, u32 param_2)
|
||||
{
|
||||
switch(param_1) {
|
||||
case 0:
|
||||
sub_809B294();
|
||||
sub_800641C(0,1,1);
|
||||
break;
|
||||
case 1:
|
||||
sub_809B294();
|
||||
break;
|
||||
case 2:
|
||||
sub_809B294();
|
||||
break;
|
||||
case 3:
|
||||
sub_809B294();
|
||||
break;
|
||||
case 4:
|
||||
sub_809B294();
|
||||
break;
|
||||
default:
|
||||
sub_809B294();
|
||||
sub_800641C(0,1,1);
|
||||
}
|
||||
gUnknown_3001B64->unk0 = param_1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void sub_809A6E4(u16 r0)
|
||||
{
|
||||
gUnknown_20399DC |= r0;
|
||||
}
|
||||
|
||||
void sub_809A6F8(u16 r0)
|
||||
{
|
||||
gUnknown_20399DC &= ~r0;
|
||||
}
|
||||
|
||||
u16 sub_809A70C(u16 r0)
|
||||
{
|
||||
return gUnknown_20399DC;
|
||||
}
|
||||
|
||||
void nullsub_209(void) {}
|
||||
|
||||
void sub_809A71C(s32 param_1)
|
||||
{
|
||||
gUnknown_3001B64->unk4 = param_1;
|
||||
gUnknown_3001B64->unk8 = param_1;
|
||||
sub_801416C(param_1, param_1);
|
||||
}
|
||||
|
||||
void sub_809A738(s32 param_1, s32 param_2)
|
||||
{
|
||||
gUnknown_3001B64->unk4 = param_1;
|
||||
gUnknown_3001B64->unk8 = param_2;
|
||||
sub_801416C(param_1, param_2);
|
||||
}
|
||||
|
||||
u8 sub_809A750(void)
|
||||
{
|
||||
return sub_809B40C(&gUnknown_3001B64->unkC);
|
||||
}
|
||||
|
||||
u32 sub_809A768(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
u8 sub_809A76C(void)
|
||||
{
|
||||
switch(gUnknown_3001B64->unk0)
|
||||
{
|
||||
case 3:
|
||||
return sub_809B2B8(&gUnknown_3001B64->unkC,4,-1,0);
|
||||
case 1:
|
||||
case 2:
|
||||
return sub_809B2B8(&gUnknown_3001B64->unkC,0x84,-1,0);
|
||||
default:
|
||||
sub_809A680(0, 1);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
u8 sub_809A7B4(void)
|
||||
{
|
||||
switch(gUnknown_3001B64->unk0)
|
||||
{
|
||||
case 3:
|
||||
case 1:
|
||||
case 2:
|
||||
return sub_809B2B8(&gUnknown_3001B64->unkC,4,-1,0);
|
||||
default:
|
||||
sub_809A680(0, 1);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_809A7EC(void)
|
||||
{
|
||||
s32 counter;
|
||||
struct unkStruct_3001B64_sub *temp;
|
||||
|
||||
temp = &gUnknown_3001B64->unk43C[0];
|
||||
|
||||
for(counter = 0; counter < 10; counter++, temp++)
|
||||
{
|
||||
temp->unk0 |= -1;
|
||||
temp->speciesID = MONSTER_NONE;
|
||||
temp->unk4 = 0;
|
||||
temp->unk5 = 0;
|
||||
temp->unk6 |= -1;
|
||||
temp->unk7 = 0;
|
||||
temp->unk8 = 0;
|
||||
temp->unkC = 0;
|
||||
temp->unk10 = 0;
|
||||
temp->faceData = 0;
|
||||
temp->unk1C = 0;
|
||||
temp->faceFile = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// https://decomp.me/scratch/4MpWc (96.23% matching - Seth)
|
||||
// void sub_809A83C(s16 index)
|
||||
// {
|
||||
// struct unkStruct_3001B64_sub *temp;
|
||||
//
|
||||
// temp = &gUnknown_3001B64->unk43C[index];
|
||||
//
|
||||
// temp->unk0 = -1;
|
||||
// temp->speciesID = MONSTER_NONE;
|
||||
// temp->unk4 = 0;
|
||||
// temp->unk5 = 0;
|
||||
// temp->unk6 = -1;
|
||||
// temp->unk7 = 0;
|
||||
// temp->unk8 = 0;
|
||||
// temp->unkC = 0;
|
||||
// temp->unk10 = 0;
|
||||
// temp->faceData = NULL;
|
||||
// temp->unk1C = 0;
|
||||
// strcpy(gAvailablePokemonNames + (index * 0x50), gInvalidityText);
|
||||
// strcpy(gPlayerName + (index * 0x50), gInvalidityText);
|
||||
// if(temp->faceFile)
|
||||
// {
|
||||
// CloseFile(temp->faceFile);
|
||||
// temp->faceFile = NULL;
|
||||
// }
|
||||
// }
|
||||
430
src/code_809C5C4.c
Normal file
430
src/code_809C5C4.c
Normal file
@@ -0,0 +1,430 @@
|
||||
#include "global.h"
|
||||
#include "items.h"
|
||||
#include "memory.h"
|
||||
#include "game_options.h"
|
||||
#include "ground_main.h"
|
||||
#include "code_80A26CC.h"
|
||||
|
||||
struct unkStruct_3001B68
|
||||
{
|
||||
u32 unk0;
|
||||
u32 unk4;
|
||||
u16 unk8;
|
||||
u16 unkA;
|
||||
u8 unkC;
|
||||
u8 unkD;
|
||||
u8 unkE;
|
||||
u32 unk10;
|
||||
s16 unk14;
|
||||
s16 unk16;
|
||||
u8 unk18;
|
||||
u8 unk19;
|
||||
u32 unk1C;
|
||||
u8 unk20;
|
||||
};
|
||||
|
||||
extern struct unkStruct_3001B68 *gUnknown_3001B68;
|
||||
|
||||
|
||||
struct unkStruct_20399E0
|
||||
{
|
||||
u32 unk0;
|
||||
s32 unk4;
|
||||
u32 unk8;
|
||||
};
|
||||
|
||||
extern struct unkStruct_20399E0 *gUnknown_20399E0;
|
||||
|
||||
|
||||
void sub_809C63C();
|
||||
u8 sub_809C740(void);
|
||||
void nullsub_107();
|
||||
void nullsub_108();
|
||||
void nullsub_109();
|
||||
void nullsub_110();
|
||||
void nullsub_111();
|
||||
void nullsub_112();
|
||||
void nullsub_113();
|
||||
void nullsub_114();
|
||||
void nullsub_115();
|
||||
void nullsub_116();
|
||||
|
||||
// Event_flag.h
|
||||
u8 sub_8002658(s16);
|
||||
s16 sub_8001658(u32, u32);
|
||||
extern void sub_80015C0(u32, u32);
|
||||
|
||||
void sub_809C5C4(void)
|
||||
{
|
||||
gUnknown_3001B68 = MemoryAlloc(sizeof(struct unkStruct_3001B68), 6);
|
||||
gUnknown_3001B68->unk0 = 0;
|
||||
gUnknown_3001B68->unk4 = 0;
|
||||
gUnknown_3001B68->unk8 = 0;
|
||||
gUnknown_3001B68->unkA = 0;
|
||||
gUnknown_3001B68->unkD = 0;
|
||||
gUnknown_3001B68->unkE = 0;
|
||||
gUnknown_3001B68->unk10 = 0;
|
||||
gUnknown_3001B68->unk14 = 0xffff;
|
||||
gUnknown_3001B68->unk16 = 0x23;
|
||||
gUnknown_3001B68->unk18 = 0;
|
||||
gUnknown_3001B68->unk19 = 0x3f;
|
||||
gUnknown_3001B68->unk1C = 0;
|
||||
gUnknown_3001B68->unk20 = 0;
|
||||
nullsub_107();
|
||||
sub_809C63C();
|
||||
}
|
||||
|
||||
void sub_809C618(void)
|
||||
{
|
||||
sub_809C63C();
|
||||
nullsub_107();
|
||||
nullsub_108();
|
||||
MemoryFree(gUnknown_3001B68);
|
||||
gUnknown_3001B68 = NULL;
|
||||
}
|
||||
|
||||
void sub_809C63C(void)
|
||||
{
|
||||
nullsub_108();
|
||||
gUnknown_3001B68->unk1C = 0;
|
||||
gUnknown_3001B68->unk20 = 0;
|
||||
}
|
||||
|
||||
void sub_809C658(void)
|
||||
{
|
||||
switch(gUnknown_3001B68->unkA) {
|
||||
case 3:
|
||||
nullsub_111();
|
||||
nullsub_112();
|
||||
nullsub_113();
|
||||
break;
|
||||
case 4:
|
||||
nullsub_114();
|
||||
nullsub_115();
|
||||
nullsub_116();
|
||||
break;
|
||||
case 2:
|
||||
nullsub_109();
|
||||
nullsub_110();
|
||||
break;
|
||||
case 5:
|
||||
nullsub_107();
|
||||
nullsub_108();
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
nullsub_107();
|
||||
nullsub_108();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_809C6CC(u16 param_1)
|
||||
{
|
||||
if(gUnknown_3001B68->unk8 != param_1)
|
||||
{
|
||||
gUnknown_3001B68->unk8 = param_1;
|
||||
gUnknown_3001B68->unkE = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_809C6EC(void)
|
||||
{
|
||||
if (sub_8098F88() == 0) {
|
||||
if (gGameOptionsRef->unkC == 0) {
|
||||
sub_809C6CC(4);
|
||||
}
|
||||
else {
|
||||
sub_809C6CC(3);
|
||||
}
|
||||
}
|
||||
else {
|
||||
sub_809C6CC(5);
|
||||
}
|
||||
}
|
||||
|
||||
u16 sub_809C724(void)
|
||||
{
|
||||
return gUnknown_3001B68->unk8;
|
||||
}
|
||||
|
||||
u8 sub_809C730(void)
|
||||
{
|
||||
return sub_809C740();
|
||||
}
|
||||
|
||||
u8 sub_809C740(void)
|
||||
{
|
||||
if(gUnknown_3001B68->unk0 == 0)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
void nullsub_104(void)
|
||||
{ }
|
||||
|
||||
void sub_809C760(void)
|
||||
{
|
||||
gUnknown_3001B68->unkE = 1;
|
||||
}
|
||||
|
||||
void sub_809C770(s16 param_1, s16 param_2)
|
||||
{
|
||||
u8 uVar2;
|
||||
u8 uVar3;
|
||||
s32 iVar5;
|
||||
u32 uVar6;
|
||||
|
||||
s32 param_1_s32;
|
||||
s32 param_2_s32;
|
||||
|
||||
param_1_s32 = param_1;
|
||||
param_2_s32 = param_2;
|
||||
|
||||
if (gUnknown_3001B68->unkE != 0) {
|
||||
gUnknown_3001B68->unkE = 0;
|
||||
return;
|
||||
}
|
||||
if (gUnknown_3001B68->unk8 == 0) {
|
||||
sub_809C6EC();
|
||||
}
|
||||
uVar2 = gUnknown_3001B68->unk18;
|
||||
uVar3 = gUnknown_3001B68->unk19;
|
||||
switch(param_2_s32) {
|
||||
case 9:
|
||||
uVar2 = sub_8002658(param_1_s32);
|
||||
if (uVar2 == 0) {
|
||||
return;
|
||||
}
|
||||
uVar6 = 1;
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
case 10:
|
||||
case 0xb:
|
||||
uVar6 = 1;
|
||||
uVar2 = 0;
|
||||
break;
|
||||
case 0x23:
|
||||
switch((s16)(param_1_s32)) {
|
||||
case 0xA4:
|
||||
case 0xA5:
|
||||
case 0xA8:
|
||||
case 0xA9:
|
||||
case 0xAA:
|
||||
case 0xAE:
|
||||
case 0xAF:
|
||||
case 0xB0:
|
||||
case 0xB1:
|
||||
uVar6 = 0;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 0x24:
|
||||
case 0x25:
|
||||
case 0x26:
|
||||
uVar6 = 0;
|
||||
break;
|
||||
default:
|
||||
switch((s16)(param_2_s32 - 0xc)) {
|
||||
case 1:
|
||||
iVar5 = 0;
|
||||
break;
|
||||
case 6:
|
||||
case 7:
|
||||
iVar5 = 7;
|
||||
break;
|
||||
case 8:
|
||||
case 9:
|
||||
iVar5 = 9;
|
||||
break;
|
||||
case 10:
|
||||
iVar5 = 10;
|
||||
break;
|
||||
case 0xc:
|
||||
case 0xd:
|
||||
iVar5 = 0xb;
|
||||
break;
|
||||
case 0xe:
|
||||
case 0xf:
|
||||
iVar5 = 0xd;
|
||||
break;
|
||||
case 0x10:
|
||||
case 0x11:
|
||||
iVar5 = 0xf;
|
||||
break;
|
||||
case 0x12:
|
||||
case 0x13:
|
||||
iVar5 = 0x11;
|
||||
break;
|
||||
case 0x14:
|
||||
case 0x15:
|
||||
iVar5 = 0x13;
|
||||
break;
|
||||
case 0x16:
|
||||
iVar5 = 0x20;
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
iVar5 = sub_8001658(0,0x13);
|
||||
break;
|
||||
|
||||
}
|
||||
if (iVar5 == -1) {
|
||||
return;
|
||||
}
|
||||
uVar3 = sub_80A2740(iVar5);
|
||||
uVar6 = 2;
|
||||
break;
|
||||
}
|
||||
if (gUnknown_3001B68->unk10 != uVar6) {
|
||||
gUnknown_3001B68->unk0 = 2;
|
||||
gUnknown_3001B68->unkC = 1;
|
||||
gUnknown_3001B68->unk20 = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (uVar6 == 1) {
|
||||
if ((uVar2 != gUnknown_3001B68->unk18) ||
|
||||
(gUnknown_3001B68->unk14 != param_1_s32)) {
|
||||
gUnknown_3001B68->unkC = 1;
|
||||
gUnknown_3001B68->unk20 = 1;
|
||||
}
|
||||
else {
|
||||
if ((uVar2 == 0) && (gUnknown_3001B68->unk16 != param_2_s32)) {
|
||||
gUnknown_3001B68->unkC = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((uVar6 == 2) &&
|
||||
((uVar3 != gUnknown_3001B68->unk19 || (gUnknown_3001B68->unk16 != param_2_s32))))
|
||||
{
|
||||
gUnknown_3001B68->unkC = 1;
|
||||
gUnknown_3001B68->unk20 = 1;
|
||||
}
|
||||
}
|
||||
if (gUnknown_3001B68->unkC != 0) {
|
||||
gUnknown_3001B68->unk10 = uVar6;
|
||||
gUnknown_3001B68->unk14 = param_1_s32;
|
||||
gUnknown_3001B68->unk16 = param_2_s32;
|
||||
gUnknown_3001B68->unk18 = uVar2;
|
||||
gUnknown_3001B68->unk19 = uVar3;
|
||||
if (gUnknown_3001B68->unk8 != 4) {
|
||||
gUnknown_3001B68->unkC = 0;
|
||||
gUnknown_3001B68->unk20 = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void nullsub_105(void) {}
|
||||
|
||||
void sub_809CA20(void)
|
||||
{
|
||||
u16 *puVar1;
|
||||
|
||||
if (gUnknown_3001B68->unk0 != 0) {
|
||||
gUnknown_3001B68->unk0 = 0;
|
||||
gUnknown_3001B68->unk4 = 0x1f;
|
||||
gUnknown_3001B68->unkC = 1;
|
||||
}
|
||||
if (gUnknown_3001B68->unkC != 0) {
|
||||
puVar1 = &gUnknown_3001B68->unk8;
|
||||
gUnknown_3001B68->unkA = *puVar1;
|
||||
if ((*puVar1 == 4) && (gUnknown_3001B68->unk10 == 0)) {
|
||||
gUnknown_3001B68->unkA = 2;
|
||||
gUnknown_3001B68->unk1C = 0;
|
||||
gUnknown_3001B68->unk20 = 0;
|
||||
}
|
||||
switch(gUnknown_3001B68->unkA) {
|
||||
case 3:
|
||||
nullsub_111();
|
||||
nullsub_113();
|
||||
nullsub_112();
|
||||
gUnknown_3001B68->unkD = 1;
|
||||
break;
|
||||
case 4:
|
||||
nullsub_114();
|
||||
nullsub_115();
|
||||
nullsub_116();
|
||||
break;
|
||||
case 2:
|
||||
nullsub_109();
|
||||
nullsub_110();
|
||||
break;
|
||||
case 5:
|
||||
nullsub_107();
|
||||
nullsub_108();
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
nullsub_107();
|
||||
nullsub_108();
|
||||
break;
|
||||
}
|
||||
gUnknown_3001B68->unkC = 0;
|
||||
|
||||
}
|
||||
else {
|
||||
switch(gUnknown_3001B68->unkA) {
|
||||
case 3:
|
||||
nullsub_113();
|
||||
break;
|
||||
case 4:
|
||||
nullsub_116();
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
case 5:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void nullsub_106(void) {}
|
||||
void nullsub_107(void) {}
|
||||
void nullsub_108(void) {}
|
||||
void nullsub_109(void) {}
|
||||
void nullsub_110(void) {}
|
||||
void nullsub_111(void) {}
|
||||
void nullsub_112(void) {}
|
||||
void nullsub_113(void) {}
|
||||
void nullsub_114(void) {}
|
||||
void nullsub_115(void) {}
|
||||
void nullsub_116(void) {}
|
||||
|
||||
void sub_809CB50(void)
|
||||
{
|
||||
gUnknown_20399E0 = MemoryAlloc(sizeof(struct unkStruct_20399E0), 6);
|
||||
gUnknown_20399E0->unk4 = -1;
|
||||
gUnknown_20399E0->unk8 = 0;
|
||||
}
|
||||
|
||||
void sub_809CB74(void) {
|
||||
MemoryFree(gUnknown_20399E0);
|
||||
gUnknown_20399E0 = NULL;
|
||||
}
|
||||
|
||||
|
||||
void sub_809CB8C(void) {
|
||||
sub_80015C0(0, 0x3B);
|
||||
sub_80015C0(0, 0x3D);
|
||||
}
|
||||
|
||||
bool8 sub_809CBA4(u8 item)
|
||||
{
|
||||
if(FindItemInInventory(item) >= 0)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
@@ -931,7 +931,7 @@ bool8 IsTargetInRange(Entity *pokemon, Entity *targetPokemon, s32 direction, s32
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_807CABC(Entity *target)
|
||||
void HandleUseMoveAIAction(Entity *target)
|
||||
{
|
||||
EntityInfo *entityInfo;
|
||||
s32 counter;
|
||||
@@ -959,7 +959,7 @@ void sub_807CABC(Entity *target)
|
||||
}
|
||||
|
||||
#if NONMATCHING // 99.09% https://decomp.me/scratch/rpwXh
|
||||
void sub_807CB3C(Entity *pokemon)
|
||||
void HandleUseOrbAction(Entity *pokemon)
|
||||
{
|
||||
bool8 r4;
|
||||
Item *item;
|
||||
@@ -1058,7 +1058,7 @@ void sub_807CB3C(Entity *pokemon)
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
void sub_807CB3C(Entity *pokemon)
|
||||
void HandleUseOrbAction(Entity *pokemon)
|
||||
{
|
||||
asm_unified(
|
||||
"push {r4-r7,lr}\n"
|
||||
|
||||
@@ -41,7 +41,7 @@ void nullsub_95(Entity *);
|
||||
bool8 IsNotAttacking(Entity *, bool8);
|
||||
extern void sub_80671A0(Entity *);
|
||||
extern void sub_8067110(Entity *);
|
||||
void sub_807CABC(Entity *target);
|
||||
void HandleUseMoveAIAction(Entity *target);
|
||||
void sub_8041888(u8 param_1);
|
||||
void sub_8085140(void);
|
||||
void sub_807360C(void);
|
||||
@@ -49,24 +49,24 @@ void sub_805EFB4(Entity *, u8);
|
||||
void sub_8074FB0(Entity *, u8, Position *);
|
||||
extern void SetMessageArgument(u8 *buffer, Entity *r1, u32);
|
||||
|
||||
void sub_8066D04(Entity *);
|
||||
void sub_8066744(Entity *);
|
||||
void HandlePlaceItemAction(Entity *);
|
||||
void HandlePickUpPlayerAction(Entity *);
|
||||
void sub_8066E14(Entity * );
|
||||
void sub_807348C(void);
|
||||
void sub_80732F0(void);
|
||||
void sub_807FD84(Entity *);
|
||||
void sub_8066BD4(Entity*);
|
||||
void sub_8067510(Entity *);
|
||||
void sub_8067884(Entity *);
|
||||
void HandleTalkFieldAction(Entity *);
|
||||
void HandleUseMovePlayerAction(Entity *);
|
||||
void sub_804267C(void);
|
||||
void sub_807CB3C(Entity *);
|
||||
void HandleUseOrbAction(Entity *);
|
||||
void sub_8067904(Entity *, u32);
|
||||
void sub_80668D0(Entity *);
|
||||
void sub_8066AC0(Entity *);
|
||||
void sub_8066CF0(Entity *);
|
||||
void HandleGiveItemAction(Entity *);
|
||||
void HandleTakeItemAction(Entity *);
|
||||
void HandleUseItemAction(Entity *);
|
||||
void sub_8066FA4(Entity *);
|
||||
void sub_806675C(Entity *,bool8);
|
||||
void sub_806684C(Entity *,bool8);
|
||||
void HandleSetItemAction(Entity *,bool8);
|
||||
void HandleUnsetItemAction(Entity *,bool8);
|
||||
void sub_807FE9C(Entity *,Position *,u32,u32);
|
||||
extern u8 sub_8044B28(void);
|
||||
extern u8 UseAttack(Entity *);
|
||||
@@ -75,9 +75,9 @@ void sub_806A1E8(Entity *pokemon);
|
||||
extern void sub_803E46C(u32);
|
||||
extern void sub_80694C0(Entity *, s32, s32, u32);
|
||||
bool8 sub_804AE08(Position *pos);
|
||||
void sub_8073D08(Entity *pokemon);
|
||||
void sub_8073CFC(Entity *pokemon);
|
||||
void sub_8073CF0(Entity *pokemon);
|
||||
void HandlePickUpAIAction(Entity *pokemon);
|
||||
void HandleThrowItemAIAction(Entity *pokemon);
|
||||
void HandleEatAIAction(Entity *pokemon);
|
||||
bool8 sub_8044B84(void);
|
||||
void sub_8046D20(void);
|
||||
extern void sub_8074094(Entity *);
|
||||
@@ -118,7 +118,7 @@ bool8 sub_8072CF4(Entity *entity)
|
||||
s32 index;
|
||||
EntityInfo *info;
|
||||
bool8 bVar14;
|
||||
Position PStack_24;
|
||||
Position pos;
|
||||
Position pos1;
|
||||
|
||||
sub_804178C(1);
|
||||
@@ -210,10 +210,10 @@ bool8 sub_8072CF4(Entity *entity)
|
||||
}
|
||||
else
|
||||
{
|
||||
PStack_24.x = entity->pos.x;
|
||||
PStack_24.y = entity->pos.y;
|
||||
pos.x = entity->pos.x;
|
||||
pos.y = entity->pos.y;
|
||||
sub_80694C0(entity,pos1.x,pos1.y,0);
|
||||
sub_8074FB0(entity,(info->action).direction,&PStack_24);
|
||||
sub_8074FB0(entity,(info->action).direction,&pos);
|
||||
if (((IQSkillIsEnabled(entity, IQ_SUPER_MOBILE)) && (info->transformStatus != STATUS_MOBILE)) &&
|
||||
(!HasHeldItem(entity,ITEM_MOBILE_SCARF))) {
|
||||
sub_804AE08(&entity->pos);
|
||||
@@ -224,7 +224,7 @@ bool8 sub_8072CF4(Entity *entity)
|
||||
}
|
||||
break;
|
||||
case ACTION_USE_MOVE_AI:
|
||||
sub_807CABC(entity);
|
||||
HandleUseMoveAIAction(entity);
|
||||
break;
|
||||
case ACTION_STAIRS:
|
||||
if ((gDungeon->dungeonLocation.id == DUNGEON_METEOR_CAVE) && (!gDungeon->deoxysDefeat)) {
|
||||
@@ -243,34 +243,34 @@ bool8 sub_8072CF4(Entity *entity)
|
||||
sub_8067110(entity);
|
||||
break;
|
||||
case ACTION_USE_ORB:
|
||||
sub_807CB3C(entity);
|
||||
HandleUseOrbAction(entity);
|
||||
break;
|
||||
case ACTION_PICK_UP_PLAYER:
|
||||
sub_8066744(entity);
|
||||
HandlePickUpPlayerAction(entity);
|
||||
break;
|
||||
case ACTION_GIVE_ITEM:
|
||||
sub_80668D0(entity);
|
||||
HandleGiveItemAction(entity);
|
||||
break;
|
||||
case ACTION_TAKE_ITEM:
|
||||
sub_8066AC0(entity);
|
||||
HandleTakeItemAction(entity);
|
||||
break;
|
||||
case 0x3e:
|
||||
sub_8066BD4(entity); // ITEM_SWITCH_TOOLBOX (When you switch item in Toolbox)
|
||||
break;
|
||||
case ACTION_USE_ITEM:
|
||||
sub_8066CF0(entity);
|
||||
HandleUseItemAction(entity);
|
||||
break;
|
||||
case ACTION_SET_ITEM:
|
||||
sub_806675C(entity, TRUE);
|
||||
HandleSetItemAction(entity, TRUE);
|
||||
break;
|
||||
case ACTION_UNSET_ITEM:
|
||||
sub_806684C(entity, TRUE);
|
||||
HandleUnsetItemAction(entity, TRUE);
|
||||
break;
|
||||
case 0x3b:
|
||||
gDungeon->unkBC = gDungeon->teamPokemon[(info->action).unk4[0].actionUseIndex];
|
||||
break;
|
||||
case ACTION_PLACE_ITEM:
|
||||
sub_8066D04(entity);
|
||||
HandlePlaceItemAction(entity);
|
||||
break;
|
||||
case 10: // Switch with Item on Ground
|
||||
sub_8066E14(entity);
|
||||
@@ -290,10 +290,10 @@ bool8 sub_8072CF4(Entity *entity)
|
||||
SendMessage(entity,*gUnknown_80FE6D4);
|
||||
break;
|
||||
case ACTION_TALK_FIELD:
|
||||
sub_8067510(entity);
|
||||
HandleTalkFieldAction(entity);
|
||||
break;
|
||||
case ACTION_USE_MOVE_PLAYER:
|
||||
sub_8067884(entity);
|
||||
HandleUseMovePlayerAction(entity);
|
||||
break;
|
||||
case ACTION_STRUGGLE:
|
||||
sub_8067904(entity, MOVE_STRUGGLE);
|
||||
@@ -305,13 +305,13 @@ bool8 sub_8072CF4(Entity *entity)
|
||||
sub_807FE9C(entity,&entity->pos,0,0);
|
||||
break;
|
||||
case ACTION_PICK_UP_AI:
|
||||
sub_8073D08(entity);
|
||||
HandlePickUpAIAction(entity);
|
||||
break;
|
||||
case ACTION_EAT_AI:
|
||||
sub_8073CF0(entity);
|
||||
HandleEatAIAction(entity);
|
||||
break;
|
||||
case ACTION_THROW_ITEM_AI:
|
||||
sub_8073CFC(entity);
|
||||
HandleThrowItemAIAction(entity);
|
||||
break;
|
||||
case ACTION_SECOND_THOUGHTS:
|
||||
SetMessageArgument(gAvailablePokemonNames,entity,0);
|
||||
|
||||
@@ -50,7 +50,7 @@ void sub_804AAD4(void)
|
||||
s32 maxRooms;
|
||||
s32 index;
|
||||
|
||||
for(index = 0; index < 0x20; index++)
|
||||
for(index = 0; index < MAX_ROOM_COUNT; index++)
|
||||
{
|
||||
gDungeon->roomData[index].unk0 = 0;
|
||||
gDungeon->roomData[index].unk1 = 0;
|
||||
@@ -90,7 +90,7 @@ void sub_804AAD4(void)
|
||||
}
|
||||
|
||||
|
||||
for(index = 0; index < 0x20; index++)
|
||||
for(index = 0; index < MAX_ROOM_COUNT; index++)
|
||||
{
|
||||
room2 = &gDungeon->roomData[index];
|
||||
if(room2 ->unk0 != 0)
|
||||
|
||||
@@ -3,19 +3,14 @@
|
||||
#include "constants/bg_music.h"
|
||||
#include "dungeon.h"
|
||||
#include "music.h"
|
||||
#include "structs/menu.h"
|
||||
#include "structs/str_dungeon.h"
|
||||
#include "dungeon_music.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "text_util.h"
|
||||
|
||||
|
||||
struct unkStruct_202EE10
|
||||
{
|
||||
u8 fill0[0x1A];
|
||||
s16 unk1A;
|
||||
};
|
||||
|
||||
extern struct unkStruct_202EE10 gUnknown_202EE10;
|
||||
extern MenuInputStruct gUnknown_202EE10;
|
||||
|
||||
extern u8 *gUnknown_80FE6F4[];
|
||||
extern u8 gUnknown_810AC60; // 0xC
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "dungeon_map_access.h"
|
||||
#include "structs/str_dungeon.h"
|
||||
#include "structs/str_traps.h"
|
||||
|
||||
extern u8 gUnknown_202EE70[0x6];
|
||||
extern u8 gUnknown_202EE76[0x10];
|
||||
@@ -43,9 +44,9 @@ u8 GetEntityRoom(Entity *entity)
|
||||
return entity->room;
|
||||
}
|
||||
|
||||
EntityInfo* GetTrapData(Entity *entity)
|
||||
Trap* GetTrapData(Entity *entity)
|
||||
{
|
||||
return entity->info;
|
||||
return (Trap *)entity->info;
|
||||
}
|
||||
|
||||
Item* GetItemData(Entity *entity)
|
||||
@@ -53,9 +54,9 @@ Item* GetItemData(Entity *entity)
|
||||
return (Item *)entity->info;
|
||||
}
|
||||
|
||||
EntityInfo* GetTrapData_1(Entity *entity)
|
||||
Trap* GetTrapData_1(Entity *entity)
|
||||
{
|
||||
return entity->info;
|
||||
return (Trap *)entity->info;
|
||||
}
|
||||
|
||||
Item* GetItemData_1(Entity *entity)
|
||||
|
||||
@@ -50,7 +50,7 @@ extern void sub_8049BB0(s32, s32);
|
||||
extern s16 sub_8057600(Move*, u32);
|
||||
extern u32 sub_8055864(Entity *pokemon, Entity *target, Move *param_3, s32 param_4, s32 param_5);
|
||||
extern void sub_807D148(Entity *pokemon, Entity *r1, u32 r2, Position *r3);
|
||||
extern void sub_807FE04(u32 *, u32);
|
||||
extern void sub_807FE04(Position *, u32);
|
||||
extern void sub_807DB74(Entity *);
|
||||
extern void SetMessageArgument(char[], Entity*, u32);
|
||||
extern void HandleLuminousOrbAction(Entity *pokemon);
|
||||
@@ -86,7 +86,6 @@ extern void SqueezedStatusTarget(Entity *, Entity *, s32, bool32);
|
||||
extern void sub_806F324(Entity *, s32, u32, u32);
|
||||
extern bool8 sub_805755C(Entity* pokemon,u16 moveID);
|
||||
extern void sub_80783C4(Entity *, Entity *, u32);
|
||||
extern bool8 sub_807FCD4(Position *, u32, u8);
|
||||
extern void sub_807CD9C(Entity *, Entity *, u8 direction);
|
||||
|
||||
|
||||
@@ -309,7 +308,7 @@ bool8 sub_805B214(Entity * pokemon,Entity * target,Move *move, s32 param_4)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 TrapperOrbAction(Entity * pokemon, Entity * target)
|
||||
bool8 SpikesMoveAction(Entity * pokemon, Entity * target)
|
||||
{
|
||||
bool8 trapLaid;
|
||||
u8 uVar2;
|
||||
@@ -322,7 +321,7 @@ bool8 TrapperOrbAction(Entity * pokemon, Entity * target)
|
||||
if (isNotTeamMember) {
|
||||
uVar2 = 2;
|
||||
}
|
||||
if (sub_807FCD4(&pokemon->pos,0x13,uVar2) != 0) {
|
||||
if (LayTrap(&pokemon->pos,TRAP_SPIKE_TRAP,uVar2) != 0) {
|
||||
trapLaid = TRUE;
|
||||
}
|
||||
else
|
||||
@@ -973,7 +972,7 @@ bool8 LuminousOrbAction(Entity * pokemon, Entity * target)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_805BEAC(Entity * pokemon, Entity * target)
|
||||
bool8 PetrifyOrbAction(Entity * pokemon, Entity * target)
|
||||
{
|
||||
PetrifiedStatusTarget(pokemon, target);
|
||||
return TRUE;
|
||||
@@ -1015,12 +1014,12 @@ bool8 TrapbustOrbAction(Entity * pokemon,Entity * target)
|
||||
{
|
||||
struct Tile *tile;
|
||||
Entity *object;
|
||||
u8 *trapData;
|
||||
Trap *trapData;
|
||||
s32 bottomRightCornerX, bottomRightCornerY;
|
||||
s32 xCoord, yCoord;
|
||||
struct RoomData *room;
|
||||
s32 topLeftCornerX, topLeftCornerY;
|
||||
u32 sp;
|
||||
Position pos;
|
||||
bool8 foundTrap = FALSE;
|
||||
tile = GetTileAtEntitySafe(target);
|
||||
if (IsBossFight()) {
|
||||
@@ -1047,9 +1046,10 @@ bool8 TrapbustOrbAction(Entity * pokemon,Entity * target)
|
||||
for (yCoord = bottomRightCornerY; yCoord <= topLeftCornerY; yCoord++) {
|
||||
object = GetTileSafe(xCoord, yCoord)->object;
|
||||
if (((object != 0) && (GetEntityType(object) == ENTITY_TRAP)) &&
|
||||
(trapData = (u8*)GetTrapData(object), trapData[0] != 0x11)) {
|
||||
sp = yCoord << 0x10 | (u16)xCoord;
|
||||
sub_807FE04(&sp, 0);
|
||||
(trapData = GetTrapData(object), trapData->id != TRAP_WONDER_TILE)) {
|
||||
pos.y = yCoord;
|
||||
pos.x = xCoord;
|
||||
sub_807FE04(&pos, 0);
|
||||
foundTrap = TRUE;
|
||||
}
|
||||
}
|
||||
@@ -1097,7 +1097,7 @@ bool8 sub_805C080(Entity * pokemon, Entity *target)
|
||||
return foundTarget;
|
||||
}
|
||||
|
||||
bool8 sub_805C128(Entity * pokemon, Entity * target)
|
||||
bool8 InvisifyOrbAction(Entity * pokemon, Entity * target)
|
||||
{
|
||||
InvisibleStatusTarget(pokemon, pokemon);
|
||||
return TRUE;
|
||||
@@ -1214,11 +1214,11 @@ bool8 FillInOrbAction(Entity *pokemon,Entity *target)
|
||||
}
|
||||
}
|
||||
|
||||
bool8 sub_805C3DC(Entity *pokemon, Entity *target)
|
||||
bool8 TrapperOrbAction(Entity *pokemon, Entity *target)
|
||||
{
|
||||
u32 var;
|
||||
var = (target->info->isNotTeamMember ? 2 : 1);
|
||||
sub_807FC3C(&target->pos, 0x14, var);
|
||||
sub_807FC3C(&target->pos, NUM_TRAPS, var);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
694
src/trap.c
694
src/trap.c
@@ -1,9 +1,90 @@
|
||||
#include "global.h"
|
||||
#include "constants/type.h"
|
||||
#include "constants/trap.h"
|
||||
#include "structs/str_dungeon.h"
|
||||
#include "trap.h"
|
||||
#include "status.h"
|
||||
#include "code_80521D0.h"
|
||||
#include "items.h"
|
||||
#include "code_808417C.h"
|
||||
|
||||
#include "dungeon_engine.h"
|
||||
#include "dungeon_items.h"
|
||||
#include "dungeon_random.h"
|
||||
#include "dungeon_map_access.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "structs/map.h"
|
||||
#include "move_effects_target.h"
|
||||
|
||||
extern u8 gAvailablePokemonNames[];
|
||||
extern u8 gUnknown_202DE58[];
|
||||
|
||||
extern u8 *gTrapNames[];
|
||||
extern u8 *gUnknown_80FC5FC[];
|
||||
extern u8 *gUnknown_80FC5F8[];
|
||||
extern u8 *gUnknown_80FDB5C[];
|
||||
extern u8 *gUnknown_80FDB7C[];
|
||||
extern u8 *gUnknown_80FD7F4[];
|
||||
extern u8 *gUnknown_80FD7F8[];
|
||||
extern s16 gUnknown_80F4E74[];
|
||||
extern u8 *gUnknown_80FDC18[];
|
||||
extern u8 *gUnknown_80FDC40[];
|
||||
extern u8 *gUnknown_80FDC7C[];
|
||||
extern u8 *gUnknown_80FD7AC[];
|
||||
extern u8 *gUnknown_80FD788[];
|
||||
extern u8 *gUnknown_80FD7D4[];
|
||||
extern u8 *gUnknown_80F970C[];
|
||||
extern u8 *gUnknown_80F9728[];
|
||||
extern u8 *gUnknown_80FED0C[];
|
||||
|
||||
extern s16 gUnknown_80F4E0E;
|
||||
extern s16 gUnknown_80F4F84;
|
||||
extern s16 gUnknown_80F4F86;
|
||||
extern u32 gUnknown_8106A4C;
|
||||
extern u32 gUnknown_8106A50;
|
||||
extern s16 gUnknown_80F4F8A;
|
||||
|
||||
bool8 sub_8045888(Entity *);
|
||||
void sub_8080B00(Tile *, u32);
|
||||
void sub_803E708(u32, u32);
|
||||
u8 sub_8043D10(void);
|
||||
void SetMessageArgument(u8 *, Entity *, u32);
|
||||
void sub_8068FE0(Entity *, u32, Entity *);
|
||||
void sub_805239C(Entity *, u8 *);
|
||||
void sub_8045C28(Item *, u8 , u8);
|
||||
void sub_8045BF8(u8 *, Item *);
|
||||
void HandleTripTrap(Entity *pokemon,Entity *target);
|
||||
void HandleMudTrap(Entity *pokemon,Entity *target);
|
||||
void HandleStickyTrap(Entity *pokemon,Entity *target);
|
||||
void HandleGrimyTrap(Entity *pokemon,Entity *target);
|
||||
void HandleSummonTrap(Entity *pokemon,Position *pos);
|
||||
void HandlePitfallTrap(Entity *pokemon,Entity *target,Tile *tile);
|
||||
void HandleWarpTrap(Entity *pokemon,Entity *target);
|
||||
void HandleWhirlwindTrap(Entity *entity,Entity *target);
|
||||
void HandleSpinTrap(Entity *pokemon,Entity *target);
|
||||
void HandleSlumberTrap(Entity *pokemon,Entity *target);
|
||||
void HandleSlowTrap(Entity *pokemon,Entity *target);
|
||||
void HandleSealTrap(Entity *pokemon,Entity *target);
|
||||
void HandlePoisonTrap(Entity *pokemon,Entity *target);
|
||||
void HandleSelfdestructTrap(Entity *pokemon,Entity *target);
|
||||
void HandleExplosionTrap(Entity *pokemon,Entity *target);
|
||||
void HandlePPZeroTrap(Entity *pokemon,Entity *target);
|
||||
void HandleWonderTile(Entity *pokemon,Entity *target);
|
||||
void HandlePokemonTrap(Entity *pokemon,Position *pos);
|
||||
void sub_806F324(Entity *,s16,u32,u32);
|
||||
void sub_806F480(Entity *, u32);
|
||||
extern void sub_80421C0(Entity *, u32);
|
||||
void sub_804225C(Entity *, Position *, u8);
|
||||
void sub_8071DA4(Entity *);
|
||||
extern u8 sub_803F428(Position *pos);
|
||||
void sub_806A1E8(Entity *pokemon);
|
||||
void sub_8052364(Entity *, Position *, u8 *);
|
||||
void sub_8049ED4(void);
|
||||
void sub_80522F4(Entity *r0, Entity *r1, const char r2[]);
|
||||
u8 sub_803D6FC(void);
|
||||
Entity *sub_8045684(u8, Position *, u8);
|
||||
extern void sub_807D148(Entity *pokemon, Entity *target, u32 r2, Position *r3);
|
||||
extern void sub_807DF38(Entity *pokemon, Entity *target, Position *pos, u32, u8 moveType, s16);
|
||||
|
||||
bool8 CanLayTrap(Position *pos)
|
||||
{
|
||||
@@ -25,3 +106,616 @@ bool8 CanLayTrap(Position *pos)
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 LayTrap(Position *pos, u8 trapID, u8 param_3)
|
||||
{
|
||||
Tile *tile;
|
||||
Entity *entity;
|
||||
int counter;
|
||||
u16 terrainType;
|
||||
|
||||
tile = GetTileSafe(pos->x, pos->y);
|
||||
if (TRAP_SPIKE_TRAP < trapID) {
|
||||
counter = 0;
|
||||
while ((counter < 0x1e && (trapID = sub_803D6FC(), trapID == TRAP_WONDER_TILE))) {
|
||||
counter++;
|
||||
}
|
||||
if (counter == 0x1e) {
|
||||
trapID = TRAP_CHESTNUT_TRAP;
|
||||
}
|
||||
}
|
||||
terrainType = tile->terrainType;
|
||||
if ((terrainType & TERRAIN_TYPE_STAIRS) != 0) goto _0807FD6E;
|
||||
if (tile->room == CORRIDOR_ROOM) goto _0807FD6E;
|
||||
if ((terrainType & TERRAIN_TYPE_NATURAL_JUNCTION) != 0) goto _0807FD6E;
|
||||
if ((terrainType & TERRAIN_TYPE_SHOP) != 0) goto _0807FD6E;
|
||||
if (((terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY)) != TERRAIN_TYPE_NORMAL)) goto _0807FD6E;
|
||||
if (tile->object != NULL) {
|
||||
if (GetEntityType(tile->object) != ENTITY_TRAP) goto _0807FD6E;
|
||||
GetTrapData(tile->object)->id = trapID;
|
||||
GetTrapData(tile->object)->unk1 = param_3;
|
||||
tile->object->isVisible = TRUE;
|
||||
}
|
||||
else {
|
||||
entity = sub_8045684(trapID,pos,param_3);
|
||||
if (entity == NULL)
|
||||
_0807FD6E:
|
||||
return FALSE;
|
||||
else
|
||||
{
|
||||
tile->object = entity;
|
||||
tile->object->isVisible = TRUE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_807FD84(Entity *entity)
|
||||
{
|
||||
bool8 flag;
|
||||
flag = FALSE;
|
||||
|
||||
if (gDungeon->unk13570 == 0) {
|
||||
return FALSE;
|
||||
}
|
||||
else {
|
||||
gDungeon->unk13570 = 0;
|
||||
flag = LayTrap(&gDungeon->trapPos,gDungeon->trapID,gDungeon->unk13579);
|
||||
if (flag) {
|
||||
sub_8052364(entity,&gDungeon->trapPos,*gUnknown_80FC5F8); // A trap was laid!
|
||||
}
|
||||
else {
|
||||
sub_8052364(entity,&gDungeon->trapPos,*gUnknown_80FC5FC); // A trap can't be laid here.
|
||||
}
|
||||
sub_8049ED4();
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
bool8 sub_807FE04(Position *pos, char param_2)
|
||||
{
|
||||
Tile *tile;
|
||||
|
||||
tile = GetTileSafe(pos->x,pos->y);
|
||||
if ((tile->object != NULL) && (GetEntityType(tile->object) == ENTITY_TRAP)) {
|
||||
tile->object->type = 0;
|
||||
tile->object = NULL;
|
||||
if (param_2 != 0) {
|
||||
sub_8049ED4();
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
bool8 sub_807FE44(Position *pos, char param_2)
|
||||
{
|
||||
Tile *tile;
|
||||
|
||||
tile = GetTile(pos->x,pos->y);
|
||||
if ((tile->object != NULL) && (GetEntityType(tile->object) == ENTITY_TRAP)) {
|
||||
tile->object->isVisible = TRUE;
|
||||
if (param_2 != 0) {
|
||||
sub_8049ED4();
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
void GetTrapName(u8 *buffer, u8 trapIndex)
|
||||
{
|
||||
strcpy(buffer, gTrapNames[trapIndex]);
|
||||
}
|
||||
|
||||
void sub_807FE9C(Entity *pokemon, Position *pos, int param_3, char param_4)
|
||||
{
|
||||
Tile *tile;
|
||||
bool8 flag1;
|
||||
bool8 flag;
|
||||
|
||||
Entity *entity;
|
||||
s32 rand;
|
||||
Trap *trapData;
|
||||
Entity *target;
|
||||
u8 *text;
|
||||
|
||||
tile = GetTileSafe(pos->x,pos->y);
|
||||
entity = tile->object;
|
||||
flag1 = FALSE;
|
||||
if (entity == NULL) {
|
||||
return;
|
||||
}
|
||||
if (GetEntityType(entity) != ENTITY_TRAP) {
|
||||
return;
|
||||
}
|
||||
trapData = GetTrapData(entity);
|
||||
GetTrapName(gAvailablePokemonNames,trapData->id);
|
||||
target = tile->monster;
|
||||
if ((target != NULL) && (GetEntityType(target) != ENTITY_MONSTER)) {
|
||||
target = NULL;
|
||||
}
|
||||
flag = entity->isVisible;
|
||||
entity->isVisible = TRUE;
|
||||
if (((target != NULL) && (sub_806A1E8(target), param_4 != '\0')) && (trapData->id != TRAP_WONDER_TILE)) {
|
||||
rand = DungeonRandInt(100);
|
||||
text = NULL;
|
||||
if (HasHeldItem(target, ITEM_TRAP_SCARF)) {
|
||||
text = *gUnknown_80FDB5C;
|
||||
}
|
||||
if ((flag == TRUE) || (gDungeon->unk1820F != 0)) {
|
||||
if (rand < 0) text = *gUnknown_80FDB7C;
|
||||
}
|
||||
else if (rand < 0xf) {
|
||||
text = *gUnknown_80FDB7C;
|
||||
}
|
||||
if (text != NULL) {
|
||||
if (sub_803F428(pos) != '\0') {
|
||||
sub_8049ED4();
|
||||
}
|
||||
sub_80522F4(pokemon,target,text);
|
||||
if (param_3 == 0) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (sub_803F428(pos) != '\0') {
|
||||
sub_80421C0(0,0x15c);
|
||||
sub_8049ED4();
|
||||
sub_804225C(pokemon,pos,trapData->id);
|
||||
if (gDungeon->blinded) {
|
||||
SendMessage(pokemon,*gUnknown_80FD7F4);
|
||||
}
|
||||
else {
|
||||
SendMessage(pokemon,(gUnknown_80FD7F8)[trapData->id]);
|
||||
}
|
||||
}
|
||||
if (target != NULL) {
|
||||
if (trapData->unk1 == 2) {
|
||||
sub_806F480(target,1);
|
||||
}
|
||||
else if (trapData->unk1 == 1) {
|
||||
sub_806F480(target,0);
|
||||
}
|
||||
}
|
||||
switch(trapData->id) {
|
||||
case TRAP_TRIP_TRAP:
|
||||
HandleTripTrap(pokemon,target);
|
||||
break;
|
||||
case TRAP_MUD_TRAP:
|
||||
HandleMudTrap(pokemon,target);
|
||||
break;
|
||||
case TRAP_STICKY_TRAP:
|
||||
HandleStickyTrap(pokemon,target);
|
||||
break;
|
||||
case TRAP_GRIMY_TRAP:
|
||||
HandleGrimyTrap(pokemon,target);
|
||||
break;
|
||||
case TRAP_SUMMON_TRAP:
|
||||
HandleSummonTrap(pokemon,pos);
|
||||
flag1 = TRUE;
|
||||
break;
|
||||
case TRAP_PITFALL_TRAP:
|
||||
case 0x1B: // ???
|
||||
HandlePitfallTrap(pokemon,target,tile);
|
||||
break;
|
||||
case TRAP_WARP_TRAP:
|
||||
HandleWarpTrap(pokemon,target);
|
||||
break;
|
||||
case TRAP_WHIRLWIND_TRAP:
|
||||
HandleWhirlwindTrap(entity,target);
|
||||
break;
|
||||
case TRAP_SPIN_TRAP:
|
||||
HandleSpinTrap(pokemon,target);
|
||||
break;
|
||||
case TRAP_SLUMBER_TRAP:
|
||||
HandleSlumberTrap(pokemon,target);
|
||||
break;
|
||||
case TRAP_SLOW_TRAP:
|
||||
HandleSlowTrap(pokemon,target);
|
||||
break;
|
||||
case TRAP_SEAL_TRAP:
|
||||
HandleSealTrap(pokemon,target);
|
||||
break;
|
||||
case TRAP_POISON_TRAP:
|
||||
HandlePoisonTrap(pokemon,target);
|
||||
break;
|
||||
case TRAP_SELFDESTRUCT_TRAP:
|
||||
HandleSelfdestructTrap(pokemon,target);
|
||||
break;
|
||||
case TRAP_EXPLOSION_TRAP:
|
||||
HandleExplosionTrap(pokemon,target);
|
||||
break;
|
||||
case TRAP_PP_ZERO_TRAP:
|
||||
HandlePPZeroTrap(pokemon,target);
|
||||
break;
|
||||
case TRAP_CHESTNUT_TRAP:
|
||||
if (target != NULL) {
|
||||
sub_806F324(target,gUnknown_80F4F86,0xf,0x213);
|
||||
}
|
||||
break;
|
||||
case TRAP_WONDER_TILE:
|
||||
HandleWonderTile(pokemon,target);
|
||||
break;
|
||||
case TRAP_POKEMON_TRAP:
|
||||
HandlePokemonTrap(pokemon,pos);
|
||||
flag1 = TRUE;
|
||||
break;
|
||||
case TRAP_SPIKE_TRAP:
|
||||
if (target != NULL) {
|
||||
sub_806F324(target,gUnknown_80F4F84,10,0x206);
|
||||
}
|
||||
}
|
||||
if (EntityExists(target)) {
|
||||
sub_8071DA4(target);
|
||||
}
|
||||
if (flag1) {
|
||||
sub_807FE04(pos,1);
|
||||
}
|
||||
}
|
||||
|
||||
void HandleMudTrap(Entity *pokemon, Entity *target)
|
||||
{
|
||||
int rand;
|
||||
#ifdef NONMATCHING
|
||||
int rand1;
|
||||
#else
|
||||
register int rand1 asm("r1");
|
||||
#endif
|
||||
|
||||
if (target != NULL) {
|
||||
rand1 = rand = DungeonRandInt(100);
|
||||
if (rand <= 0x18) {
|
||||
LowerAttackStageTarget(pokemon,target,gUnknown_8106A4C,1,1,1);
|
||||
}
|
||||
else if (0x32 > rand) {
|
||||
LowerAttackStageTarget(pokemon,target,gUnknown_8106A50,1,1,1);
|
||||
}
|
||||
else if (rand1 < 0x4b) {
|
||||
LowerDefenseStageTarget(pokemon,target,gUnknown_8106A4C,1,1,1);
|
||||
}
|
||||
else {
|
||||
LowerDefenseStageTarget(pokemon,target,gUnknown_8106A50,1,1,1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// https://decomp.me/scratch/Yq32k (Seth)
|
||||
|
||||
#ifdef NONMATCHING
|
||||
void HandleStickyTrap(Entity *pokemon,Entity *target)
|
||||
{
|
||||
EntityInfo *info;
|
||||
Item *item;
|
||||
Item *pbVar3;
|
||||
int index;
|
||||
int itemCount;
|
||||
int newIndex;
|
||||
Item *itemStack [20];
|
||||
bool32 flag;
|
||||
|
||||
info = target->info;
|
||||
if (HasHeldItem(target,0xe)) {
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FDC7C);
|
||||
}
|
||||
else
|
||||
{
|
||||
itemCount = 0;
|
||||
if (flag = info->isTeamLeader, item = &info->heldItem, flag != '\0') {
|
||||
for(index = 0; index < 0x14; index++)
|
||||
{
|
||||
pbVar3 = &gTeamInventoryRef->teamItems[index];
|
||||
if ((((pbVar3->flags & 1) != 0) && (IsNotSpecialItem(pbVar3->id))) &&
|
||||
(gTeamInventoryRef->teamItems[index].flags & 8) == 0) {
|
||||
itemStack[itemCount] = pbVar3;
|
||||
itemCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((((item->flags & 1) != 0) && (IsNotSpecialItem((info->heldItem).id)))
|
||||
&& ((item->flags & 8) == 0)) {
|
||||
itemStack[itemCount] = item;
|
||||
itemCount = itemCount + 1;
|
||||
}
|
||||
if (itemCount == 0) {
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FDC40);
|
||||
}
|
||||
else
|
||||
{
|
||||
newIndex = DungeonRandInt(itemCount);
|
||||
sub_8045BF8(gUnknown_202DE58, itemStack[newIndex]);
|
||||
itemStack[newIndex]->flags |= 8;
|
||||
sub_80421C0(target, 0x192);
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FDC18);
|
||||
}
|
||||
}
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
void HandleStickyTrap(Entity *pokemon,Entity *target)
|
||||
{
|
||||
asm_unified("\tpush {r4-r7,lr}\n"
|
||||
"\tmov r7, r10\n"
|
||||
"\tmov r6, r9\n"
|
||||
"\tmov r5, r8\n"
|
||||
"\tpush {r5-r7}\n"
|
||||
"\tsub sp, 0x5C\n"
|
||||
"\tstr r0, [sp, 0x54]\n"
|
||||
"\tmov r10, r1\n"
|
||||
"\tldr r0, [r1, 0x70]\n"
|
||||
"\tmov r8, r0\n"
|
||||
"\tmov r0, r10\n"
|
||||
"\tmovs r1, 0xE\n"
|
||||
"\tbl HasHeldItem\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _08080278\n"
|
||||
"\tldr r0, _08080274\n"
|
||||
"\tb _08080300\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_08080274: .4byte gUnknown_80FDC7C\n"
|
||||
"_08080278:\n"
|
||||
"\tmovs r6, 0\n"
|
||||
"\tmov r1, r8\n"
|
||||
"\tldrb r0, [r1, 0x7]\n"
|
||||
"\tmovs r1, 0x60\n"
|
||||
"\tadd r1, r8\n"
|
||||
"\tmov r9, r1\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _080802C8\n"
|
||||
"\tmovs r5, 0\n"
|
||||
"\tldr r7, _0808030C\n"
|
||||
"\tmov r0, sp\n"
|
||||
"\tstr r0, [sp, 0x58]\n"
|
||||
"_08080290:\n"
|
||||
"\tlsls r4, r5, 2\n"
|
||||
"\tldr r0, [r7]\n"
|
||||
"\tadds r2, r4, r0\n"
|
||||
"\tldrb r1, [r2]\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tands r0, r1\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _080802C2\n"
|
||||
"\tldrb r0, [r2, 0x2]\n"
|
||||
"\tbl IsNotSpecialItem\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _080802C2\n"
|
||||
"\tldr r0, [r7]\n"
|
||||
"\tadds r2, r0, r4\n"
|
||||
"\tldrb r1, [r2]\n"
|
||||
"\tmovs r0, 0x8\n"
|
||||
"\tands r0, r1\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _080802C2\n"
|
||||
"\tldr r1, [sp, 0x58]\n"
|
||||
"\tstm r1!, {r2}\n"
|
||||
"\tstr r1, [sp, 0x58]\n"
|
||||
"\tadds r6, 0x1\n"
|
||||
"_080802C2:\n"
|
||||
"\tadds r5, 0x1\n"
|
||||
"\tcmp r5, 0x13\n"
|
||||
"\tble _08080290\n"
|
||||
"_080802C8:\n"
|
||||
"\tmov r0, r9\n"
|
||||
"\tldrb r1, [r0]\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tands r0, r1\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _080802FA\n"
|
||||
"\tmov r0, r8\n"
|
||||
"\tadds r0, 0x62\n"
|
||||
"\tldrb r0, [r0]\n"
|
||||
"\tbl IsNotSpecialItem\n"
|
||||
"\tlsls r0, 24\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _080802FA\n"
|
||||
"\tmov r0, r9\n"
|
||||
"\tldrb r1, [r0]\n"
|
||||
"\tmovs r0, 0x8\n"
|
||||
"\tands r0, r1\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbne _080802FA\n"
|
||||
"\tlsls r0, r6, 2\n"
|
||||
"\tadd r0, sp\n"
|
||||
"\tmov r1, r9\n"
|
||||
"\tstr r1, [r0]\n"
|
||||
"\tadds r6, 0x1\n"
|
||||
"_080802FA:\n"
|
||||
"\tcmp r6, 0\n"
|
||||
"\tbne _08080314\n"
|
||||
"\tldr r0, _08080310\n"
|
||||
"_08080300:\n"
|
||||
"\tldr r2, [r0]\n"
|
||||
"\tldr r0, [sp, 0x54]\n"
|
||||
"\tmov r1, r10\n"
|
||||
"\tbl sub_80522F4\n"
|
||||
"\tb _0808034A\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_0808030C: .4byte gTeamInventoryRef\n"
|
||||
"_08080310: .4byte gUnknown_80FDC40\n"
|
||||
"_08080314:\n"
|
||||
"\tadds r0, r6, 0\n"
|
||||
"\tbl DungeonRandInt\n"
|
||||
"\tldr r2, _0808035C\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tmov r1, sp\n"
|
||||
"\tadds r4, r1, r0\n"
|
||||
"\tldr r1, [r4]\n"
|
||||
"\tadds r0, r2, 0\n"
|
||||
"\tbl sub_8045BF8\n"
|
||||
"\tldr r2, [r4]\n"
|
||||
"\tldrb r1, [r2]\n"
|
||||
"\tmovs r0, 0x8\n"
|
||||
"\torrs r0, r1\n"
|
||||
"\tstrb r0, [r2]\n"
|
||||
"\tmovs r1, 0xC9\n"
|
||||
"\tlsls r1, 1\n"
|
||||
"\tmov r0, r10\n"
|
||||
"\tbl sub_80421C0\n"
|
||||
"\tldr r0, _08080360\n"
|
||||
"\tldr r2, [r0]\n"
|
||||
"\tldr r0, [sp, 0x54]\n"
|
||||
"\tmov r1, r10\n"
|
||||
"\tbl sub_80522F4\n"
|
||||
"_0808034A:\n"
|
||||
"\tadd sp, 0x5C\n"
|
||||
"\tpop {r3-r5}\n"
|
||||
"\tmov r8, r3\n"
|
||||
"\tmov r9, r4\n"
|
||||
"\tmov r10, r5\n"
|
||||
"\tpop {r4-r7}\n"
|
||||
"\tpop {r0}\n"
|
||||
"\tbx r0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_0808035C: .4byte gUnknown_202DE58\n"
|
||||
"_08080360: .4byte gUnknown_80FDC18");
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
void HandleSpinTrap(Entity *pokemon, Entity *target)
|
||||
{
|
||||
if(target != NULL)
|
||||
ConfuseStatusTarget(pokemon, target, TRUE);
|
||||
}
|
||||
|
||||
void HandleWarpTrap(Entity *pokemon, Entity *target)
|
||||
{
|
||||
if(target != NULL)
|
||||
sub_807D148(pokemon, target, 0, NULL);
|
||||
}
|
||||
|
||||
void HandleSlumberTrap(Entity *pokemon, Entity *target)
|
||||
{
|
||||
s32 turns;
|
||||
|
||||
if(target != NULL)
|
||||
{
|
||||
turns = CalculateStatusTurns(target, gUnknown_80F4E74, TRUE);
|
||||
sub_8075C58(pokemon, target, turns, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
void HandleSlowTrap(Entity *pokemon, Entity *target)
|
||||
{
|
||||
if(target != NULL)
|
||||
LowerMovementSpeedTarget(pokemon, target, 1, TRUE);
|
||||
}
|
||||
|
||||
void HandlePoisonTrap(Entity *pokemon, Entity *target)
|
||||
{
|
||||
if(target != NULL)
|
||||
PoisonedStatusTarget(pokemon, target, TRUE);
|
||||
}
|
||||
|
||||
void HandleSelfdestructTrap(Entity *pokemon, Entity *target)
|
||||
{
|
||||
sub_807DF38(pokemon, target, &target->pos, 1, TYPE_NONE, 0x212);
|
||||
}
|
||||
|
||||
void HandleExplosionTrap(Entity *pokemon, Entity *target)
|
||||
{
|
||||
sub_807DF38(pokemon, target, &target->pos, 2, TYPE_NONE, 0x212);
|
||||
}
|
||||
|
||||
void HandleGrimyTrap(Entity *pokemon, Entity *target)
|
||||
{
|
||||
Item *item;
|
||||
Item *heldItem;
|
||||
int counter;
|
||||
int index;
|
||||
EntityInfo *info;
|
||||
int badFoodCount;
|
||||
Item *itemStack [22];
|
||||
|
||||
badFoodCount = 0;
|
||||
if (target != NULL) {
|
||||
info = target->info;
|
||||
counter = 0;
|
||||
if (info->isTeamLeader) {
|
||||
for(index = 0; index < INVENTORY_SIZE; index++)
|
||||
{
|
||||
item = &gTeamInventoryRef->teamItems[index];
|
||||
if ((item->flags & ITEM_FLAG_EXISTS)) {
|
||||
itemStack[counter] = item;
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
}
|
||||
heldItem = &info->heldItem;
|
||||
if ((heldItem->flags & ITEM_FLAG_EXISTS)) {
|
||||
itemStack[counter] = heldItem;
|
||||
counter++;
|
||||
}
|
||||
for (index = 0; index < counter; index++) {
|
||||
if (((GetItemCategory(itemStack[index]->id) == CATEGORY_FOOD_GUMMIES) && (itemStack[index]->id != ITEM_GRIMY_FOOD)) &&
|
||||
(DungeonRandInt(100) < gUnknown_80F4E0E)) {
|
||||
badFoodCount++;
|
||||
sub_8045C28(itemStack[index], ITEM_GRIMY_FOOD, 2);
|
||||
}
|
||||
}
|
||||
if (badFoodCount == 1) {
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FD788); // A food item went bad.
|
||||
}
|
||||
else if (badFoodCount == 0) {
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FD7D4); // Nothing particularly bad happened.
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_80522F4(pokemon,target,*gUnknown_80FD7AC); // Several food items went bad
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void HandlePitfallTrap(Entity *pokemon, Entity *target, Tile *tile)
|
||||
{
|
||||
bool8 flag;
|
||||
EntityInfo *info;
|
||||
|
||||
flag = FALSE;
|
||||
if (target != NULL) {
|
||||
if (IsBossFight()) {
|
||||
SendMessage(pokemon,*gUnknown_80FED0C); // But nothing happened...
|
||||
}
|
||||
else
|
||||
{
|
||||
info = target->info;
|
||||
if (sub_8045888(target)) {
|
||||
sub_8080B00(tile, 0x1B);
|
||||
flag = TRUE;
|
||||
sub_80421C0(target,0x193);
|
||||
sub_803E708(0x1e,0x48);
|
||||
}
|
||||
if (info->isTeamLeader) {
|
||||
if (sub_8043D10() != 2) {
|
||||
info->unk15C = 1;
|
||||
info->unk15E = 1;
|
||||
sub_803E708(0x28,0x4b);
|
||||
sub_806F324(target,gUnknown_80F4F8A,0x11,0x215);
|
||||
gDungeon->unk2 = 2;
|
||||
return;
|
||||
}
|
||||
SendMessage(pokemon,*gUnknown_80F9728);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetMessageArgument(gAvailablePokemonNames,target,0);
|
||||
if (info->isNotTeamMember) {
|
||||
sub_80522F4(pokemon,target,*gUnknown_80F970C); // $m0 fell into the pitfall!
|
||||
}
|
||||
else {
|
||||
sub_805239C(pokemon,*gUnknown_80F970C); // $m0 fell into the pitfall!
|
||||
}
|
||||
sub_8068FE0(target,0x215,pokemon);
|
||||
}
|
||||
if (flag) {
|
||||
sub_8080B00(tile, 5);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user