Commit graph

188 commits

Author SHA1 Message Date
Christoph Oelckers
87e8801531 - handle the clipmove result in processinput. 2020-11-04 19:55:14 +01:00
Christoph Oelckers
419cf9af5e - processinput part 1. 2020-11-04 19:55:13 +01:00
Christoph Oelckers
ef2c773e02 - RR processweapon pass 1 2020-11-04 19:55:13 +01:00
Christoph Oelckers
d4dabee52d - OnMotorcycle/BoatHit. 2020-11-04 19:55:13 +01:00
Christoph Oelckers
454b2315d4 - use actors instead of indices for sound calls. 2020-11-04 19:55:13 +01:00
Christoph Oelckers
8d55138db0 - checkweapons_r. 2020-11-04 19:55:13 +01:00
Christoph Oelckers
635b53f78f - RR-movement + dummyplayersprite 2020-11-04 19:55:13 +01:00
Christoph Oelckers
29b08b2115 - access_spritenum 2020-11-03 22:49:17 +01:00
Christoph Oelckers
16089e56f0 - the rest of shoot_r. 2020-11-03 22:41:24 +01:00
Christoph Oelckers
47f77a97e4 - RR shootrpg and shootwhip. 2020-11-03 22:41:24 +01:00
Christoph Oelckers
aa6dd72688 - RR shootstuff 2020-11-03 22:41:23 +01:00
Christoph Oelckers
32a7c2349e - shoot interface transitioned/operateweapon mostly done. 2020-11-03 22:01:58 +01:00
Christoph Oelckers
513744aa56 - this was nonsense. atwith is a tile number, not a sprite index. 2020-11-03 21:51:17 +01:00
Christoph Oelckers
7e29be7569 - switched checkhitwall interface to actors. 2020-11-03 21:49:57 +01:00
Christoph Oelckers
4258c27248 - switched the checkhitsprite interface to actors. 2020-11-03 21:43:50 +01:00
Christoph Oelckers
1ab13688a7 - RR shootweapon 2020-11-03 21:43:49 +01:00
Christoph Oelckers
51705e5a61 - RR shootmelee. 2020-11-03 21:43:49 +01:00
Christoph Oelckers
17737eea85 - wrapped hitscan in a variant returning an actor. 2020-11-03 20:43:38 +01:00
Christoph Oelckers
768487584e - aim and all calling instances.
This also takes care of RR's chicken arrow storing an actor reference in lotag.
2020-11-03 20:42:03 +01:00
Christoph Oelckers
3fdeedcae7 - player.cpp is free of array references, except one that's unavoidable for now. 2020-11-03 19:25:07 +01:00
Christoph Oelckers
79f850d126 - PlayerColorChanged, hits, hitasprite. 2020-11-03 19:21:44 +01:00
Christoph Oelckers
a514910aa4 - use an actor pointer in Get/SetGameVarID's parameters to weed out the ordering screwups. 2020-11-03 19:21:43 +01:00
Christoph Oelckers
de92287d0b - fixed the messed up parameter order of OnEvent.
This should serve as a textbook example why passing around indices is a very, very bad idea!
2020-11-03 19:21:42 +01:00
Christoph Oelckers
2c573a720b - starting at the bottom of player_r.cpp. 2020-11-03 19:21:42 +01:00
Christoph Oelckers
33f730baf3 - replaced "sprite[p->i]" globally. 2020-11-03 19:21:42 +01:00
Christoph Oelckers
b5309a6410 - some quick'n easy replacements. 2020-11-03 19:21:42 +01:00
Christoph Oelckers
3aaf2e80a9 - moveweapons. 2020-11-01 14:46:05 +01:00
Christoph Oelckers
861342a278 - guts_d and guts_r. 2020-11-01 11:32:34 +01:00
Christoph Oelckers
4c9655b110 - check_fta_sounds. 2020-11-01 10:53:45 +01:00
Christoph Oelckers
31e5023004 - dodge, furthestcanseepoint, furthestangle. 2020-11-01 10:41:25 +01:00
Christoph Oelckers
34e39dd221 - pass spawner as an actor pointer to 'lotsofstuff'.
Allows doing this without using sprite indices.
2020-10-24 09:36:35 +02:00
Christoph Oelckers
9cdaaff42b - migrated EGS and deletesprite to new actor interface.
Inline wrappers for old code exist.
The backupplayer inline was moved into player.cpp because that's the only place it gets used.
2020-10-21 19:14:41 +02:00
Christoph Oelckers
d7604a3160 - made on_crane a pointer as well. 2020-10-21 16:31:17 +02:00
Christoph Oelckers
05c095e448 - fixed parameter ordering for WW2GI's change weapon event call.
This happens when variables are ambiguously named... :?
2020-10-21 07:31:21 +02:00
Christoph Oelckers
99e3eeb19e - split up shoot_r as well and consolidated both blood splat functions. 2020-10-21 01:03:38 +02:00
Mitchell Richters
b1536d8a0b - Duke (RRRA): Fix potential issue originating from 1bc51a7367 where horizon might have needed adjustment to 0 but wouldn't have done so.
* Previously used to determine whether to apply a horizon adjustment on whether local variable `horiz` was 0 or not (since baseline horizon was 100).
* For no particular reason, initalise `horiz` as FRACUNIT and process if it is not equal to one.
2020-10-15 20:33:28 +11:00
Christoph Oelckers
3d36381752 - converted all stat iterators outside sector*.cpp. 2020-10-15 01:34:28 +02:00
Christoph Oelckers
760a557f73 - converted the remaining sector iterators in Duke. 2020-10-15 01:34:27 +02:00
Christoph Oelckers
758fab1804 - replaced several sector iterators in Duke code. 2020-10-15 01:34:27 +02:00
Christoph Oelckers
13093aef56 - a few quick ones, mostly simple search & replace. 2020-10-15 01:34:26 +02:00
Mitchell Richters
e4af4f28ce - Duke (RR): Avoid integer truncation when dividing p->VBumpNow. 2020-10-15 10:27:08 +11:00
Mitchell Richters
1bc51a7367 - Duke (RR): Repair issues with horizon following changes in 09a05f354c and partially address vehicle turning speed in processVehicleInput().
* Issues with vehicle input handling with `cl_syncinput 1` still remain. Will address after work.
* Partially addresses #128.
2020-10-15 10:20:52 +11:00
Mitchell Richters
c08851e4c0 - Blood/Duke/RR/SW: Drop resetinputhelpers(). 2020-10-12 14:42:43 +11:00
Mitchell Richters
9bcdeae6cd - InputPacket: Change q16avel to avel, changing type from fixed_t to float. 2020-10-08 14:47:30 +11:00
Mitchell Richters
fca846272e - gamecontrol: Initial setup of PlayerAngle struct and deployment within Duke.
* Struct made up of binangle class units.
* Create signed clone of binangle for use with look_ang and rotscrnang.
* Append currently outgoing function names with `2` at the end to avoid conflict.
2020-10-07 23:13:29 +11:00
Mitchell Richters
f39939d114 - gamecontrol: Initial setup of PlayerHorizon struct and deployment within Duke.
* Started with the most complicated game first.
* Struct made up of fixedhoriz class units.
* Append currently outgoing function names with `2` at the end to avoid conflict.
2020-10-07 17:12:48 +11:00
Mitchell Richters
8be8bcc87a - Duke/SW: Fix InitTracerTurret() to use player's q16horiz with full precision and replace some manually expressed mulscales with mulscale16() inline from pragmas.h. 2020-10-07 13:28:58 +11:00
Mitchell Richters
09a05f354c - Re-standardise horizon around 0 and not 100.
* Blood had this right. It makes sense that the horizon be based around as it's easier to work with.
* Removed all associated game math to deduct default horizon of 100 when doing weapon zvel etc, meaning actual horizon can just be used.
* Re-did return to center function to work on the already converted pitch. Return speed should be 1:1 with previous code.
2020-10-07 13:28:45 +11:00
Christoph Oelckers
57945d2baf - eliminated a few overlooked 'long's. 2020-10-02 22:18:08 +02:00
Mitchell Richters
837b7c0a30 - SW: Changed some downscaled and upscaled Q16.16 variables missed when doing 46810ec490. 2020-09-27 02:07:07 +10:00
Mitchell Richters
e7de0da36c - Duke: Changed some downscaled and upscaled Q16.16 variables missed when doing 46810ec490. 2020-09-25 17:08:44 +10:00
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
Christoph Oelckers
f4fff5ee30 - moved sync structure into the playerstruct for easier maintenance. 2020-09-23 18:18:23 +02:00
Mitchell Richters
470f481619 - Duke: Simplify entire camera angle setup. 2020-09-23 15:34:03 +10: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
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
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
Mitchell Richters
ce82eaf899 - Duke/RR: Address weapon drawer interpolation concerns raised in #403. 2020-09-16 21:01:09 +10: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
38d10cc591 - game input works, but still no 3D scene rendered. 2020-08-30 13:04:07 +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
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
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
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
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
36d676ca20 - renamed ESyncBits so that the replacement can take that name later. 2020-08-26 22:39:15 +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
a3a7a8f6be - repeat of cf548e055e for RR. 2020-08-09 16:41:42 +10:00
Christoph Oelckers
d731bf4e57 - fixed typo in floor damage check.
This rendered the boots ineffective on lava.
Fixes #114
2020-08-07 23:30:08 +02:00
Christoph Oelckers
dfa3519ebc - stop screaming sound when landing.
Fixes #116
2020-08-07 22:20:29 +02:00
Christoph Oelckers
f8c65839f0 - fixed broken jumping.
This was a nasty, but typical case for Duke where a variable did not contain what the name said and was carried along way too much code.

