aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorEugene Sandulenko2018-03-09 22:49:21 +0100
committerEugene Sandulenko2018-03-09 22:49:43 +0100
commit3286d4f90064cd6fef8becfc669acd872dac1f0c (patch)
tree0b0933f6824b6ada30ba2e42b8612e60a0f8e23c /engines
parent58040847b9c1ae313b389e616e993bd8c76f3292 (diff)
downloadscummvm-rg350-3286d4f90064cd6fef8becfc669acd872dac1f0c.tar.gz
scummvm-rg350-3286d4f90064cd6fef8becfc669acd872dac1f0c.tar.bz2
scummvm-rg350-3286d4f90064cd6fef8becfc669acd872dac1f0c.zip
BLADERUNNER: Added DeskClerk actor
Diffstat (limited to 'engines')
-rw-r--r--engines/bladerunner/module.mk1
-rw-r--r--engines/bladerunner/script/ai/desk_clerk.cpp419
-rw-r--r--engines/bladerunner/script/ai_script.cpp1
-rw-r--r--engines/bladerunner/script/ai_script.h6
4 files changed, 427 insertions, 0 deletions
diff --git a/engines/bladerunner/module.mk b/engines/bladerunner/module.mk
index ba43bc07b4..11337f080e 100644
--- a/engines/bladerunner/module.mk
+++ b/engines/bladerunner/module.mk
@@ -52,6 +52,7 @@ MODULE_OBJS = \
script/ai_script.o \
script/ai/baker.o \
script/ai/bryant.o \
+ script/ai/desk_clerk.o \
script/ai/gaff.o \
script/ai/generic_walker_a.o \
script/ai/generic_walker_b.o \
diff --git a/engines/bladerunner/script/ai/desk_clerk.cpp b/engines/bladerunner/script/ai/desk_clerk.cpp
new file mode 100644
index 0000000000..9a14508053
--- /dev/null
+++ b/engines/bladerunner/script/ai/desk_clerk.cpp
@@ -0,0 +1,419 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "bladerunner/script/ai_script.h"
+
+namespace BladeRunner {
+
+AIScriptDeskClerk::AIScriptDeskClerk(BladeRunnerEngine *vm) : AIScriptBase(vm) {
+ _var1 = 0;
+ _var2 = 0;
+ _var3 = 75;
+}
+
+void AIScriptDeskClerk::Initialize() {
+ _animationFrame = 0;
+ _animationState = 0;
+ _animationStateNext = 0;
+ _animationNext = 0;
+
+ _var1 = 0;
+ _var2 = 0;
+ _var3 = 75;
+ Actor_Set_Goal_Number(kActorDeskClerk, 0);
+}
+
+bool AIScriptDeskClerk::Update() {
+ if (Actor_Query_Goal_Number(kActorDeskClerk) == 1
+ && Player_Query_Current_Set() != kSetCT01_CT12
+ && Player_Query_Current_Set() != kSetCT03_CT04
+ && Player_Query_Current_Set() != kSetCT08_CT51_UG12
+ && Player_Query_Current_Set() != kSetCT02
+ && Player_Query_Current_Set() != kSetCT05
+ && Player_Query_Current_Set() != kSetCT06
+ && Player_Query_Current_Set() != kSetCT07
+ && Player_Query_Current_Set() != kSetCT09
+ && Player_Query_Current_Set() != kSetCT10
+ && Player_Query_Current_Set() != kSetCT11) {
+ Actor_Set_Goal_Number(kActorDeskClerk, 2);
+ }
+
+ if (Global_Variable_Query(kVariableChapter) == 5 && Actor_Query_Goal_Number(kActorDeskClerk) < 400) {
+ Actor_Set_Goal_Number(kActorDeskClerk, 400);
+ }
+
+ return false;
+}
+
+void AIScriptDeskClerk::TimerExpired(int timer) {
+ //return false;
+}
+
+void AIScriptDeskClerk::CompletedMovementTrack() {
+ //return false;
+}
+
+void AIScriptDeskClerk::ReceivedClue(int clueId, int fromActorId) {
+ //return false;
+}
+
+void AIScriptDeskClerk::ClickedByPlayer() {
+ //return false;
+}
+
+void AIScriptDeskClerk::EnteredScene(int sceneId) {
+ // return false;
+}
+
+void AIScriptDeskClerk::OtherAgentEnteredThisScene(int otherActorId) {
+ // return false;
+}
+
+void AIScriptDeskClerk::OtherAgentExitedThisScene(int otherActorId) {
+ // return false;
+}
+
+void AIScriptDeskClerk::OtherAgentEnteredCombatMode(int otherActorId, int combatMode) {
+ // return false;
+}
+
+void AIScriptDeskClerk::ShotAtAndMissed() {
+ // return false;
+}
+
+bool AIScriptDeskClerk::ShotAtAndHit() {
+ return false;
+}
+
+void AIScriptDeskClerk::Retired(int byActorId) {
+ // return false;
+}
+
+int AIScriptDeskClerk::GetFriendlinessModifierIfGetsClue(int otherActorId, int clueId) {
+ return 0;
+}
+
+bool AIScriptDeskClerk::GoalChanged(int currentGoalNumber, int newGoalNumber) {
+ if (newGoalNumber > 2) {
+ if (newGoalNumber == 400) {
+ Actor_Put_In_Set(kActorDeskClerk, kSetFreeSlotH);
+ Actor_Set_At_Waypoint(kActorDeskClerk, 40, 0);
+ }
+ } else if (newGoalNumber) {
+ if (newGoalNumber == 1) {
+ Actor_Put_In_Set(kActorDeskClerk, kSetFreeSlotH);
+ Actor_Set_At_Waypoint(kActorDeskClerk, 40, 0);
+ } else {
+ Actor_Put_In_Set(kActorDeskClerk, kSetCT09);
+ Actor_Set_At_XYZ(kActorDeskClerk, 282.0f, 360.52f, 743.0f, 513);
+ }
+ } else {
+ Actor_Put_In_Set(kActorDeskClerk, kSetCT09);
+ Actor_Set_At_XYZ(kActorDeskClerk, 282.0f, 360.52f, 743.0f, 513);
+ }
+
+ return false;
+}
+
+bool AIScriptDeskClerk::UpdateAnimation(int *animation, int *frame) {
+ int frameRes;
+
+ switch (_animationState) {
+ case 0:
+ if (_var1 > 1) {
+ frameRes = _animationFrame;
+ } else if (_var1) {
+ *animation = 662;
+ _animationFrame++;
+
+ if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(662)) {
+ _animationFrame = 0;
+ _var1 = 0;
+ *animation = 661;
+ _var3 = Random_Query(50, 100);
+ }
+ frameRes = _animationFrame;
+ } else {
+ if (_var3)
+ --_var3;
+
+ *animation = 661;
+ _animationFrame++;
+
+ if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(661)) {
+ frameRes = _animationFrame;
+ } else {
+ _animationFrame = 0;
+
+ if (!_var3) {
+ *animation = 662;
+ _var1 = 1;
+ }
+
+ frameRes = _animationFrame;
+ }
+ }
+ break;
+
+ case 1:
+ frameRes = _animationFrame;
+ *animation = 663;
+
+ if (!frameRes && _var2) {
+ *animation = 661;
+ _animationState = 0;
+ _var1 = 0;
+ } else {
+ _animationFrame++;
+
+ if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(*animation)) {
+ frameRes = _animationFrame;
+ } else {
+ _animationFrame = 0;
+ frameRes = 0;
+ }
+ }
+ break;
+
+ case 2:
+ *animation = 664;
+ _animationFrame++;
+
+ if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(664)) {
+ frameRes = _animationFrame;
+ } else {
+ _animationFrame = 0;
+ frameRes = 0;
+ _animationState = 1;
+ *animation = 663;
+ }
+ break;
+
+ case 3:
+ *animation = 665;
+ _animationFrame++;
+
+ if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(665)) {
+ frameRes = _animationFrame;
+ } else {
+ _animationFrame = 0;
+ frameRes = 0;
+ _animationState = 1;
+ *animation = 663;
+ }
+ break;
+
+ case 4:
+ *animation = 666;
+ _animationFrame++;
+
+ if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(666)) {
+ frameRes = _animationFrame;
+ } else {
+ _animationFrame = 0;
+ frameRes = 0;
+ _animationState = 1;
+ *animation = 663;
+ }
+ break;
+
+ case 5:
+ *animation = 667;
+ _animationFrame++;
+
+ if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(667)) {
+ frameRes = _animationFrame;
+ } else {
+ _animationFrame = 0;
+ frameRes = 0;
+ _animationState = 1;
+ *animation = 663;
+ }
+ break;
+
+ case 6:
+ *animation = 668;
+ _animationFrame++;
+
+ if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(668)) {
+ frameRes = _animationFrame;
+ } else {
+ _animationFrame = 0;
+ frameRes = 0;
+ }
+ break;
+
+ case 7:
+ *animation = 669;
+
+ if (!_animationFrame && _var2) {
+ Actor_Change_Animation_Mode(kActorDeskClerk, 72);
+ *animation = 668;
+ _animationState = 6;
+ frameRes = _animationFrame;
+ } else {
+ _animationFrame++;
+
+ if (_animationFrame < Slice_Animation_Query_Number_Of_Frames(*animation)) {
+ frameRes = _animationFrame;
+ } else {
+ _animationFrame = 0;
+ frameRes = 0;
+ }
+ }
+ break;
+
+ case 8:
+ *animation = 670;
+ _animationFrame++;
+
+ if (_animationFrame <= Slice_Animation_Query_Number_Of_Frames(670) - 2) {
+ frameRes = _animationFrame;
+ } else {
+ Ambient_Sounds_Play_Sound(206, 40, 30, 30, 99);
+ Actor_Set_Goal_Number(kActorDeskClerk, 1);
+ Actor_Change_Animation_Mode(kActorDeskClerk, 0);
+ *animation = 661;
+ _animationFrame = 0;
+ frameRes = 0;
+ _animationState = 0;
+ }
+ break;
+
+ default:
+ frameRes = _animationFrame;
+ break;
+ }
+
+ *frame = frameRes;
+
+ return true;
+}
+
+bool AIScriptDeskClerk::ChangeAnimationMode(int mode) {
+ switch (mode) {
+ case 0:
+ switch (_animationState) {
+ case 0:
+ _animationState = 8;
+ _animationFrame = 0;
+ break;
+
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ _var2 = 1;
+ break;
+
+ case 6:
+ Actor_Change_Animation_Mode(kActorDeskClerk, 72);
+ break;
+
+ default:
+ _animationState = 0;
+ _animationFrame = 0;
+ _var1 = 0;
+ _var3 = Random_Query(70, 140);
+ break;
+ }
+ break;
+
+ case 3:
+ _animationState = 1;
+ _animationFrame = 0;
+ _var2 = 0;
+ break;
+
+ case 12:
+ _animationState = 2;
+ _animationFrame = 0;
+ _var2 = 0;
+ break;
+
+ case 13:
+ _animationState = 3;
+ _animationFrame = 0;
+ _var2 = 0;
+ break;
+
+ case 14:
+ _animationState = 4;
+ _animationFrame = 0;
+ _var2 = 0;
+ break;
+
+ case 15:
+ _animationState = 5;
+ _animationFrame = 0;
+ _var2 = 0;
+ break;
+
+ case 26:
+ _animationState = 8;
+ _animationFrame = 0;
+ break;
+
+ case 58:
+ _animationState = 7;
+ _animationFrame = 0;
+ _var2 = 0;
+ break;
+
+ case 72:
+ if (_animationState != 6) {
+ _animationState = 6;
+ _animationFrame = 0;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ return true;
+}
+
+void AIScriptDeskClerk::QueryAnimationState(int *animationState, int *animationFrame, int *animationStateNext, int *animationNext) {
+ *animationState = _animationState;
+ *animationFrame = _animationFrame;
+ *animationStateNext = _animationStateNext;
+ *animationNext = _animationNext;
+}
+
+void AIScriptDeskClerk::SetAnimationState(int animationState, int animationFrame, int animationStateNext, int animationNext) {
+ _animationState = animationState;
+ _animationFrame = animationFrame;
+ _animationStateNext = animationStateNext;
+ _animationNext = animationNext;
+}
+
+bool AIScriptDeskClerk::ReachedMovementTrackWaypoint(int waypointId) {
+ return true;
+}
+
+void AIScriptDeskClerk::FledCombat() {
+ // return false;
+}
+
+} // End of namespace BladeRunner
diff --git a/engines/bladerunner/script/ai_script.cpp b/engines/bladerunner/script/ai_script.cpp
index 17a881d21f..54e1cafc56 100644
--- a/engines/bladerunner/script/ai_script.cpp
+++ b/engines/bladerunner/script/ai_script.cpp
@@ -52,6 +52,7 @@ AIScripts::AIScripts(BladeRunnerEngine *vm, int actorCount) {
_AIScripts[kActorMia] = new AIScriptMia(_vm); // 22
_AIScripts[kActorOfficerLeary] = new AIScriptOfficerLeary(_vm); // 23
_AIScripts[kActorBaker] = new AIScriptBaker(_vm); // 26
+ _AIScripts[kActorDeskClerk] = new AIScriptDeskClerk(_vm); // 27
_AIScripts[kActorHowieLee] = new AIScriptHowieLee(_vm); // 28
_AIScripts[kActorKlein] = new AIScriptKlein(_vm); // 30
_AIScripts[kActorSergeantWalls] = new AIScriptSergeantWalls(_vm); // 34
diff --git a/engines/bladerunner/script/ai_script.h b/engines/bladerunner/script/ai_script.h
index 8d6d19e06e..e7e4dcba1d 100644
--- a/engines/bladerunner/script/ai_script.h
+++ b/engines/bladerunner/script/ai_script.h
@@ -196,6 +196,12 @@ END_SCRIPT
DECLARE_SCRIPT(Baker)
END_SCRIPT
+DECLARE_SCRIPT(DeskClerk)
+ int _var1;
+ int _var2;
+ int _var3;
+END_SCRIPT
+
DECLARE_SCRIPT(HowieLee)
bool var_45DFB8;
END_SCRIPT