mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-28 03:34:22 -05:00
more dungeon items decomp
This commit is contained in:
@@ -5,582 +5,6 @@
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_8046CE4
|
||||
sub_8046CE4:
|
||||
push {r4,r5,lr}
|
||||
adds r4, r0, 0
|
||||
adds r5, r1, 0
|
||||
movs r0, 0x64
|
||||
bl DungeonRandomCapped
|
||||
adds r1, r0, 0
|
||||
movs r2, 0
|
||||
ldr r3, _08046D04
|
||||
_08046CF6:
|
||||
lsls r0, r1, 2
|
||||
adds r0, r3
|
||||
ldr r0, [r0]
|
||||
cmp r0, r5
|
||||
bgt _08046D08
|
||||
strb r1, [r4, 0x1]
|
||||
b _08046D18
|
||||
.align 2, 0
|
||||
_08046D04: .4byte gUnknown_810A3F0
|
||||
_08046D08:
|
||||
lsrs r0, r1, 31
|
||||
adds r0, r1, r0
|
||||
asrs r1, r0, 1
|
||||
adds r2, 0x1
|
||||
cmp r2, 0xC7
|
||||
ble _08046CF6
|
||||
movs r0, 0x1
|
||||
strb r0, [r4, 0x1]
|
||||
_08046D18:
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_8046CE4
|
||||
|
||||
thumb_func_start sub_8046D20
|
||||
sub_8046D20:
|
||||
push {r4,r5,lr}
|
||||
ldr r4, _08046D5C
|
||||
ldr r0, [r4]
|
||||
ldrb r5, [r0, 0x8]
|
||||
bl sub_8046D70
|
||||
ldr r1, [r4]
|
||||
strb r0, [r1, 0x8]
|
||||
ldr r0, [r4]
|
||||
ldrb r0, [r0, 0x8]
|
||||
cmp r0, 0x1
|
||||
bne _08046D64
|
||||
cmp r5, 0
|
||||
bne _08046D64
|
||||
ldr r0, _08046D60
|
||||
ldr r1, [r0]
|
||||
movs r0, 0
|
||||
movs r2, 0x1
|
||||
bl sub_8052B8C
|
||||
adds r1, r0, 0
|
||||
cmp r1, 0x1
|
||||
bne _08046D64
|
||||
ldr r0, [r4]
|
||||
strb r1, [r0, 0x4]
|
||||
ldr r1, [r4]
|
||||
movs r0, 0x2
|
||||
strb r0, [r1, 0x11]
|
||||
b _08046D68
|
||||
.align 2, 0
|
||||
_08046D5C: .4byte gDungeonGlobalData
|
||||
_08046D60: .4byte gUnknown_80FA408
|
||||
_08046D64:
|
||||
bl sub_8046D8C
|
||||
_08046D68:
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_8046D20
|
||||
|
||||
thumb_func_start sub_8046D70
|
||||
sub_8046D70:
|
||||
push {lr}
|
||||
ldr r0, _08046D84
|
||||
ldr r0, [r0]
|
||||
ldr r1, _08046D88
|
||||
adds r0, r1
|
||||
ldrb r0, [r0]
|
||||
movs r0, 0
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_08046D84: .4byte gDungeonGlobalData
|
||||
_08046D88: .4byte 0x0000068a
|
||||
thumb_func_end sub_8046D70
|
||||
|
||||
thumb_func_start sub_8046D8C
|
||||
sub_8046D8C:
|
||||
push {r4-r7,lr}
|
||||
sub sp, 0xC
|
||||
movs r6, 0
|
||||
ldr r5, _08046EDC
|
||||
movs r4, 0
|
||||
_08046D96:
|
||||
movs r7, 0
|
||||
movs r0, 0x1
|
||||
negs r0, r0
|
||||
str r0, [sp]
|
||||
str r0, [sp, 0x4]
|
||||
str r0, [sp, 0x8]
|
||||
movs r3, 0
|
||||
ldr r2, [r5]
|
||||
_08046DA6:
|
||||
ldrb r1, [r2]
|
||||
movs r0, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _08046DC8
|
||||
ldrb r0, [r2, 0x2]
|
||||
cmp r0, 0x79
|
||||
bne _08046DB8
|
||||
str r3, [sp]
|
||||
_08046DB8:
|
||||
ldrb r0, [r2, 0x2]
|
||||
cmp r0, 0x77
|
||||
bne _08046DC0
|
||||
str r3, [sp, 0x4]
|
||||
_08046DC0:
|
||||
ldrb r0, [r2, 0x2]
|
||||
cmp r0, 0x78
|
||||
bne _08046DC8
|
||||
str r3, [sp, 0x8]
|
||||
_08046DC8:
|
||||
adds r2, 0x4
|
||||
adds r3, 0x1
|
||||
cmp r3, 0x13
|
||||
ble _08046DA6
|
||||
ldr r1, [sp]
|
||||
cmp r1, 0
|
||||
blt _08046E1E
|
||||
ldr r0, [sp, 0x4]
|
||||
cmp r0, 0
|
||||
blt _08046E1E
|
||||
ldr r0, [sp, 0x8]
|
||||
cmp r0, 0
|
||||
blt _08046E1E
|
||||
movs r7, 0x1
|
||||
movs r6, 0x1
|
||||
lsls r1, 2
|
||||
ldr r0, [r5]
|
||||
adds r1, r0
|
||||
strb r4, [r1, 0x2]
|
||||
strb r4, [r1, 0x1]
|
||||
strb r4, [r1]
|
||||
ldr r0, [sp, 0x4]
|
||||
lsls r0, 2
|
||||
ldr r1, [r5]
|
||||
adds r0, r1
|
||||
strb r4, [r0, 0x2]
|
||||
strb r4, [r0, 0x1]
|
||||
strb r4, [r0]
|
||||
ldr r0, [sp, 0x8]
|
||||
lsls r0, 2
|
||||
ldr r1, [r5]
|
||||
adds r0, r1
|
||||
strb r4, [r0, 0x2]
|
||||
strb r4, [r0, 0x1]
|
||||
strb r4, [r0]
|
||||
ldr r1, [sp]
|
||||
lsls r1, 2
|
||||
ldr r0, [r5]
|
||||
adds r0, r1
|
||||
movs r1, 0x7A
|
||||
movs r2, 0
|
||||
bl xxx_init_itemslot_8090A8C
|
||||
_08046E1E:
|
||||
cmp r7, 0
|
||||
bne _08046D96
|
||||
bl FillInventoryGaps
|
||||
cmp r6, 0
|
||||
beq _08046ED4
|
||||
bl GetLeaderEntity
|
||||
adds r4, r0, 0
|
||||
ldr r0, _08046EE0
|
||||
bl sub_80855E4
|
||||
ldr r6, _08046EE4
|
||||
ldr r0, [r6]
|
||||
ldr r5, _08046EE8
|
||||
adds r0, r5
|
||||
movs r1, 0x1
|
||||
strb r1, [r0]
|
||||
ldr r0, _08046EEC
|
||||
ldr r1, [r0]
|
||||
movs r0, 0
|
||||
movs r2, 0x1
|
||||
bl PrintFieldMessage
|
||||
movs r0, 0x3C
|
||||
movs r1, 0x41
|
||||
bl sub_803E708
|
||||
ldr r0, _08046EF0
|
||||
ldr r1, [r0]
|
||||
movs r0, 0
|
||||
movs r2, 0x1
|
||||
bl PrintFieldMessage
|
||||
adds r0, r4, 0
|
||||
movs r1, 0x4
|
||||
movs r2, 0xA
|
||||
movs r3, 0
|
||||
bl sub_80869E4
|
||||
adds r0, r4, 0
|
||||
adds r0, 0xC
|
||||
movs r1, 0x86
|
||||
lsls r1, 1
|
||||
movs r2, 0
|
||||
bl sub_80416E0
|
||||
adds r0, r4, 0
|
||||
movs r1, 0xD7
|
||||
bl sub_80421C0
|
||||
movs r0, 0x3C
|
||||
movs r1, 0x41
|
||||
bl sub_803E708
|
||||
ldr r0, _08046EF4
|
||||
adds r1, r4, 0
|
||||
movs r2, 0
|
||||
bl SetMessageArgument
|
||||
ldr r0, _08046EF8
|
||||
ldr r1, [r0]
|
||||
movs r0, 0
|
||||
movs r2, 0x1
|
||||
bl PrintFieldMessage
|
||||
movs r0, 0xA
|
||||
movs r1, 0x41
|
||||
bl sub_803E708
|
||||
movs r0, 0xD4
|
||||
bl PlaySoundEffect
|
||||
ldr r0, _08046EFC
|
||||
ldr r1, [r0]
|
||||
movs r0, 0
|
||||
movs r2, 0x1
|
||||
bl PrintFieldMessage
|
||||
movs r0, 0xA
|
||||
movs r1, 0x41
|
||||
bl sub_803E708
|
||||
movs r0, 0x1
|
||||
bl sub_804178C
|
||||
ldr r0, [r6]
|
||||
adds r0, r5
|
||||
strb r7, [r0]
|
||||
bl sub_8040A84
|
||||
_08046ED4:
|
||||
add sp, 0xC
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08046EDC: .4byte gTeamInventory_203B460
|
||||
_08046EE0: .4byte sub_80861A8
|
||||
_08046EE4: .4byte gDungeonGlobalData
|
||||
_08046EE8: .4byte 0x0001356c
|
||||
_08046EEC: .4byte gUnknown_810531C
|
||||
_08046EF0: .4byte gUnknown_8105360
|
||||
_08046EF4: .4byte gAvailablePokemonNames
|
||||
_08046EF8: .4byte gUnknown_81053A8
|
||||
_08046EFC: .4byte gUnknown_8105434
|
||||
thumb_func_end sub_8046D8C
|
||||
|
||||
thumb_func_start sub_8046F00
|
||||
sub_8046F00:
|
||||
push {r4-r7,lr}
|
||||
adds r4, r0, 0
|
||||
ldrb r0, [r4, 0x2]
|
||||
bl GetItemType
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x5
|
||||
bne _08046F7C
|
||||
ldrb r0, [r4, 0x2]
|
||||
bl GetItemMove
|
||||
lsls r0, 16
|
||||
lsrs r7, r0, 16
|
||||
ldrb r0, [r4, 0x2]
|
||||
bl IsHMItem
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08046F6E
|
||||
movs r6, 0
|
||||
_08046F2A:
|
||||
ldr r0, _08046F74
|
||||
ldr r0, [r0]
|
||||
lsls r1, r6, 2
|
||||
ldr r2, _08046F78
|
||||
adds r0, r2
|
||||
adds r0, r1
|
||||
ldr r4, [r0]
|
||||
adds r0, r4, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08046F68
|
||||
ldr r0, [r4, 0x70]
|
||||
movs r2, 0x2
|
||||
ldrsh r1, [r0, r2]
|
||||
adds r0, r7, 0
|
||||
bl CanMonLearnMove
|
||||
lsls r0, 24
|
||||
lsrs r5, r0, 24
|
||||
adds r0, r4, 0
|
||||
movs r1, 0
|
||||
bl CannotMove
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08046F64
|
||||
movs r5, 0
|
||||
_08046F64:
|
||||
cmp r5, 0
|
||||
bne _08046F7C
|
||||
_08046F68:
|
||||
adds r6, 0x1
|
||||
cmp r6, 0x3
|
||||
ble _08046F2A
|
||||
_08046F6E:
|
||||
movs r0, 0
|
||||
b _08046F7E
|
||||
.align 2, 0
|
||||
_08046F74: .4byte gDungeonGlobalData
|
||||
_08046F78: .4byte 0x0001357c
|
||||
_08046F7C:
|
||||
movs r0, 0x1
|
||||
_08046F7E:
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8046F00
|
||||
|
||||
thumb_func_start sub_8046F84
|
||||
sub_8046F84:
|
||||
push {r4-r7,lr}
|
||||
adds r7, r0, 0
|
||||
movs r5, 0
|
||||
ldr r4, _08047000
|
||||
movs r6, 0x1
|
||||
movs r3, 0
|
||||
_08046F90:
|
||||
lsls r1, r5, 2
|
||||
ldr r0, [r4]
|
||||
adds r2, r0, r1
|
||||
ldrb r1, [r2]
|
||||
adds r0, r6, 0
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _08046FAE
|
||||
ldrb r0, [r2]
|
||||
ands r0, r7
|
||||
cmp r0, 0
|
||||
beq _08046FAE
|
||||
strb r3, [r2, 0x2]
|
||||
strb r3, [r2, 0x1]
|
||||
strb r3, [r2]
|
||||
_08046FAE:
|
||||
adds r5, 0x1
|
||||
cmp r5, 0x13
|
||||
ble _08046F90
|
||||
bl FillInventoryGaps
|
||||
movs r5, 0
|
||||
movs r6, 0
|
||||
_08046FBC:
|
||||
ldr r0, _08047004
|
||||
ldr r0, [r0]
|
||||
lsls r1, r5, 2
|
||||
ldr r2, _08047008
|
||||
adds r0, r2
|
||||
adds r0, r1
|
||||
ldr r4, [r0]
|
||||
adds r0, r4, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08046FF4
|
||||
ldr r0, [r4, 0x70]
|
||||
adds r2, r0, 0
|
||||
adds r2, 0x60
|
||||
ldrb r1, [r2]
|
||||
movs r0, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _08046FF4
|
||||
ldrb r0, [r2]
|
||||
ands r0, r7
|
||||
cmp r0, 0
|
||||
beq _08046FF4
|
||||
strb r6, [r2, 0x2]
|
||||
strb r6, [r2, 0x1]
|
||||
strb r6, [r2]
|
||||
_08046FF4:
|
||||
adds r5, 0x1
|
||||
cmp r5, 0x3
|
||||
ble _08046FBC
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08047000: .4byte gTeamInventory_203B460
|
||||
_08047004: .4byte gDungeonGlobalData
|
||||
_08047008: .4byte 0x0001357c
|
||||
thumb_func_end sub_8046F84
|
||||
|
||||
thumb_func_start sub_804700C
|
||||
sub_804700C:
|
||||
push {r4,r5,lr}
|
||||
movs r5, 0
|
||||
ldr r4, _08047078
|
||||
_08047012:
|
||||
lsls r1, r5, 2
|
||||
ldr r0, [r4]
|
||||
adds r2, r0, r1
|
||||
ldrb r1, [r2]
|
||||
movs r0, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0804702C
|
||||
adds r0, r2, 0
|
||||
movs r1, 0x46
|
||||
movs r2, 0
|
||||
bl xxx_init_itemslot_8090A8C
|
||||
_0804702C:
|
||||
adds r5, 0x1
|
||||
cmp r5, 0x13
|
||||
ble _08047012
|
||||
bl FillInventoryGaps
|
||||
movs r5, 0
|
||||
_08047038:
|
||||
ldr r0, _0804707C
|
||||
ldr r0, [r0]
|
||||
lsls r1, r5, 2
|
||||
ldr r2, _08047080
|
||||
adds r0, r2
|
||||
adds r0, r1
|
||||
ldr r4, [r0]
|
||||
adds r0, r4, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0804706C
|
||||
ldr r0, [r4, 0x70]
|
||||
adds r2, r0, 0
|
||||
adds r2, 0x60
|
||||
ldrb r1, [r2]
|
||||
movs r0, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _0804706C
|
||||
adds r0, r2, 0
|
||||
movs r1, 0x46
|
||||
movs r2, 0
|
||||
bl xxx_init_itemslot_8090A8C
|
||||
_0804706C:
|
||||
adds r5, 0x1
|
||||
cmp r5, 0x3
|
||||
ble _08047038
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08047078: .4byte gTeamInventory_203B460
|
||||
_0804707C: .4byte gDungeonGlobalData
|
||||
_08047080: .4byte 0x0001357c
|
||||
thumb_func_end sub_804700C
|
||||
|
||||
thumb_func_start sub_8047084
|
||||
sub_8047084:
|
||||
push {r4-r6,lr}
|
||||
adds r6, r0, 0
|
||||
movs r5, 0
|
||||
ldr r0, _080470E8
|
||||
ldr r2, [r0]
|
||||
movs r3, 0x1
|
||||
_08047090:
|
||||
ldrb r1, [r2]
|
||||
adds r0, r3, 0
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _080470A2
|
||||
ldrb r0, [r2]
|
||||
ands r0, r6
|
||||
cmp r0, 0
|
||||
bne _080470E2
|
||||
_080470A2:
|
||||
adds r2, 0x4
|
||||
adds r5, 0x1
|
||||
cmp r5, 0x13
|
||||
ble _08047090
|
||||
bl FillInventoryGaps
|
||||
movs r5, 0
|
||||
_080470B0:
|
||||
ldr r0, _080470EC
|
||||
ldr r0, [r0]
|
||||
lsls r1, r5, 2
|
||||
ldr r2, _080470F0
|
||||
adds r0, r2
|
||||
adds r0, r1
|
||||
ldr r4, [r0]
|
||||
adds r0, r4, 0
|
||||
bl EntityExists
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _080470F4
|
||||
ldr r0, [r4, 0x70]
|
||||
adds r2, r0, 0
|
||||
adds r2, 0x60
|
||||
ldrb r1, [r2]
|
||||
movs r0, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _080470F4
|
||||
ldrb r0, [r2]
|
||||
ands r0, r6
|
||||
cmp r0, 0
|
||||
beq _080470F4
|
||||
_080470E2:
|
||||
movs r0, 0x1
|
||||
b _080470FC
|
||||
.align 2, 0
|
||||
_080470E8: .4byte gTeamInventory_203B460
|
||||
_080470EC: .4byte gDungeonGlobalData
|
||||
_080470F0: .4byte 0x0001357c
|
||||
_080470F4:
|
||||
adds r5, 0x1
|
||||
cmp r5, 0x3
|
||||
ble _080470B0
|
||||
movs r0, 0
|
||||
_080470FC:
|
||||
pop {r4-r6}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8047084
|
||||
|
||||
thumb_func_start sub_8047104
|
||||
sub_8047104:
|
||||
push {r4-r6,lr}
|
||||
movs r6, 0
|
||||
movs r5, 0
|
||||
_0804710A:
|
||||
ldr r0, _08047154
|
||||
lsls r1, r6, 2
|
||||
ldr r0, [r0]
|
||||
adds r4, r0, r1
|
||||
ldrb r1, [r4]
|
||||
movs r0, 0x1
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _08047142
|
||||
ldrb r0, [r4, 0x2]
|
||||
cmp r0, 0x69
|
||||
bne _08047132
|
||||
adds r0, r4, 0
|
||||
bl GetMoneyValue
|
||||
bl AddToTeamMoney
|
||||
strb r5, [r4, 0x2]
|
||||
strb r5, [r4, 0x1]
|
||||
strb r5, [r4]
|
||||
_08047132:
|
||||
ldrb r1, [r4]
|
||||
movs r0, 0x2
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _08047142
|
||||
strb r5, [r4, 0x2]
|
||||
strb r5, [r4, 0x1]
|
||||
strb r5, [r4]
|
||||
_08047142:
|
||||
adds r6, 0x1
|
||||
cmp r6, 0x13
|
||||
ble _0804710A
|
||||
bl FillInventoryGaps
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08047154: .4byte gTeamInventory_203B460
|
||||
thumb_func_end sub_8047104
|
||||
|
||||
thumb_func_start sub_8047158
|
||||
sub_8047158:
|
||||
push {r4-r6,lr}
|
||||
|
||||
@@ -30,7 +30,8 @@ struct DungeonGlobalData
|
||||
u8 unk4;
|
||||
u8 fill5[0x7 - 0x5];
|
||||
u8 unk7;
|
||||
u8 fill8[0xF - 0x8];
|
||||
u8 unk8;
|
||||
u8 fill9[0xF - 0x9];
|
||||
/* 0xF */ bool8 inputAllowed; // Whether the game is currently accepting input. Set to false while action animations play.
|
||||
u8 fill10;
|
||||
u8 unk11;
|
||||
@@ -53,7 +54,9 @@ struct DungeonGlobalData
|
||||
u8 fill66C[0x671 - 0x66C];
|
||||
/* 0x671 */ bool8 monsterHouseActive;
|
||||
/* 0x672 */ u8 unk672;
|
||||
u8 fill673[0x363C - 0x673];
|
||||
u8 fill673[0x68A - 0x673];
|
||||
/* 0x68A */ u8 unk68A;
|
||||
u8 fill68B[0x363C - 0x68B];
|
||||
/* 0x363C */ u8 expYieldRankings[NUM_SPECIES];
|
||||
u8 fill37E3[0x37FC - 0x37D9];
|
||||
/* 0x37FC */ bool8 decoyActive;
|
||||
|
||||
@@ -117,6 +117,7 @@ void FillInventoryGaps();
|
||||
bool8 AddHeldItemToInventory(struct HeldItem* slot);
|
||||
bool8 IsNotMoneyOrUsedTMItem(u8 id);
|
||||
s32 FindItemInInventory(u8 itemIndex);
|
||||
bool8 IsHMItem(u8 id);
|
||||
|
||||
|
||||
void RestoreHeldItem(struct unkStruct_8094924*, struct HeldItem*);
|
||||
|
||||
@@ -193,6 +193,7 @@ void PrintColoredPokeNameToBuffer(u8 *buffer, struct PokemonStruct *pokemon, s32
|
||||
void PeekPokemonItem(s16 index_, struct HeldItem* item);
|
||||
void GivePokemonItem(s16 index_, struct HeldItem* item);
|
||||
bool8 IsPokemonRenamed(struct PokemonStruct* pokemon);
|
||||
bool8 CanMonLearnMove(u16 moveID, s16 _species);
|
||||
|
||||
u8 *GetCategoryString(s16 index);
|
||||
u8 GetPokemonSize(s16 index);
|
||||
|
||||
@@ -1,6 +1,38 @@
|
||||
#include "global.h"
|
||||
#include "dungeon_items.h"
|
||||
|
||||
#include "dungeon_capabilities.h"
|
||||
#include "dungeon_random.h"
|
||||
#include "dungeon_global_data.h"
|
||||
#include "dungeon_util.h"
|
||||
#include "team_inventory.h"
|
||||
#include "pokemon.h"
|
||||
|
||||
extern u8 gAvailablePokemonNames[];
|
||||
extern s32 gUnknown_810A3F0[];
|
||||
extern u8 *gUnknown_80FA408[];
|
||||
extern u8 *gUnknown_810531C[];
|
||||
extern u8 *gUnknown_8105360[];
|
||||
extern u8 *gUnknown_81053A8[];
|
||||
extern u8 *gUnknown_8105434[];
|
||||
|
||||
extern u8 sub_8046D70(void);
|
||||
extern s32 sub_8052B8C(u32, u8 *, u32);
|
||||
extern struct DungeonEntity *GetLeaderEntity(void);
|
||||
extern void sub_80861A8(void);
|
||||
extern void PrintFieldMessage(u32, u8 *, u32);
|
||||
extern void sub_803E708(u32, u32);
|
||||
extern void sub_80869E4(struct DungeonEntity *, u32, u32, u32);
|
||||
extern void sub_80416E0(struct Position32 *r0, u32, u32);
|
||||
extern void SetMessageArgument(u8 *r0, struct DungeonEntity *r1, u32);
|
||||
extern void sub_80421C0(struct DungeonEntity *, u32);
|
||||
extern void sub_80855E4(void *);
|
||||
extern void PlaySoundEffect(u32);
|
||||
extern void sub_804178C(u32);
|
||||
extern void sub_8040A84(void);
|
||||
|
||||
void MusicBoxCreation(void);
|
||||
|
||||
bool8 HasItem(struct DungeonEntity *pokemon, u8 itemIndex)
|
||||
{
|
||||
// Weird assignment to fix a regswap.
|
||||
@@ -19,3 +51,459 @@ bool8 HasItem(struct DungeonEntity *pokemon, u8 itemIndex)
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_8046CE4(u8 *param_1,s32 param_2)
|
||||
{
|
||||
s32 iVar1;
|
||||
s32 iVar2;
|
||||
|
||||
iVar1 = DungeonRandomCapped(100);
|
||||
for(iVar2 = 0; iVar2 < 200; iVar2++)
|
||||
{
|
||||
if (gUnknown_810A3F0[iVar1] <= param_2) {
|
||||
param_1[1] = iVar1;
|
||||
return;
|
||||
}
|
||||
iVar1 = iVar1 / 2;
|
||||
}
|
||||
param_1[1] = 1;
|
||||
}
|
||||
|
||||
void sub_8046D20(void)
|
||||
{
|
||||
u8 cVar1;
|
||||
|
||||
cVar1 = gDungeonGlobalData->unk8;
|
||||
gDungeonGlobalData->unk8 = sub_8046D70();
|
||||
if (((gDungeonGlobalData->unk8 == 1) && (cVar1 == 0)) &&
|
||||
(sub_8052B8C(0, *gUnknown_80FA408, 1) == 1)) {
|
||||
gDungeonGlobalData->unk4 = 1;
|
||||
gDungeonGlobalData->unk11 = 2;
|
||||
}
|
||||
else {
|
||||
MusicBoxCreation();
|
||||
}
|
||||
}
|
||||
|
||||
u8 sub_8046D70(void)
|
||||
{
|
||||
if(gDungeonGlobalData->unk68A)
|
||||
return 0;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
void MusicBoxCreation(void)
|
||||
{
|
||||
bool8 musicBoxOnce;
|
||||
bool8 createMusicBox;
|
||||
struct ItemSlot *pbVar3; // r2
|
||||
s32 iVar4;
|
||||
struct DungeonEntity *entity;
|
||||
|
||||
s32 indexes[3];
|
||||
|
||||
createMusicBox = FALSE;
|
||||
do {
|
||||
musicBoxOnce = FALSE;
|
||||
indexes[0] = -1;
|
||||
indexes[1] = -1;
|
||||
indexes[2] = -1;
|
||||
|
||||
for(iVar4 = 0, pbVar3 = &gTeamInventory_203B460->teamItems[iVar4]; iVar4 < 20; pbVar3++, iVar4++)
|
||||
{
|
||||
if (pbVar3->itemFlags & ITEM_FLAG_EXISTS) {
|
||||
if (pbVar3->itemIndex == ITEM_ID_ROCK_PART) {
|
||||
indexes[0] = iVar4;
|
||||
}
|
||||
if (pbVar3->itemIndex == ITEM_ID_ICE_PART) {
|
||||
indexes[1] = iVar4;
|
||||
}
|
||||
if (pbVar3->itemIndex == ITEM_ID_STEEL_PART) {
|
||||
indexes[2] = iVar4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((indexes[0] >= 0) && (indexes[1] >= 0) && (indexes[2] >= 0)) {
|
||||
|
||||
// NOTE: doesn't match here.. tried to register pin but still not perfect
|
||||
register struct ItemSlot *pbVar4 asm("r1");
|
||||
register struct ItemSlot *pbVar5 asm("r0");
|
||||
|
||||
musicBoxOnce = TRUE;
|
||||
createMusicBox = TRUE;
|
||||
|
||||
// clear out each of the parts
|
||||
pbVar4 = &gTeamInventory_203B460->teamItems[indexes[0]];
|
||||
pbVar4->itemIndex = 0;
|
||||
pbVar4->numItems = 0;
|
||||
pbVar4->itemFlags = 0;
|
||||
|
||||
pbVar5 = &gTeamInventory_203B460->teamItems[indexes[1]];
|
||||
pbVar5->itemIndex = 0;
|
||||
pbVar5->numItems = 0;
|
||||
pbVar5->itemFlags = 0;
|
||||
|
||||
pbVar5 = &gTeamInventory_203B460->teamItems[indexes[2]];
|
||||
pbVar5->itemIndex = 0;
|
||||
pbVar5->numItems = 0;
|
||||
pbVar5->itemFlags = 0;
|
||||
|
||||
// init the music box
|
||||
xxx_init_itemslot_8090A8C(&gTeamInventory_203B460->teamItems[indexes[0]], ITEM_ID_MUSIC_BOX, 0);
|
||||
}
|
||||
} while (musicBoxOnce);
|
||||
|
||||
FillInventoryGaps();
|
||||
|
||||
if (createMusicBox) {
|
||||
entity = GetLeaderEntity();
|
||||
sub_80855E4(sub_80861A8);
|
||||
gDungeonGlobalData->unk1356C = 1;
|
||||
PrintFieldMessage(0,*gUnknown_810531C,1);
|
||||
sub_803E708(0x3c,0x41);
|
||||
PrintFieldMessage(0,*gUnknown_8105360,1);
|
||||
sub_80869E4(entity,4,10,0);
|
||||
sub_80416E0(&entity->posPixel,0x10c,0);
|
||||
sub_80421C0(entity,0xd7);
|
||||
sub_803E708(0x3c,0x41);
|
||||
SetMessageArgument(gAvailablePokemonNames,entity,0);
|
||||
PrintFieldMessage(0,*gUnknown_81053A8,1);
|
||||
sub_803E708(10,0x41);
|
||||
PlaySoundEffect(0xd4);
|
||||
PrintFieldMessage(0,*gUnknown_8105434,1);
|
||||
sub_803E708(10,0x41);
|
||||
sub_804178C(1);
|
||||
gDungeonGlobalData->unk1356C = 0;
|
||||
sub_8040A84();
|
||||
}
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
void MusicBoxCreation(void)
|
||||
{
|
||||
asm_unified(
|
||||
"\tpush {r4-r7,lr}\n"
|
||||
"\tsub sp, 0xC\n"
|
||||
"\tmovs r6, 0\n"
|
||||
"\tldr r5, _08046EDC\n"
|
||||
"\tmovs r4, 0\n"
|
||||
"_08046D96:\n"
|
||||
"\tmovs r7, 0\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tnegs r0, r0\n"
|
||||
"\tstr r0, [sp]\n"
|
||||
"\tstr r0, [sp, 0x4]\n"
|
||||
"\tstr r0, [sp, 0x8]\n"
|
||||
"\tmovs r3, 0\n"
|
||||
"\tldr r2, [r5]\n"
|
||||
"_08046DA6:\n"
|
||||
"\tldrb r1, [r2]\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tands r0, r1\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tbeq _08046DC8\n"
|
||||
"\tldrb r0, [r2, 0x2]\n"
|
||||
"\tcmp r0, 0x79\n"
|
||||
"\tbne _08046DB8\n"
|
||||
"\tstr r3, [sp]\n"
|
||||
"_08046DB8:\n"
|
||||
"\tldrb r0, [r2, 0x2]\n"
|
||||
"\tcmp r0, 0x77\n"
|
||||
"\tbne _08046DC0\n"
|
||||
"\tstr r3, [sp, 0x4]\n"
|
||||
"_08046DC0:\n"
|
||||
"\tldrb r0, [r2, 0x2]\n"
|
||||
"\tcmp r0, 0x78\n"
|
||||
"\tbne _08046DC8\n"
|
||||
"\tstr r3, [sp, 0x8]\n"
|
||||
"_08046DC8:\n"
|
||||
"\tadds r2, 0x4\n"
|
||||
"\tadds r3, 0x1\n"
|
||||
"\tcmp r3, 0x13\n"
|
||||
"\tble _08046DA6\n"
|
||||
"\tldr r1, [sp]\n"
|
||||
"\tcmp r1, 0\n"
|
||||
"\tblt _08046E1E\n"
|
||||
"\tldr r0, [sp, 0x4]\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tblt _08046E1E\n"
|
||||
"\tldr r0, [sp, 0x8]\n"
|
||||
"\tcmp r0, 0\n"
|
||||
"\tblt _08046E1E\n"
|
||||
"\tmovs r7, 0x1\n"
|
||||
"\tmovs r6, 0x1\n"
|
||||
"\tlsls r1, 2\n"
|
||||
"\tldr r0, [r5]\n"
|
||||
"\tadds r1, r0\n"
|
||||
"\tstrb r4, [r1, 0x2]\n"
|
||||
"\tstrb r4, [r1, 0x1]\n"
|
||||
"\tstrb r4, [r1]\n"
|
||||
"\tldr r0, [sp, 0x4]\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tldr r1, [r5]\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tstrb r4, [r0, 0x2]\n"
|
||||
"\tstrb r4, [r0, 0x1]\n"
|
||||
"\tstrb r4, [r0]\n"
|
||||
"\tldr r0, [sp, 0x8]\n"
|
||||
"\tlsls r0, 2\n"
|
||||
"\tldr r1, [r5]\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tstrb r4, [r0, 0x2]\n"
|
||||
"\tstrb r4, [r0, 0x1]\n"
|
||||
"\tstrb r4, [r0]\n"
|
||||
"\tldr r1, [sp]\n"
|
||||
"\tlsls r1, 2\n"
|
||||
"\tldr r0, [r5]\n"
|
||||
"\tadds r0, r1\n"
|
||||
"\tmovs r1, 0x7A\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tbl xxx_init_itemslot_8090A8C\n"
|
||||
"_08046E1E:\n"
|
||||
"\tcmp r7, 0\n"
|
||||
"\tbne _08046D96\n"
|
||||
"\tbl FillInventoryGaps\n"
|
||||
"\tcmp r6, 0\n"
|
||||
"\tbeq _08046ED4\n"
|
||||
"\tbl GetLeaderEntity\n"
|
||||
"\tadds r4, r0, 0\n"
|
||||
"\tldr r0, _08046EE0\n"
|
||||
"\tbl sub_80855E4\n"
|
||||
"\tldr r6, _08046EE4\n"
|
||||
"\tldr r0, [r6]\n"
|
||||
"\tldr r5, _08046EE8\n"
|
||||
"\tadds r0, r5\n"
|
||||
"\tmovs r1, 0x1\n"
|
||||
"\tstrb r1, [r0]\n"
|
||||
"\tldr r0, _08046EEC\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"\tmovs r2, 0x1\n"
|
||||
"\tbl PrintFieldMessage\n"
|
||||
"\tmovs r0, 0x3C\n"
|
||||
"\tmovs r1, 0x41\n"
|
||||
"\tbl sub_803E708\n"
|
||||
"\tldr r0, _08046EF0\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"\tmovs r2, 0x1\n"
|
||||
"\tbl PrintFieldMessage\n"
|
||||
"\tadds r0, r4, 0\n"
|
||||
"\tmovs r1, 0x4\n"
|
||||
"\tmovs r2, 0xA\n"
|
||||
"\tmovs r3, 0\n"
|
||||
"\tbl sub_80869E4\n"
|
||||
"\tadds r0, r4, 0\n"
|
||||
"\tadds r0, 0xC\n"
|
||||
"\tmovs r1, 0x86\n"
|
||||
"\tlsls r1, 1\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tbl sub_80416E0\n"
|
||||
"\tadds r0, r4, 0\n"
|
||||
"\tmovs r1, 0xD7\n"
|
||||
"\tbl sub_80421C0\n"
|
||||
"\tmovs r0, 0x3C\n"
|
||||
"\tmovs r1, 0x41\n"
|
||||
"\tbl sub_803E708\n"
|
||||
"\tldr r0, _08046EF4\n"
|
||||
"\tadds r1, r4, 0\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tbl SetMessageArgument\n"
|
||||
"\tldr r0, _08046EF8\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"\tmovs r2, 0x1\n"
|
||||
"\tbl PrintFieldMessage\n"
|
||||
"\tmovs r0, 0xA\n"
|
||||
"\tmovs r1, 0x41\n"
|
||||
"\tbl sub_803E708\n"
|
||||
"\tmovs r0, 0xD4\n"
|
||||
"\tbl PlaySoundEffect\n"
|
||||
"\tldr r0, _08046EFC\n"
|
||||
"\tldr r1, [r0]\n"
|
||||
"\tmovs r0, 0\n"
|
||||
"\tmovs r2, 0x1\n"
|
||||
"\tbl PrintFieldMessage\n"
|
||||
"\tmovs r0, 0xA\n"
|
||||
"\tmovs r1, 0x41\n"
|
||||
"\tbl sub_803E708\n"
|
||||
"\tmovs r0, 0x1\n"
|
||||
"\tbl sub_804178C\n"
|
||||
"\tldr r0, [r6]\n"
|
||||
"\tadds r0, r5\n"
|
||||
"\tstrb r7, [r0]\n"
|
||||
"\tbl sub_8040A84\n"
|
||||
"_08046ED4:\n"
|
||||
"\tadd sp, 0xC\n"
|
||||
"\tpop {r4-r7}\n"
|
||||
"\tpop {r0}\n"
|
||||
"\tbx r0\n"
|
||||
"\t.align 2, 0\n"
|
||||
"_08046EDC: .4byte gTeamInventory_203B460\n"
|
||||
"_08046EE0: .4byte sub_80861A8\n"
|
||||
"_08046EE4: .4byte gDungeonGlobalData\n"
|
||||
"_08046EE8: .4byte 0x0001356c\n"
|
||||
"_08046EEC: .4byte gUnknown_810531C\n"
|
||||
"_08046EF0: .4byte gUnknown_8105360\n"
|
||||
"_08046EF4: .4byte gAvailablePokemonNames\n"
|
||||
"_08046EF8: .4byte gUnknown_81053A8\n"
|
||||
"_08046EFC: .4byte gUnknown_8105434"
|
||||
);
|
||||
}
|
||||
#endif
|
||||
|
||||
bool8 sub_8046F00(struct ItemSlot *item)
|
||||
{
|
||||
bool8 canLearnMove;
|
||||
bool8 cannotMove;
|
||||
u16 moveID;
|
||||
struct DungeonEntity *entity;
|
||||
s32 index;
|
||||
|
||||
if (GetItemType(item->itemIndex) == ITEM_TYPE_TM) {
|
||||
moveID = GetItemMove(item->itemIndex);
|
||||
if (!IsHMItem(item->itemIndex)) {
|
||||
for(index = 0; index < MAX_TEAM_MEMBERS; index++)
|
||||
{
|
||||
entity = gDungeonGlobalData->teamPokemon[index];
|
||||
if (EntityExists(entity)) {
|
||||
canLearnMove = CanMonLearnMove(moveID, entity->entityData->entityID);
|
||||
cannotMove = CannotMove(entity, FALSE);
|
||||
if (cannotMove) {
|
||||
canLearnMove = FALSE;
|
||||
}
|
||||
if (canLearnMove) return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_8046F84(s32 itemFlag)
|
||||
{
|
||||
struct ItemSlot *item;
|
||||
struct DungeonEntity *entity;
|
||||
struct DungeonEntityData *entityData;
|
||||
s32 index;
|
||||
|
||||
for(index = 0; index < INVENTORY_SIZE; index++)
|
||||
{
|
||||
item = &gTeamInventory_203B460->teamItems[index];
|
||||
if ((item->itemFlags & ITEM_FLAG_EXISTS) && (item->itemFlags & itemFlag)) {
|
||||
item->itemIndex = 0;
|
||||
item->numItems = 0;
|
||||
item->itemFlags = 0;
|
||||
}
|
||||
}
|
||||
FillInventoryGaps();
|
||||
|
||||
for(index = 0; index < 4; index++)
|
||||
{
|
||||
entity = gDungeonGlobalData->teamPokemon[index];
|
||||
if (EntityExists(entity)) {
|
||||
entityData = entity->entityData;
|
||||
item = &entityData->heldItem;
|
||||
if ((item->itemFlags & ITEM_FLAG_EXISTS) && (item->itemFlags & itemFlag)) {
|
||||
item->itemIndex = 0;
|
||||
item->numItems = 0;
|
||||
item->itemFlags = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_804700C(void)
|
||||
{
|
||||
struct ItemSlot *item;
|
||||
struct DungeonEntity *entity;
|
||||
struct DungeonEntityData *entityData;
|
||||
s32 index;
|
||||
|
||||
for(index = 0; index < INVENTORY_SIZE; index++)
|
||||
{
|
||||
item = &gTeamInventory_203B460->teamItems[index];
|
||||
if ((item->itemFlags & ITEM_FLAG_EXISTS)) {
|
||||
xxx_init_itemslot_8090A8C(item, ITEM_ID_PLAIN_SEED, 0);
|
||||
}
|
||||
}
|
||||
FillInventoryGaps();
|
||||
|
||||
for(index = 0; index < MAX_TEAM_MEMBERS; index++)
|
||||
{
|
||||
entity = gDungeonGlobalData->teamPokemon[index];
|
||||
if (EntityExists(entity)) {
|
||||
entityData = entity->entityData;
|
||||
item = &entityData->heldItem;
|
||||
if ((item->itemFlags & ITEM_FLAG_EXISTS)) {
|
||||
xxx_init_itemslot_8090A8C(item, ITEM_ID_PLAIN_SEED, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool8 sub_8047084(s32 itemFlag)
|
||||
{
|
||||
struct ItemSlot *item;
|
||||
struct DungeonEntity *entity;
|
||||
struct DungeonEntityData *entityData;
|
||||
s32 index;
|
||||
|
||||
// NEED THIS ORDERING TO MATCH
|
||||
index = 0;
|
||||
item = &gTeamInventory_203B460->teamItems[index];
|
||||
|
||||
for(index = 0; index < INVENTORY_SIZE; item++, index++)
|
||||
{
|
||||
if ((item->itemFlags & ITEM_FLAG_EXISTS) && (item->itemFlags & itemFlag)) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
FillInventoryGaps();
|
||||
|
||||
for(index = 0; index < MAX_TEAM_MEMBERS; index++)
|
||||
{
|
||||
entity = gDungeonGlobalData->teamPokemon[index];
|
||||
if (EntityExists(entity)) {
|
||||
entityData = entity->entityData;
|
||||
item = &entityData->heldItem;
|
||||
if ((item->itemFlags & ITEM_FLAG_EXISTS) && (item->itemFlags & itemFlag)) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_8047104(void)
|
||||
{
|
||||
struct ItemSlot *item;
|
||||
s32 index;
|
||||
|
||||
for(index = 0; index < INVENTORY_SIZE; index++)
|
||||
{
|
||||
item = &gTeamInventory_203B460->teamItems[index];
|
||||
if (item->itemFlags & ITEM_FLAG_EXISTS)
|
||||
{
|
||||
if(item->itemIndex == ITEM_ID_POKE)
|
||||
{
|
||||
AddToTeamMoney(GetMoneyValue(item));
|
||||
item->itemIndex = 0;
|
||||
item->numItems = 0;
|
||||
item->itemFlags = 0;
|
||||
}
|
||||
if(item->itemFlags & ITEM_FLAG_FOR_SALE)
|
||||
{
|
||||
item->itemIndex = 0;
|
||||
item->numItems = 0;
|
||||
item->itemFlags = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
FillInventoryGaps();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user