Commit graph

910 commits

Author SHA1 Message Date
Mitchell Richters
16cee1148b - Duke: Change a few ps[] to use the p alias available following changes in f4fff5ee30. 2020-09-25 00:09:31 +10:00
Mitchell Richters
04af1d9ce8 - All Games: Unify processMovement(). 2020-09-24 22:32:37 +10:00
Mitchell Richters
081dfb187c - Duke: Make changes in ce7af5fe0e easier to read by way of aliases. 2020-09-24 09:05:42 +10:00
Christoph Oelckers
44fc452747 - World Tour: Fixed missing smoke on burning monsters
Yay, another one-liner...
2020-09-23 19:24:40 +02:00
Christoph Oelckers
daabb31bff - more stat constants 2020-09-23 19:24:01 +02:00
Christoph Oelckers
67985b7819 - changespritestat literal number replacement 2020-09-23 18:51:43 +02:00
Christoph Oelckers
71213bf8bd - added a missing code fragment for WT's lavapool.
This made them float in the air instead of being on the ground.
2020-09-23 18:18:23 +02:00
Christoph Oelckers
a6c45a8e52 - Duke: must serialize SB_CENTERVIEW (but no other bits.) 2020-09-23 18:18:23 +02:00
Christoph Oelckers
f4fff5ee30 - moved sync structure into the playerstruct for easier maintenance. 2020-09-23 18:18:23 +02:00
Mitchell Richters
8690c633d8 - Blood: Add extra call to inputState.ClearAllInput() in StartLevel(). 2020-09-24 00:20:40 +10:00
Mitchell Richters
64113f8f9c - Blood/Duke/SW: Smooth out player's zpos adjustment while in 3rd person view. 2020-09-23 23:12:59 +10:00
Mitchell Richters
ce7af5fe0e - Duke: Fix security cameras skewing over time.
* Fixes regression from e1ee9bc83c. +='ing the angle by 16 gave a noticeable hiccup, but was keeping the poor math before in-check so the angle didn't drift.
* Using more temp data fields in hittype, properly define a min/max using the initial camera angle and the hitag which is conveniently the camera's viewing arc.
2020-09-23 18:31:12 +10:00
Christoph Oelckers
5784ff6ef7 - fixed damage type of incinerator's fireball.
A one-liner, what else... :D
2020-09-23 07:37:08 +02:00
Mitchell Richters
470f481619 - Duke: Simplify entire camera angle setup. 2020-09-23 15:34:03 +10:00
Mitchell Richters
ed9c8af82f - Duke: Move changes performed in 53038e1b29 from FinalizeInput() to processInputBits(). 2020-09-23 15:03:34 +10:00
Mitchell Richters
53038e1b29 - Duke: Don't allow looking left/right when on a security camera screen. 2020-09-23 15:00:33 +10:00
Mitchell Richters
88608e0682 - Duke: Interpolate camera sprite angle in animatecamsprite(). Fixes a "fixme". 2020-09-23 14:42:33 +10:00
Christoph Oelckers
5e6317b8b9 Merge remote-tracking branch 'remotes/Github_private/Blood_InputReworking' 2020-09-22 23:32:28 +02:00
Christoph Oelckers
2a2209b085 - cleanup and minor fixes. 2020-09-22 23:07:11 +02:00
Christoph Oelckers
880b811e0d - rewrote map loader to work independently of data structure sizes.
This is needed to extend a few fields that are too narrow - e.g. the texture offset fields have no room for interpolating scrolling textures.
Blood not done yet, will also need to be changed to get rid of the limits.
2020-09-22 22:40:53 +02:00
Mitchell Richters
ac635ebd0f - Blood/RR: Replace a few playerSet*() calls with playerAdd*(). Because the setters continually set until target is reached, can cause some perceivable smoothness issues if ticker re-targets's player's angle/horizon before input code has reached target. 2020-09-22 22:50:27 +10:00
Mitchell Richters
d40a2d3e95 Merge branch 'back_to_basics2' into Blood_InputReworking
# Conflicts:
#	source/blood/src/hudsprites.cpp
#	source/exhumed/src/status.cpp
#	source/games/duke/src/game_misc.cpp
#	source/sw/src/draw.cpp
2020-09-22 07:34:39 +10:00
Mitchell Richters
9859571ded - DrawCrosshair(): Factor in Blood's adjustable horizon which defaults to 90.
* Fixes https://forum.zdoom.org/viewtopic.php?f=340&t=69920.
2020-09-22 07:29:52 +10: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
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
Christoph Oelckers
af298411df - added widescreen titlepic for Duke Nukem 3D:
Also made some tweaks to the intro sequence drawer so that it recognizes image formats not depending on the game palette.
2020-09-17 23:20:50 +02:00
Christoph Oelckers
f5d14f826a - added the SHOOT event and fixed some issues with poor code generation for the game data accessors.
They created different code depending on the passed index, this was changed to always emit the optional parameter, even when not needed, so that the interpreter does not need to second-guess.
2020-09-17 23:06:54 +02:00
Christoph Oelckers
8fa5d3d9d2 - added the remaining CON features from EDuke 2.x
Not everything will do something, though. This was some incredibly careless code operating without a safety net allowing uncontrolled write access to the map structure.
Most of the critical fields have been made read-only, which has been the only mode of access in the mods I checked.

