mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
Brief: //dnl ch83
- Fix BigMaps cliff-prone problem. Details: - Bug which prevent merc to go prone and crawl in big maps with cliffs was reported by Buggler who already find source of problem which lies in DB_STRUCTURE_TILE struct variable sPosRelToBase. This variable contains relative position to base tile which and cannot simply be change to INT32 as data from JSD files are loaded into it. However reason for problem is because sPosRelToBase is not updated for quite bunch of structures when map size is changed so add macro which in real time perform conversion and update sPosRelToBase value. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6740 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -509,7 +509,11 @@ BOOLEAN AddToUndoListCmd( INT32 iMapIndex, INT32 iCmdCount )
|
||||
{
|
||||
// this loop won't execute for single-tile structures; for multi-tile structures, we have to
|
||||
// add to the undo list all the other tiles covered by the structure
|
||||
#if 0//dnl ch83 080114
|
||||
iCoveredMapIndex = pStructure->sBaseGridNo + pStructure->pDBStructureRef->ppTile[ubLoop]->sPosRelToBase;
|
||||
#else
|
||||
iCoveredMapIndex = AddPosRelToBase(pStructure->sBaseGridNo, pStructure->pDBStructureRef->ppTile[ubLoop]);
|
||||
#endif
|
||||
AddToUndoList( iCoveredMapIndex );
|
||||
}
|
||||
pStructure = pStructure->pNext;
|
||||
@@ -537,11 +541,19 @@ void CheckMapIndexForMultiTileStructures( UINT32 usMapIndex )
|
||||
// for multi-tile structures we have to add, to the undo list, all the other tiles covered by the structure
|
||||
if (pStructure->fFlags & STRUCTURE_BASE_TILE)
|
||||
{
|
||||
#if 0//dnl ch83 080114
|
||||
iCoveredMapIndex = usMapIndex + pStructure->pDBStructureRef->ppTile[ubLoop]->sPosRelToBase;
|
||||
#else
|
||||
iCoveredMapIndex = AddPosRelToBase(usMapIndex, pStructure->pDBStructureRef->ppTile[ubLoop]);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
#if 0//dnl ch83 080114
|
||||
iCoveredMapIndex = pStructure->sBaseGridNo + pStructure->pDBStructureRef->ppTile[ubLoop]->sPosRelToBase;
|
||||
#else
|
||||
iCoveredMapIndex = AddPosRelToBase(pStructure->sBaseGridNo, pStructure->pDBStructureRef->ppTile[ubLoop]);
|
||||
#endif
|
||||
}
|
||||
AddToUndoList( iCoveredMapIndex );
|
||||
}
|
||||
|
||||
@@ -659,9 +659,11 @@ INT32 AddRottingCorpse( ROTTING_CORPSE_DEFINITION *pCorpseDef )
|
||||
for (ubLoop = 0; ubLoop < pDBStructureRef->pDBStructure->ubNumberOfTiles; ubLoop++)
|
||||
{
|
||||
ppTile = pDBStructureRef->ppTile;
|
||||
|
||||
#if 0//dnl ch83 080114
|
||||
sTileGridNo = pCorpseDef->sGridNo + ppTile[ ubLoop ]->sPosRelToBase;
|
||||
|
||||
#else
|
||||
sTileGridNo = AddPosRelToBase(pCorpseDef->sGridNo, ppTile[ubLoop]);
|
||||
#endif
|
||||
//Remove blood
|
||||
RemoveBlood( sTileGridNo, pCorpseDef->bLevel );
|
||||
}
|
||||
|
||||
@@ -838,7 +838,11 @@ BOOLEAN ExplosiveDamageStructureAtGridNo( STRUCTURE * pCurrent, STRUCTURE **ppNe
|
||||
{
|
||||
if ( !(ppTile[ ubLoop ]->fFlags & TILE_ON_ROOF ) )
|
||||
{
|
||||
#if 0//dnl ch83 080114
|
||||
sStructGridNo = pBase->sGridNo + ppTile[ubLoop]->sPosRelToBase;
|
||||
#else
|
||||
sStructGridNo = AddPosRelToBase(pBase->sGridNo, ppTile[ubLoop]);
|
||||
#endif
|
||||
// there might be two structures in this tile, one on each level, but we just want to
|
||||
// delete one on each pass
|
||||
|
||||
@@ -1461,8 +1465,11 @@ void ExplosiveDamageGridNo( INT32 sGridNo, INT16 sWoundAmt, UINT32 uiDist, BOOLE
|
||||
|
||||
for ( ubLoop = BASE_TILE; ubLoop < ubNumberOfTiles; ubLoop++)
|
||||
{
|
||||
#if 0//dnl ch83 080114
|
||||
sNewGridNo = sBaseGridNo + ppTile[ubLoop]->sPosRelToBase;
|
||||
|
||||
#else
|
||||
sNewGridNo = AddPosRelToBase(sBaseGridNo, ppTile[ubLoop]);
|
||||
#endif
|
||||
// look in adjacent tiles
|
||||
for ( ubLoop2 = 0; ubLoop2 < NUM_WORLD_DIRECTIONS; ubLoop2++ )
|
||||
{
|
||||
|
||||
@@ -216,8 +216,11 @@ void ExamineGridNoForSlantRoofExtraGraphic( INT32 sCheckGridNo )
|
||||
for ( ubLoop = 0; ubLoop < pBase->pDBStructureRef->pDBStructure->ubNumberOfTiles; ubLoop++ )
|
||||
{
|
||||
ppTile = pBase->pDBStructureRef->ppTile;
|
||||
#if 0//dnl ch83 080114
|
||||
sGridNo = pBase->sGridNo + ppTile[ ubLoop ]->sPosRelToBase;
|
||||
|
||||
#else
|
||||
sGridNo = AddPosRelToBase(pBase->sGridNo, ppTile[ubLoop]);
|
||||
#endif
|
||||
if (sGridNo < 0 || sGridNo > WORLD_MAX)
|
||||
{
|
||||
continue;
|
||||
|
||||
@@ -123,6 +123,8 @@ extern UINT8 AtHeight[PROFILE_Z_SIZE];
|
||||
#define TILE_ON_ROOF 0x01
|
||||
#define TILE_PASSABLE 0x02
|
||||
|
||||
#define AddPosRelToBase(sBaseGridNo, pTile) (pTile->sPosRelToBase ? (sBaseGridNo + pTile->bXPosRelToBase + pTile->bYPosRelToBase * WORLD_COLS) : sBaseGridNo)//dnl ch83 080114
|
||||
|
||||
typedef struct TAG_STRUCTURE_TILE
|
||||
{
|
||||
INT16 sPosRelToBase; // "single-axis"
|
||||
|
||||
@@ -636,7 +636,11 @@ BOOLEAN OkayToAddStructureToTile( INT32 sBaseGridNo, INT16 sCubeOffset, DB_STRUC
|
||||
INT32 sOtherGridNo;
|
||||
|
||||
ppTile = pDBStructureRef->ppTile;
|
||||
#if 0//dnl ch83 080114
|
||||
sGridNo = sBaseGridNo + ppTile[ubTileIndex]->sPosRelToBase;
|
||||
#else
|
||||
sGridNo = AddPosRelToBase(sBaseGridNo, ppTile[ubTileIndex]);
|
||||
#endif
|
||||
if (sGridNo < 0 || sGridNo > WORLD_MAX)
|
||||
{
|
||||
return( FALSE );
|
||||
@@ -742,11 +746,16 @@ BOOLEAN OkayToAddStructureToTile( INT32 sBaseGridNo, INT16 sCubeOffset, DB_STRUC
|
||||
}
|
||||
for (bLoop2 = 0; bLoop2 < pDBStructure->ubNumberOfTiles; bLoop2++)
|
||||
{
|
||||
#if 0//dnl ch83 080114
|
||||
if ( sBaseGridNo + ppTile[bLoop2]->sPosRelToBase == sOtherGridNo)
|
||||
{
|
||||
// obstacle will straddle wall!
|
||||
return( FALSE );
|
||||
}
|
||||
#else
|
||||
if(AddPosRelToBase(sBaseGridNo, ppTile[bLoop2]) == sOtherGridNo)
|
||||
return(FALSE);// obstacle will straddle wall!
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -988,7 +997,11 @@ STRUCTURE * InternalAddStructureToWorld( INT32 sBaseGridNo, INT8 bLevel, DB_STRU
|
||||
MemFree( ppStructure );
|
||||
return( NULL );
|
||||
}
|
||||
#if 0//dnl ch83 080114
|
||||
ppStructure[ubLoop]->sGridNo = sBaseGridNo + ppTile[ubLoop]->sPosRelToBase;
|
||||
#else
|
||||
ppStructure[ubLoop]->sGridNo = AddPosRelToBase(sBaseGridNo, ppTile[ubLoop]);
|
||||
#endif
|
||||
if (ubLoop != BASE_TILE)
|
||||
{
|
||||
#ifdef JA2EDITOR
|
||||
@@ -1196,7 +1209,11 @@ BOOLEAN DeleteStructureFromWorld( STRUCTURE * pStructure )
|
||||
// Free all the tiles
|
||||
for (ubLoop = BASE_TILE; ubLoop < ubNumberOfTiles; ubLoop++)
|
||||
{
|
||||
#if 0//dnl ch83 080114
|
||||
sGridNo = sBaseGridNo + ppTile[ubLoop]->sPosRelToBase;
|
||||
#else
|
||||
sGridNo = AddPosRelToBase(sBaseGridNo, ppTile[ubLoop]);
|
||||
#endif
|
||||
// there might be two structures in this tile, one on each level, but we just want to
|
||||
// delete one on each pass
|
||||
pCurrent = FindStructureByID( sGridNo, usStructureID );
|
||||
|
||||
Reference in New Issue
Block a user