Commit Graph

11666 Commits

Author SHA1 Message Date
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 48e4bccc6d - oops. Missed change of `hudDraw()` `zDelta` from int to double while implementing ae2d2c7948. 2020-08-03 10:23:15 +10:00
Mitchell Richters 348acf95e0 - change division of delta between currentTime and lastTime from 8 to 72 to ensure smoothratio doesn't clip at 65536.
* Divisor of delta is there so smoothratio always starts off with some kind of value. After 10 minutes at 1100 fps, closest final result to 65536 was:

ototalclk: 4573
totalclk: 4576
gametics: 33.333 ms
elapsedTime: 33.331 ms
ratio: 0.999938
result: 65531.941356
2020-08-03 10:00:06 +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
Mitchell Richters ae2d2c7948 - interpolate zDelta with higher precision from updated `CalcSmoothRatio()` function that returns a double instead of an int. 2020-08-03 09:07:19 +10:00
Mitchell Richters 61820ddef5 - interpolate bobx and boby with higher precision from updated `CalcSmoothRatio()` function that returns a double instead of an int. 2020-08-03 08:50:48 +10:00
Christoph Oelckers 8a31e96602 - use all available precision to render Blood's weapon animations mpre smoothly, instead of throwing it away by needlessly storing it in some integer fields. 2020-08-03 00:25:40 +02:00
Christoph Oelckers be9402c4e0 - fixed Blood not accepting any input after loading a saved game. 2020-08-03 00:10:18 +02:00
Christoph Oelckers 38616d90a3 - renamed some members of Blood's EPISODEINFO struct. 2020-08-02 23:47:21 +02:00
Christoph Oelckers e434df5328 - always play menu sounds by calling M_MenuSound to check the menu_sounds CVAR. 2020-08-02 22:16:26 +02: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
Christoph Oelckers 6a305748ff - removed some C cruft from compat.h. 2020-08-02 21:25:03 +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 3d165ee182 - extend mulscale/divscale pragmas with double versions of each. 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 4301706e00 - promote `fclamp()` and `fclamp2()` to double. 2020-08-02 21:20:06 +02:00
Mitchell Richters 7b8e40c7e1 - create sintable `sintablef[2048]` as sintables of doubles.
* Also change BANG2RAD define to be a double and not a float.
2020-08-02 21:20:06 +02:00
Christoph Oelckers 18c3d9b240 - get the frame time right at the start of the frame, not when performing interpolations.
This is to factor think time out of the time span between frames and to avoid changes if the smoothratio gets calculated multiple times.
2020-08-02 21:16:01 +02:00
Mitchell Richters 3861064f62 - use 1/8 of delta time as initial elapsed time when calculating smoothratio on a new ototalclk.
* Pushes final result closer to 65536 and always ensures smoothratio never starts at 0.
2020-08-02 20:57:09 +02:00
Mitchell Richters 4830989d32 - remove all code used to get current display's refresh rate.
* Serves no purpose in Raze or GZDoom and appears to only have been added to the backend to facilitate the older interpolation code that was excised in 893686709b.
2020-08-02 20:57:09 +02:00
Mitchell Richters f8952d5cae - directly cast `steady_clock::now()` to nanoseconds instead of microseconds then multiplying by 1000. 2020-08-02 20:57:08 +02:00
Mitchell Richters 5000fde281 - restore legacy interpolation path behind CVAR `cl_legacyintrpl`.
* Hoping the old path being available will allow the new code to be merged.
* Applied offset to sum of `(totalclk - ototalclk)` of 0.5 to ensure calculated smoothratio under legacy path always returns a value.
* For the above, consider Duke 3D with 4 game tics per ticrate, the returned values would be:
0
16384
32768
49152
* With offset of 0.5, the following values are returned depending on how far advanced `totalclk` is from `ototalclk`:
8192
24576
40960
57344
2020-08-02 20:57:08 +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 52d9fd4cda - add `cl_debugintrpl` CVAR to print interpolation information to the console.
* Also revert back to use of `xs_CRoundToInt()` that was accidentally removed previously.
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
Mitchell Richters 733f3aa490 - increase granularity of `CalcSmoothRatio()`. 2020-08-02 20:57:07 +02:00
Christoph Oelckers 00ecea47aa - use CCMDs for input in Blood where appropriate. 2020-08-02 20:44:37 +02:00