diff --git a/asm/include/main_02001CB0.inc b/asm/include/main_02001CB0.inc deleted file mode 100644 index 3f59c932..00000000 --- a/asm/include/main_02001CB0.inc +++ /dev/null @@ -1,2 +0,0 @@ -#pragma once - diff --git a/asm/include/main_02008240.inc b/asm/include/main_02008240.inc deleted file mode 100644 index 3f59c932..00000000 --- a/asm/include/main_02008240.inc +++ /dev/null @@ -1,2 +0,0 @@ -#pragma once - diff --git a/asm/include/main_0200EB30.inc b/asm/include/main_0200EB30.inc deleted file mode 100644 index a2fd42c3..00000000 --- a/asm/include/main_0200EB30.inc +++ /dev/null @@ -1,2 +0,0 @@ -#pragma once -.public ITEM_DATA_TABLE_PTRS diff --git a/asm/include/main_02010830.inc b/asm/include/main_02010830.inc deleted file mode 100644 index 0b50efa5..00000000 --- a/asm/include/main_02010830.inc +++ /dev/null @@ -1,2 +0,0 @@ -#pragma once -.public BAG_ITEMS_PTR_MIRROR diff --git a/asm/include/main_0202760C.inc b/asm/include/main_0202760C.inc deleted file mode 100644 index 71f3ae9f..00000000 --- a/asm/include/main_0202760C.inc +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once -.public _022A88F0 -.public _022A88FC diff --git a/asm/include/main_020527E0.inc b/asm/include/main_020527E0.inc deleted file mode 100644 index f2690b2e..00000000 --- a/asm/include/main_020527E0.inc +++ /dev/null @@ -1,4 +0,0 @@ -#pragma once -.public _020A2D09 -.public _s32_div_f -.public MONSTER_SPRITE_DATA diff --git a/asm/include/overlay_29_02344BA8.inc b/asm/include/overlay_29_02344BA8.inc deleted file mode 100644 index 0f60b703..00000000 --- a/asm/include/overlay_29_02344BA8.inc +++ /dev/null @@ -1,3 +0,0 @@ -#pragma once -.public ov29_023531BC -.public SubstitutePlaceholderItemTags diff --git a/asm/main_02001CB0.s b/asm/main_02001CB0.s deleted file mode 100644 index e3fcd8d2..00000000 --- a/asm/main_02001CB0.s +++ /dev/null @@ -1,17 +0,0 @@ - .include "asm/macros.inc" - .include "main_02001CB0.inc" - - .text - - arm_func_start FixedPoint64ToInt -FixedPoint64ToInt: ; 0x02001CB0 - ldmia r0, {r1, r2} - mov r0, #0x10000 - rsb r0, r0, #0 - mov r1, r1, lsl #0x10 - and r0, r2, r0 - orr r0, r1, r0, lsr #16 - tst r2, #0x8000 - addne r0, r0, #1 - bx lr - arm_func_end FixedPoint64ToInt diff --git a/asm/main_02008240.s b/asm/main_02008240.s deleted file mode 100644 index 254f84ca..00000000 --- a/asm/main_02008240.s +++ /dev/null @@ -1,9 +0,0 @@ - .include "asm/macros.inc" - .include "main_02008240.inc" - - .text - - arm_func_start sub_02008240 -sub_02008240: ; 0x02008240 - ldmia sp!, {r4, r5, r6, pc} - arm_func_end sub_02008240 diff --git a/asm/main_0200EB30.s b/asm/main_0200EB30.s deleted file mode 100644 index 0f884e43..00000000 --- a/asm/main_0200EB30.s +++ /dev/null @@ -1,21 +0,0 @@ - .include "asm/macros.inc" - .include "main_0200EB30.inc" - - .text - -; https://decomp.me/scratch/FPdo0 - 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 diff --git a/asm/main_02010830.s b/asm/main_02010830.s deleted file mode 100644 index 4d30a06d..00000000 --- a/asm/main_02010830.s +++ /dev/null @@ -1,41 +0,0 @@ - .include "asm/macros.inc" - .include "main_02010830.inc" - - .text - - arm_func_start RemoveInvalidKecleonShop1Items -RemoveInvalidKecleonShop1Items: ; 0x02010830 - ldr r1, _02010868 ; =BAG_ITEMS_PTR_MIRROR - mov r0, #0 - ldr r1, [r1] - mov r2, r0 - add r1, r1, #0x1000 - ldr r3, [r1, #0x32c] -_02010848: - mov r1, r2, lsl #2 - ldrsh r1, [r3, r1] - add r2, r2, #1 - cmp r1, #0 - addne r0, r0, #1 - cmp r2, #8 - blt _02010848 - bx lr - .align 2, 0 -_02010868: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RemoveInvalidKecleonShop1Items - - arm_func_start RemoveItemFromKecleonShop1 -RemoveItemFromKecleonShop1: ; 0x0201086C - ldr r1, _02010894 ; =BAG_ITEMS_PTR_MIRROR - mov r3, r0, lsl #2 - ldr r1, [r1] - mov r2, #0 - add r1, r1, #0x1000 - ldr r1, [r1, #0x32c] - strh r2, [r1, r3] - add r0, r1, r0, lsl #2 - strh r2, [r0, #2] - bx lr - .align 2, 0 -_02010894: .word BAG_ITEMS_PTR_MIRROR - arm_func_end RemoveItemFromKecleonShop1 diff --git a/asm/main_0202760C.s b/asm/main_0202760C.s deleted file mode 100644 index bb4e95d0..00000000 --- a/asm/main_0202760C.s +++ /dev/null @@ -1,32 +0,0 @@ - .include "asm/macros.inc" - .include "main_0202760C.inc" - - .text - - arm_func_start sub_0202760C -sub_0202760C: ; 0x0202760C - mov r1, #0xe0 - mul r1, r0, r1 - ldr r0, _02027620 ; =_022A88F0 - ldr r0, [r0, r1] - bx lr - .align 2, 0 -#ifdef JAPAN -_02027620: .word _022A88FC -#else -_02027620: .word _022A88F0 -#endif - arm_func_end sub_0202760C - -#ifdef JAPAN - arm_func_start sub_0202796C_JP -sub_0202796C_JP: ; 0x0202796C - mov r1, #0xe0 - mul r1, r0, r1 - ldr r0, _02027980 ; =_022A88F0 - ldr r0, [r0, r1] - bx lr - .align 2, 0 -_02027980: .word _022A88F0 - arm_func_end sub_0202796C_JP -#endif diff --git a/asm/main_020527E0.s b/asm/main_020527E0.s deleted file mode 100644 index 315443cb..00000000 --- a/asm/main_020527E0.s +++ /dev/null @@ -1,37 +0,0 @@ - .include "asm/macros.inc" - .include "main_020527E0.inc" - - .text - - arm_func_start GetSpriteSize -GetSpriteSize: ; 0x020527E0 - stmdb sp!, {r3, lr} - mov r1, #0x258 - bl _s32_div_f - mov r0, r1, lsl #0x10 - ldr r2, _02052818 ; =MONSTER_SPRITE_DATA - mov r0, r0, asr #0x10 - ldrb r0, [r2, r0, lsl #1] - cmp r0, #0 - moveq r0, #0 - ldmeqia sp!, {r3, pc} - cmp r0, #6 - movls r0, #6 - ldrhib r0, [r2, r1, lsl #1] - ldmia sp!, {r3, pc} - .align 2, 0 -_02052818: .word MONSTER_SPRITE_DATA - arm_func_end GetSpriteSize - - arm_func_start GetSpriteFileSize -GetSpriteFileSize: ; 0x0205281C - stmdb sp!, {r3, lr} - mov r1, #0x258 - bl _s32_div_f - ldr r0, _02052838 ; =_020A2D09 - ldrb r0, [r0, r1, lsl #1] - mov r0, r0, lsl #9 - ldmia sp!, {r3, pc} - .align 2, 0 -_02052838: .word _020A2D09 - arm_func_end GetSpriteFileSize diff --git a/asm/overlay_29_02344BA8.s b/asm/overlay_29_02344BA8.s deleted file mode 100644 index 70738d52..00000000 --- a/asm/overlay_29_02344BA8.s +++ /dev/null @@ -1,19 +0,0 @@ - .include "asm/macros.inc" - .include "overlay_29_02344BA8.inc" - - .text - - arm_func_start PrepareItemForPrinting2 -PrepareItemForPrinting2: ; 0x02344BA8 - stmdb sp!, {r3, lr} - add r3, r0, r1, lsl #2 - orr ip, r1, #0x40000 - mov r0, r1 - mov r1, r2 - ldr r2, _02344BCC ; =ov29_023531BC - str ip, [r3, #0x10] - bl SubstitutePlaceholderItemTags - ldmia sp!, {r3, pc} - .align 2, 0 -_02344BCC: .word ov29_023531BC - arm_func_end PrepareItemForPrinting2 diff --git a/include/item_util_1.h b/include/item_util_1.h index 63190a40..5746222f 100644 --- a/include/item_util_1.h +++ b/include/item_util_1.h @@ -42,6 +42,6 @@ bool8 TestItemAiFlag(s16 item_id, s32 flag); bool8 IsItemInTimeDarkness(s16 item_id); bool8 IsItemValidVeneer(s16 item_id); - +s32 sub_0200EB64(s16 idx); #endif //PMDSKY_ITEM_UTIL_1_H diff --git a/include/main_02001BB4.h b/include/main_02001BB4.h index 3573a59f..84b3ab26 100644 --- a/include/main_02001BB4.h +++ b/include/main_02001BB4.h @@ -5,5 +5,6 @@ u32 sub_02001BB4(s32 x, s32 y); void IntToFixedPoint64(struct fixed_point_64* out, s32 x); +s32 FixedPoint64ToInt(struct fixed_point_64 *x); #endif //PMDSKY_MAIN_02001BB4_H diff --git a/include/main_020107DC.h b/include/main_020107DC.h index 9f7d4aea..41c59a25 100644 --- a/include/main_020107DC.h +++ b/include/main_020107DC.h @@ -4,5 +4,7 @@ u16 GetEggHatchTimer(void); void SetEggHatchTimer(u16 timer); void DecrementEggHatchTimer(void); +int RemoveInvalidKecleonShop1Items(void); +void RemoveItemFromKecleonShop1(int slot); #endif diff --git a/include/main_020275F8.h b/include/main_020275F8.h index 28139729..cfd1dbab 100644 --- a/include/main_020275F8.h +++ b/include/main_020275F8.h @@ -3,5 +3,9 @@ #include "window.h" +u32 sub_0202760C(s32 idx); +#ifdef JAPAN +u32 sub_0202796C_JP(s32 idx); +#endif #endif diff --git a/include/main_020527A8.h b/include/main_020527A8.h index 86039c78..d2b10753 100644 --- a/include/main_020527A8.h +++ b/include/main_020527A8.h @@ -1,7 +1,16 @@ #ifndef PMDSKY_MAIN_020527A8_H #define PMDSKY_MAIN_020527A8_H +struct monster_sprite_data_entry { + u8 sprite_size; + u8 sprite_file_size; +}; + +extern struct monster_sprite_data_entry MONSTER_SPRITE_DATA[600]; + u8 GetMonsterGender(s16 monster_id); u8 GetBodySize(s16 monster_id); +u8 GetSpriteSize(s16 monster_id); +u32 GetSpriteFileSize(s16 monster_id); #endif //PMDSKY_MAIN_020527A8_H diff --git a/include/overlay_29_02344B9C.h b/include/overlay_29_02344B9C.h index 181012c3..1ee18f97 100644 --- a/include/overlay_29_02344B9C.h +++ b/include/overlay_29_02344B9C.h @@ -1,6 +1,11 @@ #ifndef PMDSKY_OVERLAY_29_02344B9C_H #define PMDSKY_OVERLAY_29_02344B9C_H +#include "util.h" +#include "dungeon_mode.h" +#include "main_0200C4FC.h" + void ov29_02344B9C(s32 idx, u32 val); +void PrepareItemForPrinting2(struct preprocessor_args *preprocessor_args, u8 tag_id, struct item *item); #endif diff --git a/main.lsf b/main.lsf index 8cc52435..5da97a11 100644 --- a/main.lsf +++ b/main.lsf @@ -19,7 +19,6 @@ Static main Object src/main_02001A54.o Object asm/main_02001B0C.o Object src/main_02001BB4.o - Object asm/main_02001CB0.o Object src/main_02001CD4.o Object asm/main_02001D68.o Object src/main_0200224C.o @@ -42,7 +41,6 @@ Static main Object asm/main_02004FF8.o Object src/main_02008194.o Object src/main_02008210.o - Object asm/main_02008240.o Object src/main_02008254.o Object asm/main_020082C4.o Object src/main_02008BD4.o @@ -71,7 +69,6 @@ Static main Object src/main_0200D81C.o Object asm/main_0200D8E4.o Object src/item_util_1.o - Object asm/main_0200EB30.o Object src/main_0200ECFC.o Object src/main_0200EDC0.o Object src/main_0200EEE0.o @@ -89,7 +86,6 @@ Static main Object src/main_0201077C.o Object src/main_020107AC.o Object src/main_020107DC.o - Object asm/main_02010830.o Object src/main_02010898.o Object asm/main_020108B4.o Object src/main_02010BA4.o @@ -148,7 +144,6 @@ Static main Object src/main_020265C4.o Object asm/main_0202676C.o Object src/main_020275F8.o - Object asm/main_0202760C.o Object src/main_02027648.o Object asm/main_020276C0.o Object src/main_020278A8.o @@ -293,7 +288,6 @@ Static main Object src/main_020526EC.o Object src/get_category_string.o Object src/main_020527A8.o - Object asm/main_020527E0.o Object src/main_0205283C.o Object asm/main_02052A7C.o Object src/main_02052B28.o @@ -1244,7 +1238,6 @@ Overlay OVY_29 Object asm/overlay_29_02344178.o Object src/overlay_29_02344AF8.o Object src/overlay_29_02344B9C.o - Object asm/overlay_29_02344BA8.o Object src/overlay_29_02344BE4.o Object asm/overlay_29_02344BF8.o Object src/overlay_29_02345698.o diff --git a/src/item_util_1.c b/src/item_util_1.c index 2792f322..79d60dc1 100644 --- a/src/item_util_1.c +++ b/src/item_util_1.c @@ -230,3 +230,12 @@ bool8 IsItemValidVeneer(s16 item_id) { return IsItemValid(item_id); } + +s32 sub_0200EB64(s16 idx) +{ + u32 shift = (u32)idx << 31; + s32 *table = ITEM_DATA_TABLE_PTRS.langFile.iov_base; + s32 entry_index = idx >> 1; + s32 entry = table[entry_index]; + return 0x7FF & (entry >> (shift >> 27)); +} diff --git a/src/main_02001BB4.c b/src/main_02001BB4.c index f5d3a288..c12e1746 100644 --- a/src/main_02001BB4.c +++ b/src/main_02001BB4.c @@ -69,3 +69,23 @@ void IntToFixedPoint64(struct fixed_point_64* out, s32 x) out->upper = out->upper | ~0xFFFF; } } + +s32 FixedPoint64ToInt(struct fixed_point_64 *x) +{ + u32 lower; + s32 upper; + u32 mask; + s64 shifted; + u32 masked; + s32 result; + mask = ~0xFFFFu; + upper = x->upper; + lower = x->lower; + shifted = upper * 0x10000; + masked = lower & mask; + result = shifted | (masked >> 16); + if (lower & 0x8000u) { + result += 1; + } + return result; +} diff --git a/src/main_020107DC.c b/src/main_020107DC.c index db8e7b44..984755cd 100644 --- a/src/main_020107DC.c +++ b/src/main_020107DC.c @@ -19,3 +19,23 @@ void DecrementEggHatchTimer(void) BAG_ITEMS_PTR_MIRROR->field_0x13A8--; } } + +int RemoveInvalidKecleonShop1Items(void) +{ + int count = 0; + int i; + struct bulk_item *items = (struct bulk_item *)BAG_ITEMS_PTR_MIRROR->field_0x132C; + for (i = 0; i < 8; i++) { + if (items[i].id != 0) + count++; + } + return count; +} + +void RemoveItemFromKecleonShop1(int slot) +{ + struct bulk_item *items = (struct bulk_item *)BAG_ITEMS_PTR_MIRROR->field_0x132C; + u16 *item = (u16 *)&items[slot]; + item[0] = 0; + item[1] = 0; +} diff --git a/src/main_020275F8.c b/src/main_020275F8.c index a0dfb0f4..0b9ad39a 100644 --- a/src/main_020275F8.c +++ b/src/main_020275F8.c @@ -1,7 +1,28 @@ #include "main_020275F8.h" #include "window.h" +extern u8 _022A88F0[]; +#ifdef JAPAN +extern u8 _022A88FC[]; +#endif + struct Window* GetWindow(s32 window_id) { return &WINDOW_LIST[window_id]; } + +u32 sub_0202760C(s32 idx) +{ +#ifdef JAPAN + return *(u32 *)(_022A88FC + idx * 0xE0); +#else + return *(u32 *)(_022A88F0 + idx * 0xE0); +#endif +} + +#ifdef JAPAN +u32 sub_0202796C_JP(s32 idx) +{ + return *(u32 *)(_022A88F0 + idx * 0xE0); +} +#endif diff --git a/src/main_020527A8.c b/src/main_020527A8.c index b761569c..0dbcaf9b 100644 --- a/src/main_020527A8.c +++ b/src/main_020527A8.c @@ -10,3 +10,23 @@ u8 GetBodySize(s16 monster_id) { return MONSTER_DATA_TABLE_PTR->entries[monster_id].body_size; } + +u8 GetSpriteSize(s16 monster_id) +{ + s32 raw = monster_id % 600; + s16 mod = raw; + u8 size = MONSTER_SPRITE_DATA[mod].sprite_size; + if (size == 0) { + return 0; + } + if (size <= 6) { + return 6; + } + return MONSTER_SPRITE_DATA[raw].sprite_size; +} + +u32 GetSpriteFileSize(s16 monster_id) +{ + s32 raw = monster_id % 600; + return MONSTER_SPRITE_DATA[raw].sprite_file_size << 9; +} diff --git a/src/overlay_29_02344B9C.c b/src/overlay_29_02344B9C.c index 1e8235bf..4f622b5a 100644 --- a/src/overlay_29_02344B9C.c +++ b/src/overlay_29_02344B9C.c @@ -1,8 +1,18 @@ #include "overlay_29_02344B9C.h" +#include "overlay_29_02344AF8.h" #include "main_02001188.h" #include "overlay_29_0234B024.h" +extern struct unk_023531A4 ov29_023531BC; +extern void SubstitutePlaceholderItemTags(s32 tag_id, struct item *item, struct unk_023531A4 *param_3); + void ov29_02344B9C(s32 idx, u32 val) { SetPreprocessorArgsIdVal(idx, val); } + +void PrepareItemForPrinting2(struct preprocessor_args *preprocessor_args, u8 tag_id, struct item *item) +{ + preprocessor_args->id_vals[tag_id] = tag_id | 0x40000; + SubstitutePlaceholderItemTags(tag_id, item, &ov29_023531BC); +}