From 0a5465651bc2660a3f5c27de5a691d44ccc16739 Mon Sep 17 00:00:00 2001 From: Chesyon <55322011+Chesyon@users.noreply.github.com> Date: Wed, 6 May 2026 11:52:55 -0400 Subject: [PATCH 1/4] Decomp CopyMoveTo/FromStream --- asm/include/main_02013C30.inc | 8 +- asm/include/main_02014ABC.inc | 6 ++ asm/main_02013C30.s | 170 ---------------------------------- asm/main_02014ABC.s | 138 +++++++++++++++++++++++++++ include/main_02014A4C.h | 9 ++ include/save.h | 11 +++ main.lsf | 2 + src/main_02014A4C.c | 18 ++++ 8 files changed, 186 insertions(+), 176 deletions(-) create mode 100644 asm/include/main_02014ABC.inc create mode 100644 asm/main_02014ABC.s create mode 100644 include/main_02014A4C.h create mode 100644 include/save.h create mode 100644 src/main_02014A4C.c diff --git a/asm/include/main_02013C30.inc b/asm/include/main_02013C30.inc index 05de82cc..0e61d66d 100644 --- a/asm/include/main_02013C30.inc +++ b/asm/include/main_02013C30.inc @@ -1,10 +1,6 @@ #pragma once -.public _s32_div_f -.public CopyBitsFrom -.public CopyBitsTo .public DUNGEON_MOVE_TABLES .public GetInfoMoveGround -.public memset -.public Rand16Bit .public RECOIL_MOVE_LIST -.public StringFromId +.public Rand16Bit +.public _s32_div_f diff --git a/asm/include/main_02014ABC.inc b/asm/include/main_02014ABC.inc new file mode 100644 index 00000000..d0118cfa --- /dev/null +++ b/asm/include/main_02014ABC.inc @@ -0,0 +1,6 @@ +#pragma once +.public CopyBitsFrom +.public CopyBitsTo +.public CopyMoveFromStream +.public CopyMoveToStream +.public memset diff --git a/asm/main_02013C30.s b/asm/main_02013C30.s index b15d49fa..95695157 100644 --- a/asm/main_02013C30.s +++ b/asm/main_02013C30.s @@ -1073,173 +1073,3 @@ _02014A3C: mov r0, r2 ldmia sp!, {r3, r4, r5, r6, r7, pc} arm_func_end sub_020149C0 - - arm_func_start CopyMoveTo -CopyMoveTo: ; 0x02014A4C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - mov r2, #4 - bl CopyBitsTo - mov r0, r5 - add r1, r4, #2 - mov r2, #0xa - bl CopyBitsTo - mov r0, r5 - add r1, r4, #4 - mov r2, #7 - bl CopyBitsTo - ldmia sp!, {r3, r4, r5, pc} - arm_func_end CopyMoveTo - - arm_func_start CopyMoveFrom -CopyMoveFrom: ; 0x02014A84 - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - mov r2, #4 - bl CopyBitsFrom - mov r0, r5 - add r1, r4, #2 - mov r2, #0xa - bl CopyBitsFrom - mov r0, r5 - add r1, r4, #4 - mov r2, #7 - bl CopyBitsFrom - ldmia sp!, {r3, r4, r5, pc} - arm_func_end CopyMoveFrom - - arm_func_start CopyMovesetTo -CopyMovesetTo: ; 0x02014ABC - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - mov r5, #0 - mov r4, #6 -_02014AD0: - mla r1, r5, r4, r6 - mov r0, r7 - bl CopyMoveTo - add r5, r5, #1 - cmp r5, #4 - blt _02014AD0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end CopyMovesetTo - - arm_func_start CopyMovesetFrom -CopyMovesetFrom: ; 0x02014AEC - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - mov r5, #0 - mov r4, #6 -_02014B00: - mla r1, r5, r4, r6 - mov r0, r7 - bl CopyMoveFrom - add r5, r5, #1 - cmp r5, #4 - blt _02014B00 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end CopyMovesetFrom - - arm_func_start sub_02014B1C -sub_02014B1C: ; 0x02014B1C - stmdb sp!, {r3, r4, r5, lr} - mov r5, r0 - mov r4, r1 - mov r2, #4 - bl CopyBitsTo - mov r0, r5 - add r1, r4, #2 - mov r2, #1 - bl CopyBitsTo - mov r0, r5 - add r1, r4, #4 - mov r2, #0xa - bl CopyBitsTo - mov r0, r5 - add r1, r4, #6 - mov r2, #7 - bl CopyBitsTo - mov r0, r5 - add r1, r4, #7 - mov r2, #7 - bl CopyBitsTo - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_02014B1C - - arm_func_start sub_02014B74 -sub_02014B74: ; 0x02014B74 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r4, #0 -_02014B84: - mov r0, r6 - add r1, r5, r4, lsl #3 - bl sub_02014B1C - add r4, r4, #1 - cmp r4, #4 - blt _02014B84 - mov r0, r6 - add r1, r5, #0x20 - mov r2, #8 - bl CopyBitsTo - ldmia sp!, {r4, r5, r6, pc} - arm_func_end sub_02014B74 - - arm_func_start sub_02014BB0 -sub_02014BB0: ; 0x02014BB0 - stmdb sp!, {r3, r4, r5, lr} - mov r4, r1 - mov r5, r0 - mov r0, r4 - mov r1, #0 - mov r2, #8 - bl memset - mov r0, r5 - mov r1, r4 - mov r2, #4 - bl CopyBitsFrom - mov r0, r5 - add r1, r4, #2 - mov r2, #1 - bl CopyBitsFrom - mov r0, r5 - add r1, r4, #4 - mov r2, #0xa - bl CopyBitsFrom - mov r0, r5 - add r1, r4, #6 - mov r2, #7 - bl CopyBitsFrom - mov r0, r5 - add r1, r4, #7 - mov r2, #7 - bl CopyBitsFrom - ldmia sp!, {r3, r4, r5, pc} - arm_func_end sub_02014BB0 - - arm_func_start sub_02014C20 -sub_02014C20: ; 0x02014C20 - stmdb sp!, {r4, r5, r6, lr} - mov r6, r0 - mov r5, r1 - mov r4, #0 -_02014C30: - mov r0, r6 - add r1, r5, r4, lsl #3 - bl sub_02014BB0 - add r4, r4, #1 - cmp r4, #4 - blt _02014C30 - mov r3, #0 - mov r0, r6 - add r1, r5, #0x20 - mov r2, #8 - strb r3, [r5, #0x20] - bl CopyBitsFrom - ldmia sp!, {r4, r5, r6, pc} - arm_func_end sub_02014C20 diff --git a/asm/main_02014ABC.s b/asm/main_02014ABC.s new file mode 100644 index 00000000..6a2d6de7 --- /dev/null +++ b/asm/main_02014ABC.s @@ -0,0 +1,138 @@ + .include "asm/macros.inc" + .include "main_02014ABC.inc" + + .text + + arm_func_start CopyMovesetTo +CopyMovesetTo: ; 0x02014ABC + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r0 + mov r6, r1 + mov r5, #0 + mov r4, #6 +_02014AD0: + mla r1, r5, r4, r6 + mov r0, r7 + bl CopyMoveToStream + add r5, r5, #1 + cmp r5, #4 + blt _02014AD0 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end CopyMovesetTo + + arm_func_start CopyMovesetFrom +CopyMovesetFrom: ; 0x02014AEC + stmdb sp!, {r3, r4, r5, r6, r7, lr} + mov r7, r0 + mov r6, r1 + mov r5, #0 + mov r4, #6 +_02014B00: + mla r1, r5, r4, r6 + mov r0, r7 + bl CopyMoveFromStream + add r5, r5, #1 + cmp r5, #4 + blt _02014B00 + ldmia sp!, {r3, r4, r5, r6, r7, pc} + arm_func_end CopyMovesetFrom + + arm_func_start sub_02014B1C +sub_02014B1C: ; 0x02014B1C + stmdb sp!, {r3, r4, r5, lr} + mov r5, r0 + mov r4, r1 + mov r2, #4 + bl CopyBitsTo + mov r0, r5 + add r1, r4, #2 + mov r2, #1 + bl CopyBitsTo + mov r0, r5 + add r1, r4, #4 + mov r2, #0xa + bl CopyBitsTo + mov r0, r5 + add r1, r4, #6 + mov r2, #7 + bl CopyBitsTo + mov r0, r5 + add r1, r4, #7 + mov r2, #7 + bl CopyBitsTo + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_02014B1C + + arm_func_start sub_02014B74 +sub_02014B74: ; 0x02014B74 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, #0 +_02014B84: + mov r0, r6 + add r1, r5, r4, lsl #3 + bl sub_02014B1C + add r4, r4, #1 + cmp r4, #4 + blt _02014B84 + mov r0, r6 + add r1, r5, #0x20 + mov r2, #8 + bl CopyBitsTo + ldmia sp!, {r4, r5, r6, pc} + arm_func_end sub_02014B74 + + arm_func_start sub_02014BB0 +sub_02014BB0: ; 0x02014BB0 + stmdb sp!, {r3, r4, r5, lr} + mov r4, r1 + mov r5, r0 + mov r0, r4 + mov r1, #0 + mov r2, #8 + bl memset + mov r0, r5 + mov r1, r4 + mov r2, #4 + bl CopyBitsFrom + mov r0, r5 + add r1, r4, #2 + mov r2, #1 + bl CopyBitsFrom + mov r0, r5 + add r1, r4, #4 + mov r2, #0xa + bl CopyBitsFrom + mov r0, r5 + add r1, r4, #6 + mov r2, #7 + bl CopyBitsFrom + mov r0, r5 + add r1, r4, #7 + mov r2, #7 + bl CopyBitsFrom + ldmia sp!, {r3, r4, r5, pc} + arm_func_end sub_02014BB0 + + arm_func_start sub_02014C20 +sub_02014C20: ; 0x02014C20 + stmdb sp!, {r4, r5, r6, lr} + mov r6, r0 + mov r5, r1 + mov r4, #0 +_02014C30: + mov r0, r6 + add r1, r5, r4, lsl #3 + bl sub_02014BB0 + add r4, r4, #1 + cmp r4, #4 + blt _02014C30 + mov r3, #0 + mov r0, r6 + add r1, r5, #0x20 + mov r2, #8 + strb r3, [r5, #0x20] + bl CopyBitsFrom + ldmia sp!, {r4, r5, r6, pc} + arm_func_end sub_02014C20 diff --git a/include/main_02014A4C.h b/include/main_02014A4C.h new file mode 100644 index 00000000..62c05abf --- /dev/null +++ b/include/main_02014A4C.h @@ -0,0 +1,9 @@ +#ifndef PMDSKY_MAIN_02014A4C_H +#define PMDSKY_MAIN_02014A4C_H +#include "common.h" +#include "save.h" + +void CopyMoveToStream(struct bitstream * stream, struct ground_move * move ); +void CopyMoveFromStream(struct bitstream * stream, struct ground_move * move ); + +#endif //PMDSKY_MAIN_02014A4C_H diff --git a/include/save.h b/include/save.h new file mode 100644 index 00000000..4ff59a4b --- /dev/null +++ b/include/save.h @@ -0,0 +1,11 @@ +#ifndef PMDSKY_SAVE_H +#define PMDSKY_SAVE_H + +struct bitstream { + char* ptr; // Current byte + u32 end; // End of the region the bitstream can read from / write to. Doesn't seem to do anything with this information? + u32 bit_idx; // Bit position in current byte + u32 bit_count; // Total bits this stream has used +}; + +#endif //PMDSKY_SAVE_H diff --git a/main.lsf b/main.lsf index e4ab923a..923f3da6 100644 --- a/main.lsf +++ b/main.lsf @@ -66,6 +66,8 @@ Static main Object src/moves.o Object src/moves_3.o Object asm/main_02013C30.o + Object src/main_02014A4C.o + Object asm/main_02014ABC.o Object src/main_02014CEC.o Object asm/main_02014D18.o Object src/main_020251AC.o diff --git a/src/main_02014A4C.c b/src/main_02014A4C.c new file mode 100644 index 00000000..8e74425e --- /dev/null +++ b/src/main_02014A4C.c @@ -0,0 +1,18 @@ +#include "main_02014A4C.h" + +extern void CopyBitsTo(struct bitstream *stream, void *src, u32 nbits); +extern void CopyBitsFrom(struct bitstream *stream, void *dst, u32 nbits); + +void CopyMoveToStream(struct bitstream * stream, struct ground_move * move ) +{ + CopyBitsTo(stream, &move->flags0, 4); + CopyBitsTo(stream, &move->id, 10); + CopyBitsTo(stream, &move->ginseng, 7); +} + +void CopyMoveFromStream(struct bitstream * stream, struct ground_move * move ) +{ + CopyBitsFrom(stream, &move->flags0, 4); + CopyBitsFrom(stream, &move->id, 10); + CopyBitsFrom(stream, &move->ginseng, 7); +} From 6d10ed417db0f6d37de14af385eabe0b3c52e30f Mon Sep 17 00:00:00 2001 From: Chesyon <55322011+Chesyon@users.noreply.github.com> Date: Wed, 6 May 2026 12:18:25 -0400 Subject: [PATCH 2/4] use bitstreams --- include/main_02058FA4.h | 7 -- include/main_02059334.h | 6 +- include/main_0205BD14.h | 4 +- include/main_0205C440.h | 4 +- src/main_0204DA2C.c | 15 ++-- src/main_02059060.c | 27 +++---- src/main_02059334.c | 83 +++++++++++---------- src/main_0205BD14.c | 160 ++++++++++++++++++++-------------------- src/main_0205C440.c | 37 +++++----- 9 files changed, 170 insertions(+), 173 deletions(-) diff --git a/include/main_02058FA4.h b/include/main_02058FA4.h index d61b76bc..79411742 100644 --- a/include/main_02058FA4.h +++ b/include/main_02058FA4.h @@ -11,13 +11,6 @@ struct unkStruct_02058FCC { const u8 field_0x18[4][0x4c]; }; -struct WriteMonsterInfoToSave_struct { - u32 unk0; - u32 unk4; - s32 result; - u32 unkC; -}; - bool8 ExplorerMazeMonsterExists(void); void sub_02058FCC(struct unkStruct_02058FCC *ptr); // Returns the name of the explorer maze team. If the language of the team name is different from the diff --git a/include/main_02059334.h b/include/main_02059334.h index 3dd31cbe..697b4bd1 100644 --- a/include/main_02059334.h +++ b/include/main_02059334.h @@ -2,9 +2,9 @@ #define PMDSKY_MAIN_02059334_H #include "common.h" -#include "main_02058FA4.h" +#include "save.h" -void WriteMonsterToSave(struct WriteMonsterInfoToSave_struct *write_info, struct ground_monster *monster); -void ReadMonsterFromSave(struct WriteMonsterInfoToSave_struct *read_info, struct ground_monster *monster); +void WriteMonsterToSave(struct bitstream *stream, struct ground_monster *monster); +void ReadMonsterFromSave(struct bitstream *stream, struct ground_monster *monster); #endif //PMDSKY_MAIN_02059334_H diff --git a/include/main_0205BD14.h b/include/main_0205BD14.h index 6997df43..990e56e9 100644 --- a/include/main_0205BD14.h +++ b/include/main_0205BD14.h @@ -1,9 +1,9 @@ #ifndef PMDSKY_MAIN_0205BD14_H #define PMDSKY_MAIN_0205BD14_H -#include "main_02058FA4.h" #include "main_0205B690.h" #include "util.h" +#include "save.h" void sub_0205BD14(u32 *dest, s32 index); u32 sub_0205BD40(u32 val); @@ -12,6 +12,6 @@ u8 sub_0205BD78(void); u32 sub_0205BD90(u32 a0); u32 sub_0205BD9C(u32 arg0, u32 arg1); u32 sub_0205BFB0(u32 p0, u32 p1); -void sub_0205C19C(struct WriteMonsterInfoToSave_struct *arg0, struct unkStruct_020B0A54 *arg1); +void sub_0205C19C(struct bitstream *stream, struct unkStruct_020B0A54 *arg1); #endif //PMDSKY_MAIN_0205BD14_H diff --git a/include/main_0205C440.h b/include/main_0205C440.h index fe126cf0..243b0801 100644 --- a/include/main_0205C440.h +++ b/include/main_0205C440.h @@ -1,9 +1,9 @@ #ifndef PMDSKY_MAIN_0205C440_H #define PMDSKY_MAIN_0205C440_H -#include "main_02058FA4.h" #include "main_0205B690.h" +#include "save.h" -void sub_0205C440(struct WriteMonsterInfoToSave_struct *write_info, struct unkStruct_020B0A54 *p1); +void sub_0205C440(struct bitstream *stream, struct unkStruct_020B0A54 *p1); #endif //PMDSKY_MAIN_0205C440_H diff --git a/src/main_0204DA2C.c b/src/main_0204DA2C.c index 91d3fa3a..7f8a8c4b 100644 --- a/src/main_0204DA2C.c +++ b/src/main_0204DA2C.c @@ -1,15 +1,16 @@ #include "main_0204DA2C.h" #include "main_0200330C.h" +#include "save.h" extern u8 ARM9_UNKNOWN_TABLE__NA_209E164[]; -extern void InitBitstreamForRead(u8*, u8*, s32); -extern void CopyBitsTo(u8* write_info, void* buf_write, s32 nbits); -extern void BitstreamDebug(u8*); +extern void InitBitstreamForRead(struct bitstream *stream, void* dst, s32 len); +extern void CopyBitsTo(struct bitstream *stream, void* buf_write, s32 nbits); +extern void BitstreamDebug(struct bitstream *stream); s32 sub_0204DA2C(u8* arg0, void* arg1, u8 arg2) { - u8 tmp3[16]; + struct bitstream stream; u8 tmp2[54]; u8 tmp1[34]; @@ -28,13 +29,13 @@ s32 sub_0204DA2C(u8* arg0, void* arg1, u8 arg2) s32 v1 = arg2 * 5; s32 v2 = (v1 & 7) + 7; - InitBitstreamForRead(tmp3, tmp1, (v1 >> 3) + (v2 >> 3)); + InitBitstreamForRead(&stream, tmp1, (v1 >> 3) + (v2 >> 3)); for (int i = 0; i < arg2; i++) { - CopyBitsTo(tmp3, &tmp2[i], 5); + CopyBitsTo(&stream, &tmp2[i], 5); } - BitstreamDebug(tmp3); + BitstreamDebug(&stream); MemcpySimple(arg1, tmp1, (v1 >> 3) + (v2 >> 3)); return 1; } diff --git a/src/main_02059060.c b/src/main_02059060.c index 1aa4e121..213b8166 100644 --- a/src/main_02059060.c +++ b/src/main_02059060.c @@ -1,5 +1,6 @@ #include "main_02058FA4.h" #include "common.h" +#include "save.h" #include "main_0202593C.h" #include "main_02058FA4.h" @@ -7,10 +8,10 @@ extern struct team_member_table *TEAM_MEMBER_TABLE_PTR; extern s32 GetLanguageType(void); extern void StrncpySimpleNoPadSafe(u8* dest, const u8* src, u32 n); -extern void InitBitstreamForRead(struct WriteMonsterInfoToSave_struct *ptr, void *start_addr, u32 total_len); -extern void WriteMonsterToSave(struct WriteMonsterInfoToSave_struct *write_info, struct ground_monster *monster); +extern void InitBitstreamForRead(struct bitstream *ptr, void *start_addr, u32 total_len); +extern void WriteMonsterToSave(struct bitstream *stream, struct ground_monster *monster); extern void CopyBitsTo(void *ctx, void *src, s32 nbits); -extern void BitstreamDebug(struct WriteMonsterInfoToSave_struct *ptr); +extern void BitstreamDebug(struct bitstream *ptr); void GetExplorerMazeTeamName(u8 *dest) { @@ -53,26 +54,26 @@ struct ground_monster* GetExplorerMazeMonster(s16 entry_number) s32 WriteMonsterInfoToSave(void* start_addr, u32 total_len) { - struct WriteMonsterInfoToSave_struct local_struct; + struct bitstream stream; - InitBitstreamForRead(&local_struct, start_addr, total_len); + InitBitstreamForRead(&stream, start_addr, total_len); for (s32 i = 0; i < MAX_GROUND_TEAM_MEMBERS; i++) { - WriteMonsterToSave(&local_struct, &TEAM_MEMBER_TABLE_PTR->members[i]); + WriteMonsterToSave(&stream, &TEAM_MEMBER_TABLE_PTR->members[i]); } - CopyBitsTo(&local_struct, &TEAM_MEMBER_TABLE_PTR->field_0x9878, 64); - CopyBitsTo(&local_struct, &TEAM_MEMBER_TABLE_PTR->explorer_maze_team_native_language, 4); - CopyBitsTo(&local_struct, &TEAM_MEMBER_TABLE_PTR->field_0x9881, 4); - CopyBitsTo(&local_struct, &TEAM_MEMBER_TABLE_PTR->explorer_maze_team_name, 80); + CopyBitsTo(&stream, &TEAM_MEMBER_TABLE_PTR->field_0x9878, 64); + CopyBitsTo(&stream, &TEAM_MEMBER_TABLE_PTR->explorer_maze_team_native_language, 4); + CopyBitsTo(&stream, &TEAM_MEMBER_TABLE_PTR->field_0x9881, 4); + CopyBitsTo(&stream, &TEAM_MEMBER_TABLE_PTR->explorer_maze_team_name, 80); for (s32 i = 0; i < 4; i++) { - WriteMonsterToSave(&local_struct, &TEAM_MEMBER_TABLE_PTR->explorer_maze_monsters[i]); + WriteMonsterToSave(&stream, &TEAM_MEMBER_TABLE_PTR->explorer_maze_monsters[i]); } - BitstreamDebug(&local_struct); + BitstreamDebug(&stream); - return local_struct.result; + return stream.bit_idx; } diff --git a/src/main_02059334.c b/src/main_02059334.c index e3ebba5f..be1d15fd 100644 --- a/src/main_02059334.c +++ b/src/main_02059334.c @@ -1,52 +1,53 @@ #include "main_02059334.h" +#include "save.h" extern void CopyBitsTo(void *ctx, void *src, s32 nbits); -extern void Copy16BitsTo(void *write_info, void *buf_write); -extern void CopyMovesetTo(struct WriteMonsterInfoToSave_struct *write_info, void *buffer_write); +extern void Copy16BitsTo(void *stream, void *buf_write); +extern void CopyMovesetTo(struct bitstream *stream, 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); +extern void CopyBitsFrom(void *stream, void *buf_read, s32 nbits); +extern void Copy16BitsFrom(void *stream, void *buf_read); +extern void CopyMovesetFrom(struct bitstream *stream, void *dst); -void WriteMonsterToSave(struct WriteMonsterInfoToSave_struct *write_info, struct ground_monster *monster) +void WriteMonsterToSave(struct bitstream *stream, struct ground_monster *monster) { - CopyBitsTo(write_info, &monster->is_valid, 1); - CopyBitsTo(write_info, &monster->level, 7); - CopyBitsTo(write_info, &monster->id, 11); - 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); - CopyBitsTo(write_info, &monster->max_hp, 10); - CopyBitsTo(write_info, &monster->offensive_stats[0], 8); - CopyBitsTo(write_info, &monster->offensive_stats[1], 8); - CopyBitsTo(write_info, &monster->defensive_stats[0], 8); - CopyBitsTo(write_info, &monster->defensive_stats[1], 8); - CopyBitsTo(write_info, &monster->exp, 24); - CopyBitsTo(write_info, &monster->iq_skill_flags, 69); - CopyBitsTo(write_info, &monster->tactic, 4); - CopyMovesetTo(write_info, &monster->moves); - CopyBitsTo(write_info, &monster->name, 80); + CopyBitsTo(stream, &monster->is_valid, 1); + CopyBitsTo(stream, &monster->level, 7); + CopyBitsTo(stream, &monster->id, 11); + Copy16BitsTo(stream, &monster->joined_at); + CopyBitsTo(stream, &monster->level_at_first_evo, 7); + CopyBitsTo(stream, &monster->level_at_second_evo, 7); + CopyBitsTo(stream, &monster->iq, 10); + CopyBitsTo(stream, &monster->max_hp, 10); + CopyBitsTo(stream, &monster->offensive_stats[0], 8); + CopyBitsTo(stream, &monster->offensive_stats[1], 8); + CopyBitsTo(stream, &monster->defensive_stats[0], 8); + CopyBitsTo(stream, &monster->defensive_stats[1], 8); + CopyBitsTo(stream, &monster->exp, 24); + CopyBitsTo(stream, &monster->iq_skill_flags, 69); + CopyBitsTo(stream, &monster->tactic, 4); + CopyMovesetTo(stream, &monster->moves); + CopyBitsTo(stream, &monster->name, 80); } -void ReadMonsterFromSave(struct WriteMonsterInfoToSave_struct *read_info, struct ground_monster *monster) +void ReadMonsterFromSave(struct bitstream *stream, 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); + CopyBitsFrom(stream, &monster->is_valid, 1); + CopyBitsFrom(stream, &monster->level, 7); + CopyBitsFrom(stream, &monster->id, 11); + Copy16BitsFrom(stream, &monster->joined_at); + CopyBitsFrom(stream, &monster->level_at_first_evo, 7); + CopyBitsFrom(stream, &monster->level_at_second_evo, 7); + CopyBitsFrom(stream, &monster->iq, 10); + CopyBitsFrom(stream, &monster->max_hp, 10); + CopyBitsFrom(stream, &monster->offensive_stats[0], 8); + CopyBitsFrom(stream, &monster->offensive_stats[1], 8); + CopyBitsFrom(stream, &monster->defensive_stats[0], 8); + CopyBitsFrom(stream, &monster->defensive_stats[1], 8); + CopyBitsFrom(stream, &monster->exp, 24); + CopyBitsFrom(stream, &monster->iq_skill_flags, 69); + CopyBitsFrom(stream, &monster->tactic, 4); + CopyMovesetFrom(stream, &monster->moves); + CopyBitsFrom(stream, &monster->name, 80); } diff --git a/src/main_0205BD14.c b/src/main_0205BD14.c index 14ea5e2f..34e5da8f 100644 --- a/src/main_0205BD14.c +++ b/src/main_0205BD14.c @@ -1,7 +1,7 @@ #include "main_0205BD14.h" #include "common.h" +#include "save.h" #include "main_0200224C.h" -#include "main_02058FA4.h" #include "main_02059A74.h" #include "main_0205B690.h" #include "main_0205C440.h" @@ -9,17 +9,17 @@ extern union unkStruct_020B0A54_union _020B0A54; extern u32 _022B57BC; -extern void InitBitstreamForWrite(void *v0, u32 v1, u32 v2); -extern void CopyBitsFrom(void *read_info, void *buf_read, s32 nbits); +extern void InitBitstreamForWrite(struct bitstream *stream, u32 v1, u32 v2); +extern void CopyBitsFrom(struct bitstream *stream, void *buf_read, s32 nbits); 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 BitstreamDebug(struct WriteMonsterInfoToSave_struct *write_info); +extern void Copy16BitsFrom(struct bitstream *stream, void *buf_read); +extern void CopyMovesetFrom(struct bitstream *stream, void *dst); +extern void BitstreamDebug(struct bitstream *stream); extern void sub_020634F4(void); -extern void InitBitstreamForRead(struct WriteMonsterInfoToSave_struct *write_info, u32 p1, u32 p2); -extern void CopyBitsTo(void *write_info, void* buf_write, s32 nbits); -extern void Copy16BitsTo(void *write_info, void *buf_write); -extern void CopyMovesetTo(struct WriteMonsterInfoToSave_struct *write_info, void *buffer_write); +extern void InitBitstreamForRead(struct bitstream *stream, u32 p1, u32 p2); +extern void CopyBitsTo(struct bitstream *stream, void* buf_write, s32 nbits); +extern void Copy16BitsTo(struct bitstream *stream, void *buf_write); +extern void CopyMovesetTo(struct bitstream *stream, void *buffer_write); void sub_0205BD14(u32 *dest, s32 index) { @@ -53,120 +53,120 @@ u32 sub_0205BD90(u32 a0) u32 sub_0205BD9C(u32 arg0, u32 arg1) { - struct WriteMonsterInfoToSave_struct temp; + struct bitstream stream; - InitBitstreamForWrite(&temp, arg0, arg1); - CopyBitsFrom(&temp, &_022B57BC, 32); + InitBitstreamForWrite(&stream, arg0, arg1); + CopyBitsFrom(&stream, &_022B57BC, 32); for (s32 i = 0; i < 32; i++) { - sub_0205C19C(&temp, &_020B0A54.struct0[i]); + sub_0205C19C(&stream, &_020B0A54.struct0[i]); } struct ground_monster *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); + CopyBitsFrom(&stream, &monster->is_valid, 4); + CopyBitsFrom(&stream, &monster->level, 7); + Copy16BitsFrom(&stream, &monster->joined_at); + CopyBitsFrom(&stream, &monster->id, 11); + sub_02059AE8(&stream, &monster->level_at_first_evo); + sub_02059AE8(&stream, &monster->level_at_second_evo); + CopyBitsFrom(&stream, &monster->iq, 10); + CopyBitsFrom(&stream, &monster->max_hp, 10); + CopyBitsFrom(&stream, &monster->offensive_stats[0], 8); + CopyBitsFrom(&stream, &monster->offensive_stats[1], 8); + CopyBitsFrom(&stream, &monster->defensive_stats[0], 8); + CopyBitsFrom(&stream, &monster->defensive_stats[1], 8); + CopyBitsFrom(&stream, &monster->exp, 24); + CopyBitsFrom(&stream, &monster->iq_skill_flags, 69); + CopyBitsFrom(&stream, &monster->tactic, 4); + CopyMovesetFrom(&stream, monster->moves); + CopyBitsFrom(&stream, 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(&stream, &inner->unk46, 11); + CopyBitsFrom(&stream, &inner->unk48, 11); - CopyBitsFrom(&temp, (void*) _020B0A54.struct1.unk4, 32); + CopyBitsFrom(&stream, (void*) _020B0A54.struct1.unk4, 32); for (s32 i = 0; i < 32; i++) { - CopyBitsFrom(&temp, _020B0A54.fp[1] + 4 + (i * 8), 64); + CopyBitsFrom(&stream, _020B0A54.fp[1] + 4 + (i * 8), 64); } - BitstreamDebug(&temp); + BitstreamDebug(&stream); Rand16Bit(); sub_020634F4(); - return temp.result; + return stream.bit_idx; } u32 sub_0205BFB0(u32 p0, u32 p1) { - struct WriteMonsterInfoToSave_struct stack_var; + struct bitstream stream; - InitBitstreamForRead(&stack_var, p0, p1); - CopyBitsTo(&stack_var, &_022B57BC, 32); + InitBitstreamForRead(&stream, p0, p1); + CopyBitsTo(&stream, &_022B57BC, 32); for (s32 i = 0; i < 32; i++) { - sub_0205C440(&stack_var, &_020B0A54.struct0[i]); + sub_0205C440(&stream, &_020B0A54.struct0[i]); } struct ground_monster *monster = _020B0A54.struct1.unk8.monster; - CopyBitsTo(&stack_var, &monster->is_valid, 4); - CopyBitsTo(&stack_var, &monster->level, 7); - Copy16BitsTo(&stack_var, &monster->joined_at); - CopyBitsTo(&stack_var, &monster->id, 11); - sub_02059AF8(&stack_var, &monster->level_at_first_evo); - sub_02059AF8(&stack_var, &monster->level_at_second_evo); - CopyBitsTo(&stack_var, &monster->iq, 10); - CopyBitsTo(&stack_var, &monster->max_hp, 10); - CopyBitsTo(&stack_var, &monster->offensive_stats[0], 8); - CopyBitsTo(&stack_var, &monster->offensive_stats[1], 8); - CopyBitsTo(&stack_var, &monster->defensive_stats[0], 8); - CopyBitsTo(&stack_var, &monster->defensive_stats[1], 8); - CopyBitsTo(&stack_var, &monster->exp, 24); - CopyBitsTo(&stack_var, &monster->iq_skill_flags, 69); - CopyBitsTo(&stack_var, &monster->tactic, 4); - CopyMovesetTo(&stack_var, monster->moves); - CopyBitsTo(&stack_var, monster->name, 80); + CopyBitsTo(&stream, &monster->is_valid, 4); + CopyBitsTo(&stream, &monster->level, 7); + Copy16BitsTo(&stream, &monster->joined_at); + CopyBitsTo(&stream, &monster->id, 11); + sub_02059AF8(&stream, &monster->level_at_first_evo); + sub_02059AF8(&stream, &monster->level_at_second_evo); + CopyBitsTo(&stream, &monster->iq, 10); + CopyBitsTo(&stream, &monster->max_hp, 10); + CopyBitsTo(&stream, &monster->offensive_stats[0], 8); + CopyBitsTo(&stream, &monster->offensive_stats[1], 8); + CopyBitsTo(&stream, &monster->defensive_stats[0], 8); + CopyBitsTo(&stream, &monster->defensive_stats[1], 8); + CopyBitsTo(&stream, &monster->exp, 24); + CopyBitsTo(&stream, &monster->iq_skill_flags, 69); + CopyBitsTo(&stream, &monster->tactic, 4); + CopyMovesetTo(&stream, monster->moves); + CopyBitsTo(&stream, monster->name, 80); struct unkStruct_020B0A54_unk8_inner *inner = _020B0A54.struct1.unk8.unk8; - CopyBitsTo(&stack_var, &inner->unk46, 11); - CopyBitsTo(&stack_var, &inner->unk48, 11); + CopyBitsTo(&stream, &inner->unk46, 11); + CopyBitsTo(&stream, &inner->unk48, 11); - CopyBitsTo(&stack_var, (void*) _020B0A54.struct1.unk4, 32); + CopyBitsTo(&stream, (void*) _020B0A54.struct1.unk4, 32); for (s32 i = 0; i < 32; i++) { - CopyBitsTo(&stack_var, _020B0A54.fp[1] + 4 + (i * 8), 64); + CopyBitsTo(&stream, _020B0A54.fp[1] + 4 + (i * 8), 64); } - BitstreamDebug(&stack_var); + BitstreamDebug(&stream); - return stack_var.result; + return stream.bit_idx; } -void sub_0205C19C(struct WriteMonsterInfoToSave_struct *write_info, struct unkStruct_020B0A54 *arg1) +void sub_0205C19C(struct bitstream *stream, struct unkStruct_020B0A54 *arg1) { - CopyBitsFrom(write_info, &arg1->unk0, 4); - Copy16BitsFrom(write_info, &arg1->unk4); - CopyBitsFrom(write_info, &arg1->unk8.monster, 24); - CopyBitsFrom(write_info, &arg1->unkC, 64); - CopyBitsFrom(write_info, &arg1->unk14, 0x40); - CopyBitsFrom(write_info, &arg1->unk1C, 4); - CopyBitsFrom(write_info, &arg1->unk1D, 0x50); - CopyBitsFrom(write_info, &arg1->unk32, 0x120); - CopyBitsFrom(write_info, &arg1->unk56, 0x240); - CopyBitsFrom(write_info, &arg1->unkA0, 0xb); - CopyBitsFrom(write_info, &arg1->unkA2, 0xb); - CopyBitsFrom(write_info, &arg1->unkA4, 0x40); - CopyBitsFrom(write_info, &arg1->unkAC, 8); + CopyBitsFrom(stream, &arg1->unk0, 4); + Copy16BitsFrom(stream, &arg1->unk4); + CopyBitsFrom(stream, &arg1->unk8.monster, 24); + CopyBitsFrom(stream, &arg1->unkC, 64); + CopyBitsFrom(stream, &arg1->unk14, 0x40); + CopyBitsFrom(stream, &arg1->unk1C, 4); + CopyBitsFrom(stream, &arg1->unk1D, 0x50); + CopyBitsFrom(stream, &arg1->unk32, 0x120); + CopyBitsFrom(stream, &arg1->unk56, 0x240); + CopyBitsFrom(stream, &arg1->unkA0, 0xb); + CopyBitsFrom(stream, &arg1->unkA2, 0xb); + CopyBitsFrom(stream, &arg1->unkA4, 0x40); + CopyBitsFrom(stream, &arg1->unkAC, 8); bool8 temp; - CopyBitsFrom(write_info, &temp, 1); + CopyBitsFrom(stream, &temp, 1); arg1->unkAD = temp != FALSE; - CopyBitsFrom(write_info, &arg1->unkAE, 2); + CopyBitsFrom(stream, &arg1->unkAE, 2); } diff --git a/src/main_0205C440.c b/src/main_0205C440.c index 27d736ff..a622af31 100644 --- a/src/main_0205C440.c +++ b/src/main_0205C440.c @@ -1,26 +1,27 @@ #include "main_0205C440.h" +#include "save.h" extern u8 _020A3673; extern u8 _020A3670; -extern void CopyBitsTo(void *write_info, void* buf_write, s32 nbits); -extern void Copy16BitsTo(void *write_info, void *buf_write); +extern void CopyBitsTo(struct bitstream *stream, void* buf_write, s32 nbits); +extern void Copy16BitsTo(struct bitstream *stream, void *buf_write); -void sub_0205C440(struct WriteMonsterInfoToSave_struct *write_info, struct unkStruct_020B0A54 *p1) +void sub_0205C440(struct bitstream *stream, struct unkStruct_020B0A54 *p1) { - CopyBitsTo(write_info, &p1->unk0, 4); - Copy16BitsTo(write_info, &p1->unk4); - CopyBitsTo(write_info, &p1->unk8.monster, 24); - CopyBitsTo(write_info, &p1->unkC, 64); - CopyBitsTo(write_info, &p1->unk14, 0x40); - CopyBitsTo(write_info, &p1->unk1C, 4); - CopyBitsTo(write_info, &p1->unk1D, 0x50); - CopyBitsTo(write_info, &p1->unk32, 0x120); - CopyBitsTo(write_info, &p1->unk56, 0x240); - CopyBitsTo(write_info, &p1->unkA0, 0xb); - CopyBitsTo(write_info, &p1->unkA2, 0xb); - CopyBitsTo(write_info, &p1->unkA4, 0x40); - CopyBitsTo(write_info, &p1->unkAC, 8); - CopyBitsTo(write_info, p1->unkAD == TRUE ? &_020A3673 : &_020A3670, 1); - CopyBitsTo(write_info, &p1->unkAE, 2); + CopyBitsTo(stream, &p1->unk0, 4); + Copy16BitsTo(stream, &p1->unk4); + CopyBitsTo(stream, &p1->unk8.monster, 24); + CopyBitsTo(stream, &p1->unkC, 64); + CopyBitsTo(stream, &p1->unk14, 0x40); + CopyBitsTo(stream, &p1->unk1C, 4); + CopyBitsTo(stream, &p1->unk1D, 0x50); + CopyBitsTo(stream, &p1->unk32, 0x120); + CopyBitsTo(stream, &p1->unk56, 0x240); + CopyBitsTo(stream, &p1->unkA0, 0xb); + CopyBitsTo(stream, &p1->unkA2, 0xb); + CopyBitsTo(stream, &p1->unkA4, 0x40); + CopyBitsTo(stream, &p1->unkAC, 8); + CopyBitsTo(stream, p1->unkAD == TRUE ? &_020A3673 : &_020A3670, 1); + CopyBitsTo(stream, &p1->unkAE, 2); } From 6e91cff71e8caa2dab6675220acab56e979700e3 Mon Sep 17 00:00:00 2001 From: Chesyon <55322011+Chesyon@users.noreply.github.com> Date: Wed, 6 May 2026 12:09:44 -0400 Subject: [PATCH 3/4] Decomp CopyMovesetFromStream Decomp CopyMovesetTo --- .../{main_02014ABC.inc => main_02014B1C.inc} | 2 -- asm/include/overlay_01.inc | 4 +-- asm/{main_02014ABC.s => main_02014B1C.s} | 36 +------------------ asm/overlay_01.s | 4 +-- include/main_02014A4C.h | 2 ++ main.lsf | 2 +- src/main_02014A4C.c | 30 +++++++++++----- src/main_02059334.c | 8 ++--- src/main_0205BD14.c | 8 ++--- 9 files changed, 38 insertions(+), 58 deletions(-) rename asm/include/{main_02014ABC.inc => main_02014B1C.inc} (56%) rename asm/{main_02014ABC.s => main_02014B1C.s} (71%) diff --git a/asm/include/main_02014ABC.inc b/asm/include/main_02014B1C.inc similarity index 56% rename from asm/include/main_02014ABC.inc rename to asm/include/main_02014B1C.inc index d0118cfa..9ce2952b 100644 --- a/asm/include/main_02014ABC.inc +++ b/asm/include/main_02014B1C.inc @@ -1,6 +1,4 @@ #pragma once .public CopyBitsFrom .public CopyBitsTo -.public CopyMoveFromStream -.public CopyMoveToStream .public memset diff --git a/asm/include/overlay_01.inc b/asm/include/overlay_01.inc index b03149e4..cb43caad 100644 --- a/asm/include/overlay_01.inc +++ b/asm/include/overlay_01.inc @@ -23,8 +23,8 @@ .public Copy16BitsTo .public CopyBitsFrom .public CopyBitsTo -.public CopyMovesetFrom -.public CopyMovesetTo +.public CopyMovesetFromStream +.public CopyMovesetToStream .public CreateAdvancedMenu .public CreateAdvancedTextBox .public CreateControlsChart diff --git a/asm/main_02014ABC.s b/asm/main_02014B1C.s similarity index 71% rename from asm/main_02014ABC.s rename to asm/main_02014B1C.s index 6a2d6de7..bee03cd1 100644 --- a/asm/main_02014ABC.s +++ b/asm/main_02014B1C.s @@ -1,42 +1,8 @@ .include "asm/macros.inc" - .include "main_02014ABC.inc" + .include "main_02014B1C.inc" .text - arm_func_start CopyMovesetTo -CopyMovesetTo: ; 0x02014ABC - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - mov r5, #0 - mov r4, #6 -_02014AD0: - mla r1, r5, r4, r6 - mov r0, r7 - bl CopyMoveToStream - add r5, r5, #1 - cmp r5, #4 - blt _02014AD0 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end CopyMovesetTo - - arm_func_start CopyMovesetFrom -CopyMovesetFrom: ; 0x02014AEC - stmdb sp!, {r3, r4, r5, r6, r7, lr} - mov r7, r0 - mov r6, r1 - mov r5, #0 - mov r4, #6 -_02014B00: - mla r1, r5, r4, r6 - mov r0, r7 - bl CopyMoveFromStream - add r5, r5, #1 - cmp r5, #4 - blt _02014B00 - ldmia sp!, {r3, r4, r5, r6, r7, pc} - arm_func_end CopyMovesetFrom - arm_func_start sub_02014B1C sub_02014B1C: ; 0x02014B1C stmdb sp!, {r3, r4, r5, lr} diff --git a/asm/overlay_01.s b/asm/overlay_01.s index 18b783d1..85cf54de 100644 --- a/asm/overlay_01.s +++ b/asm/overlay_01.s @@ -6245,7 +6245,7 @@ ov01_0232E334: ; 0x0232E334 bl sub_0200DFE4 mov r0, r7 add r1, r6, #0x2a - bl CopyMovesetTo + bl CopyMovesetToStream add r0, sp, #0xc mov r1, #0x18 bl MemZero @@ -6411,7 +6411,7 @@ ov01_0232E58C: ; 0x0232E58C mov r0, r6 add r1, r5, #0x2a strh r2, [r5, #0x28] - bl CopyMovesetFrom + bl CopyMovesetFromStream add r1, sp, #0 mov r0, r6 mov r2, #0xa0 diff --git a/include/main_02014A4C.h b/include/main_02014A4C.h index 62c05abf..df3779b3 100644 --- a/include/main_02014A4C.h +++ b/include/main_02014A4C.h @@ -5,5 +5,7 @@ void CopyMoveToStream(struct bitstream * stream, struct ground_move * move ); void CopyMoveFromStream(struct bitstream * stream, struct ground_move * move ); +void CopyMovesetToStream(struct bitstream * stream, struct ground_move * src); +void CopyMovesetFromStream(struct bitstream * stream, struct ground_move * dst); #endif //PMDSKY_MAIN_02014A4C_H diff --git a/main.lsf b/main.lsf index 923f3da6..539db911 100644 --- a/main.lsf +++ b/main.lsf @@ -67,7 +67,7 @@ Static main Object src/moves_3.o Object asm/main_02013C30.o Object src/main_02014A4C.o - Object asm/main_02014ABC.o + Object asm/main_02014B1C.o Object src/main_02014CEC.o Object asm/main_02014D18.o Object src/main_020251AC.o diff --git a/src/main_02014A4C.c b/src/main_02014A4C.c index 8e74425e..b37a1fe3 100644 --- a/src/main_02014A4C.c +++ b/src/main_02014A4C.c @@ -3,16 +3,30 @@ extern void CopyBitsTo(struct bitstream *stream, void *src, u32 nbits); extern void CopyBitsFrom(struct bitstream *stream, void *dst, u32 nbits); -void CopyMoveToStream(struct bitstream * stream, struct ground_move * move ) +void CopyMoveToStream(struct bitstream * stream, struct ground_move * src ) { - CopyBitsTo(stream, &move->flags0, 4); - CopyBitsTo(stream, &move->id, 10); - CopyBitsTo(stream, &move->ginseng, 7); + CopyBitsTo(stream, &src->flags0, 4); + CopyBitsTo(stream, &src->id, 10); + CopyBitsTo(stream, &src->ginseng, 7); } -void CopyMoveFromStream(struct bitstream * stream, struct ground_move * move ) +void CopyMoveFromStream(struct bitstream * stream, struct ground_move * dst ) { - CopyBitsFrom(stream, &move->flags0, 4); - CopyBitsFrom(stream, &move->id, 10); - CopyBitsFrom(stream, &move->ginseng, 7); + CopyBitsFrom(stream, &dst->flags0, 4); + CopyBitsFrom(stream, &dst->id, 10); + CopyBitsFrom(stream, &dst->ginseng, 7); +} + +void CopyMovesetToStream(struct bitstream * stream, struct ground_move * src) +{ + for (s32 i = 0; i < 4; i++) { + CopyMoveToStream(stream, &src[i]); + } +} + +void CopyMovesetFromStream(struct bitstream * stream, struct ground_move * dst) +{ + for (s32 i = 0; i < 4; i++) { + CopyMoveFromStream(stream, &dst[i]); + } } diff --git a/src/main_02059334.c b/src/main_02059334.c index be1d15fd..3586fe12 100644 --- a/src/main_02059334.c +++ b/src/main_02059334.c @@ -3,11 +3,11 @@ extern void CopyBitsTo(void *ctx, void *src, s32 nbits); extern void Copy16BitsTo(void *stream, void *buf_write); -extern void CopyMovesetTo(struct bitstream *stream, void *buffer_write); +extern void CopyMovesetToStream(struct bitstream *stream, void *buffer_write); extern void* memset(void *s, s32 c, u32 n); extern void CopyBitsFrom(void *stream, void *buf_read, s32 nbits); extern void Copy16BitsFrom(void *stream, void *buf_read); -extern void CopyMovesetFrom(struct bitstream *stream, void *dst); +extern void CopyMovesetFromStream(struct bitstream *stream, void *dst); void WriteMonsterToSave(struct bitstream *stream, struct ground_monster *monster) { @@ -26,7 +26,7 @@ void WriteMonsterToSave(struct bitstream *stream, struct ground_monster *monster CopyBitsTo(stream, &monster->exp, 24); CopyBitsTo(stream, &monster->iq_skill_flags, 69); CopyBitsTo(stream, &monster->tactic, 4); - CopyMovesetTo(stream, &monster->moves); + CopyMovesetToStream(stream, &monster->moves); CopyBitsTo(stream, &monster->name, 80); } @@ -48,6 +48,6 @@ void ReadMonsterFromSave(struct bitstream *stream, struct ground_monster *monste CopyBitsFrom(stream, &monster->exp, 24); CopyBitsFrom(stream, &monster->iq_skill_flags, 69); CopyBitsFrom(stream, &monster->tactic, 4); - CopyMovesetFrom(stream, &monster->moves); + CopyMovesetFromStream(stream, &monster->moves); CopyBitsFrom(stream, &monster->name, 80); } diff --git a/src/main_0205BD14.c b/src/main_0205BD14.c index 34e5da8f..ffcb39ce 100644 --- a/src/main_0205BD14.c +++ b/src/main_0205BD14.c @@ -13,13 +13,13 @@ extern void InitBitstreamForWrite(struct bitstream *stream, u32 v1, u32 v2); extern void CopyBitsFrom(struct bitstream *stream, void *buf_read, s32 nbits); extern void* memset(void *s, s32 c, u32 n); extern void Copy16BitsFrom(struct bitstream *stream, void *buf_read); -extern void CopyMovesetFrom(struct bitstream *stream, void *dst); +extern void CopyMovesetFromStream(struct bitstream *stream, void *dst); extern void BitstreamDebug(struct bitstream *stream); extern void sub_020634F4(void); extern void InitBitstreamForRead(struct bitstream *stream, u32 p1, u32 p2); extern void CopyBitsTo(struct bitstream *stream, void* buf_write, s32 nbits); extern void Copy16BitsTo(struct bitstream *stream, void *buf_write); -extern void CopyMovesetTo(struct bitstream *stream, void *buffer_write); +extern void CopyMovesetToStream(struct bitstream *stream, void *buffer_write); void sub_0205BD14(u32 *dest, s32 index) { @@ -81,7 +81,7 @@ u32 sub_0205BD9C(u32 arg0, u32 arg1) CopyBitsFrom(&stream, &monster->exp, 24); CopyBitsFrom(&stream, &monster->iq_skill_flags, 69); CopyBitsFrom(&stream, &monster->tactic, 4); - CopyMovesetFrom(&stream, monster->moves); + CopyMovesetFromStream(&stream, monster->moves); CopyBitsFrom(&stream, monster->name, 80); struct unkStruct_020B0A54_unk8_inner *inner = _020B0A54.struct1.unk8.unk8; @@ -131,7 +131,7 @@ u32 sub_0205BFB0(u32 p0, u32 p1) CopyBitsTo(&stream, &monster->exp, 24); CopyBitsTo(&stream, &monster->iq_skill_flags, 69); CopyBitsTo(&stream, &monster->tactic, 4); - CopyMovesetTo(&stream, monster->moves); + CopyMovesetToStream(&stream, monster->moves); CopyBitsTo(&stream, monster->name, 80); struct unkStruct_020B0A54_unk8_inner *inner = _020B0A54.struct1.unk8.unk8; From 6e3da4378a56d6042e69a392ceda869a7b1998ec Mon Sep 17 00:00:00 2001 From: Chesyon <55322011+Chesyon@users.noreply.github.com> Date: Wed, 6 May 2026 12:48:33 -0400 Subject: [PATCH 4/4] Use CopyMovesetTo/FromStream in other funcs --- src/main_02059334.c | 7 +++---- src/main_0205BD14.c | 3 +-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main_02059334.c b/src/main_02059334.c index 3586fe12..79b2930e 100644 --- a/src/main_02059334.c +++ b/src/main_02059334.c @@ -1,13 +1,12 @@ #include "main_02059334.h" #include "save.h" +#include "main_02014A4C.h" extern void CopyBitsTo(void *ctx, void *src, s32 nbits); extern void Copy16BitsTo(void *stream, void *buf_write); -extern void CopyMovesetToStream(struct bitstream *stream, void *buffer_write); extern void* memset(void *s, s32 c, u32 n); extern void CopyBitsFrom(void *stream, void *buf_read, s32 nbits); extern void Copy16BitsFrom(void *stream, void *buf_read); -extern void CopyMovesetFromStream(struct bitstream *stream, void *dst); void WriteMonsterToSave(struct bitstream *stream, struct ground_monster *monster) { @@ -26,7 +25,7 @@ void WriteMonsterToSave(struct bitstream *stream, struct ground_monster *monster CopyBitsTo(stream, &monster->exp, 24); CopyBitsTo(stream, &monster->iq_skill_flags, 69); CopyBitsTo(stream, &monster->tactic, 4); - CopyMovesetToStream(stream, &monster->moves); + CopyMovesetToStream(stream, (struct ground_move*)&monster->moves); CopyBitsTo(stream, &monster->name, 80); } @@ -48,6 +47,6 @@ void ReadMonsterFromSave(struct bitstream *stream, struct ground_monster *monste CopyBitsFrom(stream, &monster->exp, 24); CopyBitsFrom(stream, &monster->iq_skill_flags, 69); CopyBitsFrom(stream, &monster->tactic, 4); - CopyMovesetFromStream(stream, &monster->moves); + CopyMovesetFromStream(stream, (struct ground_move*)&monster->moves); CopyBitsFrom(stream, &monster->name, 80); } diff --git a/src/main_0205BD14.c b/src/main_0205BD14.c index ffcb39ce..56b7a286 100644 --- a/src/main_0205BD14.c +++ b/src/main_0205BD14.c @@ -2,6 +2,7 @@ #include "common.h" #include "save.h" #include "main_0200224C.h" +#include "main_02014A4C.h" #include "main_02059A74.h" #include "main_0205B690.h" #include "main_0205C440.h" @@ -13,13 +14,11 @@ extern void InitBitstreamForWrite(struct bitstream *stream, u32 v1, u32 v2); extern void CopyBitsFrom(struct bitstream *stream, void *buf_read, s32 nbits); extern void* memset(void *s, s32 c, u32 n); extern void Copy16BitsFrom(struct bitstream *stream, void *buf_read); -extern void CopyMovesetFromStream(struct bitstream *stream, void *dst); extern void BitstreamDebug(struct bitstream *stream); extern void sub_020634F4(void); extern void InitBitstreamForRead(struct bitstream *stream, u32 p1, u32 p2); extern void CopyBitsTo(struct bitstream *stream, void* buf_write, s32 nbits); extern void Copy16BitsTo(struct bitstream *stream, void *buf_write); -extern void CopyMovesetToStream(struct bitstream *stream, void *buffer_write); void sub_0205BD14(u32 *dest, s32 index) {