Fixes #112
2020-08-07 21:59:11 +02:00
Mitchell Richters
ddd30e742c - ensure player's angle input while playing with cl_syncinput 0 is scaled appropriately when sector's lotag is ST_2_UNDERWATER. 2020-08-05 22:57:47 +10:00
Mitchell Richters
d1a68421bd - fix cl_weaponsway for Duke. 2020-08-05 20:04:14 +10:00
Mitchell Richters
03bccb3a06 - functionalise significant portions of 0ee3ab4df8. 2020-08-05 19:24:42 +10:00
Mitchell Richters
0ee3ab4df8 - revert most of e474ebc2b7 and adjust player's angle/horizon in a way that's compatible with cl_syncinput 0 and cl_syncinput 1.
Previous attempts at leveraging `applylook()` and `sethorizon()` in different spots had pros and cons, but ultimately changing where these functions were called from was a net negative and had hard to diagnose issues.

Maintaining two types of player input is considerable work. Lessons have been learned and will be beneficial when it comes time to re-doing the other games. Ideas from PR #98 for optimising RRRA vehicle experience while `cl_syncinput 0` is in use have been implemented here.
2020-08-05 17:53:41 +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
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
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
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
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
3a4a224877 - interpolate p->weapon_sway. 2020-08-02 21:20:52 +02:00
Mitchell Richters
02dfa10d27 - remove redundant if statement left over from 2260c2353d. 2020-07-30 08:49:01 +10:00
Mitchell Richters
2260c2353d - re-factor interpolation backups into discrete functions for calling from multiple places.
Fixes #66.
2020-07-30 08:24:27 +10:00
Christoph Oelckers
0958bccade Disabled all adult censoring in Duke and RR.
Aside from being "authentic" the parental lock is just a stupid feature with often unwanted side effects.
2020-07-29 22:43:06 +02:00
Mitchell Richters
f49ded7962 - make cl_syncinput work for Duke.
* Current setup was broken and unusable.
* Fixed interpolation issues.
* Only call `GetInput()` at frame-rate when `cl_syncinput` is 0.
* Create `oq16look_ang` and interpolate it for enhanced smoothness.
* Always reset `horizAngleAdjust` and `horizSkew` in `processinput_d()`.
* Don't pre-scale `sb_avel` in `processinput_d()` and `processinput_r()`.
* Promote `p->angvel` from short to fixed_t.
* Don't descale `sync[snum].q16horz` in `processinput_d()` and `processinput_r()`.
* Ensure `false` bool is provided to `sethorizon()` call  in `processinput_d()` and `processinput_r()`.
* Reset `p->q16angvel` in `resetplayerstats()`.
2020-07-28 22:12:09 +10:00
Mitchell Richters
158fd46581 - change Duke's synchronized_input to CVAR cl_syncinput. 2020-07-28 21:38:28 +10:00
Christoph Oelckers
a0cc798c9c - cleaned up the sound system interface to have consistent naming and no aliases. 2020-07-25 09:32:54 +02:00
Christoph Oelckers
b9f0e35d4b - fixed the crosshair. 2020-07-24 19:43:33 +02:00
Christoph Oelckers
d16d8f0d0e - fixed issues reported by XCode 2020-07-23 17:02:59 +02:00
Christoph Oelckers
7eb158bf72 - properly tabified everything. 2020-07-20 23:21:27 +02:00
Christoph Oelckers
c16115d76c - first stage of new savegame code.
This also refactors the animateptr array into something serializable. This kind of pointer lookup is virtually unrestorable without creating platform locked savegames.
2020-07-20 20:40:29 +02:00