Commit Graph

11385 Commits

Author SHA1 Message Date
Christoph Oelckers d526c6401f - use the generic cheat system for Blood. 2020-08-03 20:51:31 +02:00
Christoph Oelckers d729bc898c - fixed character counter in MakeUTF8. 2020-08-03 20:18:33 +02:00
Christoph Oelckers 724c811de3 - Moved message storage to the map records. 2020-08-03 20:16:32 +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
Christoph Oelckers 0036402be8 - removed most of the network code in Blood.
Mainly to expose the parts that still get used in single player because there's some problems here that need addressing.
ENet is also gone now.
2020-08-03 20:06:27 +02:00
Christoph Oelckers dea0804f9a - how could this compile? 2020-08-03 19:14:33 +02:00
Christoph Oelckers 825b286424 - removed some redundant parts in level.cpp
Let's use the underlying data directly.
2020-08-03 19:11:48 +02:00
Christoph Oelckers 5704c57fe0 - changed the byte order swappers to use ZDoom's versions
This is to reduce redundancy, plus, these are native on Windows and macOS.
2020-08-03 19:09:57 +02:00
Christoph Oelckers 3c8da8c421 - moved LocalKeys to controls.cpp
to consolidate input code in one file.
2020-08-03 19:08:49 +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 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