diff -Naur wolf4sdl-2.0+20210408_f31f41a/id_in.c wolf4sdl-2.0+20210408_f31f41a.patched/id_in.c --- wolf4sdl-2.0+20210408_f31f41a/id_in.c 2023-01-17 21:39:16.000000000 -0500 +++ wolf4sdl-2.0+20210408_f31f41a.patched/id_in.c 2023-01-18 03:22:12.892051206 -0500 @@ -393,6 +393,12 @@ return Joystick != NULL; } +boolean autorun = false; +boolean autostrafe = false; +/* This doesn't work yet. +boolean mw_dn = false, mw_up = false; +*/ + static void processEvent(SDL_Event *event) { switch (event->type) @@ -417,6 +423,34 @@ LastScan = event->key.keysym.sym; SDL_Keymod mod = SDL_GetModState(); + + if ((mod & KMOD_LSHIFT) && (mod & KMOD_RSHIFT)) + { + autorun = !autorun; + + if (autorun) + Message ("Always Run: On"); + else + Message ("Always Run: Off"); + + IN_ClearKeysDown (); + IN_Ack (); + } + if (((mod & KMOD_LALT) && (mod & KMOD_RALT)) || + ((mod & KMOD_LALT) && (mod & KMOD_MODE)) || + ((mod & KMOD_LALT) && (mod & KMOD_RSHIFT))) + { + autostrafe = !autostrafe; + + if (autostrafe) + Message ("Always Strafe: On"); + else + Message ("Always Strafe: Off"); + + IN_ClearKeysDown (); + IN_Ack (); + } + if(Keyboard(sc_Alt)) { if(LastScan==SDLK_F4) @@ -426,6 +460,7 @@ if(LastScan == SDLK_KP_ENTER) LastScan = SDLK_RETURN; else if(LastScan == SDLK_RSHIFT) LastScan = SDLK_LSHIFT; else if(LastScan == SDLK_RALT) LastScan = SDLK_LALT; + else if(LastScan == SDLK_MODE) LastScan = SDLK_LALT; /* AltGr */ else if(LastScan == SDLK_RCTRL) LastScan = SDLK_LCTRL; else { @@ -470,6 +505,7 @@ if(key == SDLK_KP_ENTER) key = SDLK_RETURN; else if(key == SDLK_RSHIFT) key = SDLK_LSHIFT; else if(key == SDLK_RALT) key = SDLK_LALT; + else if(key == SDLK_MODE) key = SDLK_LALT; /* AltGr */ else if(key == SDLK_RCTRL) key = SDLK_LCTRL; else { @@ -497,6 +533,18 @@ GP2X_ButtonUp(event->jbutton.button); break; #endif + + /* + case SDL_MOUSEWHEEL: + { + mw_dn = mw_up = false; + if (event->wheel.y < 0) + mw_dn = true; + else if(event->wheel.y > 0) + mw_up = true; + break; + } + */ } } diff -Naur wolf4sdl-2.0+20210408_f31f41a/wl_def.h wolf4sdl-2.0+20210408_f31f41a.patched/wl_def.h --- wolf4sdl-2.0+20210408_f31f41a/wl_def.h 2023-01-17 21:39:16.000000000 -0500 +++ wolf4sdl-2.0+20210408_f31f41a.patched/wl_def.h 2023-01-18 03:22:12.893051223 -0500 @@ -949,6 +949,8 @@ extern int param_mission; extern boolean param_goodtimes; extern boolean param_ignorenumchunks; +extern boolean param_novert; +extern boolean param_crosshair; void NewGame (int difficulty, int episode); diff -Naur wolf4sdl-2.0+20210408_f31f41a/wl_draw.c wolf4sdl-2.0+20210408_f31f41a.patched/wl_draw.c --- wolf4sdl-2.0+20210408_f31f41a/wl_draw.c 2023-01-17 21:39:16.000000000 -0500 +++ wolf4sdl-2.0+20210408_f31f41a.patched/wl_draw.c 2023-01-18 03:22:12.893051223 -0500 @@ -956,6 +956,17 @@ SimpleScaleShape(viewwidth/2,SPR_DEMO,viewheight+1); } +void DrawCrosshair (void) +{ + if (gamestate.victoryflag || gamestate.weapon < wp_pistol) + return; + + const int c = (gamestate.health >= 50) ? 2 : (gamestate.health >= 25) ? 6 : 4; + const int h = (viewsize == 21 && ingame) ? screenHeight : screenHeight - scaleFactor * STATUSLINES; + + VL_Hlin (screenWidth / 2 - scaleFactor, h / 2, 2 * scaleFactor + 1, c); + VL_Vlin (screenWidth / 2, h / 2 - scaleFactor, 2 * scaleFactor + 1, c); +} //========================================================================== @@ -1666,6 +1677,8 @@ #endif DrawPlayerWeapon (); // draw player's hands + if (param_crosshair) + DrawCrosshair (); if(Keyboard(sc_Tab) && viewsize == 21 && gamestate.weapon != -1) ShowActStatus(); diff -Naur wolf4sdl-2.0+20210408_f31f41a/wl_main.c wolf4sdl-2.0+20210408_f31f41a.patched/wl_main.c --- wolf4sdl-2.0+20210408_f31f41a/wl_main.c 2023-01-17 21:39:16.000000000 -0500 +++ wolf4sdl-2.0+20210408_f31f41a.patched/wl_main.c 2023-01-18 03:40:19.681065262 -0500 @@ -102,6 +102,10 @@ int param_mission = 0; boolean param_goodtimes = false; boolean param_ignorenumchunks = false; +boolean param_novert = false; +boolean param_crosshair = false; +extern boolean autorun; +extern boolean autostrafe; /* ============================================================================= @@ -1644,6 +1648,28 @@ fullscreen = false; forcegrabmouse = true; } + else IFARG("--novert") + { + param_novert = true; + } + else IFARG("--crosshair") + { + param_crosshair = true; + } + else IFARG("--strafe") + { + autostrafe = true; + } + else IFARG("--run") + { + autorun = true; + } + else IFARG("--modern") + { + autostrafe = true; + param_crosshair = true; + param_novert = true; + } else IFARG("--res") { if(i + 2 >= argc) @@ -1824,6 +1850,11 @@ " --hard Sets the difficulty to hard for tedlevel\n" " --nowait Skips intro screens\n" " --windowed[-mouse] Starts the game in a window [and grabs mouse]\n" + " --novert Suppresses vertical mouse movement\n" + " --crosshair Shows a crosshair\n" + " --run Always run\n" + " --strafe Always strafe\n" + " --modern Same as --novert --crosshair --strafe\n" " --res Sets the screen resolution\n" " (must be multiple of 320x200 or 320x240)\n" " --resf Sets any screen resolution >= 320x200\n" diff -Naur wolf4sdl-2.0+20210408_f31f41a/wl_play.c wolf4sdl-2.0+20210408_f31f41a.patched/wl_play.c --- wolf4sdl-2.0+20210408_f31f41a/wl_play.c 2023-01-17 21:39:16.000000000 -0500 +++ wolf4sdl-2.0+20210408_f31f41a.patched/wl_play.c 2023-01-18 03:22:12.894051239 -0500 @@ -260,10 +260,19 @@ void PollKeyboardButtons (void) { int i; + extern boolean autorun; for (i = 0; i < NUMBUTTONS; i++) if (Keyboard(buttonscan[i])) buttonstate[i] = true; + + if (autorun) + { + if (Keyboard(buttonscan[bt_run])) + buttonstate[bt_run] = false; + else + buttonstate[bt_run] = true; + } } @@ -278,6 +287,9 @@ void PollMouseButtons (void) { int buttons = IN_MouseButtons (); + /* + extern boolean mw_dn, mw_up; + */ if (buttons & 1) buttonstate[buttonmouse[0]] = true; @@ -285,6 +297,14 @@ buttonstate[buttonmouse[1]] = true; if (buttons & 4) buttonstate[buttonmouse[2]] = true; + + /* This doesn't work, sadly. + if (mw_dn) + buttonstate[bt_prevweapon] = true; + if (mw_up) + buttonstate[bt_nextweapon] = true; + mw_dn = mw_up = false; + */ } @@ -320,15 +340,26 @@ void PollKeyboardMove (void) { int delta = buttonstate[bt_run] ? RUNMOVE * tics : BASEMOVE * tics; + extern boolean autostrafe; if (Keyboard(dirscan[di_north])) controly -= delta; if (Keyboard(dirscan[di_south])) controly += delta; if (Keyboard(dirscan[di_west])) - controlx -= delta; + { + if (autostrafe) + buttonstate[bt_strafeleft] = true; + else + controlx -= delta; + } if (Keyboard(dirscan[di_east])) - controlx += delta; + { + if (autostrafe) + buttonstate[bt_straferight] = true; + else + controlx += delta; + } } @@ -356,7 +387,8 @@ #endif controlx += mousexmove * 10 / (13 - mouseadjustment); - controly += mouseymove * 20 / (13 - mouseadjustment); + if (!param_novert) + controly += mouseymove * 20 / (13 - mouseadjustment); }