mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-26 06:18:23 +00:00
DM: Add missing code to several display functions
This commit is contained in:
parent
7fef7b8312
commit
411ad40ca4
@ -427,6 +427,28 @@ void ChampionMan::f301_addObjectInSlot(ChampionIndex champIndex, Thing thing, Ch
|
||||
champ->setAttributeFlag(k0x4000_ChampionAttributeViewport, true);
|
||||
}
|
||||
|
||||
int16 ChampionMan::f315_getScentOrdinal(int16 mapX, int16 mapY) {
|
||||
uint16 searchedScentRedEagle;
|
||||
int16 scentIndex;
|
||||
Scent* scent;
|
||||
Scent searchedScent;
|
||||
|
||||
|
||||
if (scentIndex = _g407_party._scentCount) {
|
||||
searchedScent.setMapX(mapX);
|
||||
searchedScent.setMapY(mapY);
|
||||
searchedScent.setMapIndex(_vm->_dungeonMan->_g272_currMapIndex);
|
||||
searchedScentRedEagle = searchedScent.toUint16();
|
||||
scent = &_g407_party._scents[scentIndex--];
|
||||
do {
|
||||
if ((*(--scent)).toUint16() == searchedScentRedEagle) {
|
||||
return _vm->M0_indexToOrdinal(scentIndex);
|
||||
}
|
||||
} while (scentIndex--);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
ChampionIndex ChampionMan::f285_getIndexInCell(ViewCell cell) {
|
||||
for (uint16 i = 0; i < _g305_partyChampionCount; ++i) {
|
||||
if ((_gK71_champions[i]._cell == cell) && _gK71_champions[i]._currHealth)
|
||||
|
@ -55,6 +55,8 @@ public:
|
||||
void setMapX(uint16 val) { _scent = (_scent & ~0x1F) & (val & 0x1F); }
|
||||
void setMapY(uint16 val) { _scent = (_scent & ~(0x1F << 5)) & (val & 0x1F); }
|
||||
void setMapIndex(uint16 val) { _scent = (_scent & ~(0x1F << 10)) & (val & 0x3F); }
|
||||
|
||||
uint16 toUint16() { return _scent; }
|
||||
}; // @ SCENT
|
||||
|
||||
class Party {
|
||||
@ -466,6 +468,8 @@ public:
|
||||
bool f295_hasObjectIconInSlotBoxChanged(int16 slotBoxIndex, Thing thing); // @ F0295_CHAMPION_HasObjectIconInSlotBoxChanged
|
||||
void f296_drawChangedObjectIcons(); // @ F0296_CHAMPION_DrawChangedObjectIcons
|
||||
void f301_addObjectInSlot(ChampionIndex champIndex, Thing thing, ChampionSlot slotIndex); // @ F0301_CHAMPION_AddObjectInSlot
|
||||
int16 f315_getScentOrdinal(int16 mapX, int16 mapY); // @ F0315_CHAMPION_GetScentOrdinal
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
@ -88,6 +88,10 @@ uint16 M75_bitmapByteCount(uint16 pixelWidth, uint16 height) {
|
||||
return pixelWidth / 2 * height;
|
||||
}
|
||||
|
||||
uint16 M21_normalizeModulo4(uint16 val) {
|
||||
return val & 3;
|
||||
}
|
||||
|
||||
DMEngine::DMEngine(OSystem *syst) : Engine(syst), _console(nullptr) {
|
||||
// Do not load data files
|
||||
// Do not initialize graphics here
|
||||
|
@ -70,6 +70,7 @@ uint16 setFlag(uint16 &val, uint16 mask); // @ M08_SET
|
||||
uint16 clearFlag(uint16 &val, uint16 mask); // @ M09_CLEAR
|
||||
uint16 toggleFlag(uint16 &val, uint16 mask); // @ M10_TOGGLE
|
||||
uint16 M75_bitmapByteCount(uint16 pixelWidth, uint16 height); // @ M75_BITMAP_BYTE_COUNT
|
||||
uint16 M21_normalizeModulo4(uint16 val); // @ M21_NORMALIZE
|
||||
|
||||
|
||||
enum ThingType {
|
||||
|
@ -30,6 +30,7 @@
|
||||
|
||||
#include "dungeonman.h"
|
||||
#include "timeline.h"
|
||||
#include "champion.h"
|
||||
|
||||
|
||||
|
||||
@ -512,7 +513,7 @@ byte g236_AdditionalThingCounts[16] = { // @ G0236_auc_Graphic559_AdditionalThin
|
||||
0, /* Unused */
|
||||
60, /* Projectile */
|
||||
50 /* Explosion */
|
||||
};
|
||||
};
|
||||
|
||||
// this is the number of uint16s the data has to be stored, not the length of the data in dungeon.dat!
|
||||
byte g235_ThingDataWordCount[16] = { // @ G0235_auc_Graphic559_ThingDataByteCount
|
||||
@ -532,7 +533,7 @@ byte g235_ThingDataWordCount[16] = { // @ G0235_auc_Graphic559_ThingDataByteCoun
|
||||
0, /* Unused */
|
||||
5, /* Projectile */
|
||||
2 /* Explosion */
|
||||
};
|
||||
};
|
||||
|
||||
const Thing Thing::_none(0); // @ C0xFFFF_THING_NONE
|
||||
const Thing Thing::_endOfList(0xFFFE); // @ C0xFFFE_THING_ENDOFLIST
|
||||
@ -826,140 +827,154 @@ Thing DungeonMan::f161_getSquareFirstThing(int16 mapX, int16 mapY) {
|
||||
}
|
||||
|
||||
|
||||
// TODO: get rid of the GOTOs
|
||||
// TODO: produce more GOTOs
|
||||
void DungeonMan::f172_setSquareAspect(uint16 *aspectArray, direction dir, int16 mapX, int16 mapY) { // complete, except where marked
|
||||
_vm->_displayMan->_g289_championPortraitOrdinal = 0; // BUG0_75, possible fix
|
||||
#define thingType dir
|
||||
byte L0307_uc_Multiple;
|
||||
#define square L0307_uc_Multiple
|
||||
#define footprintsAllowed L0307_uc_Multiple
|
||||
#define scentOrdinal L0307_uc_Multiple
|
||||
Sensor* sensor;
|
||||
bool leftRandWallOrnAllowed;
|
||||
int16 L0310_i_Multiple;
|
||||
#define frontRandWallOrnAllowed L0310_i_Multiple
|
||||
#define sideIndex L0310_i_Multiple
|
||||
bool rightRandWallOrnAllowed;
|
||||
int16 thingTypeRedEagle;
|
||||
bool squreIsFakeWall;
|
||||
Thing thing;
|
||||
|
||||
|
||||
for (uint16 i = 0; i < 5; ++i)
|
||||
aspectArray[i] = 0;
|
||||
|
||||
Thing thing = f161_getSquareFirstThing(mapX, mapY);
|
||||
Square square = f151_getSquare(mapX, mapY);
|
||||
|
||||
aspectArray[k0_ElemAspect] = square.getType();
|
||||
|
||||
bool leftOrnAllowed = false;
|
||||
bool rightOrnAllowed = false;
|
||||
bool frontOrnAllowed = false;
|
||||
bool squareIsFakeWall = false;
|
||||
bool footPrintsAllowed = false;
|
||||
switch (square.getType()) {
|
||||
case k0_WallElemType:
|
||||
thing = _vm->_dungeonMan->f161_getSquareFirstThing(mapX, mapY);
|
||||
square = _vm->_dungeonMan->f151_getSquare(mapX, mapY).toByte();
|
||||
switch (aspectArray[k0_ElemAspect] = Square(square).getType()) {
|
||||
case k0_ElementTypeWall:
|
||||
switch (dir) {
|
||||
case kDirNorth:
|
||||
leftOrnAllowed = square.get(k0x0004_WallEastRandOrnAllowed);
|
||||
frontOrnAllowed = square.get(k0x0002_WallSouthRandOrnAllowed);
|
||||
rightOrnAllowed = square.get(k0x0001_WallWestRandOrnAllowed);
|
||||
leftRandWallOrnAllowed = getFlag(square, k0x0004_WallEastRandOrnAllowed);
|
||||
frontRandWallOrnAllowed = getFlag(square, k0x0002_WallSouthRandOrnAllowed);
|
||||
rightRandWallOrnAllowed = getFlag(square, k0x0001_WallWestRandOrnAllowed);
|
||||
break;
|
||||
case kDirEast:
|
||||
leftOrnAllowed = square.get(k0x0002_WallSouthRandOrnAllowed);
|
||||
frontOrnAllowed = square.get(k0x0001_WallWestRandOrnAllowed);
|
||||
rightOrnAllowed = square.get(k0x0008_WallNorthRandOrnAllowed);
|
||||
leftRandWallOrnAllowed = getFlag(square, k0x0002_WallSouthRandOrnAllowed);
|
||||
frontRandWallOrnAllowed = getFlag(square, k0x0001_WallWestRandOrnAllowed);
|
||||
rightRandWallOrnAllowed = getFlag(square, k0x0008_WallNorthRandOrnAllowed);
|
||||
break;
|
||||
case kDirSouth:
|
||||
leftOrnAllowed = square.get(k0x0001_WallWestRandOrnAllowed);
|
||||
frontOrnAllowed = square.get(k0x0008_WallNorthRandOrnAllowed);
|
||||
rightOrnAllowed = square.get(k0x0004_WallEastRandOrnAllowed);
|
||||
leftRandWallOrnAllowed = getFlag(square, k0x0001_WallWestRandOrnAllowed);
|
||||
frontRandWallOrnAllowed = getFlag(square, k0x0008_WallNorthRandOrnAllowed);
|
||||
rightRandWallOrnAllowed = getFlag(square, k0x0004_WallEastRandOrnAllowed);
|
||||
break;
|
||||
case kDirWest:
|
||||
leftOrnAllowed = square.get(k0x0008_WallNorthRandOrnAllowed);
|
||||
frontOrnAllowed = square.get(k0x0004_WallEastRandOrnAllowed);
|
||||
rightOrnAllowed = square.get(k0x0002_WallSouthRandOrnAllowed);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
leftRandWallOrnAllowed = getFlag(square, k0x0008_WallNorthRandOrnAllowed);
|
||||
frontRandWallOrnAllowed = getFlag(square, k0x0004_WallEastRandOrnAllowed);
|
||||
rightRandWallOrnAllowed = getFlag(square, k0x0002_WallSouthRandOrnAllowed);
|
||||
}
|
||||
|
||||
/* BUG0_75 Multiple champion portraits are drawn (one at a time) then the game crashes. This variable is only
|
||||
reset to 0 when at least one square in the dungeon view is a wall. If the party is in front of a wall with a
|
||||
champion portrait and the next time the dungeon view is drawn there is no wall square in the view and the
|
||||
square in front of the party is a fake wall with a random ornament then the same champion portrait will be
|
||||
drawn again because the variable was not reset to 0. Each time _vm->_displayMan->f107_isDrawnWallOrnAnAlcove
|
||||
draws the portrait, _vm->_displayMan->_g289_championPortraitOrdinal is decremented so that the portait is
|
||||
different each time the dungeon view is drawn until the game crashes */
|
||||
_vm->_displayMan->_g289_championPortraitOrdinal = 0;
|
||||
squreIsFakeWall = false;
|
||||
T0172010_ClosedFakeWall:
|
||||
f171_setSquareAspectOrnOrdinals(aspectArray, leftOrnAllowed, frontOrnAllowed, rightOrnAllowed, dir, mapX, mapY, squareIsFakeWall);
|
||||
|
||||
while ((thing != Thing::_endOfList) && (thing.getType() <= k3_SensorThingType)) {
|
||||
int16 sideIndex = (thing.getCell() - dir) & 3;
|
||||
if (sideIndex) {
|
||||
if (thing.getType() == k2_TextstringType) {
|
||||
if (TextString(f156_getThingData(thing)).isVisible()) {
|
||||
aspectArray[sideIndex + 1] = _g265_currMapInscriptionWallOrnIndex + 1;
|
||||
_vm->_displayMan->_g290_inscriptionThing = thing; // BUG0_76
|
||||
_vm->_dungeonMan->f171_setSquareAspectOrnOrdinals(aspectArray,
|
||||
leftRandWallOrnAllowed, frontRandWallOrnAllowed, rightRandWallOrnAllowed, dir, mapX, mapY, squreIsFakeWall);
|
||||
while ((thing != Thing::_endOfList) && ((thingTypeRedEagle = thing.getType()) <= k3_SensorThingType)) {
|
||||
if (sideIndex = M21_normalizeModulo4(thing.getCell() - dir)) { /* Invisible on the back wall if 0 */
|
||||
sensor = (Sensor*)_vm->_dungeonMan->f156_getThingData(thing);
|
||||
if (thingTypeRedEagle == k2_TextstringType) {
|
||||
if (((TextString*)sensor)->isVisible()) {
|
||||
aspectArray[sideIndex + 1] = _vm->_dungeonMan->_g265_currMapInscriptionWallOrnIndex + 1;
|
||||
/* BUG0_76 The same text is drawn on multiple sides of a wall square. The engine stores only a
|
||||
single text to draw on a wall in a global variable. Even if different texts are placed on
|
||||
differents sides of the wall, the same text is drawn on each affected side */
|
||||
_vm->_displayMan->_g290_inscriptionThing = thing;
|
||||
}
|
||||
} else {
|
||||
Sensor sensor(f156_getThingData(thing));
|
||||
aspectArray[sideIndex + 1] = sensor.getOrnOrdinal();
|
||||
if (sensor.getType() == k127_SensorWallChampionPortrait) {
|
||||
_vm->_displayMan->_g289_championPortraitOrdinal = _vm->M0_indexToOrdinal(sensor.getData());
|
||||
aspectArray[sideIndex + 1] = sensor->getOrnOrdinal();
|
||||
if (sensor->getType() == k127_SensorWallChampionPortrait) {
|
||||
_vm->_displayMan->_g289_championPortraitOrdinal = _vm->M0_indexToOrdinal(sensor->getData());
|
||||
}
|
||||
}
|
||||
}
|
||||
thing = f159_getNextThing(thing);
|
||||
thing = _vm->_dungeonMan->f159_getNextThing(thing);
|
||||
}
|
||||
if (squareIsFakeWall && (_g306_partyMapX != mapX) && (_g307_partyMapY != mapY)) {
|
||||
if (squreIsFakeWall && (_vm->_dungeonMan->_g306_partyMapX != mapX) && (_vm->_dungeonMan->_g307_partyMapY != mapY)) {
|
||||
aspectArray[k1_FirstGroupOrObjectAspect] = Thing::_endOfList.toUint16();
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case k2_PitElemType:
|
||||
if (square.get(k0x0008_PitOpen)) {
|
||||
aspectArray[k2_PitInvisibleAspect] = square.get(k0x0004_PitInvisible);
|
||||
footPrintsAllowed = square.toByte() & 1;
|
||||
case k2_ElementTypePit:
|
||||
if (getFlag(square, k0x0008_PitOpen)) {
|
||||
aspectArray[k2_PitInvisibleAspect] = getFlag(square, k0x0004_PitInvisible);
|
||||
footprintsAllowed &= 0x0001;
|
||||
} else {
|
||||
aspectArray[k0_ElemAspect] = k1_CorridorElemType;
|
||||
footPrintsAllowed = true;
|
||||
footprintsAllowed = true;
|
||||
}
|
||||
goto T0172030_Pit;
|
||||
case k6_FakeWallElemType:
|
||||
if (!square.get(k0x0004_FakeWallOpen)) {
|
||||
aspectArray[k0_ElemAspect] = k0_WallElemType;
|
||||
leftOrnAllowed = rightOrnAllowed = frontOrnAllowed = square.get(k0x0008_FakeWallRandOrnOrFootPAllowed);
|
||||
squareIsFakeWall = true;
|
||||
case k6_ElementTypeFakeWall:
|
||||
if (!getFlag(square, k0x0004_FakeWallOpen)) {
|
||||
aspectArray[k0_ElemAspect] = k0_ElementTypeWall;
|
||||
leftRandWallOrnAllowed = rightRandWallOrnAllowed = frontRandWallOrnAllowed = getFlag(square, k0x0008_FakeWallRandOrnOrFootPAllowed);
|
||||
squreIsFakeWall = true;
|
||||
goto T0172010_ClosedFakeWall;
|
||||
}
|
||||
aspectArray[k0_WallElemType] = k1_CorridorElemType;
|
||||
footPrintsAllowed = square.get(k0x0008_FakeWallRandOrnOrFootPAllowed);
|
||||
square = Square(footPrintsAllowed ? 8 : 0);
|
||||
// intentional fallthrough
|
||||
aspectArray[k0_ElemAspect] = k1_CorridorElemType;
|
||||
footprintsAllowed = getFlag(square, k0x0008_FakeWallRandOrnOrFootPAllowed) ? 8 : 0;
|
||||
case k1_CorridorElemType:
|
||||
aspectArray[k4_FloorOrnOrdAspect] = f170_getRandomOrnOrdinal(square.get(k0x0008_CorridorRandOrnAllowed), _g269_currMap->_randFloorOrnCount, mapX, mapY, 30);
|
||||
aspectArray[k4_FloorOrnOrdAspect] = _vm->_dungeonMan->f170_getRandomOrnOrdinal(getFlag(square, k0x0008_CorridorRandOrnAllowed),
|
||||
_vm->_dungeonMan->_g269_currMap->_randFloorOrnCount, mapX, mapY, 30);
|
||||
T0172029_Teleporter:
|
||||
footPrintsAllowed = true;
|
||||
footprintsAllowed = true;
|
||||
T0172030_Pit:
|
||||
while ((thing != Thing::_endOfList) && (thing.getType() <= k3_SensorThingType)) {
|
||||
if (thing.getType() == k3_SensorThingType)
|
||||
aspectArray[k4_FloorOrnOrdAspect] = Sensor(f156_getThingData(thing)).getOrnOrdinal();
|
||||
thing = f159_getNextThing(thing);
|
||||
while ((thing != Thing::_endOfList) && ((thingType = (direction)thing.getType()) <= k3_SensorThingType)) {
|
||||
if (thingType == k3_SensorThingType) {
|
||||
sensor = (Sensor*)_vm->_dungeonMan->f156_getThingData(thing);
|
||||
aspectArray[k4_FloorOrnOrdAspect] = sensor->getOrnOrdinal();
|
||||
}
|
||||
thing = _vm->_dungeonMan->f159_getNextThing(thing);
|
||||
}
|
||||
goto T0172049_Footprints;
|
||||
case k5_TeleporterElemType:
|
||||
aspectArray[k2_TeleporterVisibleAspect] = square.get(k0x0008_TeleporterOpen) && square.get(k0x0004_TeleporterVisible);
|
||||
case k5_ElementTypeTeleporter:
|
||||
aspectArray[k2_TeleporterVisibleAspect] = getFlag(square, k0x0008_TeleporterOpen) && getFlag(square, k0x0004_TeleporterVisible);
|
||||
goto T0172029_Teleporter;
|
||||
case k3_StairsElemType:
|
||||
aspectArray[k0_ElemAspect] = ((square.get(k0x0008_StairsNorthSouthOrient) >> 3) == (isOrientedWestEast(dir) ? 1 : 0)) ? k18_StairsSideElemType : k19_StairsFrontElemType;
|
||||
aspectArray[k2_StairsUpAspect] = square.get(k0x0004_StairsUp);
|
||||
footPrintsAllowed = false;
|
||||
case k3_ElementTypeStairs:
|
||||
aspectArray[k0_ElemAspect] = ((getFlag(square, k0x0008_StairsNorthSouthOrient) >> 3) == isOrientedWestEast(dir)) ? k18_ElementTypeStairsSide : k19_ElementTypeStaisFront;
|
||||
aspectArray[k2_StairsUpAspect] = getFlag(square, k0x0004_StairsUp);
|
||||
footprintsAllowed = false;
|
||||
goto T0172046_Stairs;
|
||||
case k4_DoorElemType:
|
||||
if ((square.get(k0x0008_DoorNorthSouthOrient) >> 3) == (isOrientedWestEast(dir) ? 1 : 0)) {
|
||||
if ((getFlag(square, k0x0008_DoorNorthSouthOrient) >> 3) == isOrientedWestEast(dir)) {
|
||||
aspectArray[k0_ElemAspect] = k16_DoorSideElemType;
|
||||
} else {
|
||||
aspectArray[k0_ElemAspect] = k17_DoorFrontElemType;
|
||||
aspectArray[k2_DoorStateAspect] = square.getDoorState();
|
||||
aspectArray[k3_DoorThingIndexAspect] = f161_getSquareFirstThing(mapX, mapY).getIndex();
|
||||
aspectArray[k2_DoorStateAspect] = Square(square).getDoorState();
|
||||
aspectArray[k3_DoorThingIndexAspect] = _vm->_dungeonMan->f161_getSquareFirstThing(mapX, mapY).getIndex();
|
||||
}
|
||||
footPrintsAllowed = true;
|
||||
footprintsAllowed = true;
|
||||
T0172046_Stairs:
|
||||
while ((thing != Thing::_endOfList) && (thing.getType() <= k3_SensorThingType))
|
||||
thing = f159_getNextThing(thing);
|
||||
while ((thing != Thing::_endOfList) && (thing.getType() <= k3_SensorThingType)) {
|
||||
thing = _vm->_dungeonMan->f159_getNextThing(thing);
|
||||
}
|
||||
T0172049_Footprints:
|
||||
unsigned char scentOrdinal; // see next line comment
|
||||
if (footPrintsAllowed) // TODO: I skipped some party query code, must come back later and complete
|
||||
aspectArray[k4_FloorOrnOrdAspect] &= k0x8000_FootprintsAspect;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
if (footprintsAllowed && (scentOrdinal = _vm->_championMan->f315_getScentOrdinal(mapX, mapY))
|
||||
&& (--scentOrdinal >= _vm->_championMan->_g407_party._firstScentIndex)
|
||||
&& (scentOrdinal < _vm->_championMan->_g407_party._lastScentIndex)) {
|
||||
setFlag(aspectArray[k4_FloorOrnOrdAspect], k0x8000_FootprintsAspect);
|
||||
}
|
||||
}
|
||||
aspectArray[k1_FirstGroupOrObjectAspect] = thing.toUint16();
|
||||
}
|
||||
|
||||
void DungeonMan::f171_setSquareAspectOrnOrdinals(uint16 *aspectArray, bool leftAllowed, bool frontAllowed, bool rightAllowed, direction dir,
|
||||
int16 mapX, int16 mapY, bool isFakeWall) {
|
||||
int16 mapX, int16 mapY, bool isFakeWall) {
|
||||
int16 ornCount = _g269_currMap->_randWallOrnCount;
|
||||
|
||||
turnDirRight(dir);
|
||||
@ -1336,4 +1351,34 @@ int16 DungeonMan::f142_getProjectileAspect(Thing thing) {
|
||||
return g237_ObjectInfo[f141_getObjectInfoIndex(thing)]._objectAspectIndex;
|
||||
}
|
||||
|
||||
int16 DungeonMan::f154_getLocationAfterLevelChange(int16 mapIndex, int16 levelDelta, int16* mapX, int16* mapY) {
|
||||
int16 newMapX;
|
||||
int16 newMapY;
|
||||
int16 newLevel;
|
||||
int16 offset;
|
||||
Map* map;
|
||||
int16 targetMapIndex;
|
||||
|
||||
|
||||
if (_vm->_dungeonMan->_g309_partyMapIndex == k255_mapIndexEntrance) {
|
||||
return kM1_mapIndexNone;
|
||||
}
|
||||
map = _vm->_dungeonMan->_g277_dungeonMaps + mapIndex;
|
||||
newMapX = map->_offsetMapX + *mapX;
|
||||
newMapY = map->_offsetMapY + *mapY;
|
||||
newLevel = map->_level + levelDelta;
|
||||
map = _vm->_dungeonMan->_g277_dungeonMaps;
|
||||
for (targetMapIndex = 0; targetMapIndex < _vm->_dungeonMan->_g278_dungeonFileHeader._mapCount; targetMapIndex++) {
|
||||
if ((map->_level == newLevel)
|
||||
&& (newMapX >= (offset = map->_offsetMapX))
|
||||
&& (newMapX <= (offset + map->_width))
|
||||
&& (newMapY >= (offset = map->_offsetMapY)) && (newMapY <= (offset + map->_height))) {
|
||||
*mapY = newMapY - offset;
|
||||
*mapX = newMapX - map->_offsetMapX;
|
||||
return targetMapIndex;
|
||||
}
|
||||
map++;
|
||||
}
|
||||
return kM1_mapIndexNone;
|
||||
}
|
||||
}
|
||||
|
@ -648,6 +648,7 @@ public:
|
||||
void f163_linkThingToList(Thing thingToLink, Thing thingInList, int16 mapX, int16 mapY); // @ F0163_DUNGEON_LinkThingToList
|
||||
WeaponInfo *f158_getWeaponInfo(Thing thing); // @ F0158_DUNGEON_GetWeaponInfo
|
||||
int16 f142_getProjectileAspect(Thing thing); // @ F0142_DUNGEON_GetProjectileAspect
|
||||
int16 f154_getLocationAfterLevelChange(int16 mapIndex, int16 levelDelta, int16 *mapX, int16 *mapY); // @ F0154_DUNGEON_GetLocationAfterLevelChange
|
||||
|
||||
uint32 _rawDunFileDataSize; // @ probably NONE
|
||||
byte *_rawDunFileData; // @ ???
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -57,6 +57,11 @@ namespace DM {
|
||||
#define k1_ViewDoorOrnament_D2LCR 1 // @ C1_VIEW_DOOR_ORNAMENT_D2LCR
|
||||
#define k2_ViewDoorOrnament_D1LCR 2 // @ C2_VIEW_DOOR_ORNAMENT_D1LCR
|
||||
|
||||
#define k0_viewDoorButton_D3R 0 // @ C0_VIEW_DOOR_BUTTON_D3R
|
||||
#define k1_viewDoorButton_D3C 1 // @ C1_VIEW_DOOR_BUTTON_D3C
|
||||
#define k2_viewDoorButton_D2C 2 // @ C2_VIEW_DOOR_BUTTON_D2C
|
||||
#define k3_viewDoorButton_D1C 3 // @ C3_VIEW_DOOR_BUTTON_D1C
|
||||
|
||||
#define k0x0001_MaskDoorInfo_CraturesCanSeeThrough 0x0001 // @ MASK0x0001_CREATURES_CAN_SEE_THROUGH
|
||||
#define k0x0002_MaskDoorInfo_ProjectilesCanPassThrough 0x0002 // @ MASK0x0002_PROJECTILES_CAN_PASS_THROUGH
|
||||
#define k0x0004_MaskDoorInfo_Animated 0x0004 // @ MASK0x0004_ANIMATED
|
||||
@ -222,6 +227,7 @@ enum GraphicIndice {
|
||||
k38_BorderPartyFireshieldIndice = 38, // @ C038_GRAPHIC_BORDER_PARTY_FIRESHIELD
|
||||
k39_BorderPartySpellshieldIndice = 39, // @ C039_GRAPHIC_BORDER_PARTY_SPELLSHIELD
|
||||
k40_PanelResurectReincaranteIndice = 40, // @ C040_GRAPHIC_PANEL_RESURRECT_REINCARNATE
|
||||
k41_holeInWall_GraphicIndice = 41, // @ C041_GRAPHIC_HOLE_IN_WALL
|
||||
k42_ObjectIcons_000_TO_031 = 42, // @ C042_GRAPHIC_OBJECT_ICONS_000_TO_031
|
||||
k43_ObjectIcons_032_TO_063 = 43, // @ C043_GRAPHIC_OBJECT_ICONS_032_TO_063
|
||||
k44_ObjectIcons_064_TO_095 = 44, // @ C044_GRAPHIC_OBJECT_ICONS_064_TO_095
|
||||
@ -237,11 +243,24 @@ enum GraphicIndice {
|
||||
k54_FloorPit_D1C_GraphicIndice = 54, // @ C054_GRAPHIC_FLOOR_PIT_D1C
|
||||
k55_FloorPit_D0L_GraphicIndice = 55, // @ C055_GRAPHIC_FLOOR_PIT_D0L
|
||||
k56_FloorPit_D0C_GraphicIndice = 56, // @ C056_GRAPHIC_FLOOR_PIT_D0C
|
||||
k57_FloorPir_Invisible_D2L_GraphicIndice = 57, // @ C057_GRAPHIC_FLOOR_PIT_INVISIBLE_D2L
|
||||
k58_FloorPit_invisible_D2C_GraphicIndice = 58, // @ C058_GRAPHIC_FLOOR_PIT_INVISIBLE_D2C
|
||||
k59_floorPit_invisible_D1L_GraphicIndice = 59, // @ C059_GRAPHIC_FLOOR_PIT_INVISIBLE_D1L
|
||||
k60_floorPitInvisibleD1C_GraphicIndice = 60, // @ C060_GRAPHIC_FLOOR_PIT_INVISIBLE_D1C
|
||||
k61_floorPitInvisibleD0L_GraphicIndice = 61, // @ C061_GRAPHIC_FLOOR_PIT_INVISIBLE_D0L
|
||||
k62_flootPitInvisibleD0C_graphicIndice = 62, // @ C062_GRAPHIC_FLOOR_PIT_INVISIBLE_D0C
|
||||
k63_ceilingPit_D2L_GraphicIndice = 63, // @ C063_GRAPHIC_CEILING_PIT_D2L
|
||||
k64_ceilingPitD2C_GraphicIndice = 64, // @ C064_GRAPHIC_CEILING_PIT_D2C
|
||||
k65_ceilingPitD1L_GraphicIndice = 65, // @ C065_GRAPHIC_CEILING_PIT_D1L
|
||||
k66_ceilingPitD1C_GraphicIndice = 66, // @ C066_GRAPHIC_CEILING_PIT_D1C
|
||||
k67_ceilingPitD0L_grahicIndice = 67, // @ C067_GRAPHIC_CEILING_PIT_D0L
|
||||
k68_ceilingPitD0C_graphicIndice = 68, // @ C068_GRAPHIC_CEILING_PIT_D0C
|
||||
k69_FieldMask_D3R_GraphicIndice = 69, // @ C069_GRAPHIC_FIELD_MASK_D3R
|
||||
k73_FieldTeleporterGraphicIndice = 73, // @ C073_GRAPHIC_FIELD_TELEPORTER
|
||||
k120_InscriptionFontIndice = 120, // @ C120_GRAPHIC_INSCRIPTION_FONT
|
||||
k241_FloorOrn_15_D3L_footprints = 241, // @ C241_GRAPHIC_FLOOR_ORNAMENT_15_D3L_FOOTPRINTS
|
||||
k301_DoorMaskDestroyedIndice = 301, // @ C301_GRAPHIC_DOOR_MASK_DESTROYED
|
||||
k315_firstDoorButton_GraphicIndice = 315, // @ C315_GRAPHIC_FIRST_DOOR_BUTTON
|
||||
k316_FirstProjectileGraphicIndice = 316, // @ C316_GRAPHIC_FIRST_PROJECTILE
|
||||
k348_FirstExplosionGraphicIndice = 348, // @ C348_GRAPHIC_FIRST_EXPLOSION
|
||||
k351_FirstExplosionPatternGraphicIndice = 351, // @ C351_GRAPHIC_FIRST_EXPLOSION_PATTERN
|
||||
@ -590,6 +609,8 @@ public:
|
||||
void loadPalette(uint16 *palette);
|
||||
void f461_allocateFlippedWallBitmaps(); // @ F0461_START_AllocateFlippedWallBitmaps
|
||||
void f102_drawDoorBitmap(Frame *frame);// @ F0102_DUNGEONVIEW_DrawDoorBitmap
|
||||
void f103_drawDoorFrameBitmapFlippedHorizontally(byte *bitmap, Frame *frame); // @ F0103_DUNGEONVIEW_DrawDoorFrameBitmapFlippedHorizontally
|
||||
void f110_drawDoorButton(int16 doorButtonOrdinal, int16 viewDoorButtonIndex); // @ F0110_DUNGEONVIEW_DrawDoorButton
|
||||
|
||||
/// Gives the width of an IMG0 type item
|
||||
uint16 getPixelWidth(uint16 index);
|
||||
@ -602,6 +623,8 @@ public:
|
||||
void f111_drawDoor(uint16 doorThingIndex, uint16 doorState, int16 *doorNativeBitmapIndices, int16 byteCount,
|
||||
int16 viewDoorOrnIndex, DoorFrames *doorFrames); // @ F0111_DUNGEONVIEW_DrawDoor
|
||||
void f109_drawDoorOrnament(int16 doorOrnOdinal, int16 viewDoorOrnIndex); // @ F0109_DUNGEONVIEW_DrawDoorOrnament
|
||||
void f112_drawCeilingPit(int16 nativeBitmapIndex, Frame *frame, int16 mapX, int16 mapY, bool flipHorizontal); // @ F0112_DUNGEONVIEW_DrawCeilingPit
|
||||
|
||||
|
||||
|
||||
/* srcHeight and destHeight are not necessary for blitting, only error checking, thus they are defaulted for existing code which
|
||||
|
Loading…
x
Reference in New Issue
Block a user