Note that this does not enable scripting of the weapon sprite drawer, only the gameplay related features were done.
2020-09-17 23:06:54 +02:00
Mitchell Richters
e1ee9bc83c - Duke: Fix camera advancing angle by 16 instead of 8 under circumstances. 2020-09-17 18:31:09 +10:00
Christoph Oelckers
6776508239 - widescreen asset setup and consolidation of .def file loading. 2020-09-16 19:13:06 +02:00
Christoph Oelckers
2095e9e3c6 - code changes for last commit - they were not picked up automatically.
# Conflicts:
#	source/build/src/defs.cpp
2020-09-16 19:13:05 +02:00
Mitchell Richters
ce82eaf899 - Duke/RR: Address weapon drawer interpolation concerns raised in #403. 2020-09-16 21:01:09 +10:00
Christoph Oelckers
867b8f006f Reverted key input changes from yesterday.
At least the SW version did not work right so let's take no chances here.
2020-09-15 21:54:10 +02:00
Christoph Oelckers
1f4594b450 - Duke: Only read keyboard input for movement when called for the actual tic.
Since the added values are not scaled, doing this per frame has the potential risk of achieving too high total velocity when combined with other means of input.
The change here was kept as simple as possible.
2020-09-14 21:10:34 +02:00
Christoph Oelckers
0e58203d92 - fixed rintersect and removed some unused bits from engine.cpp. 2020-09-13 20:15:46 +02:00
Christoph Oelckers
a4754d7f34 - rewrote the map hack parser using sc_man.
This unexpectedly turned out a complete rewrite so now it is under my own license.
Also moved the remaining parts of map hack loading into the engine.

Overall I have to say that the feature is not what I expected, it's merely used to fudge the positioning of model sprites and for adding Polymer lights.
2020-09-13 13:01:44 +02:00
Christoph Oelckers
1f7bc6d69e - interpolation fix from EDuke: "Patch from Striker to improve sprite interpolation"
Fixes #109
2020-09-11 22:54:52 +02:00
Christoph Oelckers
aba91b4f09 - avoid uninitialized data. 2020-09-11 21:16:29 +02:00
Christoph Oelckers
19b5e2464e - For World Tour allow falling back on the classic sounds if the Oggs cannot be found 2020-09-11 21:04:47 +02:00
Christoph Oelckers
b7f0e2c3c3 - added sound FX remapping for World Tour so it can use the original VOCs.
Fixes #353
2020-09-11 20:17:36 +02:00
Christoph Oelckers
8716fabe9c - fixed E5L1 sky definition having gone MiA.
Fixes #389
2020-09-11 19:56:20 +02:00
Christoph Oelckers
38cc094ac3 - adapt ClearAllInput to new globalized code. 2020-09-10 23:35:42 +02:00
Christoph Oelckers
d5b9a9ee43 Merge remote-tracking branch 'remotes/Github_private/InputStuffs' into back_to_basics2 2020-09-10 23:25:43 +02:00
Christoph Oelckers
f829bc96c8 - Duke: Fixed E5L4's sky 2020-09-10 22:06:43 +02:00
Christoph Oelckers
f4bd30b972 - Duke: Fixed noclip cheat message. 2020-09-10 21:50:22 +02:00
Christoph Oelckers
9ce8202eb1 - Duke: Added a file check for the map to be entered when ending a level.
World Tour contains a map definition for E5L9 but no map for it.
2020-09-10 21:39:52 +02:00
Christoph Oelckers
83eba019b8 - added support for Megaton's widescreen assets.
Fixes #386
2020-09-10 00:05:10 +02:00
Christoph Oelckers
b52a2b0d9a - set up the loadscreen code.
This isn't active, though, because load times are so short these days that all this results in is an irritating screen flash before the level starts.
It may be activated later when hires assets are in use.

