From 2d92b9395d22137c05e50bc564a6e913a3bb3c6b Mon Sep 17 00:00:00 2001 From: Fabian Greffrath Date: Wed, 12 Aug 2020 09:46:51 +0200 Subject: [PATCH] add an "Always Run" switch to the Control menu Fixes #9 --- wl_agent.cpp | 4 ++-- wl_def.h | 1 + wl_main.cpp | 13 +++++++++++++ wl_menu.cpp | 20 ++++++++++++++++++-- wl_menu.h | 2 +- wl_play.cpp | 4 ++-- 6 files changed, 37 insertions(+), 7 deletions(-) diff --git a/wl_agent.cpp b/wl_agent.cpp index 759711e..de4285f 100644 --- a/wl_agent.cpp +++ b/wl_agent.cpp @@ -160,7 +160,7 @@ void ControlMovement (objtype *ob) angle = ob->angle + ANGLES/4; if(angle >= ANGLES) angle -= ANGLES; - if(buttonstate[bt_run]) + if(buttonstate[bt_run] ^ always_run) // [FG] toggle always run Thrust(angle, RUNMOVE * MOVESCALE * tics); else Thrust(angle, BASEMOVE * MOVESCALE * tics); @@ -171,7 +171,7 @@ void ControlMovement (objtype *ob) angle = ob->angle - ANGLES/4; if(angle < 0) angle += ANGLES; - if(buttonstate[bt_run]) + if(buttonstate[bt_run] ^ always_run) // [FG] toggle always run Thrust(angle, RUNMOVE * MOVESCALE * tics ); else Thrust(angle, BASEMOVE * MOVESCALE * tics); diff --git a/wl_def.h b/wl_def.h index 91f515c..e4d2451 100644 --- a/wl_def.h +++ b/wl_def.h @@ -940,6 +940,7 @@ extern longword param_samplerate; extern int param_audiobuffer; extern int param_mission; extern boolean param_ignorenumchunks; +extern boolean always_run; void NewGame (int difficulty,int episode); diff --git a/wl_main.cpp b/wl_main.cpp index 45e6e93..5b2108e 100644 --- a/wl_main.cpp +++ b/wl_main.cpp @@ -91,6 +91,7 @@ int param_audiobuffer = 2048 / (44100 / param_samplerate); int param_mission = 0; boolean param_ignorenumchunks = false; +boolean always_run = false; /* ============================================================================= @@ -165,6 +166,12 @@ void ReadConfig(void) mouseadjustment_v = mouseadjustment; } + // [FG] toggle always run + if (read(file,&always_run,sizeof(always_run))<0) + { + always_run = false; + } + close(file); #undef read2 @@ -196,6 +203,8 @@ void ReadConfig(void) if(viewsize<4) viewsize=4; else if(viewsize>21) viewsize=21; + always_run = !!always_run; + MainMenu[6].active=1; MainItems.curpos=0; } @@ -229,6 +238,7 @@ void ReadConfig(void) viewsize = 19; // start with a good size mouseadjustment_v=mouseadjustment=5; + always_run = false; } SD_SetMusicMode (sm); @@ -285,6 +295,9 @@ void WriteConfig(void) // [FG] vertical mouse sensitivity write2(file,&mouseadjustment_v,sizeof(mouseadjustment_v)); + // [FG] toggle always run + write2(file,&always_run,sizeof(always_run)); + close(file); } #undef write2 diff --git a/wl_menu.cpp b/wl_menu.cpp index 3ef31c2..c89edf3 100644 --- a/wl_menu.cpp +++ b/wl_menu.cpp @@ -66,13 +66,14 @@ CP_itemtype SndMenu[] = { {1, STR_ALSB, 0} }; -enum { CTL_MOUSEENABLE, CTL_MOUSESENS, CTL_JOYENABLE, CTL_CUSTOMIZE }; +enum { CTL_MOUSEENABLE, CTL_MOUSESENS, CTL_JOYENABLE, CTL_CUSTOMIZE, CTL_ALWAYSRUN }; // [FG] toggle always run CP_itemtype CtlMenu[] = { {0, STR_MOUSEEN, 0}, {0, STR_SENS, MouseSensitivity}, {0, STR_JOYEN, 0}, - {1, STR_CUSTOM, CustomControls} + {1, STR_CUSTOM, CustomControls}, + {1, "Always Run", 0} // [FG] toggle always run }; #ifndef SPEAR @@ -1648,6 +1649,14 @@ CP_Control (int) MenuFadeIn (); WaitKeyUp (); break; + + // [FG] toggle always run + case CTL_ALWAYSRUN: + always_run ^= 1; + DrawCtlScreen (); + CusItems.curpos = -1; + ShootSnd (); + break; } } while (which >= 0); @@ -1880,6 +1889,13 @@ DrawCtlScreen (void) else VWB_DrawPic (x, y, C_NOTSELECTEDPIC); + // [FG] toggle always run + y = CTL_Y + 55; + if (always_run) + VWB_DrawPic (x, y, C_SELECTEDPIC); + else + VWB_DrawPic (x, y, C_NOTSELECTEDPIC); + // // PICK FIRST AVAILABLE SPOT // diff --git a/wl_menu.h b/wl_menu.h index 1dab2ed..236958d 100644 --- a/wl_menu.h +++ b/wl_menu.h @@ -61,7 +61,7 @@ #define CTL_X 24 #define CTL_Y 86 #define CTL_W 284 -#define CTL_H 60 +#define CTL_H (60+13) // [FG] toggle always run #define LSM_X 85 #define LSM_Y 55 diff --git a/wl_play.cpp b/wl_play.cpp index 4109b06..69dcef0 100644 --- a/wl_play.cpp +++ b/wl_play.cpp @@ -309,7 +309,7 @@ void PollJoystickButtons (void) void PollKeyboardMove (void) { - int delta = buttonstate[bt_run] ? RUNMOVE * tics : BASEMOVE * tics; + int delta = (buttonstate[bt_run] ^ always_run) ? RUNMOVE * tics : BASEMOVE * tics; // [FG] toggle always run if (Keyboard[dirscan[di_north]]) controly -= delta; @@ -358,7 +358,7 @@ void PollJoystickMove (void) IN_GetJoyDelta (&joyx, &joyy); - int delta = buttonstate[bt_run] ? RUNMOVE * tics : BASEMOVE * tics; + int delta = (buttonstate[bt_run] ^ always_run) ? RUNMOVE * tics : BASEMOVE * tics; // [FG] toggle always run if (joyx > 64 || buttonstate[bt_turnright]) controlx += delta;