Commit graph

555 commits

Author SHA1 Message Date
Christoph Oelckers
adbf5177a7 - flag combo stuff. 2021-12-30 09:56:46 +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
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
dddf48fd3e - cleaned up and renamed buildtypes.h.
Content was reordered so that the file can contain the inlines belonging to the map data types that previously had to be stored elsewhere.
Also moved out of the Build folder because virtually everything in here can be traced to content available in Duke Nukem 3D's and Shadow Warrior's source releases.
2021-12-30 09:53:46 +01:00
Christoph Oelckers
4a5de6f56e - make sure that all changes of wall coordinates invalidate associated data.
walltype::move should be the preferred function to be used for this, otherwise walltype::moved needs to be called.
2021-12-30 09:53:11 +01:00
Christoph Oelckers
69593fd5c7 - Triangulation WIP
# Conflicts:
#	source/core/sectorgeometry.cpp
2021-12-30 09:53:07 +01:00
Christoph Oelckers
504bb08a64 - we do not really need the old rintersect function.
Its only difference is using potentially overflowing 32 bit math for demo compatibility. Aside from that it has no real-life advantage.
2021-12-26 23:10:07 +01:00
Christoph Oelckers
d8ccfa1a5f - cleaned up nextsectorneighborz, added a safe variant and use this in all places where the sector pointer is not validated. 2021-12-26 23:10:05 +01:00
Mitchell Richters
1ee1c0c920 Revert "- fixed: updatesectorneighborz may not return -1."
This reverts commit c074b0995648a4057c516e5646f5fe7a11719317.

* The commit notes talk about `updatesectorneighborz()`, but the change is applied to `nextsectorneighborz()`. Further to this, `nextsectorneighborz()` is only called from some ptr wrappers in `build.h` and they both test against `-1` return values.

```
inline sectortype* nextsectorneighborzptr(int16_t sectnum, int32_t refz, int16_t topbottom, int16_t direction)
{
	auto sect = nextsectorneighborz(sectnum, refz, topbottom, direction);
	return sect == -1? nullptr : &sector[sect];
}

inline sectortype* nextsectorneighborzptr(sectortype* sectp, int32_t refz, int16_t topbottom, int16_t direction)
{
	auto sect = nextsectorneighborz(sector.IndexOf(sectp), refz, topbottom, direction);
	return sect == -1? nullptr : &sector[sect];
}
```

* Also fixes broken Duke elevators and possibly a whole raft of issues.
2021-12-26 23:10:04 +01:00
Christoph Oelckers
8e2d324e85 - fixed: updatesectorneighborz may not return -1.
This value gets never validated by any caller and isn't really what is wanted in this situation.
2021-12-26 23:10:03 +01:00
Christoph Oelckers
2a07159c8d - removed some unused and obsolete content from engine files. 2021-12-26 23:10:02 +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
d3b1e34d78 - moved sprite[], spriteext[] and spritesmooth[] into DCoreActor.
Also removed the last remaining sprite pointer in saveable data.
2021-12-26 23:09:55 +01:00
Christoph Oelckers
f855b1020f - actor lists refactored.
No more shorts, no more static arrays.
This was one of the biggest blockers for unlimiting the engine.
2021-12-26 23:09:54 +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
8c90f48b61 - cleanup of neartag, plus direct return of a HitInfoBase struct. 2021-12-26 23:09:52 +01:00
Christoph Oelckers
379c4f1a60 - merged the cansee wrapper into the actual function and added sector validation. 2021-12-26 23:09:50 +01:00
Christoph Oelckers
2654a19cfd - got rid of setspritez(x) and moved the implementation to SetActor(Z) without referencing the sprite array. 2021-12-26 23:09:49 +01:00
Christoph Oelckers
f9b1164747 - use point2Wall wherever possible. 2021-12-26 23:09:48 +01:00
Christoph Oelckers
ee1b574830 - engine stuff 2021-12-26 23:09:48 +01:00
Christoph Oelckers
a22634f228 - sectnum reduction. 2021-12-26 23:09:47 +01:00
Christoph Oelckers
12f6b05cbe - use access functions, all done by search & replace. 2021-12-26 23:09:44 +01:00
Christoph Oelckers
91e2391911 - adapted neartag in Duke. 2021-12-26 23:09:42 +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
69a7b4d0bc - final cleanup before replacement 2021-12-25 21:28:55 +01:00
Christoph Oelckers
8cca55c24a - made wall a TArray. 2021-12-25 21:28:50 +01:00
Christoph Oelckers
fded90c491 - SW: deleted SECT_USER. 2021-12-25 21:28:49 +01:00
Christoph Oelckers
7d2404ce76 - made sector a TArray. 2021-12-25 21:28:49 +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
ae8e642785 - templated updatesectorneighborz to eliminate redundancy with updatesectorneighbor 2021-12-25 21:28:36 +01:00
Christoph Oelckers
7daa501a4d - removed all #include "compat.h" except the one in build.h
Still all compiles fine.
2021-12-14 12:24:10 +01:00
Christoph Oelckers
7e2431ebd8 - replaced the remaining content from compat.h 2021-12-14 10:15:58 +01:00
Christoph Oelckers
64cad55d73 - fixed updatesector and changed updatesectorz to use the same search algorithm.
The initial distance check in updatesectorneighbor had a far too low threshold which would skip the breadth-first search for relatively small distances already.
Exhumed's LEV1 and Duke's Lunatic Fringe were the most obvious candidates where this could cause problems.
Changed to use a mixture of the original updatesector with the revised algorithm so that all immediate neighbors of the start sector will get visited unconditionally.

