diff --git a/asm/include/main_020517F4.inc b/asm/include/main_020517F4.inc index c636eeb3..2cdb940b 100644 --- a/asm/include/main_020517F4.inc +++ b/asm/include/main_020517F4.inc @@ -1,28 +1,11 @@ #pragma once -.public _020A31B8 -.public _020A31D4 -.public _020A31E4 -.public _020A31F4 -.public _020A31FC -.public _020A45C8_JP -.public _020B09B0 -.public _020B09C0 -.public _s32_div_f -.public ARM9_UNKNOWN_PTR__NA_20A2C84 .public ArrayCopy32 .public ArrayFill32 -.public DecompressAtNormalVeneer -.public GetAtSize -.public GetBaseForm -.public LoadFileFromRom -.public LoadM2nAndN2m .public MemAlloc .public MemFree .public MemZero -.public MONSTER_DATA_TABLE_PTR .public RANK_UP_TABLE -.public StringFromId -.public strncpy +.public _020B09B0 .public sub_0200302C .public sub_020030FC .public sub_0200A124 @@ -40,6 +23,3 @@ .public sub_0200B3C0 .public sub_0200B3D4 .public sub_0200B3FC -.public UnloadFile -.public UNOWN_SPECIES_ADDITIONAL_CHAR_PTR_TABLE -.public vsprintf diff --git a/asm/include/main_02052060.inc b/asm/include/main_02052060.inc new file mode 100644 index 00000000..d39e23e9 --- /dev/null +++ b/asm/include/main_02052060.inc @@ -0,0 +1,26 @@ +#pragma once +.public ARM9_UNKNOWN_PTR__NA_20A2C84 +.public GetBaseForm +.public LoadFileFromRom +.public LoadM2nAndN2m +.public MONSTER_DATA_TABLE_PTR +.public MemFree +.public StringFromId +.public UNOWN_SPECIES_ADDITIONAL_CHAR_PTR_TABLE +.public _020A31B8 +.public _020A31D4 +.public _020A31E4 +.public _020A31F4 +.public _020A31FC +.public _020A45C8_JP +.public _020B09B0 +.public _020B09C0 +.public _s32_div_f +.public strncpy +.public sub_0200A504 +.public sub_0200A590 +.public sub_02051804 +.public sub_02051D8C +.public sub_02051E60 +.public sub_02051FF0 +.public vsprintf diff --git a/asm/main_020517F4.s b/asm/main_020517F4.s index 7410a5b8..4cf96f96 100644 --- a/asm/main_020517F4.s +++ b/asm/main_020517F4.s @@ -617,588 +617,3 @@ sub_02051FB4: ; 0x02051FB4 .align 2, 0 _02051FEC: .word _020B09B0 arm_func_end sub_02051FB4 - - arm_func_start sub_02051FF0 -sub_02051FF0: ; 0x02051FF0 - stmdb sp!, {r3, r4, r5, lr} - sub sp, sp, #8 - mov r3, r0 - mov r5, r1 - add r0, sp, #0 - mov r1, r3 - bl LoadFileFromRom - ldr r0, [sp] - bl GetAtSize - mov r4, r0 - cmp r4, #0 - ldrle r0, [sp] - strle r0, [r5] - ldrle r4, [sp, #4] - ble _02052054 - mov r1, #0 - bl MemAlloc - mov r1, r4 - ldr r2, [sp] - mov r4, r0 - bl DecompressAtNormalVeneer - str r4, [r5] - add r0, sp, #0 - ldr r4, [r4, #0xc] - bl UnloadFile -_02052054: - mov r0, r4 - add sp, sp, #8 - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_02051FF0 - - arm_func_start sub_02052060 -sub_02052060: ; 0x02052060 - stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} - sub sp, sp, #0x2c - ldr r4, _020522E4 ; =_020B09B0 - mov sl, r1 - ldr r7, [sp, #0x54] - ldr r4, [r4] - mov r1, #0x30 - mla r4, r7, r1, r4 - ldr fp, [sp, #0x50] - mov r1, #0x18 - mla r4, fp, r1, r4 - mov sb, r2 - add r1, sp, #0x28 - mov r2, #0xf - mov r8, r3 - ldr r5, [r4, #0x10] - bl sub_02051FF0 - mov r3, r0 - ldr r4, [sp, #0x28] - mov r0, #0 - str r0, [sp] - str r0, [sp, #4] - ldr r0, _020522E4 ; =_020B09B0 - ldr r2, [r4, #8] - ldr r0, [r0] - add r1, r5, sl - add r2, r4, r2 - add r0, r0, #0x60 - bl sub_02051804 - mov r0, #1 - str r0, [sp] - mov r1, #0 - ldr r0, _020522E4 ; =_020B09B0 - str r1, [sp, #4] - ldr r0, [r0] - mov r2, r4 - mov r3, r1 - add r0, r0, #0x60 - bl sub_02051804 - ldr r1, [sp, #0x28] - rsb r0, sb, #0x20 - mov r0, r0, lsl #0x10 - ldr r1, [r1, #0x10] - str r0, [sp, #0x18] - add r0, r4, r1 - str r0, [sp, #0xc] - mov r5, #0 - b _020521CC -_02052120: - mov r6, #0 - mov r0, r6 - str r0, [sp, #8] - ldr r0, [sp, #0xc] - mov r1, sb, lsl #0x10 - add r0, r0, sb, lsl #6 - str r0, [sp, #0x10] - mov r0, r1, asr #0x10 - str r0, [sp, #0x14] -_02052144: - ldr r0, [sp, #0x10] - mov r1, r6, lsl #1 - ldrh r1, [r1, r0] - ldr r2, _020522E8 ; =0x00000FFF - mov r0, r6, lsl #0x10 - and r2, r1, r2 - mov r2, r2, lsl #0x10 - mov r1, r1, lsl #4 - mov r2, r2, lsr #0x10 - add r1, r8, r1, lsr #16 - add r2, r2, sl, lsr #5 - mov r1, r1, lsl #0x1c - mov r2, r2, lsl #0x10 - mov r1, r1, lsr #0x10 - orr r1, r1, r2, lsr #16 - mov r1, r1, lsl #0x10 - mov r2, r1, lsr #0x10 - ldr r1, [sp, #0x14] - mov r0, r0, asr #0x10 - str r7, [sp] - mov r3, fp - bl sub_02051D8C - ldr r0, [sp, #8] - add r6, r6, #1 - add r0, r0, #1 - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - str r0, [sp, #8] - cmp r0, #0x20 - blo _02052144 - add r0, r5, #1 - mov r0, r0, lsl #0x10 - mov r5, r0, lsr #0x10 - add sb, sb, #1 -_020521CC: - ldr r0, [sp, #0x18] - cmp r5, r0, lsr #16 - blo _02052120 - mov r0, fp - mov r1, r7 - bl sub_02051E60 - ldr r0, [sp, #0x28] - ldr r3, _020522EC ; =ARM9_UNKNOWN_PTR__NA_20A2C84 - ldr r0, [r0] - add r2, sp, #0x1c - add r5, r4, r0 - mov r4, #0 - mov r1, #4 -_02052200: - ldrb r0, [r3], #1 - subs r1, r1, #1 - strb r0, [r2], #1 - bne _02052200 - mov r0, #0x28 - mul r6, r7, r0 - b _020522B0 -_0205221C: - add r3, sp, #0x1c - add r2, sp, #0x20 - mov r1, #4 -_02052228: - ldrb r0, [r3], #1 - subs r1, r1, #1 - strb r0, [r2], #1 - bne _02052228 - ldrb r0, [r5] - add r3, sp, #0x20 - add r2, sp, #0x24 - strb r0, [sp, #0x20] - ldrb r0, [r5, #1] - mov r1, #4 - strb r0, [sp, #0x21] - ldrb r0, [r5, #2] - strb r0, [sp, #0x22] - ldrb r0, [r5, #3] - strb r0, [sp, #0x23] -_02052264: - ldrb r0, [r3], #1 - subs r1, r1, #1 - strb r0, [r2], #1 - bne _02052264 - add r0, r4, r8, lsl #4 - cmp r0, #0x100 - bge _020522C8 - ldr r1, _020522E4 ; =_020B09B0 - mov r0, r0, lsl #0x10 - ldr r1, [r1] - mov r0, r0, asr #0x10 - add r3, r1, #0x1cc - mov r1, r0, lsl #0x10 - add r2, sp, #0x24 - add r0, r3, r6 - mov r1, r1, lsr #0x10 - bl sub_0200A590 - add r4, r4, #1 - add r5, r5, #4 -_020522B0: - ldr r0, [sp, #0x28] - ldr r1, [r0, #4] - mov r0, r1, asr #1 - add r0, r1, r0, lsr #30 - cmp r4, r0, asr #2 - blt _0205221C -_020522C8: - ldr r0, _020522E4 ; =_020B09B0 - ldr r0, [r0] - add r0, r0, #0x1cc - add r0, r0, r6 - bl sub_0200A504 - add sp, sp, #0x2c - ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} - .align 2, 0 -_020522E4: .word _020B09B0 -_020522E8: .word 0x00000FFF -_020522EC: .word ARM9_UNKNOWN_PTR__NA_20A2C84 - arm_func_end sub_02052060 - - arm_func_start sub_020522F0 -sub_020522F0: ; 0x020522F0 - stmdb sp!, {r4, lr} - mov r4, r1 - bl sub_02051FF0 - str r0, [r4, #8] - ldr r1, [r4] - ldr r0, [r1, #8] - add r0, r1, r0 - str r0, [r4, #4] - ldr r0, [r4] - ldr r0, [r0, #0x10] - add r0, r1, r0 - str r0, [r4, #0xc] - ldr r0, [r4] - ldr r0, [r0] - add r0, r1, r0 - str r0, [r4, #0x10] - ldmia sp!, {r4, pc} - arm_func_end sub_020522F0 - - arm_func_start sub_02052334 -sub_02052334: ; 0x02052334 - stmdb sp!, {r4, lr} - mov r4, r0 - ldr r0, [r4] - cmp r0, #0 - ldmeqia sp!, {r4, pc} - bl MemFree - mov r0, #0 - str r0, [r4] - ldmia sp!, {r4, pc} - arm_func_end sub_02052334 - - arm_func_start LoadMonsterMd -LoadMonsterMd: ; 0x02052358 - stmdb sp!, {r3, lr} - ldr r0, _02052388 ; =_020B09C0 - ldr r1, _0205238C ; =_020A31B8 - mov r2, #0 - bl LoadFileFromRom - bl LoadM2nAndN2m - ldr r0, _02052390 ; =MONSTER_DATA_TABLE_PTR - ldr r1, [r0, #0xc] -#ifdef EUROPE - str r1, [r0, #8] -#else - str r1, [r0, #4] -#endif - add r1, r1, #8 - str r1, [r0] - ldmia sp!, {r3, pc} - .align 2, 0 -_02052388: .word _020B09C0 -_0205238C: .word _020A31B8 -_02052390: .word MONSTER_DATA_TABLE_PTR - arm_func_end LoadMonsterMd - - arm_func_start GetNameRaw -GetNameRaw: ; 0x02052394 - stmdb sp!, {r4, lr} - mov r4, r0 - mov r0, r1 - mov r1, #0x258 - bl _s32_div_f -#if defined(EUROPE) - add r0, r1, #0x21 - add r0, r0, #0x2200 -#elif defined(JAPAN) - add r0, r1, #0x590 - add r0, r0, #0x1000 -#else - add r0, r1, #0x1f - add r0, r0, #0x2200 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - mov r1, r0 - mov r0, r4 - mov r2, #0x14 - bl strncpy - ldmia sp!, {r4, pc} - arm_func_end GetNameRaw - - arm_func_start GetName -GetName: ; 0x020523D0 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r0, r1 - mov r1, #0x258 - mov r4, r2 - bl _s32_div_f -#if defined(EUROPE) - add r0, r1, #0x21 - add r0, r0, #0x2200 -#elif defined(JAPAN) - add r0, r1, #0x590 - add r0, r0, #0x1000 -#else - add r0, r1, #0x1f - add r0, r0, #0x2200 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - mov r3, r0 - mov r0, r5 - mov r2, r4 - ldr r1, _02052414 ; =_020A31D4 - bl SprintfStatic__02052418 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -_02052414: .word _020A31D4 - arm_func_end GetName - - arm_func_start SprintfStatic__02052418 -SprintfStatic__02052418: ; 0x02052418 - 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__02052418 - - arm_func_start GetNameWithGender -GetNameWithGender: ; 0x02052440 -#ifdef JAPAN - stmdb sp!, {r4, r5, r6, lr} -#else - stmdb sp!, {r3, r4, r5, r6, lr} - sub sp, sp, #4 -#endif - mov r5, r1 - mov r6, r0 - mov r0, r5 - mov r1, #0x258 - mov r4, r2 - bl _s32_div_f -#if defined(EUROPE) - add r0, r1, #0x21 - add r0, r0, #0x2200 -#elif defined(JAPAN) - add r0, r1, #0x590 - add r0, r0, #0x1000 -#else - add r0, r1, #0x1f - add r0, r0, #0x2200 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - ldr r2, _020524F4 ; =MONSTER_DATA_TABLE_PTR - mov r1, #0x44 - ldr r2, [r2] - mov r3, r0 - smlabb r0, r5, r1, r2 - ldrb r0, [r0, #0x12] - cmp r0, #3 - cmpne r5, #0x1d - cmpne r5, #0x20 - bne _020524B0 - ldr r1, _020524F8 ; =_020A31D4 - mov r0, r6 - mov r2, r4 - bl SprintfStatic__02052418 -#ifdef JAPAN - ldmia sp!, {r4, r5, r6, pc} -#else - b _020524EC -#endif -_020524B0: - cmp r0, #2 - bne _020524D4 - ldr r1, _020524FC ; =_020A31E4 -#ifdef JAPAN - mov r0, r6 - mov r2, r4 - bl SprintfStatic__02052418 - ldmia sp!, {r4, r5, r6, pc} -_020524D4: - ldr r1, _02052838_JP ; =_020A45C8_JP - mov r0, r6 - mov r2, r4 - bl SprintfStatic__02052418 - ldmia sp!, {r4, r5, r6, pc} -#else - mov r5, #0xbe - mov r0, r6 - mov r2, r4 - str r5, [sp] - bl SprintfStatic__02052418 - b _020524EC -_020524D4: - ldr r1, _020524FC ; =_020A31E4 - mov r5, #0xbd - mov r0, r6 - mov r2, r4 - str r5, [sp] - bl SprintfStatic__02052418 -_020524EC: - add sp, sp, #4 - ldmia sp!, {r3, r4, r5, r6, pc} -#endif - .align 2, 0 -_020524F4: .word MONSTER_DATA_TABLE_PTR -_020524F8: .word _020A31D4 -_020524FC: .word _020A31E4 -#ifdef JAPAN -_02052838_JP: .word _020A45C8_JP -#endif - arm_func_end GetNameWithGender - - arm_func_start GetSpeciesString -GetSpeciesString: ; 0x02052500 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - mov r0, r4 - bl GetBaseForm - cmp r0, #0xc9 - bne _02052684 - cmp r4, #0xca - moveq r4, #1 - beq _02052660 - cmp r4, #0xcb - moveq r4, #2 - beq _02052660 - cmp r4, #0xcc - moveq r4, #3 - beq _02052660 - cmp r4, #0xcd - moveq r4, #4 - beq _02052660 - cmp r4, #0xce - moveq r4, #5 - beq _02052660 - cmp r4, #0xcf - moveq r4, #6 - beq _02052660 - cmp r4, #0xd0 - moveq r4, #7 - beq _02052660 - cmp r4, #0xd1 - moveq r4, #8 - beq _02052660 - cmp r4, #0xd2 - moveq r4, #9 - beq _02052660 - cmp r4, #0xd3 - moveq r4, #0xa - beq _02052660 - cmp r4, #0xd4 - moveq r4, #0xb - beq _02052660 - cmp r4, #0xd5 - moveq r4, #0xc - beq _02052660 - cmp r4, #0xd6 - moveq r4, #0xd - beq _02052660 - cmp r4, #0xd7 - moveq r4, #0xe - beq _02052660 - cmp r4, #0xd8 - moveq r4, #0xf - beq _02052660 - cmp r4, #0xd9 - moveq r4, #0x10 - beq _02052660 - cmp r4, #0xda - moveq r4, #0x11 - beq _02052660 - cmp r4, #0xdb - moveq r4, #0x12 - beq _02052660 - cmp r4, #0xdc - moveq r4, #0x13 - beq _02052660 - cmp r4, #0xdd - moveq r4, #0x14 - beq _02052660 - cmp r4, #0xde - moveq r4, #0x15 - beq _02052660 - cmp r4, #0xdf - moveq r4, #0x16 - beq _02052660 - cmp r4, #0xe0 - moveq r4, #0x17 - beq _02052660 - cmp r4, #0xe1 - moveq r4, #0x18 - beq _02052660 - cmp r4, #0xe2 - moveq r4, #0x19 - beq _02052660 - cmp r4, #0xe3 - moveq r4, #0x1a - beq _02052660 - cmp r4, #0xe4 - moveq r4, #0x1b - movne r4, #0 -_02052660: - ldr r0, _020526B8 ; =0x000022E8 - bl StringFromId - ldr r1, _020526BC ; =UNOWN_SPECIES_ADDITIONAL_CHAR_PTR_TABLE - mov r2, r0 - ldr r3, [r1, r4, lsl #2] - ldr r1, _020526C0 ; =_020A31F4 - mov r0, r5 - bl SprintfStatic__02052418 - ldmia sp!, {r3, r4, r5, pc} -_02052684: - mov r0, r4 - mov r1, #0x258 - bl _s32_div_f -#if defined(EUROPE) - add r0, r1, #0x21 - add r0, r0, #0x2200 -#elif defined(JAPAN) - add r0, r1, #0x590 - add r0, r0, #0x1000 -#else - add r0, r1, #0x1f - add r0, r0, #0x2200 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - mov r2, r0 - ldr r1, _020526C4 ; =_020A31FC - mov r0, r5 - bl SprintfStatic__02052418 - ldmia sp!, {r3, r4, r5, pc} - .align 2, 0 -#if defined(EUROPE) -_020526B8: .word 0x000022EA -#elif defined(JAPAN) -_020526B8: .word 0x00001659 -#else -_020526B8: .word 0x000022E8 -#endif -_020526BC: .word UNOWN_SPECIES_ADDITIONAL_CHAR_PTR_TABLE -_020526C0: .word _020A31F4 -_020526C4: .word _020A31FC - arm_func_end GetSpeciesString - - arm_func_start GetNameString -GetNameString: ; 0x020526C8 - stmdb sp!, {r3, lr} - mov r1, #0x258 - bl _s32_div_f -#if defined(EUROPE) - add r0, r1, #0x21 - add r0, r0, #0x2200 -#elif defined(JAPAN) - add r0, r1, #0x590 - add r0, r0, #0x1000 -#else - add r0, r1, #0x1f - add r0, r0, #0x2200 -#endif - mov r0, r0, lsl #0x10 - mov r0, r0, lsr #0x10 - bl StringFromId - ldmia sp!, {r3, pc} - arm_func_end GetNameString diff --git a/asm/main_02052060.s b/asm/main_02052060.s new file mode 100644 index 00000000..7d01c104 --- /dev/null +++ b/asm/main_02052060.s @@ -0,0 +1,556 @@ + .include "asm/macros.inc" + .include "main_02052060.inc" + + .text + + arm_func_start sub_02052060 +sub_02052060: ; 0x02052060 + stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr} + sub sp, sp, #0x2c + ldr r4, _020522E4 ; =_020B09B0 + mov sl, r1 + ldr r7, [sp, #0x54] + ldr r4, [r4] + mov r1, #0x30 + mla r4, r7, r1, r4 + ldr fp, [sp, #0x50] + mov r1, #0x18 + mla r4, fp, r1, r4 + mov sb, r2 + add r1, sp, #0x28 + mov r2, #0xf + mov r8, r3 + ldr r5, [r4, #0x10] + bl sub_02051FF0 + mov r3, r0 + ldr r4, [sp, #0x28] + mov r0, #0 + str r0, [sp] + str r0, [sp, #4] + ldr r0, _020522E4 ; =_020B09B0 + ldr r2, [r4, #8] + ldr r0, [r0] + add r1, r5, sl + add r2, r4, r2 + add r0, r0, #0x60 + bl sub_02051804 + mov r0, #1 + str r0, [sp] + mov r1, #0 + ldr r0, _020522E4 ; =_020B09B0 + str r1, [sp, #4] + ldr r0, [r0] + mov r2, r4 + mov r3, r1 + add r0, r0, #0x60 + bl sub_02051804 + ldr r1, [sp, #0x28] + rsb r0, sb, #0x20 + mov r0, r0, lsl #0x10 + ldr r1, [r1, #0x10] + str r0, [sp, #0x18] + add r0, r4, r1 + str r0, [sp, #0xc] + mov r5, #0 + b _020521CC +_02052120: + mov r6, #0 + mov r0, r6 + str r0, [sp, #8] + ldr r0, [sp, #0xc] + mov r1, sb, lsl #0x10 + add r0, r0, sb, lsl #6 + str r0, [sp, #0x10] + mov r0, r1, asr #0x10 + str r0, [sp, #0x14] +_02052144: + ldr r0, [sp, #0x10] + mov r1, r6, lsl #1 + ldrh r1, [r1, r0] + ldr r2, _020522E8 ; =0x00000FFF + mov r0, r6, lsl #0x10 + and r2, r1, r2 + mov r2, r2, lsl #0x10 + mov r1, r1, lsl #4 + mov r2, r2, lsr #0x10 + add r1, r8, r1, lsr #16 + add r2, r2, sl, lsr #5 + mov r1, r1, lsl #0x1c + mov r2, r2, lsl #0x10 + mov r1, r1, lsr #0x10 + orr r1, r1, r2, lsr #16 + mov r1, r1, lsl #0x10 + mov r2, r1, lsr #0x10 + ldr r1, [sp, #0x14] + mov r0, r0, asr #0x10 + str r7, [sp] + mov r3, fp + bl sub_02051D8C + ldr r0, [sp, #8] + add r6, r6, #1 + add r0, r0, #1 + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + str r0, [sp, #8] + cmp r0, #0x20 + blo _02052144 + add r0, r5, #1 + mov r0, r0, lsl #0x10 + mov r5, r0, lsr #0x10 + add sb, sb, #1 +_020521CC: + ldr r0, [sp, #0x18] + cmp r5, r0, lsr #16 + blo _02052120 + mov r0, fp + mov r1, r7 + bl sub_02051E60 + ldr r0, [sp, #0x28] + ldr r3, _020522EC ; =ARM9_UNKNOWN_PTR__NA_20A2C84 + ldr r0, [r0] + add r2, sp, #0x1c + add r5, r4, r0 + mov r4, #0 + mov r1, #4 +_02052200: + ldrb r0, [r3], #1 + subs r1, r1, #1 + strb r0, [r2], #1 + bne _02052200 + mov r0, #0x28 + mul r6, r7, r0 + b _020522B0 +_0205221C: + add r3, sp, #0x1c + add r2, sp, #0x20 + mov r1, #4 +_02052228: + ldrb r0, [r3], #1 + subs r1, r1, #1 + strb r0, [r2], #1 + bne _02052228 + ldrb r0, [r5] + add r3, sp, #0x20 + add r2, sp, #0x24 + strb r0, [sp, #0x20] + ldrb r0, [r5, #1] + mov r1, #4 + strb r0, [sp, #0x21] + ldrb r0, [r5, #2] + strb r0, [sp, #0x22] + ldrb r0, [r5, #3] + strb r0, [sp, #0x23] +_02052264: + ldrb r0, [r3], #1 + subs r1, r1, #1 + strb r0, [r2], #1 + bne _02052264 + add r0, r4, r8, lsl #4 + cmp r0, #0x100 + bge _020522C8 + ldr r1, _020522E4 ; =_020B09B0 + mov r0, r0, lsl #0x10 + ldr r1, [r1] + mov r0, r0, asr #0x10 + add r3, r1, #0x1cc + mov r1, r0, lsl #0x10 + add r2, sp, #0x24 + add r0, r3, r6 + mov r1, r1, lsr #0x10 + bl sub_0200A590 + add r4, r4, #1 + add r5, r5, #4 +_020522B0: + ldr r0, [sp, #0x28] + ldr r1, [r0, #4] + mov r0, r1, asr #1 + add r0, r1, r0, lsr #30 + cmp r4, r0, asr #2 + blt _0205221C +_020522C8: + ldr r0, _020522E4 ; =_020B09B0 + ldr r0, [r0] + add r0, r0, #0x1cc + add r0, r0, r6 + bl sub_0200A504 + add sp, sp, #0x2c + ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} + .align 2, 0 +_020522E4: .word _020B09B0 +_020522E8: .word 0x00000FFF +_020522EC: .word ARM9_UNKNOWN_PTR__NA_20A2C84 + arm_func_end sub_02052060 + + arm_func_start sub_020522F0 +sub_020522F0: ; 0x020522F0 + stmdb sp!, {r4, lr} + mov r4, r1 + bl sub_02051FF0 + str r0, [r4, #8] + ldr r1, [r4] + ldr r0, [r1, #8] + add r0, r1, r0 + str r0, [r4, #4] + ldr r0, [r4] + ldr r0, [r0, #0x10] + add r0, r1, r0 + str r0, [r4, #0xc] + ldr r0, [r4] + ldr r0, [r0] + add r0, r1, r0 + str r0, [r4, #0x10] + ldmia sp!, {r4, pc} + arm_func_end sub_020522F0 + + arm_func_start sub_02052334 +sub_02052334: ; 0x02052334 + stmdb sp!, {r4, lr} + mov r4, r0 + ldr r0, [r4] + cmp r0, #0 + ldmeqia sp!, {r4, pc} + bl MemFree + mov r0, #0 + str r0, [r4] + ldmia sp!, {r4, pc} + arm_func_end sub_02052334 + + arm_func_start LoadMonsterMd +LoadMonsterMd: ; 0x02052358 + stmdb sp!, {r3, lr} + ldr r0, _02052388 ; =_020B09C0 + ldr r1, _0205238C ; =_020A31B8 + mov r2, #0 + bl LoadFileFromRom + bl LoadM2nAndN2m + ldr r0, _02052390 ; =MONSTER_DATA_TABLE_PTR + ldr r1, [r0, #0xc] +#ifdef EUROPE + str r1, [r0, #8] +#else + str r1, [r0, #4] +#endif + add r1, r1, #8 + str r1, [r0] + ldmia sp!, {r3, pc} + .align 2, 0 +_02052388: .word _020B09C0 +_0205238C: .word _020A31B8 +_02052390: .word MONSTER_DATA_TABLE_PTR + arm_func_end LoadMonsterMd + + arm_func_start GetNameRaw +GetNameRaw: ; 0x02052394 + stmdb sp!, {r4, lr} + mov r4, r0 + mov r0, r1 + mov r1, #0x258 + bl _s32_div_f +#if defined(EUROPE) + add r0, r1, #0x21 + add r0, r0, #0x2200 +#elif defined(JAPAN) + add r0, r1, #0x590 + add r0, r0, #0x1000 +#else + add r0, r1, #0x1f + add r0, r0, #0x2200 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + mov r1, r0 + mov r0, r4 + mov r2, #0x14 + bl strncpy + ldmia sp!, {r4, pc} + arm_func_end GetNameRaw + + arm_func_start GetName +GetName: ; 0x020523D0 + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r0, r1 + mov r1, #0x258 + mov r4, r2 + bl _s32_div_f +#if defined(EUROPE) + add r0, r1, #0x21 + add r0, r0, #0x2200 +#elif defined(JAPAN) + add r0, r1, #0x590 + add r0, r0, #0x1000 +#else + add r0, r1, #0x1f + add r0, r0, #0x2200 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + mov r3, r0 + mov r0, r5 + mov r2, r4 + ldr r1, _02052414 ; =_020A31D4 + bl SprintfStatic__02052418 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +_02052414: .word _020A31D4 + arm_func_end GetName + + arm_func_start SprintfStatic__02052418 +SprintfStatic__02052418: ; 0x02052418 + 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__02052418 + + arm_func_start GetNameWithGender +GetNameWithGender: ; 0x02052440 +#ifdef JAPAN + stmdb sp!, {r4, r5, r6, lr} +#else + stmdb sp!, {r3, r4, r5, r6, lr} + sub sp, sp, #4 +#endif + mov r5, r1 + mov r6, r0 + mov r0, r5 + mov r1, #0x258 + mov r4, r2 + bl _s32_div_f +#if defined(EUROPE) + add r0, r1, #0x21 + add r0, r0, #0x2200 +#elif defined(JAPAN) + add r0, r1, #0x590 + add r0, r0, #0x1000 +#else + add r0, r1, #0x1f + add r0, r0, #0x2200 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + ldr r2, _020524F4 ; =MONSTER_DATA_TABLE_PTR + mov r1, #0x44 + ldr r2, [r2] + mov r3, r0 + smlabb r0, r5, r1, r2 + ldrb r0, [r0, #0x12] + cmp r0, #3 + cmpne r5, #0x1d + cmpne r5, #0x20 + bne _020524B0 + ldr r1, _020524F8 ; =_020A31D4 + mov r0, r6 + mov r2, r4 + bl SprintfStatic__02052418 +#ifdef JAPAN + ldmia sp!, {r4, r5, r6, pc} +#else + b _020524EC +#endif +_020524B0: + cmp r0, #2 + bne _020524D4 + ldr r1, _020524FC ; =_020A31E4 +#ifdef JAPAN + mov r0, r6 + mov r2, r4 + bl SprintfStatic__02052418 + ldmia sp!, {r4, r5, r6, pc} +_020524D4: + ldr r1, _02052838_JP ; =_020A45C8_JP + mov r0, r6 + mov r2, r4 + bl SprintfStatic__02052418 + ldmia sp!, {r4, r5, r6, pc} +#else + mov r5, #0xbe + mov r0, r6 + mov r2, r4 + str r5, [sp] + bl SprintfStatic__02052418 + b _020524EC +_020524D4: + ldr r1, _020524FC ; =_020A31E4 + mov r5, #0xbd + mov r0, r6 + mov r2, r4 + str r5, [sp] + bl SprintfStatic__02052418 +_020524EC: + add sp, sp, #4 + ldmia sp!, {r3, r4, r5, r6, pc} +#endif + .align 2, 0 +_020524F4: .word MONSTER_DATA_TABLE_PTR +_020524F8: .word _020A31D4 +_020524FC: .word _020A31E4 +#ifdef JAPAN +_02052838_JP: .word _020A45C8_JP +#endif + arm_func_end GetNameWithGender + + arm_func_start GetSpeciesString +GetSpeciesString: ; 0x02052500 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + mov r5, r0 + mov r0, r4 + bl GetBaseForm + cmp r0, #0xc9 + bne _02052684 + cmp r4, #0xca + moveq r4, #1 + beq _02052660 + cmp r4, #0xcb + moveq r4, #2 + beq _02052660 + cmp r4, #0xcc + moveq r4, #3 + beq _02052660 + cmp r4, #0xcd + moveq r4, #4 + beq _02052660 + cmp r4, #0xce + moveq r4, #5 + beq _02052660 + cmp r4, #0xcf + moveq r4, #6 + beq _02052660 + cmp r4, #0xd0 + moveq r4, #7 + beq _02052660 + cmp r4, #0xd1 + moveq r4, #8 + beq _02052660 + cmp r4, #0xd2 + moveq r4, #9 + beq _02052660 + cmp r4, #0xd3 + moveq r4, #0xa + beq _02052660 + cmp r4, #0xd4 + moveq r4, #0xb + beq _02052660 + cmp r4, #0xd5 + moveq r4, #0xc + beq _02052660 + cmp r4, #0xd6 + moveq r4, #0xd + beq _02052660 + cmp r4, #0xd7 + moveq r4, #0xe + beq _02052660 + cmp r4, #0xd8 + moveq r4, #0xf + beq _02052660 + cmp r4, #0xd9 + moveq r4, #0x10 + beq _02052660 + cmp r4, #0xda + moveq r4, #0x11 + beq _02052660 + cmp r4, #0xdb + moveq r4, #0x12 + beq _02052660 + cmp r4, #0xdc + moveq r4, #0x13 + beq _02052660 + cmp r4, #0xdd + moveq r4, #0x14 + beq _02052660 + cmp r4, #0xde + moveq r4, #0x15 + beq _02052660 + cmp r4, #0xdf + moveq r4, #0x16 + beq _02052660 + cmp r4, #0xe0 + moveq r4, #0x17 + beq _02052660 + cmp r4, #0xe1 + moveq r4, #0x18 + beq _02052660 + cmp r4, #0xe2 + moveq r4, #0x19 + beq _02052660 + cmp r4, #0xe3 + moveq r4, #0x1a + beq _02052660 + cmp r4, #0xe4 + moveq r4, #0x1b + movne r4, #0 +_02052660: + ldr r0, _020526B8 ; =0x000022E8 + bl StringFromId + ldr r1, _020526BC ; =UNOWN_SPECIES_ADDITIONAL_CHAR_PTR_TABLE + mov r2, r0 + ldr r3, [r1, r4, lsl #2] + ldr r1, _020526C0 ; =_020A31F4 + mov r0, r5 + bl SprintfStatic__02052418 + ldmia sp!, {r3, r4, r5, pc} +_02052684: + mov r0, r4 + mov r1, #0x258 + bl _s32_div_f +#if defined(EUROPE) + add r0, r1, #0x21 + add r0, r0, #0x2200 +#elif defined(JAPAN) + add r0, r1, #0x590 + add r0, r0, #0x1000 +#else + add r0, r1, #0x1f + add r0, r0, #0x2200 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + mov r2, r0 + ldr r1, _020526C4 ; =_020A31FC + mov r0, r5 + bl SprintfStatic__02052418 + ldmia sp!, {r3, r4, r5, pc} + .align 2, 0 +#if defined(EUROPE) +_020526B8: .word 0x000022EA +#elif defined(JAPAN) +_020526B8: .word 0x00001659 +#else +_020526B8: .word 0x000022E8 +#endif +_020526BC: .word UNOWN_SPECIES_ADDITIONAL_CHAR_PTR_TABLE +_020526C0: .word _020A31F4 +_020526C4: .word _020A31FC + arm_func_end GetSpeciesString + + arm_func_start GetNameString +GetNameString: ; 0x020526C8 + stmdb sp!, {r3, lr} + mov r1, #0x258 + bl _s32_div_f +#if defined(EUROPE) + add r0, r1, #0x21 + add r0, r0, #0x2200 +#elif defined(JAPAN) + add r0, r1, #0x590 + add r0, r0, #0x1000 +#else + add r0, r1, #0x1f + add r0, r0, #0x2200 +#endif + mov r0, r0, lsl #0x10 + mov r0, r0, lsr #0x10 + bl StringFromId + ldmia sp!, {r3, pc} + arm_func_end GetNameString diff --git a/include/main_02051FF0.h b/include/main_02051FF0.h new file mode 100644 index 00000000..a3cab832 --- /dev/null +++ b/include/main_02051FF0.h @@ -0,0 +1,6 @@ +#ifndef PMDSKY_MAIN_02051FF0_H +#define PMDSKY_MAIN_02051FF0_H + +s32 sub_02051FF0(u32 fileId, void **outPtr, s32 param2); + +#endif //PMDSKY_MAIN_02051FF0_H diff --git a/main.lsf b/main.lsf index 4ce896ce..93a98975 100644 --- a/main.lsf +++ b/main.lsf @@ -110,6 +110,8 @@ Static main Object asm/main_rodata_020A20B1.o Object src/main_020517D4.o Object asm/main_020517F4.o + Object src/main_02051FF0.o + Object asm/main_02052060.o Object src/main_020526EC.o Object src/get_category_string.o Object src/main_020527A8.o diff --git a/src/main_02051FF0.c b/src/main_02051FF0.c new file mode 100644 index 00000000..6b75ede9 --- /dev/null +++ b/src/main_02051FF0.c @@ -0,0 +1,30 @@ +#include "main_02051FF0.h" +#include "main_02008BD4.h" + +extern void LoadFileFromRom(struct iovec *handle, u32 fileId, s32 param2); +extern s32 GetAtSize(void *data); +extern void *MemAlloc(u32 size, u32 heapId); +extern void DecompressAtNormalVeneer(void *dest, u32 size, void *src); + +s32 sub_02051FF0(u32 fileId, void **outPtr, s32 param2) +{ + struct iovec handle; + + LoadFileFromRom(&handle, fileId, param2); + + s32 size = GetAtSize(handle.iov_base); + + if (size <= 0) { + *outPtr = handle.iov_base; + size = handle.iov_len; + } else { + void *dest = MemAlloc((u32)size, 0); + + DecompressAtNormalVeneer(dest, (u32)size, handle.iov_base); + *outPtr = dest; + size = ((s32 *)dest)[3]; + UnloadFile(&handle); + } + + return size; +}