Merge pull request #111 from AnonymousRandomPerson/main
Some checks failed
build / build (push) Has been cancelled

Decomped some item funcs
This commit is contained in:
AnonymousRandomPerson
2025-02-13 00:01:07 -05:00
committed by GitHub
30 changed files with 3036 additions and 2965 deletions

View File

@@ -1,73 +1,30 @@
#pragma once
.public _02094C0C
.public _02094C18
.public _02094D0C
.public _02094D20
.public _02097F34
.public _02097F50
.public _02097F58
.public _02097F68
.public _02097F6C
.public _02097F7C
.public _02097F90
.public _02097F9C
.public _02097FAC
.public _02097FB8
.public _02097FC4
.public _02097FE4
.public _02098038
.public _02098054
.public _02098070
.public _0209808C
.public _0209809C
.public _020980AC
.public _020980B0
.public _0209E7A6
.public _020A18BC
.public _020AF6C4
.public _020AF6C8
.public _020AFF88_EU
.public AllInventoriesZInit
.public AllKecleonShopsZInit
.public AllocateTemp1024ByteBufferFromPool
.public ARM9_UNKNOWN_TABLE__NA_2097FF8
.public AVAILABLE_ITEMS_IN_GROUP_TABLE
.public BAG_ITEMS
.public BAG_ITEMS_PTR_MIRROR
.public CopyBitsFrom
.public CopyBitsTo
.public DrawTextInWindow
.public DUNGEON_RETURN_STATUS_TABLE
.public DrawTextInWindow
.public FormatMoveString
.public GET_ITEM_NAME_FORMATTED_SPRINTF
.public GetDungeonGroup
.public GetDungeonResultString
.public GetLanguage
.public GetItemCategoryVeneer
.public GetStringFromFileVeneer
.public GetWindow
.public HandleSir0Translation
.public InitMoveCheckId
.public ITEM_DATA_TABLE_PTRS
.public ITEM_TABLES_PTRS_1
.public LoadFileFromRom
.public MemAlloc
.public MemFree
.public MONEY_QUANTITY_TABLE
.public MultiplyByFixedPoint
.public PointsToZero
.public LoadItemPspi2n
.public PreprocessString
.public RandRangeSafe
.public RescueInventoryZInit
.public SetActiveInventoryToMain
.public SpecialEpisodeInventoryZInit
.public SpecialEpisodeKecleonShopZInit
.public strcpy
.public StringFromId
.public strncpy
.public _02094C0C
.public _02094C18
.public _0209E7A6
.public sub_0200D670
.public sub_0200FD38
.public sub_0200FD3C
.public sub_02010590
.public sub_02011AB8
.public sub_020238E0
.public sub_020265A8
.public sub_02050974
.public sub_02050990
.public sub_020509BC
.public vsprintf
.public ZInit8

View File

@@ -0,0 +1,56 @@
#pragma once
.public AVAILABLE_ITEMS_IN_GROUP_TABLE
.public BAG_ITEMS_PTR_MIRROR
.public CopyBitsFrom
.public CopyBitsTo
.public GetDungeonGroup
.public GetItemActionName
.public GetItemBuyPrice
.public GetItemCategory
.public GetItemMoveId
.public GetItemName
.public GetItemPaletteId
.public GetItemSellPrice
.public GetLanguage
.public GetThrownItemQuantityLimit
.public HandleSir0Translation
.public ITEM_DATA_TABLE_PTRS
.public ITEM_TABLES_PTRS_1
.public IsItemValid
.public LoadFileFromRom
.public MONEY_QUANTITY_TABLE
.public MemAlloc
.public MemFree
.public MultiplyByFixedPoint
.public PointsToZero
.public RandRangeSafe
.public ZInit8
.public _02094D0C
.public _02094D20
.public _02097F34
.public _02097F50
.public _02097F58
.public _02097F68
.public _02097F6C
.public _02097F7C
.public _02097F90
.public _02097F9C
.public _02097FAC
.public _02097FB8
.public _02097FC4
.public _02097FE4
.public _02098038
.public _02098054
.public _02098070
.public _020A18BC
.public _020AF6C4
.public _020AF6C8
.public _020AFF88_EU
.public strcpy
.public strncpy
.public sub_0200EB64
.public sub_020238E0
.public sub_02050974
.public sub_02050990
.public sub_020509BC
.public vsprintf

View File

@@ -0,0 +1,3 @@
#pragma once
.public GetExclusiveItemOffsetEnsureValid
.public ITEM_DATA_TABLE_PTRS

View File

