diff --git a/GameSettings.cpp b/GameSettings.cpp index 72905067..47be2d1b 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -1486,6 +1486,8 @@ void LoadGameExternalOptions() // anv: detailed tileset terrain types gGameExternalOptions.fAdditionalTileProperties = iniReader.ReadBoolean("Tactical Cover System Settings", "COVER_SYSTEM_ADDITIONAL_TILE_PROPERTIES", TRUE ); + // static shadows decrease brightness + gGameExternalOptions.fStaticShadowsDecreaseBrightness = iniReader.ReadBoolean("Tactical Cover System Settings", "COVER_SYSTEM_STATIC_SHADOWS_DECREASE_BRIGHTNESS", FALSE ); //################# Tactical Suppression Fire Settings ################## // These settings control the behavior of Suppression Fire, its severity, and its side-effects. diff --git a/GameSettings.h b/GameSettings.h index 3cad69b5..b0e974fd 100644 --- a/GameSettings.h +++ b/GameSettings.h @@ -846,6 +846,8 @@ typedef struct // anv: additional tile properties BOOLEAN fAdditionalTileProperties; + // static shadows decrease brightness + BOOLEAN fStaticShadowsDecreaseBrightness; // HEADROCK HAM B1: Global modifier for mine income (0 is automatically turned to 1 to avoid divide-by-zero.) INT16 usMineIncomePercentage; diff --git a/Tactical/Handle Items.cpp b/Tactical/Handle Items.cpp index 3c8882ed..dc16aaab 100644 --- a/Tactical/Handle Items.cpp +++ b/Tactical/Handle Items.cpp @@ -1826,6 +1826,14 @@ void HandleSoldierDropBomb( SOLDIERTYPE *pSoldier, INT32 sGridNo ) if ( pSoldier->HasBackgroundFlag( BACKGROUND_TRAPLEVEL ) ) pSoldier->inv[ HANDPOS ][0]->data.bTrap++; + // anv: additional tile properties - modify trap level depending on its placement + if(gGameExternalOptions.fAdditionalTileProperties && Item[ pSoldier->inv[ HANDPOS ].usItem ].tripwire != 1 ) + { + ADDITIONAL_TILE_PROPERTIES_VALUES zAllTileValues = GetAllAdditonalTilePropertiesForGrid( sGridNo, pSoldier->pathing.bLevel ); + pSoldier->inv[ HANDPOS ][0]->data.bTrap += zAllTileValues.bTrapBonus; + } + pSoldier->inv[ HANDPOS ][0]->data.bTrap = __max( 0, pSoldier->inv[ HANDPOS ][0]->data.bTrap ); + pSoldier->inv[ HANDPOS ][0]->data.misc.ubBombOwner = pSoldier->ubID + 2; // Flugente: determine the direction we are looking at and apply that direction to our explosive @@ -5765,6 +5773,7 @@ BOOLEAN NearbyGroundSeemsWrong( SOLDIERTYPE * pSoldier, INT32 sGridNo, BOOLEAN f BOOLEAN fMining, fFoundMetal = FALSE; // ITEM_POOL * pItemPool; UINT8 ubMovementCost; + INT8 bTrapBonus = 0; ubDetectLevel = 0; diff --git a/Tactical/XML_AdditionalTileProperties.cpp b/Tactical/XML_AdditionalTileProperties.cpp index bf007aa4..3100f259 100644 --- a/Tactical/XML_AdditionalTileProperties.cpp +++ b/Tactical/XML_AdditionalTileProperties.cpp @@ -45,6 +45,7 @@ additionalTilePropertyStartElementHandle(void *userData, const XML_Char *name, c strcmp(name, "bCamoStanceModifer") == 0 || strcmp(name, "bSoundModifier") == 0 || strcmp(name, "bStealthDifficultyModifer") == 0 || + strcmp(name, "bTrapBonus") == 0 || strcmp(name, "fBlockedWindow") == 0 )) { @@ -122,6 +123,11 @@ additionalTilePropertyEndElementHandle(void *userData, const XML_Char *name) pData->curElement = ELEMENT; zAdditionalTileProperties.bStealthDifficultyModifer = (INT8) atol(pData->szCharData); } + else if(strcmp(name, "bTrapBonus") == 0) + { + pData->curElement = ELEMENT; + zAdditionalTileProperties.bTrapBonus = (INT8) atol(pData->szCharData); + } else if(strcmp(name, "fBlockedWindow") == 0) { pData->curElement = ELEMENT; diff --git a/TileEngine/Tile Surface.cpp b/TileEngine/Tile Surface.cpp index 638f68f8..06bc9b31 100644 --- a/TileEngine/Tile Surface.cpp +++ b/TileEngine/Tile Surface.cpp @@ -125,9 +125,9 @@ TILE_IMAGERY *LoadTileSurface( STR8 cFilename ) } else { - // and if not found, then in /Tilesets/ + // and if not found, then in /AdditionalProperties/ cEndOfName = strrchr( cAdditionalPropertiesFilename, '\\' ); - sprintf( cCommonAdditionalPropertiesFilename, "TILESETS\\ADDITIONALPROPERTIES%s", cEndOfName ); + sprintf( cCommonAdditionalPropertiesFilename, "ADDITIONALPROPERTIES%s", cEndOfName ); if (FileExists( cCommonAdditionalPropertiesFilename )) { DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("LoadExternalGameplayData, fileName = %s", fileName)); @@ -155,6 +155,8 @@ TILE_IMAGERY *LoadTileSurface( STR8 cFilename ) pTileSurf->bCamoStanceModifer = zAdditionalTileProperties.bCamoStanceModifer; pTileSurf->bStealthDifficultyModifer = zAdditionalTileProperties.bStealthDifficultyModifer; + pTileSurf->bTrapBonus = zAdditionalTileProperties.bTrapBonus; + pTileSurf->uiAdditionalFlags = zAdditionalTileProperties.uiAdditionalFlags; if (pStructureFileRef && pStructureFileRef->pAuxData != NULL) diff --git a/TileEngine/TileDat.cpp b/TileEngine/TileDat.cpp index c61d9c2d..5673e045 100644 --- a/TileEngine/TileDat.cpp +++ b/TileEngine/TileDat.cpp @@ -960,6 +960,7 @@ void SetSpecificDatabaseValues( UINT16 usType, UINT16 uiDatabaseElem, TILE_ELEME TileElement->bSoundModifier = 0; TileElement->bCamoStanceModifer= 0; TileElement->bStealthDifficultyModifer = 0; + TileElement->bTrapBonus = 0; TileElement->uiAdditionalFlags = 0; } } diff --git a/TileEngine/lighting.cpp b/TileEngine/lighting.cpp index 04540323..bc74b666 100644 --- a/TileEngine/lighting.cpp +++ b/TileEngine/lighting.cpp @@ -754,6 +754,23 @@ UINT8 LightTrueLevel( INT32 sGridNo, INT16 bLevel ) { iSum=pNode->ubNaturalShadeLevel - (pNode->ubSumLights - pNode->ubFakeShadeLevel ); + if(gGameExternalOptions.fStaticShadowsDecreaseBrightness && ( gRenderFlags & RENDER_FLAG_SHADOWS )) + { + INT32 sNewGridNo = NewGridNo( sGridNo, (UINT16)DirectionInc( NORTH ) ); + STRUCTURE* pStructure = gpWorldLevelData[ sNewGridNo ].pStructureHead; + if(pStructure != NULL) + { + LEVELNODE* pShadowNode = NULL; + if(!(pStructure->fFlags & STRUCTURE_BASE_TILE)) + pShadowNode = gpWorldLevelData[ FindBaseStructure(pStructure)->sGridNo ].pShadowHead; + else + pShadowNode = gpWorldLevelData[ sNewGridNo ].pShadowHead; + if(pShadowNode != NULL) + { + iSum += max( 0, (StructureHeight(pStructure) - 1 ) ); + } + } + } iSum=__min(SHADE_MIN, iSum); iSum=__max(SHADE_MAX, iSum); return( (UINT8) iSum ); diff --git a/TileEngine/tiledef.cpp b/TileEngine/tiledef.cpp index ad33ba3b..39cd4744 100644 --- a/TileEngine/tiledef.cpp +++ b/TileEngine/tiledef.cpp @@ -694,6 +694,8 @@ void CreateTileDatabase( INT32 iTilesetID ) TileElement.bSoundModifier = TileSurf->bSoundModifier; TileElement.bStealthDifficultyModifer = TileSurf->bStealthDifficultyModifer; + TileElement.bTrapBonus = TileSurf->bTrapBonus; + TileElement.uiAdditionalFlags = TileSurf->uiAdditionalFlags; // Check for multi-z stuff diff --git a/TileEngine/tiledef.h b/TileEngine/tiledef.h index 765a9f55..b49442b8 100644 --- a/TileEngine/tiledef.h +++ b/TileEngine/tiledef.h @@ -92,6 +92,8 @@ typedef struct INT8 bSoundModifier; INT8 bStealthDifficultyModifer; + INT8 bTrapBonus; + UINT32 uiAdditionalFlags; @@ -151,6 +153,8 @@ typedef struct INT8 bSoundModifier; INT8 bStealthDifficultyModifer; + INT8 bTrapBonus; + UINT32 uiAdditionalFlags; @@ -196,10 +200,11 @@ typedef struct INT8 bSoundModifier; INT8 bStealthDifficultyModifer; + INT8 bTrapBonus; + UINT32 uiAdditionalFlags; } ADDITIONAL_TILE_PROPERTIES_VALUES; - extern ADDITIONAL_TILE_PROPERTIES_VALUES zAdditionalTileProperties; void CreateTileDatabase( INT32 iTilesetID );