Files
firestorm/Gameleap/mw4/Content/Missions/s1s2/Scripts/s1s2.abl
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

1081 lines
26 KiB
Plaintext

//*********************************************************************************
//
//[[GlobalTrigger Usage]]
// 0 - never use this trigger fo safety!!!
// in AttackHero.abl, see GetGlobalTrigger(GetMemoryInteger(ME,31)) for teleport back!!!
// initially GetMemoryInteger(ME,31) is 0, so don't use trigger 0
//
// 11, 12, 13, 14, 15: start sub stage 1-4(=boss) + bonus1 - teleport enemys back!!!
// 21, 22, 23, 24, 25: start sub stage 1-4(=boss) + bonus1 - player is ready, enemy start fighting!!!
// 19 & 29 is dummy...
// 4: ask score display... & time bonus too....
// 5: score displayed... continue...
//
// 6: ask continue? for mission-failure...
// 7: true if user answered for 6
//[[MemoryInteger Usage]]
// 30: GlobalTrigger Index(21-24) see above...
// 31: GlobalTrigger Index(11-14) see above...
// 29: Should I jump from sky?
// 28: Path for patrol
//
//[[Timer Usage]]
// 6: current sub-stage timer - resetted as 0.0f on sub-stage start and accumulated in that sub-stage
// 7: current sub-stage timer - resetted as 0.0f on sub-stage start and resetted on continue situation...
// currently used in .cpp: mwapplication.cpp, mw4shell.cpp // Timer(6) && Timer(7)
// 8: for checking player's dying after mission-success, for 6? secs...
// 10: effect play timer - resetted as 0.0f on sub-stage start
//
//[[.abl source management]]
//
// * just edit s1s1.abl and copy&rename s1s1.abl as s1s2.abl, s1s3.abl
// * attackhero.abl should be same for all 3 missions(s1s1,s1s2,s1s3)
//
// stage 1 - used only in s1s1.abl
// stage 2 - used only in s1s2.abl
// stage 3 - used only in s1s3.abl
//
// check : nStageNumber = GetCOOP(-1);
//
// nStageNumber could be 1, 2 or 3 for s1s1/s1s2/s1s3.abl
// currently s1s1 & s1s3 is same(except bonus stage) & s1s2 is sligtly different with s1s1&s1s3
//
// check "stage " for correct stage scipting
//
// to uncomment below block
//
// /* comment - begin
// */ comment - end
//
// change as like below
//
// //* comment - begin
// //*/ comment - end
//
// i.e. insert / at the start of comment block
// i.e. insert // at the end of comment block
//
//*********************************************************************************
fsm Script4COOP : integer;
const
#include_ <content\ABLScripts\mwconst.abi>
// see & sync w/ "mwmission.hpp"
COOP_MISC_START = 0;
MAX_COOP_MISCS = 100;
COOP_SUBSTAGE_SCORE_OLD = 101;
COOP_ENEMY_GROUP = 102;
COOP_ENEMY_GROUP_OLD = 103;
COOP_MODAL_START = 104;
COOP_MODAL_IS_ENDED = 105;
COOP_SUBSTAGE_TIMEGOAL = 106;
COOP_SUBSTAGE_NUMBER = 107;
MAX_COOP_VARS = 108;
type
#include_ <content\ABLScripts\mwtype.abi>
var
eternal integer playermech;
static integer cinema_cut;
static integer group_player;
static integer group_1;
static integer group_2;
static integer group_3;
static integer group_boss;
static integer group_b1org;
static integer group_b1;
static integer group_b1blds;
static integer old_stage; // should be
static integer old_group_Enemy; // should be
static integer cur_stage; // should be
static integer new_stage; // could be 1...end-state
static integer cur_objective; // should be
static integer new_objective; // should be
static integer cur_obj_time;
static integer cur_end_time;
static integer group_Enemy;
static integer cur_tele_trigger;
static integer cur_tele_trigger2;
static integer cur_eye_Target;
static integer nDmgHero;
static integer nDmgEnemy;
static locpoint PlayerStart;
static locpoint LookLoc;
static integer DROP_OFFS_Y;
static locpoint Dummy_HellPoint;
static integer nStageNumber;
static integer nTemp1;
static integer nTemp2;
static integer nTemp3;
static integer nTemp4;
static real fDyingBegin;
static integer nPlayerPaused;
static integer nEnemyPaused;
static locpoint loc_1;
static locpoint loc_2;
static locpoint loc_3;
static locpoint loc_boss;
static locpoint loc_b1;
static integer n30notified;
static integer n60notified;
static integer nLastNotified;
function SetBotLevel(ObjectID obj, integer bot_level);
var
real minDelay; // Minimum amount of time I will wait between shots once a weapon is reloaded
real maxDelay; // Maximum amount of time I will wait between shots once a weapon is reloaded
integer isShotRadius; // How far away from me will I detect an enemy shot?
integer mood; // mood.
integer piloting; // Piloting skill
integer gunnery; // Gunnery skill/chance to hit
integer eliteLevel; // Elite level. This helps determine tactics, defensive manuevers, opportunity fire
integer attackThrottle; // My attack throttle
Boolean EnablePWRC;
integer minspeed;
code
EnablePWRC = false;
minspeed = 0;
switch(bot_level)
case -1:
minDelay = 10000.0;
maxDelay = 10000.0;
isShotRadius = 1;
mood = DESPERATE_START;
piloting = 0;
gunnery = 0;
eliteLevel = 0;
attackThrottle = 1;
EnablePWRC = false;
endcase;
case 0: // WussyBot.abl
minDelay = 3.0;
maxDelay = 8.0;
isShotRadius = 120;
mood = DEFENSIVE_START;
piloting = 0;
gunnery = 0;
eliteLevel = 0;
attackThrottle = 36;
EnablePWRC = true;
endcase;
case 1: // EasyBot.abl
minDelay = 2.0;
maxDelay = 6.0;
isShotRadius = 160;
mood = DEFENSIVE_END;
piloting = 10;
gunnery = 15;
eliteLevel = 0;
attackThrottle = 50;
endcase;
case 2: // RookieSniperBot.abl
minDelay = 2.0;
maxDelay = 6.0;
isShotRadius = 160;
mood = NEUTRAL_START;
piloting = 80;
gunnery = 10;
eliteLevel = 30;
attackThrottle = 90;
endcase;
case 3: // DodgeBot.abl
minDelay = 1.0;
maxDelay = 4.0;
isShotRadius = 160;
mood = NEUTRAL_START;
piloting = 10;
gunnery = 60;
eliteLevel = 30;
attackThrottle = 36;
endcase;
case 4: // RookieBot.abl
minDelay = 1.0;
maxDelay = 4.0;
isShotRadius = 120;
mood = NEUTRAL_START;
piloting = 30;
gunnery = 35;
eliteLevel = 30;
attackThrottle = 60;
endcase;
case 5: // RookieDodgeBot.abl
minDelay = 1.0;
maxDelay = 4.0;
isShotRadius = 160;
mood = NEUTRAL_START;
piloting = 90;
gunnery = 50;
eliteLevel = 60;
attackThrottle = 100;
endcase;
case 6: // SniperBot.abl
minDelay = 0.0;
maxDelay = 2.5;
isShotRadius = 160;
mood = NEUTRAL_START;
piloting = 75;
gunnery = 110;
eliteLevel = 60;
attackThrottle = 60;
endcase;
case 7: // KillerBot.abl
minDelay = 0.0;
maxDelay = 2.5;
isShotRadius = 160;
mood = NEUTRAL_END;
piloting = 80;
gunnery = 90;
eliteLevel = 80;
attackThrottle = 85;
endcase;
case 8: // SlaughterBot.abl
minDelay = 0.0;
maxDelay = 1.0;
isShotRadius = 160;
mood = AGRESSIVE_START;
piloting = 90;
gunnery = 110;
eliteLevel = 90;
attackThrottle = 95;
minspeed = 50;
endcase;
case 9: // UberBot.abl
minDelay = 0.0;
maxDelay = 0.0;
isShotRadius = 200;
mood = BRUTAL_START;
piloting = 100;
gunnery = 999;
eliteLevel = 100;
attackThrottle = 100;
EnablePWRC = true;
endcase;
endswitch;
SetFiringDelay (obj,minDelay,maxDelay);
SetIgnoreFriendlyFire (obj,true);
SetIsShotRadius (obj,isShotRadius);
SetEntropyMood (obj,mood);
SetCurMood (obj,mood);
SetSkillLevel (obj,piloting,gunnery,eliteLevel);
SetAttackThrottle (obj,attackThrottle);
EnablePerWeaponRayCasting(obj,EnablePWRC);
if (minspeed <> 0) then
SetMinSpeed(obj,minspeed);
endif;
endfunction;
function init;
var
integer i;
code
nStageNumber = GetCOOP(-1);
//SetupScoring_Attrition;
SetFlagsEnabled(FLAGS_HIDE);
SetCustomBucketName("Campaign: s1s1");
//SetCustomBucketNameIndex(843);
//AddStandardBuckets;
TrackBucket(Bucket_KILLS,0,true);
TrackBucket(Bucket_DEATHS,0,true);
TrackBucket(Bucket_CUSTOM,0,true);
AddCustomBucketParameter(Bucket_ENEMY_DAMAGE_INFLICT,1);
AddCustomBucketParameter(Bucket_FRIENDLY_DAMAGE_INFLICT,-1);
AddCustomBucketParameter(Bucket_ENEMY_KILLS,500);
AddCustomBucketParameter(Bucket_FRIENDLY_KILLS,-500);
AddCustomBucketParameter(Bucket_SUICIDES,-500);
AddCustomBucketParameter(Bucket_ENEMY_KILLS_BY_TONNAGE,5);
AddCustomBucketParameter(Bucket_ENEMY_COMPONENT_KILLS,50);
AddCustomBucketParameter(Bucket_FRIENDLY_COMPONENT_KILLS,-50);
DROP_OFFS_Y = 300;
group_player = GroupObjectId(1);
group_1 = GroupObjectId(11);
group_2 = GroupObjectId(22);
group_3 = GroupObjectId(33);
group_boss = GroupObjectId(44);
group_b1org = GroupObjectId(55);
group_b1 = GroupObjectId(56);
group_b1blds = GroupObjectId(57);
playermech = getplayervehicle(epl_player0);
GetLocation(playermech,PlayerStart); // for stage 1 & 3
PlayerStart[1] = PlayerStart[1] + 1;
GroupAddObject(group_player,playermech);
GroupAddObject(group_1,eve_s1m1);
GroupAddObject(group_1,eve_s1m2);
GroupAddObject(group_1,eve_s1m3);
SetBotLevel(eve_s1m1,3);
SetBotLevel(eve_s1m2,3);
SetBotLevel(eve_s1m3,3);
//* stage 2 only - begine
GroupAddObject(group_1,etu_s1t1);
GroupAddObject(group_1,etu_s1t2);
GroupAddObject(group_1,etu_s1t3);
GroupAddObject(group_1,etu_s1t4);
//*/ // stage 2 only - end
SetGroupAI(group_1,GROUPAI_MOODSQUAD);
GroupAddObject(group_2,eve_s2m1);
GroupAddObject(group_2,eve_s2m2);
//* stage 2 only - begine
GroupAddObject(group_2,etu_s2w1);
GroupAddObject(group_2,etu_s2w2);
//*/ // stage 2 only - end
GroupAddObject(group_2,eve_s2m3);
GroupAddObject(group_2,eve_s2m4);
GroupAddObject(group_2,eve_s2m5);
//* stage 2 only - begine
GroupAddObject(group_2,etu_s2w3);
GroupAddObject(group_2,etu_s2w4);
//*/ // stage 2 only - end
SetBotLevel(eve_s2m1,0);
SetBotLevel(eve_s2m2,2);
SetBotLevel(eve_s2m3,2);
SetBotLevel(eve_s2m4,3);
SetBotLevel(eve_s2m5,4);
SetGroupAI(group_2,GROUPAI_MOODSQUAD);
GroupAddObject(group_3,eve_s3m1);
GroupAddObject(group_3,eve_s3m2);
GroupAddObject(group_3,eve_s3m3);
GroupAddObject(group_3,eve_s3m4);
GroupAddObject(group_3,eve_s3m5);
GroupAddObject(group_3,eve_s3m6);
GroupAddObject(group_3,eve_s3m7);
//* stage 2 only - begine
GroupAddObject(group_3,etu_s3w1);
GroupAddObject(group_3,etu_s3w2);
GroupAddObject(group_3,etu_s3w3);
GroupAddObject(group_3,etu_s3w4);
GroupAddObject(group_3,etu_s3w5);
GroupAddObject(group_3,etu_s3w6);
//*/ // stage 2 only - end
SetBotLevel(eve_s3m1,1);
SetBotLevel(eve_s3m2,2);
SetBotLevel(eve_s3m3,2);
SetBotLevel(eve_s3m4,2);
SetBotLevel(eve_s3m5,3);
SetBotLevel(eve_s3m6,4);
SetBotLevel(eve_s3m7,5);
SetGroupAI(group_3,GROUPAI_MOODSQUAD);
GroupAddObject(group_boss,eve_boss);
//* stage 1&2 only - begine
GroupAddObject(group_b1org, eve_b1m1);
GroupAddObject(group_b1org, eve_b1m2);
GroupAddObject(group_b1org, eve_b1m3);
GroupAddObject(group_b1org, eve_b1m4);
GroupAddObject(group_b1org, eve_b1m5);
GroupAddObject(group_b1org, eve_b1m6);
GroupAddObject(group_b1org, eve_b1m7);
GroupAddObject(group_b1org, eve_b1m8);
GroupAddObject(group_b1blds, ebu_b1b1);
GroupAddObject(group_b1blds, ebu_b1b2);
GroupAddObject(group_b1blds, ebu_b1b3);
GroupAddObject(group_b1blds, ebu_b1b4);
GroupAddObject(group_b1blds, ebu_b1b5);
GroupAddObject(group_b1blds, ebu_b1b6);
GroupAddObject(group_b1blds, ebu_b1b7);
GroupAddObject(group_b1blds, ebu_b1b8);
if (nStageNumber == 1) then
RandSelect(group_b1, group_b1blds, -8);
RandSelect(group_b1, group_b1org, -5); // move 5 mechs from b1org to b1
else
SetDmgModifier(group_b1blds, 0, 1);
RandSelect(group_b1, group_b1org, -8); // move 8 mechs from b1org to b1
endif;
//*/ // stage 1&2 only - end
//* stage 2 only - begine
SetBotLevel(eve_b1m1,-1);
SetBotLevel(eve_b1m2,-1);
SetBotLevel(eve_b1m3,-1);
SetBotLevel(eve_b1m4,-1);
SetBotLevel(eve_b1m5,-1);
SetBotLevel(eve_b1m6,-1);
SetBotLevel(eve_b1m7,-1);
SetBotLevel(eve_b1m8,-1);
//*/ // stage 2 only - end
//* stage 2 only - begine
SetMemoryInteger(group_b1, 28, epa_jumppath);
//*/ // stage 2 only - end
switch nStageNumber
case 1:
SetBotLevel(eve_boss,7);
endcase;
case 2:
SetBotLevel(eve_boss,8);
endcase;
case 3:
SetBotLevel(eve_boss,9);
endcase;
endswitch;
SetGroupAI(group_boss,GROUPAI_MOODSQUAD);
SetMemoryInteger(group_1, 31, 11);
SetMemoryInteger(group_1, 30, 21);
SetMemoryInteger(group_1, 29, 0);
SetMemoryInteger(group_2, 31, 12);
SetMemoryInteger(group_2, 30, 22);
SetMemoryInteger(group_2, 29, 0);
SetMemoryInteger(group_3, 31, 13);
SetMemoryInteger(group_3, 30, 23);
SetMemoryInteger(group_3, 29, 0);
SetMemoryInteger(group_boss, 31, 14);
SetMemoryInteger(group_boss, 30, 24);
SetMemoryInteger(group_boss, 29, 0);
SetMemoryInteger(eve_boss, 29, 1);
//* stage 1&2 only - begine
SetMemoryInteger(group_b1, 31, 15);
SetMemoryInteger(group_b1, 30, 25);
SetMemoryInteger(group_b1, 29, 0);
SetMemoryInteger(group_b1org, 31, 19);
SetMemoryInteger(group_b1org, 30, 29);
SetMemoryInteger(group_b1org, 29, 0);
SetMemoryInteger(group_b1blds, 31, 15);
SetMemoryInteger(group_b1blds, 30, 25);
SetMemoryInteger(group_b1blds, 29, 0);
//*/ // stage 1&2 only - end
cinema_cut = 0;
old_stage = -1; // should be
old_group_Enemy = -1; // should be
cur_stage = -1; // should be
new_stage = 1; // could be 1...end-state // TEST ROUTINE
cur_objective = -1; // should be
new_objective = -1; // could be 1...s1..boss
cur_obj_time = 120;
cur_end_time = 0;
group_Enemy = NO_UNIT;
cur_tele_trigger = -1;
cur_tele_trigger2 = -1;
cur_eye_Target = NO_UNIT; // ena_eye_point;
nDmgHero = 10000;
nDmgEnemy = 10000;
nPlayerPaused = 0;
nEnemyPaused = -1;
SetInputTypeEnabled(65535, true);
// store group position & teleport to hell alll
GetLocation(group_1, loc_1);
GetLocation(group_2, loc_2);
GetLocation(group_3, loc_3);
GetLocation(group_boss, loc_boss);
//* stage 1&2 only - begine
GetLocation(eve_b1m1, loc_b1); // GetLocation(group_b1, loc_b1);
//*/ // stage 1&2 only - end
endfunction;
function set_dmgfactors;
code
// default damage type
SetDmgModifier(epl_player0, 0, nDmgHero); // 500000
SetDmgModifier(group_Enemy, 0, nDmgEnemy);
// splash damage type
SetDmgModifier(epl_player0, 1, 1); // nDmgHero / 5
SetDmgModifier(group_Enemy, 1, 1); // nDmgEnemy / 5
/* for stage end testing - begin
SetDmgModifier(epl_player0, 0, 1);
SetDmgModifier(group_Enemy, 0, 1000000);
// splash damage type
SetDmgModifier(epl_player0, 1, 1);
SetDmgModifier(group_Enemy, 1, 1000000);
*/ // for stage end testing - end
endfunction;
function player_pause;
code
if (nPlayerPaused == 0) then
nPlayerPaused = 1;
playerai(epl_player0,true);
//PauseTimer(gti_timer_7, false);
//ShowTimer(gti_timer_7, 0, 0, FALSE, 0, FALSE);
endif;
endfunction;
function player_restart;
code
if (nPlayerPaused == 1) then
nPlayerPaused = 0;
//PauseTimer(gti_timer_7, true);
//ShowTimer(gti_timer_7, 0, cur_obj_time, FALSE, MakeColor(255, 255, 255, 0), TRUE);
playerai(epl_player0,false);
endif;
endfunction;
function enemy_pause;
code
if (nEnemyPaused == -1) then
nEnemyPaused = group_Enemy;
StopExecute(nEnemyPaused);
SetAlwaysIgnoreObstacles(TRUE);
SetSensorVisibility(nEnemyPaused, FALSE);
endif;
endfunction;
function enemy_restart;
code
if (nEnemyPaused <> -1) then
SetSensorVisibility(nEnemyPaused, TRUE);
SetAlwaysIgnoreObstacles(FALSE);
StartExecute(nEnemyPaused);
nEnemyPaused = -1;
endif;
endfunction;
function set_mission_notifies;
code
if 60 <= cur_obj_time then
n30notified = 0;
n60notified = 0;
else
n60notified = 1;
if 30 <= cur_obj_time then
n30notified = 0;
else
n30notified = 1;
endif;
endif;
nLastNotified = 0;
endfunction;
//------------------------------------------------------------------
//
// Main Code
//
//------------------------------------------------------------------
state startState;
code
//enableglobalinvulnerable; // for testing...
//playsound(eso_start);
//setactivationdistance(6800);
//trans opening;
trans sit;
endstate;
state deadState;
code
endstate;
//------------------------------------------------------------------
//
// Sit state : description
//
//------------------------------------------------------------------
state sit;
code
//Fail the mission when the player dies
if (cur_stage <> new_stage) then
player_pause;
if (old_stage <> -1) then
SetCOOP(COOP_MODAL_START, 2);
enemy_pause;
trans q_score;
else
TeleportToHell(group_1);
TeleportToHell(group_2);
TeleportToHell(group_3);
TeleportToHell(group_boss);
//* stage 1&2 only - begine
TeleportToHell(group_b1);
TeleportToHell(group_b1org);
TeleportToHell(group_b1blds);
//*/ // stage 1&2 only - end
endif;
cur_stage = new_stage;
SetCOOP(COOP_SUBSTAGE_NUMBER, new_stage);
cur_objective = new_objective;
//Reveal the objectives
switch new_stage
case 1:
group_Enemy = group_1;
LookLoc = loc_1;
GetLocation(edr_dz_s1,PlayerStart);
RespawnPosition(-1, edr_dz_s1);
PlayerStart[1] = PlayerStart[1] + DROP_OFFS_Y;
cur_eye_Target = eve_s1m1; // group_Enemy;
cur_obj_time = 120;
nDmgHero = 600 + (nStageNumber * 100);
nDmgEnemy = 50000;
cur_tele_trigger = 11;
cur_tele_trigger2 = 21;
endcase;
case 2:
group_Enemy = group_2;
LookLoc = loc_2;
GetLocation(edr_dz_s2,PlayerStart);
RespawnPosition(-1, edr_dz_s2);
//no drop - PlayerStart[1] = PlayerStart[1] + DROP_OFFS_Y;
cur_eye_Target = eve_s2m1; // group_Enemy;
cur_obj_time = 120;
nDmgHero = 700 + (nStageNumber * 100);
nDmgEnemy = 50000;
cur_tele_trigger = 12;
cur_tele_trigger2 = 22;
endcase;
case 3:
group_Enemy = group_3;
LookLoc = loc_3;
GetLocation(edr_dz_s3,PlayerStart);
RespawnPosition(-1, edr_dz_s3);
//no drop - PlayerStart[1] = PlayerStart[1] + DROP_OFFS_Y;
cur_eye_Target = eve_s3m3; // group_Enemy;
cur_obj_time = 180;
nDmgHero = 800 + (nStageNumber * 100);
nDmgEnemy = 50000;
cur_tele_trigger = 13;
cur_tele_trigger2 = 23;
endcase;
case 4:
group_Enemy = group_boss;
LookLoc = loc_boss;
GetLocation(edr_dz_boss,PlayerStart);
RespawnPosition(-1, edr_dz_boss);
//no drop - PlayerStart[1] = PlayerStart[1] + DROP_OFFS_Y;
cur_eye_Target = eve_boss; // group_Enemy;
cur_obj_time = 60;
nDmgHero = 3000 + (nStageNumber * 1500);
nDmgEnemy = 15000;
cur_tele_trigger = 14;
cur_tele_trigger2 = 24;
endcase;
case 5:
//* stage 1&2 only - begine
group_Enemy = group_b1;
LookLoc = loc_b1;
GetLocation(edr_dz_b1,PlayerStart);
RespawnPosition(-1, edr_dz_boss);
//no drop - PlayerStart[1] = PlayerStart[1] + DROP_OFFS_Y;
cur_eye_Target = eve_b1m1; // group_Enemy;
cur_obj_time = 45; // TEST ROUTINE
nDmgHero = 1000;
nDmgEnemy = 2000000;
cur_tele_trigger = 15;
cur_tele_trigger2 = 25;
//*/ // stage 1&2 only - end
endcase;
endswitch;
set_dmgfactors;
resettimer(gti_timer_6);
resettimer(gti_timer_7);
set_mission_notifies;
//ShowTimer(gti_timer_7, 0, cur_obj_time, FALSE, MakeColor(255, 255, 255, 0), TRUE);
SetCOOP(COOP_SUBSTAGE_TIMEGOAL, cur_obj_time);
cur_end_time = 0;
SetCOOP(COOP_ENEMY_GROUP, group_Enemy); // valid enemy group
SetGlobalTrigger(cur_tele_trigger, true);
cinema_cut = 0;
/*
PlayEffect(ede_eff_boss);
PlayEffect(ede_eff_a);
PlayEffect(ede_eff_b);
PlayEffect(ede_eff_c);
PlayEffect(ede_eff_d);
resettimer(gti_timer_10);
*/
if (old_stage == -1) then
teleportAndLook(playermech, LookLoc, 1 + 2, PlayerStart);
endif;
enemy_pause;
trans opening;
endif;
/*
if (timegreater(gti_timer_10,7)) then
resettimer(gti_timer_10);
setTimer(gti_timer_10, 0);
killtimer(gti_timer_10);
KillEffect(ede_eff_d);
KillEffect(ede_eff_c);
KillEffect(ede_eff_b);
KillEffect(ede_eff_a);
KillEffect(ede_eff_boss);
endif;
*/
if (cur_stage <> -1) then
if n60notified <> 0 then
if n30notified <> 0 then
if timegreater(gti_timer_7,cur_obj_time - 10) then
if (not (nLastNotified <> 0)) or ((IGetTime - nLastNotified) >= 1000) then
PlaySoundStr("cmp_incoming_missile.wav{handle}");
nLastNotified = IGetTime;
endif;
endif;
else
if timegreater(gti_timer_7,cur_obj_time - 30) then
PlaySoundStr("vo\created\end30.wav{handle}"); // no \\
n30notified = 1;
endif;
endif;
else
if timegreater(gti_timer_7,cur_obj_time - 60) then
PlaySoundStr("vo\created\end60.wav{handle}"); // no \\
n60notified = 1;
endif;
endif;
if ((GroupNumDead(group_Enemy) < GroupSize(group_Enemy)) AND timegreater(gti_timer_7,cur_obj_time)) then
killtimer(gti_timer_7);
setTimer(gti_timer_7, 0);
if 5 <= cur_stage then
// bnus stage...
trans sub_stage_end;
else
SelfDestruct(playermech);
endif;
endif;
if isdead(playermech) then
// failobjectiveall(5); // stay 5 seconds...
fDyingBegin = GetTime + 4.0;
trans q_continue_after_dying;
else
if (GroupSize(group_Enemy) <= GroupNumDead(group_Enemy)) then
if (cur_end_time <= 0) then
resettimer(gti_timer_8);
setTimer(gti_timer_8, 0);
starttimer(gti_timer_8);
cur_end_time = 6
else
if (timegreater(gti_timer_8,cur_end_time)) then
trans sub_stage_end;
endif;
endif;
endif;
endif;
endif;
endstate;
state opening;
code
if (IsWithinLocPoint(group_Enemy, Dummy_HellPoint, -100) == false) then
getlocation(group_Enemy, LookLoc);
if (cur_stage == 1) then
teleportAndLook(playermech, LookLoc, 1 + 2, PlayerStart); // NO_UNIT
else
teleportAndLook(playermech, LookLoc, 0 + 2, PlayerStart); // NO_UNIT
endif;
SetGlobalTrigger(cur_tele_trigger2, true);
switch cur_stage
case 1:
//SetBoundsFromPaths(epa_mb_path, -1);
if (0 < DROP_OFFS_Y) then
Drop(playermech);
PlayerStart[1] = PlayerStart[1] - DROP_OFFS_Y;
endif;
endcase;
case 2:
//RestoreOriginalBounds;
endcase;
case 3:
//SetBoundsFromPaths(epa_mb_path, -1);
endcase;
case 4:
endcase;
endswitch;
if (cur_objective <> -1) then
RevealObjective(cur_objective);
HelpMessage(cur_objective, 10);
endif;
SetCOOP(COOP_MODAL_START, 1);
trans q_briefing;
trans sub_stage_start;
endif;
endstate;
state sub_stage_start;
code
player_restart;
enemy_restart;
//SelfDestruct(group_Enemy); // for stage end testing
trans sit;
endstate;
state sub_stage_end;
code
old_stage = cur_stage;
old_group_Enemy = group_Enemy;
SetCOOP(COOP_ENEMY_GROUP_OLD, old_group_Enemy); // for scoring...
KillTimer(gti_timer_6);
KillTimer(gti_timer_7);
switch cur_stage
case 1:
new_stage = 2;
//new_objective = eob_kill_boss;
endcase;
case 2:
new_stage = 3;
//new_objective = eob_s3;
endcase;
case 3:
new_stage = 4;
//new_objective = eob_kill_boss;
endcase;
case 4:
if nStageNumber <> 3 then
new_stage = 5;
else
new_stage = 99;
endif;
//new_objective = -1;
endcase;
case 5:
new_stage = 99;
//new_objective = -1;
endcase;
endswitch;
trans sit;
endstate;
state q_briefing;
code
nTemp1 = GetCOOP(COOP_MODAL_IS_ENDED);
if (nTemp1 <> 0) then
SetCOOP(COOP_MODAL_START, 0); // COOP_MODAL_IS_ENDED is resetted as 0 too
trans sub_stage_start;
endif;
endstate;
state q_score;
code
nTemp1 = GetCOOP(COOP_MODAL_IS_ENDED);
if (nTemp1 <> 0) then
SetCOOP(COOP_MODAL_START, 0); // COOP_MODAL_IS_ENDED is resetted as 0 too
if (new_stage == 99) then
SuccessObjectiveAll(0); // stay 0 seconds..
trans won;
else
enemy_restart;
old_stage = -1;
trans sit;
endif;
endif;
endstate;
state q_continue_after_dying;
code
if (fDyingBegin <= GetTime) then
SetCOOP(COOP_MODAL_START, 3);
player_pause;
trans q_continue;
endif;
endstate;
state q_continue;
code
nTemp1 = GetCOOP(COOP_MODAL_IS_ENDED);
if (nTemp1 <> 0) then
SetCOOP(COOP_MODAL_START, 0); // COOP_MODAL_IS_ENDED is resetted as 0 too
if (0 < nTemp1) then
resettimer(gti_timer_7);
set_mission_notifies;
getlocation(group_Enemy, LookLoc);
teleportAndLook(playermech, LookLoc, 0 + 2, PlayerStart); // NO_UNIT
player_restart;
set_dmgfactors;
trans sit;
else
failobjectiveall(0);
trans lost;
endif;
endif;
endstate;
state won;
code
switch cinema_cut
case 0:
endcase;
case 1:
endcase;
endswitch;
endstate;
state lost;
code
switch cinema_cut
case 0:
endcase;
case 1:
endcase;
endswitch;
endstate;
endfsm.
//******************************************************************