@@ -0,0 +1,16 @@
#pragma once
.public ARM9_UNKNOWN_TABLE__NA_2097FF8
.public BAG_ITEMS_PTR_MIRROR
.public EnsureValidItem
.public GET_ITEM_NAME_FORMATTED_SPRINTF
.public ITEM_DATA_TABLE_PTRS
.public IsItemValid
.public ItemZInit
.public SprintfStatic__0200E808_EU
.public StringFromId
.public _0209808C
.public _0209809C
.public _020980AC
.public _020980B0
.public strcpy
.public vsprintf

View File

@@ -348,6 +348,7 @@
.public MISSION_MENU_STRING_IDS_2
.public MISSION_RANK_POINTS
.public MISSION_STRING_IDS
.public MissionToWonderMailPassword
.public MultiplyByFixedPoint
.public MUNCH_BELT_STAT_BOOST
.public NO_SEND_ITEM_TABLE
@@ -546,7 +547,6 @@
.public sub_0204C978
.public sub_0204CA1C
.public sub_0204D018
.public sub_0204DE7C
.public sub_0204E210
.public sub_0204E584
.public sub_0204E6FC

View File

@@ -2121,8 +2121,6 @@
.public sub_02060680
.public sub_020606E4
.public sub_0206074C
.public sub_02060804
.public sub_02060904
.public sub_02072D9C
.public sub_02072DBC
.public sub_02072DDC
@@ -2208,5 +2206,7 @@
.public UpdateSimpleMenu
.public UpdateTeamSelectionMenu
.public UpdateTextBox
.public ValidateLegendaryChallengeMission
.public ValidateNormalChallengeMission
.public vsprintf
.public wcstombs

View File

@@ -20,6 +20,7 @@
.public EnemyEvolution
.public EntityIsValid__022E0354
.public FadeToBlack
.public FillMissionDestinationInfo
.public FIXED_ROOM_REVISIT_OVERRIDES
.public FreeLoadedAttackSpriteAndMore
.public FreeTopScreenStatus
@@ -178,7 +179,6 @@
.public ov29_02346DA4
.public ov29_02346E48
.public ov29_023480FC
.public ov29_023484A0
.public ov29_02348850
.public ov29_02348894
.public ov29_023488C8

View File

@@ -35,6 +35,7 @@
.public GetNbFloorsPlusOne
.public GetNbPrecedingFloors
.public GetNbRecruited
.public GetPlayerGender
.public GetSecondFormIfValid
.public GetSpriteFileSize
.public GetSpriteSize
@@ -93,7 +94,6 @@
.public ov29_022EACCC
.public ov29_022EACE4
.public ov29_022ED0F4
.public ov29_022F42D8
.public ov29_0230027C
.public ov29_0230D618
.public ov29_02339138

View File

@@ -36,6 +36,7 @@
.public GetMonsterPreEvolution
.public GetName
.public GetPerformanceFlagWithChecks
.public GetPlayerGender
.public GetRandomExplorerMazeMonster
.public GetRandomSpawnMonsterID
.public GetSecondFormIfValid
@@ -111,7 +112,6 @@
.public ov29_022EAF34
.public ov29_022EAFB0
.public ov29_022F2FE4
.public ov29_022F42D8
.public ov29_022FA3D4
.public ov29_022FBA54
.public ov29_022FBBEC

File diff suppressed because it is too large Load Diff

2321
asm/main_0200CAFC.s Normal file

File diff suppressed because it is too large Load Diff

21
asm/main_0200E7E8.s Normal file
View File

