diff options
Diffstat (limited to 'engines/dm')
-rw-r--r-- | engines/dm/dungeonman.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/engines/dm/dungeonman.cpp b/engines/dm/dungeonman.cpp index 057e04c060..dd7081392b 100644 --- a/engines/dm/dungeonman.cpp +++ b/engines/dm/dungeonman.cpp @@ -822,7 +822,6 @@ Thing DungeonMan::f161_getSquareFirstThing(int16 mapX, int16 mapY) { return _g283_squareFirstThings[index]; } -// TODO: produce more GOTOs void DungeonMan::f172_setSquareAspect(uint16 *aspectArray, Direction dir, int16 mapX, int16 mapY) { unsigned char L0307_uc_Multiple; #define AL0307_uc_Square L0307_uc_Multiple @@ -903,6 +902,7 @@ T0172010_ClosedFakeWall: } aspectArray[k0_ElemAspect] = k1_CorridorElemType; AL0307_uc_FootprintsAllowed = getFlag(AL0307_uc_Square, k0x0008_FakeWallRandOrnOrFootPAllowed) ? 8 : 0; + // No break on purpose case k1_CorridorElemType: case k2_ElementTypePit: case k5_ElementTypeTeleporter: @@ -929,12 +929,18 @@ T0172010_ClosedFakeWall: } curThing = f159_getNextThing(curThing); } - goto T0172049_Footprints; + + if (AL0307_uc_FootprintsAllowed && (AL0307_uc_ScentOrdinal = _vm->_championMan->f315_getScentOrdinal(mapX, mapY)) && (--AL0307_uc_ScentOrdinal >= _vm->_championMan->_g407_party._firstScentIndex) && (AL0307_uc_ScentOrdinal < _vm->_championMan->_g407_party._lastScentIndex)) + setFlag(aspectArray[k4_FloorOrnOrdAspect], k0x8000_FootprintsAspect); + + break; case k3_ElementTypeStairs: aspectArray[k0_ElemAspect] = (bool((getFlag(AL0307_uc_Square, k0x0008_StairsNorthSouthOrient) >> 3)) == isOrientedWestEast(dir)) ? k18_ElementTypeStairsSide : k19_ElementTypeStaisFront; aspectArray[k2_StairsUpAspect] = getFlag(AL0307_uc_Square, k0x0004_StairsUp); AL0307_uc_FootprintsAllowed = false; - goto T0172046_Stairs; + while ((curThing != Thing::_endOfList) && (curThing.getType() <= k3_SensorThingType)) + curThing = f159_getNextThing(curThing); + break; case k4_DoorElemType: if (bool((getFlag(AL0307_uc_Square, k0x0008_DoorNorthSouthOrient) >> 3)) == isOrientedWestEast(dir)) { aspectArray[k0_ElemAspect] = k16_DoorSideElemType; @@ -944,14 +950,12 @@ T0172010_ClosedFakeWall: aspectArray[k3_DoorThingIndexAspect] = f161_getSquareFirstThing(mapX, mapY).getIndex(); } AL0307_uc_FootprintsAllowed = true; -T0172046_Stairs: - while ((curThing != Thing::_endOfList) && (curThing.getType() <= k3_SensorThingType)) { + + while ((curThing != Thing::_endOfList) && (curThing.getType() <= k3_SensorThingType)) curThing = f159_getNextThing(curThing); - } -T0172049_Footprints: - if (AL0307_uc_FootprintsAllowed && (AL0307_uc_ScentOrdinal = _vm->_championMan->f315_getScentOrdinal(mapX, mapY)) && (--AL0307_uc_ScentOrdinal >= _vm->_championMan->_g407_party._firstScentIndex) && (AL0307_uc_ScentOrdinal < _vm->_championMan->_g407_party._lastScentIndex)) { + + if (AL0307_uc_FootprintsAllowed && (AL0307_uc_ScentOrdinal = _vm->_championMan->f315_getScentOrdinal(mapX, mapY)) && (--AL0307_uc_ScentOrdinal >= _vm->_championMan->_g407_party._firstScentIndex) && (AL0307_uc_ScentOrdinal < _vm->_championMan->_g407_party._lastScentIndex)) setFlag(aspectArray[k4_FloorOrnOrdAspect], k0x8000_FootprintsAspect); - } } aspectArray[k1_FirstGroupOrObjectAspect] = curThing.toUint16(); } |