Commit graph

247 commits

Author SHA1 Message Date
Christoph Oelckers
82612a1330 - it compiles again (with lots of code commented out.) 2020-10-04 20:11:02 +02:00
Mitchell Richters
c86af08a19 - SW: Repair occasional locked player angle after player stops operating a sector object. 2020-10-02 19:47:32 +10:00
Mitchell Richters
bb4f46489f - Exhumed/SW: Adjust 9271444feb and 289b0a089c so that the games check the state of cl_syncinput prior to setting it. 2020-09-27 16:08:32 +10:00
Mitchell Richters
289b0a089c - SW: Do 19fd0331d4 in a better way.
* Will still need to review SOs and synchronised input. It would be good to be able to run them unsynchronised like the turret.
2020-09-27 16:00:06 +10:00
Rachael Alexanderson
c8a74a8f3f - sw: flykey: guard against non-godmode, bind to j by default 2020-09-25 13:50:29 +02:00
Rachael Alexanderson
410d392ba8 - enable fly cheat for shadow warrior. in other games it is currently ignored, but I think Redneck Rampage and Blood both need it at some point too 2020-09-25 13:50:29 +02:00
Mitchell Richters
59e4fae064 - Game input: Fix miscellaneous issues.
* Duke/RR: Fix `SB_CENTERVIEW` not clearing while `cl_syncinput 1`.
* Duke/RR: Remove superfluous call to `apply_seasick()`.
* RR: Change two calls from `playerSetAngle()` to `playerAddAngle()` Updated version of `playerSetAngle()` doesn't stop setting angle until target is reached, a bit too strict for this and compromised vehicle turning.
* `applylook()`: Remove dead flag. Was only used with Duke, no other game called the function when dead anyway. Since the input helpers are processed outside of `applylook()` now this is not needed.
* `applylook()`: Extend function with a bit of commentary.
2020-09-21 17:12:53 +10:00
Mitchell Richters
f806cdcec6 - Blood/Duke/RR/SW: Unify the player's angle/horizon helper functions. 2020-09-21 17:12:51 +10:00
Mitchell Richters
7bf1cacc7f - Blood/Duke/RR/SW: Unify the player's angle function.
* For Blood/SW, exposes `SB_LOOK_LEFT`/`SB_LOOK_RIGHT` to games, hooking up `q16look_ang` and `q16rotscrnang` within.
* For SW, use Duke & Blood's return to center function and remove `PF_TURN_180` bit.
* For RR, replace a few misused bits with some bools inside of `player_struct`.
* Since bulk of functionality is sourced from Duke (30Hz), apply proper scaling so SW speed matches (40Hz).
2020-09-21 17:12:26 +10:00
Mitchell Richters
0ab3b33a6c - Blood/Duke/RR/SW: Unify the player's horizon function.
* For Duke/SW, we continually apply `SB_CENTERVIEW` only if it was previously a toggled action, similar to Blood.
* For SW, we remove two SW-specific bits (`PF_LOCK_HORIZ` and `PF_LOOKING`) that are no longer needed.
* For Duke, we remove `return_to_center` and just use the `SB_CENTERVIEW` action bit as required.
* For `sethorizon()`, feature set and adjustment speeds are an averaged out accumulation across Duke/SW:
** GameTicRate is factored in for adjustment decisions to provide consistency for SW being the faster game.
** Adjustment amounts are half way between Duke/SW.
2020-09-20 20:01:36 +10:00
Mitchell Richters
f2b48fe79c - SW: Uplift DoPlayerHorizon() with changes to serve as basis for standardised backend player horizon function.
* Pre-requisite to make it possible to stop using Q16.16 for horizon input.
* Perform look up/down and aim up/down using true pitch without the need for a helper.
* Adapt SW's return to center function to work based on true pitch (Duke's is a bit too fast for my liking).
* Duke's aim up/down and look up/down is 6 & 12 respectively, SW's is 8 & 16 respectively. Let's go half-way at 7 & 14.
2020-09-20 16:21:35 +10:00
Mitchell Richters
1900cf1fcc - Move Duke's getincangle() function to the backend, create Q16.16 variant (getincangleq16()) and replace Shadow Warrior's discrete implementations shared versions.
* Need SW's input helpers available for Blood but therefore also need an angle delta function that does not seem to exist in Blood.
* Realise that gamecontrol.h/cpp might not be the most appropriate place, but it's a shared location and these will go into binaryangle.h when its utilisation can be more realised.
* Because SW's logic was reversed, in that param #1 was the new angle and param #2 was the current, all calls have been reversed.
* By happenstance, also fixes an issue with multiple 180° turns in quick succession.
2020-09-20 16:21:13 +10:00
Mitchell Richters
3df0d40312 - SW: Fix stupid issue with playerSetAngle() and tweak how angTarget/horizTarget is determined to have been met. 2020-09-10 20:26:19 +10:00
Mitchell Richters
be6e0d87d7 Revert "- SW: Attempt at making vehicle movement work nicely while uninterpolated."
This reverts commit 28a3ef131f.

