diff --git a/asm/include/main_0205BD90.inc b/asm/include/main_0205BFB0.inc similarity index 99% rename from asm/include/main_0205BD90.inc rename to asm/include/main_0205BFB0.inc index adc7212e..2cda36ab 100644 --- a/asm/include/main_0205BD90.inc +++ b/asm/include/main_0205BFB0.inc @@ -9,7 +9,6 @@ .public CopyBitsFrom .public CopyBitsTo .public CopyFrameTypeOption -.public CopyMovesetFrom .public CopyMovesetTo .public CreateCollectionMenu .public CreatePortraitBox @@ -262,7 +261,6 @@ .public _022B7310 .public _022B7320 .public _s32_div_f -.public memset .public ov00_022BE0C8 .public ov01_02337B3C .public ov01_02337B68 @@ -381,7 +379,6 @@ .public sub_02056914 .public sub_02056D70 .public sub_02056E04 -.public sub_02059AE8 .public sub_02059AF8 .public sub_0205B44C .public sub_0205B77C diff --git a/asm/main_0205BD90.s b/asm/main_0205BFB0.s similarity index 99% rename from asm/main_0205BD90.s rename to asm/main_0205BFB0.s index c1d1073f..a2399139 100644 --- a/asm/main_0205BD90.s +++ b/asm/main_0205BFB0.s @@ -1,155 +1,8 @@ .include "asm/macros.inc" - .include "main_0205BD90.inc" + .include "main_0205BFB0.inc" .text - arm_func_start sub_0205BD90 -sub_0205BD90: ; 0x0205BD90 - and r0, r0, #1 - orr r0, r0, #2 - bx lr - arm_func_end sub_0205BD90 - - arm_func_start sub_0205BD9C -sub_0205BD9C: ; 0x0205BD9C - stmdb sp!, {r3, r4, r5, r6, r7, lr} - sub sp, sp, #0x10 - mov r3, r0 - mov r2, r1 - add r0, sp, #0 - mov r1, r3 - bl sub_02050974 - ldr r1, _0205BFA8 ; =_022B57BC - add r0, sp, #0 - mov r2, #0x20 - bl CopyBitsFrom - ldr r5, _0205BFAC ; =_020B0A54 - mov r7, #0 - add r6, sp, #0 - mov r4, #0xb0 -_0205BDD8: - ldr r1, [r5] - mov r0, r6 - mla r1, r7, r4, r1 - bl sub_0205C19C - add r7, r7, #1 - cmp r7, #0x20 - blt _0205BDD8 - ldr r0, _0205BFAC ; =_020B0A54 - mov r1, #0 - ldr r4, [r0, #8] - mov r2, #0x44 - mov r0, r4 - bl memset - add r0, sp, #0 - mov r1, r4 - mov r2, #4 - bl CopyBitsFrom - add r0, sp, #0 - add r1, r4, #1 - mov r2, #7 - bl CopyBitsFrom - add r0, sp, #0 - add r1, r4, #2 - bl Copy16BitsFrom - add r0, sp, #0 - add r1, r4, #4 - mov r2, #0xb - bl CopyBitsFrom - add r0, sp, #0 - add r1, r4, #6 - bl sub_02059AE8 - add r0, sp, #0 - add r1, r4, #7 - bl sub_02059AE8 - add r0, sp, #0 - add r1, r4, #8 - mov r2, #0xa - bl CopyBitsFrom - add r0, sp, #0 - add r1, r4, #0xa - mov r2, #0xa - bl CopyBitsFrom - add r0, sp, #0 - add r1, r4, #0xc - mov r2, #8 - bl CopyBitsFrom - add r0, sp, #0 - add r1, r4, #0xd - mov r2, #8 - bl CopyBitsFrom - add r0, sp, #0 - add r1, r4, #0xe - mov r2, #8 - bl CopyBitsFrom - add r0, sp, #0 - add r1, r4, #0xf - mov r2, #8 - bl CopyBitsFrom - add r0, sp, #0 - add r1, r4, #0x10 - mov r2, #0x18 - bl CopyBitsFrom - add r0, sp, #0 - add r1, r4, #0x14 - mov r2, #0x45 - bl CopyBitsFrom - add r0, sp, #0 - add r1, r4, #0x20 - mov r2, #4 - bl CopyBitsFrom - add r0, sp, #0 - add r1, r4, #0x22 - bl CopyMovesetFrom - add r0, sp, #0 - add r1, r4, #0x3a - mov r2, #0x50 - bl CopyBitsFrom - ldr r0, _0205BFAC ; =_020B0A54 - mov r1, #0 - ldr r4, [r0, #8] - mov r2, #6 - add r0, r4, #0x44 - bl memset - add r0, sp, #0 - add r1, r4, #0x46 - mov r2, #0xb - bl CopyBitsFrom - add r0, sp, #0 - add r1, r4, #0x48 - mov r2, #0xb - bl CopyBitsFrom - ldr r1, _0205BFAC ; =_020B0A54 - add r0, sp, #0 - ldr r1, [r1, #4] - mov r2, #0x20 - bl CopyBitsFrom - ldr r4, _0205BFAC ; =_020B0A54 - mov r7, #0 - add r6, sp, #0 - mov r5, #0x40 -_0205BF68: - ldr r1, [r4, #4] - mov r0, r6 - add r1, r1, #4 - mov r2, r5 - add r1, r1, r7, lsl #3 - bl CopyBitsFrom - add r7, r7, #1 - cmp r7, #0x20 - blt _0205BF68 - add r0, sp, #0 - bl sub_020509BC - bl Rand16Bit - bl sub_020634F4 - ldr r0, [sp, #8] - add sp, sp, #0x10 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - .align 2, 0 -_0205BFA8: .word _022B57BC -_0205BFAC: .word _020B0A54 - arm_func_end sub_0205BD9C - arm_func_start sub_0205BFB0 sub_0205BFB0: ; 0x0205BFB0 stmdb sp!, {r3, r4, r5, r6, r7, lr} diff --git a/include/main_0205B690.h b/include/main_0205B690.h index 3e3d7018..c0f834fb 100644 --- a/include/main_0205B690.h +++ b/include/main_0205B690.h @@ -15,7 +15,8 @@ union unkStruct_020B0A54_unk8 { struct unkStruct_020B0A54 { u8 unk0; - u8 unk1[7]; + u8 unk1[3]; + u32 unk4; union unkStruct_020B0A54_unk8 unk8; u8 unkC[150]; u16 unkA2; diff --git a/include/main_0205BD14.h b/include/main_0205BD14.h index 42f68a7a..e4b5e6ee 100644 --- a/include/main_0205BD14.h +++ b/include/main_0205BD14.h @@ -7,5 +7,7 @@ void sub_0205BD14(u32 *dest, s32 index); u32 sub_0205BD40(u32 val); bool8 sub_0205BD5C(u32 val); u8 sub_0205BD78(void); +u32 sub_0205BD90(u32 a0); +u32 sub_0205BD9C(u32 arg0, u32 arg1); #endif //PMDSKY_MAIN_0205BD14_H diff --git a/main.lsf b/main.lsf index 6b81771d..a19e892a 100644 --- a/main.lsf +++ b/main.lsf @@ -158,7 +158,7 @@ Static main Object src/main_0205BBFC.o Object asm/main_0205BCC4.o Object src/main_0205BD14.o - Object asm/main_0205BD90.o + Object asm/main_0205BFB0.o Object src/dungeon_init_2.o Object asm/main_0206A750.o Object src/main_0206C98C.o diff --git a/src/main_0205BD14.c b/src/main_0205BD14.c index b5520756..6c93235a 100644 --- a/src/main_0205BD14.c +++ b/src/main_0205BD14.c @@ -1,8 +1,21 @@ #include "main_0205BD14.h" +#include "common.h" #include "main_0200224C.h" +#include "main_02058FA4.h" +#include "main_02059A74.h" #include "main_0205B690.h" extern union unkStruct_020B0A54_union _020B0A54; +extern u32 _022B57BC; + +extern void sub_02050974(void *v0, u32 v1, u32 v2); +extern void CopyBitsFrom(void *read_info, void *buf_read, s32 nbits); +extern void sub_0205C19C(struct WriteMonsterInfoToSave_struct *temp, void *src); +extern void* memset(void *s, s32 c, u32 n); +extern void Copy16BitsFrom(void *read_info, void *buf_read); +extern void CopyMovesetFrom(struct WriteMonsterInfoToSave_struct *read_info, void *dst); +extern void sub_020509BC(struct WriteMonsterInfoToSave_struct *temp); +extern void sub_020634F4(void); void sub_0205BD14(u32 *dest, s32 index) { @@ -28,3 +41,61 @@ u8 sub_0205BD78(void) { return RandInt(2) | 2; } + +u32 sub_0205BD90(u32 a0) +{ + return a0 & 1 | 2; +} + +u32 sub_0205BD9C(u32 arg0, u32 arg1) +{ + struct WriteMonsterInfoToSave_struct temp; + struct ground_monster *monster; + + sub_02050974(&temp, arg0, arg1); + CopyBitsFrom(&temp, &_022B57BC, 32); + + for (s32 i = 0; i < 32; i++) + { + sub_0205C19C(&temp, &_020B0A54.struct0[i]); + } + + monster = _020B0A54.struct1.unk8.monster; + memset(monster, 0, 68); + + CopyBitsFrom(&temp, &monster->is_valid, 4); + CopyBitsFrom(&temp, &monster->level, 7); + Copy16BitsFrom(&temp, &monster->joined_at); + CopyBitsFrom(&temp, &monster->id, 11); + sub_02059AE8(&temp, &monster->level_at_first_evo); + sub_02059AE8(&temp, &monster->level_at_second_evo); + CopyBitsFrom(&temp, &monster->iq, 10); + CopyBitsFrom(&temp, &monster->max_hp, 10); + CopyBitsFrom(&temp, &monster->offensive_stats[0], 8); + CopyBitsFrom(&temp, &monster->offensive_stats[1], 8); + CopyBitsFrom(&temp, &monster->defensive_stats[0], 8); + CopyBitsFrom(&temp, &monster->defensive_stats[1], 8); + CopyBitsFrom(&temp, &monster->exp, 24); + CopyBitsFrom(&temp, &monster->iq_skill_flags, 69); + CopyBitsFrom(&temp, &monster->tactic, 4); + CopyMovesetFrom(&temp, monster->moves); + CopyBitsFrom(&temp, monster->name, 80); + + struct unkStruct_020B0A54_unk8_inner *inner = _020B0A54.struct1.unk8.unk8; + memset(&inner->unk44, 0, 6); + CopyBitsFrom(&temp, &inner->unk46, 11); + CopyBitsFrom(&temp, &inner->unk48, 11); + + CopyBitsFrom(&temp, (void*) _020B0A54.struct1.unk4, 32); + + for (s32 i = 0; i < 32; i++) + { + CopyBitsFrom(&temp, _020B0A54.fp[1] + 4 + (i * 8), 64); + } + + sub_020509BC(&temp); + Rand16Bit(); + sub_020634F4(); + + return temp.result; +}