diff --git a/asm/include/main_0200CAFC.inc b/asm/include/main_0200CAFC.inc index 36ccae11..8abb478e 100644 --- a/asm/include/main_0200CAFC.inc +++ b/asm/include/main_0200CAFC.inc @@ -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 diff --git a/asm/main_0200CAFC.s b/asm/main_0200CAFC.s index 5631d9b7..d52a31f2 100644 --- a/asm/main_0200CAFC.s +++ b/asm/main_0200CAFC.s @@ -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} diff --git a/asm/main_02054E4C.s b/asm/main_02054E4C.s index fbe56c19..dcd2bb16 100644 --- a/asm/main_02054E4C.s +++ b/asm/main_02054E4C.s @@ -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} diff --git a/include/item.h b/include/item.h index 0ababff7..6f19b699 100644 --- a/include/item.h +++ b/include/item.h @@ -1661,4 +1661,10 @@ struct item_data_entry /* 0xE */ u8 flags; }; +struct bulk_item +{ + /* 0x0 */ s16 id; + /* 0x2 */ u16 quantity; +}; + #endif //PMDSKY_ITEM_H diff --git a/include/item_util.h b/include/item_util.h index d0f18903..906b501b 100644 --- a/include/item_util.h +++ b/include/item_util.h @@ -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 diff --git a/include/item_util_4.h b/include/item_util_4.h new file mode 100644 index 00000000..6cd20d75 --- /dev/null +++ b/include/item_util_4.h @@ -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 + diff --git a/include/main_02054DC4.h b/include/main_02054DC4.h index ff8a7ea4..a649f45b 100644 --- a/include/main_02054DC4.h +++ b/include/main_02054DC4.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 diff --git a/main.lsf b/main.lsf index dadaed83..dfcdfb2d 100644 --- a/main.lsf +++ b/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 diff --git a/src/item_util.c b/src/item_util.c index aa078583..ae01f12d 100644 --- a/src/item_util.c +++ b/src/item_util.c @@ -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)); +} diff --git a/src/item_util_4.c b/src/item_util_4.c new file mode 100644 index 00000000..ddc0480b --- /dev/null +++ b/src/item_util_4.c @@ -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; + } +} diff --git a/src/main_02054DC4.c b/src/main_02054DC4.c index 6490ac63..f3dc67bc 100644 --- a/src/main_02054DC4.c +++ b/src/main_02054DC4.c @@ -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; + } +}