I mostly added this to visualise an attempt at how I've attempted to make the vehicles work with unsynchronised input. I don't wish for this to be committed to the main branch as it's a net negative.
2020-09-10 19:56:13 +10:00
Christoph Oelckers
2ffb6a3580 - finally got rid of SWBOOL. 2020-09-09 20:32:24 +02:00
Christoph Oelckers
e044582aef - fixed all issues with SWBOOL as pointed out by a type-safe wrapper class. 2020-09-09 20:28:05 +02:00
Christoph Oelckers
1a647e8104 - globally search and replaced TRUE and FALSE in SW.
There were a handful of warnings afterward which were also addressed.
The SWBOOL type has not been handled yet.
2020-09-09 19:52:52 +02:00
Mitchell Richters
b2272bd377 SW: Partially revert 73d0772e87 and do in a way that's more fidele to the original workflow. 2020-09-09 23:01:37 +10:00
Mitchell Richters
28a3ef131f - SW: Attempt at making vehicle movement work nicely while uninterpolated. 2020-09-09 22:45:21 +10:00
Mitchell Richters
e24521b189 - SW: Uplift playerSetHoriz() similar to uplift to playerSetAngle() in b832442e31. 2020-09-09 22:04:59 +10:00
Mitchell Richters
b832442e31 - SW: New implementation of playerSetAngle() that works better for intended purpose. This corrects the issues with angle not being quite right when getting onto a ladder. 2020-09-09 21:29:03 +10:00
Mitchell Richters
b72a3326d0 Merge branch 'back_to_basics2' into InputStuffs
# Conflicts:
#	source/core/d_net.cpp
2020-09-09 06:56:27 +10:00
Christoph Oelckers
ec1c42b04a - got rid of common.h
All still relevant content was moved to places closer to its use.
2020-09-08 18:39:47 +02:00
Mitchell Richters
48630914b1 - SW: Remove boat code from new input code for cleanliness. 2020-09-09 00:34:51 +10:00
Mitchell Richters
1e3199413c - SW: Rename all Tank-related function code to Vehicle. 2020-09-08 21:54:48 +10:00
Mitchell Richters
8625ac573d - SW: Comment out all boat code, it's actually not used within the game at all and was very confusing... 2020-09-08 21:40:20 +10:00
Mitchell Richters
73d0772e87 - SW: Call DoPlayerMoveTurret() in processMovement() in lieu of DoPlayerTurnTurret() and don't interpolate sector object's sprite while !cl_syncinput.
* Makes operating the tank silky smooth while unsynchronised.
2020-09-08 19:42:22 +10:00
Mitchell Richters
c00217163b - SW: Fix turret sound with unsynchronised input. 2020-09-08 19:38:32 +10:00
Mitchell Richters
cda79496ce - SW: Fix DoPlayerDeathHoriz() with unsynchronised input. 2020-09-08 18:12:45 +10:00
Mitchell Richters
083ed3e9b7 - SW: Handle angAdjust and horizAdjust directly in processMovement() instead of via DoPlayerTurn()/DoPlayerHorizon().
* Eliminates issues with when to call when player is dead, etc. Handles cases like climbing a ladder which doesn't trigger `DoPlayerTurn()`.
2020-09-08 06:50:38 +10:00
Mitchell Richters
5145bf907a - SW: Hook up all vehicle turn code in processMovement() except for DoPlayerTurnTankRect(), which still needs considerations.
* Issue in `DoPlayerTurnTurret()` with `PlaySOsound()` calls occurring too frequently, still requires investigation on how to best handle this.
2020-09-08 06:22:47 +10:00
Mitchell Richters
df0331a4c3 - SW: Promote all vehicle angle code to proper Q16.16.
* Input still rough with `cl_syncinput 0` for vehicles.
2020-09-07 22:36:11 +10:00
Mitchell Richters
e1a5e37126 - SW: Handle DoPlayerTurn()/DoPlayerHorizon() better while dead. 2020-09-07 21:50:43 +10:00
Mitchell Richters
681a8ebec2 - SW: Hook up horizAdjust and adjust all ticrate amendments of q16horiz via playerAddHoriz()/playerSetHoriz(). 2020-09-07 21:47:15 +10:00
Mitchell Richters
2e2ca03812 - SW: Promote recoil_horizoff to Q16.16 to avoid down-scaling only to upscale. 2020-09-07 21:34:13 +10:00
Mitchell Richters
e36c9fc78c - SW: Hook up angAdjust and adjust all ticrate amendments of q16ang via playerAddAngle()/playerSetAngle().
* Promoted some uses of `getangle()` upscaled to Q16.16 with `gethiq16angle()` for higher precision.
2020-09-07 21:30:06 +10:00
Mitchell Richters
1cc1c21029 - SW: Add resetinputhelpers() and hook up within game. 2020-09-07 21:15:53 +10:00
Mitchell Richters
77816bf3d3 - SW: Promote adjustment of helpers to double since some values will be coming in with higher precision. 2020-09-07 21:03:30 +10:00
Mitchell Richters
584ec935ed - SW: Add Duke's input helpers and adjust to suit SW.
* These are temporary until a backend solution is available after all games have had initial uplift.
2020-09-07 20:35:35 +10:00
Mitchell Richters
3667116274 - SW: Uplift of DoPlayerHorizon() and PlayerAutoLook().
* Set `PF2_INPUT_CAN_AIM` explicitly where `DoPlayerHorizon()` would have been done within the original game.
* Replace original centering code and route `SB_CENTERVIEW` through the `SB_LOOK_UP`/`SB_LOOK_DOWN` code.
* With this commit, first person input is now nice again. Vehicle code still to be looked at.
2020-09-07 20:20:41 +10:00
Mitchell Richters
e84c8379d9 - SW: Uplift of DoPlayerTurn().
* Set `PF2_INPUT_CAN_TURN` explicitly where `DoPlayerTurn()` would have been done within the original game.
* Uplift the turn 180 code to full Q16.16.
* Eliminate stupid input scaling so input matches that provided by the input device.
* Ticrate angle adjustments outside of the player's control still to be uplifted.
2020-09-07 19:23:48 +10:00
Mitchell Richters
6e6373deda - SW: Remove camq16* variables from game and backend code that supported them.
* `cl_syncinput 0` is very raw at the moment.
2020-09-07 08:40:14 +10:00
Mitchell Richters
fa9fa88fce Merge branch 'back_to_basics2' into InputStuffs
# Conflicts:
#	source/core/gamestruct.h
#	source/games/duke/src/duke3d.h
#	source/sw/src/input.cpp
#	source/sw/src/player.cpp
2020-09-07 07:51:37 +10:00
Mitchell Richters
e94bd9da04 - SW: Replace use of scaleAdjustmentToInterval() in lieu of backend solution from 290e615807. 2020-09-06 21:30:47 +10:00
Mitchell Richters
722537a1f0 - InputState: Make CONTROL_GetInput() return an object instead of accepting a pointer and provide to games as a function parameter.
* Provide read-only/const results from `CONTROL_GetInput()` so games can't change received input.
* Change non-descript `info` to `hidInput` (Human Interface Device).
* Remove a few unused prototypes.
2020-09-06 20:18:26 +10:00
Christoph Oelckers
a6c92aec64 - removed all automap code from SW and the flat drawer from the backend.
This should have been the last parts of automap code.
Now on to rebuild this thing in a cleaner fashion...
2020-09-06 12:14:08 +02:00
Mitchell Richters
677efb20ba - SW: Don't check SB_RUN as player action in ChopsCheck().
Fixes #312.
2020-09-06 19:18:14 +10:00
Christoph Oelckers
7dbae8b8f4 - enabled autosaves.
Fixes #55
This only creates them but does not auto-resume from them.
2020-09-05 22:39:27 +02:00
Christoph Oelckers
2e8b808683 - added a C_ClearMessages function for the console and fixed game restart after death.
Fixes #322
2020-09-04 22:23:38 +02:00
Christoph Oelckers
fd2ce0321e - transitioned SW to level change event system 2020-09-04 21:15:15 +02:00
Christoph Oelckers
a222a7d7c9 - transitioned Shadow Warrior to new main loop.
Problem: Does not work yet with cl_syncinput = 0. Something about those angle and horizon settings is not right yet.
2020-09-02 20:58:37 +02:00
Christoph Oelckers
b3d4bab4dd - deleted sync.cpp. 2020-09-02 20:57:03 +02:00
Mitchell Richters
253d1a3989 - SW: Re-position actortime clocking.
I believe this is the right place and I got it wrong when doing e32cd81cc7. The change in this commit is more like where Duke times actortime.
2020-09-02 09:28:41 +10:00
Mitchell Richters
9605e41f9f - SW: Fix Q16.16 operation not using m_fixed inlines. The one that got away... 2020-09-01 23:28:47 +10:00
Mitchell Richters
17da849add - SW: Get synchronised input going in a testable way. This is not a complete re-factor, just enough to get it going.
* Remove bool `PedanticMode`.
* Transition appropriate lines to `cl_syncinput`.
* Remove inlines added purely only to maintain DOS demo compatibility.
* Fix a few pedantic Q16.16 >> Int >> Q16.16 conversions.
2020-09-01 23:08:23 +10:00
Mitchell Richters
1354d52c05 - Major cleanup of Q16.16 utilisation within games and engine.
* Remove fix16.h/cpp and utilise library from m_fixed.h.
* Extend m_fixed.h with two inline functions for int to/from float operations.
* Replace fix16_floor operations with those from xs_Float.h
* Replace multiple Q16.16 conversions from 0 to just be 0.
* Replaced all found in-game bit-shifts and multiplications/divisions with inline functions from m_fixed.h
* Replaced many casts of FRACUNIT as double in SW's panel.cpp as it is converted to double by way of type promotion.
* Fixed missed precision fixes in SW's panel.cpp where some types weren't declared correctly.
* Replaced 100+ `Cos()/Sin() >> 16` operations for Blood with inline functions `CosScale16()/SinScale16()`.
2020-09-01 23:00:47 +10:00
Christoph Oelckers
2f05a93547 Merge branch 'Packet' into back_to_basics2
# Conflicts:
#	source/core/gamestruct.h
#	source/games/duke/src/gameloop.cpp
#	source/games/duke/src/player_d.cpp
2020-08-31 00:09:56 +02:00
Mitchell Richters
e32cd81cc7 - Unify stat fps for all games. 2020-08-30 20:24:36 +02:00
Christoph Oelckers
d49aedacea - continued work on main loop - added a few new entry points to the game interface. 2020-08-30 00:55:49 +02:00
Christoph Oelckers
694444b62a - converted the remaining input bits.
Looks like it is working in all games except Blood (not that it surprises me that it's Blood again which has issues...)
2020-08-29 13:32:55 +02:00
Christoph Oelckers
dc1f56e8f9 Merge remote-tracking branch 'remotes/Github_private/back_to_basics2' into Packet
# Conflicts:
#	source/core/inputstate.cpp
#	source/exhumed/src/exhumed.h
2020-08-29 01:19:48 +02:00
Christoph Oelckers
fe7f3a2f9e - handle the run key. 2020-08-29 00:57:07 +02:00
Christoph Oelckers
b9e0f493b2 - transitioned the 5 primary action keys: Open, Jump, Crouch and Fire/AltFire. 2020-08-28 23:25:08 +02:00
Christoph Oelckers
d62d2eaec7 - processed all remaining local input CCMDs and removed some bits only needed for multiplayer.
These MP bits should be reimplemented as network commands later, they only take up valuable space in the bit field.
2020-08-28 00:03:35 +02:00
Christoph Oelckers
c7e667a17a - transition weapon selection in SW.
Thanks to the macro insanity for trivial operations in this code base this turned out to be a lot more troublesome than Duke...
2020-08-27 00:06:59 +02:00
Mitchell Richters
55f688b13f - SW: Rename q16horz to q16horiz and q16aimvel to q16horz for consistency and to avoid confusion down the track. 2020-08-27 08:00:50 +10:00
Christoph Oelckers
abf715eace - unified the packet structures of all games.
Currently the bit fields are still separate and they have to be merged, but for now the added memory does not matter.
Having this structure in the common parts will allow work on consolidating the input code, though.
2020-08-26 17:12:48 +02:00
Christoph Oelckers
84b6af24d3 - renamed the fields in SW's packet structure to match Duke's.
Preparation for moving the packet management into public code.
2020-08-25 22:06:01 +02:00
Christoph Oelckers
c09a5150a9 - added some predefined fullscreen modes
This is to cut down on boilerplate code because these encode the virtual screen size in the mode parameter, making it unnecessary to specify a virtual size separately.
2020-08-24 20:25:53 +02:00
Christoph Oelckers
f1a988b221 - make use of map bindings
All automap controls have been moved there, and sizeup/sizedown have been made CCMDs, taking screen size management entirely out of the game modules
2020-08-24 20:20:15 +02:00
Christoph Oelckers
debb4b17b6 - transitioned SW's automap to the global variables
Also copied the automap label output to the status bar for proper ordering.
2020-08-24 19:36:17 +02:00
Christoph Oelckers
91cc6a657b - tick the fortune cookie display within the playsim code to ensure its duration is handled properly.
Fixes #204
2020-08-19 17:10:54 +02:00
Christoph Oelckers
65cb267d56 - save the cookie texts in a savegame and clear them on level exit. Also handle them on a per-player basis.
Fixes #196
2020-08-17 22:05:14 +02:00
Christoph Oelckers
17f9bc8a8a - initiate a full game reset when respawning after death.
This was done with the old code but we now have to set the respective flag explicitly because the init code is inside the main loop, not outside.
Fixes #188
2020-08-17 20:30:44 +02:00
Christoph Oelckers
25e8636a60 - eliminated a few smaller headers. 2020-08-16 23:21:24 +02:00
Christoph Oelckers
baf1166319 - trying to bring order to game.cpp
Some reshuffling, plus moving the automap drawer to its own file.
2020-08-16 18:18:56 +02:00
Christoph Oelckers
78d3afb0bf - cleaning out more garbage. 2020-08-16 17:09:59 +02:00
Christoph Oelckers
ab7774c6d7 - thinning out some garbage. 2020-08-16 16:57:42 +02:00
Christoph Oelckers
a8b0839592 - switch SW to CCMD based input. 2020-08-16 16:00:40 +02:00
Christoph Oelckers
532b11467f - handle all level access and indexing through the mapinfo data.
No more level numbers will be stored in the game code.
2020-08-16 14:39:18 +02:00
Christoph Oelckers
af2c836e54 - unused code cleanup. 2020-08-16 09:04:24 +02:00
Christoph Oelckers
5cf54033ed - removed the demo code. 2020-08-15 22:31:44 +02:00
Christoph Oelckers
deb9b74ce2 - got rid of all remaining rotatesprite calls in SW.
Also removed some dead code from player.cpp.
2020-08-15 22:04:37 +02:00
Christoph Oelckers
910ca69484 - migrated all of SW's text display to the backend and removed the various redundant printing functions. 2020-08-15 20:29:13 +02:00
Christoph Oelckers
249c5b5734 - removed some dead code. 2020-08-14 21:12:32 +02:00
Christoph Oelckers
a5d9886aa9 - cleaned up the remnants of the old statusbar code. 2020-08-14 00:56:34 +02:00
Christoph Oelckers
67c340b573 - ported the inventory bar.
Now the panel system is only used for displaying the weapons.
2020-08-14 00:38:27 +02:00
Christoph Oelckers
188b2d2daa - ammo and weapon display ported. 2020-08-13 20:14:53 +02:00
Christoph Oelckers
dc653bbdc0 - thinning out some crap. 2020-08-13 18:19:44 +02:00
Christoph Oelckers
bb6972abb4 - SW: get rid of redundant common_game.h 2020-08-12 23:43:21 +02:00
Christoph Oelckers
d3df4e580c - do not restart one-page image scrollers with Enter
Instead go back one menu level.

Fixed #129
2020-08-10 01:12:53 +02:00
Christoph Oelckers
9060abbafd - 8 more SW headers gone. 2020-08-06 00:18:45 +02:00
Christoph Oelckers
72806e27eb - cleanup work on SW
* consolidating smaller headers to reduce number of files
* remap all unmapped keyboard checks to corresponding buttons
2020-08-05 22:36:38 +02:00
Mitchell Richters
8c723f52d1 - make controller input identical across all games.
* Convert axes in ControlInfo struct from int32_t to float as what's received from the backend.
* Remove all the scale up/down math since we don't need that with floats and replace with float constants that match old behaviour.
* Store q16mlook scaling as a constant for use with mouse and upcoming controller code.
* Add required controller code to Blood as the only game not to have working controllers.
* Fix typos in (gInput.forward > input.forward) for `ctrlGetInput()` in Blood.
* Remove use of `scaleAdjustmentToInterval()` on Exhumed and Shadow Warrior as they only process forward/side velocities within the game's ticrate.
* Repair angvel/aimvel scaling mistakes from d79a5d256d.
* Scale dyaw and dpitch by 25% for Shadow Warrior as the game runs 25% faster than the other games, leading to faster input.
2020-06-24 20:08:56 +02:00
Christoph Oelckers
d4cdb31464 - backend update to make the ZScript compiler work. 2020-06-14 18:58:30 +02:00
Christoph Oelckers
f0d208bf56 - fixed compile error. 2020-06-07 10:46:35 +02:00
NY00123
1a1039a2d3 Fix a possible jitter upon changing the player's action
(e.g., beginning to jump, or landing on ground);
Reproduced with the input being tied to framerate
while SO interpolation is toggled on.

This involves the following modifications:
- PF2_INPUT_CAN_TURN and PF2_INPUT_CAN_AIM are now additionally set
from various DoPlayerBegin* functions, allowing the player to continue
turning/aiming as usual (right before the next call to domovethings),
even in specific instances of player action changes.
- If PF2_INPUT_CAN_TURN/PF2_INPUT_CAN_AIM was set before and
after calling pp->DoPlayerAction from domovethings altogether,
ensure that the player's oq16ang/oq16horiz is updated by
making an appropriate call to DoPlayerTurn/DoPlayerHorizon. This
is done in case a call to DoPlayerTurn/DoPlayerHorizon is missed.
This change is not applied for a dead player, though.
2020-06-07 10:19:49 +02:00
NY00123
ce2aee49df SW: This should hopefully be a better way of fixing the lack of
interpolation of player turning/aiming/movement, while being carried
by a sector object, without SO interpolation. This is a continuation of
73a0aa394e906a65633d61f3c749c9b9b7e66aaa and bf31bc2987a3eccd31d343622327bd4ee0f9c5a1,
aiming to fix a jitter in case the player is continuously
getting pushed by a wall (e.g., on the boat in level 5).

Basically, this moves the relevant assignments from track.cpp:MovePlayer
and MovePoints to player.cpp:DoPlayerMove. Unless a call to one of these
functions has been missed, pushwall and clipmove can be called from
player.cpp in the following instances, which should be covered:
- Via DoPlayerMove, which is the function getting the fix now.
- Via DoPlayerSlide, which is called in the beginning of DoPlayerMove.
- Via DoPlayerCurrent when called from DoPlayerCrawl/DoPlayerWade,
followed by DoPlayerMove.
- Via DoPlayerCurrent when called from DoPlayerDive,
followed by DoPlayerMove if the player doesn't stop diving.

# Conflicts:
#	source/sw/src/track.cpp
2020-06-07 10:19:48 +02:00
Mitchell Richters
33b6b85d57 SW: Amend how game pauses.
- Pausing game with Pause key now works again.
2020-05-31 23:19:54 +02:00
Christoph Oelckers
6a8efb7520 - update of music code, in particular separating the engine-specific lookup from the backend.
# Conflicts:
#	source/core/music/music.cpp

# Conflicts:
#	source/build/src/palette.cpp
2020-05-23 12:37:47 +02:00