DM: Rename more constants

This commit is contained in:
Strangerke 2016-09-11 23:06:29 +02:00
parent 7d9526f888
commit 040d71bca5
10 changed files with 402 additions and 400 deletions

View file

@ -225,7 +225,7 @@ bool ChampionMan::isObjectThrown(uint16 champIndex, int16 slotIndex, int16 side)
if (curThing.getType() == kDMThingTypeWeapon) { if (curThing.getType() == kDMThingTypeWeapon) {
experience += 4; experience += 4;
WeaponInfo *curWeapon = _vm->_dungeonMan->getWeaponInfo(curThing); WeaponInfo *curWeapon = _vm->_dungeonMan->getWeaponInfo(curThing);
if (curWeapon->_class <= k12_WeaponClassPoisinDart) { if (curWeapon->_class <= kDMWeaponClassPoisinDart) {
weaponKineticEnergy = curWeapon->_kineticEnergy; weaponKineticEnergy = curWeapon->_kineticEnergy;
experience += weaponKineticEnergy >> 2; experience += weaponKineticEnergy >> 2;
} }
@ -642,13 +642,13 @@ uint16 ChampionMan::getStrength(int16 champIndex, int16 slotIndex) {
strength += weaponInfo->_strength; strength += weaponInfo->_strength;
uint16 skillLevel = 0; uint16 skillLevel = 0;
uint16 weaponClass = weaponInfo->_class; uint16 weaponClass = weaponInfo->_class;
if ((weaponClass == k0_WeaponClassSwingWeapon) || (weaponClass == k2_WeaponClassDaggerAndAxes)) { if ((weaponClass == kDMWeaponClassSwingWeapon) || (weaponClass == kDMWeaponClassDaggerAndAxes)) {
skillLevel = getSkillLevel(champIndex, kDMSkillSwing); skillLevel = getSkillLevel(champIndex, kDMSkillSwing);
} }
if ((weaponClass != k0_WeaponClassSwingWeapon) && (weaponClass < k16_WeaponClassFirstBow)) { if ((weaponClass != kDMWeaponClassSwingWeapon) && (weaponClass < kDMWeaponClassFirstBow)) {
skillLevel += getSkillLevel(champIndex, kDMSkillThrow); skillLevel += getSkillLevel(champIndex, kDMSkillThrow);
} }
if ((weaponClass >= k16_WeaponClassFirstBow) && (weaponClass < k112_WeaponClassFirstMagicWeapon)) { if ((weaponClass >= kDMWeaponClassFirstBow) && (weaponClass < kDMWeaponClassFirstMagicWeapon)) {
skillLevel += getSkillLevel(champIndex, kDMSkillShoot); skillLevel += getSkillLevel(champIndex, kDMSkillShoot);
} }
strength += skillLevel << 1; strength += skillLevel << 1;
@ -853,7 +853,7 @@ int16 ChampionMan::getWoundDefense(int16 champIndex, uint16 woundIndex) {
if (curThing.getType() == kDMThingTypeArmour) { if (curThing.getType() == kDMThingTypeArmour) {
ArmourInfo *armorInfo = (ArmourInfo *)_vm->_dungeonMan->getThingData(curThing); ArmourInfo *armorInfo = (ArmourInfo *)_vm->_dungeonMan->getThingData(curThing);
armorInfo = &_vm->_dungeonMan->_armourInfos[((Armour *)armorInfo)->getType()]; armorInfo = &_vm->_dungeonMan->_armourInfos[((Armour *)armorInfo)->getType()];
if (getFlag(armorInfo->_attributes, k0x0080_ArmourAttributeIsAShield)) if (getFlag(armorInfo->_attributes, kDMArmourAttributeShield))
armorShieldDefense += ((getStrength(champIndex, slotIndex) + _vm->_dungeonMan->getArmourDefense(armorInfo, useSharpDefense)) * woundDefenseFactor[woundIndex]) >> ((slotIndex == woundIndex) ? 4 : 5); armorShieldDefense += ((getStrength(champIndex, slotIndex) + _vm->_dungeonMan->getArmourDefense(armorInfo, useSharpDefense)) * woundDefenseFactor[woundIndex]) >> ((slotIndex == woundIndex) ? 4 : 5);
} }
} }
@ -1251,14 +1251,14 @@ bool ChampionMan::isAmmunitionCompatibleWithWeapon(uint16 champIndex, uint16 wea
return false; return false;
WeaponInfo *weaponInfo = _vm->_dungeonMan->getWeaponInfo(curThing); WeaponInfo *weaponInfo = _vm->_dungeonMan->getWeaponInfo(curThing);
int16 weaponClass = kM1_WeaponClassNone; int16 weaponClass = kDMWeaponClassNone;
if ((weaponInfo->_class >= k16_WeaponClassFirstBow) && (weaponInfo->_class <= k31_WeaponClassLastBow)) if ((weaponInfo->_class >= kDMWeaponClassFirstBow) && (weaponInfo->_class <= kDMWeaponClassLastBow))
weaponClass = k10_WeaponClassBowAmmunition; weaponClass = kDMWeaponClassBowAmmunition;
else if ((weaponInfo->_class >= k32_WeaponClassFirstSling) && (weaponInfo->_class <= k47_WeaponClassLastSling)) else if ((weaponInfo->_class >= kDMWeaponClassFirstSling) && (weaponInfo->_class <= kDMWeaponClassLastSling))
weaponClass = k11_WeaponClassSlingAmmunition; weaponClass = kDMWeaponClassSlingAmmunition;
if (weaponClass == kM1_WeaponClassNone) if (weaponClass == kDMWeaponClassNone)
return false; return false;
curThing = curChampion->_slots[ammunitionSlotIndex]; curThing = curChampion->_slots[ammunitionSlotIndex];
@ -1898,7 +1898,7 @@ void ChampionMan::addCandidateChampionToParty(uint16 championPortraitIndex) {
char L0807_ac_DecodedChampionText[77]; char L0807_ac_DecodedChampionText[77];
char *decodedStringPtr = L0807_ac_DecodedChampionText; char *decodedStringPtr = L0807_ac_DecodedChampionText;
_vm->_dungeonMan->decodeText(decodedStringPtr, curThing, (TextType)(k2_TextTypeScroll | k0x8000_DecodeEvenIfInvisible)); _vm->_dungeonMan->decodeText(decodedStringPtr, curThing, (TextType)(kDMTextTypeScroll | k0x8000_DecodeEvenIfInvisible));
uint16 charIdx = 0; uint16 charIdx = 0;
char tmpChar; char tmpChar;

View file

@ -989,7 +989,7 @@ void DMEngine::fuseSequence() {
while (textStringThingCount--) { while (textStringThingCount--) {
for (int16 idx = 0; idx < maxCount; idx++) { for (int16 idx = 0; idx < maxCount; idx++) {
char decodedString[200]; char decodedString[200];
_dungeonMan->decodeText(decodedString, textStringThings[idx], (TextType)(k1_TextTypeMessage | k0x8000_DecodeEvenIfInvisible)); _dungeonMan->decodeText(decodedString, textStringThings[idx], (TextType)(kDMTextTypeMessage | k0x8000_DecodeEvenIfInvisible));
if (decodedString[1] == textFirstChar) { if (decodedString[1] == textFirstChar) {
_textMan->clearAllRows(); _textMan->clearAllRows();
decodedString[1] = '\n'; /* New line */ decodedString[1] = '\n'; /* New line */

View file

@ -862,8 +862,8 @@ void DungeonMan::setSquareAspect(uint16 *aspectArray, Direction dir, int16 mapX,
bool frontRandomWallOrnamentAllowed = false; bool frontRandomWallOrnamentAllowed = false;
bool squareIsFakeWall; bool squareIsFakeWall;
aspectArray[k0_ElementAspect] = Square(AL0307_uc_Square).getType(); aspectArray[kDMSquareAspectElement] = Square(AL0307_uc_Square).getType();
switch (aspectArray[k0_ElementAspect]) { switch (aspectArray[kDMSquareAspectElement]) {
case kDMElementTypeWall: case kDMElementTypeWall:
switch (dir) { switch (dir) {
case kDMDirNorth: case kDMDirNorth:
@ -913,66 +913,66 @@ T0172010_ClosedFakeWall:
curThing = getNextThing(curThing); curThing = getNextThing(curThing);
} }
if (squareIsFakeWall && (_partyMapX != mapX) && (_partyMapY != mapY)) { if (squareIsFakeWall && (_partyMapX != mapX) && (_partyMapY != mapY)) {
aspectArray[k1_FirstGroupOrObjectAspect] = Thing::_endOfList.toUint16(); aspectArray[kDMSquareAspectFirstGroupOrObject] = Thing::_endOfList.toUint16();
return; return;
} }
break; break;
case kDMElementTypeFakeWall: case kDMElementTypeFakeWall:
if (!getFlag(AL0307_uc_Square, k0x0004_FakeWallOpen)) { if (!getFlag(AL0307_uc_Square, k0x0004_FakeWallOpen)) {
aspectArray[k0_ElementAspect] = kDMElementTypeWall; aspectArray[kDMSquareAspectElement] = kDMElementTypeWall;
leftRandomWallOrnamentAllowed = rightRandomWallOrnamentAllowed = frontRandomWallOrnamentAllowed = getFlag(AL0307_uc_Square, k0x0008_FakeWallRandOrnOrFootPAllowed); leftRandomWallOrnamentAllowed = rightRandomWallOrnamentAllowed = frontRandomWallOrnamentAllowed = getFlag(AL0307_uc_Square, k0x0008_FakeWallRandOrnOrFootPAllowed);
squareIsFakeWall = true; squareIsFakeWall = true;
goto T0172010_ClosedFakeWall; goto T0172010_ClosedFakeWall;
} }
aspectArray[k0_ElementAspect] = k1_CorridorElemType; aspectArray[kDMSquareAspectElement] = k1_CorridorElemType;
AL0307_uc_FootprintsAllowed = getFlag(AL0307_uc_Square, k0x0008_FakeWallRandOrnOrFootPAllowed) ? 8 : 0; AL0307_uc_FootprintsAllowed = getFlag(AL0307_uc_Square, k0x0008_FakeWallRandOrnOrFootPAllowed) ? 8 : 0;
// No break on purpose // No break on purpose
case k1_CorridorElemType: case k1_CorridorElemType:
case kDMElementTypePit: case kDMElementTypePit:
case kDMElementTypeTeleporter: case kDMElementTypeTeleporter:
if (aspectArray[k0_ElementAspect] == k1_CorridorElemType) { if (aspectArray[kDMSquareAspectElement] == k1_CorridorElemType) {
aspectArray[k4_FloorOrnOrdAspect] = getRandomOrnOrdinal(getFlag(AL0307_uc_Square, k0x0008_CorridorRandOrnAllowed), _currMap->_randFloorOrnCount, mapX, mapY, 30); aspectArray[kDMSquareAspectFloorOrn] = getRandomOrnOrdinal(getFlag(AL0307_uc_Square, k0x0008_CorridorRandOrnAllowed), _currMap->_randFloorOrnCount, mapX, mapY, 30);
AL0307_uc_FootprintsAllowed = true; AL0307_uc_FootprintsAllowed = true;
} else if (aspectArray[k0_ElementAspect] == kDMElementTypePit) { } else if (aspectArray[kDMSquareAspectElement] == kDMElementTypePit) {
if (getFlag(AL0307_uc_Square, k0x0008_PitOpen)) { if (getFlag(AL0307_uc_Square, k0x0008_PitOpen)) {
aspectArray[k2_PitInvisibleAspect] = getFlag(AL0307_uc_Square, k0x0004_PitInvisible); aspectArray[kDMSquareAspectPitInvisible] = getFlag(AL0307_uc_Square, k0x0004_PitInvisible);
AL0307_uc_FootprintsAllowed &= 0x0001; AL0307_uc_FootprintsAllowed &= 0x0001;
} else { } else {
aspectArray[k0_ElementAspect] = k1_CorridorElemType; aspectArray[kDMSquareAspectElement] = k1_CorridorElemType;
AL0307_uc_FootprintsAllowed = true; AL0307_uc_FootprintsAllowed = true;
} }
} else { // k5_ElementTypeTeleporter } else { // k5_ElementTypeTeleporter
aspectArray[k2_TeleporterVisibleAspect] = getFlag(AL0307_uc_Square, k0x0008_TeleporterOpen) && getFlag(AL0307_uc_Square, k0x0004_TeleporterVisible); aspectArray[kDMSquareAspectTeleporterVisible] = getFlag(AL0307_uc_Square, k0x0008_TeleporterOpen) && getFlag(AL0307_uc_Square, k0x0004_TeleporterVisible);
AL0307_uc_FootprintsAllowed = true; AL0307_uc_FootprintsAllowed = true;
} }
while ((curThing != Thing::_endOfList) && (curThing.getType() <= kDMThingTypeSensor)) { while ((curThing != Thing::_endOfList) && (curThing.getType() <= kDMThingTypeSensor)) {
if (curThing.getType() == kDMThingTypeSensor) { if (curThing.getType() == kDMThingTypeSensor) {
Sensor *curSensor = (Sensor *)getThingData(curThing); Sensor *curSensor = (Sensor *)getThingData(curThing);
aspectArray[k4_FloorOrnOrdAspect] = curSensor->getAttrOrnOrdinal(); aspectArray[kDMSquareAspectFloorOrn] = curSensor->getAttrOrnOrdinal();
} }
curThing = getNextThing(curThing); curThing = getNextThing(curThing);
} }
AL0307_uc_ScentOrdinal = _vm->_championMan->getScentOrdinal(mapX, mapY); AL0307_uc_ScentOrdinal = _vm->_championMan->getScentOrdinal(mapX, mapY);
if (AL0307_uc_FootprintsAllowed && (AL0307_uc_ScentOrdinal) && (--AL0307_uc_ScentOrdinal >= _vm->_championMan->_party._firstScentIndex) && (AL0307_uc_ScentOrdinal < _vm->_championMan->_party._lastScentIndex)) if (AL0307_uc_FootprintsAllowed && (AL0307_uc_ScentOrdinal) && (--AL0307_uc_ScentOrdinal >= _vm->_championMan->_party._firstScentIndex) && (AL0307_uc_ScentOrdinal < _vm->_championMan->_party._lastScentIndex))
setFlag(aspectArray[k4_FloorOrnOrdAspect], k0x8000_FootprintsAspect); setFlag(aspectArray[kDMSquareAspectFloorOrn], kDMMaskFootprints);
break; break;
case kDMElementTypeStairs: case kDMElementTypeStairs:
aspectArray[k0_ElementAspect] = (bool((getFlag(AL0307_uc_Square, k0x0008_StairsNorthSouthOrient) >> 3)) == _vm->isOrientedWestEast(dir)) ? kDMElementTypeStairsSide : kDMElementTypeStairsFront; aspectArray[kDMSquareAspectElement] = (bool((getFlag(AL0307_uc_Square, k0x0008_StairsNorthSouthOrient) >> 3)) == _vm->isOrientedWestEast(dir)) ? kDMElementTypeStairsSide : kDMElementTypeStairsFront;
aspectArray[k2_StairsUpAspect] = getFlag(AL0307_uc_Square, k0x0004_StairsUp); aspectArray[kDMSquareAspectStairsUp] = getFlag(AL0307_uc_Square, k0x0004_StairsUp);
AL0307_uc_FootprintsAllowed = false; AL0307_uc_FootprintsAllowed = false;
while ((curThing != Thing::_endOfList) && (curThing.getType() <= kDMThingTypeSensor)) while ((curThing != Thing::_endOfList) && (curThing.getType() <= kDMThingTypeSensor))
curThing = getNextThing(curThing); curThing = getNextThing(curThing);
break; break;
case k4_DoorElemType: case k4_DoorElemType:
if (bool((getFlag(AL0307_uc_Square, (byte) k0x0008_DoorNorthSouthOrient) >> 3)) == _vm->isOrientedWestEast(dir)) { if (bool((getFlag(AL0307_uc_Square, (byte) k0x0008_DoorNorthSouthOrient) >> 3)) == _vm->isOrientedWestEast(dir)) {
aspectArray[k0_ElementAspect] = k16_DoorSideElemType; aspectArray[kDMSquareAspectElement] = k16_DoorSideElemType;
} else { } else {
aspectArray[k0_ElementAspect] = k17_DoorFrontElemType; aspectArray[kDMSquareAspectElement] = k17_DoorFrontElemType;
aspectArray[k2_DoorStateAspect] = Square(AL0307_uc_Square).getDoorState(); aspectArray[kDMSquareAspectDoorState] = Square(AL0307_uc_Square).getDoorState();
aspectArray[k3_DoorThingIndexAspect] = getSquareFirstThing(mapX, mapY).getIndex(); aspectArray[kDMSquareAspectDoorThingIndex] = getSquareFirstThing(mapX, mapY).getIndex();
} }
AL0307_uc_FootprintsAllowed = true; AL0307_uc_FootprintsAllowed = true;
@ -981,21 +981,21 @@ T0172010_ClosedFakeWall:
AL0307_uc_ScentOrdinal = _vm->_championMan->getScentOrdinal(mapX, mapY); AL0307_uc_ScentOrdinal = _vm->_championMan->getScentOrdinal(mapX, mapY);
if (AL0307_uc_FootprintsAllowed && (AL0307_uc_ScentOrdinal) && (--AL0307_uc_ScentOrdinal >= _vm->_championMan->_party._firstScentIndex) && (AL0307_uc_ScentOrdinal < _vm->_championMan->_party._lastScentIndex)) if (AL0307_uc_FootprintsAllowed && (AL0307_uc_ScentOrdinal) && (--AL0307_uc_ScentOrdinal >= _vm->_championMan->_party._firstScentIndex) && (AL0307_uc_ScentOrdinal < _vm->_championMan->_party._lastScentIndex))
setFlag(aspectArray[k4_FloorOrnOrdAspect], k0x8000_FootprintsAspect); setFlag(aspectArray[kDMSquareAspectFloorOrn], kDMMaskFootprints);
break; break;
} }
aspectArray[k1_FirstGroupOrObjectAspect] = curThing.toUint16(); aspectArray[kDMSquareAspectFirstGroupOrObject] = curThing.toUint16();
} }
void DungeonMan::setSquareAspectOrnOrdinals(uint16 *aspectArray, bool leftAllowed, bool frontAllowed, bool rightAllowed, int16 dir, void DungeonMan::setSquareAspectOrnOrdinals(uint16 *aspectArray, bool leftAllowed, bool frontAllowed, bool rightAllowed, int16 dir,
int16 mapX, int16 mapY, bool isFakeWall) { int16 mapX, int16 mapY, bool isFakeWall) {
int16 randomWallOrnamentCount = _currMap->_randWallOrnCount; int16 randomWallOrnamentCount = _currMap->_randWallOrnCount;
aspectArray[k2_RightWallOrnOrdAspect] = getRandomOrnOrdinal(leftAllowed, randomWallOrnamentCount, mapX, ++mapY * (_vm->normalizeModulo4(++dir) + 1), 30); aspectArray[kDMSquareAspectRightWallOrnOrd] = getRandomOrnOrdinal(leftAllowed, randomWallOrnamentCount, mapX, ++mapY * (_vm->normalizeModulo4(++dir) + 1), 30);
aspectArray[k3_FrontWallOrnOrdAspect] = getRandomOrnOrdinal(frontAllowed, randomWallOrnamentCount, mapX, mapY * (_vm->normalizeModulo4(++dir) + 1), 30); aspectArray[kDMSquareFrontWallOrnOrd] = getRandomOrnOrdinal(frontAllowed, randomWallOrnamentCount, mapX, mapY * (_vm->normalizeModulo4(++dir) + 1), 30);
aspectArray[k4_LeftWallOrnOrdAspect] = getRandomOrnOrdinal(rightAllowed, randomWallOrnamentCount, mapX, mapY-- * (_vm->normalizeModulo4(++dir) + 1), 30); aspectArray[kDMSquareAspectLeftWallOrnOrd] = getRandomOrnOrdinal(rightAllowed, randomWallOrnamentCount, mapX, mapY-- * (_vm->normalizeModulo4(++dir) + 1), 30);
if (isFakeWall || (mapX < 0) || (mapX >= _currMapWidth) || (mapY < 0) || (mapY >= _currMapHeight)) { /* If square is a fake wall or is out of map bounds */ if (isFakeWall || (mapX < 0) || (mapX >= _currMapWidth) || (mapY < 0) || (mapY >= _currMapHeight)) { /* If square is a fake wall or is out of map bounds */
for (int16 sideIndex = k2_RightWallOrnOrdAspect; sideIndex <= k4_LeftWallOrnOrdAspect; sideIndex++) { /* Loop to remove any random ornament that is an alcove */ for (int16 sideIndex = kDMSquareAspectRightWallOrnOrd; sideIndex <= kDMSquareAspectLeftWallOrnOrd; sideIndex++) { /* Loop to remove any random ornament that is an alcove */
if (isWallOrnAnAlcove(_vm->ordinalToIndex(aspectArray[sideIndex]))) if (isWallOrnAnAlcove(_vm->ordinalToIndex(aspectArray[sideIndex])))
aspectArray[sideIndex] = 0; aspectArray[sideIndex] = 0;
} }
@ -1121,10 +1121,10 @@ void DungeonMan::decodeText(char *destString, Thing thing, TextType type) {
if ((textString.isVisible()) || (type & k0x8000_DecodeEvenIfInvisible)) { if ((textString.isVisible()) || (type & k0x8000_DecodeEvenIfInvisible)) {
type = (TextType)(type & ~k0x8000_DecodeEvenIfInvisible); type = (TextType)(type & ~k0x8000_DecodeEvenIfInvisible);
char sepChar; char sepChar;
if (type == k1_TextTypeMessage) { if (type == kDMTextTypeMessage) {
*destString++ = '\n'; *destString++ = '\n';
sepChar = ' '; sepChar = ' ';
} else if (type == k0_TextTypeInscription) { } else if (type == kDMTextTypeInscription) {
sepChar = (char)0x80; sepChar = (char)0x80;
} else { } else {
sepChar = '\n'; sepChar = '\n';
@ -1149,7 +1149,7 @@ void DungeonMan::decodeText(char *destString, Thing thing, TextType type) {
if (escChar) { if (escChar) {
*destString = '\0'; *destString = '\0';
if (escChar == 30) { if (escChar == 30) {
if (type != k0_TextTypeInscription) if (type != kDMTextTypeInscription)
escReplString = messageAndScrollEscReplacementStrings[code]; escReplString = messageAndScrollEscReplacementStrings[code];
else else
escReplString = inscriptionEscReplacementStrings[code]; escReplString = inscriptionEscReplacementStrings[code];
@ -1160,7 +1160,7 @@ void DungeonMan::decodeText(char *destString, Thing thing, TextType type) {
destString += strlen(escReplString); destString += strlen(escReplString);
escChar = 0; escChar = 0;
} else if (code < 28) { } else if (code < 28) {
if (type != k0_TextTypeInscription) { if (type != kDMTextTypeInscription) {
if (code == 26) if (code == 26)
code = ' '; code = ' ';
else if (code == 27) else if (code == 27)
@ -1177,7 +1177,7 @@ void DungeonMan::decodeText(char *destString, Thing thing, TextType type) {
break; break;
} }
} }
*destString = ((type == k0_TextTypeInscription) ? 0x81 : '\0'); *destString = ((type == kDMTextTypeInscription) ? 0x81 : '\0');
} }
Thing DungeonMan::getUnusedThing(uint16 thingType) { Thing DungeonMan::getUnusedThing(uint16 thingType) {
@ -1409,7 +1409,7 @@ Thing DungeonMan::getSquareFirstObject(int16 mapX, int16 mapY) {
uint16 DungeonMan::getArmourDefense(ArmourInfo *armourInfo, bool useSharpDefense) { uint16 DungeonMan::getArmourDefense(ArmourInfo *armourInfo, bool useSharpDefense) {
uint16 defense = armourInfo->_defense; uint16 defense = armourInfo->_defense;
if (useSharpDefense) if (useSharpDefense)
defense = _vm->getScaledProduct(defense, 3, getFlag(armourInfo->_attributes, k0x0007_ArmourAttributeSharpDefense) + 4); defense = _vm->getScaledProduct(defense, 3, getFlag(armourInfo->_attributes, kDMArmourAttributeSharpDefense) + 4);
return defense; return defense;
} }

View file

@ -65,16 +65,222 @@ enum ObjectAllowedSlot {
kDMMaskMouth = 0x0001, // @ MASK0x0001_MOUTH kDMMaskMouth = 0x0001, // @ MASK0x0001_MOUTH
kDMMaskHead = 0x0002, // @ MASK0x0002_HEAD kDMMaskHead = 0x0002, // @ MASK0x0002_HEAD
kDMMaskNeck = 0x0004, // @ MASK0x0004_NECK kDMMaskNeck = 0x0004, // @ MASK0x0004_NECK
k0x0008_ObjectAllowedSlotTorso = 0x0008, // @ MASK0x0008_TORSO kDMMaskTorso = 0x0008, // @ MASK0x0008_TORSO
k0x0010_ObjectAllowedSlotLegs = 0x0010, // @ MASK0x0010_LEGS kDMMaskLegs = 0x0010, // @ MASK0x0010_LEGS
k0x0020_ObjectAllowedSlotFeet = 0x0020, // @ MASK0x0020_FEET kDMMaskFeet = 0x0020, // @ MASK0x0020_FEET
k0x0040_ObjectAllowedSlotQuiverLine_1 = 0x0040, // @ MASK0x0040_QUIVER_LINE1 kDMMaskQuiverLine1 = 0x0040, // @ MASK0x0040_QUIVER_LINE1
k0x0080_ObjectAllowedSlotQuiverLine_2 = 0x0080, // @ MASK0x0080_QUIVER_LINE2 kDMMaskQuiverLine2 = 0x0080, // @ MASK0x0080_QUIVER_LINE2
k0x0100_ObjectAllowedSlotPouchPassAndThroughDoors = 0x0100, // @ MASK0x0100_POUCH_PASS_AND_THROUGH_DOORS kDMMaskPouchPassAndThroughDoors = 0x0100, // @ MASK0x0100_POUCH_PASS_AND_THROUGH_DOORS
k0x0200_ObjectAllowedSlotHands = 0x0200, // @ MASK0x0200_HANDS kDMMaskHands = 0x0200, // @ MASK0x0200_HANDS
k0x0400_ObjectAllowedSlotContainer = 0x0400 // @ MASK0x0400_CONTAINER kDMMaskContainer = 0x0400, // @ MASK0x0400_CONTAINER
kDMMaskFootprints = 0x8000 // @ MASK0x8000_FOOTPRINTS
}; };
enum ArmourAttribute {
kDMArmourAttributeShield = 0x0080, // @ MASK0x0080_IS_A_SHIELD
kDMArmourAttributeSharpDefense = 0x0007 // @ MASK0x0007_SHARP_DEFENSE
};
enum WeaponClass {
kDMWeaponClassNone = -1,
/* Class 0: SWING weapons */
kDMWeaponClassSwingWeapon = 0, // @ C000_CLASS_SWING_WEAPON
/* Class 1 to 15: THROW weapons */
kDMWeaponClassDaggerAndAxes = 2, // @ C002_CLASS_DAGGER_AND_AXES
kDMWeaponClassBowAmmunition = 10, // @ C010_CLASS_BOW_AMMUNITION
kDMWeaponClassSlingAmmunition = 11, // @ C011_CLASS_SLING_AMMUNITION
kDMWeaponClassPoisinDart = 12, // @ C012_CLASS_POISON_DART
/* Class 16 to 111: SHOOT weapons */
kDMWeaponClassFirstBow = 16, // @ C016_CLASS_FIRST_BOW
kDMWeaponClassLastBow = 31, // @ C031_CLASS_LAST_BOW
kDMWeaponClassFirstSling = 32, // @ C032_CLASS_FIRST_SLING
kDMWeaponClassLastSling = 47, // @ C047_CLASS_LAST_SLING
/* Class 112 to 255: Magic and special weapons */
kDMWeaponClassFirstMagicWeapon = 112 // @ C112_CLASS_FIRST_MAGIC_WEAPON
};
enum TextType {
/* Used for text on walls */
kDMTextTypeInscription = 0, // @ C0_TEXT_TYPE_INSCRIPTION
/* Used for messages displayed when the party walks on a square */
kDMTextTypeMessage = 1, // @ C1_TEXT_TYPE_MESSAGE
/* Used for text on scrolls and champion information */
kDMTextTypeScroll = 2 // @ C2_TEXT_TYPE_SCROLL
};
enum SquareAspect {
kDMSquareAspectElement = 0, // @ C0_ELEMENT
kDMSquareAspectFirstGroupOrObject = 1, // @ C1_FIRST_GROUP_OR_OBJECT
kDMSquareAspectRightWallOrnOrd = 2, // @ C2_RIGHT_WALL_ORNAMENT_ORDINAL
kDMSquareFrontWallOrnOrd = 3, // @ C3_FRONT_WALL_ORNAMENT_ORDINAL
kDMSquareAspectLeftWallOrnOrd = 4, // @ C4_LEFT_WALL_ORNAMENT_ORDINAL
kDMSquareAspectPitInvisible = 2, // @ C2_PIT_INVISIBLE
kDMSquareAspectTeleporterVisible = 2, // @ C2_TELEPORTER_VISIBLE
kDMSquareAspectStairsUp = 2, // @ C2_STAIRS_UP
kDMSquareAspectDoorState = 2, // @ C2_DOOR_STATE
kDMSquareAspectDoorThingIndex = 3, // @ C3_DOOR_THING_INDEX
kDMSquareAspectFloorOrn = 4, // @ C4_FLOOR_ORNAMENT_ORDINAL
};
#define k15_immuneToFire 15 // @ C15_IMMUNE_TO_FIRE
#define k15_immuneToPoison 15 // @ C15_IMMUNE_TO_POISON
enum TeleporterScope {
k0x0001_TelepScopeCreatures = 1, // @ MASK0x0001_SCOPE_CREATURES
k0x0002_TelepScopeObjOrParty = 2 // @ MASK0x0002_SCOPE_OBJECTS_OR_PARTY
};
enum SensorActionType {
kM1_SensorEffNone = -1, // @ CM1_EFFECT_NONE
k0_SensorEffSet = 0, // @ C00_EFFECT_SET
k1_SensorEffClear = 1, // @ C01_EFFECT_CLEAR
k2_SensorEffToggle = 2, // @ C02_EFFECT_TOGGLE
k3_SensorEffHold = 3, // @ C03_EFFECT_HOLD
k10_SensorEffAddExp = 10 // @ C10_EFFECT_ADD_EXPERIENCE
};
enum SensorType {
k0_SensorDisabled = 0, // @ C000_SENSOR_DISABLED /* Never triggered, may be used for a floor or wall ornament */
k1_SensorFloorTheronPartyCreatureObj = 1, // @ C001_SENSOR_FLOOR_THERON_PARTY_CREATURE_OBJECT /* Triggered by party/thing F0276_SENSOR_ProcessThingAdditionOrRemoval */
k2_SensorFloorTheronPartyCreature = 2, // @ C002_SENSOR_FLOOR_THERON_PARTY_CREATURE /* Triggered by party/thing F0276_SENSOR_ProcessThingAdditionOrRemoval */
k3_SensorFloorParty = 3, // @ C003_SENSOR_FLOOR_PARTY /* Triggered by party/thing F0276_SENSOR_ProcessThingAdditionOrRemoval */
k4_SensorFloorObj = 4, // @ C004_SENSOR_FLOOR_OBJECT /* Triggered by party/thing F0276_SENSOR_ProcessThingAdditionOrRemoval */
k5_SensorFloorPartyOnStairs = 5, // @ C005_SENSOR_FLOOR_PARTY_ON_STAIRS /* Triggered by party/thing F0276_SENSOR_ProcessThingAdditionOrRemoval */
k6_SensorFloorGroupGenerator = 6, // @ C006_SENSOR_FLOOR_GROUP_GENERATOR /* Triggered by event F0245_TIMELINE_ProcessEvent5_Square_Corridor */
k7_SensorFloorCreature = 7, // @ C007_SENSOR_FLOOR_CREATURE /* Triggered by party/thing F0276_SENSOR_ProcessThingAdditionOrRemoval */
k8_SensorFloorPartyPossession = 8, // @ C008_SENSOR_FLOOR_PARTY_POSSESSION /* Triggered by party/thing F0276_SENSOR_ProcessThingAdditionOrRemoval */
k9_SensorFloorVersionChecker = 9, // @ C009_SENSOR_FLOOR_VERSION_CHECKER /* Triggered by party/thing F0276_SENSOR_ProcessThingAdditionOrRemoval */
k1_SensorWallOrnClick = 1, // @ C001_SENSOR_WALL_ORNAMENT_CLICK /* Triggered by player click F0275_SENSOR_IsTriggeredByClickOnWall */
k2_SensorWallOrnClickWithAnyObj = 2, // @ C002_SENSOR_WALL_ORNAMENT_CLICK_WITH_ANY_OBJECT /* Triggered by player click F0275_SENSOR_IsTriggeredByClickOnWall */
k3_SensorWallOrnClickWithSpecObj = 3, // @ C003_SENSOR_WALL_ORNAMENT_CLICK_WITH_SPECIFIC_OBJECT /* Triggered by player click F0275_SENSOR_IsTriggeredByClickOnWall */
k4_SensorWallOrnClickWithSpecObjRemoved = 4, // @ C004_SENSOR_WALL_ORNAMENT_CLICK_WITH_SPECIFIC_OBJECT_REMOVED /* Triggered by player click F0275_SENSOR_IsTriggeredByClickOnWall */
k5_SensorWallAndOrGate = 5, // @ C005_SENSOR_WALL_AND_OR_GATE /* Triggered by event F0248_TIMELINE_ProcessEvent6_Square_Wall */
k6_SensorWallCountdown = 6, // @ C006_SENSOR_WALL_COUNTDOWN /* Triggered by event F0248_TIMELINE_ProcessEvent6_Square_Wall */
k7_SensorWallSingleProjLauncherNewObj = 7, // @ C007_SENSOR_WALL_SINGLE_PROJECTILE_LAUNCHER_NEW_OBJECT /* Triggered by event F0248_TIMELINE_ProcessEvent6_Square_Wall */
k8_SensorWallSingleProjLauncherExplosion = 8, // @ C008_SENSOR_WALL_SINGLE_PROJECTILE_LAUNCHER_EXPLOSION /* Triggered by event F0248_TIMELINE_ProcessEvent6_Square_Wall */
k9_SensorWallDoubleProjLauncherNewObj = 9, // @ C009_SENSOR_WALL_DOUBLE_PROJECTILE_LAUNCHER_NEW_OBJECT /* Triggered by event F0248_TIMELINE_ProcessEvent6_Square_Wall */
k10_SensorWallDoubleProjLauncherExplosion = 10, // @ C010_SENSOR_WALL_DOUBLE_PROJECTILE_LAUNCHER_EXPLOSION /* Triggered by event F0248_TIMELINE_ProcessEvent6_Square_Wall */
k11_SensorWallOrnClickWithSpecObjRemovedRotateSensors = 11, // @ C011_SENSOR_WALL_ORNAMENT_CLICK_WITH_SPECIFIC_OBJECT_REMOVED_ROTATE_SENSORS /* Triggered by player click F0275_SENSOR_IsTriggeredByClickOnWall */
k12_SensorWallObjGeneratorRotateSensors = 12, // @ C012_SENSOR_WALL_OBJECT_GENERATOR_ROTATE_SENSORS /* Triggered by player click F0275_SENSOR_IsTriggeredByClickOnWall */
k13_SensorWallSingleObjStorageRotateSensors = 13, // @ C013_SENSOR_WALL_SINGLE_OBJECT_STORAGE_ROTATE_SENSORS /* Triggered by player click F0275_SENSOR_IsTriggeredByClickOnWall */
k14_SensorWallSingleProjLauncherSquareObj = 14, // @ C014_SENSOR_WALL_SINGLE_PROJECTILE_LAUNCHER_SQUARE_OBJECT /* Triggered by event F0248_TIMELINE_ProcessEvent6_Square_Wall */
k15_SensorWallDoubleProjLauncherSquareObj = 15, // @ C015_SENSOR_WALL_DOUBLE_PROJECTILE_LAUNCHER_SQUARE_OBJECT /* Triggered by event F0248_TIMELINE_ProcessEvent6_Square_Wall */
k16_SensorWallObjExchanger = 16, // @ C016_SENSOR_WALL_OBJECT_EXCHANGER /* Triggered by player click F0275_SENSOR_IsTriggeredByClickOnWall */
k17_SensorWallOrnClickWithSpecObjRemovedSensor = 17, // @ C017_SENSOR_WALL_ORNAMENT_CLICK_WITH_SPECIFIC_OBJECT_REMOVED_REMOVE_SENSOR /* Triggered by player click F0275_SENSOR_IsTriggeredByClickOnWall */
k18_SensorWallEndGame = 18, // @ C018_SENSOR_WALL_END_GAME /* Triggered by event F0248_TIMELINE_ProcessEvent6_Square_Wall */
k127_SensorWallChampionPortrait = 127 // @ C127_SENSOR_WALL_CHAMPION_PORTRAIT /* Triggered by player click F0275_SENSOR_IsTriggeredByClickOnWall */
};
#define k0x8000_randomDrop 0x8000 // @ MASK0x8000_RANDOM_DROP
enum WeaponType {
k2_WeaponTypeTorch = 2, // @ C02_WEAPON_TORCH
k8_WeaponTypeDagger = 8, // @ C08_WEAPON_DAGGER
k9_WeaponTypeFalchion = 9, // @ C09_WEAPON_FALCHION
k10_WeaponTypeSword = 10, // @ C10_WEAPON_SWORD
k23_WeaponTypeClub = 23, // @ C23_WEAPON_CLUB
k24_WeaponTypeStoneClub = 24, // @ C24_WEAPON_STONE_CLUB
k27_WeaponTypeArrow = 27, // @ C27_WEAPON_ARROW
k28_WeaponTypeSlayer = 28, // @ C28_WEAPON_SLAYER
k30_WeaponTypeRock = 30, // @ C30_WEAPON_ROCK
k31_WeaponTypePoisonDart = 31, // @ C31_WEAPON_POISON_DART
k32_WeaponTypeThrowingStar = 32 // @ C32_WEAPON_THROWING_STAR
};
enum ArmourType {
k30_ArmourTypeWoodenShield = 30, // @ C30_ARMOUR_WOODEN_SHIELD
k38_ArmourTypeArmet = 38, // @ C38_ARMOUR_ARMET
k39_ArmourTypeTorsoPlate = 39, // @ C39_ARMOUR_TORSO_PLATE
k40_ArmourTypeLegPlate = 40, // @ C40_ARMOUR_LEG_PLATE
k41_ArmourTypeFootPlate = 41 // @ C41_ARMOUR_FOOT_PLATE
};
enum PotionType {
k3_PotionTypeVen = 3, // @ C03_POTION_VEN_POTION,
k6_PotionTypeRos = 6, // @ C06_POTION_ROS_POTION,
k7_PotionTypeKu = 7, // @ C07_POTION_KU_POTION,
k8_PotionTypeDane = 8, // @ C08_POTION_DANE_POTION,
k9_PotionTypeNeta = 9, // @ C09_POTION_NETA_POTION,
k10_PotionTypeAntivenin = 10, // @ C10_POTION_ANTIVENIN,
k11_PotionTypeMon = 11, // @ C11_POTION_MON_POTION,
k12_PotionTypeYa = 12, // @ C12_POTION_YA_POTION,
k13_PotionTypeEe = 13, // @ C13_POTION_EE_POTION,
k14_PotionTypeVi = 14, // @ C14_POTION_VI_POTION,
k15_PotionTypeWaterFlask = 15, // @ C15_POTION_WATER_FLASK,
k19_PotionTypeFulBomb = 19, // @ C19_POTION_FUL_BOMB,
k20_PotionTypeEmptyFlask = 20 // @ C20_POTION_EMPTY_FLASK,
};
enum JunkType {
k1_JunkTypeWaterskin = 1, // @ C01_JUNK_WATERSKIN,
k5_JunkTypeBones = 5, // @ C05_JUNK_BONES,
k25_JunkTypeBoulder = 25, // @ C25_JUNK_BOULDER,
k33_JunkTypeScreamerSlice = 33, // @ C33_JUNK_SCREAMER_SLICE,
k34_JunkTypeWormRound = 34, // @ C34_JUNK_WORM_ROUND,
k35_JunkTypeDrumstickShank = 35, // @ C35_JUNK_DRUMSTICK_SHANK,
k36_JunkTypeDragonSteak = 36, // @ C36_JUNK_DRAGON_STEAK,
k42_JunkTypeMagicalBoxBlue = 42, // @ C42_JUNK_MAGICAL_BOX_BLUE,
k43_JunkTypeMagicalBoxGreen = 43, // @ C43_JUNK_MAGICAL_BOX_GREEN,
k51_JunkTypeZokathra = 51 // @ C51_JUNK_ZOKATHRA,
};
#define kM1_soundModeDoNotPlaySound -1 // @ CM1_MODE_DO_NOT_PLAY_SOUND
#define k0_soundModePlayImmediately 0 // @ C00_MODE_PLAY_IMMEDIATELY
#define k1_soundModePlayIfPrioritized 1 // @ C01_MODE_PLAY_IF_PRIORITIZED
#define k2_soundModePlayOneTickLater 2 // @ C02_MODE_PLAY_ONE_TICK_LATER
#define k0_ExplosionType_Fireball 0 // @ C000_EXPLOSION_FIREBALL
#define k1_ExplosionType_Slime 1 // @ C001_EXPLOSION_SLIME
#define k2_ExplosionType_LightningBolt 2 // @ C002_EXPLOSION_LIGHTNING_BOLT
#define k3_ExplosionType_HarmNonMaterial 3 // @ C003_EXPLOSION_HARM_NON_MATERIAL
#define k4_ExplosionType_OpenDoor 4 // @ C004_EXPLOSION_OPEN_DOOR
#define k6_ExplosionType_PoisonBolt 6 // @ C006_EXPLOSION_POISON_BOLT
#define k7_ExplosionType_PoisonCloud 7 // @ C007_EXPLOSION_POISON_CLOUD
#define k40_ExplosionType_Smoke 40 // @ C040_EXPLOSION_SMOKE
#define k50_ExplosionType_Fluxcage 50 // @ C050_EXPLOSION_FLUXCAGE
#define k100_ExplosionType_RebirthStep1 100 // @ C100_EXPLOSION_REBIRTH_STEP1
#define k101_ExplosionType_RebirthStep2 101 // @ C101_EXPLOSION_REBIRTH_STEP2
enum SquareMask {
k0x0001_WallWestRandOrnAllowed = 0x1, // @ MASK0x0001_WALL_WEST_RANDOM_ORNAMENT_ALLOWED
k0x0002_WallSouthRandOrnAllowed = 0x2, // @ MASK0x0002_WALL_SOUTH_RANDOM_ORNAMENT_ALLOWED
k0x0004_WallEastRandOrnAllowed = 0x4, // @ MASK0x0004_WALL_EAST_RANDOM_ORNAMENT_ALLOWED
k0x0008_WallNorthRandOrnAllowed = 0x8, // @ MASK0x0008_WALL_NORTH_RANDOM_ORNAMENT_ALLOWED
k0x0008_CorridorRandOrnAllowed = 0x8, // @ MASK0x0008_CORRIDOR_RANDOM_ORNAMENT_ALLOWED
k0x0001_PitImaginary = 0x1, // @ MASK0x0001_PIT_IMAGINARY
k0x0004_PitInvisible = 0x4, // @ MASK0x0004_PIT_INVISIBLE
k0x0008_PitOpen = 0x8, // @ MASK0x0008_PIT_OPEN
k0x0004_StairsUp = 0x4, // @ MASK0x0004_STAIRS_UP
k0x0008_StairsNorthSouthOrient = 0x8, // @ MASK0x0008_STAIRS_NORTH_SOUTH_ORIENTATION
k0x0008_DoorNorthSouthOrient = 0x8, // @ MASK0x0008_DOOR_NORTH_SOUTH_ORIENTATION
k0x0004_TeleporterVisible = 0x4, // @ MASK0x0004_TELEPORTER_VISIBLE
k0x0008_TeleporterOpen = 0x8, // @ MASK0x0008_TELEPORTER_OPEN
k0x0001_FakeWallImaginary = 0x1, // @ MASK0x0001_FAKEWALL_IMAGINARY
k0x0004_FakeWallOpen = 0x4, // @ MASK0x0004_FAKEWALL_OPEN
k0x0008_FakeWallRandOrnOrFootPAllowed = 0x8, // @ MASK0x0008_FAKEWALL_RANDOM_ORNAMENT_OR_FOOTPRINTS_ALLOWED
k0x0010_ThingListPresent = 0x10, // @ MASK0x0010_THING_LIST_PRESENT
k0x8000_DecodeEvenIfInvisible = 0x8000 // @ MASK0x8000_DECODE_EVEN_IF_INVISIBLE
};
enum SquareType {
kM2_ChampionElemType = -2, // @ CM2_ELEMENT_CHAMPION
kM1_CreatureElemType = -1, // @ CM1_ELEMENT_CREATURE
k0_WallElemType = 0, // @ C00_ELEMENT_WALL
k1_CorridorElemType = 1, // @ C01_ELEMENT_CORRIDOR
k2_PitElemType = 2, // @ C02_ELEMENT_PIT
k3_StairsElemType = 3, // @ C03_ELEMENT_STAIRS
k4_DoorElemType = 4, // @ C04_ELEMENT_DOOR
k5_TeleporterElemType = 5, // @ C05_ELEMENT_TELEPORTER
k6_FakeWallElemType = 6, // @ C06_ELEMENT_FAKEWALL
k16_DoorSideElemType = 16, // @ C16_ELEMENT_DOOR_SIDE
k17_DoorFrontElemType = 17, // @ C17_ELEMENT_DOOR_FRONT
k18_StairsSideElemType = 18, // @ C18_ELEMENT_STAIRS_SIDE
k19_StairsFrontElemType = 19 // @ C19_ELEMENT_STAIRS_FRONT
}; // @ C[-2..19]_ELEMENT_...
#define k0x8000_championBones 0x8000 // @ MASK0x8000_CHAMPION_BONES
#define k0x7FFF_thingType 0x7FFF // @ MASK0x7FFF_THING_TYPE
class ObjectInfoIndex { class ObjectInfoIndex {
public: public:
int16 _type; int16 _type;
@ -95,11 +301,6 @@ public:
} }
}; // @ OBJECT_INFO }; // @ OBJECT_INFO
enum ArmourAttribute {
k0x0080_ArmourAttributeIsAShield = 0x0080, // @ MASK0x0080_IS_A_SHIELD
k0x0007_ArmourAttributeSharpDefense = 0x0007 // @ MASK0x0007_SHARP_DEFENSE
};
class ArmourInfo { class ArmourInfo {
public: public:
uint16 _weight; uint16 _weight;
@ -114,24 +315,7 @@ public:
void setAttribute(ArmourAttribute attribute) { _attributes |= attribute; } void setAttribute(ArmourAttribute attribute) { _attributes |= attribute; }
}; // @ ARMOUR_INFO }; // @ ARMOUR_INFO
#define kM1_WeaponClassNone -1
/* Class 0: SWING weapons */
#define k0_WeaponClassSwingWeapon 0 // @ C000_CLASS_SWING_WEAPON
/* Class 1 to 15: THROW weapons */
#define k2_WeaponClassDaggerAndAxes 2 // @ C002_CLASS_DAGGER_AND_AXES
#define k10_WeaponClassBowAmmunition 10 // @ C010_CLASS_BOW_AMMUNITION
#define k11_WeaponClassSlingAmmunition 11 // @ C011_CLASS_SLING_AMMUNITION
#define k12_WeaponClassPoisinDart 12 // @ C012_CLASS_POISON_DART
/* Class 16 to 111: SHOOT weapons */
#define k16_WeaponClassFirstBow 16 // @ C016_CLASS_FIRST_BOW
#define k31_WeaponClassLastBow 31 // @ C031_CLASS_LAST_BOW
#define k32_WeaponClassFirstSling 32 // @ C032_CLASS_FIRST_SLING
#define k47_WeaponClassLastSling 47 // @ C047_CLASS_LAST_SLING
/* Class 112 to 255: Magic and special weapons */
#define k112_WeaponClassFirstMagicWeapon 112 // @ C112_CLASS_FIRST_MAGIC_WEAPON
class WeaponInfo { class WeaponInfo {
public: public:
uint16 _weight; uint16 _weight;
uint16 _class; uint16 _class;
@ -148,33 +332,6 @@ public:
uint16 getProjectileAspectOrdinal() { return (_attributes >> 8) & 0x1F; } // @ M66_PROJECTILE_ASPECT_ORDINAL uint16 getProjectileAspectOrdinal() { return (_attributes >> 8) & 0x1F; } // @ M66_PROJECTILE_ASPECT_ORDINAL
}; // @ WEAPON_INFO }; // @ WEAPON_INFO
enum TextType {
/* Used for text on walls */
k0_TextTypeInscription = 0, // @ C0_TEXT_TYPE_INSCRIPTION
/* Used for messages displayed when the party walks on a square */
k1_TextTypeMessage = 1, // @ C1_TEXT_TYPE_MESSAGE
/* Used for text on scrolls and champion information */
k2_TextTypeScroll = 2 // @ C2_TEXT_TYPE_SCROLL
};
enum SquareAspectIndice {
k0_ElementAspect = 0, // @ C0_ELEMENT
k1_FirstGroupOrObjectAspect = 1, // @ C1_FIRST_GROUP_OR_OBJECT
k2_RightWallOrnOrdAspect = 2, // @ C2_RIGHT_WALL_ORNAMENT_ORDINAL
k3_FrontWallOrnOrdAspect = 3, // @ C3_FRONT_WALL_ORNAMENT_ORDINAL
k4_LeftWallOrnOrdAspect = 4, // @ C4_LEFT_WALL_ORNAMENT_ORDINAL
k2_PitInvisibleAspect = 2, // @ C2_PIT_INVISIBLE
k2_TeleporterVisibleAspect = 2, // @ C2_TELEPORTER_VISIBLE
k2_StairsUpAspect = 2, // @ C2_STAIRS_UP
k2_DoorStateAspect = 2, // @ C2_DOOR_STATE
k3_DoorThingIndexAspect = 3, // @ C3_DOOR_THING_INDEX
k4_FloorOrnOrdAspect = 4, // @ C4_FLOOR_ORNAMENT_ORDINAL
k0x8000_FootprintsAspect = 0x8000 // @ MASK0x8000_FOOTPRINTS
};
#define k15_immuneToFire 15 // @ C15_IMMUNE_TO_FIRE
#define k15_immuneToPoison 15 // @ C15_IMMUNE_TO_POISON
class CreatureInfo { class CreatureInfo {
public: public:
byte _creatureAspectIndex; byte _creatureAspectIndex;
@ -220,11 +377,6 @@ public:
byte getType() { return _attributes & 1; } byte getType() { return _attributes & 1; }
}; // @ DOOR }; // @ DOOR
enum TeleporterScope {
k0x0001_TelepScopeCreatures = 1, // @ MASK0x0001_SCOPE_CREATURES
k0x0002_TelepScopeObjOrParty = 2 // @ MASK0x0002_SCOPE_OBJECTS_OR_PARTY
};
class Teleporter { class Teleporter {
Thing _nextThing; Thing _nextThing;
uint16 _attributes; uint16 _attributes;
@ -253,47 +405,6 @@ public:
void setVisible(bool visible) { _textDataRef = (_textDataRef & ~1) | (visible ? 1 : 0); } void setVisible(bool visible) { _textDataRef = (_textDataRef & ~1) | (visible ? 1 : 0); }
}; // @ TEXTSTRING }; // @ TEXTSTRING
enum SensorActionType {
kM1_SensorEffNone = -1, // @ CM1_EFFECT_NONE
k0_SensorEffSet = 0, // @ C00_EFFECT_SET
k1_SensorEffClear = 1, // @ C01_EFFECT_CLEAR
k2_SensorEffToggle = 2, // @ C02_EFFECT_TOGGLE
k3_SensorEffHold = 3, // @ C03_EFFECT_HOLD
k10_SensorEffAddExp = 10 // @ C10_EFFECT_ADD_EXPERIENCE
};
enum SensorType {
k0_SensorDisabled = 0, // @ C000_SENSOR_DISABLED /* Never triggered, may be used for a floor or wall ornament */
k1_SensorFloorTheronPartyCreatureObj = 1, // @ C001_SENSOR_FLOOR_THERON_PARTY_CREATURE_OBJECT /* Triggered by party/thing F0276_SENSOR_ProcessThingAdditionOrRemoval */
k2_SensorFloorTheronPartyCreature = 2, // @ C002_SENSOR_FLOOR_THERON_PARTY_CREATURE /* Triggered by party/thing F0276_SENSOR_ProcessThingAdditionOrRemoval */
k3_SensorFloorParty = 3, // @ C003_SENSOR_FLOOR_PARTY /* Triggered by party/thing F0276_SENSOR_ProcessThingAdditionOrRemoval */
k4_SensorFloorObj = 4, // @ C004_SENSOR_FLOOR_OBJECT /* Triggered by party/thing F0276_SENSOR_ProcessThingAdditionOrRemoval */
k5_SensorFloorPartyOnStairs = 5, // @ C005_SENSOR_FLOOR_PARTY_ON_STAIRS /* Triggered by party/thing F0276_SENSOR_ProcessThingAdditionOrRemoval */
k6_SensorFloorGroupGenerator = 6, // @ C006_SENSOR_FLOOR_GROUP_GENERATOR /* Triggered by event F0245_TIMELINE_ProcessEvent5_Square_Corridor */
k7_SensorFloorCreature = 7, // @ C007_SENSOR_FLOOR_CREATURE /* Triggered by party/thing F0276_SENSOR_ProcessThingAdditionOrRemoval */
k8_SensorFloorPartyPossession = 8, // @ C008_SENSOR_FLOOR_PARTY_POSSESSION /* Triggered by party/thing F0276_SENSOR_ProcessThingAdditionOrRemoval */
k9_SensorFloorVersionChecker = 9, // @ C009_SENSOR_FLOOR_VERSION_CHECKER /* Triggered by party/thing F0276_SENSOR_ProcessThingAdditionOrRemoval */
k1_SensorWallOrnClick = 1, // @ C001_SENSOR_WALL_ORNAMENT_CLICK /* Triggered by player click F0275_SENSOR_IsTriggeredByClickOnWall */
k2_SensorWallOrnClickWithAnyObj = 2, // @ C002_SENSOR_WALL_ORNAMENT_CLICK_WITH_ANY_OBJECT /* Triggered by player click F0275_SENSOR_IsTriggeredByClickOnWall */
k3_SensorWallOrnClickWithSpecObj = 3, // @ C003_SENSOR_WALL_ORNAMENT_CLICK_WITH_SPECIFIC_OBJECT /* Triggered by player click F0275_SENSOR_IsTriggeredByClickOnWall */
k4_SensorWallOrnClickWithSpecObjRemoved = 4, // @ C004_SENSOR_WALL_ORNAMENT_CLICK_WITH_SPECIFIC_OBJECT_REMOVED /* Triggered by player click F0275_SENSOR_IsTriggeredByClickOnWall */
k5_SensorWallAndOrGate = 5, // @ C005_SENSOR_WALL_AND_OR_GATE /* Triggered by event F0248_TIMELINE_ProcessEvent6_Square_Wall */
k6_SensorWallCountdown = 6, // @ C006_SENSOR_WALL_COUNTDOWN /* Triggered by event F0248_TIMELINE_ProcessEvent6_Square_Wall */
k7_SensorWallSingleProjLauncherNewObj = 7, // @ C007_SENSOR_WALL_SINGLE_PROJECTILE_LAUNCHER_NEW_OBJECT /* Triggered by event F0248_TIMELINE_ProcessEvent6_Square_Wall */
k8_SensorWallSingleProjLauncherExplosion = 8, // @ C008_SENSOR_WALL_SINGLE_PROJECTILE_LAUNCHER_EXPLOSION /* Triggered by event F0248_TIMELINE_ProcessEvent6_Square_Wall */
k9_SensorWallDoubleProjLauncherNewObj = 9, // @ C009_SENSOR_WALL_DOUBLE_PROJECTILE_LAUNCHER_NEW_OBJECT /* Triggered by event F0248_TIMELINE_ProcessEvent6_Square_Wall */
k10_SensorWallDoubleProjLauncherExplosion = 10, // @ C010_SENSOR_WALL_DOUBLE_PROJECTILE_LAUNCHER_EXPLOSION /* Triggered by event F0248_TIMELINE_ProcessEvent6_Square_Wall */
k11_SensorWallOrnClickWithSpecObjRemovedRotateSensors = 11, // @ C011_SENSOR_WALL_ORNAMENT_CLICK_WITH_SPECIFIC_OBJECT_REMOVED_ROTATE_SENSORS /* Triggered by player click F0275_SENSOR_IsTriggeredByClickOnWall */
k12_SensorWallObjGeneratorRotateSensors = 12, // @ C012_SENSOR_WALL_OBJECT_GENERATOR_ROTATE_SENSORS /* Triggered by player click F0275_SENSOR_IsTriggeredByClickOnWall */
k13_SensorWallSingleObjStorageRotateSensors = 13, // @ C013_SENSOR_WALL_SINGLE_OBJECT_STORAGE_ROTATE_SENSORS /* Triggered by player click F0275_SENSOR_IsTriggeredByClickOnWall */
k14_SensorWallSingleProjLauncherSquareObj = 14, // @ C014_SENSOR_WALL_SINGLE_PROJECTILE_LAUNCHER_SQUARE_OBJECT /* Triggered by event F0248_TIMELINE_ProcessEvent6_Square_Wall */
k15_SensorWallDoubleProjLauncherSquareObj = 15, // @ C015_SENSOR_WALL_DOUBLE_PROJECTILE_LAUNCHER_SQUARE_OBJECT /* Triggered by event F0248_TIMELINE_ProcessEvent6_Square_Wall */
k16_SensorWallObjExchanger = 16, // @ C016_SENSOR_WALL_OBJECT_EXCHANGER /* Triggered by player click F0275_SENSOR_IsTriggeredByClickOnWall */
k17_SensorWallOrnClickWithSpecObjRemovedSensor = 17, // @ C017_SENSOR_WALL_ORNAMENT_CLICK_WITH_SPECIFIC_OBJECT_REMOVED_REMOVE_SENSOR /* Triggered by player click F0275_SENSOR_IsTriggeredByClickOnWall */
k18_SensorWallEndGame = 18, // @ C018_SENSOR_WALL_END_GAME /* Triggered by event F0248_TIMELINE_ProcessEvent6_Square_Wall */
k127_SensorWallChampionPortrait = 127 // @ C127_SENSOR_WALL_CHAMPION_PORTRAIT /* Triggered by player click F0275_SENSOR_IsTriggeredByClickOnWall */
};
class Sensor { class Sensor {
Thing _nextThing; Thing _nextThing;
uint16 _datAndType; uint16 _datAndType;
@ -332,22 +443,6 @@ public:
}; // @ SENSOR }; // @ SENSOR
#define k0x8000_randomDrop 0x8000 // @ MASK0x8000_RANDOM_DROP
enum WeaponType {
k2_WeaponTypeTorch = 2, // @ C02_WEAPON_TORCH
k8_WeaponTypeDagger = 8, // @ C08_WEAPON_DAGGER
k9_WeaponTypeFalchion = 9, // @ C09_WEAPON_FALCHION
k10_WeaponTypeSword = 10, // @ C10_WEAPON_SWORD
k23_WeaponTypeClub = 23, // @ C23_WEAPON_CLUB
k24_WeaponTypeStoneClub = 24, // @ C24_WEAPON_STONE_CLUB
k27_WeaponTypeArrow = 27, // @ C27_WEAPON_ARROW
k28_WeaponTypeSlayer = 28, // @ C28_WEAPON_SLAYER
k30_WeaponTypeRock = 30, // @ C30_WEAPON_ROCK
k31_WeaponTypePoisonDart = 31, // @ C31_WEAPON_POISON_DART
k32_WeaponTypeThrowingStar = 32 // @ C32_WEAPON_THROWING_STAR
};
class Weapon { class Weapon {
Thing _nextThing; Thing _nextThing;
uint16 _desc; uint16 _desc;
@ -375,13 +470,6 @@ public:
void setDoNotDiscard(uint16 val) { _desc = (_desc & ~(1 << 7)) | ((val & 1) << 7); } void setDoNotDiscard(uint16 val) { _desc = (_desc & ~(1 << 7)) | ((val & 1) << 7); }
}; // @ WEAPON }; // @ WEAPON
enum ArmourType {
k30_ArmourTypeWoodenShield = 30, // @ C30_ARMOUR_WOODEN_SHIELD
k38_ArmourTypeArmet = 38, // @ C38_ARMOUR_ARMET
k39_ArmourTypeTorsoPlate = 39, // @ C39_ARMOUR_TORSO_PLATE
k40_ArmourTypeLegPlate = 40, // @ C40_ARMOUR_LEG_PLATE
k41_ArmourTypeFootPlate = 41 // @ C41_ARMOUR_FOOT_PLATE
};
class Armour { class Armour {
Thing _nextThing; Thing _nextThing;
uint16 _attributes; uint16 _attributes;
@ -417,21 +505,6 @@ public:
uint16 getTextStringThingIndex() { return _attributes & 0x3FF; } uint16 getTextStringThingIndex() { return _attributes & 0x3FF; }
}; // @ SCROLL }; // @ SCROLL
enum PotionType {
k3_PotionTypeVen = 3, // @ C03_POTION_VEN_POTION,
k6_PotionTypeRos = 6, // @ C06_POTION_ROS_POTION,
k7_PotionTypeKu = 7, // @ C07_POTION_KU_POTION,
k8_PotionTypeDane = 8, // @ C08_POTION_DANE_POTION,
k9_PotionTypeNeta = 9, // @ C09_POTION_NETA_POTION,
k10_PotionTypeAntivenin = 10, // @ C10_POTION_ANTIVENIN,
k11_PotionTypeMon = 11, // @ C11_POTION_MON_POTION,
k12_PotionTypeYa = 12, // @ C12_POTION_YA_POTION,
k13_PotionTypeEe = 13, // @ C13_POTION_EE_POTION,
k14_PotionTypeVi = 14, // @ C14_POTION_VI_POTION,
k15_PotionTypeWaterFlask = 15, // @ C15_POTION_WATER_FLASK,
k19_PotionTypeFulBomb = 19, // @ C19_POTION_FUL_BOMB,
k20_PotionTypeEmptyFlask = 20 // @ C20_POTION_EMPTY_FLASK,
};
class Potion { class Potion {
public: public:
Thing _nextThing; Thing _nextThing;
@ -458,19 +531,6 @@ public:
Thing &getNextThing() { return _nextThing; } Thing &getNextThing() { return _nextThing; }
}; // @ CONTAINER }; // @ CONTAINER
enum JunkType {
k1_JunkTypeWaterskin = 1, // @ C01_JUNK_WATERSKIN,
k5_JunkTypeBones = 5, // @ C05_JUNK_BONES,
k25_JunkTypeBoulder = 25, // @ C25_JUNK_BOULDER,
k33_JunkTypeScreamerSlice = 33, // @ C33_JUNK_SCREAMER_SLICE,
k34_JunkTypeWormRound = 34, // @ C34_JUNK_WORM_ROUND,
k35_JunkTypeDrumstickShank = 35, // @ C35_JUNK_DRUMSTICK_SHANK,
k36_JunkTypeDragonSteak = 36, // @ C36_JUNK_DRAGON_STEAK,
k42_JunkTypeMagicalBoxBlue = 42, // @ C42_JUNK_MAGICAL_BOX_BLUE,
k43_JunkTypeMagicalBoxGreen = 43, // @ C43_JUNK_MAGICAL_BOX_GREEN,
k51_JunkTypeZokathra = 51 // @ C51_JUNK_ZOKATHRA,
};
class Junk { class Junk {
Thing _nextThing; Thing _nextThing;
uint16 _attributes; uint16 _attributes;
@ -488,11 +548,6 @@ public:
void setNextThing(Thing thing) { _nextThing = thing; } void setNextThing(Thing thing) { _nextThing = thing; }
}; // @ JUNK }; // @ JUNK
#define kM1_soundModeDoNotPlaySound -1 // @ CM1_MODE_DO_NOT_PLAY_SOUND
#define k0_soundModePlayImmediately 0 // @ C00_MODE_PLAY_IMMEDIATELY
#define k1_soundModePlayIfPrioritized 1 // @ C01_MODE_PLAY_IF_PRIORITIZED
#define k2_soundModePlayOneTickLater 2 // @ C02_MODE_PLAY_ONE_TICK_LATER
class Projectile { class Projectile {
public: public:
Thing _nextThing; Thing _nextThing;
@ -505,18 +560,6 @@ public:
}; // @ PROJECTILE }; // @ PROJECTILE
#define k0_ExplosionType_Fireball 0 // @ C000_EXPLOSION_FIREBALL
#define k1_ExplosionType_Slime 1 // @ C001_EXPLOSION_SLIME
#define k2_ExplosionType_LightningBolt 2 // @ C002_EXPLOSION_LIGHTNING_BOLT
#define k3_ExplosionType_HarmNonMaterial 3 // @ C003_EXPLOSION_HARM_NON_MATERIAL
#define k4_ExplosionType_OpenDoor 4 // @ C004_EXPLOSION_OPEN_DOOR
#define k6_ExplosionType_PoisonBolt 6 // @ C006_EXPLOSION_POISON_BOLT
#define k7_ExplosionType_PoisonCloud 7 // @ C007_EXPLOSION_POISON_CLOUD
#define k40_ExplosionType_Smoke 40 // @ C040_EXPLOSION_SMOKE
#define k50_ExplosionType_Fluxcage 50 // @ C050_EXPLOSION_FLUXCAGE
#define k100_ExplosionType_RebirthStep1 100 // @ C100_EXPLOSION_REBIRTH_STEP1
#define k101_ExplosionType_RebirthStep2 101 // @ C101_EXPLOSION_REBIRTH_STEP2
class Explosion { class Explosion {
Thing _nextThing; Thing _nextThing;
uint16 _attributes; uint16 _attributes;
@ -533,47 +576,6 @@ public:
void setCentered(uint16 val) { _attributes = (_attributes & ~(1 << 7)) | ((val & 1) << 7); } void setCentered(uint16 val) { _attributes = (_attributes & ~(1 << 7)) | ((val & 1) << 7); }
}; // @ EXPLOSION }; // @ EXPLOSION
enum SquareMask {
k0x0001_WallWestRandOrnAllowed = 0x1, // @ MASK0x0001_WALL_WEST_RANDOM_ORNAMENT_ALLOWED
k0x0002_WallSouthRandOrnAllowed = 0x2, // @ MASK0x0002_WALL_SOUTH_RANDOM_ORNAMENT_ALLOWED
k0x0004_WallEastRandOrnAllowed = 0x4, // @ MASK0x0004_WALL_EAST_RANDOM_ORNAMENT_ALLOWED
k0x0008_WallNorthRandOrnAllowed = 0x8, // @ MASK0x0008_WALL_NORTH_RANDOM_ORNAMENT_ALLOWED
k0x0008_CorridorRandOrnAllowed = 0x8, // @ MASK0x0008_CORRIDOR_RANDOM_ORNAMENT_ALLOWED
k0x0001_PitImaginary = 0x1, // @ MASK0x0001_PIT_IMAGINARY
k0x0004_PitInvisible = 0x4, // @ MASK0x0004_PIT_INVISIBLE
k0x0008_PitOpen = 0x8, // @ MASK0x0008_PIT_OPEN
k0x0004_StairsUp = 0x4, // @ MASK0x0004_STAIRS_UP
k0x0008_StairsNorthSouthOrient = 0x8, // @ MASK0x0008_STAIRS_NORTH_SOUTH_ORIENTATION
k0x0008_DoorNorthSouthOrient = 0x8, // @ MASK0x0008_DOOR_NORTH_SOUTH_ORIENTATION
k0x0004_TeleporterVisible = 0x4, // @ MASK0x0004_TELEPORTER_VISIBLE
k0x0008_TeleporterOpen = 0x8, // @ MASK0x0008_TELEPORTER_OPEN
k0x0001_FakeWallImaginary = 0x1, // @ MASK0x0001_FAKEWALL_IMAGINARY
k0x0004_FakeWallOpen = 0x4, // @ MASK0x0004_FAKEWALL_OPEN
k0x0008_FakeWallRandOrnOrFootPAllowed = 0x8, // @ MASK0x0008_FAKEWALL_RANDOM_ORNAMENT_OR_FOOTPRINTS_ALLOWED
k0x0010_ThingListPresent = 0x10, // @ MASK0x0010_THING_LIST_PRESENT
k0x8000_DecodeEvenIfInvisible = 0x8000 // @ MASK0x8000_DECODE_EVEN_IF_INVISIBLE
};
enum SquareType {
kM2_ChampionElemType = -2, // @ CM2_ELEMENT_CHAMPION
kM1_CreatureElemType = -1, // @ CM1_ELEMENT_CREATURE
k0_WallElemType = 0, // @ C00_ELEMENT_WALL
k1_CorridorElemType = 1, // @ C01_ELEMENT_CORRIDOR
k2_PitElemType = 2, // @ C02_ELEMENT_PIT
k3_StairsElemType = 3, // @ C03_ELEMENT_STAIRS
k4_DoorElemType = 4, // @ C04_ELEMENT_DOOR
k5_TeleporterElemType = 5, // @ C05_ELEMENT_TELEPORTER
k6_FakeWallElemType = 6, // @ C06_ELEMENT_FAKEWALL
k16_DoorSideElemType = 16, // @ C16_ELEMENT_DOOR_SIDE
k17_DoorFrontElemType = 17, // @ C17_ELEMENT_DOOR_FRONT
k18_StairsSideElemType = 18, // @ C18_ELEMENT_STAIRS_SIDE
k19_StairsFrontElemType = 19 // @ C19_ELEMENT_STAIRS_FRONT
}; // @ C[-2..19]_ELEMENT_...
#define k0x8000_championBones 0x8000 // @ MASK0x8000_CHAMPION_BONES
#define k0x7FFF_thingType 0x7FFF // @ MASK0x7FFF_THING_TYPE
class Square { class Square {
byte _data; byte _data;
public: public:

View file

@ -1031,9 +1031,9 @@ void DisplayMan::drawFloorOrnament(uint16 floorOrnOrdinal, uint16 viewFloorIndex
if (!floorOrnOrdinal) if (!floorOrnOrdinal)
return; return;
bool drawFootprints = (getFlag(floorOrnOrdinal, k0x8000_FootprintsAspect) ? true : false); bool drawFootprints = (getFlag(floorOrnOrdinal, kDMMaskFootprints) ? true : false);
byte *bitmap; byte *bitmap;
if (!drawFootprints || clearFlag(floorOrnOrdinal, k0x8000_FootprintsAspect)) { if (!drawFootprints || clearFlag(floorOrnOrdinal, kDMMaskFootprints)) {
floorOrnOrdinal--; floorOrnOrdinal--;
uint16 floorOrnIndex = floorOrnOrdinal; uint16 floorOrnIndex = floorOrnOrdinal;
int16 nativeBitmapIndex = _currMapFloorOrnInfo[floorOrnIndex][k0_NativeBitmapIndex] int16 nativeBitmapIndex = _currMapFloorOrnInfo[floorOrnIndex][k0_NativeBitmapIndex]
@ -1224,20 +1224,20 @@ void DisplayMan::drawSquareD3L(Direction dir, int16 posX, int16 posY) {
int16 order; int16 order;
bool skip = false; bool skip = false;
_vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY); _vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY);
switch (squareAspect[k0_ElementAspect]) { switch (squareAspect[kDMSquareAspectElement]) {
case k19_StairsFrontElemType: case k19_StairsFrontElemType:
if (squareAspect[k2_StairsUpAspect]) if (squareAspect[kDMSquareAspectStairsUp])
drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexUpFrontD3L, frameStairsUpFrontD3L); drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexUpFrontD3L, frameStairsUpFrontD3L);
else else
drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexDownFrontD3L, frameStairsDownFrontD3L); drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexDownFrontD3L, frameStairsDownFrontD3L);
order = k0x3421_CellOrder_BackLeft_BackRight_FrontLeft_FrontRight; order = k0x3421_CellOrder_BackLeft_BackRight_FrontLeft_FrontRight;
/* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k0_viewFloor_D3L); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k0_viewFloor_D3L);
break; break;
case k0_WallElemType: case k0_WallElemType:
drawWallSetBitmap(_bitmapWallSetD3LCR, _frameWalls163[k1_ViewSquare_D3L]); drawWallSetBitmap(_bitmapWallSetD3LCR, _frameWalls163[k1_ViewSquare_D3L]);
isDrawnWallOrnAnAlcove(squareAspect[k2_RightWallOrnOrdAspect], k0_ViewWall_D3L_RIGHT); isDrawnWallOrnAnAlcove(squareAspect[kDMSquareAspectRightWallOrnOrd], k0_ViewWall_D3L_RIGHT);
if (isDrawnWallOrnAnAlcove(squareAspect[k3_FrontWallOrnOrdAspect], k2_ViewWall_D3L_FRONT)) if (isDrawnWallOrnAnAlcove(squareAspect[kDMSquareFrontWallOrnOrd], k2_ViewWall_D3L_FRONT))
order = k0x0000_CellOrder_Alcove; order = k0x0000_CellOrder_Alcove;
else else
return; return;
@ -1246,25 +1246,25 @@ void DisplayMan::drawSquareD3L(Direction dir, int16 posX, int16 posY) {
case kDMElementTypeStairsSide: case kDMElementTypeStairsSide:
order = k0x0321_CellOrder_BackLeft_BackRight_FrontRight; order = k0x0321_CellOrder_BackLeft_BackRight_FrontRight;
/* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k0_viewFloor_D3L); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k0_viewFloor_D3L);
break; break;
case kDMElementTypeDoorFront: case kDMElementTypeDoorFront:
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k0_viewFloor_D3L); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k0_viewFloor_D3L);
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k1_ViewSquare_D3L, k0x0218_CellOrder_DoorPass1_BackLeft_BackRight); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k1_ViewSquare_D3L, k0x0218_CellOrder_DoorPass1_BackLeft_BackRight);
drawWallSetBitmap(_bitmapWallSetDoorFrameLeftD3L, doorFrameLeftD3L); drawWallSetBitmap(_bitmapWallSetDoorFrameLeftD3L, doorFrameLeftD3L);
drawDoor(squareAspect[k3_DoorThingIndexAspect], squareAspect[k2_DoorStateAspect], drawDoor(squareAspect[kDMSquareAspectDoorThingIndex], squareAspect[kDMSquareAspectDoorState],
_doorNativeBitmapIndexFrontD3LCR, bitmapByteCount(48, 41), k0_ViewDoorOrnament_D3LCR, &doorFrameD3L); _doorNativeBitmapIndexFrontD3LCR, bitmapByteCount(48, 41), k0_ViewDoorOrnament_D3LCR, &doorFrameD3L);
order = k0x0349_CellOrder_DoorPass2_FrontLeft_FrontRight; order = k0x0349_CellOrder_DoorPass2_FrontLeft_FrontRight;
break; break;
case kDMElementTypePit: case kDMElementTypePit:
if (!squareAspect[k2_PitInvisibleAspect]) if (!squareAspect[kDMSquareAspectPitInvisible])
drawFloorPitOrStairsBitmap(k49_FloorPit_D3L_GraphicIndice, frameFloorPitD3L); drawFloorPitOrStairsBitmap(k49_FloorPit_D3L_GraphicIndice, frameFloorPitD3L);
// no break on purpose // no break on purpose
case kDMElementTypeTeleporter: case kDMElementTypeTeleporter:
case kDMElementTypeCorridor: case kDMElementTypeCorridor:
order = k0x3421_CellOrder_BackLeft_BackRight_FrontLeft_FrontRight; order = k0x3421_CellOrder_BackLeft_BackRight_FrontLeft_FrontRight;
/* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k0_viewFloor_D3L); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k0_viewFloor_D3L);
break; break;
default: default:
skip = true; skip = true;
@ -1272,9 +1272,9 @@ void DisplayMan::drawSquareD3L(Direction dir, int16 posX, int16 posY) {
} }
if (!skip) if (!skip)
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k1_ViewSquare_D3L, order); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k1_ViewSquare_D3L, order);
if ((squareAspect[k0_ElementAspect] == kDMElementTypeTeleporter) && squareAspect[k2_TeleporterVisibleAspect]) if ((squareAspect[kDMSquareAspectElement] == kDMElementTypeTeleporter) && squareAspect[kDMSquareAspectTeleporterVisible])
drawField(&_fieldAspects188[k1_ViewSquare_D3L], _frameWalls163[k1_ViewSquare_D3L]._box); drawField(&_fieldAspects188[k1_ViewSquare_D3L], _frameWalls163[k1_ViewSquare_D3L]._box);
} }
@ -1302,21 +1302,21 @@ void DisplayMan::drawSquareD3R(Direction dir, int16 posX, int16 posY) {
bool skip = false; bool skip = false;
_vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY); _vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY);
switch (squareAspect[k0_ElementAspect]) { switch (squareAspect[kDMSquareAspectElement]) {
case kDMElementTypeStairsFront: case kDMElementTypeStairsFront:
if (squareAspect[k2_StairsUpAspect]) if (squareAspect[kDMSquareAspectStairsUp])
drawFloorPitOrStairsBitmapFlippedHorizontally(_stairsNativeBitmapIndexUpFrontD3L, frameStairsUpFrontD3R); drawFloorPitOrStairsBitmapFlippedHorizontally(_stairsNativeBitmapIndexUpFrontD3L, frameStairsUpFrontD3R);
else else
drawFloorPitOrStairsBitmapFlippedHorizontally(_stairsNativeBitmapIndexDownFrontD3L, frameStairsDownFrontD3R); drawFloorPitOrStairsBitmapFlippedHorizontally(_stairsNativeBitmapIndexDownFrontD3L, frameStairsDownFrontD3R);
order = k0x4312_CellOrder_BackRight_BackLeft_FrontRight_FrontLeft; order = k0x4312_CellOrder_BackRight_BackLeft_FrontRight_FrontLeft;
/* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k2_viewFloor_D3R); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k2_viewFloor_D3R);
break; break;
case kDMElementTypeWall: case kDMElementTypeWall:
drawWallSetBitmap(_bitmapWallSetD3LCR, _frameWalls163[k2_ViewSquare_D3R]); drawWallSetBitmap(_bitmapWallSetD3LCR, _frameWalls163[k2_ViewSquare_D3R]);
isDrawnWallOrnAnAlcove(squareAspect[k4_LeftWallOrnOrdAspect], k1_ViewWall_D3R_LEFT); isDrawnWallOrnAnAlcove(squareAspect[kDMSquareAspectLeftWallOrnOrd], k1_ViewWall_D3R_LEFT);
if (isDrawnWallOrnAnAlcove(squareAspect[k3_FrontWallOrnOrdAspect], k4_ViewWall_D3R_FRONT)) if (isDrawnWallOrnAnAlcove(squareAspect[kDMSquareFrontWallOrnOrd], k4_ViewWall_D3R_FRONT))
order = k0x0000_CellOrder_Alcove; order = k0x0000_CellOrder_Alcove;
else else
return; return;
@ -1325,29 +1325,29 @@ void DisplayMan::drawSquareD3R(Direction dir, int16 posX, int16 posY) {
case kDMElementTypeStairsSide: case kDMElementTypeStairsSide:
order = k0x0412_CellOrder_BackRight_BackLeft_FrontLeft; order = k0x0412_CellOrder_BackRight_BackLeft_FrontLeft;
/* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k2_viewFloor_D3R); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k2_viewFloor_D3R);
break; break;
case kDMElementTypeDoorFront: case kDMElementTypeDoorFront:
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k2_viewFloor_D3R); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k2_viewFloor_D3R);
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k2_ViewSquare_D3R, k0x0128_CellOrder_DoorPass1_BackRight_BackLeft); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k2_ViewSquare_D3R, k0x0128_CellOrder_DoorPass1_BackRight_BackLeft);
memmove(_tmpBitmap, _bitmapWallSetDoorFrameLeftD3L, 32 * 44); memmove(_tmpBitmap, _bitmapWallSetDoorFrameLeftD3L, 32 * 44);
drawDoorFrameBitmapFlippedHorizontally(_tmpBitmap, &doorFrameRightD3R); drawDoorFrameBitmapFlippedHorizontally(_tmpBitmap, &doorFrameRightD3R);
if (((Door *)_vm->_dungeonMan->_thingData[kDMThingTypeDoor])[squareAspect[k3_DoorThingIndexAspect]].hasButton()) if (((Door *)_vm->_dungeonMan->_thingData[kDMThingTypeDoor])[squareAspect[kDMSquareAspectDoorThingIndex]].hasButton())
drawDoorButton(_vm->indexToOrdinal(k0_DoorButton), k0_viewDoorButton_D3R); drawDoorButton(_vm->indexToOrdinal(k0_DoorButton), k0_viewDoorButton_D3R);
drawDoor(squareAspect[k3_DoorThingIndexAspect], drawDoor(squareAspect[kDMSquareAspectDoorThingIndex],
squareAspect[k2_DoorStateAspect], _doorNativeBitmapIndexFrontD3LCR, squareAspect[kDMSquareAspectDoorState], _doorNativeBitmapIndexFrontD3LCR,
bitmapByteCount(48, 41), k0_ViewDoorOrnament_D3LCR, &doorFrameD3R); bitmapByteCount(48, 41), k0_ViewDoorOrnament_D3LCR, &doorFrameD3R);
break;; break;;
case kDMElementTypePit: case kDMElementTypePit:
if (!squareAspect[k2_PitInvisibleAspect]) if (!squareAspect[kDMSquareAspectPitInvisible])
drawFloorPitOrStairsBitmapFlippedHorizontally(k49_FloorPit_D3L_GraphicIndice, frameFloorPitD3R); drawFloorPitOrStairsBitmapFlippedHorizontally(k49_FloorPit_D3L_GraphicIndice, frameFloorPitD3R);
// No break on purpose // No break on purpose
case kDMElementTypeTeleporter: case kDMElementTypeTeleporter:
case kDMElementTypeCorridor: case kDMElementTypeCorridor:
order = k0x4312_CellOrder_BackRight_BackLeft_FrontRight_FrontLeft; order = k0x4312_CellOrder_BackRight_BackLeft_FrontRight_FrontLeft;
/* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k2_viewFloor_D3R); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k2_viewFloor_D3R);
break; break;
default: default:
skip = true; skip = true;
@ -1355,9 +1355,9 @@ void DisplayMan::drawSquareD3R(Direction dir, int16 posX, int16 posY) {
} }
if (!skip) if (!skip)
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k2_ViewSquare_D3R, order); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k2_ViewSquare_D3R, order);
if ((squareAspect[k0_ElementAspect] == kDMElementTypeTeleporter) && squareAspect[k2_TeleporterVisibleAspect]) if ((squareAspect[kDMSquareAspectElement] == kDMElementTypeTeleporter) && squareAspect[kDMSquareAspectTeleporterVisible])
drawField(&_fieldAspects188[k2_ViewSquare_D3R], _frameWalls163[k2_ViewSquare_D3R]._box); drawField(&_fieldAspects188[k2_ViewSquare_D3R], _frameWalls163[k2_ViewSquare_D3R]._box);
} }
@ -1386,45 +1386,45 @@ void DisplayMan::drawSquareD3C(Direction dir, int16 posX, int16 posY) {
bool skip = false; bool skip = false;
_vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY); _vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY);
switch (squareAspect[k0_ElementAspect]) { switch (squareAspect[kDMSquareAspectElement]) {
case kDMElementTypeStairsFront: case kDMElementTypeStairsFront:
if (squareAspect[k2_StairsUpAspect]) if (squareAspect[kDMSquareAspectStairsUp])
drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexUpFrontD3C, frameStairsUpFrontD3C); drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexUpFrontD3C, frameStairsUpFrontD3C);
else else
drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexDownFrontD3C, frameStairsDownFrontD3C); drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexDownFrontD3C, frameStairsDownFrontD3C);
order = k0x3421_CellOrder_BackLeft_BackRight_FrontLeft_FrontRight; order = k0x3421_CellOrder_BackLeft_BackRight_FrontLeft_FrontRight;
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k1_viewFloor_D3C); /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k1_viewFloor_D3C); /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
break; break;
case kDMElementTypeWall: case kDMElementTypeWall:
drawWallSetBitmapWithoutTransparency(_bitmapWallSetD3LCR, _frameWalls163[k0_ViewSquare_D3C]); drawWallSetBitmapWithoutTransparency(_bitmapWallSetD3LCR, _frameWalls163[k0_ViewSquare_D3C]);
if (isDrawnWallOrnAnAlcove(squareAspect[k3_FrontWallOrnOrdAspect], k3_ViewWall_D3C_FRONT)) if (isDrawnWallOrnAnAlcove(squareAspect[kDMSquareFrontWallOrnOrd], k3_ViewWall_D3C_FRONT))
order = k0x0000_CellOrder_Alcove; order = k0x0000_CellOrder_Alcove;
else else
return; return;
break; break;
case k17_DoorFrontElemType: case k17_DoorFrontElemType:
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k1_viewFloor_D3C); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k1_viewFloor_D3C);
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k0_ViewSquare_D3C, k0x0218_CellOrder_DoorPass1_BackLeft_BackRight); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k0_ViewSquare_D3C, k0x0218_CellOrder_DoorPass1_BackLeft_BackRight);
drawWallSetBitmap(_bitmapWallSetDoorFrameLeftD3C, doorFrameLeftD3C); drawWallSetBitmap(_bitmapWallSetDoorFrameLeftD3C, doorFrameLeftD3C);
memmove(_tmpBitmap, _bitmapWallSetDoorFrameLeftD3C, 32 * 44); memmove(_tmpBitmap, _bitmapWallSetDoorFrameLeftD3C, 32 * 44);
drawDoorFrameBitmapFlippedHorizontally(_tmpBitmap, &doorFrameRightD3C); drawDoorFrameBitmapFlippedHorizontally(_tmpBitmap, &doorFrameRightD3C);
if (((Door *)_vm->_dungeonMan->_thingData[kDMThingTypeDoor])[squareAspect[k3_DoorThingIndexAspect]].hasButton()) if (((Door *)_vm->_dungeonMan->_thingData[kDMThingTypeDoor])[squareAspect[kDMSquareAspectDoorThingIndex]].hasButton())
drawDoorButton(_vm->indexToOrdinal(k0_DoorButton), k1_ViewDoorOrnament_D2LCR); drawDoorButton(_vm->indexToOrdinal(k0_DoorButton), k1_ViewDoorOrnament_D2LCR);
drawDoor(squareAspect[k3_DoorThingIndexAspect], squareAspect[k2_DoorStateAspect], drawDoor(squareAspect[kDMSquareAspectDoorThingIndex], squareAspect[kDMSquareAspectDoorState],
_doorNativeBitmapIndexFrontD3LCR, bitmapByteCount(48, 41), k0_ViewDoorOrnament_D3LCR, &doorFrameD3C); _doorNativeBitmapIndexFrontD3LCR, bitmapByteCount(48, 41), k0_ViewDoorOrnament_D3LCR, &doorFrameD3C);
order = k0x0349_CellOrder_DoorPass2_FrontLeft_FrontRight; order = k0x0349_CellOrder_DoorPass2_FrontLeft_FrontRight;
break; break;
case kDMElementTypePit: case kDMElementTypePit:
if (!squareAspect[k2_PitInvisibleAspect]) if (!squareAspect[kDMSquareAspectPitInvisible])
drawFloorPitOrStairsBitmap(k50_FloorPit_D3C_GraphicIndice, frameFloorPitD3C); drawFloorPitOrStairsBitmap(k50_FloorPit_D3C_GraphicIndice, frameFloorPitD3C);
// No break on purpose // No break on purpose
case kDMElementTypeTeleporter: case kDMElementTypeTeleporter:
case k1_CorridorElemType: case k1_CorridorElemType:
order = k0x3421_CellOrder_BackLeft_BackRight_FrontLeft_FrontRight; order = k0x3421_CellOrder_BackLeft_BackRight_FrontLeft_FrontRight;
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k1_viewFloor_D3C); /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k1_viewFloor_D3C); /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
break; break;
default: default:
skip = true; skip = true;
@ -1432,9 +1432,9 @@ void DisplayMan::drawSquareD3C(Direction dir, int16 posX, int16 posY) {
} }
if (!skip) if (!skip)
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k0_ViewSquare_D3C, order); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k0_ViewSquare_D3C, order);
if ((squareAspect[k0_ElementAspect] == kDMElementTypeTeleporter) && squareAspect[k2_TeleporterVisibleAspect]) if ((squareAspect[kDMSquareAspectElement] == kDMElementTypeTeleporter) && squareAspect[kDMSquareAspectTeleporterVisible])
drawField(&_fieldAspects188[k0_ViewSquare_D3C], _frameWalls163[k0_ViewSquare_D3C]._box); drawField(&_fieldAspects188[k0_ViewSquare_D3C], _frameWalls163[k0_ViewSquare_D3C]._box);
} }
@ -1464,20 +1464,20 @@ void DisplayMan::drawSquareD2L(Direction dir, int16 posX, int16 posY) {
bool skip = false; bool skip = false;
_vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY); _vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY);
switch (squareAspect[k0_ElementAspect]) { switch (squareAspect[kDMSquareAspectElement]) {
case kDMElementTypeStairsFront: case kDMElementTypeStairsFront:
if (squareAspect[k2_StairsUpAspect]) if (squareAspect[kDMSquareAspectStairsUp])
drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexUpFrontD2L, frameStairsUpFrontD2L); drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexUpFrontD2L, frameStairsUpFrontD2L);
else else
drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexDownFrontD2L, frameStairsDownFrontD2L); drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexDownFrontD2L, frameStairsDownFrontD2L);
order = k0x3421_CellOrder_BackLeft_BackRight_FrontLeft_FrontRight; order = k0x3421_CellOrder_BackLeft_BackRight_FrontLeft_FrontRight;
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k3_viewFloor_D2L); /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k3_viewFloor_D2L); /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
break; break;
case kDMElementTypeWall: case kDMElementTypeWall:
drawWallSetBitmap(_bitmapWallSetD2LCR, _frameWalls163[k4_ViewSquare_D2L]); drawWallSetBitmap(_bitmapWallSetD2LCR, _frameWalls163[k4_ViewSquare_D2L]);
isDrawnWallOrnAnAlcove(squareAspect[k2_RightWallOrnOrdAspect], k5_ViewWall_D2L_RIGHT); isDrawnWallOrnAnAlcove(squareAspect[kDMSquareAspectRightWallOrnOrd], k5_ViewWall_D2L_RIGHT);
if (isDrawnWallOrnAnAlcove(squareAspect[k3_FrontWallOrnOrdAspect], k7_ViewWall_D2L_FRONT)) if (isDrawnWallOrnAnAlcove(squareAspect[kDMSquareFrontWallOrnOrd], k7_ViewWall_D2L_FRONT))
order = k0x0000_CellOrder_Alcove; order = k0x0000_CellOrder_Alcove;
else else
return; return;
@ -1487,24 +1487,24 @@ void DisplayMan::drawSquareD2L(Direction dir, int16 posX, int16 posY) {
// No break on purpose // No break on purpose
case k16_DoorSideElemType: case k16_DoorSideElemType:
order = k0x0342_CellOrder_BackRight_FrontLeft_FrontRight; order = k0x0342_CellOrder_BackRight_FrontLeft_FrontRight;
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k3_viewFloor_D2L); /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k3_viewFloor_D2L); /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
break; break;
case k17_DoorFrontElemType: case k17_DoorFrontElemType:
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k3_viewFloor_D2L); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k3_viewFloor_D2L);
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k4_ViewSquare_D2L, k0x0218_CellOrder_DoorPass1_BackLeft_BackRight); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k4_ViewSquare_D2L, k0x0218_CellOrder_DoorPass1_BackLeft_BackRight);
drawWallSetBitmap(_bitmapWallSetDoorFrameTopD2LCR, doorFrameTopD2L); drawWallSetBitmap(_bitmapWallSetDoorFrameTopD2LCR, doorFrameTopD2L);
drawDoor(squareAspect[k3_DoorThingIndexAspect], squareAspect[k2_DoorStateAspect], _doorNativeBitmapIndexFrontD2LCR, drawDoor(squareAspect[kDMSquareAspectDoorThingIndex], squareAspect[kDMSquareAspectDoorState], _doorNativeBitmapIndexFrontD2LCR,
bitmapByteCount(64, 61), k1_ViewDoorOrnament_D2LCR, &doorFrameD2L); bitmapByteCount(64, 61), k1_ViewDoorOrnament_D2LCR, &doorFrameD2L);
order = k0x0349_CellOrder_DoorPass2_FrontLeft_FrontRight; order = k0x0349_CellOrder_DoorPass2_FrontLeft_FrontRight;
break; break;
case kDMElementTypePit: case kDMElementTypePit:
drawFloorPitOrStairsBitmap(squareAspect[k2_PitInvisibleAspect] ? k57_FloorPir_Invisible_D2L_GraphicIndice : k51_FloorPit_D2L_GraphicIndice, drawFloorPitOrStairsBitmap(squareAspect[kDMSquareAspectPitInvisible] ? k57_FloorPir_Invisible_D2L_GraphicIndice : k51_FloorPit_D2L_GraphicIndice,
frameFloorPitD2L); frameFloorPitD2L);
// No break on purpose // No break on purpose
case kDMElementTypeTeleporter: case kDMElementTypeTeleporter:
case k1_CorridorElemType: case k1_CorridorElemType:
order = k0x3421_CellOrder_BackLeft_BackRight_FrontLeft_FrontRight; order = k0x3421_CellOrder_BackLeft_BackRight_FrontLeft_FrontRight;
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k3_viewFloor_D2L); /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k3_viewFloor_D2L); /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
break; break;
default: default:
@ -1514,10 +1514,10 @@ void DisplayMan::drawSquareD2L(Direction dir, int16 posX, int16 posY) {
if (!skip) { if (!skip) {
drawCeilingPit(k63_ceilingPit_D2L_GraphicIndice, &FrameCeilingPitD2L, posX, posY, false); drawCeilingPit(k63_ceilingPit_D2L_GraphicIndice, &FrameCeilingPitD2L, posX, posY, false);
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k4_ViewSquare_D2L, order); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k4_ViewSquare_D2L, order);
} }
if ((squareAspect[k0_ElementAspect] == kDMElementTypeTeleporter) && squareAspect[k2_TeleporterVisibleAspect]) if ((squareAspect[kDMSquareAspectElement] == kDMElementTypeTeleporter) && squareAspect[kDMSquareAspectTeleporterVisible])
drawField(&_fieldAspects188[k4_ViewSquare_D2L], _frameWalls163[k4_ViewSquare_D2L]._box); drawField(&_fieldAspects188[k4_ViewSquare_D2L], _frameWalls163[k4_ViewSquare_D2L]._box);
} }
@ -1547,22 +1547,22 @@ void DisplayMan::drawSquareD2R(Direction dir, int16 posX, int16 posY) {
bool skip = false; bool skip = false;
_vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY); _vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY);
switch (squareAspect[k0_ElementAspect]) { switch (squareAspect[kDMSquareAspectElement]) {
case kDMElementTypeStairsFront: case kDMElementTypeStairsFront:
if (squareAspect[k2_StairsUpAspect]) if (squareAspect[kDMSquareAspectStairsUp])
drawFloorPitOrStairsBitmapFlippedHorizontally(_stairsNativeBitmapIndexUpFrontD2L, frameStairsUpFrontD2R); drawFloorPitOrStairsBitmapFlippedHorizontally(_stairsNativeBitmapIndexUpFrontD2L, frameStairsUpFrontD2R);
else else
drawFloorPitOrStairsBitmapFlippedHorizontally(_stairsNativeBitmapIndexDownFrontD2L, frameStairsDownFrontD2R); drawFloorPitOrStairsBitmapFlippedHorizontally(_stairsNativeBitmapIndexDownFrontD2L, frameStairsDownFrontD2R);
order = k0x4312_CellOrder_BackRight_BackLeft_FrontRight_FrontLeft; order = k0x4312_CellOrder_BackRight_BackLeft_FrontRight_FrontLeft;
/* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k5_viewFloor_D2R); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k5_viewFloor_D2R);
drawCeilingPit(k63_ceilingPit_D2L_GraphicIndice, &frameCeilingPitD2R, posX, posY, true); drawCeilingPit(k63_ceilingPit_D2L_GraphicIndice, &frameCeilingPitD2R, posX, posY, true);
break; break;
case kDMElementTypeWall: case kDMElementTypeWall:
drawWallSetBitmap(_bitmapWallSetD2LCR, _frameWalls163[k5_ViewSquare_D2R]); drawWallSetBitmap(_bitmapWallSetD2LCR, _frameWalls163[k5_ViewSquare_D2R]);
isDrawnWallOrnAnAlcove(squareAspect[k4_LeftWallOrnOrdAspect], k6_ViewWall_D2R_LEFT); isDrawnWallOrnAnAlcove(squareAspect[kDMSquareAspectLeftWallOrnOrd], k6_ViewWall_D2R_LEFT);
if (isDrawnWallOrnAnAlcove(squareAspect[k3_FrontWallOrnOrdAspect], k9_ViewWall_D2R_FRONT)) if (isDrawnWallOrnAnAlcove(squareAspect[kDMSquareFrontWallOrnOrd], k9_ViewWall_D2R_FRONT))
order = k0x0000_CellOrder_Alcove; order = k0x0000_CellOrder_Alcove;
else else
return; return;
@ -1573,26 +1573,26 @@ void DisplayMan::drawSquareD2R(Direction dir, int16 posX, int16 posY) {
case k16_DoorSideElemType: case k16_DoorSideElemType:
order = k0x0431_CellOrder_BackLeft_FrontRight_FrontLeft; order = k0x0431_CellOrder_BackLeft_FrontRight_FrontLeft;
/* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k5_viewFloor_D2R); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k5_viewFloor_D2R);
drawCeilingPit(k63_ceilingPit_D2L_GraphicIndice, &frameCeilingPitD2R, posX, posY, true); drawCeilingPit(k63_ceilingPit_D2L_GraphicIndice, &frameCeilingPitD2R, posX, posY, true);
break; break;
case k17_DoorFrontElemType: case k17_DoorFrontElemType:
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k5_ViewSquare_D2R); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k5_ViewSquare_D2R);
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k5_ViewSquare_D2R, k0x0128_CellOrder_DoorPass1_BackRight_BackLeft); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k5_ViewSquare_D2R, k0x0128_CellOrder_DoorPass1_BackRight_BackLeft);
drawWallSetBitmap(_bitmapWallSetDoorFrameTopD2LCR, doorFrameTopD2R); drawWallSetBitmap(_bitmapWallSetDoorFrameTopD2LCR, doorFrameTopD2R);
drawDoor(squareAspect[k3_DoorThingIndexAspect], squareAspect[k2_DoorStateAspect], drawDoor(squareAspect[kDMSquareAspectDoorThingIndex], squareAspect[kDMSquareAspectDoorState],
_doorNativeBitmapIndexFrontD2LCR, bitmapByteCount(64, 61), k1_ViewDoorOrnament_D2LCR, &doorFrameD2R); _doorNativeBitmapIndexFrontD2LCR, bitmapByteCount(64, 61), k1_ViewDoorOrnament_D2LCR, &doorFrameD2R);
order = k0x0439_CellOrder_DoorPass2_FrontRight_FrontLeft; order = k0x0439_CellOrder_DoorPass2_FrontRight_FrontLeft;
break; break;
case kDMElementTypePit: case kDMElementTypePit:
drawFloorPitOrStairsBitmapFlippedHorizontally( drawFloorPitOrStairsBitmapFlippedHorizontally(
squareAspect[k2_PitInvisibleAspect] ? k57_FloorPir_Invisible_D2L_GraphicIndice : k51_FloorPit_D2L_GraphicIndice, frameFloorPitD2R); squareAspect[kDMSquareAspectPitInvisible] ? k57_FloorPir_Invisible_D2L_GraphicIndice : k51_FloorPit_D2L_GraphicIndice, frameFloorPitD2R);
// No break on purpose // No break on purpose
case kDMElementTypeTeleporter: case kDMElementTypeTeleporter:
case k1_CorridorElemType: case k1_CorridorElemType:
order = k0x4312_CellOrder_BackRight_BackLeft_FrontRight_FrontLeft; order = k0x4312_CellOrder_BackRight_BackLeft_FrontRight_FrontLeft;
/* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k5_viewFloor_D2R); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k5_viewFloor_D2R);
drawCeilingPit(k63_ceilingPit_D2L_GraphicIndice, &frameCeilingPitD2R, posX, posY, true); drawCeilingPit(k63_ceilingPit_D2L_GraphicIndice, &frameCeilingPitD2R, posX, posY, true);
break; break;
default: default:
@ -1601,9 +1601,9 @@ void DisplayMan::drawSquareD2R(Direction dir, int16 posX, int16 posY) {
} }
if (!skip) if (!skip)
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k5_ViewSquare_D2R, order); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k5_ViewSquare_D2R, order);
if ((squareAspect[k0_ElementAspect] == kDMElementTypeTeleporter) && squareAspect[k2_TeleporterVisibleAspect]) if ((squareAspect[kDMSquareAspectElement] == kDMElementTypeTeleporter) && squareAspect[kDMSquareAspectTeleporterVisible])
drawField(&_fieldAspects188[k5_ViewSquare_D2R], _frameWalls163[k5_ViewSquare_D2R]._box); drawField(&_fieldAspects188[k5_ViewSquare_D2R], _frameWalls163[k5_ViewSquare_D2R]._box);
} }
@ -1634,47 +1634,47 @@ void DisplayMan::drawSquareD2C(Direction dir, int16 posX, int16 posY) {
bool skip = false; bool skip = false;
_vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY); _vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY);
switch (squareAspect[k0_ElementAspect]) { switch (squareAspect[kDMSquareAspectElement]) {
case kDMElementTypeStairsFront: case kDMElementTypeStairsFront:
if (squareAspect[k2_StairsUpAspect]) if (squareAspect[kDMSquareAspectStairsUp])
drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexUpFrontD2C, frameStairsUpFrontD2C); drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexUpFrontD2C, frameStairsUpFrontD2C);
else else
drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexDownFrontD2C, frameStairsDownFrontD2C); drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexDownFrontD2C, frameStairsDownFrontD2C);
order = k0x3421_CellOrder_BackLeft_BackRight_FrontLeft_FrontRight; order = k0x3421_CellOrder_BackLeft_BackRight_FrontLeft_FrontRight;
/* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k4_viewFloor_D2C); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k4_viewFloor_D2C);
drawCeilingPit(k64_ceilingPitD2C_GraphicIndice, &frameCeilingPitD2C, posX, posY, false); drawCeilingPit(k64_ceilingPitD2C_GraphicIndice, &frameCeilingPitD2C, posX, posY, false);
break; break;
case kDMElementTypeWall: case kDMElementTypeWall:
drawWallSetBitmapWithoutTransparency(_bitmapWallSetD2LCR, _frameWalls163[k3_ViewSquare_D2C]); drawWallSetBitmapWithoutTransparency(_bitmapWallSetD2LCR, _frameWalls163[k3_ViewSquare_D2C]);
if (isDrawnWallOrnAnAlcove(squareAspect[k3_FrontWallOrnOrdAspect], k8_ViewWall_D2C_FRONT)) if (isDrawnWallOrnAnAlcove(squareAspect[kDMSquareFrontWallOrnOrd], k8_ViewWall_D2C_FRONT))
order = k0x0000_CellOrder_Alcove; order = k0x0000_CellOrder_Alcove;
else else
return; return;
break; break;
case k17_DoorFrontElemType: case k17_DoorFrontElemType:
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k4_viewFloor_D2C); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k4_viewFloor_D2C);
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k3_ViewSquare_D2C, k0x0218_CellOrder_DoorPass1_BackLeft_BackRight); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k3_ViewSquare_D2C, k0x0218_CellOrder_DoorPass1_BackLeft_BackRight);
drawWallSetBitmap(_bitmapWallSetDoorFrameTopD2LCR, doorFrameTopD2C); drawWallSetBitmap(_bitmapWallSetDoorFrameTopD2LCR, doorFrameTopD2C);
drawWallSetBitmap(_bitmapWallSetDoorFrameLeftD2C, doorFrameLeftD2C); drawWallSetBitmap(_bitmapWallSetDoorFrameLeftD2C, doorFrameLeftD2C);
memcpy(_tmpBitmap, _bitmapWallSetDoorFrameLeftD2C, 48 * 65); memcpy(_tmpBitmap, _bitmapWallSetDoorFrameLeftD2C, 48 * 65);
drawDoorFrameBitmapFlippedHorizontally(_tmpBitmap, &doorFrameRightD2C); drawDoorFrameBitmapFlippedHorizontally(_tmpBitmap, &doorFrameRightD2C);
if (((Door *)_vm->_dungeonMan->_thingData[kDMThingTypeDoor])[squareAspect[k3_DoorThingIndexAspect]].hasButton()) if (((Door *)_vm->_dungeonMan->_thingData[kDMThingTypeDoor])[squareAspect[kDMSquareAspectDoorThingIndex]].hasButton())
drawDoorButton(_vm->indexToOrdinal(k0_DoorButton), k2_viewDoorButton_D2C); drawDoorButton(_vm->indexToOrdinal(k0_DoorButton), k2_viewDoorButton_D2C);
drawDoor(squareAspect[k3_DoorThingIndexAspect], squareAspect[k2_DoorStateAspect], drawDoor(squareAspect[kDMSquareAspectDoorThingIndex], squareAspect[kDMSquareAspectDoorState],
_doorNativeBitmapIndexFrontD2LCR, bitmapByteCount(64, 61), k1_ViewDoorOrnament_D2LCR, &doorFrameD2C); _doorNativeBitmapIndexFrontD2LCR, bitmapByteCount(64, 61), k1_ViewDoorOrnament_D2LCR, &doorFrameD2C);
order = k0x0349_CellOrder_DoorPass2_FrontLeft_FrontRight; order = k0x0349_CellOrder_DoorPass2_FrontLeft_FrontRight;
break; break;
case kDMElementTypePit: case kDMElementTypePit:
drawFloorPitOrStairsBitmap(squareAspect[k2_PitInvisibleAspect] ? k58_FloorPit_invisible_D2C_GraphicIndice : k52_FloorPit_D2C_GraphicIndice, frameFloorPitD2C); drawFloorPitOrStairsBitmap(squareAspect[kDMSquareAspectPitInvisible] ? k58_FloorPit_invisible_D2C_GraphicIndice : k52_FloorPit_D2C_GraphicIndice, frameFloorPitD2C);
// No break on purpose // No break on purpose
case kDMElementTypeTeleporter: case kDMElementTypeTeleporter:
case k1_CorridorElemType: case k1_CorridorElemType:
order = k0x3421_CellOrder_BackLeft_BackRight_FrontLeft_FrontRight; order = k0x3421_CellOrder_BackLeft_BackRight_FrontLeft_FrontRight;
/* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k4_viewFloor_D2C); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k4_viewFloor_D2C);
drawCeilingPit(k64_ceilingPitD2C_GraphicIndice, &frameCeilingPitD2C, posX, posY, false); drawCeilingPit(k64_ceilingPitD2C_GraphicIndice, &frameCeilingPitD2C, posX, posY, false);
break; break;
default: default:
@ -1683,9 +1683,9 @@ void DisplayMan::drawSquareD2C(Direction dir, int16 posX, int16 posY) {
} }
if (!skip) if (!skip)
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k3_ViewSquare_D2C, order); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k3_ViewSquare_D2C, order);
if ((squareAspect[k0_ElementAspect] == kDMElementTypeTeleporter) && squareAspect[k2_TeleporterVisibleAspect]) if ((squareAspect[kDMSquareAspectElement] == kDMElementTypeTeleporter) && squareAspect[kDMSquareAspectTeleporterVisible])
drawField(&_fieldAspects188[k3_ViewSquare_D2C], _frameWalls163[k3_ViewSquare_D2C]._box); drawField(&_fieldAspects188[k3_ViewSquare_D2C], _frameWalls163[k3_ViewSquare_D2C]._box);
} }
@ -1716,24 +1716,24 @@ void DisplayMan::drawSquareD1L(Direction dir, int16 posX, int16 posY) {
bool skip = false; bool skip = false;
_vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY); _vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY);
switch (squareAspect[k0_ElementAspect]) { switch (squareAspect[kDMSquareAspectElement]) {
case kDMElementTypeStairsFront: case kDMElementTypeStairsFront:
if (squareAspect[k2_StairsUpAspect]) if (squareAspect[kDMSquareAspectStairsUp])
drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexUpFrontD1L, frameStairsUpFrontD1L); drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexUpFrontD1L, frameStairsUpFrontD1L);
else else
drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexDownFrontD1L, frameStairsDownFrontD1L); drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexDownFrontD1L, frameStairsDownFrontD1L);
order = k0x0032_CellOrder_BackRight_FrontRight; order = k0x0032_CellOrder_BackRight_FrontRight;
/* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k6_viewFloor_D1L); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k6_viewFloor_D1L);
drawCeilingPit(k65_ceilingPitD1L_GraphicIndice, &frameCeilingPitD1L, posX, posY, false); drawCeilingPit(k65_ceilingPitD1L_GraphicIndice, &frameCeilingPitD1L, posX, posY, false);
break; break;
case kDMElementTypeWall: case kDMElementTypeWall:
drawWallSetBitmap(_bitmapWallSetD1LCR, _frameWalls163[k7_ViewSquare_D1L]); drawWallSetBitmap(_bitmapWallSetD1LCR, _frameWalls163[k7_ViewSquare_D1L]);
isDrawnWallOrnAnAlcove(squareAspect[k2_RightWallOrnOrdAspect], k10_ViewWall_D1L_RIGHT); isDrawnWallOrnAnAlcove(squareAspect[kDMSquareAspectRightWallOrnOrd], k10_ViewWall_D1L_RIGHT);
return; return;
case kDMElementTypeStairsSide: case kDMElementTypeStairsSide:
if (squareAspect[k2_StairsUpAspect]) if (squareAspect[kDMSquareAspectStairsUp])
drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexUpSideD1L, frameStairsUpSideD1L); drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexUpSideD1L, frameStairsUpSideD1L);
else else
drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexDownSideD1L, frameStairsDownSideD1L); drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexDownSideD1L, frameStairsDownSideD1L);
@ -1741,25 +1741,25 @@ void DisplayMan::drawSquareD1L(Direction dir, int16 posX, int16 posY) {
case k16_DoorSideElemType: case k16_DoorSideElemType:
order = k0x0032_CellOrder_BackRight_FrontRight; order = k0x0032_CellOrder_BackRight_FrontRight;
/* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k6_viewFloor_D1L); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k6_viewFloor_D1L);
drawCeilingPit(k65_ceilingPitD1L_GraphicIndice, &frameCeilingPitD1L, posX, posY, false); drawCeilingPit(k65_ceilingPitD1L_GraphicIndice, &frameCeilingPitD1L, posX, posY, false);
break; break;
case k17_DoorFrontElemType: case k17_DoorFrontElemType:
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k6_viewFloor_D1L); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k6_viewFloor_D1L);
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k7_ViewSquare_D1L, k0x0028_CellOrder_DoorPass1_BackRight); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k7_ViewSquare_D1L, k0x0028_CellOrder_DoorPass1_BackRight);
drawWallSetBitmap(_bitmapWallSetDoorFrameTopD1LCR, doorFrameTopD1L); drawWallSetBitmap(_bitmapWallSetDoorFrameTopD1LCR, doorFrameTopD1L);
drawDoor(squareAspect[k3_DoorThingIndexAspect], squareAspect[k2_DoorStateAspect], drawDoor(squareAspect[kDMSquareAspectDoorThingIndex], squareAspect[kDMSquareAspectDoorState],
_doorNativeBitmapIndexFrontD1LCR, bitmapByteCount(96, 88), k2_ViewDoorOrnament_D1LCR, &doorFrameD1L); _doorNativeBitmapIndexFrontD1LCR, bitmapByteCount(96, 88), k2_ViewDoorOrnament_D1LCR, &doorFrameD1L);
order = k0x0039_CellOrder_DoorPass2_FrontRight; order = k0x0039_CellOrder_DoorPass2_FrontRight;
break; break;
case kDMElementTypePit: case kDMElementTypePit:
drawFloorPitOrStairsBitmap(squareAspect[k2_PitInvisibleAspect] ? k59_floorPit_invisible_D1L_GraphicIndice : k53_FloorPit_D1L_GraphicIndice, frameFloorPitD1L); drawFloorPitOrStairsBitmap(squareAspect[kDMSquareAspectPitInvisible] ? k59_floorPit_invisible_D1L_GraphicIndice : k53_FloorPit_D1L_GraphicIndice, frameFloorPitD1L);
// No break on purpose // No break on purpose
case kDMElementTypeTeleporter: case kDMElementTypeTeleporter:
case k1_CorridorElemType: case k1_CorridorElemType:
order = k0x0032_CellOrder_BackRight_FrontRight; order = k0x0032_CellOrder_BackRight_FrontRight;
/* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k6_viewFloor_D1L); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k6_viewFloor_D1L);
drawCeilingPit(k65_ceilingPitD1L_GraphicIndice, &frameCeilingPitD1L, posX, posY, false); drawCeilingPit(k65_ceilingPitD1L_GraphicIndice, &frameCeilingPitD1L, posX, posY, false);
break; break;
default: default:
@ -1768,9 +1768,9 @@ void DisplayMan::drawSquareD1L(Direction dir, int16 posX, int16 posY) {
} }
if (!skip) if (!skip)
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k7_ViewSquare_D1L, order); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k7_ViewSquare_D1L, order);
if ((squareAspect[k0_ElementAspect] == kDMElementTypeTeleporter) && squareAspect[k2_TeleporterVisibleAspect]) if ((squareAspect[kDMSquareAspectElement] == kDMElementTypeTeleporter) && squareAspect[kDMSquareAspectTeleporterVisible])
drawField(&_fieldAspects188[k7_ViewSquare_D1L], _frameWalls163[k7_ViewSquare_D1L]._box); drawField(&_fieldAspects188[k7_ViewSquare_D1L], _frameWalls163[k7_ViewSquare_D1L]._box);
} }
@ -1801,23 +1801,23 @@ void DisplayMan::drawSquareD1R(Direction dir, int16 posX, int16 posY) {
bool skip = false; bool skip = false;
_vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY); _vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY);
switch (squareAspect[k0_ElementAspect]) { switch (squareAspect[kDMSquareAspectElement]) {
case kDMElementTypeStairsFront: case kDMElementTypeStairsFront:
if (squareAspect[k2_StairsUpAspect]) if (squareAspect[kDMSquareAspectStairsUp])
drawFloorPitOrStairsBitmapFlippedHorizontally(_stairsNativeBitmapIndexUpFrontD1L, frameStairsUpFrontD1R); drawFloorPitOrStairsBitmapFlippedHorizontally(_stairsNativeBitmapIndexUpFrontD1L, frameStairsUpFrontD1R);
else else
drawFloorPitOrStairsBitmapFlippedHorizontally(_stairsNativeBitmapIndexDownFrontD1L, frameStairsDownFrontD1R); drawFloorPitOrStairsBitmapFlippedHorizontally(_stairsNativeBitmapIndexDownFrontD1L, frameStairsDownFrontD1R);
order = k0x0041_CellOrder_BackLeft_FrontLeft; order = k0x0041_CellOrder_BackLeft_FrontLeft;
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k8_viewFloor_D1R); /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k8_viewFloor_D1R); /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
drawCeilingPit(k65_ceilingPitD1L_GraphicIndice, &frameCeilingPitD1R, posX, posY, true); drawCeilingPit(k65_ceilingPitD1L_GraphicIndice, &frameCeilingPitD1R, posX, posY, true);
break; break;
case kDMElementTypeWall: case kDMElementTypeWall:
drawWallSetBitmap(_bitmapWallSetD1LCR, _frameWalls163[k8_ViewSquare_D1R]); drawWallSetBitmap(_bitmapWallSetD1LCR, _frameWalls163[k8_ViewSquare_D1R]);
isDrawnWallOrnAnAlcove(squareAspect[k4_LeftWallOrnOrdAspect], k11_ViewWall_D1R_LEFT); isDrawnWallOrnAnAlcove(squareAspect[kDMSquareAspectLeftWallOrnOrd], k11_ViewWall_D1R_LEFT);
return; return;
case kDMElementTypeStairsSide: case kDMElementTypeStairsSide:
if (squareAspect[k2_StairsUpAspect]) if (squareAspect[kDMSquareAspectStairsUp])
drawFloorPitOrStairsBitmapFlippedHorizontally(_stairsNativeBitmapIndexUpSideD1L, frameStairsUpSideD1R); drawFloorPitOrStairsBitmapFlippedHorizontally(_stairsNativeBitmapIndexUpSideD1L, frameStairsUpSideD1R);
else else
drawFloorPitOrStairsBitmapFlippedHorizontally(_stairsNativeBitmapIndexDownSideD1L, frameStairsDownSideD1R); drawFloorPitOrStairsBitmapFlippedHorizontally(_stairsNativeBitmapIndexDownSideD1L, frameStairsDownSideD1R);
@ -1825,25 +1825,25 @@ void DisplayMan::drawSquareD1R(Direction dir, int16 posX, int16 posY) {
// No break on purpose // No break on purpose
case k16_DoorSideElemType: case k16_DoorSideElemType:
order = k0x0041_CellOrder_BackLeft_FrontLeft; order = k0x0041_CellOrder_BackLeft_FrontLeft;
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k8_viewFloor_D1R); /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k8_viewFloor_D1R); /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
drawCeilingPit(k65_ceilingPitD1L_GraphicIndice, &frameCeilingPitD1R, posX, posY, true); drawCeilingPit(k65_ceilingPitD1L_GraphicIndice, &frameCeilingPitD1R, posX, posY, true);
break; break;
case k17_DoorFrontElemType: case k17_DoorFrontElemType:
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k8_viewFloor_D1R); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k8_viewFloor_D1R);
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k8_ViewSquare_D1R, k0x0018_CellOrder_DoorPass1_BackLeft); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k8_ViewSquare_D1R, k0x0018_CellOrder_DoorPass1_BackLeft);
drawWallSetBitmap(_bitmapWallSetDoorFrameTopD1LCR, doorFrameTopD1R); drawWallSetBitmap(_bitmapWallSetDoorFrameTopD1LCR, doorFrameTopD1R);
drawDoor(squareAspect[k3_DoorThingIndexAspect], squareAspect[k2_DoorStateAspect], drawDoor(squareAspect[kDMSquareAspectDoorThingIndex], squareAspect[kDMSquareAspectDoorState],
_doorNativeBitmapIndexFrontD1LCR, bitmapByteCount(96, 88), k2_ViewDoorOrnament_D1LCR, &doorFrameD1R); _doorNativeBitmapIndexFrontD1LCR, bitmapByteCount(96, 88), k2_ViewDoorOrnament_D1LCR, &doorFrameD1R);
order = k0x0049_CellOrder_DoorPass2_FrontLeft; order = k0x0049_CellOrder_DoorPass2_FrontLeft;
break; break;
case kDMElementTypePit: case kDMElementTypePit:
drawFloorPitOrStairsBitmapFlippedHorizontally(squareAspect[k2_PitInvisibleAspect] ? k59_floorPit_invisible_D1L_GraphicIndice drawFloorPitOrStairsBitmapFlippedHorizontally(squareAspect[kDMSquareAspectPitInvisible] ? k59_floorPit_invisible_D1L_GraphicIndice
: k53_FloorPit_D1L_GraphicIndice, frameFloorPitD1R); : k53_FloorPit_D1L_GraphicIndice, frameFloorPitD1R);
// No break on purpose // No break on purpose
case kDMElementTypeTeleporter: case kDMElementTypeTeleporter:
case k1_CorridorElemType: case k1_CorridorElemType:
order = k0x0041_CellOrder_BackLeft_FrontLeft; order = k0x0041_CellOrder_BackLeft_FrontLeft;
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k8_viewFloor_D1R); /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k8_viewFloor_D1R); /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
drawCeilingPit(k65_ceilingPitD1L_GraphicIndice, &frameCeilingPitD1R, posX, posY, true); drawCeilingPit(k65_ceilingPitD1L_GraphicIndice, &frameCeilingPitD1R, posX, posY, true);
break; break;
default: default:
@ -1852,9 +1852,9 @@ void DisplayMan::drawSquareD1R(Direction dir, int16 posX, int16 posY) {
} }
if (!skip) if (!skip)
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k8_ViewSquare_D1R, order); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k8_ViewSquare_D1R, order);
if ((squareAspect[k0_ElementAspect] == kDMElementTypeTeleporter) && squareAspect[k2_TeleporterVisibleAspect]) if ((squareAspect[kDMSquareAspectElement] == kDMElementTypeTeleporter) && squareAspect[kDMSquareAspectTeleporterVisible])
drawField(&_fieldAspects188[k8_ViewSquare_D1R], _frameWalls163[k8_ViewSquare_D1R]._box); drawField(&_fieldAspects188[k8_ViewSquare_D1R], _frameWalls163[k8_ViewSquare_D1R]._box);
} }
@ -1871,16 +1871,16 @@ void DisplayMan::drawSquareD1C(Direction dir, int16 posX, int16 posY) {
bool skip = false; bool skip = false;
_vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY); _vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY);
switch (_vm->_dungeonMan->_squareAheadElement = (ElementType)squareAspect[k0_ElementAspect]) { switch (_vm->_dungeonMan->_squareAheadElement = (ElementType)squareAspect[kDMSquareAspectElement]) {
case kDMElementTypeStairsFront: case kDMElementTypeStairsFront:
if (squareAspect[k2_StairsUpAspect]) if (squareAspect[kDMSquareAspectStairsUp])
drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexUpFrontD1C, frameStairsUpFrontD1C); drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexUpFrontD1C, frameStairsUpFrontD1C);
else else
drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexDownFrontD1C, frameStairsDownFrontD1C); drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexDownFrontD1C, frameStairsDownFrontD1C);
order = k0x3421_CellOrder_BackLeft_BackRight_FrontLeft_FrontRight; order = k0x3421_CellOrder_BackLeft_BackRight_FrontLeft_FrontRight;
/* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k7_viewFloor_D1C); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k7_viewFloor_D1C);
drawCeilingPit(k66_ceilingPitD1C_GraphicIndice, &frameCeilingPitD1C, posX, posY, false); drawCeilingPit(k66_ceilingPitD1C_GraphicIndice, &frameCeilingPitD1C, posX, posY, false);
break; break;
case kDMElementTypeWall: case kDMElementTypeWall:
@ -1897,8 +1897,8 @@ void DisplayMan::drawSquareD1C(Direction dir, int16 posX, int16 posY) {
boxThievesEyeVisibleArea, 0, 0, 48, 48, k10_ColorFlesh, 95, 95); boxThievesEyeVisibleArea, 0, 0, 48, 48, k10_ColorFlesh, 95, 95);
} }
drawWallSetBitmapWithoutTransparency(_bitmapWallSetD1LCR, _frameWalls163[k6_ViewSquare_D1C]); drawWallSetBitmapWithoutTransparency(_bitmapWallSetD1LCR, _frameWalls163[k6_ViewSquare_D1C]);
if (isDrawnWallOrnAnAlcove(squareAspect[k3_FrontWallOrnOrdAspect], k12_ViewWall_D1C_FRONT)) if (isDrawnWallOrnAnAlcove(squareAspect[kDMSquareFrontWallOrnOrd], k12_ViewWall_D1C_FRONT))
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k6_ViewSquare_D1C, k0x0000_CellOrder_Alcove); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k6_ViewSquare_D1C, k0x0000_CellOrder_Alcove);
if (_vm->_championMan->_party._event73Count_ThievesEye) { if (_vm->_championMan->_party._event73Count_ThievesEye) {
blitToBitmap(getDerivedBitmap(k1_DerivedBitmapThievesEyeVisibleArea), blitToBitmap(getDerivedBitmap(k1_DerivedBitmapThievesEyeVisibleArea),
@ -1909,26 +1909,26 @@ void DisplayMan::drawSquareD1C(Direction dir, int16 posX, int16 posY) {
} }
return; return;
case k17_DoorFrontElemType: case k17_DoorFrontElemType:
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k7_viewFloor_D1C); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k7_viewFloor_D1C);
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k6_ViewSquare_D1C, k0x0218_CellOrder_DoorPass1_BackLeft_BackRight); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k6_ViewSquare_D1C, k0x0218_CellOrder_DoorPass1_BackLeft_BackRight);
drawWallSetBitmap(_bitmapWallSetDoorFrameTopD1LCR, doorFrameTopD1C); drawWallSetBitmap(_bitmapWallSetDoorFrameTopD1LCR, doorFrameTopD1C);
drawWallSetBitmap(_bitmapWallSetDoorFrameLeftD1C, _doorFrameLeftD1C); drawWallSetBitmap(_bitmapWallSetDoorFrameLeftD1C, _doorFrameLeftD1C);
drawWallSetBitmap(_bitmapWallSetDoorFrameRightD1C, _doorFrameRightD1C); drawWallSetBitmap(_bitmapWallSetDoorFrameRightD1C, _doorFrameRightD1C);
if (((Door *)_vm->_dungeonMan->_thingData[kDMThingTypeDoor])[squareAspect[k3_DoorThingIndexAspect]].hasButton()) if (((Door *)_vm->_dungeonMan->_thingData[kDMThingTypeDoor])[squareAspect[kDMSquareAspectDoorThingIndex]].hasButton())
drawDoorButton(_vm->indexToOrdinal(k0_DoorButton), k3_viewDoorButton_D1C); drawDoorButton(_vm->indexToOrdinal(k0_DoorButton), k3_viewDoorButton_D1C);
drawDoor(squareAspect[k3_DoorThingIndexAspect], squareAspect[k2_DoorStateAspect], drawDoor(squareAspect[kDMSquareAspectDoorThingIndex], squareAspect[kDMSquareAspectDoorState],
_doorNativeBitmapIndexFrontD1LCR, bitmapByteCount(96, 88), k2_ViewDoorOrnament_D1LCR, _doorFrameD1C); _doorNativeBitmapIndexFrontD1LCR, bitmapByteCount(96, 88), k2_ViewDoorOrnament_D1LCR, _doorFrameD1C);
order = k0x0349_CellOrder_DoorPass2_FrontLeft_FrontRight; order = k0x0349_CellOrder_DoorPass2_FrontLeft_FrontRight;
break; break;
case kDMElementTypePit: case kDMElementTypePit:
drawFloorPitOrStairsBitmap(squareAspect[k2_PitInvisibleAspect] ? k60_floorPitInvisibleD1C_GraphicIndice : k54_FloorPit_D1C_GraphicIndice, frameFloorPitD1C); drawFloorPitOrStairsBitmap(squareAspect[kDMSquareAspectPitInvisible] ? k60_floorPitInvisibleD1C_GraphicIndice : k54_FloorPit_D1C_GraphicIndice, frameFloorPitD1C);
// No break on purpose // No break on purpose
case kDMElementTypeTeleporter: case kDMElementTypeTeleporter:
case k1_CorridorElemType: case k1_CorridorElemType:
order = k0x3421_CellOrder_BackLeft_BackRight_FrontLeft_FrontRight; order = k0x3421_CellOrder_BackLeft_BackRight_FrontLeft_FrontRight;
/* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */ /* BUG0_64 Floor ornaments are drawn over open pits. There is no check to prevent drawing floor ornaments over open pits */
drawFloorOrnament(squareAspect[k4_FloorOrnOrdAspect], k7_viewFloor_D1C); drawFloorOrnament(squareAspect[kDMSquareAspectFloorOrn], k7_viewFloor_D1C);
drawCeilingPit(k66_ceilingPitD1C_GraphicIndice, &frameCeilingPitD1C, posX, posY, false); drawCeilingPit(k66_ceilingPitD1C_GraphicIndice, &frameCeilingPitD1C, posX, posY, false);
break; break;
default: default:
@ -1937,9 +1937,9 @@ void DisplayMan::drawSquareD1C(Direction dir, int16 posX, int16 posY) {
} }
if (!skip) if (!skip)
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k6_ViewSquare_D1C, order); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k6_ViewSquare_D1C, order);
if ((squareAspect[k0_ElementAspect] == kDMElementTypeTeleporter) && squareAspect[k2_TeleporterVisibleAspect]) if ((squareAspect[kDMSquareAspectElement] == kDMElementTypeTeleporter) && squareAspect[kDMSquareAspectTeleporterVisible])
drawField(&_fieldAspects188[k6_ViewSquare_D1C], _frameWalls163[k6_ViewSquare_D1C]._box); drawField(&_fieldAspects188[k6_ViewSquare_D1C], _frameWalls163[k6_ViewSquare_D1C]._box);
} }
@ -1950,19 +1950,19 @@ void DisplayMan::drawSquareD0L(Direction dir, int16 posX, int16 posY) {
uint16 squareAspect[5]; uint16 squareAspect[5];
_vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY); _vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY);
switch (squareAspect[k0_ElementAspect]) { switch (squareAspect[kDMSquareAspectElement]) {
case k0_WallElemType: case k0_WallElemType:
drawWallSetBitmap(bitmapWallSetWallD0L, _frameWalls163[k10_ViewSquare_D0L]); drawWallSetBitmap(bitmapWallSetWallD0L, _frameWalls163[k10_ViewSquare_D0L]);
break; break;
case k1_CorridorElemType: case k1_CorridorElemType:
case k5_TeleporterElemType: case k5_TeleporterElemType:
case k16_DoorSideElemType: case k16_DoorSideElemType:
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k10_ViewSquare_D0L, k0x0002_CellOrder_BackRight); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k10_ViewSquare_D0L, k0x0002_CellOrder_BackRight);
break; break;
case k2_PitElemType: case k2_PitElemType:
drawFloorPitOrStairsBitmap(squareAspect[k2_PitInvisibleAspect] ? k61_floorPitInvisibleD0L_GraphicIndice : k55_FloorPit_D0L_GraphicIndice, frameFloorPitD0L); drawFloorPitOrStairsBitmap(squareAspect[kDMSquareAspectPitInvisible] ? k61_floorPitInvisibleD0L_GraphicIndice : k55_FloorPit_D0L_GraphicIndice, frameFloorPitD0L);
case k18_StairsSideElemType: case k18_StairsSideElemType:
if (squareAspect[k2_StairsUpAspect]) if (squareAspect[kDMSquareAspectStairsUp])
drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexSideD0L, frameStairsSideD0L); drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexSideD0L, frameStairsSideD0L);
break; break;
default: default:
@ -1970,7 +1970,7 @@ void DisplayMan::drawSquareD0L(Direction dir, int16 posX, int16 posY) {
} }
drawCeilingPit(k67_ceilingPitD0L_grahicIndice, &frameCeilingPitD0L, posX, posY, false); drawCeilingPit(k67_ceilingPitD0L_grahicIndice, &frameCeilingPitD0L, posX, posY, false);
if ((squareAspect[k0_ElementAspect] == kDMElementTypeTeleporter) && squareAspect[k2_TeleporterVisibleAspect]) if ((squareAspect[kDMSquareAspectElement] == kDMElementTypeTeleporter) && squareAspect[kDMSquareAspectTeleporterVisible])
drawField(&_fieldAspects188[k10_ViewSquare_D0L], _frameWalls163[k10_ViewSquare_D0L]._box); drawField(&_fieldAspects188[k10_ViewSquare_D0L], _frameWalls163[k10_ViewSquare_D0L]._box);
} }
@ -1982,24 +1982,24 @@ void DisplayMan::drawSquareD0R(Direction dir, int16 posX, int16 posY) {
uint16 squareAspect[5]; uint16 squareAspect[5];
_vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY); _vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY);
switch (squareAspect[k0_ElementAspect]) { switch (squareAspect[kDMSquareAspectElement]) {
case kDMElementTypeStairsSide: case kDMElementTypeStairsSide:
drawFloorPitOrStairsBitmapFlippedHorizontally(_stairsNativeBitmapIndexSideD0L, frameStairsSideD0R); drawFloorPitOrStairsBitmapFlippedHorizontally(_stairsNativeBitmapIndexSideD0L, frameStairsSideD0R);
return; return;
case kDMElementTypePit: case kDMElementTypePit:
drawFloorPitOrStairsBitmapFlippedHorizontally(squareAspect[k2_PitInvisibleAspect] ? k61_floorPitInvisibleD0L_GraphicIndice drawFloorPitOrStairsBitmapFlippedHorizontally(squareAspect[kDMSquareAspectPitInvisible] ? k61_floorPitInvisibleD0L_GraphicIndice
: k55_FloorPit_D0L_GraphicIndice, frameFloorPitD0R); : k55_FloorPit_D0L_GraphicIndice, frameFloorPitD0R);
case k1_CorridorElemType: case k1_CorridorElemType:
case k16_DoorSideElemType: case k16_DoorSideElemType:
case kDMElementTypeTeleporter: case kDMElementTypeTeleporter:
drawCeilingPit(k67_ceilingPitD0L_grahicIndice, &frameCeilingPitD0R, posX, posY, true); drawCeilingPit(k67_ceilingPitD0L_grahicIndice, &frameCeilingPitD0R, posX, posY, true);
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k11_ViewSquare_D0R, k0x0001_CellOrder_BackLeft); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k11_ViewSquare_D0R, k0x0001_CellOrder_BackLeft);
break; break;
case kDMElementTypeWall: case kDMElementTypeWall:
drawWallSetBitmap(_bitmapWallSetWallD0R, _frameWalls163[k11_ViewSquare_D0R]); drawWallSetBitmap(_bitmapWallSetWallD0R, _frameWalls163[k11_ViewSquare_D0R]);
return; return;
} }
if ((squareAspect[k0_ElementAspect] == kDMElementTypeTeleporter) && squareAspect[k2_TeleporterVisibleAspect]) if ((squareAspect[kDMSquareAspectElement] == kDMElementTypeTeleporter) && squareAspect[kDMSquareAspectTeleporterVisible])
drawField(&_fieldAspects188[k11_ViewSquare_D0R], _frameWalls163[k11_ViewSquare_D0R]._box); drawField(&_fieldAspects188[k11_ViewSquare_D0R], _frameWalls163[k11_ViewSquare_D0R]._box);
} }
@ -2016,7 +2016,7 @@ void DisplayMan::drawSquareD0C(Direction dir, int16 posX, int16 posY) {
uint16 squareAspect[5]; uint16 squareAspect[5];
_vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY); _vm->_dungeonMan->setSquareAspect(squareAspect, dir, posX, posY);
switch (squareAspect[k0_ElementAspect]) { switch (squareAspect[kDMSquareAspectElement]) {
case k16_DoorSideElemType: case k16_DoorSideElemType:
if (_vm->_championMan->_party._event73Count_ThievesEye) { if (_vm->_championMan->_party._event73Count_ThievesEye) {
memmove(_tmpBitmap, _bitmapWallSetDoorFrameFront, 32 * 123); memmove(_tmpBitmap, _bitmapWallSetDoorFrameFront, 32 * 123);
@ -2028,7 +2028,7 @@ void DisplayMan::drawSquareD0C(Direction dir, int16 posX, int16 posY) {
drawWallSetBitmap(_bitmapWallSetDoorFrameFront, doorFrameD0C); drawWallSetBitmap(_bitmapWallSetDoorFrameFront, doorFrameD0C);
break; break;
case kDMElementTypeStairsFront: case kDMElementTypeStairsFront:
if (squareAspect[k2_StairsUpAspect]) { if (squareAspect[kDMSquareAspectStairsUp]) {
drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexUpFrontD0CLeft, frameStairsUpFrontD0L); drawFloorPitOrStairsBitmap(_stairsNativeBitmapIndexUpFrontD0CLeft, frameStairsUpFrontD0L);
drawFloorPitOrStairsBitmapFlippedHorizontally(_stairsNativeBitmapIndexUpFrontD0CLeft, frameStairsUpFrontD0R); drawFloorPitOrStairsBitmapFlippedHorizontally(_stairsNativeBitmapIndexUpFrontD0CLeft, frameStairsUpFrontD0R);
} else { } else {
@ -2037,12 +2037,12 @@ void DisplayMan::drawSquareD0C(Direction dir, int16 posX, int16 posY) {
} }
break; break;
case kDMElementTypePit: case kDMElementTypePit:
drawFloorPitOrStairsBitmap(squareAspect[k2_PitInvisibleAspect] ? k62_flootPitInvisibleD0C_graphicIndice : k56_FloorPit_D0C_GraphicIndice, frameFloorPitD0C); drawFloorPitOrStairsBitmap(squareAspect[kDMSquareAspectPitInvisible] ? k62_flootPitInvisibleD0C_graphicIndice : k56_FloorPit_D0C_GraphicIndice, frameFloorPitD0C);
break; break;
} }
drawCeilingPit(k68_ceilingPitD0C_graphicIndice, &frameCeilingPitD0C, posX, posY, false); drawCeilingPit(k68_ceilingPitD0C_graphicIndice, &frameCeilingPitD0C, posX, posY, false);
drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[k1_FirstGroupOrObjectAspect]), dir, posX, posY, k9_ViewSquare_D0C, k0x0021_CellOrder_BackLeft_BackRight); drawObjectsCreaturesProjectilesExplosions(Thing(squareAspect[kDMSquareAspectFirstGroupOrObject]), dir, posX, posY, k9_ViewSquare_D0C, k0x0021_CellOrder_BackLeft_BackRight);
if ((squareAspect[k0_ElementAspect] == kDMElementTypeTeleporter) && squareAspect[k2_TeleporterVisibleAspect]) if ((squareAspect[kDMSquareAspectElement] == kDMElementTypeTeleporter) && squareAspect[kDMSquareAspectTeleporterVisible])
drawField(&_fieldAspects188[k9_ViewSquare_D0C], _frameWalls163[k9_ViewSquare_D0C]._box); drawField(&_fieldAspects188[k9_ViewSquare_D0C], _frameWalls163[k9_ViewSquare_D0C]._box);
} }
@ -2627,7 +2627,7 @@ bool DisplayMan::isDrawnWallOrnAnAlcove(int16 wallOrnOrd, ViewWall viewWallIndex
unsigned char inscriptionString[70]; unsigned char inscriptionString[70];
bool isInscription = (wallOrnamentIndex == _vm->_dungeonMan->_currMapInscriptionWallOrnIndex); bool isInscription = (wallOrnamentIndex == _vm->_dungeonMan->_currMapInscriptionWallOrnIndex);
if (isInscription) if (isInscription)
_vm->_dungeonMan->decodeText((char *)inscriptionString, _inscriptionThing, k0_TextTypeInscription); _vm->_dungeonMan->decodeText((char *)inscriptionString, _inscriptionThing, kDMTextTypeInscription);
int16 blitPosX; int16 blitPosX;
byte *ornBlitBitmap; byte *ornBlitBitmap;

View file

@ -308,7 +308,7 @@ void InventoryMan::drawPanelScroll(Scroll *scroll) {
DisplayMan &dispMan = *_vm->_displayMan; DisplayMan &dispMan = *_vm->_displayMan;
char stringFirstLine[300]; char stringFirstLine[300];
_vm->_dungeonMan->decodeText(stringFirstLine, Thing(scroll->getTextStringThingIndex()), (TextType)(k2_TextTypeScroll | k0x8000_DecodeEvenIfInvisible)); _vm->_dungeonMan->decodeText(stringFirstLine, Thing(scroll->getTextStringThingIndex()), (TextType)(kDMTextTypeScroll | k0x8000_DecodeEvenIfInvisible));
char *charRed = stringFirstLine; char *charRed = stringFirstLine;
while (*charRed && (*charRed != '\n')) while (*charRed && (*charRed != '\n'))
charRed++; charRed++;

View file

@ -1141,22 +1141,22 @@ bool MenuMan::isActionPerformed(uint16 champIndex, int16 actionIndex) {
int16 actionHandWeaponClass = weaponInfoActionHand->_class; int16 actionHandWeaponClass = weaponInfoActionHand->_class;
int16 readyHandWeaponClass = weaponInfoReadyHand->_class; int16 readyHandWeaponClass = weaponInfoReadyHand->_class;
int16 stepEnergy = actionHandWeaponClass; int16 stepEnergy = actionHandWeaponClass;
if ((actionHandWeaponClass >= k16_WeaponClassFirstBow) && (actionHandWeaponClass <= k31_WeaponClassLastBow)) { if ((actionHandWeaponClass >= kDMWeaponClassFirstBow) && (actionHandWeaponClass <= kDMWeaponClassLastBow)) {
if (readyHandWeaponClass != k10_WeaponClassBowAmmunition) { if (readyHandWeaponClass != kDMWeaponClassBowAmmunition) {
_actionDamage = kM2_damageNoAmmunition; _actionDamage = kM2_damageNoAmmunition;
actionExperienceGain = 0; actionExperienceGain = 0;
actionPerformed = false; actionPerformed = false;
break; break;
} }
stepEnergy -= k16_WeaponClassFirstBow; stepEnergy -= kDMWeaponClassFirstBow;
} else if ((actionHandWeaponClass >= k32_WeaponClassFirstSling) && (actionHandWeaponClass <= k47_WeaponClassLastSling)) { } else if ((actionHandWeaponClass >= kDMWeaponClassFirstSling) && (actionHandWeaponClass <= kDMWeaponClassLastSling)) {
if (readyHandWeaponClass != k11_WeaponClassSlingAmmunition) { if (readyHandWeaponClass != kDMWeaponClassSlingAmmunition) {
_actionDamage = kM2_damageNoAmmunition; _actionDamage = kM2_damageNoAmmunition;
actionExperienceGain = 0; actionExperienceGain = 0;
actionPerformed = false; actionPerformed = false;
break; break;
} }
stepEnergy -= k32_WeaponClassFirstSling; stepEnergy -= kDMWeaponClassFirstSling;
} }
setChampionDirectionToPartyDirection(curChampion); setChampionDirectionToPartyDirection(curChampion);

View file

@ -728,7 +728,7 @@ void MovesensMan::processThingAdditionOrRemoval(uint16 mapX, uint16 mapY, Thing
if (curThingType == kDMThingTypeGroup) if (curThingType == kDMThingTypeGroup)
squareContainsGroup = true; squareContainsGroup = true;
else if ((curThingType == kDMstringTypeText) && (thingType == kDMThingTypeParty) && addThing && !partySquare) { else if ((curThingType == kDMstringTypeText) && (thingType == kDMThingTypeParty) && addThing && !partySquare) {
_vm->_dungeonMan->decodeText(_vm->_stringBuildBuffer, curThing, k1_TextTypeMessage); _vm->_dungeonMan->decodeText(_vm->_stringBuildBuffer, curThing, kDMTextTypeMessage);
_vm->_textMan->printMessage(k15_ColorWhite, _vm->_stringBuildBuffer); _vm->_textMan->printMessage(k15_ColorWhite, _vm->_stringBuildBuffer);
} else if ((curThingType > kDMThingTypeGroup) && (curThingType < kDMThingTypeProjectile)) { } else if ((curThingType > kDMThingTypeGroup) && (curThingType < kDMThingTypeProjectile)) {
squareContainsObject = true; squareContainsObject = true;

View file

@ -136,7 +136,7 @@ bool ProjExpl::hasProjectileImpactOccurred(int16 impactType, int16 mapXCombo, in
int16 iconIndex = _vm->_objectMan->getIconIndex(projectileAssociatedThing); int16 iconIndex = _vm->_objectMan->getIconIndex(projectileAssociatedThing);
if ((projectileThingData->_attack > _vm->getRandomNumber(128)) if ((projectileThingData->_attack > _vm->getRandomNumber(128))
&& getFlag(associatedAllowedSlots, k0x0100_ObjectAllowedSlotPouchPassAndThroughDoors) && getFlag(associatedAllowedSlots, kDMMaskPouchPassAndThroughDoors)
&& ( (projectileAssociatedThingType != kDMThingTypeJunk) && ( (projectileAssociatedThingType != kDMThingTypeJunk)
|| (iconIndex < kDMIconIndiceJunkIronKey) || (iconIndex < kDMIconIndiceJunkIronKey)
|| (iconIndex > kDMIconIndiceJunkMasterKey) || (iconIndex > kDMIconIndiceJunkMasterKey)

View file

@ -715,7 +715,7 @@ void Timeline::processEventSquareCorridor(TimelineEvent *event) {
textString->setVisible((event->_Cu.A._effect == k0_SensorEffSet)); textString->setVisible((event->_Cu.A._effect == k0_SensorEffSet));
if (!textCurrentlyVisible && textString->isVisible() && (_vm->_dungeonMan->_currMapIndex == _vm->_dungeonMan->_partyMapIndex) && (mapX == _vm->_dungeonMan->_partyMapX) && (mapY == _vm->_dungeonMan->_partyMapY)) { if (!textCurrentlyVisible && textString->isVisible() && (_vm->_dungeonMan->_currMapIndex == _vm->_dungeonMan->_partyMapIndex) && (mapX == _vm->_dungeonMan->_partyMapX) && (mapY == _vm->_dungeonMan->_partyMapY)) {
_vm->_dungeonMan->decodeText(_vm->_stringBuildBuffer, curThing, k1_TextTypeMessage); _vm->_dungeonMan->decodeText(_vm->_stringBuildBuffer, curThing, kDMTextTypeMessage);
_vm->_textMan->printMessage(k15_ColorWhite, _vm->_stringBuildBuffer); _vm->_textMan->printMessage(k15_ColorWhite, _vm->_stringBuildBuffer);
} }
} else if (curThingType == kDMThingTypeSensor) { } else if (curThingType == kDMThingTypeSensor) {