1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204
|
/* 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.
*
*/
#ifndef BLADERUNNER_SCRIPT_AI_H
#define BLADERUNNER_SCRIPT_AI_H
#include "bladerunner/script/script.h"
namespace BladeRunner {
class BladeRunnerEngine;
class AIScriptBase : public ScriptBase {
public:
AIScriptBase(BladeRunnerEngine *vm) : ScriptBase(vm) {}
virtual void Initialize() = 0;
virtual bool Update() = 0;
virtual void TimerExpired(int timer) = 0;
virtual void CompletedMovementTrack() = 0;
virtual void ReceivedClue(int clueId, int fromActorId) = 0;
virtual void ClickedByPlayer() = 0;
virtual void EnteredScene(int setId) = 0;
virtual void OtherAgentEnteredThisScene(int otherActorId) = 0;
virtual void OtherAgentExitedThisScene(int otherActorId) = 0;
virtual void OtherAgentEnteredCombatMode(int otherActorId, int combatMode) = 0;
virtual void ShotAtAndMissed() = 0;
virtual void ShotAtAndHit() = 0;
virtual void Retired(int byActorId) = 0;
virtual int GetFriendlinessModifierIfGetsClue(int otherActorId, int clueId) = 0;
virtual bool GoalChanged(int currentGoalNumber, int newGoalNumber) = 0;
virtual bool UpdateAnimation(int *animation, int *frame) = 0;
virtual bool ChangeAnimationMode(int mode) = 0;
virtual void QueryAnimationState(int *animationState, int *animationFrame, int *a3, int *a4) = 0;
virtual void SetAnimationState(int animationState, int animationFrame, int a3, int a4) = 0;
virtual bool ReachedMovementTrackWaypoint(int waypointId) = 0;
virtual void FledCombat() = 0;
};
#define DECLARE_SCRIPT(name) \
class AIScript##name : public AIScriptBase { \
public: \
AIScript##name(BladeRunnerEngine *vm) \
: AIScriptBase(vm) \
{} \
void Initialize(); \
bool Update(); \
void TimerExpired(int timer); \
void CompletedMovementTrack(); \
void ReceivedClue(int clueId, int fromActorId); \
void ClickedByPlayer(); \
void EnteredScene(int setId); \
void OtherAgentEnteredThisScene(int otherActorId); \
void OtherAgentExitedThisScene(int otherActorId); \
void OtherAgentEnteredCombatMode(int otherActorId, int combatMode); \
void ShotAtAndMissed(); \
void ShotAtAndHit(); \
void Retired(int byActorId); \
int GetFriendlinessModifierIfGetsClue(int otherActorId, int clueId); \
bool GoalChanged(int currentGoalNumber, int newGoalNumber); \
bool UpdateAnimation(int *animation, int *frame); \
bool ChangeAnimationMode(int mode); \
void QueryAnimationState(int *animationState, int *animationFrame, int *a3, int *a4); \
void SetAnimationState(int animationState, int animationFrame, int a3, int a4); \
bool ReachedMovementTrackWaypoint(int waypointId); \
void FledCombat(); \
private:
#define END_SCRIPT };
DECLARE_SCRIPT(McCoy)
int dword_45A0D0_animation_state;
int dword_45A0D4_animation_frame;
int dword_45A0D8;
int dword_45A0DC;
int dword_45A0E0;
int dword_45A0E4;
float off_45A0EC;
int dword_45A0E8;
int dword_45A0F0;
int dword_45A0F4;
int dword_45A0F8;
int dword_45A0FC;
int dword_462718;
int dword_46271C;
float off_45A100;
float flt_462710;
float flt_462714;
void sub_4053E0();
void sub_4054F0();
void sub_405660();
void sub_405800();
void sub_4058B0();
void sub_405920();
void sub_405940(float a1);
void sub_4059D0(float a1);
END_SCRIPT
DECLARE_SCRIPT(Runciter)
int var_45CD70_animation_state;
int var_45CD74_animation_frame;
int var_462800;
int var_462804;
int var_45CD78;
int var_45CD7C;
int var_45CD80;
int var_45CD84;
int var_45CD88;
END_SCRIPT
DECLARE_SCRIPT(OfficerLeary)
int var_45D5B0_animation_state;
int var_45D5B4_animation_frame;
int var_45D5B8;
int var_45D5BC;
int var_462880;
int var_462884;
bool sub_431408();
bool sub_431420();
END_SCRIPT
DECLARE_SCRIPT(Leon)
int var_45EDB0_animation_state;
int var_45EDB4_animation_frame;
int var_45EDAC;
int var_462AF0;
int var_462AF4;
float var_45EDA0_z;
float var_45EDA4_y;
float var_45EDA8_x;
float sub_446700(int actorId, float x, float y, float z);
END_SCRIPT
DECLARE_SCRIPT(Maggie)
int var_45F3F0_animation_state;
int var_45F3F4_animation_frame;
int var_462B30;
int var_462B34;
int var_45F3F8;
int var_45F3FC;
int var_45F400;
int var_45F404;
int var_45F408;
int sub_44B260();
float sub_44B200(int actorId, float x, float y, float z);
END_SCRIPT
#undef DECLARE_SCRIPT
#undef END_SCRIPT
class AIScripts {
private:
BladeRunnerEngine *_vm;
int _inScriptCounter;
int _actorsCount;
AIScriptBase **_AIScripts;
bool *_actorUpdating;
public:
AIScripts(BladeRunnerEngine *vm, int actorsCount);
~AIScripts();
void Initialize(int actor);
void Update(int actor);
void TimerExpired(int actor, int timer);
void CompletedMovementTrack(int actor);
void ReceivedClue(int actor, int clueId, int fromActorId);
void ClickedByPlayer(int actor);
void EnteredScene(int actor, int setId);
void OtherAgentEnteredThisScene(int actor, int otherActorId);
void OtherAgentExitedThisScene(int actor, int otherActorId);
void Retired(int actor, int retiredByActorId);
void GoalChanged(int actor, int currentGoalNumber, int newGoalNumber);
bool ReachedMovementTrackWaypoint(int actor, int waypointId);
void UpdateAnimation(int actor, int *animation, int *frame);
void ChangeAnimationMode(int actor, int mode);
bool IsInsideScript() const { return _inScriptCounter > 0; }
};
} // End of namespace BladeRunner
#endif
|