Fixes #10 (or not...? ;) )
2020-09-09 22:42:01 +02:00
Mitchell Richters
6570366a97 - Duke: Fix camera interpolations following uplift in 9615308fb3. 2020-09-09 20:46:17 +02:00
Mitchell Richters
ee5689b07e Merge branch 'back_to_basics2' into InputStuffs 2020-09-09 21:04:42 +10:00
Christoph Oelckers
d6c6561309 - that was for testing only. 2020-09-09 00:01:14 +02:00
Christoph Oelckers
9615308fb3 - Duke: fixed camera views glitching when changing their targets.
A nearly typical problem of this code. Not all relevant properties of the camera target were changed at once - there was a two frame discrepancy in which the camera pointed in some undefined direction after the change.

Fixes #15
2020-09-08 23:47:30 +02:00
Christoph Oelckers
cef1f8275b - fixed backing off of monitor screens.
Although this is a blocking condition, it must not neutralize movement because it is needed to move away from the screen and end the camera view.
2020-09-08 23:09:40 +02: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
f15657cc6d - fixed missing widescreen sprite for shrinker/grower and bad light level for the incinerator.
Fixes #380
2020-09-08 22:50:38 +02:00
Christoph Oelckers
d011a16c5b - added a menu option for WT's music switch.
Fixes #370
2020-09-08 22:37:21 +02:00
Christoph Oelckers
298949ceb8 - more compat.h cleanup
Its elimination is getting closer. :)
2020-09-08 18:48:18 +02:00
Christoph Oelckers
8d2d36457f - consolidated the map name display on startup
Fixes #275
2020-09-08 18:28:41 +02:00
Mitchell Richters
92443806af Merge branch 'back_to_basics2' into InputStuffs 2020-09-08 06:26:32 +10:00
Christoph Oelckers
a2e3bb5725 - fixed WT's incinerator and a few other minor things I found while comparing Raze's WT support code with BuildGDX's.
Fixes #357
2020-09-07 21:38:17 +02:00
Christoph Oelckers
703b142bad - added a CVAR to disable WT's ogg music and a fallback for when it cannot be found.
Fixes #354
2020-09-07 21:26:07 +02:00
Christoph Oelckers
775c4a3b51 - fixed explosions in World Tour.
A classic result of trying to add new stuff to Duke's spaghetti code, shit like this would not happen if this code wasn't this poorly structured.
Fixes #360 and most of #357
2020-09-07 21:00:27 +02:00
Christoph Oelckers
de7da0d4d7 - fixed: The summary screen in Duke and RR was blocking without explicit user input.
It must check for the actual sound that was played, because at least in Duke the looping music is still playing.
Fixes #367
2020-09-07 20:09:53 +02:00
Christoph Oelckers
fc435565af - always use the narrow status bar for overlay mode. 2020-09-07 19:43:46 +02:00
Christoph Oelckers
bd183ad682 - fixed World Tour weapon display and property parsing, resulting in incorrect ammo count for the flamethrower.
Fixes #356
2020-09-07 00:45:11 +02:00
Christoph Oelckers
0c60b28ea1 - fixed positioning of World Tour status bar
Fixes #355.
2020-09-06 23:54:40 +02: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
Christoph Oelckers
cbbbe2a09b - Duke+RR: Don't quit the level summary screen through timeout when a sound is still playing.
Fixes #359
2020-09-06 23:23:17 +02:00
Christoph Oelckers
1060d74e08 - SW's automap sprite drawer. 2020-09-06 21:50:02 +02:00
Christoph Oelckers
2d547a4ef1 - re-added the sprite drawer for Duke's automap. 2020-09-06 21:31:05 +02:00
Christoph Oelckers
18b39fd952 - first stage of generic automap code.
Lines and textures get rendered, not all colors are correct - sprites yet to do...
2020-09-06 20:49:43 +02:00
Christoph Oelckers
809f8b5d4b - hooked up the new automap framework. 2020-09-06 12:44:58 +02:00
Mitchell Richters
290e615807 - Move Duke's input scaling for unsynchronised input to backend as InputScale(). 2020-09-06 20:19:26 +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
Christoph Oelckers
d61d279168 - excised Blood's entire automap code. 2020-09-06 10:59:45 +02:00
Christoph Oelckers
8f6f368445 - cleaned out the remaining parts of automap handling in Duke and Exhumed. 2020-09-06 10:42:39 +02:00
Christoph Oelckers
d947cc4765 - also took out the zoom variable so that no automap data remains in the playsim code. 2020-09-06 10:22:05 +02:00
Christoph Oelckers
c1a995822d - took all automap related code out of Duke's game module. 2020-09-06 10:08:47 +02:00
Christoph Oelckers
dc0968bf61 - fixed fog on RRRA E2L1
Fixes #183
2020-09-05 23:20:48 +02: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
45882a02cc - fix WT level name display. 2020-09-05 22:14:00 +02:00
Christoph Oelckers
8b2302ec67 - backslash eradication in sound definitions.
World Tour does this badly, even using double backslashes.
2020-09-05 22:01:19 +02:00
Christoph Oelckers
d5b7935ca1 - fixed the CON parser to treat tabs as whitespace.
Fixes #287.

