aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/bladerunner/actor.cpp12
-rw-r--r--engines/bladerunner/actor_walk.cpp14
-rw-r--r--engines/bladerunner/actor_walk.h2
-rw-r--r--engines/bladerunner/bladerunner.cpp2
-rw-r--r--engines/bladerunner/ui/kia_section_load.cpp6
5 files changed, 30 insertions, 6 deletions
diff --git a/engines/bladerunner/actor.cpp b/engines/bladerunner/actor.cpp
index a686722c8b..198762738f 100644
--- a/engines/bladerunner/actor.cpp
+++ b/engines/bladerunner/actor.cpp
@@ -137,6 +137,18 @@ void Actor::setup(int actorId) {
for (int i = 0; i != actorCount; ++i)
_friendlinessToOther[i] = 50;
+#if BLADERUNNER_ORIGINAL_BUGS
+#else
+ // if player actor was not idle and had an active _walkInfo then
+ // upon starting a new game, the player actpr wpi;d be put on the old _walkInfo
+ _walkInfo->reset();
+// // delete _walkInfo and re-allocate it (a reset method would probably be better)
+// if (_walkInfo != nullptr) {
+// delete(_walkInfo);
+// }
+// _walkInfo = new ActorWalk(_vm);
+#endif // BLADERUNNER_ORIGINAL_BUGS
+
_combatInfo->setup();
_clues->removeAll();
_movementTrack->flush();
diff --git a/engines/bladerunner/actor_walk.cpp b/engines/bladerunner/actor_walk.cpp
index f9abf6dc15..daa28b6350 100644
--- a/engines/bladerunner/actor_walk.cpp
+++ b/engines/bladerunner/actor_walk.cpp
@@ -38,16 +38,26 @@ namespace BladeRunner {
ActorWalk::ActorWalk(BladeRunnerEngine *vm) {
_vm = vm;
+ reset();
+}
+
+ActorWalk::~ActorWalk() {}
+
+// added method for bug fix (bad new game state for player actor) and better management of object
+void ActorWalk::reset() {
_walking = false;
_running = false;
_facing = -1;
_status = 0;
+ _destination = Vector3(0.0f, 0.0f, 0.0f);
+ _originalDestination = Vector3(0.0f, 0.0f, 0.0f);
+ _current = Vector3(0.0f, 0.0f, 0.0f);
+ _next = Vector3(0.0f, 0.0f, 0.0f);
+
_nearActors.clear();
}
-ActorWalk::~ActorWalk() {}
-
bool ActorWalk::setup(int actorId, bool runFlag, const Vector3 &from, const Vector3 &to, bool mustReach, bool *arrived) {
Vector3 next;
diff --git a/engines/bladerunner/actor_walk.h b/engines/bladerunner/actor_walk.h
index c0cdd937c0..fb3bd2f63e 100644
--- a/engines/bladerunner/actor_walk.h
+++ b/engines/bladerunner/actor_walk.h
@@ -49,6 +49,8 @@ public:
ActorWalk(BladeRunnerEngine *vm);
~ActorWalk();
+ void reset(); // added method for bug fix (bad new game state for player actor) and better management of object
+
bool setup(int actorId, bool runFlag, const Vector3 &from, const Vector3 &to, bool mustReach, bool *arrived);
void getCurrentPosition(int actorId, Vector3 *pos, int *facing) const;
bool tick(int actorId, float stepDistance, bool flag);
diff --git a/engines/bladerunner/bladerunner.cpp b/engines/bladerunner/bladerunner.cpp
index 794be44bb3..3d2a649dbc 100644
--- a/engines/bladerunner/bladerunner.cpp
+++ b/engines/bladerunner/bladerunner.cpp
@@ -325,7 +325,7 @@ Common::Error BladeRunnerEngine::run() {
}
// TODO: why is game starting new game here when everything is done in startup?
// else {
- // newGame(1);
+ // newGame(kGameDifficultyMedium);
// }
gameLoop();
diff --git a/engines/bladerunner/ui/kia_section_load.cpp b/engines/bladerunner/ui/kia_section_load.cpp
index dac7bebb64..909f29b2b9 100644
--- a/engines/bladerunner/ui/kia_section_load.cpp
+++ b/engines/bladerunner/ui/kia_section_load.cpp
@@ -162,11 +162,11 @@ void KIASectionLoad::scrollBoxCallback(void *callbackData, void *source, int lin
if (mouseButton == 0 && source == self->_scrollBox && lineData >= 0) {
if (lineData == self->_newGameEasyLineId) {
- self->_vm->newGame(0);
+ self->_vm->newGame(kGameDifficultyEasy);
} else if (lineData == self->_newGameMediumLineId) {
- self->_vm->newGame(1);
+ self->_vm->newGame(kGameDifficultyMedium);
} else if (lineData == self->_newGameHardLineId) {
- self->_vm->newGame(2);
+ self->_vm->newGame(kGameDifficultyHard);
} else {
self->_vm->loadGameState(self->_saveList[lineData].getSaveSlot());
}