[Scummvm-git-logs] scummvm master -> 3e9b986e3d462d9f330d8e1ffa0630e2ae3991b3
a-yyg
76591232+a-yyg at users.noreply.github.com
Mon Jul 19 12:53:10 UTC 2021
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
016d69e418 SAGA2: Fix null target access in task.cpp
d3c4bdbf15 SAGA2: Add debug commands
6f14ea793e SAGA2: Implement show position debug command
3e9b986e3d SAGA2: Implement goto map features
Commit: 016d69e4182c660287c36438e894782e724c7b43
https://github.com/scummvm/scummvm/commit/016d69e4182c660287c36438e894782e724c7b43
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-07-19T21:51:20+09:00
Commit Message:
SAGA2: Fix null target access in task.cpp
Changed paths:
engines/saga2/task.cpp
diff --git a/engines/saga2/task.cpp b/engines/saga2/task.cpp
index 2f95a3855c..40c462fefd 100644
--- a/engines/saga2/task.cpp
+++ b/engines/saga2/task.cpp
@@ -3034,7 +3034,7 @@ void HuntToKillTask::evaluateTarget(void) {
Actor *a = stack->getActor();
if (flags & evalWeapon
- && a->isInterruptable()) {
+ && a->isInterruptable() && currentTarget != NULL) {
evaluateWeapon();
flags &= ~evalWeapon;
}
Commit: d3c4bdbf15c5426355a758f74272f94f16f2e65a
https://github.com/scummvm/scummvm/commit/d3c4bdbf15c5426355a758f74272f94f16f2e65a
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-07-19T21:51:20+09:00
Commit Message:
SAGA2: Add debug commands
Changed paths:
engines/saga2/console.cpp
engines/saga2/console.h
engines/saga2/objects.cpp
engines/saga2/objects.h
engines/saga2/sagafunc.cpp
diff --git a/engines/saga2/console.cpp b/engines/saga2/console.cpp
index 33a1a70f0c..26eddc199d 100644
--- a/engines/saga2/console.cpp
+++ b/engines/saga2/console.cpp
@@ -31,7 +31,15 @@ namespace Saga2 {
Console::Console(Saga2Engine *vm) : GUI::Debugger() {
_vm = vm;
- registerCmd("killprotag", WRAP_METHOD(Console, cmdKillProtag));
+ registerCmd("kill_protag", WRAP_METHOD(Console, cmdKillProtag));
+
+ registerCmd("kill", WRAP_METHOD(Console, cmdKill));
+
+ registerCmd("godmode", WRAP_METHOD(Console, cmdGodmode));
+
+ registerCmd("obj_name", WRAP_METHOD(Console, cmdObjName));
+
+ registerCmd("name2id", WRAP_METHOD(Console, cmdObjNameToID));
}
Console::~Console() {
@@ -46,4 +54,55 @@ bool Console::cmdKillProtag(int argc, const char **argv) {
return true;
}
+bool Console::cmdKill(int argc, const char **argv) {
+ if (argc != 2)
+ debugPrintf("Usage: %s <Actor id>\n", argv[0]);
+ else {
+ Actor *a = (Actor *)GameObject::objectAddress(atoi(argv[1]));
+ if (a)
+ a->getStats()->vitality = 0;
+ }
+
+ return true;
+}
+
+bool Console::cmdGodmode(int argc, const char **argv) {
+ if (argc != 2)
+ debugPrintf("Usage: %s\n <1/0>\n", argv[0]);
+ else {
+ for (ObjectID id = ActorBaseID; id < ActorBaseID + kPlayerActors; ++id) {
+ Actor *a = (Actor *)GameObject::objectAddress(id);
+ a->_godmode = atoi(argv[1]);
+ }
+ }
+
+ return true;
+}
+
+bool Console::cmdObjName(int argc, const char **argv) {
+ if (argc != 2)
+ debugPrintf("Usage: %s <Object id>\n", argv[0]);
+ else {
+ GameObject *obj = GameObject::objectAddress(atoi(argv[1]));
+ if (obj)
+ debugPrintf("%s\n", obj->objName());
+ }
+
+ return true;
+}
+
+bool Console::cmdObjNameToID(int argc, const char **argv) {
+ if (argc != 2)
+ debugPrintf("Usage: %s <Name index>", argv[0]);
+ else {
+ int32 id = GameObject::nameIndexToID(atoi(argv[1]));
+ if (id == -1)
+ debugPrintf("Invalid name index!\n");
+ else
+ debugPrintf("%d\n", id);
+ }
+
+ return true;
+}
+
}
diff --git a/engines/saga2/console.h b/engines/saga2/console.h
index 5bc5004498..e45db20138 100644
--- a/engines/saga2/console.h
+++ b/engines/saga2/console.h
@@ -39,6 +39,13 @@ private:
bool cmdKillProtag(int argc, const char **argv);
+ bool cmdKill(int argc, const char **argv);
+
+ bool cmdObjName(int argc, const char **argv);
+
+ bool cmdObjNameToID(int argc, const char **argv);
+
+ bool cmdGodmode(int argc, const char **argv);
};
}
diff --git a/engines/saga2/objects.cpp b/engines/saga2/objects.cpp
index 5fca782a89..3d58fa3796 100644
--- a/engines/saga2/objects.cpp
+++ b/engines/saga2/objects.cpp
@@ -202,6 +202,8 @@ GameObject::GameObject(void) {
_data.obj = this;
_index = 0;
+
+ _godmode = false;
}
//-----------------------------------------------------------------------
@@ -227,6 +229,8 @@ GameObject::GameObject(const ResourceGameObject &res) {
_data.obj = this;
_index = 0;
+
+ _godmode = false;
}
GameObject::GameObject(Common::InSaveFile *in) {
@@ -234,6 +238,7 @@ GameObject::GameObject(Common::InSaveFile *in) {
read(in, false);
_index = 0;
+ _godmode = false;
}
void GameObject::read(Common::InSaveFile *in, bool expandProto) {
@@ -390,6 +395,34 @@ ProtoObj *GameObject::protoAddress(ObjectID id) {
return obj ? obj->prototype : nullptr ;
}
+int32 GameObject::nameIndexToID(uint16 ind) {
+ for (int i = 0; i < objectCount; ++i) {
+ if (objectList[i]._data.nameIndex == ind)
+ return objectList[i].thisID();
+
+ if (objectList[i].prototype && objectList[i].prototype->nameIndex == ind)
+ return objectList[i].thisID();
+ }
+
+ for (int i = 0; i < kActorCount; ++i) {
+ if (actorList[i]._data.nameIndex == ind)
+ return actorList[i].thisID();
+
+ if (actorList[i].prototype && actorList[i].prototype->nameIndex == ind)
+ return actorList[i].thisID();
+ }
+
+ for (int i = 0; i < worldCount; ++i) {
+ if (worldList[i]._data.nameIndex == ind)
+ return worldList[i].thisID();
+
+ if (worldList[i].prototype && worldList[i].prototype->nameIndex == ind)
+ return worldList[i].thisID();
+ }
+
+ return -1;
+}
+
uint16 GameObject::containmentSet(void) {
return prototype->containmentSet();
diff --git a/engines/saga2/objects.h b/engines/saga2/objects.h
index 0b6526faf6..1415275a93 100644
--- a/engines/saga2/objects.h
+++ b/engines/saga2/objects.h
@@ -174,6 +174,7 @@ protected:
public:
ObjectData _data;
uint _index;
+ bool _godmode;
// Default constructor
GameObject(void);
@@ -197,6 +198,8 @@ public:
// Converts object ID into prototype address...
static ProtoObj *protoAddress(ObjectID id);
+ static int32 nameIndexToID(uint16 ind);
+
// object creation and deletion
static GameObject *newObject(void); // get a newly created object
void deleteObject(void); // delete this object and remove
@@ -400,6 +403,9 @@ public:
int8 dice = 0,
uint8 sides = 1,
int8 perDieMod = 0) {
+ if (_godmode)
+ return false;
+
return prototype->acceptDamage(
thisID(),
enactor,
diff --git a/engines/saga2/sagafunc.cpp b/engines/saga2/sagafunc.cpp
index ba5e1d6778..e4f518ec27 100644
--- a/engines/saga2/sagafunc.cpp
+++ b/engines/saga2/sagafunc.cpp
@@ -1271,6 +1271,10 @@ int16 scriptActorSetVitality(int16 *args) {
OBJLOG(SetVitality);
if (isActor((GameObject *)thisThread->thisObject)) {
Actor *a = (Actor *)thisThread->thisObject;
+
+ if (a->_godmode)
+ return 0;
+
int16 &vitalityRef = a->getStats()->vitality;
int16 oldVal = vitalityRef;
PlayerActorID pID;
Commit: 6f14ea793ed75832a474d236a3cbd8f7f82f4a8b
https://github.com/scummvm/scummvm/commit/6f14ea793ed75832a474d236a3cbd8f7f82f4a8b
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-07-19T21:51:20+09:00
Commit Message:
SAGA2: Implement show position debug command
Changed paths:
engines/saga2/console.cpp
engines/saga2/console.h
engines/saga2/main.cpp
engines/saga2/saga2.cpp
engines/saga2/saga2.h
diff --git a/engines/saga2/console.cpp b/engines/saga2/console.cpp
index 26eddc199d..4ac50ca2fc 100644
--- a/engines/saga2/console.cpp
+++ b/engines/saga2/console.cpp
@@ -40,6 +40,8 @@ Console::Console(Saga2Engine *vm) : GUI::Debugger() {
registerCmd("obj_name", WRAP_METHOD(Console, cmdObjName));
registerCmd("name2id", WRAP_METHOD(Console, cmdObjNameToID));
+
+ registerCmd("position", WRAP_METHOD(Console, cmdPosition));
}
Console::~Console() {
@@ -105,4 +107,15 @@ bool Console::cmdObjNameToID(int argc, const char **argv) {
return true;
}
+bool Console::cmdPosition(int argc, const char **argv) {
+ if (argc != 2)
+ debugPrintf("Usage: %s <1/0>\n", argv[0]);
+ else {
+ bool show = atoi(argv[1]);
+ _vm->_showPosition = show;
+ }
+
+ return true;
+}
+
}
diff --git a/engines/saga2/console.h b/engines/saga2/console.h
index e45db20138..6c7011b70a 100644
--- a/engines/saga2/console.h
+++ b/engines/saga2/console.h
@@ -46,6 +46,8 @@ private:
bool cmdObjNameToID(int argc, const char **argv);
bool cmdGodmode(int argc, const char **argv);
+
+ bool cmdPosition(int argc, const char **argv);
};
}
diff --git a/engines/saga2/main.cpp b/engines/saga2/main.cpp
index e5f40a0a0c..4370c318c6 100644
--- a/engines/saga2/main.cpp
+++ b/engines/saga2/main.cpp
@@ -159,6 +159,7 @@ int16 OptionsDialog(bool disableSaveResume = false);
static void mainLoop(bool &cleanExit, int argc, char *argv[]);
void displayUpdate(void);
+void showDebugMessages();
bool initResourceHandles();
bool initDisplayPort();
@@ -352,6 +353,15 @@ void displayUpdate(void) {
// Call the asynchronous path finder
debugC(1, kDebugEventLoop, "EventLoop: pathfinder update");
runPathFinder();
+
+ showDebugMessages();
+ }
+}
+
+void showDebugMessages() {
+ if (g_vm->_showPosition) {
+ TilePoint p = centerActorCoords();
+ WriteStatusF2(0, "Position: %d, %d, %d", p.u, p.v, p.z);
}
}
@@ -707,7 +717,7 @@ bool initGUIMessagers(void) {
if (Status[i] == NULL)
return false;
sprintf(debItem, "Status%2.2d", i + 10);
- Status2[i] = new StatusLineMessager(debItem, i, &g_vm->_mainPort, 468, 21 + (11 * i));
+ Status2[i] = new StatusLineMessager(debItem, i, &g_vm->_mainPort, 20, 21 + (11 * i));
}
for (int j = 0; j < 3; j++)
ratemess[j] = new StatusLineMessager("FrameRates", j, &g_vm->_mainPort, 5, 450 + (11 * j), 500);
diff --git a/engines/saga2/saga2.cpp b/engines/saga2/saga2.cpp
index d6c0c1bbd7..81aa222c59 100644
--- a/engines/saga2/saga2.cpp
+++ b/engines/saga2/saga2.cpp
@@ -72,6 +72,7 @@ Saga2Engine::Saga2Engine(OSystem *syst)
_autoWeapon = true;
_showNight = true;
_speechText = true;
+ _showPosition = false;
SearchMan.addSubDirectoryMatching(gameDataDir, "res");
SearchMan.addSubDirectoryMatching(gameDataDir, "dos/drivers"); // For Miles Sound files
diff --git a/engines/saga2/saga2.h b/engines/saga2/saga2.h
index 0f427fb940..b4002ceec6 100644
--- a/engines/saga2/saga2.h
+++ b/engines/saga2/saga2.h
@@ -176,6 +176,8 @@ public:
bool _showNight;
bool _speechText;
+ bool _showPosition;
+
private:
Video::SmackerDecoder *_smkDecoder;
int _videoX, _videoY;
Commit: 3e9b986e3d462d9f330d8e1ffa0630e2ae3991b3
https://github.com/scummvm/scummvm/commit/3e9b986e3d462d9f330d8e1ffa0630e2ae3991b3
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-07-19T21:51:20+09:00
Commit Message:
SAGA2: Implement goto map features
Changed paths:
engines/saga2/console.cpp
engines/saga2/console.h
diff --git a/engines/saga2/console.cpp b/engines/saga2/console.cpp
index 4ac50ca2fc..5d486acf61 100644
--- a/engines/saga2/console.cpp
+++ b/engines/saga2/console.cpp
@@ -23,11 +23,14 @@
#include "saga2/saga2.h"
#include "saga2/objects.h"
#include "saga2/player.h"
+#include "saga2/mapfeatr.h"
#include "saga2/console.h"
namespace Saga2 {
+extern pCMapFeature mapFeatures[];
+
Console::Console(Saga2Engine *vm) : GUI::Debugger() {
_vm = vm;
@@ -42,6 +45,10 @@ Console::Console(Saga2Engine *vm) : GUI::Debugger() {
registerCmd("name2id", WRAP_METHOD(Console, cmdObjNameToID));
registerCmd("position", WRAP_METHOD(Console, cmdPosition));
+
+ registerCmd("teleport", WRAP_METHOD(Console, cmdTeleport));
+
+ registerCmd("goto_place", WRAP_METHOD(Console, cmdGotoPlace));
}
Console::~Console() {
@@ -118,4 +125,42 @@ bool Console::cmdPosition(int argc, const char **argv) {
return true;
}
+bool Console::cmdTeleport(int argc, const char **argv) {
+ if (argc != 4)
+ debugPrintf("Usage: %s <u> <v> <z>\n", argv[0]);
+ else {
+ int u = atoi(argv[1]);
+ int v = atoi(argv[2]);
+ int z = atoi(argv[3]);
+
+ Actor *a = getCenterActor();
+ a->setLocation(TilePoint(u, v, z));
+ }
+
+ return true;
+}
+
+bool Console::cmdGotoPlace(int argc, const char **argv) {
+ if (argc != 2)
+ debugPrintf("Usage: %s <place id>\n", argv[0]);
+ else {
+ int placeID = atoi(argv[1]);
+ int u = mapFeatures[placeID]->getU();
+ int v = mapFeatures[placeID]->getV();
+
+ Actor *a = getCenterActor();
+
+ int du = u - a->getLocation().u;
+ int dv = v - a->getLocation().v;
+
+ for (ObjectID id = ActorBaseID; id < ActorBaseID + kPlayerActors; ++id) {
+ Actor *p = (Actor *)GameObject::objectAddress(id);
+ TilePoint curLoc = p->getLocation();
+ p->setLocation(TilePoint(curLoc.u + du, curLoc.v + dv, 8));
+ }
+ }
+
+ return true;
+}
+
}
diff --git a/engines/saga2/console.h b/engines/saga2/console.h
index 6c7011b70a..3f5635021f 100644
--- a/engines/saga2/console.h
+++ b/engines/saga2/console.h
@@ -48,6 +48,10 @@ private:
bool cmdGodmode(int argc, const char **argv);
bool cmdPosition(int argc, const char **argv);
+
+ bool cmdTeleport(int argc, const char **argv);
+
+ bool cmdGotoPlace(int argc, const char **argv);
};
}
More information about the Scummvm-git-logs
mailing list