World Tour starts now but still has issues.
2020-09-05 21:53:48 +02:00
Christoph Oelckers
607d30ef8e - fixed broken end of level timer in Duke.
Fixes #342
2020-09-05 17:56:35 +02:00
Christoph Oelckers
55c7c56709 - fixed bad sound check in Duke's E3 ending. 2020-09-05 17:56:09 +02:00
Christoph Oelckers
fa50cde93f - fixed skill selection in Duke.
Screw these old shadowing menu variables. Well, the one for skill is gone now.
Fixes #344
2020-09-05 16:31:01 +02:00
Christoph Oelckers
9af093b818 - fixed screen job timer when paused
Fixes #343
2020-09-05 16:21:53 +02:00
Christoph Oelckers
c1786001b2 - route all game state changes through game actions.
This is to avoid problems with the main loop not calling Ticker and Render in sync.
2020-09-05 15:43:34 +02:00
Christoph Oelckers
32ec9ff369 - consolidated crosshair drawing and added ZDoom's crosshair code.
For Exhumed this is the default, for the other games it is an option.
Fixes #269.
2020-09-05 13:57:26 +02:00
Christoph Oelckers
adbedd30c4 - consolidated the 4 functions for handling the automap zoom. 2020-09-05 00:58:25 +02:00
Christoph Oelckers
fd2ce0321e - transitioned SW to level change event system 2020-09-04 21:15:15 +02:00
Christoph Oelckers
97f395bd72 - transitioned Blood to the new level change messaging system 2020-09-04 20:46:44 +02:00
Christoph Oelckers
77f96a1c75 - fixing some issues. Level transitions in Duke are working now. 2020-09-04 19:43:36 +02:00
Christoph Oelckers
e5e8c02f1d - WIP level transition refactored to a game independent event system. 2020-09-04 19:43:35 +02:00
Christoph Oelckers
8f0a885f63 - route 'give' through the network for all games. 2020-09-03 17:39:41 +02:00
Christoph Oelckers
fb334e7f1a - transitioned Blood's give command and changed SW's not to call the cheat handler. 2020-09-03 16:31:31 +02:00
Christoph Oelckers
3e5e956b72 - run most cheats through the network.
The remaining excpetions are the "give" CCMD and any level change action.
Unfortunately the implementation of most cheats is not multiplayer safe so right now it'd only be useful for demo recording (assuming that worked to begin with... ;))
2020-09-03 01:32:51 +02:00
Christoph Oelckers
a0874a26a7 - noclip cheat and splitting of Exhumed's cheat code into its own file. 2020-09-03 00:41:32 +02:00
Christoph Oelckers
66bf8113b8 - implemented the 'god' cheat as a network command.
This was mainly chosen as something simple to get the basics set up.
2020-09-03 00:29:17 +02:00
Christoph Oelckers
e19923ce4b - removed setGameClockStart.
This won't be needed anymore.
2020-09-02 20:57:03 +02:00
Christoph Oelckers
aabbbcb2ff - reset the network timer after lengthy operations.
This includes loading a level and busy-waiting for a sound to play.
Also block these loops and the sounds they wait for in network games to avoid problems from longer delays here.
The problem seems to be directly inherited from ZDoom which shows the same issue with screen wipes.

