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_02014B1C.inc b/asm/include/main_02014B1C.inc new file mode 100644 index 00000000..9ce2952b --- /dev/null +++ b/asm/include/main_02014B1C.inc @@ -0,0 +1,4 @@ +#pragma once +.public CopyBitsFrom +.public CopyBitsTo +.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_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_02014B1C.s b/asm/main_02014B1C.s new file mode 100644 index 00000000..bee03cd1 --- /dev/null +++ b/asm/main_02014B1C.s @@ -0,0 +1,104 @@ + .include "asm/macros.inc" + .include "main_02014B1C.inc" + + .text + + 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/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 new file mode 100644 index 00000000..df3779b3 --- /dev/null +++ b/include/main_02014A4C.h @@ -0,0 +1,11 @@ +#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 ); +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/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/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 dcd4e58c..f777412b 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_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 new file mode 100644 index 00000000..b37a1fe3 --- /dev/null +++ b/src/main_02014A4C.c @@ -0,0 +1,32 @@ +#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 * src ) +{ + CopyBitsTo(stream, &src->flags0, 4); + CopyBitsTo(stream, &src->id, 10); + CopyBitsTo(stream, &src->ginseng, 7); +} + +void CopyMoveFromStream(struct bitstream * stream, struct ground_move * dst ) +{ + 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_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..79b2930e 100644 --- a/src/main_02059334.c +++ b/src/main_02059334.c @@ -1,52 +1,52 @@ #include "main_02059334.h" +#include "save.h" +#include "main_02014A4C.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* 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); -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); + CopyMovesetToStream(stream, (struct ground_move*)&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); + 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 14ea5e2f..56b7a286 100644 --- a/src/main_0205BD14.c +++ b/src/main_0205BD14.c @@ -1,7 +1,8 @@ #include "main_0205BD14.h" #include "common.h" +#include "save.h" #include "main_0200224C.h" -#include "main_02058FA4.h" +#include "main_02014A4C.h" #include "main_02059A74.h" #include "main_0205B690.h" #include "main_0205C440.h" @@ -9,17 +10,15 @@ 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 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); void sub_0205BD14(u32 *dest, s32 index) { @@ -53,120 +52,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); + CopyMovesetFromStream(&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); + CopyMovesetToStream(&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); }