diasurgical / devilutionX

Diablo build for modern operating systems
Other
8.01k stars 786 forks source link

Fix stairs rendering in Caves and Hell #7439

Closed glebm closed 2 days ago

glebm commented 3 days ago

Stairs can have the same TileProperties as floors but do not always follor the same graphics layout as floors, so we shouldn't apply optimizations to them.

The only stairs that are affected seem to be:

  1. Hell: tile 46 sub-tile 141 frame 386 (TileProperties: BlocksMissile)
  2. Caves: tile 48 sub-tile 171 frame 461 (TileProperties: None)

Note that the few broken in pixels in caves are actually incorrectly attributed to the non-Solid tile, really they should be part of the solid tile 49.

As there doesn't seem to be a quick and easy way to check if a frame is part of Stairs, we add a check for BlocksMissile tile property instead.

This fixes Hell but isn't enough to fix Caves. To fix Caves, we then add a BlocksMissile flag to the broken sub-tile.

Fixes #7420

Broken hell tile: Screenshot from 2024-09-27 06-39-47

Broken caves tile: image

AJenbo commented 2 days ago

image

StephenCWills commented 2 days ago

Nice solution. I'm assuming that the caves down stairs where already blocking missiles?

Caves stairs are always up against a wall, right? Does it matter?

AJenbo commented 2 days ago

If it isn't we need to apply the property to it to also fix that case. I'm just wondering if there was an oversight and the PR is only fixing 2/3 cases.

AJenbo commented 2 days ago

Confirmed that all 3 cases are indeed fixed :)