diff --git a/asm/include/main_02034974.inc b/asm/include/main_02034974.inc index 21cf761b..f6bc75ac 100644 --- a/asm/include/main_02034974.inc +++ b/asm/include/main_02034974.inc @@ -225,8 +225,8 @@ .public sub_0203C9A0 .public sub_02048078 .public sub_0204964C -.public sub_0204AB78 -.public sub_0204AB98 +.public GetOptions +.public SetOptions .public CopyFrameTypeOption .public SetFrameTypeOption .public sub_0204DA1C diff --git a/asm/include/main_0203C774.inc b/asm/include/main_0203C774.inc index 484fe219..57684b66 100644 --- a/asm/include/main_0203C774.inc +++ b/asm/include/main_0203C774.inc @@ -467,6 +467,7 @@ .public DebugPrintEventFlagSize .public SetSpecialEpisodeOpenOld .public CopyFrameTypeOption +.public InitOptions .public sub_0204CDB8 .public sub_0204E154 .public sub_0204E19C diff --git a/asm/include/main_02058F24.inc b/asm/include/main_02058F24.inc index d17af061..b71e72ec 100644 --- a/asm/include/main_02058F24.inc +++ b/asm/include/main_02058F24.inc @@ -480,7 +480,7 @@ .public sub_02048C3C .public sub_0204A198 .public sub_0204A1A4 -.public sub_0204AB18 +.public InitOptionsVeneer .public CopyFrameTypeOption .public SetGameMode .public sub_0204D018 diff --git a/asm/main_02034974.s b/asm/main_02034974.s index 4d5b37f0..1d452d58 100644 --- a/asm/main_02034974.s +++ b/asm/main_02034974.s @@ -995,7 +995,7 @@ sub_02035640: ; 0x02035640 ldr r0, _02035764 ; =_020AFDD0 ldr r0, [r0, #4] add r0, r0, #0xa4 - bl sub_0204AB78 + bl GetOptions ldr r1, _02035764 ; =_020AFDD0 mov r0, #0 ldr r3, [r1, #4] @@ -1401,7 +1401,7 @@ _02035BC0: strb r0, [r1, #0xac] ldr r0, [r2, #4] add r0, r0, #0xa4 - bl sub_0204AB98 + bl SetOptions _02035C4C: ldr r0, _02035CCC ; =_020AFDD0 ldr r2, [r0, #4] diff --git a/asm/main_0203C774.s b/asm/main_0203C774.s index d95f9510..2a7df93e 100644 --- a/asm/main_0203C774.s +++ b/asm/main_0203C774.s @@ -15124,7 +15124,7 @@ _02048B40: arm_func_start sub_02048B48 sub_02048B48: ; 0x02048B48 stmdb sp!, {r3, lr} - bl sub_0204AB24 + bl InitOptions bl InitScriptVariableValues bl sub_02052C74 bl sub_0200CABC @@ -17649,64 +17649,3 @@ _0204AB10: ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc} arm_func_end sub_0204A9C8 - arm_func_start sub_0204AB18 -sub_0204AB18: ; 0x0204AB18 - ldr ip, _0204AB20 ; =sub_0204AB24 - bx ip - .align 2, 0 -_0204AB20: .word sub_0204AB24 - arm_func_end sub_0204AB18 - - arm_func_start sub_0204AB24 -sub_0204AB24: ; 0x0204AB24 - stmdb sp!, {r3} - sub sp, sp, #4 - ldr r0, _0204AB74 ; =OPTIONS - mov r1, #2 - mov r2, #0 - strb r1, [r0] - strb r2, [r0, #2] - mov r1, #1 - strb r1, [r0, #1] - strb r1, [r0, #3] - strb r2, [r0, #4] - strb r1, [r0, #5] - strb r1, [r0, #6] - strb r2, [r0, #7] - strb r2, [r0, #8] - strb r2, [sp] - strb r2, [r0, #9] - add sp, sp, #4 - ldmia sp!, {r3} - bx lr - .align 2, 0 -_0204AB74: .word OPTIONS - arm_func_end sub_0204AB24 - - arm_func_start sub_0204AB78 -sub_0204AB78: ; 0x0204AB78 - ldr r3, _0204AB94 ; =OPTIONS - mov r2, #0xa -_0204AB80: - ldrb r1, [r3], #1 - subs r2, r2, #1 - strb r1, [r0], #1 - bne _0204AB80 - bx lr - .align 2, 0 -_0204AB94: .word OPTIONS - arm_func_end sub_0204AB78 - - arm_func_start sub_0204AB98 -sub_0204AB98: ; 0x0204AB98 - ldr r3, _0204ABB4 ; =OPTIONS - mov r2, #0xa -_0204ABA0: - ldrb r1, [r0], #1 - subs r2, r2, #1 - strb r1, [r3], #1 - bne _0204ABA0 - bx lr - .align 2, 0 -_0204ABB4: .word OPTIONS - arm_func_end sub_0204AB98 diff --git a/asm/main_02058F24.s b/asm/main_02058F24.s index ae4edaba..193b2db6 100644 --- a/asm/main_02058F24.s +++ b/asm/main_02058F24.s @@ -15832,7 +15832,7 @@ MainLoop: ; 0x02065D1C bl InitWanTable bl sub_0201F208 bl DirectoryFileMngr_ExtractAllDirectoryFiles - bl sub_0204AB18 + bl InitOptionsVeneer bl InitKaomadoStream bl sub_02025AD8 bl sub_02026E78 diff --git a/include/enums.h b/include/enums.h index 298fe7ea..1f856a7a 100644 --- a/include/enums.h +++ b/include/enums.h @@ -3501,4 +3501,14 @@ enum touch_screen_option { TOUCH_SCREEN_USE_ANYWHERE = 2 }; +enum speed_option { + SPEED_REGULAR = 0, + SPEED_FAST = 1 +}; + +enum far_off_pals_option { + FAR_OFF_PALS_SELF = 0, + FAR_OFF_PALS_LOOK = 1 +}; + #endif //PMDSKY_ENUMS_H diff --git a/include/options.h b/include/options.h index b1dde208..28210eca 100644 --- a/include/options.h +++ b/include/options.h @@ -9,14 +9,18 @@ struct options { u8 bottom_screen; u8 top_screen; bool8 grids; - bool8 speed; - bool8 far_off_pals; + u8 speed; + u8 far_off_pals; bool8 damage_turn; bool8 d_pad_attack; bool8 check_direction; u8 frame_type; }; +void InitOptionsVeneer(); +void InitOptions(); +void GetOptions(u8* dest_opts_ptr); +void SetOptions(u8* src_options_ptr); void SaveOptionsToCtx(u8* ctx); void LoadOptionsFromCtx(u8* ctx); bool8 IsTouchScreenNotOff(); diff --git a/src/options.c b/src/options.c index 90cb8509..cd6e3a9c 100644 --- a/src/options.c +++ b/src/options.c @@ -8,6 +8,51 @@ extern u8 _0209CE89; struct options OPTIONS = {}; +void InitOptionsVeneer() { + InitOptions(); +} + +void InitOptions() { + struct options *o = &OPTIONS; + volatile u8 unused; + + o->touch_screen = TOUCH_SCREEN_USE_ANYWHERE; + o->top_screen = TOP_SCREEN_CONTROLS; + o->bottom_screen = BOTTOM_SCREEN_CLEAR_MAP; + o->grids = 1; + o->speed = SPEED_REGULAR; + o->far_off_pals = FAR_OFF_PALS_LOOK; + o->damage_turn = TRUE; + o->d_pad_attack = FALSE; + o->check_direction = FALSE; + unused = 0; + o->frame_type = 0; +} + +void GetOptions(u8* dest_opts_ptr) { + u32 idx = 0xA; + u8* src_opts_ptr = (u8*)&OPTIONS; + + do { + *dest_opts_ptr = *src_opts_ptr; + src_opts_ptr += 1; + idx -= 1; + dest_opts_ptr += 1; + } while (idx != 0); +} + +void SetOptions(u8* src_options_ptr) { + u32 idx = 0xA; + u8* dest_opts_ptr = (u8*)&OPTIONS; + + do { + *dest_opts_ptr = *src_options_ptr; + src_options_ptr += 1; + dest_opts_ptr += 1; + idx -= 1; + } while (idx != 0); +} + void SaveOptionsToCtx(u8* ctx) { CopyBitsTo(ctx, &OPTIONS.touch_screen, 2); CopyBitsTo(ctx, &OPTIONS.top_screen, 3); @@ -21,14 +66,14 @@ void SaveOptionsToCtx(u8* ctx) { } CopyBitsTo(ctx, src, 1); - if (OPTIONS.speed) { + if (OPTIONS.speed != SPEED_REGULAR) { src = &_0209CE88; } else { src = &_0209CE89; } CopyBitsTo(ctx, src, 1); - if (OPTIONS.far_off_pals) { + if (OPTIONS.far_off_pals != FAR_OFF_PALS_SELF) { src = &_0209CE88; } else { src = &_0209CE89;