aboutsummaryrefslogtreecommitdiff
path: root/engines/bladerunner/debugger.cpp
diff options
context:
space:
mode:
authorThanasis Antoniou2019-05-21 22:13:45 +0300
committerThanasis Antoniou2019-05-21 22:13:45 +0300
commitd4855a64b3bc9f9b2951486589ee8bff26ffabc2 (patch)
tree96574b1c391b705e80b49ac321b2636194c45afd /engines/bladerunner/debugger.cpp
parent203d82a1a0382684884da0d6c285444605153802 (diff)
downloadscummvm-rg350-d4855a64b3bc9f9b2951486589ee8bff26ffabc2.tar.gz
scummvm-rg350-d4855a64b3bc9f9b2951486589ee8bff26ffabc2.tar.bz2
scummvm-rg350-d4855a64b3bc9f9b2951486589ee8bff26ffabc2.zip
BLADERUNNER: Add methods to skip screen effects
Also enhanced functionality for debugger's cmdDraw, allowing to draw isolated objects
Diffstat (limited to 'engines/bladerunner/debugger.cpp')
-rw-r--r--engines/bladerunner/debugger.cpp858
1 files changed, 641 insertions, 217 deletions
diff --git a/engines/bladerunner/debugger.cpp b/engines/bladerunner/debugger.cpp
index 354e899bd6..af3bdaf13e 100644
--- a/engines/bladerunner/debugger.cpp
+++ b/engines/bladerunner/debugger.cpp
@@ -74,17 +74,35 @@ Debugger::Debugger(BladeRunnerEngine *vm) : GUI::Debugger() {
_isDebuggerOverlay = false;
- _viewActorsOnly = false;
+ _viewActorsToggle = false;
+ _view3dObjectsToggle = false;
+ _viewItemsToggle = false;
_viewLights = false;
_viewFogs = false;
- _viewSceneObjects = false;
_viewScreenEffects = false;
_viewObstacles = false;
- _viewRegions = false;
+ _viewRegionsNormalToggle = false;
+ _viewRegionsExitsToggle = false;
_viewUI = false;
- _viewWaypoints = false;
+ _viewWaypointsNormalToggle = false;
+ _viewWaypointsFleeToggle = false;
+ _viewWaypointsCoverToggle = false;
_viewWalkboxes = false;
_viewZBuffer = false;
+
+ _specificActorsDrawn = false;
+ _specific3dObjectsDrawn = false;
+ _specificItemsDrawn = false;
+ _specificEffectsDrawn = false;
+ _specificLightsDrawn = false;
+ _specificFogsDrawn = false;
+ _specificRegionNormalDrawn = false;
+ _specificRegionExitsDrawn = false;
+ _specificWaypointNormalDrawn = false;
+ _specificWaypointFleeDrawn = false;
+ _specificWaypointCoverDrawn = false;
+ _specificWalkboxesDrawn = false;
+
_playFullVk = false;
_showStatsVk = false;
_showMazeScore = false;
@@ -111,9 +129,16 @@ Debugger::Debugger(BladeRunnerEngine *vm) : GUI::Debugger() {
registerCmd("object", WRAP_METHOD(Debugger, cmdObject));
registerCmd("item", WRAP_METHOD(Debugger, cmdItem));
registerCmd("region", WRAP_METHOD(Debugger, cmdRegion));
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ registerCmd("effect", WRAP_METHOD(Debugger, cmdEffect));
+#endif // BLADERUNNER_ORIGINAL_BUGS
}
Debugger::~Debugger() {
+ if(!_specificDrawnObjectsList.empty()) {
+ _specificDrawnObjectsList.clear();
+ }
}
bool Debugger::cmdAnimation(int argc, const char **argv) {
@@ -147,73 +172,216 @@ bool Debugger::cmdAnimation(int argc, const char **argv) {
}
bool Debugger::cmdDraw(int argc, const char **argv) {
- if (argc != 2) {
- debugPrintf("Enables debug rendering of actors, screen effect, fogs, lights, scene objects, obstacles, regions, ui elements, walk boxes, waypoints, zbuffer or disables debug rendering.\n");
- debugPrintf("Usage: %s (act | eff | fog | lit | obj | obstacles | reg | ui | walk | way | zbuf | reset)\n", argv[0]);
- return true;
+ bool invalidSyntax = false;
+
+ if (argc != 2 && argc != 3) {
+ invalidSyntax = true;
+ } else {
+ Common::String arg = argv[1];
+
+ int specificObjectId = -1;
+ DebuggerDrawnObject dbgDrawnObj;
+ dbgDrawnObj.type = debuggerObjTypeUndefined;
+
+ if (argc == 3) {
+ specificObjectId = atoi(argv[2]);
+ dbgDrawnObj.objId = specificObjectId;
+ dbgDrawnObj.sceneId = _vm->_scene->getSceneId();
+ dbgDrawnObj.setId = _vm->_scene->getSetId();
+ }
+
+ if (arg == "allobj") {
+ if (_viewActorsToggle && _view3dObjectsToggle && _viewItemsToggle) {
+ _viewActorsToggle = false;
+ _view3dObjectsToggle = false;
+ _viewItemsToggle = false;
+ } else {
+ _viewActorsToggle = true;
+ _view3dObjectsToggle = true;
+ _viewItemsToggle = true;
+ }
+ debugPrintf("Drawing all scene objects (actors, 3d objects, items) = %i\n", _viewActorsToggle && _view3dObjectsToggle && _viewItemsToggle);
+ } else if (arg == "act") {
+ if (argc == 2) {
+ _viewActorsToggle = !_viewActorsToggle;
+ debugPrintf("Drawing all actors in scene = %s\n", _viewActorsToggle? "true" : "false");
+ } else {
+ dbgDrawnObj.setId = -1;
+ dbgDrawnObj.sceneId = -1;
+ dbgDrawnObj.type = debuggerObjTypeActor;
+ }
+ } else if (arg == "obj") {
+ if (argc == 2) {
+ _view3dObjectsToggle = !_view3dObjectsToggle;
+ debugPrintf("Drawing all 3d objects in scene = %s\n", _view3dObjectsToggle? "true" : "false");
+ } else {
+ dbgDrawnObj.sceneId = -1;
+ dbgDrawnObj.type = debuggerObjType3dObject;
+ }
+ } else if (arg == "item") {
+ if (argc == 2) {
+ _viewItemsToggle = !_viewItemsToggle;
+ dbgDrawnObj.sceneId = -1;
+ debugPrintf("Drawing all items in scene = %s\n", _viewItemsToggle? "true" : "false");
+ } else {
+ dbgDrawnObj.type = debuggerObjTypeItem;
+ }
+ } else if (arg == "eff") {
+ if (argc == 2) {
+ _viewScreenEffects = !_viewScreenEffects;
+ debugPrintf("Drawing all screen effects = %s\n", _viewScreenEffects? "true" : "false");
+ } else {
+ dbgDrawnObj.type = debuggerObjTypeEffect;
+ }
+ } else if (arg == "fog") {
+ if (argc == 2) {
+ _viewFogs = !_viewFogs;
+ debugPrintf("Drawing all fogs = %s\n", _viewFogs? "true" : "false");
+ } else {
+ dbgDrawnObj.type = debuggerObjTypeFog;
+ }
+ } else if (arg == "lit") {
+ if (argc == 2) {
+ _viewLights = !_viewLights;
+ debugPrintf("Drawing all lights = %s\n", _viewLights? "true" : "false");
+ } else {
+ dbgDrawnObj.type = debuggerObjTypeLight;
+ }
+ } else if (arg == "allreg") {
+ if (_viewRegionsNormalToggle && _viewRegionsExitsToggle) {
+ _viewRegionsNormalToggle = false;
+ _viewRegionsExitsToggle = false;
+ } else {
+ _viewRegionsNormalToggle = true;
+ _viewRegionsExitsToggle = true;
+ }
+ debugPrintf("Drawing all scene regions (regular, exits) = %s\n", (_viewRegionsNormalToggle && _viewRegionsExitsToggle)? "true" : "false");
+ } else if (arg == "regnorm") {
+ if (argc == 2) {
+ _viewRegionsNormalToggle = !_viewRegionsNormalToggle;
+ debugPrintf("Drawing all normal regions = %s\n", _viewRegionsNormalToggle? "true" : "false");
+ } else {
+ dbgDrawnObj.type = debuggerObjTypeRegionNormal;
+ }
+ } else if (arg == "regexit") {
+ if (argc == 2) {
+ _viewRegionsExitsToggle = !_viewRegionsExitsToggle;
+ debugPrintf("Drawing all exit regions = %s\n", _viewRegionsExitsToggle? "true" : "false");
+ } else {
+ dbgDrawnObj.type = debuggerObjTypeRegionExit;
+ }
+ } else if (arg == "obstacles") {
+ _viewObstacles = !_viewObstacles;
+ debugPrintf("Drawing obstacles = %s\n", _viewObstacles? "true" : "false");
+ } else if (arg == "ui") {
+ _viewUI = !_viewUI;
+ debugPrintf("Drawing all UI elements = %s\n", _viewUI? "true" : "false");
+ } else if (arg == "allway") {
+ if (_viewWaypointsNormalToggle && _viewWaypointsFleeToggle && _viewWaypointsCoverToggle) {
+ _viewWaypointsNormalToggle = false;
+ _viewWaypointsFleeToggle = false;
+ _viewWaypointsCoverToggle = false;
+ } else {
+ _viewWaypointsNormalToggle = true;
+ _viewWaypointsFleeToggle = true;
+ _viewWaypointsCoverToggle = true;
+ }
+ debugPrintf("Drawing all waypoints (regular, cover, flee) = %s\n", (_viewWaypointsNormalToggle && _viewWaypointsFleeToggle && _viewWaypointsCoverToggle)? "true" : "false");
+ } else if (arg == "waynorm") {
+ if (argc == 2) {
+ _viewWaypointsNormalToggle = !_viewWaypointsNormalToggle;
+ debugPrintf("Drawing all normal waypoints = %s\n", _viewWaypointsNormalToggle? "true" : "false");
+ } else {
+ dbgDrawnObj.setId = -1;
+ dbgDrawnObj.sceneId = -1;
+ dbgDrawnObj.type = debuggerObjTypeWaypointNorm;
+ }
+ } else if (arg == "wayflee") {
+ if (argc == 2) {
+ _viewWaypointsFleeToggle = !_viewWaypointsFleeToggle;
+ debugPrintf("Drawing all flee waypoints = %s\n", _viewWaypointsFleeToggle? "true" : "false");
+ } else {
+ dbgDrawnObj.setId = -1;
+ dbgDrawnObj.sceneId = -1;
+ dbgDrawnObj.type = debuggerObjTypeWaypoingFlee;
+ }
+ } else if (arg == "waycov") {
+ if (argc == 2) {
+ _viewWaypointsCoverToggle = !_viewWaypointsCoverToggle;
+ debugPrintf("Drawing all cover waypoints = %s\n", _viewWaypointsCoverToggle? "true" : "false");
+ } else {
+ dbgDrawnObj.setId = -1;
+ dbgDrawnObj.sceneId = -1;
+ dbgDrawnObj.type = debuggerObjTypeWaypointCover;
+ }
+ } else if (arg == "walk") {
+ if (argc == 2) {
+ _viewWalkboxes = !_viewWalkboxes;
+ debugPrintf("Drawing all walk boxes = %s\n", _viewWalkboxes? "true" : "false");
+ } else {
+ dbgDrawnObj.type = debuggerObjTypeWalkbox;
+ }
+ } else if (arg == "zbuf") {
+ _viewZBuffer = !_viewZBuffer;
+ debugPrintf("Drawing Z buffer = %s\n", _viewZBuffer? "true" : "false");
+ } else if (arg == "reset") {
+
+ if(!_specificDrawnObjectsList.empty()) {
+ _specificDrawnObjectsList.clear();
+ }
+
+ _viewActorsToggle = false;
+ _view3dObjectsToggle = false;
+ _viewItemsToggle = false;
+ _viewObstacles = false;
+ _viewRegionsNormalToggle = false;
+ _viewRegionsExitsToggle = false;
+ _viewScreenEffects = false;
+ _viewFogs = false;
+ _viewLights = false;
+ _viewUI = false;
+ _viewWaypointsNormalToggle = false;
+ _viewWaypointsFleeToggle = false;
+ _viewWaypointsCoverToggle = false;
+ _viewWalkboxes = false;
+ _viewZBuffer = false;
+
+ debugPrintf("Drawing all scene objects (actors, 3d objects, items) = %s\n", (_viewActorsToggle && _view3dObjectsToggle && _viewItemsToggle)? "true" : "false");
+ debugPrintf("Drawing scene actors = %s\n", _viewActorsToggle? "true" : "false");
+ debugPrintf("Drawing scene 3d objects = %s\n", _view3dObjectsToggle? "true" : "false");
+ debugPrintf("Drawing scene items = %s\n", _viewItemsToggle? "true" : "false");
+ debugPrintf("Drawing obstacles = %s\n", _viewObstacles? "true" : "false");
+ debugPrintf("Drawing all regions (regular, exits) = %s\n", (_viewRegionsNormalToggle && _viewRegionsExitsToggle)? "true" : "false");
+ debugPrintf("Drawing regular regions = %s\n", _viewRegionsNormalToggle? "true" : "false");
+ debugPrintf("Drawing exit regions = %s\n", _viewRegionsExitsToggle? "true" : "false");
+ debugPrintf("Drawing screen effects = %s\n", _viewScreenEffects? "true" : "false");
+ debugPrintf("Drawing fogs = %s\n", _viewFogs? "true" : "false");
+ debugPrintf("Drawing lights = %s\n", _viewLights? "true" : "false");
+ debugPrintf("Drawing UI elements = %s\n", _viewUI? "true" : "false");
+ debugPrintf("Drawing all waypoints (regular, cover, flee) = %s\n", (_viewWaypointsNormalToggle && _viewWaypointsFleeToggle && _viewWaypointsCoverToggle)? "true" : "false");
+ debugPrintf("Drawing regular waypoints = %s\n", _viewWaypointsNormalToggle? "true" : "false");
+ debugPrintf("Drawing flee waypoints = %s\n", _viewWaypointsFleeToggle? "true" : "false");
+ debugPrintf("Drawing cover waypoints = %s\n", _viewWaypointsCoverToggle? "true" : "false");
+ debugPrintf("Drawing walkboxes = %s\n", _viewWalkboxes? "true" : "false");
+ debugPrintf("Drawing Z buffer = %s\n", _viewZBuffer? "true" : "false");
+ } else {
+ invalidSyntax = true;
+ }
+
+ if (!invalidSyntax) {
+ if (dbgDrawnObj.type != debuggerObjTypeUndefined) {
+ toggleObjectInDbgDrawList(dbgDrawnObj);
+ }
+ updateTogglesForDbgDrawListInCurrentSetAndScene();
+ }
}
- Common::String arg = argv[1];
- if (arg == "act") {
- _viewSceneObjects = !_viewSceneObjects;
- _viewActorsOnly = _viewSceneObjects;
- debugPrintf("Drawing actors = %i\n", _viewSceneObjects);
- } else if (arg == "eff") {
- _viewScreenEffects = !_viewScreenEffects;
- debugPrintf("Drawing screen effects = %i\n", _viewScreenEffects);
- } else if (arg == "fog") {
- _viewFogs = !_viewFogs;
- debugPrintf("Drawing fogs = %i\n", _viewFogs);
- } else if (arg == "lit") {
- _viewLights = !_viewLights;
- debugPrintf("Drawing lights = %i\n", _viewLights);
- } else if (arg == "reg") {
- _viewRegions = !_viewRegions;
- debugPrintf("Drawing regions = %i\n", _viewRegions);
- }else if (arg == "obj") {
- _viewSceneObjects = !_viewSceneObjects;
- debugPrintf("Drawing scene objects = %i\n", _viewSceneObjects);
- } else if (arg == "obstacles") {
- _viewObstacles = !_viewObstacles;
- debugPrintf("Drawing obstacles = %i\n", _viewObstacles);
- } else if (arg == "ui") {
- _viewUI = !_viewUI;
- debugPrintf("Drawing UI elements = %i\n", _viewUI);
- } else if (arg == "way") {
- _viewWaypoints = !_viewWaypoints;
- debugPrintf("Drawing waypoints = %i\n", _viewWaypoints);
- } else if (arg == "walk") {
- _viewWalkboxes = !_viewWalkboxes;
- debugPrintf("Drawing walk boxes = %i\n", _viewWalkboxes);
- } else if (arg == "zbuf") {
- _viewZBuffer = !_viewZBuffer;
- debugPrintf("Drawing Z buffer = %i\n", _viewZBuffer);
- } else if (arg == "reset") {
- _viewActorsOnly = false;
- _viewScreenEffects = false;
- _viewFogs = false;
- _viewLights = false;
- _viewObstacles = false;
- _viewRegions = false;
- _viewSceneObjects = false;
- _viewUI = false;
- _viewWaypoints = false;
- _viewWalkboxes = false;
- _viewZBuffer = false;
-
- debugPrintf("Drawing screen effects = %i\n", _viewScreenEffects);
- debugPrintf("Drawing fogs = %i\n", _viewFogs);
- debugPrintf("Drawing lights = %i\n", _viewLights);
- debugPrintf("Drawing obstacles = %i\n", _viewObstacles);
- debugPrintf("Drawing regions = %i\n", _viewRegions);
- debugPrintf("Drawing scene objects = %i\n", _viewSceneObjects);
- debugPrintf("Drawing UI elements = %i\n", _viewUI);
- debugPrintf("Drawing waypoints = %i\n", _viewWaypoints);
- debugPrintf("Drawing walkboxes = %i\n", _viewWalkboxes);
- debugPrintf("Drawing Z buffer = %i\n", _viewZBuffer);
- }
-
- _isDebuggerOverlay = _viewSceneObjects | _viewScreenEffects | _viewRegions | _viewLights | _viewFogs | _viewWaypoints | _viewWalkboxes;
+ if (invalidSyntax) {
+ debugPrintf("Enables debug rendering of actors, screen effect, fogs, lights, scene objects\nobstacles, regions, ui elements, walk boxes, waypoints, zbuffer or disables debug rendering.\n");
+ debugPrintf("Usage 1: %s (allobj | obstacles | allreg | ui | allway | zbuf | reset)\n", argv[0]);
+ debugPrintf("Usage 2a: %s (act | obj | item | regnorm | regexit | waynorm | wayflee | waycov) [<id>]\n", argv[0]);
+ debugPrintf("Usage 2b: %s (eff | fog | lit | walk) [<id>]\n", argv[0]);
+ }
return true;
}
@@ -1506,6 +1674,51 @@ bool Debugger::cmdRegion(int argc, const char **argv) {
return true;
}
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+bool Debugger::cmdEffect(int argc, const char **argv) {
+ bool invalidSyntax = false;
+
+ if (argc != 3) {
+ invalidSyntax = true;
+ } else {
+ int effectId = atoi(argv[2]);
+ Common::String modeName = argv[1];
+ modeName.toLowercase();
+
+ if (modeName == "list") {
+ if (effectId >= 0 && effectId < (int)_vm->_screenEffects->_entries.size()) {
+ ScreenEffects::Entry &entry = _vm->_screenEffects->_entries[effectId];
+ debugPrintf("%2d. Effect (h: %d, x: %d, y: %d, z: %d\n", effectId, (int)entry.height, (int)entry.x, (int)entry.y, (int)entry.z);
+ } else {
+ debugPrintf("There is no such effect in the scene!\n");
+ }
+ } else if (modeName == "skip") {
+ if (effectId >= 0 && effectId < (int)_vm->_screenEffects->_entries.size()) {
+ _vm->_screenEffects->toggleEntry(effectId, true);
+ debugPrintf("Skipped effect %2d\n", effectId);
+ } else {
+ debugPrintf("There is no such effect to remove in the scene!\n");
+ }
+ } else if (modeName == "restore") {
+ if (effectId >= 0 && effectId < (int)_vm->_screenEffects->kMaxEffectsInScene) {
+ _vm->_screenEffects->toggleEntry(effectId, false);
+ debugPrintf("Attempting to restored effect %2d\n", effectId);
+ }
+ } else {
+ invalidSyntax = true;
+ }
+ }
+
+ if (invalidSyntax) {
+ debugPrintf("List properties or skip/restore a screen-effect obj in the current scene\n");
+ debugPrintf("Usage 1: %s list <id>\n", argv[0]);
+ debugPrintf("Usage 2: %s (skip | restore) <id>\n", argv[0]);
+ }
+ return true;
+}
+#endif // BLADERUNNER_ORIGINAL_BUGS
+
/**
* Toggle playing a full VK session (full) and showing current test statistics as subtitles
* Only available in VK mode
@@ -1673,7 +1886,7 @@ bool Debugger::cmdList(int argc, const char **argv) {
}
}
debugPrintf("%d objects were found in scene.\n", count);
- } else if (arg == "items") {
+ } else if (arg == "item") {
debugPrintf("Listing scene items: \n");
int count = 0;
for (int i = 0; i < _vm->_sceneObjects->_count; i++) {
@@ -1737,7 +1950,7 @@ bool Debugger::cmdList(int argc, const char **argv) {
char waypointText[40];
Vector3 a = waypoint->position;
sprintf(waypointText, "Waypoint %i, Pos(%02.2f,%02.2f,%02.2f)", i, a.x, a.y, a.z);
- debugPrintf("%02d. %s\n", count, waypointText);
+ debugPrintf("%s\n", waypointText);
++count;
}
@@ -1750,7 +1963,7 @@ bool Debugger::cmdList(int argc, const char **argv) {
char coverText[40];
Vector3 a = cover->position;
sprintf(coverText, "Cover %i, Pos(%02.2f,%02.2f,%02.2f)", i, a.x, a.y, a.z);
- debugPrintf("%02d. %s\n", count, coverText);
+ debugPrintf("%s\n", coverText);
++count;
}
@@ -1763,7 +1976,7 @@ bool Debugger::cmdList(int argc, const char **argv) {
char fleeText[40];
Vector3 a = flee->position;
sprintf(fleeText, "Flee %i, Pos(%02.2f,%02.2f,%02.2f)", i, a.x, a.y, a.z);
- debugPrintf("%02d. %s\n", count, fleeText);
+ debugPrintf("%s\n", fleeText);
++count;
}
debugPrintf("%d waypoints were found in scene.\n", count);
@@ -1773,14 +1986,14 @@ bool Debugger::cmdList(int argc, const char **argv) {
for (int i = 0; i < _vm->_scene->_set->_walkboxCount; i++) {
Set::Walkbox *walkbox = &_vm->_scene->_set->_walkboxes[i];
- debugPrintf("%02d. Walkbox %s, vertices: %d\n", i, walkbox->name.c_str(), walkbox->vertexCount);
+ debugPrintf("%2d. Walkbox %s, vertices: %d\n", i, walkbox->name.c_str(), walkbox->vertexCount);
}
debugPrintf("%d walkboxes were found in scene.\n", _vm->_scene->_set->_walkboxCount);
} else if (arg == "fog") {
debugPrintf("Listing fogs: \n");
int count = 0;
for (Fog *fog = _vm->_scene->_set->_effects->_fogs; fog != nullptr; fog = fog->_next) {
- debugPrintf("%02d. Fog %s\n", count, fog->_name.c_str());
+ debugPrintf("%2d. Fog %s\n", count, fog->_name.c_str());
++count;
}
debugPrintf("%d fogs were found in scene.\n", count);
@@ -1789,9 +2002,17 @@ bool Debugger::cmdList(int argc, const char **argv) {
// list lights
for (int i = 0; i < (int)_vm->_lights->_lights.size(); i++) {
Light *light = _vm->_lights->_lights[i];
- debugPrintf("%02d. Light %s\n", i, light->_name.c_str());
+ debugPrintf("%2d. Light %s\n", i, light->_name.c_str());
}
debugPrintf("%d lights were found in scene.\n", (int)_vm->_lights->_lights.size());
+ } else if (arg == "eff") {
+ debugPrintf("Listing scene effects: \n");
+ // list scene effects
+ for (uint i = 0; i < _vm->_screenEffects->_entries.size(); i++) {
+ ScreenEffects::Entry &entry = _vm->_screenEffects->_entries[i];
+ debugPrintf("%2d. Effect (h: %d, x: %d, y: %d, z: %d\n", i, (int)entry.height, (int)entry.x, (int)entry.y, (int)entry.z);
+ }
+ debugPrintf("%d scene effects were found in scene.\n", (int)_vm->_screenEffects->_entries.size());
} else {
debugPrintf("Invalid item type was specified.\n");
}
@@ -1799,7 +2020,7 @@ bool Debugger::cmdList(int argc, const char **argv) {
if (invalidSyntax) {
debugPrintf("Enables debug listing of actors, scene objects, items, waypoints, regions, lights, fogs and walk-boxes.\n");
- debugPrintf("Usage 1: %s (act | obj | items | way | reg | lit | fog | walk )\n", argv[0]);
+ debugPrintf("Usage 1: %s (act | obj | item | way | reg | eff | lit | fog | walk )\n", argv[0]);
debugPrintf("Usage 2: %s act <actorId>\n", argv[0]);
}
return true;
@@ -1807,13 +2028,27 @@ bool Debugger::cmdList(int argc, const char **argv) {
void Debugger::drawDebuggerOverlay() {
- if (_viewSceneObjects) drawSceneObjects();
- if (_viewScreenEffects) drawScreenEffects();
- if (_viewLights) drawLights();
- if (_viewFogs) drawFogs();
- if (_viewRegions) drawRegions();
- if (_viewWaypoints) drawWaypoints();
- if (_viewWalkboxes) drawWalkboxes();
+
+ updateTogglesForDbgDrawListInCurrentSetAndScene();
+
+ if (_viewActorsToggle || _specificActorsDrawn
+ || _view3dObjectsToggle || _specific3dObjectsDrawn
+ || _viewItemsToggle || _specificItemsDrawn) {
+ drawSceneObjects();
+ }
+ if (_viewScreenEffects || _specificEffectsDrawn) drawScreenEffects();
+ if (_viewLights || _specificLightsDrawn) drawLights();
+ if (_viewFogs || _specificFogsDrawn) drawFogs();
+ if (_viewRegionsNormalToggle || _specificRegionNormalDrawn
+ || _viewRegionsExitsToggle || _specificRegionExitsDrawn) {
+ drawRegions();
+ }
+ if (_viewWaypointsNormalToggle || _specificWaypointNormalDrawn
+ || _viewWaypointsFleeToggle || _specificWaypointFleeDrawn
+ || _viewWaypointsCoverToggle || _specificWaypointCoverDrawn) {
+ drawWaypoints();
+ }
+ if (_viewWalkboxes || _specificWalkboxesDrawn) drawWalkboxes();
}
void Debugger::drawBBox(Vector3 start, Vector3 end, View *view, Graphics::Surface *surface, int color) {
@@ -1856,34 +2091,43 @@ void Debugger::drawSceneObjects() {
Vector3 pos = _vm->_view->calculateScreenPosition(0.5 * (a + b));
int color;
- if (_viewActorsOnly && sceneObject->type != kSceneObjectTypeActor)
- continue;
-
switch (sceneObject->type) {
case kSceneObjectTypeUnknown:
break;
case kSceneObjectTypeActor:
- color = _vm->_surfaceFront.format.RGBToColor(255, 0, 0);
- drawBBox(a, b, _vm->_view, &_vm->_surfaceFront, color);
- _vm->_surfaceFront.frameRect(sceneObject->screenRectangle, color);
- _vm->_mainFont->drawColor(_vm->_textActorNames->getText(sceneObject->id - kSceneObjectOffsetActors), _vm->_surfaceFront, pos.x, pos.y, color);
+ if ((_viewActorsToggle && !_specificActorsDrawn)
+ || findInDbgDrawList(debuggerObjTypeActor, sceneObject->id - kSceneObjectOffsetActors, -1, -1) != -1
+ ) {
+ color = _vm->_surfaceFront.format.RGBToColor(255, 0, 0);
+ drawBBox(a, b, _vm->_view, &_vm->_surfaceFront, color);
+ _vm->_surfaceFront.frameRect(sceneObject->screenRectangle, color);
+ _vm->_mainFont->drawColor(_vm->_textActorNames->getText(sceneObject->id - kSceneObjectOffsetActors), _vm->_surfaceFront, pos.x, pos.y, color);
+ }
break;
case kSceneObjectTypeItem:
- color = _vm->_surfaceFront.format.RGBToColor(0, 255, 0);
- char itemText[40];
- drawBBox(a, b, _vm->_view, &_vm->_surfaceFront, color);
- sprintf(itemText, "item %i", sceneObject->id - kSceneObjectOffsetItems);
- _vm->_surfaceFront.frameRect(sceneObject->screenRectangle, color);
- _vm->_mainFont->drawColor(itemText, _vm->_surfaceFront, pos.x, pos.y, color);
+ if ((_viewItemsToggle && !_specificItemsDrawn)
+ || findInDbgDrawList(debuggerObjTypeItem, sceneObject->id - kSceneObjectOffsetItems, _vm->_scene->getSetId(), -1) != -1
+ ) {
+ color = _vm->_surfaceFront.format.RGBToColor(0, 255, 0);
+ char itemText[40];
+ drawBBox(a, b, _vm->_view, &_vm->_surfaceFront, color);
+ sprintf(itemText, "item %i", sceneObject->id - kSceneObjectOffsetItems);
+ _vm->_surfaceFront.frameRect(sceneObject->screenRectangle, color);
+ _vm->_mainFont->drawColor(itemText, _vm->_surfaceFront, pos.x, pos.y, color);
+ }
break;
case kSceneObjectTypeObject:
- color = _vm->_surfaceFront.format.RGBToColor(127, 127, 127);
- if (sceneObject->isClickable) {
- color = _vm->_surfaceFront.format.RGBToColor(0, 255, 0);
+ if ((_view3dObjectsToggle && !_specific3dObjectsDrawn)
+ || findInDbgDrawList(debuggerObjType3dObject, sceneObject->id - kSceneObjectOffsetObjects, _vm->_scene->getSetId(), -1) != -1
+ ) {
+ color = _vm->_surfaceFront.format.RGBToColor(127, 127, 127);
+ if (sceneObject->isClickable) {
+ color = _vm->_surfaceFront.format.RGBToColor(0, 255, 0);
+ }
+ drawBBox(a, b, _vm->_view, &_vm->_surfaceFront, color);
+ _vm->_surfaceFront.frameRect(sceneObject->screenRectangle, color);
+ _vm->_mainFont->drawColor(_vm->_scene->objectGetName(sceneObject->id - kSceneObjectOffsetObjects), _vm->_surfaceFront, pos.x, pos.y, color);
}
- drawBBox(a, b, _vm->_view, &_vm->_surfaceFront, color);
- _vm->_surfaceFront.frameRect(sceneObject->screenRectangle, color);
- _vm->_mainFont->drawColor(_vm->_scene->objectGetName(sceneObject->id - kSceneObjectOffsetObjects), _vm->_surfaceFront, pos.x, pos.y, color);
break;
}
}
@@ -1893,142 +2137,184 @@ void Debugger::drawSceneObjects() {
void Debugger::drawLights() {
// draw lights
for (int i = 0; i < (int)_vm->_lights->_lights.size(); i++) {
- Light *light = _vm->_lights->_lights[i];
- Matrix4x3 m = light->_matrix;
- m = invertMatrix(m);
- Vector3 posOrigin = m * Vector3(0.0f, 0.0f, 0.0f);
- float t = posOrigin.y;
- posOrigin.y = posOrigin.z;
- posOrigin.z = -t;
+ if ((_viewLights && !_specificLightsDrawn)
+ || findInDbgDrawList(debuggerObjTypeLight, i, _vm->_scene->getSetId(), _vm->_scene->getSceneId()) != -1
+ ) {
+ Light *light = _vm->_lights->_lights[i];
+ Matrix4x3 m = light->_matrix;
+ m = invertMatrix(m);
+ Vector3 posOrigin = m * Vector3(0.0f, 0.0f, 0.0f);
+ float t = posOrigin.y;
+ posOrigin.y = posOrigin.z;
+ posOrigin.z = -t;
- Vector3 posTarget = m * Vector3(0.0f, 0.0f, -100.0f);
- t = posTarget.y;
- posTarget.y = posTarget.z;
- posTarget.z = -t;
+ Vector3 posTarget = m * Vector3(0.0f, 0.0f, -100.0f);
+ t = posTarget.y;
+ posTarget.y = posTarget.z;
+ posTarget.z = -t;
- Vector3 size = Vector3(5.0f, 5.0f, 5.0f);
- int color = _vm->_surfaceFront.format.RGBToColor(light->_color.r * 255.0f, light->_color.g * 255.0f, light->_color.b * 255.0f);
+ Vector3 size = Vector3(5.0f, 5.0f, 5.0f);
+ int color = _vm->_surfaceFront.format.RGBToColor(light->_color.r * 255.0f, light->_color.g * 255.0f, light->_color.b * 255.0f);
- drawBBox(posOrigin - size, posOrigin + size, _vm->_view, &_vm->_surfaceFront, color);
+ drawBBox(posOrigin - size, posOrigin + size, _vm->_view, &_vm->_surfaceFront, color);
- Vector3 posOriginT = _vm->_view->calculateScreenPosition(posOrigin);
- Vector3 posTargetT = _vm->_view->calculateScreenPosition(posTarget);
+ Vector3 posOriginT = _vm->_view->calculateScreenPosition(posOrigin);
+ Vector3 posTargetT = _vm->_view->calculateScreenPosition(posTarget);
- _vm->_surfaceFront.drawLine(posOriginT.x, posOriginT.y, posTargetT.x, posTargetT.y, color);
+ _vm->_surfaceFront.drawLine(posOriginT.x, posOriginT.y, posTargetT.x, posTargetT.y, color);
- _vm->_mainFont->drawColor(light->_name, _vm->_surfaceFront, posOriginT.x, posOriginT.y, color);
+ _vm->_mainFont->drawColor(light->_name, _vm->_surfaceFront, posOriginT.x, posOriginT.y, color);
+ }
}
}
void Debugger::drawFogs() {
- for (Fog *fog = _vm->_scene->_set->_effects->_fogs; fog != nullptr; fog = fog->_next) {
-
- // Matrix4x3 m = fog->_matrix;
- // m = invertMatrix(m);
- Matrix4x3 m = fog->_inverted;
+ Fog *fog = _vm->_scene->_set->_effects->_fogs;
+ for (int i = 0; fog != nullptr; ++i) {
+ if ((_viewFogs && !_specificFogsDrawn)
+ || findInDbgDrawList(debuggerObjTypeFog, i, _vm->_scene->getSetId(), _vm->_scene->getSceneId()) != -1
+ ) {
+ // Matrix4x3 m = fog->_matrix;
+ // m = invertMatrix(m);
+ Matrix4x3 m = fog->_inverted;
- Vector3 posOrigin = m * Vector3(0.0f, 0.0f, 0.0f);
- float t = posOrigin.y;
- posOrigin.y = posOrigin.z;
- posOrigin.z = -t;
+ Vector3 posOrigin = m * Vector3(0.0f, 0.0f, 0.0f);
+ float t = posOrigin.y;
+ posOrigin.y = posOrigin.z;
+ posOrigin.z = -t;
- Vector3 posTarget = m * Vector3(0.0f, 0.0f, -100.0f);
- t = posTarget.y;
- posTarget.y = posTarget.z;
- posTarget.z = -t;
+ Vector3 posTarget = m * Vector3(0.0f, 0.0f, -100.0f);
+ t = posTarget.y;
+ posTarget.y = posTarget.z;
+ posTarget.z = -t;
- Vector3 size = Vector3(5.0f, 5.0f, 5.0f);
- int color = _vm->_surfaceFront.format.RGBToColor(fog->_fogColor.r * 255.0f, fog->_fogColor.g * 255.0f, fog->_fogColor.b * 255.0f);
+ Vector3 size = Vector3(5.0f, 5.0f, 5.0f);
+ int color = _vm->_surfaceFront.format.RGBToColor(fog->_fogColor.r * 255.0f, fog->_fogColor.g * 255.0f, fog->_fogColor.b * 255.0f);
- drawBBox(posOrigin - size, posOrigin + size, _vm->_view, &_vm->_surfaceFront, color);
+ drawBBox(posOrigin - size, posOrigin + size, _vm->_view, &_vm->_surfaceFront, color);
- Vector3 posOriginT = _vm->_view->calculateScreenPosition(posOrigin);
- Vector3 posTargetT = _vm->_view->calculateScreenPosition(posTarget);
+ Vector3 posOriginT = _vm->_view->calculateScreenPosition(posOrigin);
+ Vector3 posTargetT = _vm->_view->calculateScreenPosition(posTarget);
- // TODO: draw line only for cone fogs, draw boxes or circles for the other types
- _vm->_surfaceFront.drawLine(posOriginT.x, posOriginT.y, posTargetT.x, posTargetT.y, color);
+ // TODO: draw line only for cone fogs, draw boxes or circles for the other types
+ _vm->_surfaceFront.drawLine(posOriginT.x, posOriginT.y, posTargetT.x, posTargetT.y, color);
- _vm->_mainFont->drawColor(fog->_name, _vm->_surfaceFront, posOriginT.x, posOriginT.y, color);
+ _vm->_mainFont->drawColor(fog->_name, _vm->_surfaceFront, posOriginT.x, posOriginT.y, color);
+ }
+ fog = fog->_next;
}
}
void Debugger::drawRegions() {
- //draw regions
- for (int i = 0; i < 10; i++) {
- Regions::Region *region = &_vm->_scene->_regions->_regions[i];
- if (!region->present) continue;
- _vm->_surfaceFront.frameRect(region->rectangle, _vm->_surfaceFront.format.RGBToColor(0, 0, 255));
+ if (_viewRegionsNormalToggle || _specificRegionNormalDrawn) {
+ //draw regions
+ for (int i = 0; i < 10; i++) {
+ Regions::Region *region = &_vm->_scene->_regions->_regions[i];
+ if (!region->present) continue;
+ if ((_viewRegionsNormalToggle && !_specificRegionNormalDrawn)
+ || findInDbgDrawList(debuggerObjTypeRegionNormal, i, _vm->_scene->getSetId(), _vm->_scene->getSceneId()) != -1
+ ) {
+ _vm->_surfaceFront.frameRect(region->rectangle, _vm->_surfaceFront.format.RGBToColor(0, 0, 255));
+ }
+ }
}
- //draw exits
- for (int i = 0; i < 10; i++) {
- Regions::Region *region = &_vm->_scene->_exits->_regions[i];
- if (!region->present) continue;
- _vm->_surfaceFront.frameRect(region->rectangle, _vm->_surfaceFront.format.RGBToColor(255, 255, 255));
+ if (_viewRegionsExitsToggle || _specificRegionExitsDrawn) {
+ //draw exits
+ for (int i = 0; i < 10; i++) {
+ Regions::Region *region = &_vm->_scene->_exits->_regions[i];
+ if (!region->present) continue;
+ if ((_viewRegionsExitsToggle && !_specificRegionExitsDrawn)
+ || findInDbgDrawList(debuggerObjTypeRegionExit, i, _vm->_scene->getSetId(), _vm->_scene->getSceneId()) != -1
+ ) {
+ _vm->_surfaceFront.frameRect(region->rectangle, _vm->_surfaceFront.format.RGBToColor(255, 255, 255));
+ }
+ }
}
}
void Debugger::drawWaypoints() {
- //draw world waypoints
- for (int i = 0; i < _vm->_waypoints->_count; i++) {
- Waypoints::Waypoint *waypoint = &_vm->_waypoints->_waypoints[i];
- if(waypoint->setId != _vm->_scene->getSetId()) {
- continue;
+ if (_viewWaypointsNormalToggle || _specificWaypointNormalDrawn) {
+ //draw world waypoints
+ for (int i = 0; i < _vm->_waypoints->_count; i++) {
+ Waypoints::Waypoint *waypoint = &_vm->_waypoints->_waypoints[i];
+ if(waypoint->setId != _vm->_scene->getSetId()) {
+ continue;
+ }
+ if ((_viewWaypointsNormalToggle && !_specificWaypointNormalDrawn)
+ || findInDbgDrawList(debuggerObjTypeWaypointNorm, i, -1, -1) != -1
+ ) {
+ Vector3 pos = waypoint->position;
+ Vector3 size = Vector3(3.0f, 3.0f, 3.0f);
+ int color = _vm->_surfaceFront.format.RGBToColor(255, 255, 255);
+ drawBBox(pos - size, pos + size, _vm->_view, &_vm->_surfaceFront, color);
+ Vector3 spos = _vm->_view->calculateScreenPosition(pos);
+ char waypointText[40];
+ sprintf(waypointText, "waypoint %i", i);
+ _vm->_mainFont->drawColor(waypointText, _vm->_surfaceFront, spos.x, spos.y, color);
+ }
}
- Vector3 pos = waypoint->position;
- Vector3 size = Vector3(3.0f, 3.0f, 3.0f);
- int color = _vm->_surfaceFront.format.RGBToColor(255, 255, 255);
- drawBBox(pos - size, pos + size, _vm->_view, &_vm->_surfaceFront, color);
- Vector3 spos = _vm->_view->calculateScreenPosition(pos);
- char waypointText[40];
- sprintf(waypointText, "waypoint %i", i);
- _vm->_mainFont->drawColor(waypointText, _vm->_surfaceFront, spos.x, spos.y, color);
- }
-
- //draw combat cover waypoints
- for (int i = 0; i < (int)_vm->_combat->_coverWaypoints.size(); i++) {
- Combat::CoverWaypoint *cover = &_vm->_combat->_coverWaypoints[i];
- if (cover->setId != _vm->_scene->getSetId()) {
- continue;
+ }
+
+ if (_viewWaypointsCoverToggle || _specificWaypointCoverDrawn) {
+ //draw combat cover waypoints
+ for (int i = 0; i < (int)_vm->_combat->_coverWaypoints.size(); i++) {
+ Combat::CoverWaypoint *cover = &_vm->_combat->_coverWaypoints[i];
+ if (cover->setId != _vm->_scene->getSetId()) {
+ continue;
+ }
+ if ((_viewWaypointsCoverToggle && !_specificWaypointCoverDrawn)
+ || findInDbgDrawList(debuggerObjTypeWaypointCover, i, -1, -1) != -1
+ ) {
+ Vector3 pos = cover->position;
+ Vector3 size = Vector3(3.0f, 3.0f, 3.0f);
+ int color = _vm->_surfaceFront.format.RGBToColor(255, 0, 255);
+ drawBBox(pos - size, pos + size, _vm->_view, &_vm->_surfaceFront, color);
+ Vector3 spos = _vm->_view->calculateScreenPosition(pos);
+ char coverText[40];
+ sprintf(coverText, "cover %i", i);
+ _vm->_mainFont->drawColor(coverText, _vm->_surfaceFront, spos.x, spos.y, color);
+ }
}
- Vector3 pos = cover->position;
- Vector3 size = Vector3(3.0f, 3.0f, 3.0f);
- int color = _vm->_surfaceFront.format.RGBToColor(255, 0, 255);
- drawBBox(pos - size, pos + size, _vm->_view, &_vm->_surfaceFront, color);
- Vector3 spos = _vm->_view->calculateScreenPosition(pos);
- char coverText[40];
- sprintf(coverText, "cover %i", i);
- _vm->_mainFont->drawColor(coverText, _vm->_surfaceFront, spos.x, spos.y, color);
- }
-
- //draw combat flee waypoints
- for (int i = 0; i < (int)_vm->_combat->_fleeWaypoints.size(); i++) {
- Combat::FleeWaypoint *flee = &_vm->_combat->_fleeWaypoints[i];
- if (flee->setId != _vm->_scene->getSetId()) {
- continue;
+ }
+
+ if (_viewWaypointsFleeToggle || _specificWaypointFleeDrawn) {
+ //draw combat flee waypoints
+ for (int i = 0; i < (int)_vm->_combat->_fleeWaypoints.size(); i++) {
+ Combat::FleeWaypoint *flee = &_vm->_combat->_fleeWaypoints[i];
+ if (flee->setId != _vm->_scene->getSetId()) {
+ continue;
+ }
+ if ((_viewWaypointsFleeToggle && !_specificWaypointFleeDrawn)
+ || findInDbgDrawList(debuggerObjTypeWaypoingFlee, i, -1, -1) != -1
+ ) {
+ Vector3 pos = flee->position;
+ Vector3 size = Vector3(3.0f, 3.0f, 3.0f);
+ int color = _vm->_surfaceFront.format.RGBToColor(0, 255, 255);
+ drawBBox(pos - size, pos + size, _vm->_view, &_vm->_surfaceFront, color);
+ Vector3 spos = _vm->_view->calculateScreenPosition(pos);
+ char fleeText[40];
+ sprintf(fleeText, "flee %i", i);
+ _vm->_mainFont->drawColor(fleeText, _vm->_surfaceFront, spos.x, spos.y, color);
+ }
}
- Vector3 pos = flee->position;
- Vector3 size = Vector3(3.0f, 3.0f, 3.0f);
- int color = _vm->_surfaceFront.format.RGBToColor(0, 255, 255);
- drawBBox(pos - size, pos + size, _vm->_view, &_vm->_surfaceFront, color);
- Vector3 spos = _vm->_view->calculateScreenPosition(pos);
- char fleeText[40];
- sprintf(fleeText, "flee %i", i);
- _vm->_mainFont->drawColor(fleeText, _vm->_surfaceFront, spos.x, spos.y, color);
}
}
void Debugger::drawWalkboxes() {
//draw walkboxes
for (int i = 0; i < _vm->_scene->_set->_walkboxCount; i++) {
- Set::Walkbox *walkbox = &_vm->_scene->_set->_walkboxes[i];
-
- for (int j = 0; j < walkbox->vertexCount; j++) {
- Vector3 start = _vm->_view->calculateScreenPosition(walkbox->vertices[j]);
- Vector3 end = _vm->_view->calculateScreenPosition(walkbox->vertices[(j + 1) % walkbox->vertexCount]);
- _vm->_surfaceFront.drawLine(start.x, start.y, end.x, end.y, _vm->_surfaceFront.format.RGBToColor(255, 255, 0));
- Vector3 pos = _vm->_view->calculateScreenPosition(0.5 * (walkbox->vertices[j] + walkbox->vertices[(j + 1) % walkbox->vertexCount]));
- _vm->_mainFont->drawColor(walkbox->name, _vm->_surfaceFront, pos.x, pos.y, _vm->_surfaceFront.format.RGBToColor(255, 255, 0));
+ if ((_viewWalkboxes && !_specificWalkboxesDrawn)
+ || findInDbgDrawList(debuggerObjTypeWalkbox, i, _vm->_scene->getSetId(), _vm->_scene->getSceneId()) != -1
+ ) {
+ Set::Walkbox *walkbox = &_vm->_scene->_set->_walkboxes[i];
+ for (int j = 0; j < walkbox->vertexCount; j++) {
+ Vector3 start = _vm->_view->calculateScreenPosition(walkbox->vertices[j]);
+ Vector3 end = _vm->_view->calculateScreenPosition(walkbox->vertices[(j + 1) % walkbox->vertexCount]);
+ _vm->_surfaceFront.drawLine(start.x, start.y, end.x, end.y, _vm->_surfaceFront.format.RGBToColor(255, 255, 0));
+ Vector3 pos = _vm->_view->calculateScreenPosition(0.5 * (walkbox->vertices[j] + walkbox->vertices[(j + 1) % walkbox->vertexCount]));
+ _vm->_mainFont->drawColor(walkbox->name, _vm->_surfaceFront, pos.x, pos.y, _vm->_surfaceFront.format.RGBToColor(255, 255, 0));
+ }
}
}
}
@@ -2036,23 +2322,161 @@ void Debugger::drawWalkboxes() {
void Debugger::drawScreenEffects() {
//draw aesc
for (uint i = 0; i < _vm->_screenEffects->_entries.size(); i++) {
- ScreenEffects::Entry &entry = _vm->_screenEffects->_entries[i];
- int j = 0;
- for (int y = 0; y < entry.height; y++) {
- for (int x = 0; x < entry.width; x++) {
- Common::Rect r((entry.x + x) * 2, (entry.y + y) * 2, (entry.x + x) * 2 + 2, (entry.y + y) * 2 + 2);
-
- int ec = entry.data[j++];
- const int bladeToScummVmConstant = 256 / 16;
-
- int color = _vm->_surfaceFront.format.RGBToColor(
- CLIP(entry.palette[ec].r * bladeToScummVmConstant, 0, 255),
- CLIP(entry.palette[ec].g * bladeToScummVmConstant, 0, 255),
- CLIP(entry.palette[ec].b * bladeToScummVmConstant, 0, 255));
- _vm->_surfaceFront.fillRect(r, color);
+ if ((_viewScreenEffects && !_specificEffectsDrawn)
+ || findInDbgDrawList(debuggerObjTypeEffect, i, _vm->_scene->getSetId(), _vm->_scene->getSceneId()) != -1
+ ) {
+ ScreenEffects::Entry &entry = _vm->_screenEffects->_entries[i];
+ int j = 0;
+ for (int y = 0; y < entry.height; y++) {
+ for (int x = 0; x < entry.width; x++) {
+ Common::Rect r((entry.x + x) * 2, (entry.y + y) * 2, (entry.x + x) * 2 + 2, (entry.y + y) * 2 + 2);
+
+ int ec = entry.data[j++];
+ const int bladeToScummVmConstant = 256 / 16;
+
+ int color = _vm->_surfaceFront.format.RGBToColor(
+ CLIP(entry.palette[ec].r * bladeToScummVmConstant, 0, 255),
+ CLIP(entry.palette[ec].g * bladeToScummVmConstant, 0, 255),
+ CLIP(entry.palette[ec].b * bladeToScummVmConstant, 0, 255));
+ _vm->_surfaceFront.fillRect(r, color);
+ }
+ }
+ }
+ }
+}
+
+void Debugger::toggleObjectInDbgDrawList(DebuggerDrawnObject &drObj) {
+ if (drObj.type == debuggerObjTypeUndefined || drObj.objId < 0) {
+ return;
+ }
+
+ // Check if there already exists such object in the list:
+ // if it exists then do a remove action
+ // else do a push_back action (provided that size() < kMaxSpecificObjectsDrawnCount)
+ int foundAt = findInDbgDrawList(drObj.type, drObj.objId, drObj.setId, drObj.sceneId);
+
+ if (foundAt >= 0) {
+ _specificDrawnObjectsList.remove_at(foundAt);
+ } else {
+ if (_specificDrawnObjectsList.size() < kMaxSpecificObjectsDrawnCount) {
+ // TODO check if there actually is an object of such an ID in the current scene!
+ _specificDrawnObjectsList.push_back(drObj);
+ } else {
+ debugPrintf("The specific drawn objects list is full. Try running a draw reset or explicitly removing objects from it\n");
+ }
+ }
+}
+
+/**
+* drObjType can be a valid object type, or debuggerObjTypeUndefined as a wildcard for all object types
+* drObjId can be a valid object id or -1 as a wildcard
+* drObjSetId can be a valid Set id or -1 as a wildcard
+* drObjSceneId can be a valid Scene id or -1 as a wildcard
+* return the position in the list, if the specific drawn objects list contains the object of the specified type and id
+* and it belongs to the current set and scene,
+* or -1 otherwise
+*/
+int Debugger::findInDbgDrawList(DebuggerDrawnObjectType drObjType, int drObjId, int drObjSetId, int drObjSceneId) {
+ if (_specificDrawnObjectsList.empty()) {
+ return -1;
+ }
+
+ for (int i = 0; i < (int) _specificDrawnObjectsList.size(); ++i) {
+ if ((drObjType == debuggerObjTypeUndefined || drObjType == _specificDrawnObjectsList[i].type)
+ && (drObjId == -1 || drObjId == _specificDrawnObjectsList[i].objId)
+ && (drObjSetId == -1 || _specificDrawnObjectsList[i].setId == -1 || drObjSetId == _specificDrawnObjectsList[i].setId)
+ && (drObjSceneId == -1 || _specificDrawnObjectsList[i].sceneId == -1 || drObjSceneId == _specificDrawnObjectsList[i].sceneId)
+ ){
+ // TODO for actors, 3d objects, items and waypoints it's probably preferable to ignore the sceneId (?)
+ return i;
+ }
+ }
+ return -1;
+}
+
+void Debugger::updateTogglesForDbgDrawListInCurrentSetAndScene() {
+ _specificActorsDrawn = false;
+ _specific3dObjectsDrawn = false;
+ _specificItemsDrawn = false;
+ _specificEffectsDrawn = false;
+ _specificLightsDrawn = false;
+ _specificFogsDrawn = false;
+ _specificRegionNormalDrawn = false;
+ _specificRegionExitsDrawn = false;
+ _specificWaypointNormalDrawn = false;
+ _specificWaypointFleeDrawn = false;
+ _specificWaypointCoverDrawn = false;
+ _specificWalkboxesDrawn = false;
+ for (int i = 0; i < (int) _specificDrawnObjectsList.size(); ++i) {
+ if ((_specificDrawnObjectsList[i].sceneId == -1 || _specificDrawnObjectsList[i].sceneId == _vm->_scene->getSceneId() )
+ && (_specificDrawnObjectsList[i].setId == -1 || _specificDrawnObjectsList[i].setId == _vm->_scene->getSetId())
+ ) {
+ switch (_specificDrawnObjectsList[i].type) {
+ case debuggerObjTypeActor:
+ _specificActorsDrawn = true;
+ _viewActorsToggle = false;
+ break;
+ case debuggerObjType3dObject:
+ _specific3dObjectsDrawn = true;
+ _view3dObjectsToggle = false;
+ break;
+ case debuggerObjTypeItem:
+ _specificItemsDrawn = true;
+ _viewItemsToggle = false;
+ break;
+ case debuggerObjTypeRegionNormal:
+ _specificRegionNormalDrawn = true;
+ _viewRegionsNormalToggle = false;
+ break;
+ case debuggerObjTypeRegionExit:
+ _specificRegionExitsDrawn = true;
+ _viewRegionsExitsToggle = false;
+ break;
+ case debuggerObjTypeWaypointNorm:
+ _specificWaypointNormalDrawn = true;
+ _viewWaypointsNormalToggle = false;
+ break;
+ case debuggerObjTypeWaypoingFlee:
+ _specificWaypointFleeDrawn = true;
+ _viewWaypointsFleeToggle = false;
+ break;
+ case debuggerObjTypeWaypointCover:
+ _specificWaypointCoverDrawn = true;
+ _viewWaypointsCoverToggle = false;
+ break;
+ case debuggerObjTypeWalkbox:
+ _specificWalkboxesDrawn = true;
+ _viewWalkboxes = false;
+ break;
+ case debuggerObjTypeEffect:
+ _specificEffectsDrawn = true;
+ _viewScreenEffects = false;
+ break;
+ case debuggerObjTypeLight:
+ _specificLightsDrawn = true;
+ _viewLights = false;
+ break;
+ case debuggerObjTypeFog:
+ _specificFogsDrawn = true;
+ _viewFogs = false;
+ break;
+ default:
+ break;
}
}
}
+ _isDebuggerOverlay = _viewActorsToggle || _specificActorsDrawn
+ || _view3dObjectsToggle || _specific3dObjectsDrawn
+ || _viewItemsToggle || _specificItemsDrawn
+ || _viewRegionsNormalToggle || _specificRegionNormalDrawn
+ || _viewRegionsExitsToggle || _specificRegionExitsDrawn
+ || _viewScreenEffects || _specificEffectsDrawn
+ || _viewLights || _specificLightsDrawn
+ || _viewFogs || _specificFogsDrawn
+ || _viewWaypointsNormalToggle || _specificWaypointNormalDrawn
+ || _viewWaypointsFleeToggle || _specificWaypointFleeDrawn
+ || _viewWaypointsCoverToggle || _specificWaypointCoverDrawn
+ || _viewWalkboxes || _specificWalkboxesDrawn;
}
} // End of namespace BladeRunner