Fixes #297
2020-09-02 10:00:07 +02:00
Christoph Oelckers
e5612b82c7 - fixed: The tile manager created its backup arrays before loading .def files.
This could let such textures disappear with the new main loop.
2020-09-02 00:36:49 +02: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
3204a3e5fc - negated the meaning of SB_AIMMODE.
This is because 'classic' aim mode will reset the view if the mouseaim key is not pressed.
The problem with this is that an empty input packet will trigger a view reset. If the meaning is inverted the default aim mode is free mouse view which doesn't try to alter any view state and is therefore preferable for an empty packet.

Fixes #292
2020-08-31 20:51:22 +02:00
Christoph Oelckers
ac5abd8aac - removed ready2send variable.
It's a leftover from the old netcode.
2020-08-31 20:25:08 +02:00
Christoph Oelckers
827c406437 - don't play activation sound when not having a Holoduke powerup. 2020-08-31 20:04:20 +02:00
Christoph Oelckers
f0ca87dc82 - fixed mixed up Holoduke messages.
Fixes #289
2020-08-31 20:01:55 +02:00
Christoph Oelckers
e5d963c515 - refactored third person view to only access the clock in its worker function
Timer values in interface code are undefined, these should not access anything that changes at real time.
Also use smoothratio to do the calculation in frame time, not tic time.
2020-08-31 19:27:22 +02:00
Christoph Oelckers
a8bb6ba515 - base the turbo turn timer on the actual level tic rate
This has a threshold that could lead to different behavior, depending on whether synchronized or unsynchronized input is used, it also used an undefined state of gameclock for its calculations.

By basing this on the levelclock consistency is ensured.
2020-08-31 19:23:05 +02:00
Christoph Oelckers
71c3441b1e - transitioned cloudclock.
This timer runs at 60 Hz in the render code, so it needs to take smoothratio into account.
2020-08-31 19:22:21 +02:00
Christoph Oelckers
9a208185d6 - levelclock increment after tick.
This ensures that the first tick always gets a value of 0.
2020-08-31 19:21:02 +02:00
Christoph Oelckers
bf4f538c61 - a few more places where gameclock could be substituted.
Nothing here needs higher precision.
2020-08-31 19:20:04 +02:00
Christoph Oelckers
2bf368d49b - redid the timer for the automap zoom
Add more precision and uncouple from the game timer
2020-08-31 19:18:53 +02:00
Christoph Oelckers
45a22eb3cd - do proper interpolation of the snorkel in RR. 2020-08-31 19:06:53 +02:00
Christoph Oelckers
03aad6559b - added a global leveltimer variable to Duke.
This timer only gets incremented by the main game ticker when the playsim is running.

