This fixes player mercs' shading not updating based on the tile's lightlevel. Especially noticeable when running around at night in a map with lights (by Asdow).

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@9211 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Sevenfm
2021-11-05 04:42:01 +00:00
parent f9cfb5e831
commit f6fd480c45
+13 -4
View File
@@ -1043,12 +1043,21 @@ void RenderSetShadows(BOOLEAN fShadows)
inline UINT16 * GetShadeTable(LEVELNODE * pNode, SOLDIERTYPE * pSoldier, SOLDIERTYPE * pPaletteTable, UINT32 uiFlags, INT16 * gsForceSoldierZLevel) inline UINT16 * GetShadeTable(LEVELNODE * pNode, SOLDIERTYPE * pSoldier, SOLDIERTYPE * pPaletteTable, UINT32 uiFlags, INT16 * gsForceSoldierZLevel)
{ {
UINT16 * pShadeTable; UINT16 * pShadeTable;
// Shade guy always lighter than sceane default! // Shade guy always lighter than scene default!
{ {
UINT8 ubShadeLevel; const auto GridNo = pSoldier->sGridNo;
ubShadeLevel = (pNode->ubShadeLevel & 0x0f); UINT8 ubShadeLevel = gpWorldLevelData[GridNo].pLandHead->ubShadeLevel;
// If merc is on a roof, shade according to roof brightness
if (pSoldier->pathing.bLevel > 0 && gpWorldLevelData[GridNo].pRoofHead != NULL)
{
ubShadeLevel = gpWorldLevelData[GridNo].pRoofHead->ubShadeLevel;
}
ubShadeLevel = (ubShadeLevel & 0x0f);
ubShadeLevel = __max(ubShadeLevel - 2, DEFAULT_SHADE_LEVEL); ubShadeLevel = __max(ubShadeLevel - 2, DEFAULT_SHADE_LEVEL);
ubShadeLevel |= (pNode->ubShadeLevel & 0x30); ubShadeLevel |= (ubShadeLevel & 0x30);
if (pSoldier->flags.fBeginFade) if (pSoldier->flags.fBeginFade)
{ {
pShadeTable = pPaletteTable->pCurrentShade = pPaletteTable->pShades[pSoldier->ubFadeLevel]; pShadeTable = pPaletteTable->pCurrentShade = pPaletteTable->pShades[pSoldier->ubFadeLevel];