updatesectorz was still the original function from Shadow Warrior, this also was changed to use the same algorithm as uodatesector.
2021-11-30 00:15:25 +01:00
Christoph Oelckers
f765783437 - various small bits of cleanup. 2021-11-29 00:57:11 +01:00
Christoph Oelckers
3a259c9c46 - use BFSSearch in cansee and deleted the old variant originally used by Exhumed.
This old variant is only useful for demo compatibility, its main difference is that it does not handle slopes, which even for Exhumed is wrong with some custom maps.
2021-11-29 00:56:25 +01:00
Christoph Oelckers
4e31360fe4 - cleaned up dragpoint
This still contained some code for EDuke32's TROR and used a shared static global array.
It now uses the BFSSearch class to manage its bit array to unlimit the size of its working set and to avoid reallocation.
2021-11-29 00:56:25 +01:00
Christoph Oelckers
730b7492cb - moved bitmap_set and bitmap_test into clip.cpp and deleted unused inside_exclude_p function.
No longer used anywhere else and to be replaced with BitArray.
2021-11-29 00:55:45 +01:00
Christoph Oelckers
ae63bcd80b - use BFSSearch in updatesectorneighbor.
The old bfirst_* helpers are gone now.
2021-11-29 00:55:45 +01:00
Christoph Oelckers
53998c9cb7 - Blood: remove unneeded replacement functions.
changespritesect is the only one called from the engine.
2021-11-29 00:55:42 +01:00
Christoph Oelckers
5510efd920 - removed TROR specific parts of updatesectorz
None of this is ever called, in particular the parts that muck around with the sectorindex and add magic bits to it.
2021-11-08 23:11:29 +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
Christoph Oelckers
5cfc418c5f - did some tests with the inside function and decided to only retain the 'old' one.
The one from EDuke32 is ambiguous - it considers any point on a wall to be part of both sectors touching that wall. This wasn't used anyway with the current engine compatibility settings.
I was not able to get different values out of the 'ps' version - this seems to only be important for demo playback concerns, for regular playback the differences appear to be totally irrelevant.

Ultimately this should be replaced anyway with a license-unencumbered variant of the same basic common algorithm.
2021-11-08 19:46:22 +01:00
Christoph Oelckers
eeaa7f98f0 - inlines for validating sector and wall indices. 2021-11-08 18:56:10 +01:00
Christoph Oelckers
fd2764dc6e - Duke: eliminated all local short variables in actors*.cpp. 2021-11-07 16:30:55 +01:00
Christoph Oelckers
e2faeec2ce renamed all signed and unsigned chars to int8_t/uint8_t. 2021-11-07 16:30:55 +01:00
Christoph Oelckers
0eba3335c6 - eliminated some leftover 16 bit values used for storing indices. 2021-11-07 16:30:44 +01:00
Christoph Oelckers
1c0e3d849b - addressed the updatesector related deprecation warnings with Duke. 2021-11-06 20:46:08 +01:00
Christoph Oelckers
d20aa47adf - made sector parameter of updatesectorz an int and deprecated the short version. 2021-11-06 19:27:51 +01:00
Christoph Oelckers
83fe41e71e - made updatesector receive a 32 bit int pointer and deprecated the 16 bit variant. 2021-11-06 15:53:16 +01:00