mirror of
https://github.com/pret/pmd-red.git
synced 2026-09-07 08:35:47 -05:00
More item related decomp (#45)
* decompile sub_80918EC * some more item related functions * more item functions * more decomp, fix types in other places * more small functions * more item related decomp * one more weird branching item function * fix global.h includes * figured out branch pattern * decompile sub_8090F58 * make temporary struct for function * 🦀 items.s is gone 🦀 * some renaming * rename some obvious item related constants * fix spelling error
This commit is contained in:
@@ -97,7 +97,7 @@ sub_8027D40:
|
||||
add r4, sp, 0x10
|
||||
adds r0, r4, 0
|
||||
adds r1, r5, 0
|
||||
bl sub_8090B64
|
||||
bl HeldItemToSlot
|
||||
movs r5, 0
|
||||
str r5, [sp, 0x4]
|
||||
add r0, sp, 0x4
|
||||
|
||||
@@ -533,7 +533,7 @@ _0803C59E:
|
||||
beq _0803C5C6
|
||||
ldrb r0, [r6, 0x4]
|
||||
ldrb r1, [r5, 0x2]
|
||||
bl sub_8091E60
|
||||
bl xxx_bit_lut_lookup_8091E50
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0803C5C6
|
||||
@@ -605,7 +605,7 @@ _0803C624:
|
||||
beq _0803C64C
|
||||
ldrb r0, [r6, 0x4]
|
||||
ldrb r1, [r4, 0x2]
|
||||
bl sub_8091E60
|
||||
bl xxx_bit_lut_lookup_8091E50
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0803C64C
|
||||
|
||||
@@ -6366,7 +6366,7 @@ sub_8045C28:
|
||||
lsrs r4, r1, 24
|
||||
adds r1, r4, 0
|
||||
movs r2, 0
|
||||
bl sub_8090A8C
|
||||
bl xxx_init_itemslot_8090A8C
|
||||
movs r7, 0
|
||||
adds r0, r4, 0
|
||||
bl IsNotSpecialItem
|
||||
@@ -8668,7 +8668,7 @@ _08046DC8:
|
||||
adds r0, r1
|
||||
movs r1, 0x7A
|
||||
movs r2, 0
|
||||
bl sub_8090A8C
|
||||
bl xxx_init_itemslot_8090A8C
|
||||
_08046E1E:
|
||||
cmp r7, 0
|
||||
bne _08046D96
|
||||
@@ -8917,7 +8917,7 @@ _08047012:
|
||||
adds r0, r2, 0
|
||||
movs r1, 0x46
|
||||
movs r2, 0
|
||||
bl sub_8090A8C
|
||||
bl xxx_init_itemslot_8090A8C
|
||||
_0804702C:
|
||||
adds r5, 0x1
|
||||
cmp r5, 0x13
|
||||
@@ -8948,7 +8948,7 @@ _08047038:
|
||||
adds r0, r2, 0
|
||||
movs r1, 0x46
|
||||
movs r2, 0
|
||||
bl sub_8090A8C
|
||||
bl xxx_init_itemslot_8090A8C
|
||||
_0804706C:
|
||||
adds r5, 0x1
|
||||
cmp r5, 0x3
|
||||
|
||||
@@ -19331,13 +19331,13 @@ sub_805193C:
|
||||
mov r0, sp
|
||||
movs r1, 0x76
|
||||
movs r2, 0
|
||||
bl sub_8090A8C
|
||||
bl xxx_init_itemslot_8090A8C
|
||||
b _08051974
|
||||
_0805196A:
|
||||
mov r0, sp
|
||||
adds r1, r5, 0
|
||||
movs r2, 0
|
||||
bl sub_8090A8C
|
||||
bl xxx_init_itemslot_8090A8C
|
||||
_08051974:
|
||||
mov r0, sp
|
||||
ldrb r0, [r0]
|
||||
|
||||
@@ -8213,7 +8213,7 @@ _0805B75E:
|
||||
lsrs r1, 24
|
||||
adds r0, r2, 0
|
||||
movs r2, 0
|
||||
bl sub_8090A8C
|
||||
bl xxx_init_itemslot_8090A8C
|
||||
movs r7, 0x1
|
||||
_0805B790:
|
||||
adds r4, 0x1
|
||||
@@ -8238,7 +8238,7 @@ _0805B790:
|
||||
lsrs r1, 24
|
||||
mov r0, r8
|
||||
movs r2, 0
|
||||
bl sub_8090A8C
|
||||
bl xxx_init_itemslot_8090A8C
|
||||
movs r7, 0x1
|
||||
_0805B7C2:
|
||||
cmp r7, 0
|
||||
@@ -40347,7 +40347,7 @@ _0806BAFC:
|
||||
beq _0806BB24
|
||||
adds r0, r4, 0
|
||||
movs r2, 0
|
||||
bl sub_8090A8C
|
||||
bl xxx_init_itemslot_8090A8C
|
||||
ldr r2, [sp, 0x24]
|
||||
strb r5, [r2]
|
||||
_0806BB24:
|
||||
|
||||
@@ -554,7 +554,7 @@ _08095F34:
|
||||
beq _08095F48
|
||||
lsrs r1, r4, 24
|
||||
adds r0, r7, 0
|
||||
bl sub_8091E60
|
||||
bl xxx_bit_lut_lookup_8091E50
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08095F6A
|
||||
|
||||
@@ -13139,7 +13139,7 @@ _08025668:
|
||||
ldr r1, [r5]
|
||||
adds r1, 0x14
|
||||
add r0, sp, 0x8
|
||||
bl sub_8090B64
|
||||
bl HeldItemToSlot
|
||||
add r0, sp, 0x8
|
||||
bl sub_801B3C0
|
||||
b _08025720
|
||||
@@ -13973,7 +13973,7 @@ _08025D24:
|
||||
ldr r1, [r5]
|
||||
adds r1, 0x14
|
||||
adds r0, r4, 0
|
||||
bl sub_8090B64
|
||||
bl HeldItemToSlot
|
||||
movs r1, 0
|
||||
str r1, [sp]
|
||||
mov r0, sp
|
||||
@@ -14144,7 +14144,7 @@ sub_8025E68:
|
||||
add r4, sp, 0x10
|
||||
adds r0, r4, 0
|
||||
adds r1, r5, 0
|
||||
bl sub_8090B64
|
||||
bl HeldItemToSlot
|
||||
movs r5, 0
|
||||
str r5, [sp, 0x4]
|
||||
add r0, sp, 0x4
|
||||
@@ -14721,7 +14721,7 @@ _08026350:
|
||||
ldr r1, [r4]
|
||||
adds r1, 0x10
|
||||
add r0, sp, 0x14
|
||||
bl sub_8090B64
|
||||
bl HeldItemToSlot
|
||||
add r0, sp, 0x14
|
||||
bl sub_801B3C0
|
||||
b _080264BA
|
||||
@@ -15876,7 +15876,7 @@ _08026C84:
|
||||
ldr r1, [r5]
|
||||
adds r1, 0x10
|
||||
adds r0, r4, 0
|
||||
bl sub_8090B64
|
||||
bl HeldItemToSlot
|
||||
movs r1, 0
|
||||
str r1, [sp]
|
||||
mov r0, sp
|
||||
@@ -16027,7 +16027,7 @@ sub_8026DAC:
|
||||
add r4, sp, 0x10
|
||||
adds r0, r4, 0
|
||||
adds r1, r5, 0
|
||||
bl sub_8090B64
|
||||
bl HeldItemToSlot
|
||||
movs r5, 0
|
||||
str r5, [sp, 0x4]
|
||||
add r0, sp, 0x4
|
||||
|
||||
352
asm/items.s
352
asm/items.s
@@ -1,352 +0,0 @@
|
||||
.include "constants/gba_constants.inc"
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_8090E14
|
||||
sub_8090E14:
|
||||
push {r4-r7,lr}
|
||||
sub sp, 0x50
|
||||
adds r6, r0, 0
|
||||
adds r5, r1, 0
|
||||
adds r7, r2, 0
|
||||
movs r4, 0
|
||||
cmp r7, 0
|
||||
beq _08090E2C
|
||||
ldrb r1, [r7, 0x8]
|
||||
negs r0, r1
|
||||
orrs r0, r1
|
||||
lsrs r4, r0, 31
|
||||
_08090E2C:
|
||||
ldrb r0, [r5, 0x2]
|
||||
bl GetItemType
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08090E3E
|
||||
cmp r4, 0
|
||||
bne _08090E50
|
||||
b _08090E70
|
||||
_08090E3E:
|
||||
ldrb r0, [r5, 0x2]
|
||||
bl GetItemType
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x1
|
||||
bne _08090E90
|
||||
cmp r4, 0
|
||||
beq _08090E70
|
||||
_08090E50:
|
||||
ldr r1, _08090E68
|
||||
ldrb r0, [r5, 0x2]
|
||||
ldr r2, _08090E6C
|
||||
ldr r2, [r2]
|
||||
lsls r0, 5
|
||||
adds r0, r2
|
||||
ldr r2, [r0]
|
||||
ldrb r3, [r5, 0x1]
|
||||
mov r0, sp
|
||||
bl ExpandPlaceholdersBuffer
|
||||
b _08090EC4
|
||||
.align 2, 0
|
||||
_08090E68: .4byte gUnknown_8109770
|
||||
_08090E6C: .4byte gItemParametersData
|
||||
_08090E70:
|
||||
ldr r1, _08090E88
|
||||
ldrb r0, [r5, 0x2]
|
||||
ldr r2, _08090E8C
|
||||
ldr r2, [r2]
|
||||
lsls r0, 5
|
||||
adds r0, r2
|
||||
ldr r2, [r0]
|
||||
mov r0, sp
|
||||
bl ExpandPlaceholdersBuffer
|
||||
b _08090EC4
|
||||
.align 2, 0
|
||||
_08090E88: .4byte gUnknown_8109778
|
||||
_08090E8C: .4byte gItemParametersData
|
||||
_08090E90:
|
||||
ldrb r0, [r5, 0x2]
|
||||
cmp r0, 0x69
|
||||
bne _08090EB0
|
||||
ldr r4, _08090EAC
|
||||
adds r0, r5, 0
|
||||
bl GetMoneyValue
|
||||
adds r2, r0, 0
|
||||
mov r0, sp
|
||||
adds r1, r4, 0
|
||||
bl ExpandPlaceholdersBuffer
|
||||
b _08090EC4
|
||||
.align 2, 0
|
||||
_08090EAC: .4byte gUnknown_810977C
|
||||
_08090EB0:
|
||||
ldrb r0, [r5, 0x2]
|
||||
ldr r1, _08090F2C
|
||||
ldr r1, [r1]
|
||||
lsls r0, 5
|
||||
adds r0, r1
|
||||
ldr r1, [r0]
|
||||
mov r0, sp
|
||||
movs r2, 0x50
|
||||
bl strncpy
|
||||
_08090EC4:
|
||||
ldrb r1, [r5]
|
||||
movs r0, 0x8
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _08090EE2
|
||||
ldr r1, _08090F30
|
||||
adds r0, r6, 0
|
||||
mov r2, sp
|
||||
bl ExpandPlaceholdersBuffer
|
||||
mov r0, sp
|
||||
adds r1, r6, 0
|
||||
movs r2, 0x50
|
||||
bl strncpy
|
||||
_08090EE2:
|
||||
cmp r7, 0
|
||||
beq _08090F38
|
||||
ldrb r0, [r7, 0x4]
|
||||
cmp r0, 0
|
||||
beq _08090F0A
|
||||
ldrb r1, [r5]
|
||||
movs r0, 0x10
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _08090F0A
|
||||
ldr r1, _08090F34
|
||||
adds r0, r6, 0
|
||||
mov r2, sp
|
||||
bl ExpandPlaceholdersBuffer
|
||||
mov r0, sp
|
||||
adds r1, r6, 0
|
||||
movs r2, 0x50
|
||||
bl strncpy
|
||||
_08090F0A:
|
||||
ldr r0, [r7]
|
||||
cmp r0, 0x1
|
||||
beq _08090F14
|
||||
cmp r0, 0x3
|
||||
bne _08090F44
|
||||
_08090F14:
|
||||
ldrb r1, [r5]
|
||||
movs r0, 0x2
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
beq _08090F38
|
||||
adds r0, r6, 0
|
||||
mov r1, sp
|
||||
adds r2, r5, 0
|
||||
adds r3, r7, 0
|
||||
bl sub_8090F58
|
||||
b _08090F50
|
||||
.align 2, 0
|
||||
_08090F2C: .4byte gItemParametersData
|
||||
_08090F30: .4byte gUnknown_8109784
|
||||
_08090F34: .4byte gUnknown_810978C
|
||||
_08090F38:
|
||||
adds r0, r6, 0
|
||||
mov r1, sp
|
||||
movs r2, 0x50
|
||||
bl strncpy
|
||||
b _08090F50
|
||||
_08090F44:
|
||||
adds r0, r6, 0
|
||||
mov r1, sp
|
||||
adds r2, r5, 0
|
||||
adds r3, r7, 0
|
||||
bl sub_8090F58
|
||||
_08090F50:
|
||||
add sp, 0x50
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_8090E14
|
||||
|
||||
thumb_func_start sub_8090F58
|
||||
sub_8090F58:
|
||||
push {r4-r6,lr}
|
||||
sub sp, 0x2C
|
||||
adds r5, r0, 0
|
||||
adds r6, r1, 0
|
||||
adds r0, r2, 0
|
||||
adds r4, r3, 0
|
||||
cmp r4, 0
|
||||
bne _08090F6C
|
||||
adds r0, r5, 0
|
||||
b _08090F94
|
||||
_08090F6C:
|
||||
ldr r1, [r4]
|
||||
cmp r1, 0x1
|
||||
bcc _08090F8A
|
||||
cmp r1, 0x2
|
||||
bhi _08090F7E
|
||||
bl GetStackBuyValue
|
||||
adds r1, r0, 0
|
||||
b _08090F8C
|
||||
_08090F7E:
|
||||
cmp r1, 0x4
|
||||
bhi _08090F8A
|
||||
bl GetStackSellValue
|
||||
adds r1, r0, 0
|
||||
b _08090F8C
|
||||
_08090F8A:
|
||||
movs r1, 0
|
||||
_08090F8C:
|
||||
cmp r1, 0
|
||||
bne _08090F9C
|
||||
adds r0, r5, 0
|
||||
adds r1, r6, 0
|
||||
_08090F94:
|
||||
movs r2, 0x50
|
||||
bl strncpy
|
||||
b _08090FDE
|
||||
_08090F9C:
|
||||
movs r2, 0x6
|
||||
ldrsh r0, [r4, r2]
|
||||
cmp r0, 0
|
||||
beq _08090FC8
|
||||
adds r0, r1, 0
|
||||
add r1, sp, 0x4
|
||||
movs r2, 0x1
|
||||
bl sub_8090FEC
|
||||
ldr r1, _08090FC4
|
||||
movs r0, 0x6
|
||||
ldrsh r3, [r4, r0]
|
||||
add r2, sp, 0x4
|
||||
str r2, [sp]
|
||||
adds r0, r5, 0
|
||||
adds r2, r6, 0
|
||||
bl ExpandPlaceholdersBuffer
|
||||
b _08090FDE
|
||||
.align 2, 0
|
||||
_08090FC4: .4byte gUnknown_8109794
|
||||
_08090FC8:
|
||||
adds r0, r1, 0
|
||||
add r1, sp, 0x4
|
||||
movs r2, 0
|
||||
bl sub_8090FEC
|
||||
ldr r1, _08090FE8
|
||||
adds r0, r5, 0
|
||||
adds r2, r6, 0
|
||||
add r3, sp, 0x4
|
||||
bl ExpandPlaceholdersBuffer
|
||||
_08090FDE:
|
||||
add sp, 0x2C
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_08090FE8: .4byte gUnknown_81097A4
|
||||
thumb_func_end sub_8090F58
|
||||
|
||||
thumb_func_start sub_8090FEC
|
||||
sub_8090FEC:
|
||||
push {r4-r7,lr}
|
||||
mov r7, r10
|
||||
mov r6, r9
|
||||
mov r5, r8
|
||||
push {r5-r7}
|
||||
adds r5, r0, 0
|
||||
adds r4, r1, 0
|
||||
lsls r2, 24
|
||||
lsrs r2, 24
|
||||
mov r10, r2
|
||||
movs r0, 0
|
||||
mov r8, r0
|
||||
movs r6, 0
|
||||
movs r2, 0
|
||||
ldr r1, _08091050
|
||||
mov r9, r1
|
||||
mov r12, r9
|
||||
_0809100E:
|
||||
movs r1, 0
|
||||
lsls r3, r2, 2
|
||||
ldr r7, _08091054
|
||||
adds r0, r3, r7
|
||||
ldr r0, [r0]
|
||||
adds r7, r2, 0x1
|
||||
cmp r5, r0
|
||||
blt _0809102C
|
||||
ldr r2, _08091054
|
||||
_08091020:
|
||||
adds r0, r3, r2
|
||||
ldr r0, [r0]
|
||||
subs r5, r0
|
||||
adds r1, 0x1
|
||||
cmp r5, r0
|
||||
bge _08091020
|
||||
_0809102C:
|
||||
cmp r1, 0x9
|
||||
ble _08091032
|
||||
movs r1, 0x9
|
||||
_08091032:
|
||||
cmp r1, 0
|
||||
beq _0809105C
|
||||
movs r0, 0x1
|
||||
mov r8, r0
|
||||
lsls r1, 1
|
||||
mov r2, r12
|
||||
adds r0, r1, r2
|
||||
ldrb r0, [r0]
|
||||
strb r0, [r4]
|
||||
adds r4, 0x1
|
||||
ldr r0, _08091058
|
||||
adds r1, r0
|
||||
ldrb r0, [r1]
|
||||
b _0809106C
|
||||
.align 2, 0
|
||||
_08091050: .4byte gUnknown_81097C4
|
||||
_08091054: .4byte gUnknown_81097B0
|
||||
_08091058: .4byte gUnknown_81097C5
|
||||
_0809105C:
|
||||
mov r1, r8
|
||||
cmp r1, 0
|
||||
beq _08091074
|
||||
mov r2, r12
|
||||
ldrb r0, [r2]
|
||||
strb r0, [r4]
|
||||
adds r4, 0x1
|
||||
ldrb r0, [r2, 0x1]
|
||||
_0809106C:
|
||||
strb r0, [r4]
|
||||
adds r4, 0x1
|
||||
adds r6, 0x1
|
||||
b _08091080
|
||||
_08091074:
|
||||
mov r0, r10
|
||||
cmp r0, 0
|
||||
beq _08091080
|
||||
movs r0, 0x60
|
||||
strb r0, [r4]
|
||||
adds r4, 0x1
|
||||
_08091080:
|
||||
adds r2, r7, 0
|
||||
cmp r2, 0x4
|
||||
ble _0809100E
|
||||
lsls r1, r5, 1
|
||||
mov r2, r9
|
||||
adds r0, r1, r2
|
||||
ldrb r0, [r0]
|
||||
strb r0, [r4]
|
||||
adds r4, 0x1
|
||||
mov r0, r9
|
||||
adds r0, 0x1
|
||||
adds r1, r0
|
||||
ldrb r0, [r1]
|
||||
strb r0, [r4]
|
||||
adds r6, 0x1
|
||||
movs r0, 0
|
||||
strb r0, [r4, 0x1]
|
||||
adds r0, r6, 0
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
mov r9, r4
|
||||
mov r10, r5
|
||||
pop {r4-r7}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8090FEC
|
||||
|
||||
.align 2,0
|
||||
1009
asm/items_1.s
1009
asm/items_1.s
File diff suppressed because it is too large
Load Diff
@@ -661,7 +661,7 @@ _080187E0:
|
||||
adds r0, 0x8
|
||||
ldrb r1, [r1, 0x10]
|
||||
movs r2, 0
|
||||
bl sub_8090A8C
|
||||
bl xxx_init_itemslot_8090A8C
|
||||
ldr r1, [r4]
|
||||
movs r0, 0x1
|
||||
strb r0, [r1, 0x9]
|
||||
@@ -680,7 +680,7 @@ _0801880C:
|
||||
adds r0, 0x8
|
||||
ldrb r1, [r1, 0x10]
|
||||
movs r2, 0
|
||||
bl sub_8090A8C
|
||||
bl xxx_init_itemslot_8090A8C
|
||||
ldr r1, [r4]
|
||||
movs r0, 0x1
|
||||
strb r0, [r1, 0x9]
|
||||
|
||||
@@ -1223,7 +1223,7 @@ _08019874:
|
||||
adds r0, r1, 0
|
||||
adds r0, 0x20
|
||||
ldrb r0, [r0]
|
||||
bl sub_809185C
|
||||
bl xxx_get_inv_unk230_at_809185C
|
||||
bl sub_8091274
|
||||
ldr r0, [r4]
|
||||
adds r0, 0x20
|
||||
@@ -1237,13 +1237,13 @@ _080198AC:
|
||||
adds r0, r1, 0
|
||||
adds r0, 0x21
|
||||
ldrb r0, [r0]
|
||||
bl sub_8091A90
|
||||
bl xxx_get_unk250_at_8091A90
|
||||
bl sub_8091274
|
||||
ldr r0, [r4]
|
||||
adds r0, 0x21
|
||||
ldrb r0, [r0]
|
||||
bl sub_8091A74
|
||||
bl sub_8091AA8
|
||||
bl xxx_init_inv_unk250_at_8091A74
|
||||
bl xxx_fill_inv_unk250_gaps_8091AA8
|
||||
_080198C8:
|
||||
movs r0, 0xA6
|
||||
lsls r0, 1
|
||||
@@ -1419,7 +1419,7 @@ _08019A04:
|
||||
ldr r0, [r4]
|
||||
adds r0, 0x20
|
||||
ldrb r0, [r0]
|
||||
bl sub_809185C
|
||||
bl xxx_get_inv_unk230_at_809185C
|
||||
b _08019A3C
|
||||
.align 2, 0
|
||||
_08019A24: .4byte gUnknown_203B210
|
||||
@@ -1431,7 +1431,7 @@ _08019A28:
|
||||
ldr r0, [r4]
|
||||
adds r0, 0x21
|
||||
ldrb r0, [r0]
|
||||
bl sub_8091A90
|
||||
bl xxx_get_unk250_at_8091A90
|
||||
_08019A3C:
|
||||
adds r5, r0, 0
|
||||
ldr r4, _08019A68
|
||||
@@ -1439,7 +1439,7 @@ _08019A3C:
|
||||
adds r0, 0x1C
|
||||
ldrb r1, [r5]
|
||||
movs r2, 0
|
||||
bl sub_8090A8C
|
||||
bl xxx_init_itemslot_8090A8C
|
||||
ldr r1, [r4]
|
||||
ldrb r0, [r5, 0x1]
|
||||
strb r0, [r1, 0x1D]
|
||||
@@ -1466,7 +1466,7 @@ _08019A6C:
|
||||
ldr r0, [r4]
|
||||
adds r0, 0x20
|
||||
ldrb r0, [r0]
|
||||
bl sub_809185C
|
||||
bl xxx_get_inv_unk230_at_809185C
|
||||
b _08019AA4
|
||||
.align 2, 0
|
||||
_08019A8C: .4byte gUnknown_203B210
|
||||
@@ -1478,7 +1478,7 @@ _08019A90:
|
||||
ldr r0, [r4]
|
||||
adds r0, 0x21
|
||||
ldrb r0, [r0]
|
||||
bl sub_8091A90
|
||||
bl xxx_get_unk250_at_8091A90
|
||||
_08019AA4:
|
||||
adds r5, r0, 0
|
||||
ldr r4, _08019AD0
|
||||
@@ -1486,7 +1486,7 @@ _08019AA4:
|
||||
adds r0, 0x1C
|
||||
ldrb r1, [r5]
|
||||
movs r2, 0
|
||||
bl sub_8090A8C
|
||||
bl xxx_init_itemslot_8090A8C
|
||||
ldr r1, [r4]
|
||||
ldrb r0, [r5, 0x1]
|
||||
strb r0, [r1, 0x1D]
|
||||
|
||||
@@ -226,7 +226,7 @@ sub_808CFD0:
|
||||
adds r0, r7, 0
|
||||
adds r0, 0x28
|
||||
adds r1, r4, 0
|
||||
bl sub_8090B08
|
||||
bl xxx_init_helditem_8090B08
|
||||
mov r4, r8
|
||||
str r4, [r7, 0x1C]
|
||||
adds r0, r7, 0
|
||||
@@ -387,7 +387,7 @@ sub_808D144:
|
||||
adds r0, r5, 0
|
||||
adds r0, 0x28
|
||||
ldrb r1, [r7, 0x6]
|
||||
bl sub_8090B08
|
||||
bl xxx_init_helditem_8090B08
|
||||
ldr r0, [r7, 0x24]
|
||||
str r0, [r5, 0x1C]
|
||||
adds r0, r5, 0
|
||||
|
||||
@@ -92,7 +92,7 @@ _0808DEDA:
|
||||
beq _0808DF00
|
||||
adds r0, r2, 0
|
||||
mov r1, r12
|
||||
bl sub_8090B64
|
||||
bl HeldItemToSlot
|
||||
b _0808DF06
|
||||
_0808DF00:
|
||||
strb r0, [r2, 0x2]
|
||||
@@ -204,7 +204,7 @@ _0808DFB2:
|
||||
beq _0808DFD4
|
||||
adds r0, r6, 0
|
||||
adds r1, r7, 0
|
||||
bl sub_8090BB0
|
||||
bl SlotToHeldItem
|
||||
b _0808DFD6
|
||||
_0808DFD4:
|
||||
strb r1, [r6]
|
||||
@@ -230,7 +230,7 @@ sub_808DFDC:
|
||||
beq _0808E004
|
||||
adds r0, r3, 0
|
||||
adds r0, 0x28
|
||||
bl sub_8090BB0
|
||||
bl SlotToHeldItem
|
||||
b _0808E00A
|
||||
.align 2, 0
|
||||
_0808E000: .4byte gRecruitedPokemonRef
|
||||
|
||||
@@ -2379,7 +2379,7 @@ _08090026:
|
||||
strb r1, [r0]
|
||||
subs r0, 0x34
|
||||
adds r1, r4, 0
|
||||
bl sub_8090B64
|
||||
bl HeldItemToSlot
|
||||
ldrh r0, [r6, 0x14]
|
||||
strh r0, [r5, 0x3E]
|
||||
ldr r0, [r6, 0x4]
|
||||
|
||||
@@ -117,7 +117,7 @@ _08019F24:
|
||||
bl sub_8019FB0
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
bl sub_809185C
|
||||
bl xxx_get_inv_unk230_at_809185C
|
||||
ldrb r2, [r0]
|
||||
lsls r2, 16
|
||||
ldr r3, _08019F68
|
||||
@@ -376,7 +376,7 @@ _0801A122:
|
||||
adds r0, r6
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
bl sub_809185C
|
||||
bl xxx_get_inv_unk230_at_809185C
|
||||
ldrb r2, [r0]
|
||||
lsls r2, 16
|
||||
ldr r3, _0801A1AC
|
||||
@@ -478,7 +478,7 @@ _0801A208: .4byte gUnknown_203B214
|
||||
sub_801A20C:
|
||||
push {r4-r6,lr}
|
||||
adds r6, r0, 0
|
||||
bl sub_8091A48
|
||||
bl xxx_count_non_empty_inv_unk250_8091A48
|
||||
cmp r0, 0
|
||||
beq _0801A2A0
|
||||
ldr r5, _0801A294
|
||||
@@ -518,7 +518,7 @@ sub_801A20C:
|
||||
movs r2, 0x1
|
||||
bl sub_800641C
|
||||
ldr r4, [r5]
|
||||
bl sub_8091A48
|
||||
bl xxx_count_non_empty_inv_unk250_8091A48
|
||||
adds r1, r0, 0
|
||||
adds r0, r4, 0
|
||||
movs r2, 0xA
|
||||
@@ -585,7 +585,7 @@ _0801A2F0:
|
||||
bl sub_801A37C
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
bl sub_8091A90
|
||||
bl xxx_get_unk250_at_8091A90
|
||||
ldrb r2, [r0]
|
||||
lsls r2, 16
|
||||
ldr r3, _0801A334
|
||||
@@ -680,7 +680,7 @@ sub_801A398:
|
||||
movs r1, 0
|
||||
movs r2, 0
|
||||
bl sub_800641C
|
||||
bl sub_8091A48
|
||||
bl xxx_count_non_empty_inv_unk250_8091A48
|
||||
adds r1, r0, 0
|
||||
ldr r0, [r5]
|
||||
strh r1, [r0, 0x22]
|
||||
@@ -844,7 +844,7 @@ _0801A4EE:
|
||||
adds r0, r6
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
bl sub_8091A90
|
||||
bl xxx_get_unk250_at_8091A90
|
||||
ldrb r2, [r0]
|
||||
lsls r2, 16
|
||||
ldr r3, _0801A578
|
||||
|
||||
@@ -7970,6 +7970,7 @@ gUnknown_8108084: @ 8108084
|
||||
.global gUnknown_8108E58
|
||||
gUnknown_8108E58: @ 8108E58
|
||||
@ replacing .incbin "baserom.gba", 0x00108e58, 0x68
|
||||
@ u16*s
|
||||
.4byte 0x8108184
|
||||
.4byte 0x810819c
|
||||
.4byte 0x81081ea
|
||||
|
||||
21
include/code_8092334.h
Normal file
21
include/code_8092334.h
Normal file
@@ -0,0 +1,21 @@
|
||||
#ifndef GUARD_CODE_8092334_H
|
||||
#define GUARD_CODE_8092334_H
|
||||
|
||||
|
||||
struct unkStruct_8094924
|
||||
{
|
||||
// size: 0x10?
|
||||
u8 *unk0; // head?
|
||||
u8 *unk4; // tail?
|
||||
u32 unk8;
|
||||
u32 unkC;
|
||||
};
|
||||
|
||||
void sub_809486C(struct unkStruct_8094924 *r0, u8 *r1, s32 size);
|
||||
void nullsub_102(struct unkStruct_8094924 *r0);
|
||||
void sub_809488C(struct unkStruct_8094924 *r0, u8 *r1, s32 size);
|
||||
void sub_809485C(struct unkStruct_8094924 *r0, u8 *r1, s32 size);
|
||||
void sub_80948E4(struct unkStruct_8094924 *r0, u8 *r1, s32 size);
|
||||
void sub_8094924(struct unkStruct_8094924 *r0, u8 *r1, s32 size);
|
||||
|
||||
#endif
|
||||
@@ -16,7 +16,7 @@ struct unkStruct_203B2BC
|
||||
s16 unk8;
|
||||
u16 unkA;
|
||||
u32 unkC;
|
||||
struct ItemSlot_ALT unk10;
|
||||
struct HeldItem unk10;
|
||||
u8 unk14;
|
||||
u8 fill15[3];
|
||||
struct unkSubStruct_203B2BC *unk18;
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef GUARD_ITEMS_H
|
||||
#define GUARD_ITEMS_H
|
||||
|
||||
#include "code_8092334.h"
|
||||
|
||||
struct Item
|
||||
{
|
||||
/* 0x0 */ u8 *namePointer;
|
||||
@@ -28,11 +30,9 @@ struct ItemSlot
|
||||
u8 itemIndex;
|
||||
};
|
||||
|
||||
struct ItemSlot_ALT
|
||||
{
|
||||
u8 itemIndex;
|
||||
u8 numItems;
|
||||
u8 unk2;
|
||||
struct HeldItem {
|
||||
u8 itemIndex;
|
||||
u8 numItems;
|
||||
};
|
||||
|
||||
struct unkStruct_80915F4
|
||||
@@ -41,6 +41,15 @@ struct unkStruct_80915F4
|
||||
u16 unk2;
|
||||
};
|
||||
|
||||
struct unkStruct_8090F58
|
||||
{
|
||||
u32 unk0;
|
||||
u8 unk4;
|
||||
u8 unk5;
|
||||
s16 unk6;
|
||||
u8 unk8;
|
||||
};
|
||||
|
||||
enum ItemType
|
||||
{
|
||||
ITEM_TYPE_THROWABLE,
|
||||
@@ -337,16 +346,28 @@ u8 *GetItemDescription(u8 itemIndex);
|
||||
u32 GetItemUnkFood(u8 itemIndex, u32 r1);
|
||||
s32 GetNumberOfFilledInventorySlots(void);
|
||||
bool8 IsThrowableItem(u8 itemIndex);
|
||||
void sub_8090A8C(struct ItemSlot *param_1,u8 itemIndex,u8 param_3);
|
||||
void sub_8090B08(struct ItemSlot_ALT *param_1,u8 itemIndex);
|
||||
void sub_8090B64(struct ItemSlot *param_1, struct ItemSlot_ALT *param_2);
|
||||
void sub_8090DC4(void* param_1,u8 itemIndex,u32 param_3);
|
||||
void xxx_init_itemslot_8090A8C(struct ItemSlot *param_1,u8 itemIndex,u8 param_3);
|
||||
void xxx_init_helditem_8090B08(struct HeldItem *param_1,u8 itemIndex);
|
||||
void HeldItemToSlot(struct ItemSlot *param_1, struct HeldItem *param_2);
|
||||
void sub_8090DC4(void* param_1,u8 itemIndex, struct unkStruct_8090F58* param_3);
|
||||
bool8 AddItemToInventory(const struct ItemSlot* slot);
|
||||
void ConvertMoneyItemToMoney();
|
||||
void AddToTeamMoney(s32 amount);
|
||||
u32 GetMoneyValue(struct ItemSlot* slot);
|
||||
u16 GetItemMove(u8 index);
|
||||
bool8 CanSellItem(u32 id);
|
||||
bool8 IsGummiItem(u8);
|
||||
void xxx_init_unk230_substruct(u8);
|
||||
bool8 xxx_insert_unk230_80919FC(u8);
|
||||
u32 xxx_count_non_empty_inv_unk250_8091A48();
|
||||
void sub_8091BB4(u8);
|
||||
void sub_8090F58(void*, u8 *, struct ItemSlot *, struct unkStruct_8090F58*);
|
||||
|
||||
// some sort of weird memcpy's?
|
||||
// not sure what the second argument should be typed as
|
||||
void sub_8091DC0(struct unkStruct_8094924 *r0, u8*);
|
||||
void sub_8091DE0(struct unkStruct_8094924 *a1, u8 *a2);
|
||||
void sub_8091E00(struct unkStruct_8094924 *a1, u8 *a2);
|
||||
void sub_8091E28(struct unkStruct_8094924 *a1, u8 *a2);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
#define GUARD_POKEMON_H
|
||||
|
||||
#include "file_system.h"
|
||||
#include "item.h"
|
||||
|
||||
|
||||
struct PokemonStruct
|
||||
{
|
||||
@@ -28,9 +30,7 @@ struct PokemonStruct
|
||||
u8 unk20[4];
|
||||
u8 unk24;
|
||||
u8 fill25[3];
|
||||
u8 itemIndexHeld;
|
||||
u8 unk29;
|
||||
u8 fill2A[2];
|
||||
struct HeldItem heldItem;
|
||||
u8 unk2C[4];
|
||||
u8 fill30[0x4C - 0x30];
|
||||
/* 0x4C */ u8 name[0xA];
|
||||
|
||||
@@ -1,18 +1,13 @@
|
||||
#ifndef GUARD_TEAM_INVENTORY_H
|
||||
#define GUARD_TEAM_INVENTORY_H
|
||||
|
||||
struct subStruct_203B460
|
||||
{
|
||||
u8 unk0;
|
||||
u8 unk1;
|
||||
};
|
||||
|
||||
struct TeamInventory
|
||||
{
|
||||
struct ItemSlot teamItems[INVENTORY_SIZE];
|
||||
u16 teamStorage[NUMBER_OF_ITEM_IDS];
|
||||
struct subStruct_203B460 unk230[8]; // this is probably actually the same struct as ItemSlot_ALT (see sub_80919FC)
|
||||
struct subStruct_203B460 unk250[4]; // TODO: idk if this is identical struct or not.. Ghidra says sizes are same
|
||||
// same type (initialized by same function):
|
||||
struct HeldItem unk230[8];
|
||||
struct HeldItem unk250[4];
|
||||
/* 0x260 */ s32 teamMoney;
|
||||
/* 0x264 */ u32 teamSavings;
|
||||
};
|
||||
|
||||
@@ -199,9 +199,6 @@ SECTIONS {
|
||||
src/code_8090208.o(.text);
|
||||
asm/code_8090208.o(.text);
|
||||
src/items.o(.text);
|
||||
asm/items.o(.text);
|
||||
src/items_1.o(.text);
|
||||
asm/items_1.o(.text);
|
||||
src/rescue_team_info.o(.text);
|
||||
src/text_util.o(.text);
|
||||
src/friend_area.o(.text);
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "gUnknown_203B418.h"
|
||||
#include "code_8041D5C.h"
|
||||
#include "pokemon.h"
|
||||
#include "item.h"
|
||||
|
||||
extern struct unkStruct_203B418 *gUnknown_203B418;
|
||||
|
||||
@@ -257,8 +258,7 @@ extern struct unkDungeon_8041D5C *sub_8083600();
|
||||
extern void sub_80421C0(struct unkDungeon_8041D5C *, u32);
|
||||
extern void sub_8046D20();
|
||||
extern void sub_808B1CC(u8);
|
||||
extern void sub_8090A8C(u8 *, u32, u32);
|
||||
extern void sub_80464C8(struct unkDungeon_8041D5C *, u32, u8 *);
|
||||
extern void sub_80464C8(struct unkDungeon_8041D5C *, u32, struct ItemSlot *);
|
||||
extern void sub_8098044(u32);
|
||||
extern void PlaySoundEffect(u32);
|
||||
extern void sub_8085C54(u32, u32, u32, u32, u32);
|
||||
@@ -3003,16 +3003,16 @@ void sub_808ACC0(void)
|
||||
sub_8068FE0(uVar2,0x21c,0);
|
||||
sub_8097FA8(0x22);
|
||||
sub_8097FA8(0x1d);
|
||||
sub_808B1CC(0x79);
|
||||
sub_808B1CC(ITEM_ID_ROCK_PART);
|
||||
}
|
||||
else {
|
||||
if (sub_80860A8(0x79) != 0) {
|
||||
if (sub_80860A8(ITEM_ID_ROCK_PART) != 0) {
|
||||
sub_8098044(0x22);
|
||||
sub_8097FA8(0x1d);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sub_80860A8(0x7a) != 0) {
|
||||
if (sub_80860A8(ITEM_ID_MUSIC_BOX) != 0) {
|
||||
sub_8098044(0x22);
|
||||
sub_8097FA8(0x1d);
|
||||
}
|
||||
@@ -3035,16 +3035,16 @@ void sub_808AD48(void)
|
||||
sub_8068FE0(uVar2,0x21c,0);
|
||||
sub_8097FA8(0x22);
|
||||
sub_8097FA8(0x1d);
|
||||
sub_808B1CC(0x77);
|
||||
sub_808B1CC(ITEM_ID_ICE_PART);
|
||||
}
|
||||
else {
|
||||
if (sub_80860A8(0x77) != 0) {
|
||||
if (sub_80860A8(ITEM_ID_ICE_PART) != 0) {
|
||||
sub_8098044(0x22);
|
||||
sub_8097FA8(0x1d);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sub_80860A8(0x7a) != 0) {
|
||||
if (sub_80860A8(ITEM_ID_MUSIC_BOX) != 0) {
|
||||
sub_8098044(0x22);
|
||||
sub_8097FA8(0x1d);
|
||||
}
|
||||
@@ -3068,16 +3068,16 @@ void sub_808ADCC(void)
|
||||
sub_8068FE0(uVar2,0x21c,0);
|
||||
sub_8097FA8(0x22);
|
||||
sub_8097FA8(0x1d);
|
||||
sub_808B1CC(0x78);
|
||||
sub_808B1CC(ITEM_ID_STEEL_PART);
|
||||
}
|
||||
else {
|
||||
if (sub_80860A8(0x78) != 0) {
|
||||
if (sub_80860A8(ITEM_ID_STEEL_PART) != 0) {
|
||||
sub_8098044(0x22);
|
||||
sub_8097FA8(0x1d);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sub_80860A8(0x7a) != 0) {
|
||||
if (sub_80860A8(ITEM_ID_MUSIC_BOX) != 0) {
|
||||
sub_8098044(0x22);
|
||||
sub_8097FA8(0x1d);
|
||||
}
|
||||
@@ -3095,7 +3095,7 @@ void sub_808AE54(char param_1,char param_2,u32 param_3)
|
||||
{
|
||||
struct unkDungeon_8041D5C * uVar3;
|
||||
u8 auStack24 [4];
|
||||
u8 auStack20 [4];
|
||||
struct ItemSlot auStack20;
|
||||
|
||||
|
||||
uVar3 = sub_8085480();
|
||||
@@ -3103,8 +3103,8 @@ void sub_808AE54(char param_1,char param_2,u32 param_3)
|
||||
if ((sub_8098100(0x22) == 0) && (param_2 == 0x2E) && (param_1 == 0x17)) {
|
||||
sub_808B1CC(0);
|
||||
if (sub_8098100(0x1d) == 0) {
|
||||
sub_8090A8C(auStack20,0x79,0);
|
||||
sub_80464C8(sub_8083600(),param_3,auStack20);
|
||||
xxx_init_itemslot_8090A8C(&auStack20,ITEM_ID_ROCK_PART,0);
|
||||
sub_80464C8(sub_8083600(),param_3,&auStack20);
|
||||
sub_8083E88(0x72);
|
||||
// Something fell from Regirock's body
|
||||
// Regirock was apparently guarding this item
|
||||
@@ -3118,7 +3118,7 @@ void sub_808AEC8(char param_1,char param_2,u32 param_3)
|
||||
{
|
||||
struct unkDungeon_8041D5C * uVar3;
|
||||
u8 auStack24 [4];
|
||||
u8 auStack20 [4];
|
||||
struct ItemSlot auStack20;
|
||||
|
||||
|
||||
uVar3 = sub_8085480();
|
||||
@@ -3126,8 +3126,8 @@ void sub_808AEC8(char param_1,char param_2,u32 param_3)
|
||||
if ((sub_8098100(0x22) == 0) && (param_2 == 0x2F) && (param_1 == 0x18)) {
|
||||
sub_808B1CC(0);
|
||||
if (sub_8098100(0x1d) == 0) {
|
||||
sub_8090A8C(auStack20,0x77,0);
|
||||
sub_80464C8(sub_8083600(),param_3,auStack20);
|
||||
xxx_init_itemslot_8090A8C(&auStack20,ITEM_ID_ICE_PART,0);
|
||||
sub_80464C8(sub_8083600(),param_3,&auStack20);
|
||||
sub_8083E88(0x72);
|
||||
// Something fell from Regice's body
|
||||
// Regice was apparently guarding this item
|
||||
@@ -3140,7 +3140,7 @@ void sub_808AF3C(char param_1,char param_2,u32 param_3)
|
||||
{
|
||||
struct unkDungeon_8041D5C * uVar3;
|
||||
u8 auStack24 [4];
|
||||
u8 auStack20 [4];
|
||||
struct ItemSlot auStack20;
|
||||
|
||||
|
||||
uVar3 = sub_8085480();
|
||||
@@ -3148,8 +3148,8 @@ void sub_808AF3C(char param_1,char param_2,u32 param_3)
|
||||
if ((sub_8098100(0x22) == 0) && (param_2 == 0x30) && (param_1 == 0x19)) {
|
||||
sub_808B1CC(0);
|
||||
if (sub_8098100(0x1d) == 0) {
|
||||
sub_8090A8C(auStack20,0x78,0);
|
||||
sub_80464C8(sub_8083600(),param_3,auStack20);
|
||||
xxx_init_itemslot_8090A8C(&auStack20,ITEM_ID_STEEL_PART,0);
|
||||
sub_80464C8(sub_8083600(),param_3, &auStack20);
|
||||
sub_8083E88(0x72);
|
||||
// Something fell from Registeel's body
|
||||
// Registeel was apparently guarding this item
|
||||
@@ -3165,7 +3165,7 @@ void sub_808AFB0(char param_1)
|
||||
|
||||
uVar3 = sub_8085480();
|
||||
sub_8052D44(auStack12,uVar3,0);
|
||||
if ((sub_8098100(0x22) == 0) && (param_1 == 0x2E) && (sub_8098100(0x1d) == 0) && (sub_80860A8(0x79) != 0)) {
|
||||
if ((sub_8098100(0x22) == 0) && (param_1 == 0x2E) && (sub_8098100(0x1d) == 0) && (sub_80860A8(ITEM_ID_ROCK_PART) != 0)) {
|
||||
sub_8097FD0(0x1d);
|
||||
sub_8045B94(gAvailablePokemonNames,sub_8083600(),0);
|
||||
// $m0 obatined the Rock Part that Regirock was guarding
|
||||
@@ -3183,7 +3183,7 @@ void sub_808B030(char param_1)
|
||||
|
||||
uVar3 = sub_8085480();
|
||||
sub_8052D44(auStack12,uVar3,0);
|
||||
if ((sub_8098100(0x22) == 0) && (param_1 == 0x2F) && (sub_8098100(0x1d) == 0) && (sub_80860A8(0x77) != 0)) {
|
||||
if ((sub_8098100(0x22) == 0) && (param_1 == 0x2F) && (sub_8098100(0x1d) == 0) && (sub_80860A8(ITEM_ID_ICE_PART) != 0)) {
|
||||
sub_8097FD0(0x1d);
|
||||
sub_8045B94(gAvailablePokemonNames,sub_8083600(),0);
|
||||
// $m0 obatined the Ice Part that Regice was guarding
|
||||
@@ -3201,7 +3201,7 @@ void sub_808B0B0(char param_1)
|
||||
|
||||
uVar3 = sub_8085480();
|
||||
sub_8052D44(auStack12,uVar3,0);
|
||||
if ((sub_8098100(0x22) == 0) && (param_1 == 0x30) && (sub_8098100(0x1d) == 0) && (sub_80860A8(0x78) != 0)) {
|
||||
if ((sub_8098100(0x22) == 0) && (param_1 == 0x30) && (sub_8098100(0x1d) == 0) && (sub_80860A8(ITEM_ID_STEEL_PART) != 0)) {
|
||||
sub_8097FD0(0x1d);
|
||||
sub_8045B94(gAvailablePokemonNames, sub_8083600(), 0);
|
||||
// $m0 obatined the Steel Part that Registeel was guarding
|
||||
@@ -3341,7 +3341,7 @@ void sub_808B1CC(u8 r0)
|
||||
"\tadds r0, r4, 0\n"
|
||||
"\tadds r1, r6, 0\n"
|
||||
"\tmovs r2, 0\n"
|
||||
"\tbl sub_8090A8C\n"
|
||||
"\tbl xxx_init_itemslot_8090A8C\n"
|
||||
"\tldrh r0, [r5, 0x2]\n"
|
||||
"\tsubs r0, 0x1\n"
|
||||
"\tstrh r0, [r5, 0x2]\n"
|
||||
|
||||
@@ -1,15 +1,8 @@
|
||||
#include "global.h"
|
||||
#include "code_8092334.h"
|
||||
#include "memory.h"
|
||||
#include "item.h"
|
||||
|
||||
struct unkStruct_8094924
|
||||
{
|
||||
// size: 0x10?
|
||||
u8 *unk0; // head?
|
||||
u8 *unk4; // tail?
|
||||
u32 unk8;
|
||||
u32 unkC;
|
||||
};
|
||||
|
||||
s16 sub_8094828(u16 r0, u8 itemIndex)
|
||||
{
|
||||
|
||||
@@ -36,7 +36,7 @@ extern s16 sub_808E770(s16);
|
||||
extern bool8 sub_8092040(u8);
|
||||
extern u8 sub_803C1D0(u8 *, u8);
|
||||
extern bool8 IsNotMoneyOrUsedTMItem(u8);
|
||||
extern u8 sub_8091E60(u8 ,u8 );
|
||||
extern u8 xxx_bit_lut_lookup_8091E50(u8 ,u8 );
|
||||
extern u32 GetMaxItemCount(u8);
|
||||
extern u8 sub_803C0DC(s16);
|
||||
extern void sub_8096040(u8);
|
||||
@@ -152,7 +152,7 @@ bool8 ValidateWonderMail(struct WonderMail *data)
|
||||
return FALSE;
|
||||
|
||||
// Item finding
|
||||
if(data->missionType == FIND_ITEM && sub_8091E60(data->dungeon, data->targetItem) == 0)
|
||||
if(data->missionType == FIND_ITEM && xxx_bit_lut_lookup_8091E50(data->dungeon, data->targetItem) == 0)
|
||||
return FALSE;
|
||||
|
||||
if(data->rewardType == BLANK_4 || data->rewardType == END_REWARDS || data->rewardType > END_REWARDS)
|
||||
|
||||
@@ -58,10 +58,10 @@ extern void sub_800199C(u8, u8, u8, s32);
|
||||
extern void sub_8098CC8();
|
||||
extern void sub_809674C();
|
||||
extern void sub_80961B4();
|
||||
extern void sub_8091FB4();
|
||||
extern void ClearAllItems_8091FB4();
|
||||
extern const char *sub_80A2B18(s16);
|
||||
extern u8 sub_8001CC4(u8, u8, u8);
|
||||
extern void sub_8091980(u32);
|
||||
extern void xxx_inv_unk250_random_8091980(u32);
|
||||
|
||||
extern u8 sub_80023E4(u32);
|
||||
extern void sub_80118C4(u16);
|
||||
@@ -166,10 +166,10 @@ void sub_8098CC8(void)
|
||||
{
|
||||
temp = 3;
|
||||
}
|
||||
sub_8091980(temp);
|
||||
xxx_inv_unk250_random_8091980(temp);
|
||||
sub_809674C();
|
||||
sub_80961B4();
|
||||
sub_8091FB4();
|
||||
ClearAllItems_8091FB4();
|
||||
}
|
||||
|
||||
bool8 sub_8098D1C(s16 r0, u32 r1, u32 r2)
|
||||
|
||||
@@ -208,7 +208,7 @@ void sub_803A5A0(void)
|
||||
sub_803A690();
|
||||
break;
|
||||
case 4:
|
||||
sub_8090A8C(&auStack8,gUnknown_203B3F0->itemIndex,0);
|
||||
xxx_init_itemslot_8090A8C(&auStack8,gUnknown_203B3F0->itemIndex,0);
|
||||
sub_801B3C0(&auStack8);
|
||||
break;
|
||||
case 5:
|
||||
|
||||
@@ -1,47 +1,45 @@
|
||||
#include "global.h"
|
||||
#include "constants/friend_area.h"
|
||||
#include "code_8092334.h"
|
||||
|
||||
extern bool8 *gFriendAreas;
|
||||
extern void sub_809485C(u32 *r0, u8 *r1, u32 size);
|
||||
extern void sub_8094924(u32 *r0, u32 *r1, u32);
|
||||
extern void nullsub_102(u32 *r0);
|
||||
extern void sub_809488C(u32 *r0, u32 *r1, u32 r2);
|
||||
extern void sub_809486C(u32 *r0, u8 *r1, u32 size);
|
||||
|
||||
u32 SaveFriendAreas(u8 *r0, u32 size)
|
||||
{
|
||||
u32 temp[5];
|
||||
struct unkStruct_8094924 unk;
|
||||
u32 temp;
|
||||
s32 counter;
|
||||
|
||||
sub_809486C(temp, r0, size);
|
||||
sub_809486C(&unk, r0, size);
|
||||
for(counter = 0; counter < NUM_FRIEND_AREAS; counter++)
|
||||
{
|
||||
if(gFriendAreas[counter] != 0)
|
||||
temp[4] = -1;
|
||||
temp = -1;
|
||||
else
|
||||
temp[4] = 0;
|
||||
sub_809488C(temp, &(temp[4]), 1);
|
||||
temp = 0;
|
||||
sub_809488C(&unk, (u8*)&temp, 1);
|
||||
}
|
||||
nullsub_102(temp);
|
||||
return temp[2];
|
||||
nullsub_102(&unk);
|
||||
return unk.unk8;
|
||||
}
|
||||
|
||||
u32 ReadSavedFriendAreas(u8 *r0, s32 size)
|
||||
{
|
||||
u32 temp[5];
|
||||
struct unkStruct_8094924 unk;
|
||||
u32 temp;
|
||||
s32 counter;
|
||||
|
||||
sub_809485C(temp, r0, size);
|
||||
sub_809485C(&unk, r0, size);
|
||||
for(counter = 0; counter < NUM_FRIEND_AREAS; counter++)
|
||||
{
|
||||
sub_8094924(temp, &(temp[4]), 1);
|
||||
sub_8094924(&unk, (u8*)&temp, 1);
|
||||
// It's setting whether we have the friend area or not
|
||||
if((temp[4] & 1))
|
||||
gFriendAreas[counter] = TRUE;
|
||||
if(temp & 1)
|
||||
gFriendAreas[counter] = 1;
|
||||
else
|
||||
gFriendAreas[counter] = FALSE;
|
||||
gFriendAreas[counter] = 0;
|
||||
}
|
||||
nullsub_102(temp);
|
||||
return temp[2];
|
||||
nullsub_102(&unk);
|
||||
return unk.unk8;
|
||||
}
|
||||
|
||||
|
||||
@@ -201,7 +201,7 @@ void sub_8027274(void)
|
||||
sub_8012D60(&gUnknown_203B2BC->unk7C,gUnknown_203B2BC->menuItems,0,&gUnknown_203B2BC->unk16C,gUnknown_203B2BC->unk74,2);
|
||||
break;
|
||||
case 0xd:
|
||||
sub_8090B64(&auStack12,&gUnknown_203B2BC->unk10);
|
||||
HeldItemToSlot(&auStack12,&gUnknown_203B2BC->unk10);
|
||||
sub_801B3C0(&auStack12);
|
||||
break;
|
||||
case 0xe:
|
||||
|
||||
@@ -24,7 +24,7 @@ extern void nullsub_104();
|
||||
extern void sub_8091274(u8 *);
|
||||
extern void sub_801A928();
|
||||
extern void sub_8099690(u32);
|
||||
extern void sub_808D800(s16, struct ItemSlot_ALT *);
|
||||
extern void sub_808D800(s16, struct HeldItem *);
|
||||
extern u32 sub_801A8AC();
|
||||
extern u32 sub_801A6E8(u32);
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "gUnknown_203B46C.h"
|
||||
#include "code_8092334.h"
|
||||
|
||||
struct unkStruct_8109954
|
||||
{
|
||||
@@ -19,8 +20,6 @@ extern struct UnkSaveStruct1 *gUnknown_203B46C;
|
||||
extern struct UnkSaveStruct1 gUnknown_2038C70;
|
||||
extern void sub_8094C14(void);
|
||||
extern void sub_80099F0(u32);
|
||||
extern void sub_809488C(u8 *r0, u8 *r1, u32 r2);
|
||||
extern void sub_8094924(u8 *r0, u8 *r1, u32 r2);
|
||||
|
||||
void LoadGameOptions(void)
|
||||
{
|
||||
@@ -67,7 +66,7 @@ bool32 GameOptionsNotChange(struct UnkSaveStruct1 *r0)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void WriteGameOptions(u8 *param_1)
|
||||
void WriteGameOptions(struct unkStruct_8094924 *param_1)
|
||||
{
|
||||
u8 zero;
|
||||
u8 neg_1;
|
||||
@@ -153,7 +152,7 @@ void WriteGameOptions(u8 *param_1)
|
||||
sub_809488C(param_1, &gUnknown_203B46C->unkC, 2);
|
||||
}
|
||||
|
||||
void ReadGameOptions(u8 *param_1)
|
||||
void ReadGameOptions(struct unkStruct_8094924 *param_1)
|
||||
{
|
||||
u8 byteArray[4];
|
||||
sub_8094924(param_1, byteArray, 2);
|
||||
|
||||
1310
src/items.c
1310
src/items.c
File diff suppressed because it is too large
Load Diff
648
src/items_1.c
648
src/items_1.c
@@ -1,648 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "item.h"
|
||||
#include "team_inventory.h"
|
||||
#include "random.h"
|
||||
#include "pokemon.h"
|
||||
#include "subStruct_203B240.h"
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
extern struct TeamInventory *gTeamInventory_203B460;
|
||||
extern EWRAM_DATA struct Item *gItemParametersData;
|
||||
|
||||
extern void sub_80073B8(u32);
|
||||
extern u32 sub_8097DF0(char *, struct subStruct_203B240 **);
|
||||
extern void sub_8092A88(void*, u16); // first arg is some struct
|
||||
extern void sub_80078A4(u32, u32, u32, u32, u32);
|
||||
extern u32 sub_8092B00(void*);
|
||||
extern u8* GetUnformattedTypeString(s16);
|
||||
extern u32 sub_8092BF4(void*);
|
||||
extern void sub_80073E0(u32);
|
||||
extern void xxx_format_and_draw(u32, u32, u8 *, u32, u32);
|
||||
|
||||
extern u8 gUnknown_202DE58[0x58];
|
||||
extern u32 gUnknown_202DE30;
|
||||
extern u8* gPtrTypeText; // ptr to "Type\0"
|
||||
extern u8* gPtrPPD0Text; // ptr to "PP $d0 \0"
|
||||
extern u32 gUnknown_810A3F0[100];
|
||||
extern struct unkStruct_203B45C *gRecruitedPokemonRef;
|
||||
extern s16 gTypeGummiIQBoost[0x12][NUMBER_OF_GUMMIS];
|
||||
extern u16 gGummiStatBoostLUT;
|
||||
|
||||
|
||||
// s32 sub_8090FEC(s32 a1, u8* a2, u8 a3)
|
||||
// {
|
||||
// s32 i, j;
|
||||
// s32 cond = 0;
|
||||
|
||||
// j = 0;
|
||||
// for (i = 0; i < 4; i++) {
|
||||
// s32 div = 0;
|
||||
// s32 next = i + 1;
|
||||
// register s32* unk_temp asm("r0");
|
||||
|
||||
// register UNUSED size_t unk_offs asm("r3") = i << 2;
|
||||
// unk_temp = (s32*)0x81097B0;
|
||||
// next = i + 1;
|
||||
// if (a1 >= unk_temp[i]) {
|
||||
// register s32 *temp_81097B0 asm("r2") = (s32*)0x81097B0;
|
||||
// u32 _i = i;
|
||||
// s32 diff;
|
||||
// do {
|
||||
// // correct other than register usage
|
||||
// diff = temp_81097B0[_i];
|
||||
// a1 -= diff;
|
||||
// div++;
|
||||
// } while (a1 >= diff);
|
||||
// }
|
||||
|
||||
// if (div > 9) {
|
||||
// div = 9;
|
||||
// }
|
||||
// // /correct
|
||||
|
||||
// if (!div && !cond) {
|
||||
// if (a3) {
|
||||
// *a2++ = 96;
|
||||
// }
|
||||
// }
|
||||
// else {
|
||||
// u8 temp;
|
||||
// if (div) {
|
||||
// u32 offs;
|
||||
|
||||
// cond = 1;
|
||||
// offs = 2 * div;
|
||||
// *a2++ = ((u8*)0x81097C4)[offs];
|
||||
// temp = ((u8*)0x81097C5)[offs];
|
||||
// }
|
||||
// else {
|
||||
// *a2++ = ((u8*)0x81097C4)[0];
|
||||
// temp = ((u8*)0x81097C5)[0];
|
||||
// }
|
||||
|
||||
// *a2++ = temp;
|
||||
// j++;
|
||||
// }
|
||||
// }
|
||||
|
||||
// *a2++ = ((u8*)0x81097C4)[2 * a1];
|
||||
// *a2++ = ((u8*)0x81097C5)[2 * a1];
|
||||
// *a2 = 0;
|
||||
// return j + 1;
|
||||
// }
|
||||
|
||||
void FillInventoryGaps()
|
||||
{
|
||||
// fill inventory gaps
|
||||
s32 slot_checking = 0;
|
||||
s32 last_filled = 0;
|
||||
|
||||
do {
|
||||
// effectively just a while loop
|
||||
if ((slot_checking < INVENTORY_SIZE) && !(slot_checking[gTeamInventory_203B460->teamItems].unk0 & 1)) {
|
||||
// find next empty slot
|
||||
do {
|
||||
slot_checking++;
|
||||
} while ((slot_checking < INVENTORY_SIZE) && !(slot_checking[gTeamInventory_203B460->teamItems].unk0 & 1));
|
||||
}
|
||||
|
||||
if (slot_checking == INVENTORY_SIZE) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (slot_checking > last_filled) {
|
||||
// shift it down
|
||||
gTeamInventory_203B460->teamItems[last_filled] = gTeamInventory_203B460->teamItems[slot_checking];
|
||||
}
|
||||
slot_checking++;
|
||||
last_filled++;
|
||||
} while (1);
|
||||
|
||||
// clear out the rest of the slots
|
||||
for (; last_filled < INVENTORY_SIZE; last_filled++) {
|
||||
struct ItemSlot *slot;
|
||||
#ifdef NONMATCHING
|
||||
slot = &gTeamInventory_203B460->teamItems[last_filled];
|
||||
#else
|
||||
size_t offs = last_filled << 2;
|
||||
size_t _slot = offs;
|
||||
_slot += (size_t)gTeamInventory_203B460->teamItems;
|
||||
slot = (struct ItemSlot*)_slot; // &gTeamInventory_203B460->teamItems[end];
|
||||
#endif
|
||||
slot->itemIndex = 0;
|
||||
slot->numItems = 0;
|
||||
slot->unk0 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
s32 FindItemInInventory(u8 itemIndex)
|
||||
{
|
||||
s32 i;
|
||||
for (i = 0; i < INVENTORY_SIZE; i++) {
|
||||
if ((gTeamInventory_203B460->teamItems[i].unk0 & 1) && (gTeamInventory_203B460->teamItems[i].itemIndex == itemIndex)) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
s32 GetItemCountInInventory(u8 _itemIndex)
|
||||
{
|
||||
#ifdef NONMATCHING
|
||||
s32 count = 0;
|
||||
s32 i;
|
||||
for (i = 0; i < INVENTORY_SIZE; i++) {
|
||||
if ((gTeamInventory_203B460->teamItems[i].unk0 & 1) && (gTeamInventory_203B460->teamItems[i].itemIndex == _itemIndex)) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
return count;
|
||||
#else
|
||||
// have to do hacky stuff to fix initialization order of r6 and r2
|
||||
u32 itemIndex = _itemIndex;
|
||||
s32 count = 0;
|
||||
struct ItemSlot *slot = gTeamInventory_203B460->teamItems;
|
||||
s32 one = 1;
|
||||
s32 i = 19;
|
||||
|
||||
do {
|
||||
register u32 unk0 asm("r1") = slot->unk0;
|
||||
u32 bottom_bit = one;
|
||||
bottom_bit &= unk0;
|
||||
if (bottom_bit && (slot->itemIndex == itemIndex)) {
|
||||
count++;
|
||||
}
|
||||
slot++;
|
||||
} while(--i >= 0);
|
||||
return count;
|
||||
#endif
|
||||
}
|
||||
|
||||
s32 GetItemPossessionCount(u8 itemIndex)
|
||||
{
|
||||
s32 item_count = GetItemCountInInventory(itemIndex);
|
||||
s32 i = 0;
|
||||
|
||||
struct unkStruct_203B45C *_gRecruitedPokemonRef = gRecruitedPokemonRef;
|
||||
for (i = 0; i < NUM_SPECIES; i++) {
|
||||
struct PokemonStruct* pokemon = &_gRecruitedPokemonRef->pokemon[i];
|
||||
if ((1 & pokemon->unk0)
|
||||
&& ((pokemon->unk0 >> 1) % 2)
|
||||
&& (pokemon->itemIndexHeld != ITEM_ID_NOTHING)
|
||||
&& (pokemon->itemIndexHeld == itemIndex)) {
|
||||
item_count++;
|
||||
}
|
||||
}
|
||||
return item_count;
|
||||
}
|
||||
|
||||
void ShiftItemsDownFrom(s32 start)
|
||||
{
|
||||
s32 i, j;
|
||||
for (i = start, j = start + 1; i < 19; i++, j++) {
|
||||
gTeamInventory_203B460->teamItems[i] = gTeamInventory_203B460->teamItems[j];
|
||||
}
|
||||
gTeamInventory_203B460->teamItems[19].itemIndex = 0;
|
||||
gTeamInventory_203B460->teamItems[19].unk0 = 0;
|
||||
}
|
||||
|
||||
void ClearItemSlotAt(u32 index)
|
||||
{
|
||||
gTeamInventory_203B460->teamItems[index].itemIndex = ITEM_ID_NOTHING;
|
||||
gTeamInventory_203B460->teamItems[index].unk0 = 0;
|
||||
}
|
||||
|
||||
bool8 sub_809124C(u8 itemIndex, u8 param_3)
|
||||
{
|
||||
struct ItemSlot temp;
|
||||
sub_8090A8C(&temp, itemIndex, param_3);
|
||||
return AddItemToInventory(&temp);
|
||||
}
|
||||
|
||||
bool8 sub_8091274(struct ItemSlot_ALT* slot)
|
||||
{
|
||||
struct ItemSlot temp;
|
||||
|
||||
sub_8090B64(&temp, slot);
|
||||
return AddItemToInventory(&temp);
|
||||
}
|
||||
|
||||
bool8 AddItemToInventory(const struct ItemSlot* slot)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
// try to add item to inventory, return 1 if failed
|
||||
for (i = 0; i < INVENTORY_SIZE; i++) {
|
||||
UNUSED struct ItemSlot* current = &gTeamInventory_203B460->teamItems[i];
|
||||
if (!(i[gTeamInventory_203B460->teamItems].unk0 & 1)) {
|
||||
gTeamInventory_203B460->teamItems[i] = *slot;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void ConvertMoneyItemToMoney()
|
||||
{
|
||||
s32 i = 0;
|
||||
|
||||
do {
|
||||
UNUSED struct TeamInventory * _gTeamInventory_203B460 = gTeamInventory_203B460;
|
||||
UNUSED size_t offs = offsetof(struct TeamInventory, teamItems[i]);
|
||||
|
||||
struct ItemSlot* current_slot = &gTeamInventory_203B460->teamItems[i];
|
||||
if ((current_slot->unk0 & 1) && (current_slot->itemIndex == ITEM_ID_POKE)) {
|
||||
u32 result;
|
||||
|
||||
result = GetMoneyValue(current_slot);
|
||||
AddToTeamMoney(result);
|
||||
current_slot->itemIndex = 0;
|
||||
current_slot->numItems = 0;
|
||||
current_slot->unk0 = 0;
|
||||
}
|
||||
} while (++i < INVENTORY_SIZE);
|
||||
FillInventoryGaps();
|
||||
|
||||
i = 0;
|
||||
do {
|
||||
s32 lowest_index = -1;
|
||||
UNUSED size_t offs = offsetof(struct TeamInventory, teamItems[i]);
|
||||
|
||||
bool8 item_occupied = i[gTeamInventory_203B460->teamItems].unk0 & 1;
|
||||
s32 next = i + 1;
|
||||
|
||||
if (item_occupied) {
|
||||
s32 lowest_order = GetItemOrder(gTeamInventory_203B460->teamItems[i].itemIndex);
|
||||
s32 j;
|
||||
|
||||
// find next lowest
|
||||
for (j = next; j < INVENTORY_SIZE; j++) {
|
||||
UNUSED size_t offs = offsetof(struct TeamInventory, teamItems[j]);
|
||||
if ((j[gTeamInventory_203B460->teamItems].unk0 & 1) && (lowest_order > GetItemOrder(gTeamInventory_203B460->teamItems[j].itemIndex))) {
|
||||
lowest_index = j;
|
||||
lowest_order = GetItemOrder(gTeamInventory_203B460->teamItems[j].itemIndex);
|
||||
}
|
||||
}
|
||||
|
||||
if (lowest_index >= 0) {
|
||||
// swap the slots
|
||||
struct ItemSlot current = gTeamInventory_203B460->teamItems[i];
|
||||
gTeamInventory_203B460->teamItems[i] = gTeamInventory_203B460->teamItems[lowest_index];
|
||||
gTeamInventory_203B460->teamItems[lowest_index] = current;
|
||||
}
|
||||
}
|
||||
} while (++i < INVENTORY_SIZE);
|
||||
FillInventoryGaps();
|
||||
}
|
||||
|
||||
void AddToTeamMoney(s32 amount)
|
||||
{
|
||||
s32 clamped_money;
|
||||
gTeamInventory_203B460->teamMoney += amount;
|
||||
|
||||
// clamp money
|
||||
clamped_money = 99999;
|
||||
if (gTeamInventory_203B460->teamMoney <= 99999) {
|
||||
if (gTeamInventory_203B460->teamMoney >= 0) {
|
||||
return;
|
||||
}
|
||||
clamped_money = 0;
|
||||
}
|
||||
gTeamInventory_203B460->teamMoney = clamped_money;
|
||||
}
|
||||
|
||||
u16 GetItemMove(u8 index)
|
||||
{
|
||||
return gItemParametersData[index].move;
|
||||
}
|
||||
|
||||
u32 sub_80913E0(struct ItemSlot* slot, u32 a2, struct subStruct_203B240 ** a3)
|
||||
{
|
||||
u8 buffer88[88]; // some struct
|
||||
|
||||
GetItemDescription(slot->itemIndex);
|
||||
sub_8090DC4(buffer88, slot->itemIndex, 0);
|
||||
if (slot->itemIndex == ITEM_ID_USED_TM) {
|
||||
// empty TM
|
||||
sub_8090DC4(&gUnknown_202DE58, (u8)(slot->numItems + 125), 0);
|
||||
}
|
||||
sub_80073B8(a2);
|
||||
xxx_format_and_draw(16, 0, buffer88, a2, 0);
|
||||
|
||||
xxx_format_and_draw(8, 24, GetItemDescription(slot->itemIndex), a2, 0);
|
||||
if (GetItemType(slot->itemIndex) == ITEM_TYPE_TM) {
|
||||
u8* buffer8 = buffer88 + 0x50; // field in struct
|
||||
u16 move = GetItemMove(slot->itemIndex);
|
||||
u8 moves_data;
|
||||
u8* typestring;
|
||||
u32 result;
|
||||
|
||||
sub_8092A88(buffer8, move);
|
||||
sub_80078A4(a2, 4, 82, 200, 7);
|
||||
xxx_format_and_draw(4, 84, gPtrTypeText, a2, 0);
|
||||
moves_data = sub_8092B00(buffer8);
|
||||
typestring = GetUnformattedTypeString(moves_data);
|
||||
xxx_format_and_draw(64, 84, typestring, a2, 0);
|
||||
result = sub_8092BF4(buffer8);
|
||||
gUnknown_202DE30 = result;
|
||||
xxx_format_and_draw(128, 84, gPtrPPD0Text, a2, 0);
|
||||
}
|
||||
|
||||
sub_80073E0(a2);
|
||||
return sub_8097DF0(GetItemDescription(slot->itemIndex), a3);
|
||||
}
|
||||
|
||||
bool8 CanSellItem(u32 id)
|
||||
{
|
||||
u8 id_;
|
||||
id = (u8)id;
|
||||
id_ = id;
|
||||
|
||||
if((id != ITEM_ID_NOTHING)
|
||||
&& (id != ITEM_ID_POKE)
|
||||
&& (id != ITEM_ID_ROCK_PART)
|
||||
&& (id != ITEM_ID_ICE_PART)
|
||||
&& (id != ITEM_ID_STEEL_PART)
|
||||
&& (id != ITEM_ID_MUSIC_BOX)
|
||||
&& (GetItemSellPrice(id_))
|
||||
&& (GetItemBuyPrice(id_))) {
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 IsNotMoneyOrUsedTMItem(u8 id)
|
||||
{
|
||||
if (id == ITEM_ID_NOTHING) {
|
||||
return FALSE;
|
||||
}
|
||||
else if (id == ITEM_ID_POKE) {
|
||||
return FALSE;
|
||||
}
|
||||
else if (id == ITEM_ID_USED_TM) {
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 IsNotSpecialItem(u8 id)
|
||||
{
|
||||
if (id == ITEM_ID_NOTHING) {
|
||||
return FALSE;
|
||||
}
|
||||
else if (id == ITEM_ID_POKE) {
|
||||
return FALSE;
|
||||
}
|
||||
else if (id == ITEM_ID_ROCK_PART) {
|
||||
return FALSE;
|
||||
}
|
||||
else if (id == ITEM_ID_ICE_PART) {
|
||||
return FALSE;
|
||||
}
|
||||
else if (id == ITEM_ID_STEEL_PART) {
|
||||
return FALSE;
|
||||
}
|
||||
else if (id == ITEM_ID_MUSIC_BOX) {
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 IsEdibleItem(u8 id)
|
||||
{
|
||||
if (!((GetItemType(id) == ITEM_TYPE_BERRY_SEED) || (GetItemType(id) == ITEM_TYPE_APPLE_GUMMI))) {
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 IsHMItem(u8 id)
|
||||
{
|
||||
if (id == ITEM_ID_CUT) {
|
||||
return TRUE;
|
||||
}
|
||||
else if (id == ITEM_ID_FLY) {
|
||||
return TRUE;
|
||||
}
|
||||
else if (id == ITEM_ID_SURF) {
|
||||
return TRUE;
|
||||
}
|
||||
else if (id == ITEM_ID_STRENGTH) {
|
||||
return TRUE;
|
||||
}
|
||||
else if (id == ITEM_ID_FLASH) {
|
||||
return TRUE;
|
||||
}
|
||||
else if (id == ITEM_ID_ROCK_SMASH) {
|
||||
return TRUE;
|
||||
}
|
||||
else if (id == ITEM_ID_WATERFALL) {
|
||||
return TRUE;
|
||||
}
|
||||
else if (id == ITEM_ID_DIVE) {
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
u32 GetMoneyValue(struct ItemSlot* slot)
|
||||
{
|
||||
return gUnknown_810A3F0[slot->numItems];
|
||||
}
|
||||
|
||||
u32 GetMoneyValue2(struct ItemSlot* slot)
|
||||
{
|
||||
return gUnknown_810A3F0[slot->numItems];
|
||||
}
|
||||
|
||||
void GetGummiItemStatBoost(struct PokemonStruct* pokemon, u8 itemIndex, u8 a3, struct unkStruct_80915F4* a4)
|
||||
{
|
||||
// item stat buff?
|
||||
s8 result;
|
||||
|
||||
a4->unk0 = (u16)-1;
|
||||
a4->unk2 = 0;
|
||||
result = IsGummiItem(itemIndex);
|
||||
if (result) {
|
||||
u8 pokemon_type_0 = GetPokemonType(pokemon->speciesNum, 0);
|
||||
u8 pokemon_type_1 = GetPokemonType(pokemon->speciesNum, 1);
|
||||
u32 gummi_index = itemIndex - ITEM_ID_WHITE_GUMMI + 1;
|
||||
s32 value0;
|
||||
s32 value1;
|
||||
s32 diff;
|
||||
u16 boost_amount;
|
||||
|
||||
value0 = gTypeGummiIQBoost[pokemon_type_0][gummi_index];
|
||||
value1 = gTypeGummiIQBoost[pokemon_type_1][gummi_index];
|
||||
diff = pokemon->IQ;
|
||||
|
||||
pokemon->IQ += value0 + value1;
|
||||
diff = pokemon->IQ - diff;
|
||||
if (pokemon->IQ <= 0) {
|
||||
pokemon->IQ = 1;
|
||||
}
|
||||
if (pokemon->IQ > 999) {
|
||||
pokemon->IQ = 999;
|
||||
}
|
||||
|
||||
boost_amount = 0;
|
||||
if (diff <= 8) {
|
||||
boost_amount = 1;
|
||||
if (diff <= 4) {
|
||||
boost_amount = 3;
|
||||
if (diff > 2) {
|
||||
boost_amount = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
a4->unk0 = boost_amount;
|
||||
if (!a3) {
|
||||
u16 boost_flags;
|
||||
if (!boost_amount && RandomCapped(16) == 10) {
|
||||
// supa gummi (all stats boost)
|
||||
boost_flags = 0xf;
|
||||
}
|
||||
else {
|
||||
s32 random_index = RandomCapped(4);
|
||||
u16* table = &gGummiStatBoostLUT;
|
||||
boost_flags = table[random_index];
|
||||
}
|
||||
|
||||
a4->unk2 = boost_flags;
|
||||
boost_flags = a4->unk2;
|
||||
if (a4->unk2 & 1) {
|
||||
if (pokemon->pokeAtt < 255) {
|
||||
pokemon->pokeAtt++;
|
||||
}
|
||||
else {
|
||||
// fix operand order
|
||||
u16 unk2 = a4->unk2;
|
||||
unk2 &= ~1;
|
||||
a4->unk2 &= unk2;
|
||||
}
|
||||
}
|
||||
if (a4->unk2 & 2) {
|
||||
if (pokemon->pokeSPAtt < 255) {
|
||||
pokemon->pokeSPAtt++;
|
||||
}
|
||||
else {
|
||||
a4->unk2 &= ~2;
|
||||
}
|
||||
}
|
||||
if (a4->unk2 & 4) {
|
||||
if (pokemon->pokeDef < 255) {
|
||||
pokemon->pokeDef++;
|
||||
}
|
||||
else {
|
||||
a4->unk2 &= ~4;
|
||||
}
|
||||
}
|
||||
if (a4->unk2 & 8) {
|
||||
if (pokemon->pokeSPDef < 255) {
|
||||
pokemon->pokeSPDef++;
|
||||
}
|
||||
else {
|
||||
a4->unk2 &= ~8;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool8 IsGummiItem(u8 itemIndex)
|
||||
{
|
||||
if (itemIndex < ITEM_ID_WHITE_GUMMI) {
|
||||
return FALSE;
|
||||
}
|
||||
if (itemIndex > ITEM_ID_SILVER_GUMMI) {
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 HasGummiItem()
|
||||
{
|
||||
s32 i;
|
||||
for (i = 0; i < INVENTORY_SIZE; i++) {
|
||||
UNUSED size_t offs = offsetof(struct TeamInventory, teamItems[i]);
|
||||
if ((i[gTeamInventory_203B460->teamItems].unk0 & 1) && IsGummiItem(i[gTeamInventory_203B460->teamItems].itemIndex)) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void MoveToStorage(struct ItemSlot* slot)
|
||||
{
|
||||
if (IsThrowableItem(slot->itemIndex)) {
|
||||
gTeamInventory_203B460->teamStorage[slot->itemIndex] += slot->numItems;
|
||||
}
|
||||
else {
|
||||
gTeamInventory_203B460->teamStorage[slot->itemIndex]++;
|
||||
}
|
||||
|
||||
if (gTeamInventory_203B460->teamStorage[slot->itemIndex] > 999) {
|
||||
gTeamInventory_203B460->teamStorage[slot->itemIndex] = 999;
|
||||
}
|
||||
}
|
||||
|
||||
s32 xxx_count_inv_unk230()
|
||||
{
|
||||
s32 i;
|
||||
s32 counter = 0;
|
||||
for (i = 0; i < 8; i++) {
|
||||
if (gTeamInventory_203B460->unk230[i].unk0) {
|
||||
counter++;
|
||||
}
|
||||
}
|
||||
return counter;
|
||||
}
|
||||
|
||||
void xxx_init_unk230_substruct(u8 i)
|
||||
{
|
||||
struct subStruct_203B460* unk230;
|
||||
|
||||
unk230 = &gTeamInventory_203B460->unk230[i];
|
||||
unk230->unk0 = 0;
|
||||
unk230->unk1 = 0;
|
||||
}
|
||||
|
||||
struct subStruct_203B460* sub_809185C(u8 i)
|
||||
{
|
||||
return &gTeamInventory_203B460->unk230[i];
|
||||
}
|
||||
|
||||
void xxx_fill_unk230_gaps()
|
||||
{
|
||||
// fill unk230 gaps
|
||||
// basically the same as FillInventoryGaps
|
||||
s32 slot_checking = 0;
|
||||
s32 last_filled = 0;
|
||||
|
||||
do {
|
||||
// effectively just a while loop
|
||||
if ((slot_checking < 8) && !gTeamInventory_203B460->unk230[slot_checking].unk0) {
|
||||
do {
|
||||
// find next empty slot
|
||||
slot_checking++;
|
||||
} while ((slot_checking < 8) && !gTeamInventory_203B460->unk230[slot_checking].unk0);
|
||||
}
|
||||
|
||||
if (slot_checking == 8) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (slot_checking > last_filled) {
|
||||
// shift it down
|
||||
gTeamInventory_203B460->unk230[last_filled] = gTeamInventory_203B460->unk230[slot_checking];
|
||||
}
|
||||
slot_checking++;
|
||||
last_filled++;
|
||||
} while (1);
|
||||
|
||||
// clear out the rest of the slots
|
||||
for (; last_filled < 8; last_filled++) {
|
||||
xxx_init_unk230_substruct(last_filled);
|
||||
}
|
||||
}
|
||||
@@ -144,14 +144,14 @@ void sub_8017B88(void)
|
||||
else
|
||||
{
|
||||
gUnknown_203B208->itemIndex = sub_801CB24();
|
||||
sub_8090A8C(&gUnknown_203B208->unkC, gUnknown_203B208->itemIndex, 0);
|
||||
xxx_init_itemslot_8090A8C(&gUnknown_203B208->unkC, gUnknown_203B208->itemIndex, 0);
|
||||
gUnknown_203B208->unkC.numItems = 1;
|
||||
UpdateKangaskhanStorageState(0x19);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
gUnknown_203B208->itemIndex = sub_801CB24();
|
||||
sub_8090A8C(&gUnknown_203B208->unkC, gUnknown_203B208->itemIndex, 0);
|
||||
xxx_init_itemslot_8090A8C(&gUnknown_203B208->unkC, gUnknown_203B208->itemIndex, 0);
|
||||
gUnknown_203B208->unkC.numItems = 1;
|
||||
UpdateKangaskhanStorageState(0x1A);
|
||||
break;
|
||||
|
||||
@@ -10,9 +10,7 @@ extern struct unkStruct_203B210 *gUnknown_203B210;
|
||||
extern struct TeamInventory *gTeamInventory_203B460;
|
||||
|
||||
extern u32 GetStackSellPrice(struct ItemSlot *);
|
||||
extern bool8 CanSellItem(u8);
|
||||
extern u32 xxx_count_inv_unk230(void);
|
||||
extern u32 sub_8091A48(void);
|
||||
extern s32 sub_80144A4(s32 *);
|
||||
void UpdateKecleonStoreState(u32);
|
||||
extern u32 sub_801B410(void);
|
||||
@@ -170,7 +168,7 @@ u32 sub_8019D8C(void)
|
||||
if(gUnknown_203B210->unk4)
|
||||
return xxx_count_inv_unk230();
|
||||
else
|
||||
return sub_8091A48();
|
||||
return xxx_count_non_empty_inv_unk250_8091A48();
|
||||
}
|
||||
|
||||
void sub_8019DAC(void)
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
#include "global.h"
|
||||
#include "play_time.h"
|
||||
#include "code_8092334.h"
|
||||
|
||||
extern struct PlayTimeStruct *gPlayTimeRef;
|
||||
EWRAM_DATA struct PlayTimeStruct gPlayTime;
|
||||
|
||||
extern void sub_809488C(u8 *r0, u8 *r1, u32);
|
||||
extern void sub_8094924(u8 *r0, u8 *r1, u32);
|
||||
|
||||
void InitializePlayTime(void)
|
||||
{
|
||||
@@ -76,7 +75,7 @@ void DeconstructPlayTime(struct PlayTimeStruct *r0, u32 *outHours, u32 *outMinut
|
||||
}
|
||||
}
|
||||
|
||||
void WritePlayTime(u8 *r0)
|
||||
void WritePlayTime(struct unkStruct_8094924 *r0)
|
||||
{
|
||||
sub_809488C(r0, (&(gPlayTimeRef->frames)), 6);
|
||||
sub_809488C(r0, (&(gPlayTimeRef->seconds)), 6);
|
||||
@@ -84,10 +83,10 @@ void WritePlayTime(u8 *r0)
|
||||
sub_809488C(r0, (u8 *)(&(gPlayTimeRef->hours)), 14);
|
||||
}
|
||||
|
||||
void ReadPlayTime(u8 *r0)
|
||||
void ReadPlayTime(struct unkStruct_8094924 *r0)
|
||||
{
|
||||
sub_8094924(r0, (&(gPlayTimeRef->frames)), 6);
|
||||
sub_8094924(r0, (&(gPlayTimeRef->seconds)), 6);
|
||||
sub_8094924(r0, (&(gPlayTimeRef->minutes)), 6);
|
||||
sub_8094924(r0, (u8 *)(&(gPlayTimeRef->hours)), 14);
|
||||
sub_8094924(r0, (u8*)(&(gPlayTimeRef->hours)), 14);
|
||||
}
|
||||
|
||||
@@ -1,14 +1,10 @@
|
||||
#include "global.h"
|
||||
#include "rescue_team_info.h"
|
||||
#include "code_8092334.h"
|
||||
|
||||
extern struct RescueTeamData *gRescueTeamInfoRef;
|
||||
EWRAM_DATA struct RescueTeamData gRescueTeamInfo;
|
||||
|
||||
extern void sub_809485C(u32 *r0, u8 *r1, u32 r2);
|
||||
extern void sub_809486C(u32 *r0, u8 *r1, u32 r2);
|
||||
extern void sub_809488C(u32 *r0, u8 *r1, u32 r2);
|
||||
extern void sub_8094924(u32 *r0, u8 *r1, u32);
|
||||
extern void nullsub_102(u32 *r0);
|
||||
extern u8 sub_80023E4(u32);
|
||||
extern void sub_80922B4(u8 *buffer, u8 *string, s32 size);
|
||||
extern void BoundedCopyStringtoBuffer(u8 *buffer, u8 *string, s32 size);
|
||||
@@ -134,7 +130,7 @@ u8 sub_80921B8(void)
|
||||
u32 SaveRescueTeamInfo(u8 *param_1, u32 size)
|
||||
|
||||
{
|
||||
u32 auStack36[4];
|
||||
struct unkStruct_8094924 auStack36;
|
||||
u8 neg1;
|
||||
u8 zero;
|
||||
u8 *puVar2;
|
||||
@@ -142,9 +138,9 @@ u32 SaveRescueTeamInfo(u8 *param_1, u32 size)
|
||||
neg1 = -1;
|
||||
zero = 0;
|
||||
|
||||
sub_809486C(auStack36, param_1, size);
|
||||
sub_809488C(auStack36, gRescueTeamInfoRef->teamName, 0x58);
|
||||
sub_809488C(auStack36, (u8 *)&gRescueTeamInfoRef->teamRankPts, 0x20);
|
||||
sub_809486C(&auStack36, param_1, size);
|
||||
sub_809488C(&auStack36, gRescueTeamInfoRef->teamName, 0x58);
|
||||
sub_809488C(&auStack36, (u8 *)&gRescueTeamInfoRef->teamRankPts, 0x20);
|
||||
gRescueTeamInfoRef->unk10 = sub_80023E4(0);
|
||||
|
||||
if (gRescueTeamInfoRef->unk10 != 0)
|
||||
@@ -155,21 +151,21 @@ u32 SaveRescueTeamInfo(u8 *param_1, u32 size)
|
||||
{
|
||||
puVar2 = &zero;
|
||||
}
|
||||
sub_809488C(auStack36,puVar2,1);
|
||||
nullsub_102(auStack36);
|
||||
return auStack36[2];
|
||||
sub_809488C(&auStack36,puVar2,1);
|
||||
nullsub_102(&auStack36);
|
||||
return auStack36.unk8;
|
||||
}
|
||||
|
||||
u32 ReadRescueTeamInfo(u8 *param_1, u32 size)
|
||||
{
|
||||
u32 auStack32 [4];
|
||||
struct unkStruct_8094924 auStack32;
|
||||
u8 byteArray[4];
|
||||
|
||||
sub_809485C(auStack32, param_1, size);
|
||||
sub_8094924(auStack32, gRescueTeamInfoRef->teamName, 0x58);
|
||||
sub_8094924(auStack32, (u8 *)&gRescueTeamInfoRef->teamRankPts, 0x20);
|
||||
sub_8094924(auStack32, byteArray, 1);
|
||||
sub_809485C(&auStack32, param_1, size);
|
||||
sub_8094924(&auStack32, gRescueTeamInfoRef->teamName, 0x58);
|
||||
sub_8094924(&auStack32, (u8 *)&gRescueTeamInfoRef->teamRankPts, 0x20);
|
||||
sub_8094924(&auStack32, byteArray, 1);
|
||||
gRescueTeamInfoRef->unk10 = byteArray[0] & 1;
|
||||
nullsub_102(auStack32);
|
||||
return auStack32[2];
|
||||
nullsub_102(&auStack32);
|
||||
return auStack32.unk8;
|
||||
}
|
||||
|
||||
@@ -63,7 +63,6 @@ extern void sub_80073E0(u32);
|
||||
extern void xxx_call_draw_string(u32, u32, u32 *, u32, u32);
|
||||
extern u8 sub_801CF14(u32);
|
||||
extern u32 sub_801D008();
|
||||
extern void sub_8090DC4(void*, u8, u32);
|
||||
extern void sub_801C8C4(u32, u32, s32 *, u32);
|
||||
|
||||
void sub_8036F30();
|
||||
|
||||
Reference in New Issue
Block a user