This timer gets used for all playsim-related timing and animations so that these are decoupled from imprecisions in the global timer.
2020-08-31 00:33:41 +02:00
Christoph Oelckers
34104a74d8 reduce dependency of code on global gameclock variable
passing it as parameter to operateweapon*
2020-08-31 00:17:40 +02:00
Christoph Oelckers
007c6e122d - gameclock abstraction
This may need more work to have a reliable timer
2020-08-31 00:16:43 +02: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
Christoph Oelckers
b8258da997 - cleaning out some trash from compat.h.
The header from hell...
2020-08-30 23:34:40 +02:00
Christoph Oelckers
00d35bc42c - fixed the number pulsing on Duke's and RR's HUD. 2020-08-30 22:52:50 +02:00
Mitchell Richters
1617938d4f - Duke: When using cl_showmagamt 1, increase pistol maximum by 4 so that when you have full ammunition, you have a full clip.
* On the fence about this. Lower makes the game harder, and higher could mean the difference between life and death. I do think that if we're showing amounts in the magazine, full ammo should constitute a full magazine. I think the max of 200 is an oversight from the original devs as all other games have proper defaults that reflect the magazine or cylinder capacity.
2020-08-30 20:24:38 +02:00
Mitchell Richters
eb3a21e677 - Duke: Implement cl_showmagamt for the RR's pistol and shotgun. 2020-08-30 20:24:37 +02:00
Mitchell Richters
161647ed5b - Duke: Implement cl_showmagamt for the game's pistol. 2020-08-30 20:24:37 +02:00
Mitchell Richters
e32cd81cc7 - Unify stat fps for all games. 2020-08-30 20:24:36 +02:00
Christoph Oelckers
765f211e05 - things are mostly working again.
Rendering produces an image again, input gets properly processed, but unsynchronised mouse input isn't properly applied yet.
2020-08-30 19:59:46 +02:00
Christoph Oelckers
38d10cc591 - game input works, but still no 3D scene rendered. 2020-08-30 13:04:07 +02:00
Christoph Oelckers
ffe5b114f3 - the engine starts on the new main loop and is capable of running the intros and the menu, but not the game yet. 2020-08-30 12:49:21 +02:00
Christoph Oelckers
d59284c96b - transitioned Duke to the new main loop.
Everything compiles, but hasn't been tested. Doing a safety commit first.
2020-08-30 12:02:32 +02:00
Christoph Oelckers
0c455acaa2 - more work to switch over to the new loop.
Mainly separation of ticker and render calls
2020-08-30 10:42:44 +02:00
Christoph Oelckers
1e0b8038e5 - removed I_ResetTime entirely and refactored SW's use of it. 2020-08-30 08:13:34 +02:00
Christoph Oelckers
49106c5b5e - Duke: Do not reset the global ticker.
The new main loop code cannot handle that. Instead set a start value for gameclock so that gameclock can be based on an arbitrary time value instead of directly representing global time.
2020-08-30 08:04:33 +02:00
Christoph Oelckers
cc04d41903 - Duke: moved the clock reset to a separate function and deleted the unused lockclock variable. 2020-08-30 07:53:20 +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
fab561d757 - cleaned up Duke's main GameTicker function.
* moved the part that alters the input before queuing it to GetInput
* moved moveloop into the main function
* reshuffled a few things for better grouping by task.
2020-08-29 21:20:10 +02:00
Christoph Oelckers
20426a5a4f Revert "- pass loc as a parameter to Duke's GetInput function to uncouple it from the global variable."
This reverts commit a03b6cf57c.

Turns out this wasn't really useful.
2020-08-29 21:09:04 +02:00
Christoph Oelckers
a03b6cf57c - pass loc as a parameter to Duke's GetInput function to uncouple it from the global variable. 2020-08-29 18:07:49 +02:00
Christoph Oelckers
56d0647412 - migrated the last 3 remaining UI controls to CCMDs. 2020-08-29 17:49:15 +02:00
Mitchell Richters
7ff73ae2f1 - Duke: Add missing World Tour flamethrower from alt weapon mode implementation completed in 51a08fbaf3. 2020-08-29 22:30:45 +10: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
Mitchell Richters
51a08fbaf3 - Duke: Implement WeaponSel_Alt for Duke and RR. 2020-08-29 21:27:58 +10: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
847fa48724 - cleaned out the remaining parts of baselayer.h
In particular this means to remove the option to disable widescreen aspect ratios. The way this was handled makes no sense with the current render backend.

