Commit graph

170 commits

Author SHA1 Message Date
Christoph Oelckers
f1514bbc52 - alternative math for slope planes in hitscan. 2022-10-22 20:41:27 +02:00
Christoph Oelckers
74cf9a2ff2 - hitscan fully rewritten.
No traces of Build code left here! :)
2022-10-22 20:41:27 +02:00
Christoph Oelckers
116ba340b2 - further hitscan overhaul.
* added floating point sprite intersect handlers for all sprite types. Hopefully this code is more understandable than Build's original variant.
* cleaned up intersectSprite a bit and moved the geometry math into the utility header.
* made some minor corrections to neartag.
* moved SW's testpointinquad to the backend because it was useful here.
2022-10-22 20:41:26 +02:00
Mitchell Richters
6ca42dc08c - Slightly clean up calcChaseCamPos(). 2022-10-22 20:41:26 +02:00
Christoph Oelckers
6dd7fac902 - eliminated the sine table and moved tilehasmodelorvoxel to a different file to delete engine.cpp. 2022-10-22 12:17:04 +02:00
Christoph Oelckers
ef2f781e09 - rewrite from scratch of neartag. 2022-10-22 12:17:04 +02:00
Christoph Oelckers
dcd4ee133b - use a simpler method to calculate the intersection point in intersectSprite and fixed the distance check. 2022-10-22 12:17:03 +02:00
Christoph Oelckers
9c564db015 - replaced try_facespr_intersect with something independently written. 2022-10-22 12:17:03 +02:00
Christoph Oelckers
28a169d02d - cansee floating point rewrite using backend utilities. 2022-10-22 12:17:02 +02:00
Christoph Oelckers
6a1ff029b7 - floatified getslopeval and all related code. 2022-10-22 12:17:00 +02:00
Christoph Oelckers
ece8663f5e - floatified calcSlope and cleaned up the get*slope interface 2022-10-22 12:17:00 +02:00
Christoph Oelckers
bd9dfadf6d - use REPEAT_SCALE ih the wall/floorsprite getter functions. 2022-10-22 12:16:57 +02:00
Christoph Oelckers
b2d1988e50 - use engine utilities for the section builder’s inside check 2022-10-22 12:16:57 +02:00
Christoph Oelckers
ca8b9e9793 - overhauled getzrangepoint to use backend utilities 2022-10-22 12:09:54 +02:00
Christoph Oelckers
3c9a94dba8 - consolidated Duke’s ‚away from wall‘ check in the backend
This was also very useful in SW to avoid spawning ‚floating‘ footprints due to lack of an equivalent check in the original.
2022-10-21 00:00:02 +02:00
Mitchell Richters
53b32ea161 - Leverage walltype's delta() method in chase cam code. 2022-10-15 13:32:04 +02:00
Mitchell Richters
6716d0f2e9 - Floatify smoothratio for calcChaseCamPos(). 2022-10-15 13:32:02 +02:00
Christoph Oelckers
6b0b8f944c - floatified the height parameter of nextsectorneighborptr 2022-10-15 12:42:30 +02:00
Mitchell Richters
056bb9b0cd - Floatify chase cam code, providing an inline interface for legacy setup. 2022-10-15 12:16:53 +02:00
Mitchell Richters
977d8f8109 - Convert gi->chaseCamPos() to return a floating point DVector3 object. 2022-10-15 12:16:53 +02:00
Mitchell Richters
db5db7d9b3 - Turn DVector2 rotatepoint() into an inline using the vector's methods. 2022-10-15 12:16:53 +02:00
Christoph Oelckers
aa22e48036 - preparations for xvel wrapping.
Mainly providing alternative names for the spritetype members and redirecting all relevant access to those.
2022-10-14 23:02:11 +02:00
Christoph Oelckers
05f488ce3c - add more wrappers and use 'inittype' where the actual zvel member of spritetype is wanted.
This will avoid problems with search&replace later.
2022-10-14 20:31:56 +02:00
Christoph Oelckers
3f7b423a4a - zvel wrapping, part 1. 2022-10-14 20:31:55 +02:00
Christoph Oelckers
6ce01e24d2 - renamed walltype::delta and walltype::center 2022-10-13 22:54:42 +02:00
Christoph Oelckers
97223af592 - silenced a few conversion truncation warnings. 2022-10-12 15:49:07 +02:00
Christoph Oelckers
4d02cdcce9 - use explicit types in hitscan calls 2022-10-06 20:50:47 +02:00
Christoph Oelckers
3a9f9988f4 - redid clipinsidebox* functions.
* Completely rewritten to be less obtuse.
* Consolidated the two variants.
* Renamed to be clearer about what they do.
2022-10-05 18:31:45 +02:00
Christoph Oelckers
91f305125e - floatified GetWallSpritePosition and redirected get_wallspr_points to use it. 2022-10-05 18:29:04 +02:00
Christoph Oelckers
c712d594e0 - fully floatified GetFlatSpritePosition 2022-10-05 18:29:03 +02:00
Christoph Oelckers
55ade2eda4 - use int_hitpos() access function where applicable 2022-10-05 18:10:44 +02:00
Christoph Oelckers
296b5d7edd - renamed HitInfo::hitpos 2022-10-05 18:03:41 +02:00
Mitchell Richters
d28d6cd4cf - Utilise actor sprite's full precision in instances where angle was converted to Build and back again. 2022-10-05 00:36:30 +02:00
Christoph Oelckers
fe6fcdff1f - use DAngle for actors
Note that intangle needs to be kept - primarily for SW's ST tags.
2022-10-05 00:36:29 +02:00
Mitchell Richters
728edc182d - Remove last main usage of binangle outside of the game's input code. 2022-10-05 00:36:26 +02:00
Mitchell Richters
6167448f27 - Blood: Replace all uses of binangle with DAngle objects. 2022-10-05 00:36:24 +02:00
Mitchell Richters
c935fc2226 - Refactor chase cam positional code to use DAngle input rather than binangle.
* These changes still maintain Build's integer positional values in Q28.4/Q24.8, changing this will be done later on.
2022-10-05 00:36:22 +02:00
Christoph Oelckers
f54e4b8a9a - more int_ang() 2022-10-04 23:56:43 +02:00
Christoph Oelckers
33d5b54ce0 - use int_ang(). 2022-10-04 23:56:43 +02:00
Christoph Oelckers
735b9a8fed - renamed ang to __int_angle 2022-10-04 23:56:42 +02:00
Christoph Oelckers
a59a771209 - use floats for ceilingz/floorz storage. 2022-08-27 10:49:59 +02:00
Christoph Oelckers
c84d75b8bf - use inline access functions to read floorz/ceilingz. 2022-08-27 09:58:16 +02:00
Christoph Oelckers
0672572e63 - renamed sectortype::floorz and ceilingz as preparation for floatification 2022-08-27 09:47:48 +02:00
Christoph Oelckers
02ae6476de - changed the pos vector of spritetype to floating point. 2022-08-27 09:26:13 +02:00
Christoph Oelckers
c15aeec9f7 - late __int_pos additions 2022-08-26 19:53:11 +02:00
Christoph Oelckers
dc94dedc6b - renaming spritetype::pos 2022-08-26 19:53:10 +02:00
Christoph Oelckers
ad9931081e -fix some bugs, handle occurences in recently changed code 2022-08-26 19:53:10 +02:00
Christoph Oelckers
4d423004e9 - unlimited the displayable sprites.
Now with Polymost gone this can finally be done properly.
2022-08-07 10:25:15 +02:00
Christoph Oelckers
4f2170655c - animateoffs cleanup and consolidation
This was rewritten based on specs alone - it still doesn’t look that different due to its simplicity.
2022-08-05 23:32:16 +02:00
Christoph Oelckers
83c0ad55f2 - rewrote nextsectorneighborzptr with a better parameter interface 2022-08-05 18:43:48 +02:00
Christoph Oelckers
dcb4e1e39b - updatesector* cleanup.
got rid of all remaining Build code in here, stripped down the wrapper interface and moved everything into a separate header file.
2022-08-05 17:04:46 +02:00
Christoph Oelckers
b31e6c0bdf - replaced getclosestpointonwall_internal with a floating point version based on NearestPointLine. 2022-08-05 17:04:46 +02:00
Christoph Oelckers
c2fc7577db - cleanup of 3D viewport code.
Removes all the hackery that Polymost needed and now uses a sane struct to store the info.
2022-08-05 17:04:45 +02:00
Christoph Oelckers
aab13addb7 -renamed spritetype’s owner field to ‚intowner‘
Mainly for easier searching.
Also remove the duplicate ‚detail‘ field.
2022-05-24 00:30:41 +02:00
Christoph Oelckers
4e2a9f6e59 - use float wall positions in portal code. 2022-02-15 22:18:26 +01:00
Christoph Oelckers
651c25a7be - do the 'inside' check with integers.
Using floats and multiplications is not robust enough. This is a bit slower, but doesn't run the risk of underflows and other nasties.
Q: How many bits of fractional precision should we use? 16 seems fine
2022-02-15 22:18:26 +01:00
Christoph Oelckers
7374364527 - doFurniture floatified and inside rewritten as a floating point algorithm that works without bit masking. 2022-02-15 22:18:25 +01:00
Christoph Oelckers
6fbecf2348 - RR: cleaned up and floatified the mine cart code 2022-02-15 22:18:25 +01:00
Christoph Oelckers
6e96b1ee81 - floatify SW's sector object rotation. 2022-02-15 22:18:25 +01:00
Christoph Oelckers
a12093af04 - use full precision math for rotating sectors in Blood. 2022-02-15 22:18:24 +01:00
Christoph Oelckers
a781517780 - renamed PlanesAtPointf to PlanesAtPoint
The old PlanesAtPoint is not needed anymore.
2022-02-15 22:18:24 +01:00
Christoph Oelckers
f44736a5b6 -use an access function for reading wall positions so that we have a non-modifiable value wherever this is possible. 2022-02-15 22:18:23 +01:00
Christoph Oelckers
89ef81da55 - renamed walltype::pos as preparation for refactoring.
no functional changes here
2022-02-15 22:18:22 +01:00
Christoph Oelckers
276597fc36 - normalize line endings. 2022-01-22 14:37:17 +01:00
Christoph Oelckers
e892de21ec - preparations for unlimited tsprites.
Right now it is a no-op because Polymost cannot deal with this properly.
2022-01-11 00:12:32 +01:00
Christoph Oelckers
91d51d518b - this hack is needed because dragging vertices around can randomly create wall intersection.
In clear English: Geometry in Build maps is always broken by design. :(
2022-01-09 20:38:07 +01:00
Christoph Oelckers
415dc5246d - fixed sprting of non-translucent sprites. 2022-01-08 21:18:18 +01:00
Christoph Oelckers
1849fe541e - fixed alignment of sloped sprites.
The offset fields are not valid for them so thwy may not be used for offsetting.
2021-12-31 11:55:25 +01:00
Christoph Oelckers
717dd123e5 - fixed slope sprite flag getting cleared by some leftover code.
Also merged copyfrom into the one single function that called it.
2021-12-31 10:55:55 +01:00
Christoph Oelckers
4bc32e2777 - use actors in the sloped sprite utilities. 2021-12-30 16:11:14 +01:00
Christoph Oelckers
44d2cc1951 - eliminated usectorptr_t. 2021-12-30 11:45:58 +01:00
Christoph Oelckers
3fee8f3c4e - replaced dragpoint (both the generic and the Blood variant) with a newly written vertexscan function.
This is a template allowing to run any task on a set of walls with equivalent start point.
Code was redesigned from scratch to be more clear than the existing variants.

The idea here is to reuse the base algorithm for other things that need to operate on the equivalent set of a given wall's start point.
2021-12-30 09:58:15 +01:00
Christoph Oelckers
6766a5922a - pass actors to calcChaseCamPos. 2021-12-30 09:57:18 +01:00
Christoph Oelckers
f602cf3806 - deal with s() in shared code.
clip.cpp was left alone, except for the actual call.
2021-12-30 09:57:14 +01:00
Mitchell Richters
cecb8dc48e - Replace spritetypebase y with pos.Y calls. 2021-12-30 09:57:05 +01:00
Mitchell Richters
33ca55023f - Replace spritetypebase x with pos.X calls. 2021-12-30 09:57:05 +01:00
Mitchell Richters
09e00a69fe - Replace walltype y with pos.Y calls and eliminate walltype pos union. 2021-12-30 09:57:04 +01:00
Mitchell Richters
51b647da87 - Replace walltype x with pos.X calls. 2021-12-30 09:57:04 +01:00
Mitchell Richters
b2ab64bb62 - Capitalise vec3_t z variable. 2021-12-30 09:57:03 +01:00
Mitchell Richters
68e2691be7 - Capitalise vec3_t y variable. 2021-12-30 09:57:03 +01:00
Mitchell Richters
c549cc5276 - Capitalise vec3_t x variable. 2021-12-30 09:57:02 +01:00
Mitchell Richters
118ceb18ca - Capitalise vec2_t y variable. 2021-12-30 09:57:02 +01:00
Mitchell Richters
3c9cd926ba - Capitalise vec2_t x variable. 2021-12-30 09:57:02 +01:00
Christoph Oelckers
beddf1e1ca - add slope sprite support to the new renderer.
Some fudging was needed to avoid positioning problems as the renderer is more sensitive to this than Polymost.
2021-12-30 09:56:55 +01:00
Christoph Oelckers
65bc6e6aef - removed the now redundant wall() and sector() interator helper functions.
With both wall and sector now being TArrays they are not needed anymore.
2021-12-30 09:56:53 +01:00
Christoph Oelckers
82fb03e399 - another batch of search&replace, with smaller results. 2021-12-30 09:56:48 +01:00
Christoph Oelckers
1edccf1423 - added slope setter methods to sectortype.
To make sure that setting the slope flags is always done properly. (Why are the flags even needed?)
As a nice side effect, this, plus use of other inlines made the align*slope functions implode into virtually nothing.
2021-12-30 09:53:56 +01:00
Christoph Oelckers
24a6d45f97 - minor slope math optimization.
May save one division and merges the '<< 5' into the main calculation.
2021-12-30 09:53:56 +01:00
Christoph Oelckers
5f18109371 - consolidated all getslope code into a single function.
This also caches a wall's length to avoid taking the square root every single time for a slope calculation.
2021-12-30 09:53:55 +01:00
Christoph Oelckers
838bed7800 - final cleanup of sectnum related stuff.
Made sure that remaining uses of sector indices are safe to be kept and deleted a few redundant functions.
2021-12-26 23:10:01 +01:00
Christoph Oelckers
eaff9e359f - refactored the owner index in tspritetype.
This is now a separate type from spritetype which contains an actor pointer instead so that sprite display can be handled without requiring a static sprite array.
2021-12-26 23:09:53 +01:00
Christoph Oelckers
12f6b05cbe - use access functions, all done by search & replace. 2021-12-26 23:09:44 +01:00
Christoph Oelckers
129ce0aea8 - migrated Blood's hitscan calls and its global gHitInfo struct. 2021-12-26 23:08:56 +01:00
Christoph Oelckers
9380819e4e - initialize actorArray for all games.
- the foundation for an actor aware backend.
2021-12-26 23:08:56 +01:00
Christoph Oelckers
40ae38c173 - calcChaseCamPos. 2021-12-25 21:29:03 +01:00
Christoph Oelckers
999ec3c95a use validSectorIndex checks where appropriate.
Let’s hope that this sloppiness doesn’t have negative effects with broken maps.

# Conflicts:
#	source/games/sw/src/sprite.cpp

# Conflicts:
#	source/games/duke/src/prediction.cpp
#	source/games/duke/src/render.cpp
2021-12-25 21:28:37 +01:00
Christoph Oelckers
7111b2470c - SW: use BFSSearch in TraverseBreakableWalls 2021-11-29 00:55:45 +01:00
Christoph Oelckers
a79f7a3784 - SW: use a dynamic array to track already visited sectors in TraverseBreakableWalls. 2021-11-11 21:57:55 +01:00
Christoph Oelckers
5ba005276f Revert "- redid the 'inside' function."
This reverts commit c034c2a299.

While the function works, it is subtly different for points exactly on a line - enough to cause problems with Shadow Warrior's waypoint implementation.
2021-11-08 23:11:20 +01:00
Christoph Oelckers
c034c2a299 - redid the 'inside' function.
This is based on external information and does not use any of the original Build code.
Despite being a lot clearer than Build's bit masking voodoo and using 64 bit math to avoid overflows it is roughly 10% faster. :)

Code was moved to gamefuncs.cpp because this no longer falls under the Build license.
2021-11-08 21:29:21 +01:00