mirror of
https://github.com/pret/pmd-sky.git
synced 2026-04-25 07:24:42 -05:00
initial decomp work
decomp more item funcs new file boundary and more decomp address review comments Match IsValidTargetItem thanks to @taxicat1
This commit is contained in:
parent
cfc5a1d429
commit
fd2a10df14
|
|
@ -35,7 +35,10 @@
|
|||
.public GetLanguage
|
||||
.public GetThrownItemQuantityLimit
|
||||
.public HandleSir0Translation
|
||||
.public IsAuraBow
|
||||
.public IsItemValid
|
||||
.public IsShoppableItem
|
||||
.public IsThrownItem
|
||||
.public ITEM_DATA_TABLE_PTRS
|
||||
.public ITEM_TABLES_PTRS_1
|
||||
.public LoadFileFromRom
|
||||
|
|
|
|||
|
|
@ -3,253 +3,6 @@
|
|||
|
||||
.text
|
||||
|
||||
arm_func_start GetItemMoveId16
|
||||
GetItemMoveId16: ; 0x0200CAFC
|
||||
stmdb sp!, {r3, lr}
|
||||
bl GetItemMoveId
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r0, r0, lsr #0x10
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end GetItemMoveId16
|
||||
|
||||
arm_func_start IsThrownItem
|
||||
IsThrownItem: ; 0x0200CB10
|
||||
stmdb sp!, {r3, lr}
|
||||
bl GetItemCategory
|
||||
cmp r0, #1
|
||||
movls r0, #1
|
||||
movhi r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end IsThrownItem
|
||||
|
||||
arm_func_start IsNotMoney
|
||||
IsNotMoney: ; 0x0200CB2C
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
bxeq lr
|
||||
cmp r0, #0xb7
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
arm_func_end IsNotMoney
|
||||
|
||||
arm_func_start IsEdible
|
||||
IsEdible: ; 0x0200CB4C
|
||||
stmdb sp!, {r3, lr}
|
||||
bl GetItemCategory
|
||||
add r0, r0, #0xfe
|
||||
and r0, r0, #0xff
|
||||
cmp r0, #1
|
||||
movls r0, #1
|
||||
movhi r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end IsEdible
|
||||
|
||||
arm_func_start IsHM
|
||||
IsHM: ; 0x0200CB70
|
||||
ldr r2, _0200CBF0 ; =0x0000011D
|
||||
cmp r0, r2
|
||||
moveq r0, #1
|
||||
bxeq lr
|
||||
add r1, r2, #1
|
||||
cmp r0, r1
|
||||
moveq r0, #1
|
||||
bxeq lr
|
||||
add r1, r2, #2
|
||||
cmp r0, r1
|
||||
moveq r0, #1
|
||||
bxeq lr
|
||||
cmp r0, #0x120
|
||||
moveq r0, #1
|
||||
bxeq lr
|
||||
add r1, r2, #5
|
||||
cmp r0, r1
|
||||
moveq r0, #1
|
||||
bxeq lr
|
||||
add r1, r2, #6
|
||||
cmp r0, r1
|
||||
moveq r0, #1
|
||||
bxeq lr
|
||||
cmp r0, #0x124
|
||||
moveq r0, #1
|
||||
bxeq lr
|
||||
add r1, r2, #4
|
||||
cmp r0, r1
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0200CBF0: .word 0x0000011D
|
||||
arm_func_end IsHM
|
||||
|
||||
arm_func_start IsGummi
|
||||
IsGummi: ; 0x0200CBF4
|
||||
cmp r0, #0x77
|
||||
movlt r0, #0
|
||||
bxlt lr
|
||||
cmp r0, #0x88
|
||||
movle r0, #1
|
||||
movgt r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
arm_func_end IsGummi
|
||||
|
||||
arm_func_start IsAuraBow
|
||||
IsAuraBow: ; 0x0200CC14
|
||||
cmp r0, #0x1ac
|
||||
blt _0200CC2C
|
||||
ldr r1, _0200CC34 ; =0x000001BB
|
||||
cmp r0, r1
|
||||
movle r0, #1
|
||||
bxle lr
|
||||
_0200CC2C:
|
||||
mov r0, #0
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0200CC34: .word 0x000001BB
|
||||
arm_func_end IsAuraBow
|
||||
|
||||
arm_func_start IsLosableItem
|
||||
IsLosableItem: ; 0x0200CC38
|
||||
stmdb sp!, {r4, lr}
|
||||
mov r4, r0
|
||||
ldrb r0, [r4]
|
||||
tst r0, #1
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
tst r0, #0xff
|
||||
beq _0200CC7C
|
||||
ldrsh r0, [r4, #4]
|
||||
bl IsAuraBow
|
||||
cmp r0, #0
|
||||
beq _0200CC74
|
||||
ldrb r0, [r4]
|
||||
tst r0, #2
|
||||
beq _0200CC7C
|
||||
_0200CC74:
|
||||
mov r0, #1
|
||||
ldmia sp!, {r4, pc}
|
||||
_0200CC7C:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end IsLosableItem
|
||||
|
||||
arm_func_start IsTreasureBox
|
||||
IsTreasureBox: ; 0x0200CC84
|
||||
stmdb sp!, {r3, lr}
|
||||
bl GetItemCategory
|
||||
add r0, r0, #0xf4
|
||||
and r0, r0, #0xff
|
||||
cmp r0, #2
|
||||
movls r0, #1
|
||||
movhi r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, pc}
|
||||
arm_func_end IsTreasureBox
|
||||
|
||||
arm_func_start IsStorableItem
|
||||
IsStorableItem: ; 0x0200CCA8
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
bxeq lr
|
||||
cmp r0, #0xb7
|
||||
moveq r0, #0
|
||||
bxeq lr
|
||||
cmp r0, #0xbb
|
||||
moveq r0, #0
|
||||
bxeq lr
|
||||
cmp r0, #0xb2
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
arm_func_end IsStorableItem
|
||||
|
||||
arm_func_start IsShoppableItem
|
||||
IsShoppableItem: ; 0x0200CCE0
|
||||
stmdb sp!, {r4, lr}
|
||||
movs r4, r0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
cmp r4, #0xb7
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
cmp r4, #9
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
cmp r4, #0x39
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
cmp r4, #0x3a
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
cmp r4, #0x73
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
cmp r4, #0x88
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
cmp r4, #0xb9
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
cmp r4, #0xad
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
cmp r4, #0xae
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
cmp r4, #0xa
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
cmp r4, #0xb0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
cmp r4, #0x5d
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
bl GetItemSellPrice
|
||||
cmp r0, #0
|
||||
moveq r0, #0
|
||||
ldmeqia sp!, {r4, pc}
|
||||
mov r0, r4
|
||||
bl GetItemBuyPrice
|
||||
cmp r0, #0
|
||||
movne r0, #1
|
||||
moveq r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r4, pc}
|
||||
arm_func_end IsShoppableItem
|
||||
|
||||
arm_func_start IsValidTargetItem
|
||||
IsValidTargetItem: ; 0x0200CDAC
|
||||
cmp r0, #0x16c
|
||||
movge r0, #1
|
||||
bxge lr
|
||||
mov ip, #0
|
||||
ldr r2, _0200CDF0 ; =_020A18BC
|
||||
ldr r1, _0200CDF4 ; =0x00000578
|
||||
b _0200CDD8
|
||||
_0200CDC8:
|
||||
cmp r0, r3
|
||||
moveq r0, #1
|
||||
bxeq lr
|
||||
add ip, ip, #1
|
||||
_0200CDD8:
|
||||
mov r3, ip, lsl #1
|
||||
ldrsh r3, [r2, r3]
|
||||
cmp r3, r1
|
||||
bne _0200CDC8
|
||||
mov r0, #0
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_0200CDF0: .word _020A18BC
|
||||
_0200CDF4: .word 0x00000578
|
||||
arm_func_end IsValidTargetItem
|
||||
|
||||
arm_func_start IsItemUsableNow
|
||||
IsItemUsableNow: ; 0x0200CDF8
|
||||
stmdb sp!, {r4, lr}
|
||||
|
|
|
|||
|
|
@ -3,86 +3,6 @@
|
|||
|
||||
.text
|
||||
|
||||
arm_func_start GendersEqual
|
||||
GendersEqual: ; 0x02054E4C
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r5, r1
|
||||
bl GetMonsterGender
|
||||
mov r4, r0
|
||||
mov r0, r5
|
||||
bl GetMonsterGender
|
||||
cmp r4, r0
|
||||
moveq r0, #1
|
||||
movne r0, #0
|
||||
and r0, r0, #0xff
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end GendersEqual
|
||||
|
||||
arm_func_start GendersEqualNotGenderless
|
||||
GendersEqualNotGenderless: ; 0x02054E78
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r4, r0
|
||||
mov r5, r1
|
||||
bl GetMonsterGender
|
||||
cmp r0, #3
|
||||
beq _02054EC0
|
||||
mov r0, r5
|
||||
bl GetMonsterGender
|
||||
cmp r0, #3
|
||||
beq _02054EC0
|
||||
mov r0, r4
|
||||
bl GetMonsterGender
|
||||
mov r4, r0
|
||||
mov r0, r5
|
||||
bl GetMonsterGender
|
||||
cmp r4, r0
|
||||
moveq r0, #1
|
||||
ldmeqia sp!, {r3, r4, r5, pc}
|
||||
_02054EC0:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end GendersEqualNotGenderless
|
||||
|
||||
arm_func_start GendersNotEqualNotGenderless
|
||||
GendersNotEqualNotGenderless: ; 0x02054EC8
|
||||
stmdb sp!, {r3, r4, r5, lr}
|
||||
mov r4, r0
|
||||
mov r5, r1
|
||||
bl GetMonsterGender
|
||||
cmp r0, #3
|
||||
beq _02054F10
|
||||
mov r0, r5
|
||||
bl GetMonsterGender
|
||||
cmp r0, #3
|
||||
beq _02054F10
|
||||
mov r0, r4
|
||||
bl GetMonsterGender
|
||||
mov r4, r0
|
||||
mov r0, r5
|
||||
bl GetMonsterGender
|
||||
cmp r4, r0
|
||||
movne r0, #1
|
||||
ldmneia sp!, {r3, r4, r5, pc}
|
||||
_02054F10:
|
||||
mov r0, #0
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end GendersNotEqualNotGenderless
|
||||
|
||||
arm_func_start sub_02054F18
|
||||
sub_02054F18: ; 0x02054F18
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r0, r0, lsr #0x10
|
||||
add r0, r0, #0xea
|
||||
add r0, r0, #0xfd00
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r0, r0, lsr #0x10
|
||||
cmp r0, #2
|
||||
movls r0, #1
|
||||
movhi r0, #0
|
||||
and r0, r0, #0xff
|
||||
bx lr
|
||||
arm_func_end sub_02054F18
|
||||
|
||||
arm_func_start sub_02054F44
|
||||
sub_02054F44: ; 0x02054F44
|
||||
stmdb sp!, {r4, r5, lr}
|
||||
|
|
|
|||
|
|
@ -6,5 +6,13 @@
|
|||
// 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);
|
||||
u16 GetItemMoveId16(s16 item_id);
|
||||
bool8 IsThrownItem(s16 item_id);
|
||||
bool8 IsNotMoney(s16 item_id);
|
||||
bool8 IsEdible(s16 item_id);
|
||||
bool8 IsHM(s16 item_id);
|
||||
bool8 IsGummi(s16 item_id);
|
||||
bool8 IsGummi(s16 item_id);
|
||||
BOOL IsAuraBow(s32 item_id);
|
||||
|
||||
#endif //PMDSKY_ITEM_UTIL_H
|
||||
|
|
|
|||
13
include/item_util_4.h
Normal file
13
include/item_util_4.h
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
#ifndef PMDSKY_ITEM_UTIL_4_H
|
||||
#define PMDSKY_ITEM_UTIL_4_H
|
||||
|
||||
#include "item.h"
|
||||
|
||||
BOOL IsLosableItem(struct item* item);
|
||||
bool8 IsTreasureBox(s16 item_id);
|
||||
bool8 IsStorableItem(s16 item_id);
|
||||
bool8 IsShoppableItem(s16 item_id);
|
||||
bool8 IsValidTargetItem(s16 item_id);
|
||||
|
||||
#endif //PMDSKY_ITEM_UTIL_4_H
|
||||
|
||||
|
|
@ -4,5 +4,9 @@
|
|||
#include "util.h"
|
||||
|
||||
bool32 DexNumbersEqual(s16 monster1, s16 monster2);
|
||||
u8 GendersEqual(s16 monster1, s16 monster2);
|
||||
u8 GendersEqualNotGenderless(s16 monster1, s16 monster2);
|
||||
u8 GendersNotEqualNotGenderless(s16 monster1, s16 monster2);
|
||||
u8 sub_02054F18(s32 _arg0);
|
||||
|
||||
#endif //PMDSKY_MAIN_02054DC4_H
|
||||
|
|
|
|||
1
main.lsf
1
main.lsf
|
|
@ -37,6 +37,7 @@ Static main
|
|||
Object src/directory_file.o
|
||||
Object asm/main_0200C4CC.o
|
||||
Object src/item_util.o
|
||||
Object src/item_util_4.o
|
||||
Object asm/main_0200CAFC.o
|
||||
Object src/item_util_1.o
|
||||
Object asm/main_0200E7E8.o
|
||||
|
|
|
|||
|
|
@ -1,7 +1,54 @@
|
|||
#include "item_util.h"
|
||||
#include "item_util_2.h"
|
||||
|
||||
extern s32 GetItemMoveId(s32 item_id);
|
||||
|
||||
enum item_category GetItemCategoryVeneer(s16 item_id)
|
||||
{
|
||||
return GetItemCategory(item_id);
|
||||
}
|
||||
|
||||
u16 GetItemMoveId16(s16 item_id)
|
||||
{
|
||||
return GetItemMoveId(item_id);
|
||||
}
|
||||
|
||||
bool8 IsThrownItem(s16 item_id)
|
||||
{
|
||||
return (GetItemCategory(item_id) <= CATEGORY_THROWN_ARC);
|
||||
}
|
||||
|
||||
bool8 IsNotMoney(s16 item_id)
|
||||
{
|
||||
if (item_id == ITEM_NOTHING) return FALSE;
|
||||
return (item_id != ITEM_POKE);
|
||||
}
|
||||
|
||||
bool8 IsEdible(s16 item_id)
|
||||
{
|
||||
return ((bool8) (GetItemCategory(item_id) + 0xFE) <= 1);
|
||||
}
|
||||
|
||||
bool8 IsHM(s16 item_id)
|
||||
{
|
||||
if(item_id == ITEM_TM_CUT) return TRUE;
|
||||
else if(item_id == ITEM_TM_FLY) return TRUE;
|
||||
else if(item_id == ITEM_TM_SURF) return TRUE;
|
||||
else if(item_id == ITEM_TM_STRENGTH) return TRUE;
|
||||
else if(item_id == ITEM_TM_ROCK_SMASH) return TRUE;
|
||||
else if(item_id == ITEM_TM_WATERFALL) return TRUE;
|
||||
else if(item_id == ITEM_TM_ROCK_CLIMB) return TRUE;
|
||||
else if(item_id == ITEM_TM_DEFOG) return TRUE;
|
||||
else return FALSE;
|
||||
}
|
||||
|
||||
bool8 IsGummi(s16 item_id)
|
||||
{
|
||||
if(item_id < ITEM_WHITE_GUMMI) return FALSE;
|
||||
return (item_id <= ITEM_WONDER_GUMMI);
|
||||
}
|
||||
|
||||
BOOL IsAuraBow(s32 item_id)
|
||||
{
|
||||
return ((item_id >= ITEM_SILVER_BOW) && (item_id <= ITEM_FUCHSIA_BOW));
|
||||
}
|
||||
|
|
|
|||
66
src/item_util_4.c
Normal file
66
src/item_util_4.c
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
#include "item_util_4.h"
|
||||
#include "dungeon_util_static.h"
|
||||
#include "item.h"
|
||||
#include "item_util.h"
|
||||
#include "item_util_2.h"
|
||||
|
||||
extern s32 GetItemSellPrice(s16);
|
||||
extern s32 GetItemBuyPrice(s16);
|
||||
|
||||
BOOL IsLosableItem(struct item* item)
|
||||
{
|
||||
return ((ItemExists(item->flags) && ((!IsAuraBow(item->id)) || (item->flags & ITEM_FLAG_IN_SHOP))));
|
||||
}
|
||||
|
||||
bool8 IsTreasureBox(s16 item_id)
|
||||
{
|
||||
// NOTE: FAKEMATCH
|
||||
// TODO: Categories 12 - 14
|
||||
return ((u8) (GetItemCategory(item_id) + 0xF4) <= 2);
|
||||
}
|
||||
|
||||
bool8 IsStorableItem(s16 item_id)
|
||||
{
|
||||
if (item_id == ITEM_NOTHING) return 0;
|
||||
if (item_id == ITEM_POKE) return 0;
|
||||
if (item_id == ITEM_TM_USED_TM) return 0;
|
||||
if (item_id == ITEM_WONDER_EGG) return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool8 IsShoppableItem(s16 item_id)
|
||||
{
|
||||
if (item_id == ITEM_NOTHING) return FALSE;
|
||||
if (item_id == ITEM_POKE) return FALSE;
|
||||
if (item_id == ITEM_GOLD_THORN) return FALSE;
|
||||
if (item_id == ITEM_GOLDEN_MASK) return FALSE;
|
||||
if (item_id == ITEM_AMBER_TEAR) return FALSE;
|
||||
if (item_id == ITEM_GOLDEN_APPLE) return FALSE;
|
||||
if (item_id == ITEM_WONDER_GUMMI) return FALSE;
|
||||
if (item_id == ITEM_UNNAMED_0xB9) return FALSE;
|
||||
if (item_id == ITEM_MYSTERY_PART) return FALSE;
|
||||
if (item_id == ITEM_SECRET_SLAB) return FALSE;
|
||||
if (item_id == ITEM_RARE_FOSSIL) return FALSE;
|
||||
if (item_id == ITEM_UNNAMED_0xB0) return FALSE;
|
||||
if (item_id == ITEM_GOLDEN_SEED) return FALSE;
|
||||
if (GetItemSellPrice(item_id) == 0) return FALSE;
|
||||
if (GetItemBuyPrice(item_id) == 0) return FALSE;
|
||||
return 1;
|
||||
}
|
||||
|
||||
extern s16 _020A18BC[10];
|
||||
|
||||
bool8 IsValidTargetItem(s16 item_id) {
|
||||
s32 var_ip;
|
||||
|
||||
if (item_id >= 0x16C) return TRUE;
|
||||
|
||||
for (var_ip = 0; _020A18BC[var_ip] != 0x578; var_ip++)
|
||||
{
|
||||
if (item_id == _020A18BC[var_ip]) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
#include "main_02054DC4.h"
|
||||
#include "main_020527A8.h"
|
||||
#include "util.h"
|
||||
#include "main_020526EC.h"
|
||||
#include "main_02054AA4.h"
|
||||
|
|
@ -15,3 +16,37 @@ bool32 DexNumbersEqual(s16 monster1, s16 monster2) {
|
|||
else if (IsUnown(true_base_1) && IsUnown(true_base_2)) return FALSE;
|
||||
else return GetDexNumber(true_base_1) == GetDexNumber(true_base_2);
|
||||
}
|
||||
|
||||
u8 GendersEqual(s16 monster1, s16 monster2)
|
||||
{
|
||||
return GetMonsterGender(monster1) == GetMonsterGender(monster2);
|
||||
}
|
||||
|
||||
u8 GendersEqualNotGenderless(s16 monster1, s16 monster2)
|
||||
{
|
||||
|
||||
if ((GetMonsterGender(monster1) != 3) && (GetMonsterGender(monster2) != 3))
|
||||
if(GetMonsterGender(monster1) == GetMonsterGender(monster2))
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
u8 GendersNotEqualNotGenderless(s16 monster1, s16 monster2)
|
||||
{
|
||||
|
||||
if ((GetMonsterGender(monster1) != 3) && (GetMonsterGender(monster2) != 3))
|
||||
if(GetMonsterGender(monster1) != GetMonsterGender(monster2))
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
u8 sub_02054F18(s32 _arg0)
|
||||
{
|
||||
s32 arg0 = (u16) _arg0;
|
||||
|
||||
if ((u32) (u16) (arg0 + 0xFDEA) <= 2U) {
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user