Merge pull request #168 from SethBarberee/aug_2025

Aug 2025
This commit is contained in:
AnonymousRandomPerson
2026-01-04 13:28:07 -05:00
committed by GitHub
11 changed files with 285 additions and 486 deletions

View File

@@ -35,7 +35,11 @@
.public GetLanguage
.public GetThrownItemQuantityLimit
.public HandleSir0Translation
.public InitItem
.public IsAuraBow
.public IsItemValid
.public IsShoppableItem
.public IsThrownItem
.public ITEM_DATA_TABLE_PTRS
.public ITEM_TABLES_PTRS_1
.public LoadFileFromRom

View File

@@ -3,412 +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}
mov r4, r0
ldrb r0, [r4]
tst r0, #2
beq _0200CE6C
ldrsh r0, [r4, #4]
bl GetItemCategory
cmp r0, #5
ldrnesh r0, [r4, #4]
cmpne r0, #0x47
cmpne r0, #0x4d
cmpne r0, #0x58
cmpne r0, #0x59
cmpne r0, #0x5d
cmpne r0, #0x64
cmpne r0, #0x65
cmpne r0, #0x66
cmpne r0, #0x67
cmpne r0, #0x6c
beq _0200CE64
sub r0, r0, #0x77
mov r0, r0, lsl #0x10
mov r0, r0, asr #0x10
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
cmp r0, #0x11
bhi _0200CE6C
_0200CE64:
mov r0, #0
ldmia sp!, {r4, pc}
_0200CE6C:
mov r0, #1
ldmia sp!, {r4, pc}
arm_func_end IsItemUsableNow
arm_func_start IsTicketItem
IsTicketItem: ; 0x0200CE74
sub r0, r0, #0xa9
mov r0, r0, lsl #0x10
mov r0, r0, asr #0x10
mov r0, r0, lsl #0x10
mov r0, r0, lsr #0x10
cmp r0, #3
movls r0, #1
movhi r0, #0
and r0, r0, #0xff
bx lr
arm_func_end IsTicketItem
arm_func_start InitItem
InitItem: ; 0x0200CE9C
stmdb sp!, {r3, r4, r5, r6, r7, lr}
movs r6, r1
mov r7, r0
mov r5, r2
mov r4, r3
beq _0200CF44
mov r0, #1
strb r0, [r7]
mov r0, r6
strh r6, [r7, #4]
mov r1, #0
strb r1, [r7, #1]
bl IsThrownItem
cmp r0, #0
mov r0, r6
beq _0200CF04
mov r1, #1
bl GetThrownItemQuantityLimit
mov r5, r0
mov r0, r6
mov r1, #0
bl GetThrownItemQuantityLimit
mov r1, r5
bl RandRangeSafe
strh r0, [r7, #2]
b _0200CF30
_0200CF04:
bl GetItemCategory
cmp r0, #6
moveq r0, #1
streqh r0, [r7, #2]
beq _0200CF30
add r0, r0, #0xf4
and r0, r0, #0xff
cmp r0, #2
strlsh r5, [r7, #2]
movhi r0, #0
strhih r0, [r7, #2]
_0200CF30:
cmp r4, #0
ldrneb r0, [r7]
orrne r0, r0, #8
strneb r0, [r7]
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_0200CF44:
mov r0, #0
strb r0, [r7]
strh r6, [r7, #4]
strh r0, [r7, #2]
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end InitItem
arm_func_start InitStandardItem
InitStandardItem: ; 0x0200CF58
ldr ip, _0200CF68 ; =InitItem
mov r3, r2
mov r2, #0
bx ip
.align 2, 0
_0200CF68: .word InitItem
arm_func_end InitStandardItem
arm_func_start sub_0200CF6C
sub_0200CF6C: ; 0x0200CF6C
ldr ip, _0200CF74 ; =InitItem
bx ip
.align 2, 0
_0200CF74: .word InitItem
arm_func_end sub_0200CF6C
arm_func_start InitBulkItem
InitBulkItem: ; 0x0200CF78
stmdb sp!, {r4, r5, r6, lr}
movs r5, r1
mov r6, r0
strh r5, [r6]
beq _0200CFE4
mov r0, r5
bl IsThrownItem
cmp r0, #0
mov r0, r5
beq _0200CFC8
mov r1, #1
bl GetThrownItemQuantityLimit
mov r4, r0
mov r0, r5
mov r1, #0
bl GetThrownItemQuantityLimit
mov r1, r4
bl RandRangeSafe
strh r0, [r6, #2]
ldmia sp!, {r4, r5, r6, pc}
_0200CFC8:
bl GetItemCategory
cmp r0, #6
moveq r0, #1
streqh r0, [r6, #2]
movne r0, #0
strneh r0, [r6, #2]
ldmia sp!, {r4, r5, r6, pc}
_0200CFE4:
mov r0, #0
strh r0, [r6, #2]
ldmia sp!, {r4, r5, r6, pc}
arm_func_end InitBulkItem
arm_func_start BulkItemToItem
BulkItemToItem: ; 0x0200CFF0
stmdb sp!, {r3, r4, r5, lr}

View File

@@ -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}

View File

@@ -1661,4 +1661,10 @@ struct item_data_entry
/* 0xE */ u8 flags;
};
struct bulk_item
{
/* 0x0 */ s16 id;
/* 0x2 */ u16 quantity;
};
#endif //PMDSKY_ITEM_H

View File

@@ -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

19
include/item_util_4.h Normal file
View File

@@ -0,0 +1,19 @@
#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);
bool8 IsItemUsableNow(struct item *item);
bool8 IsTicketItem(s16 item_id);
void InitItem(struct item* item, s16 id, s16 quantity, bool8 isSticky);
void InitStandardItem(struct item* item, s16 id, bool8 isSticky);
void sub_0200CF6C(struct item* item, s16 id, s16 quantity, bool8 isSticky);
void InitBulkItem(struct bulk_item* item, s16 id);
#endif //PMDSKY_ITEM_UTIL_4_H

View File

@@ -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

View File

@@ -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

View File

@@ -5,3 +5,48 @@ 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));
}

163
src/item_util_4.c Normal file
View File

@@ -0,0 +1,163 @@
#include "item_util_4.h"
#include "dungeon_util_static.h"
#include "item.h"
#include "item_util.h"
#include "item_util_2.h"
extern s16 RandRangeSafe(s32, s32);
extern s16 _020A18BC[10];
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;
}
bool8 IsValidTargetItem(s16 item_id)
{
s32 var_ip;
if (item_id >= ITEM_GORGEOUS_BOX_1) return TRUE;
for (var_ip = 0; _020A18BC[var_ip] != NUM_ITEM_IDS; var_ip++)
{
if (item_id == _020A18BC[var_ip]) {
return TRUE;
}
}
return FALSE;
}
bool8 IsItemUsableNow(struct item* item)
{
s16 item_id;
if (item->flags & ITEM_FLAG_IN_SHOP) {
if (GetItemCategory(item->id) != CATEGORY_TMS_HMS) {
item_id = item->id;
if ((item_id != ITEM_SITRUS_BERRY) &&
(item_id != ITEM_LIFE_SEED) &&
(item_id != ITEM_GINSENG) &&
(item_id != ITEM_JOY_SEED) &&
(item_id != ITEM_GOLDEN_SEED) &&
(item_id != ITEM_PROTEIN) &&
(item_id != ITEM_CALCIUM) &&
(item_id != ITEM_IRON) &&
(item_id != ITEM_NECTAR) &&
(item_id != ITEM_ZINC)) {
if ((u16) (s16) (item_id - 0x77) > 0x11) {
goto _ret;
}
}
}
return FALSE;
}
_ret:
return TRUE;
}
bool8 IsTicketItem(s16 item_id)
{
s32 arg0 = (u16)(s16)(item_id - ITEM_PRIZE_TICKET);
return ((arg0) <= 3U);
}
void InitItem(struct item* item, s16 id, s16 quantity, bool8 isSticky)
{
s32 category;
s32 to;
if (id != ITEM_NOTHING) {
item->flags = ITEM_FLAG_EXISTS;
item->id = id;
item->held_by = 0;
if (IsThrownItem(id)) {
to = GetThrownItemQuantityLimit(id, 1);
item->quantity = RandRangeSafe(GetThrownItemQuantityLimit(id, 0), to);
} else {
category = GetItemCategory(id);
if (category == CATEGORY_POKE) {
item->quantity = 1;
} else if ((u8) (category + 0xF4) <= 2) {
item->quantity = quantity;
} else {
item->quantity = 0;
}
}
if (isSticky) {
item->flags |= ITEM_FLAG_STICKY;
}
return;
}
item->flags = 0;
item->id = id;
item->quantity = 0;
}
void InitStandardItem(struct item* item, s16 id, bool8 isSticky)
{
InitItem(item, id, 0, isSticky);
}
void sub_0200CF6C(struct item* item, s16 id, s16 quantity, bool8 isSticky)
{
InitItem(item, id, quantity, isSticky);
}
void InitBulkItem(struct bulk_item* item, s16 id) {
s32 to;
item->id = id;
if (id != ITEM_NOTHING) {
if (IsThrownItem(id)) {
to = GetThrownItemQuantityLimit(id, 1);
item->quantity = RandRangeSafe(GetThrownItemQuantityLimit(id, 0), to);
}
else if (GetItemCategory(id) == CATEGORY_POKE) {
item->quantity = 1;
} else {
item->quantity = 0;
}
}
else
{
item->quantity = 0;
}
}

View File

@@ -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;
}
}