diff options
| -rw-r--r-- | engines/bladerunner/module.mk | 1 | ||||
| -rw-r--r-- | engines/bladerunner/script/ai/murray.cpp | 267 | ||||
| -rw-r--r-- | engines/bladerunner/script/ai_script.cpp | 1 | ||||
| -rw-r--r-- | engines/bladerunner/script/ai_script.h | 4 | 
4 files changed, 273 insertions, 0 deletions
diff --git a/engines/bladerunner/module.mk b/engines/bladerunner/module.mk index 03adce7ab1..da863a4117 100644 --- a/engines/bladerunner/module.mk +++ b/engines/bladerunner/module.mk @@ -74,6 +74,7 @@ MODULE_OBJS = \  	script/ai/marcus.o \  	script/ai/mccoy.o \  	script/ai/mia.o \ +	script/ai/murray.o \  	script/ai/newscaster.o \  	script/ai/officer_leary.o \  	script/ai/runciter.o \ diff --git a/engines/bladerunner/script/ai/murray.cpp b/engines/bladerunner/script/ai/murray.cpp new file mode 100644 index 0000000000..36bae4981c --- /dev/null +++ b/engines/bladerunner/script/ai/murray.cpp @@ -0,0 +1,267 @@ +/* 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 { + +AIScriptMurray::AIScriptMurray(BladeRunnerEngine *vm) : AIScriptBase(vm) { +	_flag = false; +} + +void AIScriptMurray::Initialize() { +	_animationFrame = 0; +	_animationState = 0; +	_animationStateNext = 0; +	_animationNext = 0; + +	_flag = false; +	Actor_Put_In_Set(kActorMurray, kSetHF01); +	Actor_Set_At_XYZ(kActorMurray, 566.07f, -0.01f, -205.43f, 271); +	Actor_Set_Goal_Number(kActorMurray, 0); +} + +bool AIScriptMurray::Update() { +	if (Global_Variable_Query(kVariableChapter) == 4 && Actor_Query_Goal_Number(kActorMurray) != 300) +		Actor_Set_Goal_Number(kActorMurray, 300); + +	if (Player_Query_Current_Set() == 37) { +		if (!Actor_Query_In_Set(kActorMcCoy, kSetHF01) +				|| !Actor_Query_In_Set(kActorMurray, kSetHF01) +				|| Actor_Query_Inch_Distance_From_Actor(kActorMcCoy, kActorMurray) >= 48 +				|| Game_Flag_Query(377)) { +			return false; +		} + +		Actor_Set_Goal_Number(kActorMurray, 1); +	} + +	return true; +} + +void AIScriptMurray::TimerExpired(int timer) { +	//return false; +} + +void AIScriptMurray::CompletedMovementTrack() { +	//return false; +} + +void AIScriptMurray::ReceivedClue(int clueId, int fromActorId) { +	//return false; +} + +void AIScriptMurray::ClickedByPlayer() { +	//return false; +} + +void AIScriptMurray::EnteredScene(int sceneId) { +	// return false; +} + +void AIScriptMurray::OtherAgentEnteredThisScene(int otherActorId) { +	// return false; +} + +void AIScriptMurray::OtherAgentExitedThisScene(int otherActorId) { +	// return false; +} + +void AIScriptMurray::OtherAgentEnteredCombatMode(int otherActorId, int combatMode) { +	// return false; +} + +void AIScriptMurray::ShotAtAndMissed() { +	// return false; +} + +bool AIScriptMurray::ShotAtAndHit() { +	return false; +} + +void AIScriptMurray::Retired(int byActorId) { +	// return false; +} + +int AIScriptMurray::GetFriendlinessModifierIfGetsClue(int otherActorId, int clueId) { +	return 0; +} + +bool AIScriptMurray::GoalChanged(int currentGoalNumber, int newGoalNumber) { +	if (newGoalNumber == 300) { +		Actor_Put_In_Set(kActorMurray, kSetFreeSlotH); +		Actor_Set_At_Waypoint(kActorMurray, 40, 0); +	} + +	return false; +} + +bool AIScriptMurray::UpdateAnimation(int *animation, int *frame) { +	switch (_animationState) { +	case 0: +		*animation = 698; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(698)) +			_animationFrame = 0; +		break; + +	case 1: +		*animation = 700; +		if (!_animationFrame && _flag) { +			_animationState = 0; +		} else { +			_animationFrame++; +			if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(700)) +				_animationFrame = 0; +		} +		break; + +	case 2: +		*animation = 701; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(701)) { +			_animationFrame = 0; +			_animationState = 1; +			*animation = 700; +		} +		break; + +	case 3: +		*animation = 702; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(702)) { +			_animationFrame = 0; +			_animationState = 1; +			*animation = 700; +		} +		break; + +	case 4: +		*animation = 703; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(703)) { +			_animationFrame = 0; +			_animationState = 1; +			*animation = 700; +		} +		break; + +	case 5: +		*animation = 704; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(704)) { +			_animationFrame = 0; +			_animationState = 1; +			*animation = 700; +		} +		break; + +	case 6: +		*animation = 699; +		_animationFrame++; +		if (_animationFrame >= Slice_Animation_Query_Number_Of_Frames(699)) { +			*animation = 698; +			_animationFrame = 0; +			_animationState = 0; +		} +		break; + +	default: +		break; +	} + +	*frame = _animationFrame; + +	return true; +} + +bool AIScriptMurray::ChangeAnimationMode(int mode) { +	switch (mode) { +	case 0: +		if (_animationState > 0 && _animationState <= 5) { +			_flag = true; +		} else { +			_animationState = 0; +			_animationFrame = 0; +		} +		break; + +	case 3: +		_animationState = 1; +		_animationFrame = 0; +		_flag = false; +		break; + +	case 12: +		_animationState = 2; +		_animationFrame = 0; +		_flag = false; +		break; + +	case 13: +		_animationState = 3; +		_animationFrame = 0; +		_flag = false; +		break; + +	case 14: +		_animationState = 4; +		_animationFrame = 0; +		_flag = false; +		break; + +	case 15: +		_animationState = 5; +		_animationFrame = 0; +		_flag = false; +		break; + +	default: +		break; +	} + +	return true; +} + +void AIScriptMurray::QueryAnimationState(int *animationState, int *animationFrame, int *animationStateNext, int *animationNext) { +	*animationState     = _animationState; +	*animationFrame     = _animationFrame; +	*animationStateNext = _animationStateNext; +	*animationNext      = _animationNext; +} + +void AIScriptMurray::SetAnimationState(int animationState, int animationFrame, int animationStateNext, int animationNext) { +	_animationState     = animationState; +	_animationFrame     = animationFrame; +	_animationStateNext = animationStateNext; +	_animationNext      = animationNext; +} + +bool AIScriptMurray::ReachedMovementTrackWaypoint(int waypointId) { +	return true; +} + +void AIScriptMurray::FledCombat() { +	// return false; +} + +} // End of namespace BladeRunner diff --git a/engines/bladerunner/script/ai_script.cpp b/engines/bladerunner/script/ai_script.cpp index 29d8f8567a..4a4bf0ccf4 100644 --- a/engines/bladerunner/script/ai_script.cpp +++ b/engines/bladerunner/script/ai_script.cpp @@ -57,6 +57,7 @@ AIScripts::AIScripts(BladeRunnerEngine *vm, int actorCount) {  	_AIScripts[kActorHowieLee] = new AIScriptHowieLee(_vm);               // 28  	_AIScripts[kActorFishDealer] = new AIScriptFishDealer(_vm);           // 29  	_AIScripts[kActorKlein] = new AIScriptKlein(_vm);                     // 30 +	_AIScripts[kActorMurray] = new AIScriptMurray(_vm);                   // 31  	_AIScripts[kActorSergeantWalls] = new AIScriptSergeantWalls(_vm);     // 34  	_AIScripts[kActorHysteriaPatron1] = new AIScriptHysteriaPatron1(_vm); // 47  	_AIScripts[kActorHysteriaPatron2] = new AIScriptHysteriaPatron2(_vm); // 48 diff --git a/engines/bladerunner/script/ai_script.h b/engines/bladerunner/script/ai_script.h index bf37971c59..9dd75bcf76 100644 --- a/engines/bladerunner/script/ai_script.h +++ b/engines/bladerunner/script/ai_script.h @@ -220,6 +220,10 @@ END_SCRIPT  DECLARE_SCRIPT(Klein)  END_SCRIPT +DECLARE_SCRIPT(Murray) +	bool _flag; +END_SCRIPT +  DECLARE_SCRIPT(SergeantWalls)  END_SCRIPT  | 