The aspect ratio code will have to be redone entirely to properly obey the backend's settings.
2020-08-28 09:06:49 +02:00
Christoph Oelckers
d73bf62465 Revert "- Set frame-time as close to the buffer swap as possible, and calculate smoothratio for Duke/SW as late as possible."
This reverts commit 97feb483ab.
2020-08-28 08:25:51 +02:00
Mitchell Richters
ea2790ce08 - Duke: Switch game tic back to a while loop. I didn't mean to commit it this way in ab06235971.
* I doubt anyone will be running this on a system where computing a tic might take longer than a tic, but it's more consistent with the other games and is what it was.
2020-08-28 15:29:41 +10:00
Mitchell Richters
97feb483ab - Set frame-time as close to the buffer swap as possible, and calculate smoothratio for Duke/SW as late as possible.
* Micro-optimisation, but was getting a very occasional jitter in Duke 3D that seems to have gone with this.
2020-08-28 15:27:16 +10: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
ee7d558282 - removed the remains of sending pause with the input packets.
None of this was really working anymore, but will have to be rethought once a network stream exists again.
But even then, this is better sent as a separate command, and in MP only.
2020-08-27 22:38:52 +02:00
Christoph Oelckers
447573aa36 - consolidation of invprev, invnext and invuse. 2020-08-27 22:19:24 +02:00
Christoph Oelckers
43de0d8312 - consolidation of inventory item activation through hotkeys.
This also adds hotkeys for Exhumed which never implemented them.
2020-08-27 21:25:09 +02:00
Mitchell Richters
0c55c3983c - Duke: Fix potential interpolation issues for RR's shotgun observed while working on something else. 2020-08-27 22:47:18 +10:00
Mitchell Richters
a2b51edcdb - Duke: Delete enum created in 3e79e7b63f and move CRACK_TIME to miscConstants.
* Didn't have a very good look, apparently...
2020-08-27 16:09:18 +10:00
Mitchell Richters
65a54361b4 - Duke: Apply same fix in 3e79e7b63f for RR, accidentally missed. 2020-08-27 15:55:32 +10:00
Mitchell Richters
3e79e7b63f - Duke: Fix bug where player wasn't cracking knuckles after 777 idle tics while cl_syncinput was 1.
* Use opportunity to replace the literal constant of `777` with an enum.
2020-08-27 15:54:49 +10:00
Christoph Oelckers
10df3e094a - rework of weapon input to use common features in shared code.
This also adds stubs for all unimplemented features in the games for easier addition.
2020-08-27 00:53:35 +02:00
Christoph Oelckers
f597f7c265 - made the GameFunc constants global again.
With most of the more specific features being migrated to CCMDs the list is relatively clean now, with merely 2 buttons that are game specific.
2020-08-27 00:25:59 +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
Christoph Oelckers
e768a2bf24 - use new bitmask for weapon selection in Duke. 2020-08-26 23:02:55 +02:00
Christoph Oelckers
36d676ca20 - renamed ESyncBits so that the replacement can take that name later. 2020-08-26 22:39:15 +02:00
Christoph Oelckers
4e846f8d66 - do not print game init messages to the notify display. 2020-08-26 20:19:54 +02: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
b76168f673 - moved the main event processing functions into the global main loop.
Now, with all the Build timer stuff removed these calls were all identical between games.
2020-08-26 16:59:41 +02:00
Mitchell Richters
88a49b0d22 - Duke: Restore RPG harsh recoil behind a CVAR.
# Conflicts:
#	source/core/gamecvars.cpp
#	source/core/gamecvars.h
2020-08-26 16:45:41 +02:00
Mitchell Richters
839a7bcbe4 - subjective fix to Duke 3D's RPG harsh recoil. 2020-08-26 16:45:41 +02:00
Mitchell Richters
62388e30be - fix C_SetNotifyFontScale() for RR.
Fixes #264.
2020-08-26 22:33:19 +10:00
Christoph Oelckers
ddd6a300ab - added UpdateSounds calls to the blocking loops in Duke's and SW's StartGame functions. 2020-08-26 04:15:33 +02:00
Christoph Oelckers
cc5e6d19c3 - fixed sound updating by moving the engine's UpdateSound call into the main loop.
This needs to be called unconditionally for every frame being rendered, not all of the game modules did that.
Placing this call here ensures that it is independent of anything the games do.
2020-08-26 04:10:16 +02:00
Christoph Oelckers
de871c9ab9 - use the game timer, not the Build timer for the sound eviction delay.
This is supposed to wait for two game frames to be on the safe side.
2020-08-26 03:50:07 +02:00
Mitchell Richters
e1424d454f - Duke: Clean out some left over stub code during initial testing. 2020-08-26 11:23:57 +10:00
Mitchell Richters
4eec9dca63 - Duke/SW: Use I_GetBuildTime() instead of gameclock in game-side sound code.
* Code is called where `gameclock` might not be set.
2020-08-26 10:09:02 +10:00
Mitchell Richters
ef728429e0 - Core: Remove legacy smoothratio calculator CalcSmoothRatio(). 2020-08-26 09:49:47 +10:00
Mitchell Richters
e0aaaf1f60 - All Games: Move gameclock and lastTic to gamecontrol. 2020-08-26 09:49:44 +10:00
Mitchell Richters
76776d24d7 - All Games: Remove use of ClockTicks and replace with int. 2020-08-26 09:49:42 +10:00
Mitchell Richters
b883204f6a - All Games: Remove remaining use of totalclock and associated timing code. 2020-08-26 09:49:34 +10:00
Mitchell Richters
c207437a57 - Duke: Rename cloudtotalclock to cloudclock.
* Mostly so it doesn't come up on searches for `totalclock`.
2020-08-26 09:49:32 +10:00
Mitchell Richters
76b05dbcd6 - Build (and games): Remove totalclocklock. 2020-08-26 09:48:56 +10:00
Christoph Oelckers
6b0e1baf02 - added a timerUpdateClock call to the main loop so that Blood and Exhumed work again.
This may only be removed when nothing uses totalclock anymore. We're not there yet.
2020-08-25 21:24:45 +02:00
Christoph Oelckers
a323591d5a - call C_RunDelayedCommands() from a centralized place. 2020-08-25 21:16:37 +02:00
Christoph Oelckers
8256b54005 - applied a few fixes:
* removed the timer callback stuff that came back through the backdoor.
* do not use gameclock in the UI code - use the underlying timer directly.
* UpdateSounds must still use totalclock, until this can be refactored in its entirety.
2020-08-25 20:20:35 +02:00
Mitchell Richters
d04aa603dd Revert "Revert "- Duke: Remove left-over line." and re-do as a multiplier of TICSPERFRAME for better clarity as to what's happening rather than a bit-shift."
This reverts commit 0cdd27b61534219a0d00b794a45a09f26a95afaa.
2020-08-25 19:51:12 +02:00
Mitchell Richters
d3b506eb2b - Duke (and Engine): Eliminate use of totalclock for game.
* Breaks every other game except Duke unless/until they get migrated. Done for the purpose of demonstrating PR #244.

