diff options
| author | Eugene Sandulenko | 2018-03-13 14:30:17 +0100 | 
|---|---|---|
| committer | Eugene Sandulenko | 2018-03-13 14:30:17 +0100 | 
| commit | f85899cf93b33d1ee2a29b75b4b4bd3fbf18b383 (patch) | |
| tree | d4e0e6fc4c0934162dd33c2d8332d95dfa019365 | |
| parent | d37223a9fc27e07427f5bc6a4b4d4626a66d114a (diff) | |
| download | scummvm-rg350-f85899cf93b33d1ee2a29b75b4b4bd3fbf18b383.tar.gz scummvm-rg350-f85899cf93b33d1ee2a29b75b4b4bd3fbf18b383.tar.bz2 scummvm-rg350-f85899cf93b33d1ee2a29b75b4b4bd3fbf18b383.zip | |
BLADERUNNER: Added Rachel actor
| -rw-r--r-- | engines/bladerunner/module.mk | 1 | ||||
| -rw-r--r-- | engines/bladerunner/script/ai/rachael.cpp | 439 | ||||
| -rw-r--r-- | engines/bladerunner/script/ai_script.cpp | 1 | ||||
| -rw-r--r-- | engines/bladerunner/script/ai_script.h | 9 | 
4 files changed, 450 insertions, 0 deletions
| diff --git a/engines/bladerunner/module.mk b/engines/bladerunner/module.mk index 55c5a59bc4..c69795da97 100644 --- a/engines/bladerunner/module.mk +++ b/engines/bladerunner/module.mk @@ -88,6 +88,7 @@ MODULE_OBJS = \  	script/ai/murray.o \  	script/ai/newscaster.o \  	script/ai/officer_leary.o \ +	script/ai/rachael.o \  	script/ai/rajif.o \  	script/ai/runciter.o \  	script/ai/sebastian.o \ diff --git a/engines/bladerunner/script/ai/rachael.cpp b/engines/bladerunner/script/ai/rachael.cpp new file mode 100644 index 0000000000..950007ef36 --- /dev/null +++ b/engines/bladerunner/script/ai/rachael.cpp @@ -0,0 +1,439 @@ +/* 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 { + +AIScriptRachael::AIScriptRachael(BladeRunnerEngine *vm) : AIScriptBase(vm) { +	_flag = true; +} + +void AIScriptRachael::Initialize() { +	_animationFrame = 0; +	_animationState = 0; +	_animationStateNext = 0; +	_animationNext = 0; + +	_flag = true; + +	Actor_Set_Goal_Number(kActorRachael, 0); +} + +bool AIScriptRachael::Update() { +	return false; +} + +void AIScriptRachael::TimerExpired(int timer) { +	//return false; +} + +void AIScriptRachael::CompletedMovementTrack() { +	//return false; +} + +void AIScriptRachael::ReceivedClue(int clueId, int fromActorId) { +	//return false; +} + +void AIScriptRachael::ClickedByPlayer() { +	if (Actor_Query_Goal_Number(kActorRachael) == 305) { +		Actor_Face_Actor(kActorMcCoy, kActorRachael, 1); +		Actor_Says(kActorMcCoy, 2730, 12); +		AI_Movement_Track_Pause(57); +		dialogue_start(); + +		if (Player_Query_Agenda() == 2 || Player_Query_Agenda() == 3) { +			dialogue_agenda2(); +		} else if (Player_Query_Agenda()) { +			if (Actor_Query_Friendliness_To_Other(kActorSteele, kActorMcCoy) > Actor_Query_Friendliness_To_Other(kActorClovis, kActorMcCoy)) { +				dialogue_agenda2(); +			} else { +				dialogue_agenda1(); +			} +		} else { +			dialogue_agenda1(); +		} + +		Actor_Set_Goal_Number(kActorRachael, 306); +		AI_Movement_Track_Unpause(57); +	} +} + +void AIScriptRachael::EnteredScene(int sceneId) { +	// return false; +} + +void AIScriptRachael::OtherAgentEnteredThisScene(int otherActorId) { +	// return false; +} + +void AIScriptRachael::OtherAgentExitedThisScene(int otherActorId) { +	// return false; +} + +void AIScriptRachael::OtherAgentEnteredCombatMode(int otherActorId, int combatMode) { +	// return false; +} + +void AIScriptRachael::ShotAtAndMissed() { +	// return false; +} + +bool AIScriptRachael::ShotAtAndHit() { +	return false; +} + +void AIScriptRachael::Retired(int byActorId) { +	// return false; +} + +int AIScriptRachael::GetFriendlinessModifierIfGetsClue(int otherActorId, int clueId) { +	return 0; +} + +bool AIScriptRachael::GoalChanged(int currentGoalNumber, int newGoalNumber) { +	switch (newGoalNumber) { +	case 200: +		AI_Movement_Track_Flush(kActorRachael); +		AI_Movement_Track_Append(kActorRachael, 379, 0); +		AI_Movement_Track_Append(kActorRachael, 39, 0); +		AI_Movement_Track_Repeat(kActorRachael); +		break; + +	case 300: +		Actor_Put_In_Set(kActorRachael, kSetMA07); +		Actor_Set_At_XYZ(kActorRachael, -8.09f, -162.8f, 135.33f, 544); +		break; + +	case 305: +		AI_Movement_Track_Flush(kActorRachael); +		AI_Movement_Track_Append(kActorRachael, 468, 0); +		AI_Movement_Track_Append(kActorRachael, 39, 0); +		AI_Movement_Track_Repeat(kActorRachael); +		break; + +	case 400: +		Actor_Put_In_Set(kActorRachael, kSetFreeSlotG); +		Actor_Set_At_Waypoint(kActorRachael, 39, 0); +		break; + +	default: +		return false; +	} + +	return true; +} + +bool AIScriptRachael::UpdateAnimation(int *animation, int *frame) { +	switch (_animationState) { +	case 0: +		*animation = 823; +		_animationFrame++; +		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(823) - 1) { +			_animationFrame = 0; +		} +		break; + +	case 1: +		*animation = 822; +		_animationFrame++; +		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(822) - 1) { +			_animationFrame = 0; +		} +		break; + +	case 2: +		if (!_animationFrame && _flag) { +			*animation = 823; +			_animationState = 0; +		} else { +			*animation = 825; +			_animationFrame++; +			if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(825) - 1) { +				_animationFrame = 0; +			} +		} +		break; + +	case 3: +		*animation = 826; +		_animationFrame++; +		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(826) - 1) { +			_animationFrame = 0; +			_animationState = 2; +			*animation = 825; +		} +		break; + +	case 4: +		*animation = 827; +		_animationFrame++; +		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(827) - 1) { +			_animationFrame = 0; +			_animationState = 2; +			*animation = 825; +		} +		break; + +	case 5: +		*animation = 828; +		_animationFrame++; +		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(828) - 1) { +			_animationFrame = 0; +			_animationState = 2; +			*animation = 825; +		} +		break; + +	case 6: +		*animation = 829; +		_animationFrame++; +		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(829) - 1) { +			_animationFrame = 0; +			_animationState = 2; +			*animation = 825; +		} +		break; + +	case 7: +		*animation = 830; +		_animationFrame++; +		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(830) - 1) { +			_animationFrame = 0; +			_animationState = 2; +			*animation = 825; +		} +		break; + +	case 8: +		*animation = 831; +		_animationFrame++; +		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(831) - 1) { +			_animationFrame = 0; +			_animationState = 2; +			*animation = 825; +		} +		break; + +	case 9: +		*animation = 832; +		_animationFrame++; +		if (_animationFrame > Slice_Animation_Query_Number_Of_Frames(832) - 1) { +			_animationFrame = 0; +			_animationState = 2; +			*animation = 825; +		} +		break; + +	default: +		break; +	} +	*frame = _animationFrame; + +	return true; +} + +bool AIScriptRachael::ChangeAnimationMode(int mode) { +	switch (mode) { +	case 0: +		if (_animationState >= 2 && _animationState <= 9) { +			_flag = 1; +		} else { +			_animationState = 0; +			_animationFrame = 0; +		} +		break; +	case 1: +		_animationState = 1; +		_animationFrame = 0; +		break; +	case 3: +		_animationState = 2; +		_animationFrame = 0; +		_flag = 0; +		break; +	case 12: +		_animationState = 3; +		_animationFrame = 0; +		_flag = 0; +		break; +	case 13: +		_animationState = 4; +		_animationFrame = 0; +		_flag = 0; +		break; +	case 14: +		_animationState = 5; +		_animationFrame = 0; +		_flag = 0; +		break; +	case 15: +		_animationState = 6; +		_animationFrame = 0; +		_flag = 0; +		break; +	case 16: +		_animationState = 7; +		_animationFrame = 0; +		_flag = 0; +		break; +	case 17: +		_animationState = 8; +		_animationFrame = 0; +		_flag = 0; +		break; +	case 18: +		_animationState = 9; +		_animationFrame = 0; +		_flag = 0; +		break; +	default: +		break; +	} + +	return true; +} + +void AIScriptRachael::QueryAnimationState(int *animationState, int *animationFrame, int *animationStateNext, int *animationNext) { +	*animationState     = _animationState; +	*animationFrame     = _animationFrame; +	*animationStateNext = _animationStateNext; +	*animationNext      = _animationNext; +} + +void AIScriptRachael::SetAnimationState(int animationState, int animationFrame, int animationStateNext, int animationNext) { +	_animationState     = animationState; +	_animationFrame     = animationFrame; +	_animationStateNext = animationStateNext; +	_animationNext      = animationNext; +} + +bool AIScriptRachael::ReachedMovementTrackWaypoint(int waypointId) { +	return true; +} + +void AIScriptRachael::FledCombat() { +	// return false; +} + +void AIScriptRachael::dialogue_start() { +	Actor_Face_Actor(kActorRachael, kActorMcCoy, 1); +	Loop_Actor_Walk_To_Actor(kActorRachael, kActorMcCoy, 84, 0, 0); +	Actor_Says(kActorRachael, 0, 15); +	Actor_Says(kActorMcCoy, 2740, 13); +	Actor_Says(kActorRachael, 10, 14); +	Actor_Says(kActorMcCoy, 2745, 13); +	Actor_Says(kActorRachael, 20, 12); +	Actor_Says_With_Pause(kActorMcCoy, 2750, 1.5f, 3); +	Actor_Says(kActorRachael, 30, 13); +	Actor_Says(kActorRachael, 40, 15); +} + +void AIScriptRachael::dialogue_agenda1() { +	Actor_Says(kActorMcCoy, 2795, 13); +	Actor_Says(kActorRachael, 140, 15); +	Actor_Says(kActorMcCoy, 2800, 12); +	Actor_Says(kActorRachael, 150, 16); +	Actor_Says(kActorMcCoy, 2805, 18); +	Actor_Says(kActorRachael, 160, 14); +	Actor_Says(kActorRachael, 170, 13); +	Actor_Says(kActorMcCoy, 2810, 14); +	Actor_Says(kActorRachael, 180, 13); +	Actor_Says(kActorMcCoy, 2815, 12); +	Actor_Says(kActorMcCoy, 2820, 13); +	Actor_Says(kActorRachael, 190, 15); +	Actor_Says(kActorMcCoy, 2825, 12); +	Actor_Says(kActorRachael, 200, 15); +	Actor_Says(kActorMcCoy, 2830, 14); +	Actor_Says(kActorRachael, 210, 15); +	Actor_Says(kActorRachael, 220, 16); +	Actor_Says(kActorMcCoy, 2835, 13); +	Actor_Says(kActorRachael, 230, 14); +	Actor_Says(kActorMcCoy, 2840, 12); +	Actor_Says(kActorRachael, 240, 13); +	Actor_Says(kActorRachael, 250, 15); +	Actor_Says(kActorRachael, 260, 16); +	Actor_Says(kActorMcCoy, 2845, 13); +	Actor_Says(kActorRachael, 270, 13); +	Actor_Says(kActorRachael, 280, 14); +	Actor_Says(kActorMcCoy, 2850, 13); +	Actor_Says(kActorRachael, 290, 14); +	Actor_Says_With_Pause(kActorRachael, 300, 1.0f, 3); +	Actor_Says(kActorMcCoy, 2860, 14); +} + +void AIScriptRachael::dialogue_agenda2() { +	Actor_Says(kActorRachael, 50, 15); +	Actor_Says(kActorMcCoy, 2765, 16); +	Actor_Says(kActorMcCoy, 2770, 17); +	Actor_Says(kActorRachael, 60, 14); +	Actor_Says(kActorMcCoy, 2775, 16); +	Actor_Says(kActorRachael, 70, 13); +	Actor_Says(kActorRachael, 80, 14); +	Actor_Says(kActorRachael, 90, 15); +	Actor_Says(kActorMcCoy, 2780, 17); +	Actor_Says(kActorRachael, 100, 16); +	Actor_Says(kActorRachael, 110, 15); +	Actor_Says(kActorMcCoy, 2785, 17); +	Actor_Says(kActorRachael, 120, 13); +	Actor_Says(kActorMcCoy, 2790, 16); +	Actor_Says(kActorRachael, 130, 14); +	Actor_Says_With_Pause(kActorRachael, 300, 1.0f, 3); +	Actor_Says(0, 2860, 14); +} + +// Not used in the game +void AIScriptRachael::dialogue_agenda3() { +	Actor_Says(kActorMcCoy, 2865, 3); +	Actor_Says(kActorRachael, 320, 3); +	Actor_Says(kActorRachael, 330, 3); +	Actor_Says(kActorMcCoy, 2870, 3); +	Actor_Says(kActorRachael, 340, 3); +	Actor_Says(kActorMcCoy, 2875, 3); +	Actor_Says(kActorRachael, 350, 3); +	Actor_Says(kActorMcCoy, 2880, 3); +	Actor_Says(kActorMcCoy, 2885, 3); +	Actor_Says(kActorRachael, 360, 3); +	Actor_Says(kActorRachael, 370, 3); +	Actor_Says(kActorMcCoy, 2890, 3); +	Actor_Says(kActorRachael, 380, 3); +	Actor_Says(kActorRachael, 390, 3); +	Actor_Says(kActorRachael, 400, 3); +	Actor_Says(kActorMcCoy, 2895, 3); +	Actor_Says(kActorRachael, 410, 3); +	Actor_Says(kActorMcCoy, 2900, 3); +	Actor_Says(kActorRachael, 420, 3); +	Actor_Says(kActorMcCoy, 2905, 3); +	Actor_Says(kActorRachael, 430, 3); +	Actor_Says(kActorRachael, 440, 3); +	Actor_Says(kActorMcCoy, 2910, 3); +	Actor_Says(kActorMcCoy, 2920, 3); +	Actor_Says(kActorRachael, 450, 3); +	Actor_Says(kActorMcCoy, 2925, 3); +	Actor_Says(kActorMcCoy, 2930, 3); +	Actor_Says(kActorRachael, 460, 3); +	Actor_Says(kActorMcCoy, 2935, 3); +	Actor_Says(kActorRachael, 470, 3); +} + +} // End of namespace BladeRunner diff --git a/engines/bladerunner/script/ai_script.cpp b/engines/bladerunner/script/ai_script.cpp index f3304a948e..303d1809da 100644 --- a/engines/bladerunner/script/ai_script.cpp +++ b/engines/bladerunner/script/ai_script.cpp @@ -83,6 +83,7 @@ AIScripts::AIScripts(BladeRunnerEngine *vm, int actorCount) {  	_AIScripts[kActorBryant] = new AIScriptBryant(_vm);                   // 54  	_AIScripts[kActorTaffy] = new AIScriptTaffy(_vm);                     // 55  	_AIScripts[kActorSebastian] = new AIScriptSebastian(_vm);             // 56 +	_AIScripts[kActorRachael] = new AIScriptRachael(_vm);                 // 57  	_AIScripts[kActorBlimpGuy] = new AIScriptBlimpGuy(_vm);               // 60  	_AIScripts[kActorNewscaster] = new AIScriptNewscaster(_vm);           // 61  	_AIScripts[kActorLeon] = new AIScriptLeon(_vm);                       // 62 diff --git a/engines/bladerunner/script/ai_script.h b/engines/bladerunner/script/ai_script.h index 8fcb930716..5117de2f61 100644 --- a/engines/bladerunner/script/ai_script.h +++ b/engines/bladerunner/script/ai_script.h @@ -325,6 +325,15 @@ DECLARE_SCRIPT(Sebastian)  	void setMcCoyIsABladeRunner();  END_SCRIPT +DECLARE_SCRIPT(Rachael) +	bool _flag; + +	void dialogue_start(); +	void dialogue_agenda1(); +	void dialogue_agenda2(); +	void dialogue_agenda3(); +END_SCRIPT +  DECLARE_SCRIPT(BlimpGuy)  END_SCRIPT | 
