aboutsummaryrefslogtreecommitdiff
path: root/engines/dm/dungeonman.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/dm/dungeonman.cpp')
-rw-r--r--engines/dm/dungeonman.cpp348
1 files changed, 174 insertions, 174 deletions
diff --git a/engines/dm/dungeonman.cpp b/engines/dm/dungeonman.cpp
index df61b45149..d75e92b124 100644
--- a/engines/dm/dungeonman.cpp
+++ b/engines/dm/dungeonman.cpp
@@ -368,51 +368,51 @@ void DungeonMan::mapCoordsAfterRelMovement(direction dir, int16 stepsForward, in
posY += _vm->_dirIntoStepCountNorth[dir] * stepsRight;
}
-DungeonMan::DungeonMan(DMEngine *dmEngine) : _vm(dmEngine), _rawDunFileData(NULL), _g277_maps(NULL), _g276_rawMapData(NULL) {
- _dunData._g282_columCount = 0;
+DungeonMan::DungeonMan(DMEngine *dmEngine) : _vm(dmEngine), _rawDunFileData(NULL), _g277_dungeonMaps(NULL), _g276_dungeonRawMapData(NULL) {
+ _g282_dungeonColumCount = 0;
- _dunData._g281_mapsFirstColumnIndex = nullptr;
- _dunData._g280_columnsCumulativeSquareThingCount = nullptr;
- _dunData._g283_squareFirstThings = nullptr;
- _dunData._g260_textData = nullptr;
- _dunData._g279_mapData = nullptr;
+ _g281_dungeonMapsFirstColumnIndex = nullptr;
+ _g280_dungeonColumnsCumulativeSquareThingCount = nullptr;
+ _g283_squareFirstThings = nullptr;
+ _g260_dungeonTextData = nullptr;
+ _g279_dungeonMapData = nullptr;
for (int i = 0; i < 16; i++)
- _dunData._g284_thingsData[i] = nullptr;
+ _g284_thingData[i] = nullptr;
- _currMap._g308_partyDir = kDirNorth;
- _currMap._g306_partyPosX = 0;
- _currMap._g307_partyPosY = 0;
- _currMap._g309_currPartyMapIndex = 0;
- _currMap._g272_index = 0;
- _currMap._g273_width = 0;
- _currMap._g274_height = 0;
+ _g308_partyDir = kDirNorth;
+ _g306_partyMapX = 0;
+ _g307_partyMapY = 0;
+ _g309_partyMapIndex = 0;
+ _g272_currMapIndex = 0;
+ _g273_currMapWidth = 0;
+ _g274_currMapHeight = 0;
- _currMap._g271_data = nullptr;
- _currMap._g269_map = nullptr;
- _currMap._g270_colCumulativeSquareFirstThingCount = nullptr;
+ _g271_currMapData = nullptr;
+ _g269_currMap = nullptr;
+ _g270_currMapColCumulativeSquareFirstThingCount = nullptr;
- _messages._g298_newGame = true;
- _messages._g523_restartGameRequest = false;
+ _vm->_g298_newGame = true;
+ _vm->_g523_restartGameRequest = false;
_rawDunFileDataSize = 0;
_rawDunFileData = nullptr;
- _g278_fileHeader._dungeonId = 0;
- _g278_fileHeader._ornamentRandomSeed = 0;
- _g278_fileHeader._rawMapDataSize = 0;
- _g278_fileHeader._mapCount = 0;
- _g278_fileHeader._textDataWordCount = 0;
- _g278_fileHeader._partyStartDir = kDirNorth;
- _g278_fileHeader._partyStartPosX = 0;
- _g278_fileHeader._partyStartPosY = 0;
- _g278_fileHeader._squareFirstThingCount = 0;
+ _g278_dungeonFileHeader._dungeonId = 0;
+ _g278_dungeonFileHeader._ornamentRandomSeed = 0;
+ _g278_dungeonFileHeader._rawMapDataSize = 0;
+ _g278_dungeonFileHeader._mapCount = 0;
+ _g278_dungeonFileHeader._textDataWordCount = 0;
+ _g278_dungeonFileHeader._partyStartDir = kDirNorth;
+ _g278_dungeonFileHeader._partyStartPosX = 0;
+ _g278_dungeonFileHeader._partyStartPosY = 0;
+ _g278_dungeonFileHeader._squareFirstThingCount = 0;
for (int i = 0; i < 16; i++)
- _g278_fileHeader._thingCounts[i] = 0;
+ _g278_dungeonFileHeader._thingCounts[i] = 0;
- _g277_maps = nullptr;
- _g276_rawMapData = nullptr;
+ _g277_dungeonMaps = nullptr;
+ _g276_dungeonRawMapData = nullptr;
_g265_currMapInscriptionWallOrnIndex = 0;
_g286_isFacingAlcove = false;
@@ -425,16 +425,16 @@ DungeonMan::DungeonMan(DMEngine *dmEngine) : _vm(dmEngine), _rawDunFileData(NULL
DungeonMan::~DungeonMan() {
delete[] _rawDunFileData;
- delete[] _g277_maps;
- delete[] _dunData._g281_mapsFirstColumnIndex;
- delete[] _dunData._g280_columnsCumulativeSquareThingCount;
- delete[] _dunData._g283_squareFirstThings;
- delete[] _dunData._g260_textData;
- delete[] _dunData._g279_mapData;
+ delete[] _g277_dungeonMaps;
+ delete[] _g281_dungeonMapsFirstColumnIndex;
+ delete[] _g280_dungeonColumnsCumulativeSquareThingCount;
+ delete[] _g283_squareFirstThings;
+ delete[] _g260_dungeonTextData;
+ delete[] _g279_dungeonMapData;
for (uint16 i = 0; i < 16; ++i) {
- if (_dunData._g284_thingsData[i])
- delete[] _dunData._g284_thingsData[i][0];
- delete[] _dunData._g284_thingsData[i];
+ if (_g284_thingData[i])
+ delete[] _g284_thingData[i][0];
+ delete[] _g284_thingData[i];
}
}
@@ -551,177 +551,177 @@ const Thing Thing::_explRebirthStep2(0xFFE5); // @ C0xFFE5_THING_EXPLOSION_REBIR
const Thing Thing::_party(0xFFFF); // @ C0xFFFF_THING_PARTY
void DungeonMan::loadDungeonFile() {
- if (_messages._g298_newGame)
+ if (_vm->_g298_newGame)
decompressDungeonFile();
Common::MemoryReadStream dunDataStream(_rawDunFileData, _rawDunFileDataSize, DisposeAfterUse::NO);
- // initialize _g278_fileHeader
- _g278_fileHeader._dungeonId = _g278_fileHeader._ornamentRandomSeed = dunDataStream.readUint16BE();
- _g278_fileHeader._rawMapDataSize = dunDataStream.readUint16BE();
- _g278_fileHeader._mapCount = dunDataStream.readByte();
+ // initialize _g278_dungeonFileHeader
+ _g278_dungeonFileHeader._dungeonId = _g278_dungeonFileHeader._ornamentRandomSeed = dunDataStream.readUint16BE();
+ _g278_dungeonFileHeader._rawMapDataSize = dunDataStream.readUint16BE();
+ _g278_dungeonFileHeader._mapCount = dunDataStream.readByte();
dunDataStream.readByte(); // discard 1 byte
- _g278_fileHeader._textDataWordCount = dunDataStream.readUint16BE();
+ _g278_dungeonFileHeader._textDataWordCount = dunDataStream.readUint16BE();
uint16 partyPosition = dunDataStream.readUint16BE();
- _g278_fileHeader._partyStartDir = (direction)((partyPosition >> 10) & 3);
- _g278_fileHeader._partyStartPosY = (partyPosition >> 5) & 0x1F;
- _g278_fileHeader._partyStartPosX = (partyPosition >> 0) & 0x1F;
- _g278_fileHeader._squareFirstThingCount = dunDataStream.readUint16BE();
+ _g278_dungeonFileHeader._partyStartDir = (direction)((partyPosition >> 10) & 3);
+ _g278_dungeonFileHeader._partyStartPosY = (partyPosition >> 5) & 0x1F;
+ _g278_dungeonFileHeader._partyStartPosX = (partyPosition >> 0) & 0x1F;
+ _g278_dungeonFileHeader._squareFirstThingCount = dunDataStream.readUint16BE();
for (uint16 i = 0; i < k16_ThingTypeTotal; ++i)
- _g278_fileHeader._thingCounts[i] = dunDataStream.readUint16BE();
+ _g278_dungeonFileHeader._thingCounts[i] = dunDataStream.readUint16BE();
// init party position and mapindex
- if (_messages._g298_newGame) {
- _currMap._g308_partyDir = _g278_fileHeader._partyStartDir;
- _currMap._g306_partyPosX = _g278_fileHeader._partyStartPosX;
- _currMap._g307_partyPosY = _g278_fileHeader._partyStartPosY;
- _currMap._g309_currPartyMapIndex = 0;
+ if (_vm->_g298_newGame) {
+ _g308_partyDir = _g278_dungeonFileHeader._partyStartDir;
+ _g306_partyMapX = _g278_dungeonFileHeader._partyStartPosX;
+ _g307_partyMapY = _g278_dungeonFileHeader._partyStartPosY;
+ _g309_partyMapIndex = 0;
}
// load map data
- delete[] _g277_maps;
- _g277_maps = new Map[_g278_fileHeader._mapCount];
- for (uint16 i = 0; i < _g278_fileHeader._mapCount; ++i) {
- _g277_maps[i]._rawDunDataOffset = dunDataStream.readUint16BE();
+ delete[] _g277_dungeonMaps;
+ _g277_dungeonMaps = new Map[_g278_dungeonFileHeader._mapCount];
+ for (uint16 i = 0; i < _g278_dungeonFileHeader._mapCount; ++i) {
+ _g277_dungeonMaps[i]._rawDunDataOffset = dunDataStream.readUint16BE();
dunDataStream.readUint32BE(); // discard 4 bytes
- _g277_maps[i]._offsetMapX = dunDataStream.readByte();
- _g277_maps[i]._offsetMapY = dunDataStream.readByte();
+ _g277_dungeonMaps[i]._offsetMapX = dunDataStream.readByte();
+ _g277_dungeonMaps[i]._offsetMapY = dunDataStream.readByte();
uint16 tmp = dunDataStream.readUint16BE();
- _g277_maps[i]._height = tmp >> 11;
- _g277_maps[i]._width = (tmp >> 6) & 0x1F;
- _g277_maps[i]._level = tmp & 0x1F; // Only used in DMII
+ _g277_dungeonMaps[i]._height = tmp >> 11;
+ _g277_dungeonMaps[i]._width = (tmp >> 6) & 0x1F;
+ _g277_dungeonMaps[i]._level = tmp & 0x1F; // Only used in DMII
tmp = dunDataStream.readUint16BE();
- _g277_maps[i]._randFloorOrnCount = tmp >> 12;
- _g277_maps[i]._floorOrnCount = (tmp >> 8) & 0xF;
- _g277_maps[i]._randWallOrnCount = (tmp >> 4) & 0xF;
- _g277_maps[i]._wallOrnCount = tmp & 0xF;
+ _g277_dungeonMaps[i]._randFloorOrnCount = tmp >> 12;
+ _g277_dungeonMaps[i]._floorOrnCount = (tmp >> 8) & 0xF;
+ _g277_dungeonMaps[i]._randWallOrnCount = (tmp >> 4) & 0xF;
+ _g277_dungeonMaps[i]._wallOrnCount = tmp & 0xF;
tmp = dunDataStream.readUint16BE();
- _g277_maps[i]._difficulty = tmp >> 12;
- _g277_maps[i]._creatureTypeCount = (tmp >> 4) & 0xF;
- _g277_maps[i]._doorOrnCount = tmp & 0xF;
+ _g277_dungeonMaps[i]._difficulty = tmp >> 12;
+ _g277_dungeonMaps[i]._creatureTypeCount = (tmp >> 4) & 0xF;
+ _g277_dungeonMaps[i]._doorOrnCount = tmp & 0xF;
tmp = dunDataStream.readUint16BE();
- _g277_maps[i]._doorSet1 = (tmp >> 12) & 0xF;
- _g277_maps[i]._doorSet0 = (tmp >> 8) & 0xF;
- _g277_maps[i]._wallSet = (WallSet)((tmp >> 4) & 0xF);
- _g277_maps[i]._floorSet = (FloorSet)(tmp & 0xF);
+ _g277_dungeonMaps[i]._doorSet1 = (tmp >> 12) & 0xF;
+ _g277_dungeonMaps[i]._doorSet0 = (tmp >> 8) & 0xF;
+ _g277_dungeonMaps[i]._wallSet = (WallSet)((tmp >> 4) & 0xF);
+ _g277_dungeonMaps[i]._floorSet = (FloorSet)(tmp & 0xF);
}
// TODO: ??? is this - begin
- delete[] _dunData._g281_mapsFirstColumnIndex;
- _dunData._g281_mapsFirstColumnIndex = new uint16[_g278_fileHeader._mapCount];
+ delete[] _g281_dungeonMapsFirstColumnIndex;
+ _g281_dungeonMapsFirstColumnIndex = new uint16[_g278_dungeonFileHeader._mapCount];
uint16 columCount = 0;
- for (uint16 i = 0; i < _g278_fileHeader._mapCount; ++i) {
- _dunData._g281_mapsFirstColumnIndex[i] = columCount;
- columCount += _g277_maps[i]._width + 1;
+ for (uint16 i = 0; i < _g278_dungeonFileHeader._mapCount; ++i) {
+ _g281_dungeonMapsFirstColumnIndex[i] = columCount;
+ columCount += _g277_dungeonMaps[i]._width + 1;
}
- _dunData._g282_columCount = columCount;
+ _g282_dungeonColumCount = columCount;
// TODO: ??? is this - end
- uint32 actualSquareFirstThingCount = _g278_fileHeader._squareFirstThingCount;
- if (_messages._g298_newGame) // TODO: what purpose does this serve?
- _g278_fileHeader._squareFirstThingCount += 300;
+ uint32 actualSquareFirstThingCount = _g278_dungeonFileHeader._squareFirstThingCount;
+ if (_vm->_g298_newGame) // TODO: what purpose does this serve?
+ _g278_dungeonFileHeader._squareFirstThingCount += 300;
// TODO: ??? is this - begin
- delete[] _dunData._g280_columnsCumulativeSquareThingCount;
- _dunData._g280_columnsCumulativeSquareThingCount = new uint16[columCount];
+ delete[] _g280_dungeonColumnsCumulativeSquareThingCount;
+ _g280_dungeonColumnsCumulativeSquareThingCount = new uint16[columCount];
for (uint16 i = 0; i < columCount; ++i)
- _dunData._g280_columnsCumulativeSquareThingCount[i] = dunDataStream.readUint16BE();
+ _g280_dungeonColumnsCumulativeSquareThingCount[i] = dunDataStream.readUint16BE();
// TODO: ??? is this - end
// TODO: ??? is this - begin
- delete[] _dunData._g283_squareFirstThings;
- _dunData._g283_squareFirstThings = new Thing[_g278_fileHeader._squareFirstThingCount];
+ delete[] _g283_squareFirstThings;
+ _g283_squareFirstThings = new Thing[_g278_dungeonFileHeader._squareFirstThingCount];
for (uint16 i = 0; i < actualSquareFirstThingCount; ++i)
- _dunData._g283_squareFirstThings[i].set(dunDataStream.readUint16BE());
- if (_messages._g298_newGame)
+ _g283_squareFirstThings[i].set(dunDataStream.readUint16BE());
+ if (_vm->_g298_newGame)
for (uint16 i = 0; i < 300; ++i)
- _dunData._g283_squareFirstThings[actualSquareFirstThingCount + i] = Thing::_none;
+ _g283_squareFirstThings[actualSquareFirstThingCount + i] = Thing::_none;
// TODO: ??? is this - end
// load text data
- delete[] _dunData._g260_textData;
- _dunData._g260_textData = new uint16[_g278_fileHeader._textDataWordCount];
- for (uint16 i = 0; i < _g278_fileHeader._textDataWordCount; ++i)
- _dunData._g260_textData[i] = dunDataStream.readUint16BE();
+ delete[] _g260_dungeonTextData;
+ _g260_dungeonTextData = new uint16[_g278_dungeonFileHeader._textDataWordCount];
+ for (uint16 i = 0; i < _g278_dungeonFileHeader._textDataWordCount; ++i)
+ _g260_dungeonTextData[i] = dunDataStream.readUint16BE();
// TODO: ??? what this
- if (_messages._g298_newGame)
+ if (_vm->_g298_newGame)
_vm->_timeline->_g369_eventMaxCount = 100;
// load things
for (uint16 thingType = k0_DoorThingType; thingType < k16_ThingTypeTotal; ++thingType) {
- uint16 thingCount = _g278_fileHeader._thingCounts[thingType];
- if (_messages._g298_newGame) {
- _g278_fileHeader._thingCounts[thingType] = MIN((thingType == k15_ExplosionThingType) ? 768 : 1024, thingCount + g236_AdditionalThingCounts[thingType]);
+ uint16 thingCount = _g278_dungeonFileHeader._thingCounts[thingType];
+ if (_vm->_g298_newGame) {
+ _g278_dungeonFileHeader._thingCounts[thingType] = MIN((thingType == k15_ExplosionThingType) ? 768 : 1024, thingCount + g236_AdditionalThingCounts[thingType]);
}
uint16 thingStoreWordCount = g235_ThingDataWordCount[thingType];
if (thingStoreWordCount == 0)
continue;
- if (_dunData._g284_thingsData[thingType]) {
- delete[] _dunData._g284_thingsData[thingType][0];
- delete[] _dunData._g284_thingsData[thingType];
+ if (_g284_thingData[thingType]) {
+ delete[] _g284_thingData[thingType][0];
+ delete[] _g284_thingData[thingType];
}
- _dunData._g284_thingsData[thingType] = new uint16*[_g278_fileHeader._thingCounts[thingType]];
- _dunData._g284_thingsData[thingType][0] = new uint16[_g278_fileHeader._thingCounts[thingType] * thingStoreWordCount];
- for (uint16 i = 0; i < _g278_fileHeader._thingCounts[thingType]; ++i)
- _dunData._g284_thingsData[thingType][i] = _dunData._g284_thingsData[thingType][0] + i * thingStoreWordCount;
+ _g284_thingData[thingType] = new uint16*[_g278_dungeonFileHeader._thingCounts[thingType]];
+ _g284_thingData[thingType][0] = new uint16[_g278_dungeonFileHeader._thingCounts[thingType] * thingStoreWordCount];
+ for (uint16 i = 0; i < _g278_dungeonFileHeader._thingCounts[thingType]; ++i)
+ _g284_thingData[thingType][i] = _g284_thingData[thingType][0] + i * thingStoreWordCount;
if (thingType == k4_GroupThingType) {
for (uint16 i = 0; i < thingCount; ++i)
for (uint16 j = 0; j < thingStoreWordCount; ++j) {
if (j == 2 || j == 3)
- _dunData._g284_thingsData[thingType][i][j] = dunDataStream.readByte();
+ _g284_thingData[thingType][i][j] = dunDataStream.readByte();
else
- _dunData._g284_thingsData[thingType][i][j] = dunDataStream.readUint16BE();
+ _g284_thingData[thingType][i][j] = dunDataStream.readUint16BE();
}
} else if (thingType == k14_ProjectileThingType) {
for (uint16 i = 0; i < thingCount; ++i) {
- _dunData._g284_thingsData[thingType][i][0] = dunDataStream.readUint16BE();
- _dunData._g284_thingsData[thingType][i][1] = dunDataStream.readUint16BE();
- _dunData._g284_thingsData[thingType][i][2] = dunDataStream.readByte();
- _dunData._g284_thingsData[thingType][i][3] = dunDataStream.readByte();
- _dunData._g284_thingsData[thingType][i][4] = dunDataStream.readUint16BE();
+ _g284_thingData[thingType][i][0] = dunDataStream.readUint16BE();
+ _g284_thingData[thingType][i][1] = dunDataStream.readUint16BE();
+ _g284_thingData[thingType][i][2] = dunDataStream.readByte();
+ _g284_thingData[thingType][i][3] = dunDataStream.readByte();
+ _g284_thingData[thingType][i][4] = dunDataStream.readUint16BE();
}
} else {
for (uint16 i = 0; i < thingCount; ++i) {
for (uint16 j = 0; j < thingStoreWordCount; ++j)
- _dunData._g284_thingsData[thingType][i][j] = dunDataStream.readUint16BE();
+ _g284_thingData[thingType][i][j] = dunDataStream.readUint16BE();
}
}
- if (_messages._g298_newGame) {
+ if (_vm->_g298_newGame) {
if ((thingType == k4_GroupThingType) || thingType >= k14_ProjectileThingType)
- _vm->_timeline->_g369_eventMaxCount += _g278_fileHeader._thingCounts[thingType];
+ _vm->_timeline->_g369_eventMaxCount += _g278_dungeonFileHeader._thingCounts[thingType];
for (uint16 i = 0; i < g236_AdditionalThingCounts[thingType]; ++i) {
- _dunData._g284_thingsData[thingType][thingCount + i][0] = Thing::_none.toUint16();
+ _g284_thingData[thingType][thingCount + i][0] = Thing::_none.toUint16();
}
}
}
// load map data
- if (!_messages._g523_restartGameRequest)
- _g276_rawMapData = _rawDunFileData + dunDataStream.pos();
+ if (!_vm->_g523_restartGameRequest)
+ _g276_dungeonRawMapData = _rawDunFileData + dunDataStream.pos();
- if (!_messages._g523_restartGameRequest) {
- uint8 mapCount = _g278_fileHeader._mapCount;
- delete[] _dunData._g279_mapData;
- _dunData._g279_mapData = new byte**[_dunData._g282_columCount + mapCount];
- byte **colFirstSquares = (byte**)_dunData._g279_mapData + mapCount;
+ if (!_vm->_g523_restartGameRequest) {
+ uint8 mapCount = _g278_dungeonFileHeader._mapCount;
+ delete[] _g279_dungeonMapData;
+ _g279_dungeonMapData = new byte**[_g282_dungeonColumCount + mapCount];
+ byte **colFirstSquares = (byte**)_g279_dungeonMapData + mapCount;
for (uint8 i = 0; i < mapCount; ++i) {
- _dunData._g279_mapData[i] = colFirstSquares;
- byte *square = _g276_rawMapData + _g277_maps[i]._rawDunDataOffset;
+ _g279_dungeonMapData[i] = colFirstSquares;
+ byte *square = _g276_dungeonRawMapData + _g277_dungeonMaps[i]._rawDunDataOffset;
*colFirstSquares++ = square;
- for (uint16 w = 1; w <= _g277_maps[i]._width; ++w) {
- square += _g277_maps[i]._height + 1;
+ for (uint16 w = 1; w <= _g277_dungeonMaps[i]._width; ++w) {
+ square += _g277_dungeonMaps[i]._height + 1;
*colFirstSquares++ = square;
}
}
@@ -729,59 +729,59 @@ void DungeonMan::loadDungeonFile() {
}
void DungeonMan::setCurrentMap(uint16 mapIndex) {
- _currMap._g272_index = mapIndex;
- _currMap._g271_data = _dunData._g279_mapData[mapIndex];
- _currMap._g269_map = _g277_maps + mapIndex;
- _currMap._g273_width = _g277_maps[mapIndex]._width + 1;
- _currMap._g274_height = _g277_maps[mapIndex]._height + 1;
- _currMap._g270_colCumulativeSquareFirstThingCount
- = &_dunData._g280_columnsCumulativeSquareThingCount[_dunData._g281_mapsFirstColumnIndex[mapIndex]];
+ _g272_currMapIndex = mapIndex;
+ _g271_currMapData = _g279_dungeonMapData[mapIndex];
+ _g269_currMap = _g277_dungeonMaps + mapIndex;
+ _g273_currMapWidth = _g277_dungeonMaps[mapIndex]._width + 1;
+ _g274_currMapHeight = _g277_dungeonMaps[mapIndex]._height + 1;
+ _g270_currMapColCumulativeSquareFirstThingCount
+ = &_g280_dungeonColumnsCumulativeSquareThingCount[_g281_dungeonMapsFirstColumnIndex[mapIndex]];
}
void DungeonMan::setCurrentMapAndPartyMap(uint16 mapIndex) {
setCurrentMap(mapIndex);
- byte *metaMapData = _currMap._g271_data[_currMap._g273_width - 1] + _currMap._g274_height;
+ byte *metaMapData = _g271_currMapData[_g273_currMapWidth - 1] + _g274_currMapHeight;
_vm->_displayMan->_g264_currMapAllowedCreatureTypes = metaMapData;
- metaMapData += _currMap._g269_map->_creatureTypeCount;
- memcpy(_vm->_displayMan->_g261_currMapWallOrnIndices, metaMapData, _currMap._g269_map->_wallOrnCount);
+ metaMapData += _g269_currMap->_creatureTypeCount;
+ memcpy(_vm->_displayMan->_g261_currMapWallOrnIndices, metaMapData, _g269_currMap->_wallOrnCount);
- metaMapData += _currMap._g269_map->_wallOrnCount;
- memcpy(_vm->_displayMan->_g262_currMapFloorOrnIndices, metaMapData, _currMap._g269_map->_floorOrnCount);
+ metaMapData += _g269_currMap->_wallOrnCount;
+ memcpy(_vm->_displayMan->_g262_currMapFloorOrnIndices, metaMapData, _g269_currMap->_floorOrnCount);
- metaMapData += _currMap._g269_map->_wallOrnCount;
- memcpy(_vm->_displayMan->_g263_currMapDoorOrnIndices, metaMapData, _currMap._g269_map->_doorOrnCount);
+ metaMapData += _g269_currMap->_wallOrnCount;
+ memcpy(_vm->_displayMan->_g263_currMapDoorOrnIndices, metaMapData, _g269_currMap->_doorOrnCount);
- _g265_currMapInscriptionWallOrnIndex = _currMap._g269_map->_wallOrnCount;
+ _g265_currMapInscriptionWallOrnIndex = _g269_currMap->_wallOrnCount;
_vm->_displayMan->_g261_currMapWallOrnIndices[_g265_currMapInscriptionWallOrnIndex] = k0_WallOrnInscription;
}
Square DungeonMan::getSquare(int16 mapX, int16 mapY) {
- bool isInXBounds = (mapX >= 0) && (mapX < _currMap._g273_width);
- bool isInYBounds = (mapY >= 0) && (mapY < _currMap._g274_height);
+ bool isInXBounds = (mapX >= 0) && (mapX < _g273_currMapWidth);
+ bool isInYBounds = (mapY >= 0) && (mapY < _g274_currMapHeight);
if (isInXBounds && isInYBounds)
- return Square(_currMap._g271_data[mapX][mapY]);
+ return Square(_g271_currMapData[mapX][mapY]);
Square tmpSquare;
if (isInYBounds) {
- tmpSquare.set(_currMap._g271_data[0][mapY]);
+ tmpSquare.set(_g271_currMapData[0][mapY]);
if (mapX == -1 && (tmpSquare.getType() == k1_CorridorElemType || tmpSquare.getType() == k2_PitElemType))
return Square(k0_WallElemType).set(k0x0004_WallEastRandOrnAllowed);
- tmpSquare.set(_currMap._g271_data[_currMap._g273_width - 1][mapY]);
- if (mapX == _currMap._g273_width && (tmpSquare.getType() == k1_CorridorElemType || tmpSquare.getType() == k2_PitElemType))
+ tmpSquare.set(_g271_currMapData[_g273_currMapWidth - 1][mapY]);
+ if (mapX == _g273_currMapWidth && (tmpSquare.getType() == k1_CorridorElemType || tmpSquare.getType() == k2_PitElemType))
return Square(k0_WallElemType).set(k0x0001_WallWestRandOrnAllowed);
} else if (isInXBounds) {
- tmpSquare.set(_currMap._g271_data[mapX][0]);
+ tmpSquare.set(_g271_currMapData[mapX][0]);
if (mapY == -1 && (tmpSquare.getType() == k1_CorridorElemType || tmpSquare.getType() == k2_PitElemType))
return Square(k0_WallElemType).set(k0x0002_WallSouthRandOrnAllowed);
- tmpSquare.set(_currMap._g271_data[mapX][_currMap._g274_height - 1]);
- if (mapY == _currMap._g274_height && (tmpSquare.getType() == k1_CorridorElemType || tmpSquare.getType() == k2_PitElemType))
+ tmpSquare.set(_g271_currMapData[mapX][_g274_currMapHeight - 1]);
+ if (mapY == _g274_currMapHeight && (tmpSquare.getType() == k1_CorridorElemType || tmpSquare.getType() == k2_PitElemType))
return Square((k0_WallElemType << 5) | k0x0008_WallNorthRandOrnAllowed);
}
@@ -794,12 +794,12 @@ Square DungeonMan::getRelSquare(direction dir, int16 stepsForward, int16 stepsRi
}
int16 DungeonMan::getSquareFirstThingIndex(int16 mapX, int16 mapY) {
- if (mapX < 0 || mapX >= _currMap._g273_width || mapY < 0 || mapY >= _currMap._g274_height || !Square(_currMap._g271_data[mapX][mapY]).get(k0x0010_ThingListPresent))
+ if (mapX < 0 || mapX >= _g273_currMapWidth || mapY < 0 || mapY >= _g274_currMapHeight || !Square(_g271_currMapData[mapX][mapY]).get(k0x0010_ThingListPresent))
return -1;
int16 y = 0;
- uint16 index = _currMap._g270_colCumulativeSquareFirstThingCount[mapX];
- byte* square = _currMap._g271_data[mapX];
+ uint16 index = _g270_currMapColCumulativeSquareFirstThingCount[mapX];
+ byte* square = _g271_currMapData[mapX];
while (y++ != mapY)
if (Square(*square++).get(k0x0010_ThingListPresent))
index++;
@@ -811,7 +811,7 @@ Thing DungeonMan::getSquareFirstThing(int16 mapX, int16 mapY) {
int16 index = getSquareFirstThingIndex(mapX, mapY);
if (index == -1)
return Thing::_endOfList;
- return _dunData._g283_squareFirstThings[index];
+ return _g283_squareFirstThings[index];
}
@@ -880,7 +880,7 @@ T0172010_ClosedFakeWall:
}
thing = getNextThing(thing);
}
- if (squareIsFakeWall && (_currMap._g306_partyPosX != mapX) && (_currMap._g307_partyPosY != mapY)) {
+ if (squareIsFakeWall && (_g306_partyMapX != mapX) && (_g307_partyMapY != mapY)) {
aspectArray[k1_FirstGroupOrObjectAspect] = Thing::_endOfList.toUint16();
return;
}
@@ -906,7 +906,7 @@ T0172010_ClosedFakeWall:
square = Square(footPrintsAllowed ? 8 : 0);
// intentional fallthrough
case k1_CorridorElemType:
- aspectArray[k4_FloorOrnOrdAspect] = getRandomOrnOrdinal(square.get(k0x0008_CorridorRandOrnAllowed), _currMap._g269_map->_randFloorOrnCount, mapX, mapY, 30);
+ aspectArray[k4_FloorOrnOrdAspect] = getRandomOrnOrdinal(square.get(k0x0008_CorridorRandOrnAllowed), _g269_currMap->_randFloorOrnCount, mapX, mapY, 30);
T0172029_Teleporter:
footPrintsAllowed = true;
T0172030_Pit:
@@ -949,7 +949,7 @@ T0172049_Footprints:
void DungeonMan::setSquareAspectOrnOrdinals(uint16 *aspectArray, bool leftAllowed, bool frontAllowed, bool rightAllowed, direction dir,
int16 mapX, int16 mapY, bool isFakeWall) {
- int16 ornCount = _currMap._g269_map->_randWallOrnCount;
+ int16 ornCount = _g269_currMap->_randWallOrnCount;
turnDirRight(dir);
aspectArray[k2_RightWallOrnOrdAspect] = getRandomOrnOrdinal(leftAllowed, ornCount, mapX, ++mapY * (dir + 1), 30);
@@ -958,7 +958,7 @@ void DungeonMan::setSquareAspectOrnOrdinals(uint16 *aspectArray, bool leftAllowe
turnDirRight(dir);
aspectArray[k4_LeftWallOrnOrdAspect] = getRandomOrnOrdinal(rightAllowed, ornCount, mapX, ++mapY * (dir + 1), 30);
- if (isFakeWall || mapX < 0 || mapX >= _currMap._g273_width || mapY < 0 || mapY >= _currMap._g274_height) {
+ if (isFakeWall || mapX < 0 || mapX >= _g273_currMapWidth || mapY < 0 || mapY >= _g274_currMapHeight) {
for (uint16 i = k2_RightWallOrnOrdAspect; i <= k4_LeftWallOrnOrdAspect; ++i) {
if (isWallOrnAnAlcove(_vm->ordinalToIndex(aspectArray[i])))
aspectArray[i] = 0;
@@ -968,8 +968,8 @@ void DungeonMan::setSquareAspectOrnOrdinals(uint16 *aspectArray, bool leftAllowe
int16 DungeonMan::getRandomOrnOrdinal(bool allowed, int16 count, int16 mapX, int16 mapY, int16 modulo) {
int16 index = (((((2000 + (mapX << 5) + mapY) * 31417) >> 1)
- + (3000 + (_currMap._g272_index << 6) + _currMap._g273_width + _currMap._g274_height) * 11
- + _g278_fileHeader._ornamentRandomSeed) >> 2) % modulo;
+ + (3000 + (_g272_currMapIndex << 6) + _g273_currMapWidth + _g274_currMapHeight) * 11
+ + _g278_dungeonFileHeader._ornamentRandomSeed) >> 2) % modulo;
if (allowed && index < count)
return _vm->indexToOrdinal(index);
return 0;
@@ -985,7 +985,7 @@ bool DungeonMan::isWallOrnAnAlcove(int16 wallOrnIndex) {
}
uint16 *DungeonMan::getThingData(Thing thing) {
- return _dunData._g284_thingsData[thing.getType()][thing.getIndex()];
+ return _g284_thingData[thing.getType()][thing.getIndex()];
}
uint16* DungeonMan::getSquareFirstThingData(int16 mapX, int16 mapY) {
@@ -1099,7 +1099,7 @@ char g257_InscriptionEscReplacementStrings[32][8] = { // @ G0257_aac_Graphic559_
void DungeonMan::decodeText(char *destString, Thing thing, TextType type) {
char sepChar;
- TextString textString(_dunData._g284_thingsData[k2_TextstringType][thing.getIndex()]);
+ TextString textString(_g284_thingData[k2_TextstringType][thing.getIndex()]);
if ((textString.isVisible()) || (type & k0x8000_DecodeEvenIfInvisible)) {
type = (TextType)(type & ~k0x8000_DecodeEvenIfInvisible);
if (type == k1_TextTypeMessage) {
@@ -1112,7 +1112,7 @@ void DungeonMan::decodeText(char *destString, Thing thing, TextType type) {
}
uint16 codeCounter = 0;
int16 escChar = 0;
- uint16 *codeWord = _dunData._g260_textData + textString.getWordOffset();
+ uint16 *codeWord = _g260_dungeonTextData + textString.getWordOffset();
uint16 code = 0, codes = 0;
char *escReplString = nullptr;
for (;;) { /*infinite loop*/
@@ -1260,27 +1260,27 @@ void DungeonMan::linkThingToList(Thing thingToLink, Thing thingInList, int16 map
*rawObjPtr = Thing::_endOfList.toUint16();
if (mapX >= 0) {
- Square *squarePtr = (Square*)&_currMap._g271_data[mapX][mapY];
+ Square *squarePtr = (Square*)&_g271_currMapData[mapX][mapY];
if (squarePtr->get(k0x0010_ThingListPresent)) {
thingInList = getSquareFirstThing(mapX, mapY);
} else {
squarePtr->set(k0x0010_ThingListPresent);
- uint16 *cumulativeCount = &_currMap._g270_colCumulativeSquareFirstThingCount[mapX + 1];
- uint16 column = _dunData._g282_columCount - (_dunData._g281_mapsFirstColumnIndex[_currMap._g272_index] + mapX) - 1;
+ uint16 *cumulativeCount = &_g270_currMapColCumulativeSquareFirstThingCount[mapX + 1];
+ uint16 column = _g282_dungeonColumCount - (_g281_dungeonMapsFirstColumnIndex[_g272_currMapIndex] + mapX) - 1;
while (column--) {
(*cumulativeCount++)++;
}
uint16 mapYStep = 0;
squarePtr -= mapY;
- uint16 squareFirstThingIndex = _currMap._g270_colCumulativeSquareFirstThingCount[mapX];
+ uint16 squareFirstThingIndex = _g270_currMapColCumulativeSquareFirstThingCount[mapX];
while (mapYStep++ != mapY) {
if (squarePtr->get(k0x0010_ThingListPresent)) {
squareFirstThingIndex++;
}
squarePtr++;
}
- Thing* thingPtr = &_dunData._g283_squareFirstThings[squareFirstThingIndex];
- memmove(thingPtr + 1, thingPtr, sizeof(Thing) * (_g278_fileHeader._squareFirstThingCount - squareFirstThingIndex - 1));
+ Thing* thingPtr = &_g283_squareFirstThings[squareFirstThingIndex];
+ memmove(thingPtr + 1, thingPtr, sizeof(Thing) * (_g278_dungeonFileHeader._squareFirstThingCount - squareFirstThingIndex - 1));
*thingPtr = thingToLink;
return;
}