Commit graph

490 commits

Author SHA1 Message Date
Mitchell Richters
b9eef9c6a3 - make ang and horiz optional on each game's warptocoords CCMD as suggested in commentary for 1dc6edfa56. 2020-08-04 22:33:17 +10:00
Mitchell Richters
24d847f4ec - create Duke dynamic CCMD warptocoords. 2020-08-04 18:04:02 +10:00
Mitchell Richters
2bdf5f38e5 - remove code meant to have been deleted when performing e474ebc2b7. Makes processinput_r() match processinput_d(). 2020-08-04 17:13:28 +10:00
Mitchell Richters
bc103595ce - force scaleAdjust to be 1 when cl_syncinput is 1.
* Above calculation has some micro variances to it which were leading to strange behaviour like the bike's tilting not working properly with `cl_syncinput 1`.
2020-08-04 17:11:32 +10:00
Mitchell Richters
293c1af4c2 - interpolate p->TiltStatus for RR(RA). 2020-08-04 17:11:00 +10:00
Mitchell Richters
cdb8e5b94e - do these in the order that processinput() does them in. 2020-08-04 16:30:20 +10:00
Mitchell Richters
a2a668cd7b - fix vehicle turning issues following cl_syncinput changes/fixes in e474ebc2b7. 2020-08-04 16:28:57 +10:00
Mitchell Richters
cb93560a4a - fix regression from e474ebc2b7 by which the player could adjust their angle on a camera while cl_syncinput 0 (default) was set.
* Issue doesn't occur with `cl_syncinput 1` because `processinput()` returns when p->newowner >= 0 before `applylook()` is called from within it.
* Fixes #96.
2020-08-04 13:02:19 +10:00
Christoph Oelckers
d526c6401f - use the generic cheat system for Blood. 2020-08-03 20:51:31 +02:00
Christoph Oelckers
35a5c4e23c - undid hardcoded coupling of Mapinfo slots with episode/level pairs in Blood.
This both lifts the imposed limit of 16 levels and will allow dynamic management of global mapinfo data.
2020-08-03 20:11:30 +02:00
Christoph Oelckers
d87f0dc0b0 - uninitialized variable fixed 2020-08-03 20:07:23 +02:00
Mitchell Richters
7493d4e334 - remove unused getters from player_struct. 2020-08-03 23:01:53 +10:00
Mitchell Richters
aead65183c - draw the crosshair using getHalfLookAng() inline function, making use of its double precision and optionally interpolated result. 2020-08-03 22:56:43 +10:00
Mitchell Richters
d3d9bb0823 - partially revert 19e4393a4f by adding the player's mouse input after calculating the true pitch of p->q16horiz.
* Need to add `p->horizAdjust` in with `p->q16horiz` because the values passed to that variable are the same as what would have been directly added to `p->q16horiz` in `processinput()`.
* Leaving mouse input to apply after calculating the pitch lets us take advantage of the calculated pitch's accuracy to provide consistent mouse input across the pitch's range.
2020-08-03 22:39:09 +10:00
Mitchell Richters
1556e80dd2 - apply same RR horizon workaround from e474ebc2b7 for when cl_syncinput 1 is set for angle as well. 2020-08-03 22:31:44 +10:00
Mitchell Richters
19e4393a4f - add all the horizon values before converting into true pitch inside sethorizon(). 2020-08-03 22:13:10 +10:00
Mitchell Richters
573cb363ae - add new weapon interpolation variable from player_struct into savegame code. 2020-08-03 21:26:28 +10:00
Mitchell Richters
e474ebc2b7 - multiple input fixes for both games, and for both cl_syncinput 0 and cl_syncinput 1 modes.
* For RR, `processweapon_r()` was performing angle and horizon changes directly which provided a harsh experience with the default `cl_syncinput 0` mode.
* Added `angAdjust` variable to `player_struct` for use with ticrate angle adjustments.
* Renamed `horizAngleAdjust` to `horizAdjust` so that there is less confusion with the new `angAdjust` variable.
* Removed `horizSkew` variable, can just use `horizAdjust` for this.
* Replaced all calls to `addang()` and `addhoriz()` with the appropriate additions/subtractions to `angAdjust` and `horizAdjust` respectively.
* Removed now unused `addang()` and `addhoriz()` setters from `player_struct`.
* Define new function `resetinputhelpers()` to eliminate code duplication between `processinput_d()` and `processinput_r()` functions.
* Remove `p->q16ang` and `p->q16horiz` direct setting from `FinalizeInput()`.
* Change `applylook()` to accept an `fixed_t adjustment` for changing the player's angle. This can either be `input.q16avel` when `cl_syncinput` is 0, or `sync[snum].q16angvel` when `cl_syncinput` is 1.
* Change `sethorizon()` to accept an `fixed_t adjustment` for changing the player's horizon. This can either be `input.q16horz` when `cl_syncinput` is 0, or `sync[snum].q16horz` when `cl_syncinput` is 1.
* Re-work `sethorizon()` to always adjust `p->q16horiz` using the true pitch code. This closer resembles the EDuke32 implementation as per SVN 7342.
* Re-work returning to center to work off the true pitch code and always ensure that the player returns to center.
* Implement work-around for RR where we need to call `sethorizon()` before the call to `fi.doincrements()` like the original game, but also after the call to `processweapon()` to apply any angle or horizon changes due to weapon recoil, etc. We work around this by calling `sethorizon()` from within `doincrements_r()` only if `cl_syncinput` is 1 and only if `doincrements_r()` is to return 1.
2020-08-03 21:19:45 +10:00
Mitchell Richters
d9fab07c31 - interpolate p->hard_landing for RR. 2020-08-03 17:27:09 +10:00
Mitchell Richters
c600295c93 - apply same fix from c63564eb7a for returning interpolated value for the player's q16horiz - q16horizoff if cl_syncinput is true.
* Also changed `gethalflookang()` to camel case `getHalfLookAng()` for easier reading.
* Also broke a very long if statement down into smaller chunks for readability.
2020-08-03 17:06:28 +10:00
Mitchell Richters
c63564eb7a - replace lookanghalf() player_struct getter with inline that can accept cl_syncinput as a bool for whether to return an interpolated calculation or not.
New HUD was being let down by using an uninterpolated `q16look_ang` regardless of whether `cl_syncinput` was true.
2020-08-03 16:27:14 +10:00
Mitchell Richters
6bd050e201 - fix some interpolation harshness with p->weapon_pos. 2020-08-03 15:06:25 +10:00
Mitchell Richters
7efa905a01 - fix some interpolation harshness with p->kickback_pic. 2020-08-03 15:06:25 +10:00
Mitchell Richters
531df48d38 - interpolate p->hard_landing for Duke 3D. 2020-08-03 15:06:25 +10:00
Mitchell Richters
43ff42b330 - interpolate p->random_club_frame for Duke 3D. 2020-08-03 15:06:25 +10:00
Mitchell Richters
038039eb3f - interpolate p->kickback_pic for Duke 3D. 2020-08-03 15:06:25 +10:00
Mitchell Richters
8cc4b5062a Revert "- remove duplicate line.". In hindsight, I believe this was by design.
This reverts commit 6fd6926d8d.
2020-08-03 15:06:25 +10:00
Mitchell Richters
6ad3237b62 - backup p->kickback_pic in prep for interpolation and tidy up other weapon interpolation variables. 2020-08-03 15:06:25 +10:00
Mitchell Richters
11a10c1d87 - change calc_smoothratio() inline function from int to double that was missed in 0c12436092. 2020-08-03 11:57:39 +10:00
Mitchell Richters
034d6e129a - always calculate smoothratio while paused, but only return it during play. This is so the time keeps elapsing and you don't get a large delta between the first call back to CalcSmoothRatio() after the previous call. 2020-08-03 11:54:59 +10:00
Mitchell Richters
5792a2389a - consistency cleanup with a use of calcSinTableView() use within hudweapon_d.cpp. 2020-08-03 11:07:55 +10:00
Mitchell Richters
80291f9cb7 - For RR, pass vehicle TiltStatus through to backend as the double that it is. 2020-08-03 11:06:23 +10:00
Mitchell Richters
8526bd6a17 - interpolate weapon HUD for RR and make full use of calcSinTableValue()'s double precision. 2020-08-03 11:05:41 +10:00
Mitchell Richters
70794df76c - remove bitwise & operations on calls to calcSinTableValue() since they're no longer necessary, and remove last use of sintable[] from hudweapon_d.cpp. 2020-08-03 09:19:14 +10:00
Christoph Oelckers
d083e12967 - added the "back" sound to the menu. 2020-08-02 22:14:58 +02:00
Christoph Oelckers
8acc4101be - simplified calcSinTableValue and inlined it.
There's no need for all this magic voodoo - the sin function already returns the proper values all by itself.
2020-08-02 22:03:22 +02:00
Christoph Oelckers
9606601554 - wraooed "q16look_ang / (2. * FRACUNIT)" in an inline function.
No need to write it out each time, this wpuld be a nightmare if it ever had to be refactored.
2020-08-02 21:45:57 +02:00
Mitchell Richters
0bcb37860a - interpolate p->weapon_pos for smooth switching of weapons. 2020-08-02 21:20:54 +02:00
Mitchell Richters
85dcffc442 - use new fmulscale16() static inline for high precision interpolation in place of manual code. 2020-08-02 21:20:54 +02:00
Mitchell Richters
9c8593018b - define new function calcSinTableValue() to calculate an equivalent sintable[] entry.
* Returns a true double result.
* Also supports fractional input for fractional input. That is, if `sintable[1]` = 50 and `sintable[2]` = 100, `calcSinTableValue(1.5)` = 75.
* Increased precision of `BANG2RAD` define to use double and not float.
* As such, revert addition of `sintablef[]`.
2020-08-02 21:20:54 +02:00
Mitchell Richters
abb23a7bd0 - fix remaining interpolation issue with weapon swaying when taking off again from a stand-still. 2020-08-02 21:20:53 +02:00
Mitchell Richters
6fd6926d8d - remove duplicate line. 2020-08-02 21:20:53 +02:00
Mitchell Richters
11b3f5a78a - increase precision of local variable x for displaypistol(). 2020-08-02 21:20:53 +02:00
Mitchell Richters
184465460e - make full use of sintablef[2048]. 2020-08-02 21:20:53 +02:00
Mitchell Richters
977ddc5aa8 - make full use of Q16.16 resolution for player's angle and horizon values. 2020-08-02 21:20:52 +02:00
Mitchell Richters
3a4a224877 - interpolate p->weapon_sway. 2020-08-02 21:20:52 +02:00
Mitchell Richters
4499e05b06 - pass smoothratio through to displayweapon(). 2020-08-02 21:20:52 +02:00
Mitchell Richters
0c12436092 - change returned value for CalcSmoothRatio() from int to double and pass through to displayrest() for future use with displayweapon().
* `displayrooms()` ultimately should be adjusted as well. For now, just relying on integer truncation as this is just a proof of concept.

# Conflicts:
#	source/core/gamecontrol.cpp
#	source/core/gamecontrol.h
2020-08-02 21:20:52 +02:00
Mitchell Richters
0aca26e197 - determine smoothRatio immediately after a potential change to ototalclock has occurred. 2020-08-02 20:57:08 +02:00
Mitchell Richters
1cf857e788 - create an enum for MaxSmoothRatio and replace multiple hard-coded uses of '65536' constant. 2020-08-02 20:57:08 +02:00