The pre-calculated crawl table is replaced with partially unrolled loops to handle the special cases covered by the table.
Arbitrary limit of 50 placed to allow using this function for searches where vanilla logic would check up to (±49, ±49).
With 1.3.0, we switched from CEL to PCX for fonts.
This resulted in significant performance drops when rendering lots of
text, because SDL RLE implementation is not as optimized as our CEL
implementation.
Disabling RLE significantly reduces the performance drop.
The font surfaces are fairly small, so we do not lose out much on RAM.
The menu surfaces are also PCX, so the RAM usage there is
greater, but the game itself uses a lot more RAM than the menu anyway.
Thanks to @AJenbo for discovering the RLE flag as the root cause
of font rendering performance issues!
libmpq is a much simpler alternative to StormLib for reading MPQ archives.
We use our own fork of libmpq: https://github.com/diasurgical/libmpq
Impact:
* DevilutionX is now a lot more portable. Unlike StormLib, libmpq only
needs platform-specific code for Windows.
* Locks around file access **removed** (instead we duplicate the file descriptor for streamed audio only).
* RAM usage is **300 KiB** lower than StormLib.
* Stripped release linux_x86_64 binary is **32 KiB** smaller.
* Amiga build now hangs instead of crashing.
* Add helper to test if an object is a trap source
* Add helper to test if an object is a barrel
* Add helper to test if an object is a crucifix
* Add helpers to check if an object is a chest (and statuses)
* Add helpers to check if an object is a (basic) shrine
The bounds checks were performed against the global screen dimensions
instead of the output buffer dimensions.
Also includes some minor cleanup of DrawArt.
Fixes#3388
The bounds checks were performed against the global screen dimensions
instead of the output buffer dimensions.
Also includes some minor cleanup of DrawArt.
Fixes#3388
While it does reference a global configuration option it's mainly concerned with the properties of the object itself, so makes sense to be a member of the object class.