@@ -0,0 +1,21 @@
.include "asm/macros.inc"
.include "main_0200E7E8.inc"
.text
arm_func_start GetExclusiveItemParameter
GetExclusiveItemParameter: ; 0x0200E7E8
stmdb sp!, {r3, lr}
bl GetExclusiveItemOffsetEnsureValid
ldr r1, _0200E804 ; =ITEM_DATA_TABLE_PTRS
#ifdef EUROPE
ldr r1, [r1, #4]
#else
ldr r1, [r1]
#endif
add r0, r1, r0, lsl #2
ldrsh r0, [r0, #2]
ldmia sp!, {r3, pc}
.align 2, 0
_0200E804: .word ITEM_DATA_TABLE_PTRS
arm_func_end GetExclusiveItemParameter

481
asm/main_0200E864.s Normal file
View File

@@ -0,0 +1,481 @@
.include "asm/macros.inc"
.include "main_0200E864.inc"
.text
arm_func_start GetItemName
GetItemName: ; 0x0200E864
stmdb sp!, {r3, lr}
bl EnsureValidItem
#if defined(EUROPE)
add r0, r0, #0x278
add r0, r0, #0x1800
#elif defined(JAPAN)
add r0, r0, #0x93
add r0, r0, #0xd00
#else
add r0, r0, #0x76
add r0, r0, #0x1a00
#endif
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
bl StringFromId
ldmia sp!, {r3, pc}
arm_func_end GetItemName
arm_func_start GetItemNameFormatted
GetItemNameFormatted: ; 0x0200E884
#ifdef EUROPE
#define GET_ITEM_NAME_FORMATTED_SPRINTF SprintfStatic__0200E808_EU
#else
#define GET_ITEM_NAME_FORMATTED_SPRINTF SprintfStatic__0200E990
#endif
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r7, r1
mov r8, r0
mov r0, r7
mov r6, r2
mov r5, r3
bl EnsureValidItem
#if defined(EUROPE)
add r0, r0, #0x278
add r0, r0, #0x1800
#elif defined(JAPAN)
add r0, r0, #0x93
add r0, r0, #0xd00
#else
add r0, r0, #0x76
add r0, r0, #0x1a00
#endif
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
bl StringFromId
mov r4, r0
mov r0, r7
bl EnsureValidItem
ldr r1, _0200E97C ; =ITEM_DATA_TABLE_PTRS
cmp r5, #0
#ifdef EUROPE
ldr r1, [r1]
#else
ldr r1, [r1, #4]
#endif
add r0, r1, r0, lsl #4
ldrb r1, [r0, #4]
bne _0200E8E8
add r0, r1, #0xf4
and r0, r0, #0xff
cmp r0, #2
bhi _0200E914
_0200E8E8:
cmp r6, #0
beq _0200E904
ldr r1, _0200E980 ; =_0209808C
mov r0, r8
mov r2, r4
bl GET_ITEM_NAME_FORMATTED_SPRINTF
ldmia sp!, {r4, r5, r6, r7, r8, pc}
_0200E904:
mov r0, r8
mov r1, r4
bl strcpy
ldmia sp!, {r4, r5, r6, r7, r8, pc}
_0200E914:
cmp r1, #0xf
bne _0200E94C
cmp r6, #0
beq _0200E938
ldr r1, _0200E984 ; =_0209809C
mov r0, r8
mov r2, r4
bl GET_ITEM_NAME_FORMATTED_SPRINTF
ldmia sp!, {r4, r5, r6, r7, r8, pc}
_0200E938:
ldr r1, _0200E988 ; =_020980AC
mov r0, r8
mov r2, r4
bl GET_ITEM_NAME_FORMATTED_SPRINTF
ldmia sp!, {r4, r5, r6, r7, r8, pc}
_0200E94C:
cmp r6, #0
beq _0200E968
ldr r1, _0200E98C ; =_020980B0
mov r0, r8
mov r2, r4
bl GET_ITEM_NAME_FORMATTED_SPRINTF
ldmia sp!, {r4, r5, r6, r7, r8, pc}
_0200E968:
ldr r1, _0200E988 ; =_020980AC
mov r0, r8
mov r2, r4
bl GET_ITEM_NAME_FORMATTED_SPRINTF
ldmia sp!, {r4, r5, r6, r7, r8, pc}
.align 2, 0
_0200E97C: .word ITEM_DATA_TABLE_PTRS
_0200E980: .word _0209808C
_0200E984: .word _0209809C
_0200E988: .word _020980AC
_0200E98C: .word _020980B0
arm_func_end GetItemNameFormatted
#ifndef EUROPE
arm_func_start SprintfStatic__0200E990
SprintfStatic__0200E990: ; 0x0200E990
stmdb sp!, {r0, r1, r2, r3}
stmdb sp!, {r3, lr}
add r2, sp, #0xc
bic r2, r2, #3
ldr r1, [sp, #0xc]
add r2, r2, #4
bl vsprintf
ldmia sp!, {r3, lr}
add sp, sp, #0x10
bx lr
arm_func_end SprintfStatic__0200E990
#endif
arm_func_start GetItemBuyPrice
GetItemBuyPrice: ; 0x0200E9B8
stmdb sp!, {r3, lr}
bl EnsureValidItem
ldr r1, _0200E9D4 ; =ITEM_DATA_TABLE_PTRS
mov r0, r0, lsl #4
#ifdef EUROPE
ldr r1, [r1]
#else
ldr r1, [r1, #4]
#endif
ldrh r0, [r1, r0]
ldmia sp!, {r3, pc}
.align 2, 0
_0200E9D4: .word ITEM_DATA_TABLE_PTRS
arm_func_end GetItemBuyPrice
arm_func_start GetItemSellPrice
GetItemSellPrice: ; 0x0200E9D8
stmdb sp!, {r3, lr}
bl EnsureValidItem
ldr r1, _0200E9F4 ; =ITEM_DATA_TABLE_PTRS
#ifdef EUROPE
ldr r1, [r1]
#else
ldr r1, [r1, #4]
#endif
add r0, r1, r0, lsl #4
ldrh r0, [r0, #2]
ldmia sp!, {r3, pc}
.align 2, 0
_0200E9F4: .word ITEM_DATA_TABLE_PTRS
arm_func_end GetItemSellPrice
arm_func_start GetItemSpriteId
GetItemSpriteId: ; 0x0200E9F8
stmdb sp!, {r3, lr}
bl EnsureValidItem
ldr r1, _0200EA14 ; =ITEM_DATA_TABLE_PTRS
#ifdef EUROPE
ldr r1, [r1]
#else
ldr r1, [r1, #4]
#endif
add r0, r1, r0, lsl #4
ldrb r0, [r0, #5]
ldmia sp!, {r3, pc}
.align 2, 0
_0200EA14: .word ITEM_DATA_TABLE_PTRS
arm_func_end GetItemSpriteId
arm_func_start GetItemPaletteId
GetItemPaletteId: ; 0x0200EA18
stmdb sp!, {r3, lr}
bl EnsureValidItem
ldr r1, _0200EA34 ; =ITEM_DATA_TABLE_PTRS
#ifdef EUROPE
ldr r1, [r1]
#else
ldr r1, [r1, #4]
#endif
add r0, r1, r0, lsl #4
ldrb r0, [r0, #0xc]
ldmia sp!, {r3, pc}
.align 2, 0
_0200EA34: .word ITEM_DATA_TABLE_PTRS
arm_func_end GetItemPaletteId
arm_func_start GetItemActionName
GetItemActionName: ; 0x0200EA38
stmdb sp!, {r3, lr}
bl EnsureValidItem
ldr r1, _0200EA54 ; =ITEM_DATA_TABLE_PTRS
#ifdef EUROPE
ldr r1, [r1]
#else
ldr r1, [r1, #4]
#endif
add r0, r1, r0, lsl #4
ldrb r0, [r0, #0xd]
ldmia sp!, {r3, pc}
.align 2, 0
_0200EA54: .word ITEM_DATA_TABLE_PTRS
arm_func_end GetItemActionName
arm_func_start GetThrownItemQuantityLimit
GetThrownItemQuantityLimit: ; 0x0200EA58
stmdb sp!, {r4, lr}
mov r4, r1
bl EnsureValidItem
ldr r1, _0200EA7C ; =ITEM_DATA_TABLE_PTRS
#ifdef EUROPE
ldr r1, [r1]
#else
ldr r1, [r1, #4]
#endif
add r0, r1, r0, lsl #4
add r0, r0, r4
ldrb r0, [r0, #0xa]
ldmia sp!, {r4, pc}
.align 2, 0
_0200EA7C: .word ITEM_DATA_TABLE_PTRS
arm_func_end GetThrownItemQuantityLimit
arm_func_start GetItemMoveId
GetItemMoveId: ; 0x0200EA80
stmdb sp!, {r3, lr}
bl EnsureValidItem
ldr r1, _0200EA9C ; =ITEM_DATA_TABLE_PTRS
#ifdef EUROPE
ldr r1, [r1]
#else
ldr r1, [r1, #4]
#endif
add r0, r1, r0, lsl #4
ldrsh r0, [r0, #8]
ldmia sp!, {r3, pc}
.align 2, 0
_0200EA9C: .word ITEM_DATA_TABLE_PTRS
arm_func_end GetItemMoveId
arm_func_start TestItemAiFlag
TestItemAiFlag: ; 0x0200EAA0
stmdb sp!, {r3, lr}
cmp r1, #0
bne _0200EAD4
bl EnsureValidItem
ldr r1, _0200EB2C ; =ITEM_DATA_TABLE_PTRS
#ifdef EUROPE
ldr r1, [r1]
#else
ldr r1, [r1, #4]
#endif
add r0, r1, r0, lsl #4
ldrb r0, [r0, #0xe]
tst r0, #0x80
movne r0, #1
moveq r0, #0
and r0, r0, #0xff
ldmia sp!, {r3, pc}
_0200EAD4:
cmp r1, #1
bne _0200EB04
bl EnsureValidItem
ldr r1, _0200EB2C ; =ITEM_DATA_TABLE_PTRS
#ifdef EUROPE
ldr r1, [r1]
#else
ldr r1, [r1, #4]
#endif
add r0, r1, r0, lsl #4
ldrb r0, [r0, #0xe]
tst r0, #0x40
movne r0, #1
moveq r0, #0
and r0, r0, #0xff
ldmia sp!, {r3, pc}
_0200EB04:
bl EnsureValidItem
ldr r1, _0200EB2C ; =ITEM_DATA_TABLE_PTRS
#ifdef EUROPE
ldr r1, [r1]
#else
ldr r1, [r1, #4]
#endif
add r0, r1, r0, lsl #4
ldrb r0, [r0, #0xe]
tst r0, #0x20
movne r0, #1
moveq r0, #0
and r0, r0, #0xff
ldmia sp!, {r3, pc}
.align 2, 0
_0200EB2C: .word ITEM_DATA_TABLE_PTRS
arm_func_end TestItemAiFlag
arm_func_start IsItemInTimeDarkness
IsItemInTimeDarkness: ; 0x0200EB30
ldr r1, _0200EB54 ; =ITEM_DATA_TABLE_PTRS
#ifdef EUROPE
ldr r1, [r1]
#else
ldr r1, [r1, #4]
#endif
add r0, r1, r0, lsl #4
ldrb r0, [r0, #0xe]
tst r0, #2
movne r0, #1
moveq r0, #0
and r0, r0, #0xff
bx lr
.align 2, 0
_0200EB54: .word ITEM_DATA_TABLE_PTRS
arm_func_end IsItemInTimeDarkness
arm_func_start IsItemValidVeneer
IsItemValidVeneer: ; 0x0200EB58
ldr ip, _0200EB60 ; =IsItemValid
bx ip
.align 2, 0
_0200EB60: .word IsItemValid
arm_func_end IsItemValidVeneer
arm_func_start sub_0200EB64
sub_0200EB64: ; 0x0200EB64
ldr r1, _0200EB88 ; =ITEM_DATA_TABLE_PTRS
mov r2, r0, lsl #0x1f
ldr r1, [r1, #8]
mov r0, r0, asr #1
ldr r3, [r1, r0, lsl #2]
ldr r0, _0200EB8C ; =0x000007FF
mov r1, r2, lsr #0x1b
and r0, r0, r3, asr r1
bx lr
.align 2, 0
_0200EB88: .word ITEM_DATA_TABLE_PTRS
_0200EB8C: .word 0x000007FF
arm_func_end sub_0200EB64
arm_func_start sub_0200EB90
sub_0200EB90: ; 0x0200EB90
mov ip, #0
ldr r2, _0200EBC8 ; =ARM9_UNKNOWN_TABLE__NA_2097FF8
b _0200EBB8
_0200EB9C:
add r1, r2, ip, lsl #2
ldrsh r1, [r1, #2]
mov r3, ip, lsl #2
cmp r0, r1
ldreqsh r0, [r2, r3]
bxeq lr
add ip, ip, #1
_0200EBB8:
cmp ip, #0x10
blt _0200EB9C
mov r0, #0
bx lr
.align 2, 0
_0200EBC8: .word ARM9_UNKNOWN_TABLE__NA_2097FF8
arm_func_end sub_0200EB90
arm_func_start SetActiveInventoryToMain
SetActiveInventoryToMain: ; 0x0200EBCC
ldr ip, _0200EBD8 ; =SetActiveInventory
mov r0, #0
bx ip
.align 2, 0
_0200EBD8: .word SetActiveInventory
arm_func_end SetActiveInventoryToMain
arm_func_start AllInventoriesZInit
AllInventoriesZInit: ; 0x0200EBDC
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
mov sl, #0
ldr r6, _0200EC44 ; =BAG_ITEMS_PTR_MIRROR
mov r7, sl
mov fp, sl
mov r4, #6
mov r5, #0x12c
_0200EBF8:
mul sb, sl, r5
mov r8, fp
_0200EC00:
ldr r0, [r6]
add r0, r0, sb
mla r0, r8, r4, r0
bl ItemZInit
add r8, r8, #1
cmp r8, #0x32
blt _0200EC00
ldr r0, [r6]
add r0, r0, sl, lsl #2
add r0, r0, #0x1000
add sl, sl, #1
str r7, [r0, #0x394]
cmp sl, #3
blt _0200EBF8
mov r0, r7
bl SetActiveInventory
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}
.align 2, 0
_0200EC44: .word BAG_ITEMS_PTR_MIRROR
arm_func_end AllInventoriesZInit
arm_func_start SpecialEpisodeInventoryZInit
SpecialEpisodeInventoryZInit: ; 0x0200EC48
stmdb sp!, {r4, r5, r6, lr}
ldr r5, _0200EC8C ; =BAG_ITEMS_PTR_MIRROR
mov r6, #0
mov r4, #6
_0200EC58:
ldr r0, [r5]
add r0, r0, #0x12c
mla r0, r6, r4, r0
bl ItemZInit
add r6, r6, #1
cmp r6, #0x32
blt _0200EC58
ldr r0, _0200EC8C ; =BAG_ITEMS_PTR_MIRROR
mov r1, #0
ldr r0, [r0]
add r0, r0, #0x1000
str r1, [r0, #0x398]
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_0200EC8C: .word BAG_ITEMS_PTR_MIRROR
arm_func_end SpecialEpisodeInventoryZInit
arm_func_start RescueInventoryZInit
RescueInventoryZInit: ; 0x0200EC90
stmdb sp!, {r4, r5, r6, lr}
ldr r5, _0200ECD4 ; =BAG_ITEMS_PTR_MIRROR
mov r6, #0
mov r4, #6
_0200ECA0:
ldr r0, [r5]
add r0, r0, #0x258
mla r0, r6, r4, r0
bl ItemZInit
add r6, r6, #1
cmp r6, #0x32
blt _0200ECA0
ldr r0, _0200ECD4 ; =BAG_ITEMS_PTR_MIRROR
mov r1, #0
ldr r0, [r0]
add r0, r0, #0x1000
str r1, [r0, #0x39c]
ldmia sp!, {r4, r5, r6, pc}
.align 2, 0
_0200ECD4: .word BAG_ITEMS_PTR_MIRROR
arm_func_end RescueInventoryZInit
arm_func_start SetActiveInventory
SetActiveInventory: ; 0x0200ECD8
ldr r2, _0200ECF8 ; =BAG_ITEMS_PTR_MIRROR
mov r1, #0x12c
ldr r3, [r2]
strb r0, [r3, #0x388]
ldr r2, [r2]
mla r1, r0, r1, r2
str r1, [r2, #0x384]
bx lr
.align 2, 0
_0200ECF8: .word BAG_ITEMS_PTR_MIRROR
arm_func_end SetActiveInventory

View File

@@ -31938,8 +31938,8 @@ _0204DE74: .word WONDER_MAIL_BITS_SWAP
_0204DE78: .word _0209E264
arm_func_end WonderMailPasswordToMission
arm_func_start sub_0204DE7C
sub_0204DE7C: ; 0x0204DE7C
arm_func_start MissionToWonderMailPassword
MissionToWonderMailPassword: ; 0x0204DE7C
stmdb sp!, {r4, r5, lr}
sub sp, sp, #0x6c
mov r2, #0
@@ -31997,7 +31997,7 @@ _0204DF20:
.align 2, 0
_0204DF4C: .word _0209E264
_0204DF50: .word WONDER_MAIL_BITS_SWAP
arm_func_end sub_0204DE7C
arm_func_end MissionToWonderMailPassword
arm_func_start sub_0204DF54
sub_0204DF54: ; 0x0204DF54

View File

@@ -14444,8 +14444,8 @@ _020607FC:
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end sub_0206074C
arm_func_start sub_02060804
sub_02060804: ; 0x02060804
arm_func_start ValidateNormalChallengeMission
ValidateNormalChallengeMission: ; 0x02060804
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r8, r0
mov r7, r1
@@ -14516,10 +14516,10 @@ _020608E0:
_020608FC:
and r0, r4, #0xff
ldmia sp!, {r4, r5, r6, r7, r8, pc}
arm_func_end sub_02060804
arm_func_end ValidateNormalChallengeMission
arm_func_start sub_02060904
sub_02060904: ; 0x02060904
arm_func_start ValidateLegendaryChallengeMission
ValidateLegendaryChallengeMission: ; 0x02060904
stmdb sp!, {r3, lr}
ldrb r3, [r0, #0x20]
ldrb r2, [r1, #1]
@@ -14548,7 +14548,7 @@ _02060948:
_02060964:
and r0, ip, #0xff
ldmia sp!, {r3, pc}
arm_func_end sub_02060904
arm_func_end ValidateLegendaryChallengeMission
arm_func_start sub_0206096C
sub_0206096C: ; 0x0206096C
@@ -16037,7 +16037,7 @@ sub_02061CC8: ; 0x02061CC8
add r0, sp, #4
mov r1, r4
add sb, sb, #0xd
bl sub_0204DE7C
bl MissionToWonderMailPassword
mov r7, #0
mov fp, #0x44
add r6, sp, #4

View File

@@ -20337,8 +20337,8 @@ ARM9_UNKNOWN_FUNCTION_TABLE__NA_20A3CF4:
.word sub_02060680
.word sub_020606E4
.word sub_0206074C
.word sub_02060804
.word sub_02060904
.word ValidateNormalChallengeMission
.word ValidateLegendaryChallengeMission
.global MISSION_BANNED_STORY_MONSTERS
MISSION_BANNED_STORY_MONSTERS:
.byte 0x6D, 0x00, 0x29, 0x00, 0xDD, 0x01, 0x83, 0x01, 0x69, 0x00, 0x71, 0x00, 0x73, 0x00, 0xB2, 0x00

View File

@@ -273,7 +273,7 @@ _022DEE78:
addne r0, r0, #0x4000
strneb r1, [r0, #0xda + OV29_022DEBBC_OFFSET]
_022DEEA4:
bl ov29_023484A0
bl FillMissionDestinationInfo
cmp r4, #1
bne _022DEF08
ldr r1, _022DEF2C ; =DUNGEON_PTR

View File

@@ -5890,7 +5890,7 @@ ov29_022E7F94: ; 0x022E7F94
strb r0, [r1]
bl SetMinimapDataE448
bl ov29_022E8104
bl ov29_022F42D8
bl GetPlayerGender
cmp r0, #2
ldr r0, _022E8014 ; =TOP_SCREEN_STATUS_PTR
moveq r1, #1
@@ -6010,7 +6010,7 @@ InitializeTeamStats: ; 0x022E8130
mov r1, #1
ldr r0, [r0]
strb r1, [r0, #0x24]
bl ov29_022F42D8
bl GetPlayerGender
cmp r0, #2
ldr r0, _022E818C ; =TOP_SCREEN_STATUS_PTR
moveq r1, #1

View File

@@ -4429,8 +4429,8 @@ ov29_022F426C: ; 0x022F426C
_022F42D4: .word DUNGEON_PTR
arm_func_end ov29_022F426C
arm_func_start ov29_022F42D8
ov29_022F42D8: ; 0x022F42D8
arm_func_start GetPlayerGender
GetPlayerGender: ; 0x022F42D8
stmdb sp!, {r3, lr}
bl GetHero
cmp r0, #0
@@ -4439,7 +4439,7 @@ ov29_022F42D8: ; 0x022F42D8
ldrsh r0, [r0, #4]
bl GetMonsterGenderVeneer
ldmia sp!, {r3, pc}
arm_func_end ov29_022F42D8
arm_func_end GetPlayerGender
arm_func_start ov29_022F42F8
ov29_022F42F8: ; 0x022F42F8

View File

@@ -656,8 +656,8 @@ _02348498: .word ov29_023537C4
_0234849C: .word ov29_0237C694
arm_func_end HandleFloorCard
arm_func_start ov29_023484A0
ov29_023484A0: ; 0x023484A0
arm_func_start FillMissionDestinationInfo
FillMissionDestinationInfo: ; 0x023484A0
#ifdef JAPAN
#define OV29_023484A0_OFFSET -0xA4
#else
@@ -704,7 +704,7 @@ _023484FC:
#else
mov r0, r7
mov r1, r8
bl ov29_02349790
bl GetMissionIfActiveOnFloor
movs sb, r0
moveq r0, #0
beq _02348784
@@ -924,7 +924,7 @@ _023487D4:
.align 2, 0
_02348804: .word DUNGEON_PTR
_02348808: .word ov10_022C48E4
arm_func_end ov29_023484A0
arm_func_end FillMissionDestinationInfo
#ifndef JAPAN
arm_func_start ov29_0234880C
@@ -936,7 +936,7 @@ ov29_0234880C: ; 0x0234880C
_0234881C:
mov r0, r5
mov r1, r4
bl ov29_02349790
bl GetMissionIfActiveOnFloor
cmp r0, #0
movne r0, r4
ldmneia sp!, {r3, r4, r5, pc}
@@ -2267,8 +2267,8 @@ _02349788:
arm_func_end FloorHasMissionMonster
#ifndef JAPAN
arm_func_start ov29_02349790
ov29_02349790: ; 0x02349790
arm_func_start GetMissionIfActiveOnFloor
GetMissionIfActiveOnFloor: ; 0x02349790
stmdb sp!, {r4, lr}
mov r4, r0
mov r0, r1
@@ -2283,7 +2283,7 @@ ov29_02349790: ; 0x02349790
cmpeq r2, r1
movne r0, #0
ldmia sp!, {r4, pc}
arm_func_end ov29_02349790
arm_func_end GetMissionIfActiveOnFloor
#endif
arm_func_start ov29_023497C8

View File

@@ -4384,7 +4384,7 @@ SetBothScreensWindowColorToDefault: ; 0x0234CF60
bl SetBothScreensWindowsColor
ldmia sp!, {r3, pc}
_0234CF7C:
bl ov29_022F42D8
bl GetPlayerGender
cmp r0, #1
bne _0234CF94
mov r0, #0

View File

@@ -1,6 +1,14 @@
#ifndef PMDSKY_ITEM_H
#define PMDSKY_ITEM_H
#include "util.h"
#ifdef EUROPE
#define ITEM_DATA_TABLE_PTRS_INDEX 0
#else
#define ITEM_DATA_TABLE_PTRS_INDEX 1
#endif
// Item ID
enum item_id {
ITEM_NOTHING = 0,
@@ -1483,4 +1491,12 @@ struct bag_items {
/* 0x384 */ struct bag_items_inner *bag_items;
};
struct item_data_entry
{
/* 0x0 */ u8 *name;
/* 0x4 */ enum item_category category;
u8 fill5[0xE - 0x5];
/* 0xE */ bool8 valid;
};
#endif //PMDSKY_ITEM_H

10
include/item_util.h Normal file
View File

@@ -0,0 +1,10 @@
#ifndef PMDSKY_ITEM_UTIL_H
#define PMDSKY_ITEM_UTIL_H
#include "item.h"
// Likely a linker-generated veneer for GetItemCategory.
// See https://developer.arm.com/documentation/dui0474/k/image-structure-and-generation/linker-generated-veneers/what-is-a-veneer-
enum item_category GetItemCategoryVeneer(s16 item_id);
#endif //PMDSKY_ITEM_UTIL_H

10
include/item_util_1.h Normal file
View File

@@ -0,0 +1,10 @@
#ifndef PMDSKY_ITEM_UTIL_1_H
#define PMDSKY_ITEM_UTIL_1_H
#include "util.h"
// Checks if an item is valid given its ID.
// In particular, checks if the "is valid" flag is set on its item_p.bin entry.
bool8 IsItemValid(s16 item_id);
#endif //PMDSKY_ITEM_UTIL_1_H

11
include/item_util_2.h Normal file
View File

@@ -0,0 +1,11 @@
#ifndef PMDSKY_ITEM_UTIL_2_H
#define PMDSKY_ITEM_UTIL_2_H
#include "item.h"
// Returns the category of the specified item
enum item_category GetItemCategory(s16 item_id);
// Checks if the given item ID is valid (using IsItemValid). If so, return the given item ID. Otherwise, return ITEM_PLAIN_SEED.
s16 EnsureValidItem(s16 item_id);
#endif //PMDSKY_ITEM_UTIL_2_H

View File

@@ -21,6 +21,12 @@ Static main
Object src/directory_file_mngr.o
Object src/directory_file.o
Object asm/main_0200C4CC.o
Object src/item_util.o
Object asm/main_0200CAFC.o
Object src/item_util_1.o
Object asm/main_0200E7E8.o
Object src/item_util_2.o
Object asm/main_0200E864.o
Object src/main_0200ECFC.o
Object asm/main_0200ED1C.o
Object src/main_02025788.o

View File

@@ -4,6 +4,7 @@
#include "dungeon_capabilities_1.h"
#include "dungeon_util_static.h"
#include "item.h"
#include "item_util.h"
#define NUM_POTENTIAL_ROCK_TARGETS 20
@@ -18,7 +19,6 @@ extern void SetMonsterActionFields(struct action_data *action_pointer, u16 actio
extern bool8 IqSkillIsEnabled(struct entity *pokemon, u8 iq_skill);
extern const struct tile *GetTile(s32 x, s32 y);
extern bool8 TestItemAiFlag(s16 id, s32 aiFlag);
extern enum item_category GetItemCategoryVeneer(s16 index);
extern void GetPossibleAiArcItemTargets(struct entity *pokemon, struct item *item, struct position potential_targets[], bool8 ignore_roll_chance);
extern s32 GetDirectionTowardsPosition(struct position *origin_pos, struct position *target_pos);
extern struct item *GetItemInfo(struct entity *entity);

7
src/item_util.c Normal file
View File

@@ -0,0 +1,7 @@
#include "item_util.h"
#include "item_util_2.h"
enum item_category GetItemCategoryVeneer(s16 item_id)
{
return GetItemCategory(item_id);
}

12
src/item_util_1.c Normal file
View File

@@ -0,0 +1,12 @@
#include "item_util_1.h"
#include "item.h"
extern struct item_data_entry *ITEM_DATA_TABLE_PTRS[3];
bool8 IsItemValid(s16 item_id)
{
if (ITEM_DATA_TABLE_PTRS[ITEM_DATA_TABLE_PTRS_INDEX][item_id].valid & 1)
return TRUE;
return FALSE;
}

21
src/item_util_2.c Normal file
View File

@@ -0,0 +1,21 @@
#include "item_util_2.h"
#include "item_util_1.h"
extern struct item_data_entry *ITEM_DATA_TABLE_PTRS[3];
enum item_category GetItemCategory(s16 item_id)
{
s16 valid_item_id = EnsureValidItem(item_id);
return ITEM_DATA_TABLE_PTRS[ITEM_DATA_TABLE_PTRS_INDEX][valid_item_id].category;
}
s16 EnsureValidItem(s16 item_id)
{
if (item_id <= 0 || item_id >= 0x578)
return ITEM_PLAIN_SEED;
if (!IsItemValid(item_id))
return ITEM_PLAIN_SEED;
return item_id;
}