# Conflicts:
#	source/build/src/timer.cpp
#	source/games/duke/src/game.cpp
2020-08-25 19:51:12 +02:00
Mitchell Richters
c5f523fb3c - Duke: Make a bit more use of the calculated smooth ratio. 2020-08-25 19:48:52 +02:00
Mitchell Richters
e9c0831ccc Revert "- Duke: Remove left-over line." and re-do as a multiplier of TICSPERFRAME for better clarity as to what's happening rather than a bit-shift.
* It's also better that everything be based off the one tic clock and not call `I_GetBuildTime()` to set `gameclock`. This also ensures that `gameclock` always increases in intervals of 4.

This reverts commit 63eac13d6442357fdab57067ec913a2ce8ce72db.
2020-08-25 19:48:38 +02:00
Mitchell Richters
2231386830 - Duke: Create function to reset timer and apply in game where timer restarts are needed. 2020-08-25 19:48:15 +02:00
Mitchell Richters
7d1f021fcd - Duke: Remove left-over line. 2020-08-25 19:47:45 +02:00
Mitchell Richters
afb09456e0 - Duke: Migrate away from using totalclock and use new game-specific gameclock with underlying timer code in common.
* Build timer still requires initialisation due to multiple `timerSetCallback()` that still need to work.

# Conflicts:
#	source/core/menu/menu.cpp
#	source/games/duke/src/game.cpp
2020-08-25 19:47:31 +02:00
Mitchell Richters
ab06235971 - Duke: Demonstration of a re-timed game and associated interpolation improvements that come from it.
# Conflicts:
#	source/games/duke/src/game.cpp
2020-08-25 19:43:28 +02:00
Christoph Oelckers
435e13dfa4 cleanup of the timer interface.
* rewrote all uses of timerSetCallback. Most were unnecessary or long obsolete, the sound updates need to run per frame, not per tic and the UI tickers need to be handled in the main loop anyway.
* Use a more precise timer to animate the menu transition.
* uncouple other menu animations from the game timer.
2020-08-25 19:42:11 +02:00
Christoph Oelckers
777bbd4bd8 - use the generalized code to display automap labels in Blood. 2020-08-24 23:59:09 +02:00
Christoph Oelckers
6672b8af99 - generalized the automap label code.
Using proper scaling and should be reusable from all games now.
2020-08-24 23:14:55 +02:00
Christoph Oelckers
25ade79b90 - stat display fine tuning. 2020-08-24 22:18:45 +02:00
Christoph Oelckers
fef7608705 - made a few fixes for the fullscreen HUD in Nam:
* the font was placed too low
* the Duke health icon is not a health icon in this game so it had to be exchanged for something proper.
2020-08-24 22:12:56 +02:00
Christoph Oelckers
e7c58a5b29 - make hud_scale a floating point CVAR. 2020-08-24 21:48:47 +02:00
Christoph Oelckers
76811a1881 - InputState cleanup
This removes most of the InputState class because it is no longer used.
The only remaining places still checking scan codes are the modifiers for sizeup and sizedown.
All the rest was remapped to safer methods. The multiplayer taunts are currently inoperable, they will need support of shift-bindings to get proper support.
2020-08-24 20:34:18 +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