diff --git a/asm/include/main_0204EFE0.inc b/asm/include/main_0204EFE0.inc index 430e6a09..51def264 100644 --- a/asm/include/main_0204EFE0.inc +++ b/asm/include/main_0204EFE0.inc @@ -52,7 +52,7 @@ .public StrncpySimpleNoPad .public StrncpySimpleNoPadSafe .public sub_0204CEE0 -.public sub_020515C4 +.public Copy16BitsTo .public sub_0205EE40 .public TEAM_MEMBER_TABLE_PTR .public TEAM_NAME diff --git a/asm/include/main_02059444.inc b/asm/include/main_0205956C.inc similarity index 99% rename from asm/include/main_02059444.inc rename to asm/include/main_0205956C.inc index c4ac06c5..88d2703f 100644 --- a/asm/include/main_02059444.inc +++ b/asm/include/main_0205956C.inc @@ -432,7 +432,7 @@ .public sub_020510C0 .public sub_020510E8 .public sub_02051134 -.public sub_020515C4 +.public Copy16BitsTo .public sub_02051620 .public sub_02051648 .public sub_02051788 diff --git a/asm/include/overlay_01.inc b/asm/include/overlay_01.inc index 15a74841..9cc8c066 100644 --- a/asm/include/overlay_01.inc +++ b/asm/include/overlay_01.inc @@ -357,7 +357,7 @@ .public sub_02050990 .public sub_020509BC .public sub_02050CD0 -.public sub_020515C4 +.public Copy16BitsTo .public sub_02052060 .public sub_020547C8 .public sub_020547D8 diff --git a/asm/main_0204EFE0.s b/asm/main_0204EFE0.s index c5ac5d78..8d9011ba 100644 --- a/asm/main_0204EFE0.s +++ b/asm/main_0204EFE0.s @@ -1949,7 +1949,7 @@ CopyLogTo: ; 0x0205054C mov r0, r4 ldr r1, [r1] add r1, r1, #0x278 - bl sub_020515C4 + bl Copy16BitsTo ldmia sp!, {r4, pc} .align 2, 0 _02050734: .word ADVENTURE_LOG_PTR diff --git a/asm/main_02051504.s b/asm/main_02051504.s index b333d795..dbf2cdf8 100644 --- a/asm/main_02051504.s +++ b/asm/main_02051504.s @@ -63,8 +63,8 @@ _020515B8: _020515C0: .word MISSION_FLOORS_FORBIDDEN arm_func_end IsForbiddenFloor - arm_func_start sub_020515C4 -sub_020515C4: ; 0x020515C4 + arm_func_start Copy16BitsTo +Copy16BitsTo: ; 0x020515C4 stmdb sp!, {r3, r4, r5, lr} mov r5, r0 mov r4, r1 @@ -75,7 +75,7 @@ sub_020515C4: ; 0x020515C4 mov r2, #8 bl CopyBitsTo ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_020515C4 + arm_func_end Copy16BitsTo arm_func_start Copy16BitsFrom Copy16BitsFrom: ; 0x020515EC diff --git a/asm/main_02059444.s b/asm/main_0205956C.s similarity index 99% rename from asm/main_02059444.s rename to asm/main_0205956C.s index ca643089..14b6383a 100644 --- a/asm/main_02059444.s +++ b/asm/main_0205956C.s @@ -1,86 +1,8 @@ .include "asm/macros.inc" - .include "main_02059444.inc" + .include "main_0205956C.inc" .text - arm_func_start ReadMonsterFromSave -ReadMonsterFromSave: ; 0x02059444 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - mov r0, r4 - mov r1, #0 - mov r2, #0x44 - bl memset - mov r0, r5 - mov r1, r4 - mov r2, #1 - bl CopyBitsFrom - mov r0, r5 - add r1, r4, #1 - mov r2, #7 - bl CopyBitsFrom - mov r0, r5 - add r1, r4, #4 - mov r2, #0xb - bl CopyBitsFrom - mov r0, r5 - add r1, r4, #2 - bl Copy16BitsFrom - mov r0, r5 - add r1, r4, #6 - mov r2, #7 - bl CopyBitsFrom - mov r0, r5 - add r1, r4, #7 - mov r2, #7 - bl CopyBitsFrom - mov r0, r5 - add r1, r4, #8 - mov r2, #0xa - bl CopyBitsFrom - mov r0, r5 - add r1, r4, #0xa - mov r2, #0xa - bl CopyBitsFrom - mov r0, r5 - add r1, r4, #0xc - mov r2, #8 - bl CopyBitsFrom - mov r0, r5 - add r1, r4, #0xd - mov r2, #8 - bl CopyBitsFrom - mov r0, r5 - add r1, r4, #0xe - mov r2, #8 - bl CopyBitsFrom - mov r0, r5 - add r1, r4, #0xf - mov r2, #8 - bl CopyBitsFrom - mov r0, r5 - add r1, r4, #0x10 - mov r2, #0x18 - bl CopyBitsFrom - mov r0, r5 - add r1, r4, #0x14 - mov r2, #0x45 - bl CopyBitsFrom - mov r0, r5 - add r1, r4, #0x20 - mov r2, #4 - bl CopyBitsFrom - mov r0, r5 - add r1, r4, #0x22 - bl CopyMovesetFrom - mov r0, r5 - add r1, r4, #0x3a - mov r2, #0x50 - bl CopyBitsFrom - ldmia sp!, {r3, r4, r5, pc} - arm_func_end ReadMonsterFromSave - arm_func_start sub_0205956C sub_0205956C: ; 0x0205956C stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} @@ -146,7 +68,7 @@ _02059608: bl CopyBitsTo mov r0, sl add r1, r7, #3 - bl sub_020515C4 + bl Copy16BitsTo mov r0, sl add r1, r7, #6 mov r2, #0xa @@ -3288,7 +3210,7 @@ _0205BFEC: bl CopyBitsTo add r0, sp, #0 add r1, r4, #2 - bl sub_020515C4 + bl Copy16BitsTo add r0, sp, #0 add r1, r4, #4 mov r2, #0xb @@ -3570,7 +3492,7 @@ sub_0205C440: ; 0x0205C440 bl CopyBitsTo mov r0, r5 add r1, r4, #4 - bl sub_020515C4 + bl Copy16BitsTo mov r0, r5 add r1, r4, #8 mov r2, #0x18 @@ -7911,7 +7833,7 @@ _0205FD1C: mov r0, r6 add r1, r1, #0x340 add r1, r1, r7 - bl sub_020515C4 + bl Copy16BitsTo add r8, r8, #1 cmp r8, #0x10 blt _0205FD1C @@ -8050,7 +7972,7 @@ sub_0205FE80: ; 0x0205FE80 bl CopyBitsTo mov r0, r5 add r1, r4, #4 - bl sub_020515C4 + bl Copy16BitsTo mov r0, r5 add r1, r4, #0xc mov r2, #8 diff --git a/asm/overlay_01.s b/asm/overlay_01.s index c42d1e16..16a9ea2d 100644 --- a/asm/overlay_01.s +++ b/asm/overlay_01.s @@ -6189,7 +6189,7 @@ ov01_0232E334: ; 0x0232E334 bl CopyBitsTo mov r0, r7 add r1, r6, #5 - bl sub_020515C4 + bl Copy16BitsTo mov r0, r7 add r1, r6, #8 mov r2, #0xb diff --git a/include/main_02059334.h b/include/main_02059334.h index 1558e1d2..5db877e7 100644 --- a/include/main_02059334.h +++ b/include/main_02059334.h @@ -5,5 +5,6 @@ #include "main_02059060.h" void WriteMonsterToSave(struct WriteMonsterInfoToSave_struct *write_info, struct ground_monster *monster); +void ReadMonsterFromSave(struct WriteMonsterInfoToSave_struct *read_info, struct ground_monster *monster); #endif //PMDSKY_MAIN_02059334_H diff --git a/main.lsf b/main.lsf index 14d6ffc3..73429807 100644 --- a/main.lsf +++ b/main.lsf @@ -132,7 +132,7 @@ Static main Object src/main_02059060.o Object asm/main_02059224.o Object src/main_02059334.o - Object asm/main_02059444.o + Object asm/main_0205956C.o Object src/dungeon_init_2.o Object asm/main_0206A750.o Object src/main_0206C98C.o diff --git a/src/main_02059334.c b/src/main_02059334.c index 2be1fb06..3456e009 100644 --- a/src/main_02059334.c +++ b/src/main_02059334.c @@ -1,15 +1,19 @@ #include "main_02059334.h" extern void CopyBitsTo(void *ctx, void *src, s32 nbits); -extern void sub_020515C4(struct WriteMonsterInfoToSave_struct *p0, void *p1); +extern void Copy16BitsTo(struct WriteMonsterInfoToSave_struct *p0, void *p1); extern void CopyMovesetTo(void *write_info, void *buffer_write); +extern void* memset(void *s, s32 c, u32 n); +extern void CopyBitsFrom(void *read_info, void *buf_read, s32 nbits); +extern void Copy16BitsFrom(void *read_info, void *buf_read); +extern void CopyMovesetFrom(struct WriteMonsterInfoToSave_struct *read_info, void *dst); void WriteMonsterToSave(struct WriteMonsterInfoToSave_struct *write_info, struct ground_monster *monster) { CopyBitsTo(write_info, &monster->is_valid, 1); CopyBitsTo(write_info, &monster->level, 7); CopyBitsTo(write_info, &monster->id, 11); - sub_020515C4(write_info, &monster->joined_at); + Copy16BitsTo(write_info, &monster->joined_at); CopyBitsTo(write_info, &monster->level_at_first_evo, 7); CopyBitsTo(write_info, &monster->level_at_second_evo, 7); CopyBitsTo(write_info, &monster->iq, 10); @@ -24,3 +28,25 @@ void WriteMonsterToSave(struct WriteMonsterInfoToSave_struct *write_info, struct CopyMovesetTo(write_info, &monster->moves); CopyBitsTo(write_info, &monster->name, 80); } + +void ReadMonsterFromSave(struct WriteMonsterInfoToSave_struct *read_info, struct ground_monster *monster) +{ + memset(monster, 0, 68); + CopyBitsFrom(read_info, &monster->is_valid, 1); + CopyBitsFrom(read_info, &monster->level, 7); + CopyBitsFrom(read_info, &monster->id, 11); + Copy16BitsFrom(read_info, &monster->joined_at); + CopyBitsFrom(read_info, &monster->level_at_first_evo, 7); + CopyBitsFrom(read_info, &monster->level_at_second_evo, 7); + CopyBitsFrom(read_info, &monster->iq, 10); + CopyBitsFrom(read_info, &monster->max_hp, 10); + CopyBitsFrom(read_info, &monster->offensive_stats[0], 8); + CopyBitsFrom(read_info, &monster->offensive_stats[1], 8); + CopyBitsFrom(read_info, &monster->defensive_stats[0], 8); + CopyBitsFrom(read_info, &monster->defensive_stats[1], 8); + CopyBitsFrom(read_info, &monster->exp, 24); + CopyBitsFrom(read_info, &monster->iq_skill_flags, 69); + CopyBitsFrom(read_info, &monster->tactic, 4); + CopyMovesetFrom(read_info, &monster->moves); + CopyBitsFrom(read_info, &monster->name, 80); +}