home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GameStar 2006 April
/
Gamestar_83_2006-04_dvd.iso
/
Dema
/
demowot_english.exe
/
Script
/
Source
/
Chapter3
/
MS9-C3L1.sma
< prev
Wrap
Text File
|
2005-03-11
|
37KB
|
1,226 lines
#include "script.inc"
#include "visualeffects.inc"
#include "antiair.inc"
#define max_run_once 5
#define purple_wpnum 4
#define red_wpnum 4
#define black_wpnum 3
#define brown_wpnum 4
#define green_wpnum 8
#define pink_wpnum 4
#define orange_wpnum 5
#define blue_wpnum 4
#define yellow_wpnum 5
//Global params
new bool:RunOnce[max_run_once];
new bool:gReconIsDead = false;
new bool:g3FlagCaptured = false;
new bool:gMainForceDead = false;
new bool:gOfficerDied = false;
new Float:gRetreatDelay = 20.0;
new DelayedTime;
//ways
new gLinePurple[purple_wpnum][6] = {{"wpr1"},{"wpr2"},{"wpr3"},{"wpr4"}};
new gLineRed[red_wpnum][6] = {{"wpr5"},{"wpr6"},{"wpr7"},{"wpr8"}};
new gLineBlack[black_wpnum][6] = {{"wpr9"},{"wpr10"},{"wpr11"}};
new gLineBrown[brown_wpnum][6] = {{"wpr12"},{"wpr13"},{"wpr14"},{"wpr15"}};
new gLineGreen[green_wpnum][6] = {{"wpr16"},{"wpr17"},{"wpr18"},{"wpr19"},{"wpr20"},{"wpr21"},{"wpr22"},{"wpr23"}};
new gLinePink[pink_wpnum][6] = {{"wpr24"},{"wpr25"},{"wpr26"},{"wpr27"}};
new gLineOrange[orange_wpnum][6] = {{"wpr28"},{"wpr29"},{"wpr30"},{"wpr31"},{"wpr32"}};
new gLineBlue[blue_wpnum][6] = {{"wpr33"},{"wpr34"},{"wpr35"},{"wpr36"}};
new gLineYellow[yellow_wpnum][6] = {{"wpr38"},{"wpr39"},{"wpr40"},{"wpr41"},{"wpr42"}};
enum eWay
{
purple = 1,
red = 2,
black = 3,
brown = 4,
green = 5,
pink = 6,
orange = 7,
blue = 8,
yellow = 9
};
//speeches
new iMS09_SP001[]="#iMS09_SP001#";
new iMS09_SP002[]="#iMS09_SP002#";
new iMS09_SP003[]="#iMS09_SP003#";
new iMS09_SP004[]="#iMS09_SP004#";
new iMS09_SP005[]="#iMS09_SP005#";
new iMS09_SP006[]="#iMS09_SP006#";
new iMS09_SP007[]="#iMS09_SP007#";
new iMS09_SP008[]="#iMS09_SP008#";
new iMS09_SP009[]="#iMS09_SP009#";
//soundfiles
new gSoundFile1[] = "Sounds\\Game\\Speech\\Mission\\MS09_SP001.mp3";
new gSoundFile2[] = "Sounds\\Game\\Speech\\Mission\\MS09_SP002.mp3";
new gSoundFile3[] = "Sounds\\Game\\Speech\\Mission\\MS09_SP003.mp3";
new gSoundFile4[] = "Sounds\\Game\\Speech\\Mission\\MS09_SP004.mp3";
new gSoundFile5[] = "Sounds\\Game\\Speech\\Mission\\MS09_SP005.mp3";
new gSoundFile6[] = "Sounds\\Game\\Speech\\Mission\\MS09_SP006.mp3";
new gSoundFile7[] = "Sounds\\Game\\Speech\\Mission\\MS09_SP007.mp3";
new gSoundFile8[] = "Sounds\\Game\\Speech\\Mission\\MS09_SP008.mp3";
new gSoundFile9[] = "Sounds\\Game\\Speech\\Mission\\MS09_SP009.mp3";
//============================================================================================================================
public main()
CommonAKMain();
//============================================================================================================================
public PostGameStart()
{
CommonAKInit();
ScenarioMode();
Add2GermanGroup();
forbidden_grp_num = 3;
gForbiddenGroups[0] = "grp_reconz";
gForbiddenGroups[1] = "grp_hidden";
gForbiddenGroups[1] = "grp_mainforce";
for(new counter = 0; counter <= max_run_once-1; counter++)
{
RunOnce[counter] = false;
}
SetNationality("grp_canadian", "Canadian");
SetNationality("grp_intro", "Canadian");
SetNationality("grp_usa", "American");
SetNationality("grp_intro2", "American");
SetSpeedInSelector( "SelectorTeam2", 5.0 );
FormationMoveToEnt("grp_intro",GetEntity("wp_intro_arrive"),Q_OVERRIDE, MF_DIRECT+MF_OVERRUN);
SetBehav( "grp_melegek",
MB_MOVE_IN_VICINITY,
FB_FIRE_AT_WILL,
UB_EVAC,
DB_UNMODIFIED,
MOB_WHEN_ENEMY_SEEN,
MTP_ATTACK);
SetBehav( "grp_west",
MB_MOVE_IN_VICINITY,
FB_FIRE_AT_WILL,
UB_EVAC,
DB_UNMODIFIED,
MOB_NEVER,
MTP_ATTACK);
SetBehav( "grp_east",
MB_MOVE_IN_VICINITY,
FB_FIRE_AT_WILL,
UB_EVAC,
DB_UNMODIFIED,
MOB_NEVER,
MTP_ATTACK);
CmdGroupSetFB( "grp_emptypanzerz", Q_OVERRIDE, FB_FIRE_AT_WILL, SFBF_EMPTY );
CmdGroupSetMB( "grp_emptypanzerz", Q_OVERRIDE, MB_MOVE_IN_VICINITY, SMBF_EMPTY );
SetBehav( "grp_panzerz",
MB_MOVE_IN_VICINITY,
FB_FIRE_AT_WILL,
UB_EVAC);
SetBehav( "grp_patrol",
MB_MOVE_FREELY,
FB_FIRE_AT_WILL,
UB_EVAC,
DB_UNMODIFIED);
SetBehav( "grp_heavypz",
MB_MOVE_FREELY,
FB_FIRE_AT_WILL,
UB_EVAC,
DB_UNMODIFIED);
SetBehav( "grp_repairz",
MB_MOVE_IN_VICINITY,
FB_HOLD_FIRE,
UB_EVAC);
SetBehav( "grp_radiocarz",
MB_HOLD_POSITION,
FB_HOLD_FIRE,
UB_EVAC);
SetBehav( "grp_hidden",
MB_MOVE_FREELY,
FB_FIRE_AT_WILL,
UB_NEVER,
DB_UNMODIFIED,
MOB_UNMODIFIED,
MTP_DEFEND);
GermanSoldierBehav("SelectorTeam1");
switch(GetDifficulty())
{
case 0:
{
DelayedTime = 15;
}
case 3:
{
DelayedTime = 5;
}
default:
{
DelayedTime = 10;
}
}
Intro();
HackAntiAirInit();
// User Events
AddUserEvent( "GroupEliminated", UE_GROUPELIM_SUCC );
AddUserEvent( "TeamEliminated", UE_TEAMELIM_SUCC );
AddUserEvent( "ObjectiveChanged", UE_OBJECTIVE_CHANGED);
// code events
AddAKEntityEvent( "MineExploded", ANY_ENTITY, MINE_EXPLODE );
AddAKEntityEvent( "ShowTheStat", ANY_ENTITY, TEST_EVENT );
AddAKEntityEvent( "HQCaptured", ANY_ENTITY, HQ_TAKEOVER );
AddAKEntityEvent( "CommandpostTeamchanged", GetEntity( "commandpost" ), UNIT_TEAM_CHANGED );
AddAKEntityEvent( "CommandPostDestroyed", GetEntity( "commandpost" ), UNIT_DIED );
// AddAKEntityEvent( "UnitAreaEnter", ANY_ENTITY, UNIT_AREA_ENTER );
// AddAKEntityEvent( "UnitAreaExit", ANY_ENTITY, UNIT_AREA_EXIT );
AddAKEntityEvent( "WreckDestruct", ANY_ENTITY, UNIT_DIED );
AddAKSelectorEvent( "UnmountWestGroup", "grp_west", UNIT_ENEMY_SEEN );
AddAKSelectorEvent( "UnmountEastGroup", "grp_east", UNIT_ENEMY_SEEN );
AddAKSelectorEvent( "UnmountWestGroup", "grp_west", UNIT_HIT );
AddAKSelectorEvent( "UnmountEastGroup", "grp_east", UNIT_HIT );
AddAKSelectorEvent( "UnmountWestGroup", "grp_westpanzerz", UNIT_HIT );
AddAKSelectorEvent( "UnmountEastGroup", "grp_eastvehiclez", UNIT_HIT );
AddAKSelectorEvent( "GermanVehicleTeamChanged", "grp_German", UNIT_TEAM_CHANGED );
// AddAKEntityEvent( "Outro", ANY_ENTITY, TEST_EVENT );
// add objectives
AddObjective( "PRI_1", OT_PRIMARY, "#iMS09_PS01#", "#iMS09_PL01#", OS_SLEEPING );
AddObjective( "PRI_2", OT_PRIMARY, "#iMS09_PS02#", "#iMS09_PL02#", OS_SLEEPING );
AddObjective( "SEC_1", OT_SECONDARY, "#iMS09_SS01#", "#iMS09_SL01#", OS_SLEEPING );
AddObjective( "HID_1", OT_HIDDEN, "#iMS09_HS01#", "#iMS09_HL01#", OS_SLEEPING );
}
//============================================================================================================================
public TeamEliminated( Team )
{
new ID = GetMsgParamInt();
if(ID == 10)
{
if(GetObjectiveState( "PRI_1" ) == OS_IN_PROGRESS)
SetObjectiveState( "PRI_1", OS_FAILED );
if(GetObjectiveState( "PRI_2" ) == OS_IN_PROGRESS)
SetObjectiveState( "PRI_2", OS_FAILED );
if(GetObjectiveState( "SEC_1" ) == OS_IN_PROGRESS)
SetObjectiveState( "SEC_1", OS_FAILED );
SetCutScene(true, true, true);
BulletTime(GetLastKilledEntity(), false);
AddUserEvent( "Defeat", UE_BULLETTIME_END );
}
if(ID == 20 && RunOnce[1] == false)
{
RunOnce[1] = true;
if(GetDifficulty() == 0)
Reinforcement( "help_to_easy", GetEntity( "deploy1" ), GetEntity( "start1" ));
}
}
public GroupEliminated()
{
new ID = GetMsgParamInt();
if(ID == 10)
{
DebugMessage( "A felderitok megpusztultak", DL_MESSAGE );
if( gMainForceDead == false &&
GetPropertyInt( GetEntity( "hq_north" ), "Team" ) == gPlayerTeam &&
GetPropertyInt( GetEntity( "hq_west" ), "Team" ) == gPlayerTeam &&
GetPropertyInt( GetEntity( "hq_east" ), "Team" ) == gPlayerTeam)
{
AddTimerEvent( "Retreat", gRetreatDelay, "GameLogic", true );
AddSoundMessage(iMS09_SP005, gSoundFile5);
AddSoundMessage(iMS09_SP006, gSoundFile6);
AddSoundMessage(iMS09_SP008, gSoundFile8);
AddSoundMessage(iMS09_SP009, gSoundFile9);
SetObjectiveState( "PRI_2", OS_IN_PROGRESS );
Reinforcement( "left_reinf", GetEntity( "deploy1" ), GetEntity( "start1" ) );
Reinforcement( "right_reinf", GetEntity( "deploy2" ), GetEntity( "start2" ) );
SetNationality("reinforce1", "American");
SetNationality("reinforce2", "American");
}
else
gReconIsDead = true;
}
if(ID == 100)
{
DebugMessage( "A Hidden group megpusztult", DL_MESSAGE );
gOfficerDied = true;
}
if(ID == 1000)
{
DebugMessage( "A fo ero elpusztult", DL_MESSAGE );
gMainForceDead = true;
if(g3FlagCaptured == true && GetPropertyInt( GetEntity( "hq_base" ), "Team" ) == 1)
{
SetObjectiveState( "PRI_1", OS_COMPLETED );
SetObjectiveState( "PRI_2", OS_COMPLETED );
Outro();
}
}
}
//============================================================================================================================
public Intro()
{
static counter = 0;
switch(counter)
{
case 0:
{
SetCutScene(true, true, true);
TeleportCameraToEnt(GetEntity( "wp_introcam" ));
CameraFollow( GetEntity( "wp_introcam" ) );
SetCameraSpeed(1.0);
SetCameraZoomSpeed(3.0);
SetCameraRotSpeed(3.0);
SetCameraActualPitch(45.0);
SetCameraActualRotate(180.0);
SetCameraActualDistance(45.0);
SetCameraTargetPitch(45.0);
SetCameraTargetRotate(180.0);
SetCameraTargetDistance(45.0);
SetCameraTargetPitch(45.0);
SetCameraTargetRotate(269.0);
SetCameraTargetDistance(15.0);
AddAKEntityEvent( "Intro", ANY_ENTITY, CAMERA_TARGET_REACHED );
}
case 1:
{
RemoveEvent( "Intro" );
CameraFollow( GetEntity( "actor" ) );
SetCameraZoomSpeed(1.0);
SetCameraTargetRotate(359.0)
SetCameraTargetDistance(45.0);
AddAKEntityEvent( "Intro", GetEntity( "actor" ), UNIT_ARRIVED );
}
case 2:
{
CameraFollow( DrID:0 );
TeleportCameraToEnt(GetEntity( "actor" ));
AddSoundMessage(iMS09_SP001, gSoundFile1);
AddAKEntityEvent( "Intro", ANY_ENTITY, MESSAGE_END );
SetCameraActualPitch(55.0);
SetCameraActualRotate(-52.0);
SetCameraActualDistance(15.0);
SetCameraTargetPitch(55.0);
SetCameraTargetRotate(-52.0);
SetCameraTargetDistance(15.0);
}
case 3:
{
TeleportCameraToEnt(GetEntity( "actor2" ));
AddSoundMessage(iMS09_SP002, gSoundFile2);
SetCameraActualPitch(59.0);
SetCameraActualRotate(-16.0);
SetCameraActualDistance(15.0);
SetCameraTargetPitch(59.0);
SetCameraTargetRotate(-16.0);
SetCameraTargetDistance(15.0);
}
case 4:
{
TeleportCameraToEnt(GetEntity( "actor" ));
AddSoundMessage(iMS09_SP003, gSoundFile3);
SetCameraActualPitch(55.0);
SetCameraActualRotate(0.0);
SetCameraActualDistance(55.0);
SetCameraTargetPitch(55.0);
SetCameraTargetRotate(0.0);
SetCameraTargetDistance(55.0);
}
case 5:
{
SetSpeedInSelector( "SelectorTeam2", 0.0 );
ResetCameraSpeed();
SetCutScene(false);
HQCaptured(DrID:0);
Patrol();
SetObjectiveState( "PRI_1", OS_IN_PROGRESS );
SetObjectiveState( "SEC_1", OS_IN_PROGRESS );
SetObjectiveState( "HID_1", OS_IN_PROGRESS );
SetAirStrike(gPlayerTeam,2);
SetAirRecon(gPlayerTeam,3);
GiveParaTroopers(gPlayerTeam);
}
}
counter++;
}
//============================================================================================================================
stock Move(group[], eWay:way, bool:elore, eQueuing:queue, eMoveFlag:moveflag )
{
switch(way)
{
case 1:
{
if(elore)
{
for(new i = 0; i < purple_wpnum; i++)
CmdGroupMoveToEnt( group, GetEntity( gLinePurple[i] ), queue, moveflag );
}
else
{
for(new i = purple_wpnum-1; i >= 0; i--)
CmdGroupMoveToEnt( group, GetEntity( gLinePurple[i] ), queue, moveflag );
}
}
case 2:
{
if(elore)
{
for(new i = 0; i < red_wpnum; i++)
CmdGroupMoveToEnt( group, GetEntity( gLineRed[i] ), queue, moveflag );
}
else
{
for(new i = red_wpnum-1; i >= 0; i--)
CmdGroupMoveToEnt( group, GetEntity( gLineRed[i] ), queue, moveflag );
}
}
case 3:
{
if(elore)
{
for(new i = 0; i < black_wpnum; i++)
CmdGroupMoveToEnt( group, GetEntity( gLineBlack[i] ), queue, moveflag );
}
else
{
for(new i = black_wpnum-1; i >= 0; i--)
CmdGroupMoveToEnt( group, GetEntity( gLineBlack[i] ), queue, moveflag );
}
}
case 4:
{
if(elore)
{
for(new i = 0; i < brown_wpnum; i++)
CmdGroupMoveToEnt( group, GetEntity( gLineBrown[i] ), queue, moveflag );
}
else
{
for(new i = brown_wpnum-1; i >= 0; i--)
CmdGroupMoveToEnt( group, GetEntity( gLineBrown[i] ), queue, moveflag );
}
}
case 5:
{
if(elore)
{
for(new i = 0; i < green_wpnum; i++)
CmdGroupMoveToEnt( group, GetEntity( gLineGreen[i] ), queue, moveflag );
}
else
{
for(new i = green_wpnum-1; i >= 0; i--)
CmdGroupMoveToEnt( group, GetEntity( gLineGreen[i] ), queue, moveflag );
}
}
case 6:
{
if(elore)
{
for(new i = 0; i < pink_wpnum; i++)
CmdGroupMoveToEnt( group, GetEntity( gLinePink[i] ), queue, moveflag );
}
else
{
for(new i = pink_wpnum-1; i >= 0; i--)
CmdGroupMoveToEnt( group, GetEntity( gLinePink[i] ), queue, moveflag );
}
}
case 7:
{
if(elore)
{
for(new i = 0; i < orange_wpnum; i++)
CmdGroupMoveToEnt( group, GetEntity( gLineOrange[i] ), queue, moveflag );
}
else
{
for(new i = orange_wpnum-1; i >= 0; i--)
CmdGroupMoveToEnt( group, GetEntity( gLineOrange[i] ), queue, moveflag );
}
}
case 8:
{
if(elore)
{
for(new i = 0; i < blue_wpnum; i++)
CmdGroupMoveToEnt( group, GetEntity( gLineBlue[i] ), queue, moveflag );
}
else
{
for(new i = blue_wpnum-1; i >= 0; i--)
CmdGroupMoveToEnt( group, GetEntity( gLineBlue[i] ), queue, moveflag );
}
}
case 9:
{
if(elore)
{
for(new i = 0; i < yellow_wpnum; i++)
CmdGroupMoveToEnt( group, GetEntity( gLineYellow[i] ), queue, moveflag );
}
else
{
for(new i = yellow_wpnum-1; i >= 0; i--)
CmdGroupMoveToEnt( group, GetEntity( gLineYellow[i] ), queue, moveflag );
}
}
}
}
//============================================================================================================================
public SetNationality(group[], nationality[])
{
new Iterator:i = Iterate( group );
while(ItNext(i))
{
new DrID:Unit = ItEntity(i);
SetPropertyString( Unit, "Nationality", nationality );
}
}
//============================================================================================================================
public Victory()
{
RemoveEvent( "Victory" );
SetAlliance( gPlayerTeam, 1, AL_ENEMY );
SetAlliance( 1, gPlayerTeam, AL_ENEMY );
AddDebriefing("#iMISSION09_DB_P#");
if(GetObjectiveState( "SEC_1" ) == OS_COMPLETED)
AddDebriefing("#iMISSION09_DB_S#");
if(GetObjectiveState( "HID_1" ) != OS_COMPLETED)
{
SetObjectiveState( "HID_1", OS_FAILED );
SetGlobalVariable("gvMS09_SecretDocuments", 0);
}
else
AddDebriefing("#iMISSION09_DB_H#");
EndMission( MS_ACCOMPLISHED );
}
public Defeat()
{
RemoveEvent( "Defeat" );
if(GetObjectiveState( "HID_1" ) == OS_IN_PROGRESS)
{
SetObjectiveState( "HID_1", OS_FAILED );
SetGlobalVariable("gvMS09_SecretDocuments", 0);
}
SetAlliance( gPlayerTeam, 1, AL_ENEMY );
SetAlliance( 1, gPlayerTeam, AL_ENEMY );
AddDebriefing("#iMISSION_DB_F#");
EndMission( MS_FAILED );
}
//============================================================================================================================
public ShowTheStat()
{
ShowTheStats();
}
//============================================================================================================================
public MineExploded(DrID:mine)
{
if(IsInSelector( mine, "grp_mines" ))
{
RemoveEvent( "MineExploded" );
AddSoundMessage(iMS09_SP004, gSoundFile4);
}
}
//============================================================================================================================
public UnmountWestGroup()
{
RemoveEvent( "UnmountWestGroup" );
CmdGroupUnmount( "grp_west", Q_OVERRIDE );
SetBehav( "grp_west", MB_UNMODIFIED, FB_UNMODIFIED, UB_UNMODIFIED, DB_UNMODIFIED, MOB_AT_WILL);
}
public UnmountEastGroup()
{
RemoveEvent( "UnmountEastGroup" );
CmdGroupUnmount( "grp_east1", Q_OVERRIDE );
CmdGroupUnmount( "grp_east2", Q_OVERRIDE );
CmdGroupUnmount( "grp_east3", Q_OVERRIDE );
SetBehav( "grp_east1", MB_UNMODIFIED, FB_UNMODIFIED, UB_UNMODIFIED, DB_UNMODIFIED, MOB_AT_WILL);
SetBehav( "grp_east2", MB_UNMODIFIED, FB_UNMODIFIED, UB_UNMODIFIED, DB_UNMODIFIED, MOB_AT_WILL);
SetBehav( "grp_east3", MB_UNMODIFIED, FB_UNMODIFIED, UB_UNMODIFIED, DB_UNMODIFIED, MOB_AT_WILL);
}
//============================================================================================================================
public HQCaptured(DrID:HQ)
{
new info[255];
new tmpstr1[255];
new tmpstr2[255];
new tmpstr3[255];
new tmpstr4[255];
new tmpstr5[255];
new tmpstr6[255];
new Northroad[] = "#d##iMS09_MSG001#";
new Westroad[] = "#d##iMS09_MSG002#";
new Eastroad[] = "#d##iMS09_MSG003#";
new Base[] = "#d##iMS09_MSG004#";
new allied[] = "#d##cgreen##iMS00_MSG001##b#";
new axis[] = "#d##cred##iMS00_MSG002##b#";
new DrID:northHQ = GetEntity( "hq_north" );
new DrID:westHQ = GetEntity( "hq_west" );
new DrID:eastHQ = GetEntity( "hq_east" );
new DrID:baseHQ = GetEntity( "hq_base" );
static PlayerHQ = 0;
if(GetPropertyInt( northHQ, "Team" ) == gPlayerTeam)
{
ConcatString( tmpstr1, 100, Northroad, allied );
if(HQ == northHQ)
PlayerHQ++;
}
else
{
ConcatString( tmpstr1, 100, Northroad, axis );
if(HQ == northHQ)
PlayerHQ--;
}
if(GetPropertyInt( westHQ, "Team" ) == gPlayerTeam)
{
ConcatString( tmpstr2, 100, Westroad, allied );
if(HQ == westHQ)
PlayerHQ++;
}
else
{
ConcatString( tmpstr2, 100, Westroad, axis );
if(HQ == westHQ)
PlayerHQ--;
}
if(GetPropertyInt( eastHQ, "Team" ) == gPlayerTeam)
{
ConcatString( tmpstr3, 100, Eastroad, allied );
if(HQ == eastHQ)
PlayerHQ++;
}
else
{
ConcatString( tmpstr3, 100, Eastroad, axis );
if(HQ == eastHQ)
PlayerHQ--;
}
if(GetPropertyInt( baseHQ, "Team" ) == gPlayerTeam)
{
ConcatString( tmpstr4, 100, Base, allied );
if(HQ == baseHQ)
PlayerHQ++;
}
else
{
ConcatString( tmpstr4, 100, Base, axis );
if(HQ == baseHQ)
PlayerHQ--;
}
ConcatString( tmpstr5, 250, tmpstr1, tmpstr2 );
ConcatString( tmpstr6, 250, tmpstr3, tmpstr4 );
ConcatString( info, 250, tmpstr5, tmpstr6 );
SetShortInfo(info);
if(HQ != DrID:0 && HQ != GetEntity( "zaszlo" ))
{
switch(PlayerHQ)
{
case 0:
{
SetObjectiveState( "PRI_1", OS_FAILED );
if(GetObjectiveState( "PRI_2" ) == OS_IN_PROGRESS)
SetObjectiveState( "PRI_2", OS_FAILED );
if(GetObjectiveState( "SEC_1" ) == OS_IN_PROGRESS)
SetObjectiveState( "SEC_1", OS_FAILED );
if(GetObjectiveState( "HID_1" ) == OS_IN_PROGRESS)
{
SetObjectiveState( "HID_1", OS_FAILED );
SetGlobalVariable("gvMS09_SecretDocuments", 0);
}
SetCutScene(true);
BulletTime( HQ, false);
AddUserEvent( "Defeat", UE_BULLETTIME_END );
}
case 3:
{
if(GetPropertyInt( baseHQ, "Team" ) == 1)
{
if(RunOnce[0] == false)
{
RunOnce[0] = true;
// if(GetPropertyInt( GetEntity( "westscout" ), "Team" ) == 1)
// {
Move("grp_westscout", green, true, Q_ENQUEUE, MF_OVERRUN|MF_KEEP_FORMATION|MF_ATTACKMOVE);
Move("grp_westscout", brown, true, Q_ENQUEUE, MF_OVERRUN|MF_KEEP_FORMATION|MF_ATTACKMOVE);
// }
// if(GetPropertyInt( GetEntity( "northscout" ), "Team" ) == 1)
// {
Move("grp_northscout", purple, true, Q_ENQUEUE, MF_OVERRUN|MF_KEEP_FORMATION|MF_ATTACKMOVE);
Move("grp_northscout", red, true, Q_ENQUEUE, MF_OVERRUN|MF_KEEP_FORMATION|MF_ATTACKMOVE);
// }
// if(GetPropertyInt( GetEntity( "eastscout" ), "Team" ) == 1)
// {
Move("grp_eastscout", pink, true, Q_ENQUEUE, MF_OVERRUN|MF_KEEP_FORMATION|MF_ATTACKMOVE);
Move("grp_eastscout", blue, true, Q_ENQUEUE, MF_OVERRUN|MF_KEEP_FORMATION|MF_ATTACKMOVE);
// }
if(gReconIsDead == true && gMainForceDead == false)
{
AddTimerEvent( "Retreat", gRetreatDelay, "GameLogic", true );
AddSoundMessage(iMS09_SP005, gSoundFile5);
AddSoundMessage(iMS09_SP006, gSoundFile6);
AddSoundMessage(iMS09_SP008, gSoundFile8);
AddSoundMessage(iMS09_SP009, gSoundFile9);
SetObjectiveState( "PRI_2", OS_IN_PROGRESS );
Reinforcement( "left_reinf", GetEntity( "deploy1" ), GetEntity( "start1" ) );
Reinforcement( "right_reinf", GetEntity( "deploy2" ), GetEntity( "start2" ) );
SetNationality("reinforce1", "American");
SetNationality("reinforce2", "American");
}
SetObjectiveState( "SEC_1", OS_COMPLETED );
g3FlagCaptured = true;
}
}
}
case 4:
{
SetObjectiveState( "PRI_1", OS_COMPLETED );
SetObjectiveState( "PRI_2", OS_COMPLETED );
if(GetObjectiveState( "SEC_1" ) == OS_IN_PROGRESS)
SetObjectiveState( "SEC_1", OS_COMPLETED );
SetCutScene(true);
BulletTime( HQ, false );
AddUserEvent( "Victory", UE_BULLETTIME_END );
}
}
if(g3FlagCaptured == true &&
GetPropertyInt( HQ, "Team" ) != gPlayerTeam &&
(HQ == northHQ
||
HQ == westHQ
||
HQ == eastHQ))
{
SetCutScene(true);
BulletTime( HQ, false );
SetObjectiveState( "PRI_1", OS_FAILED );
SetObjectiveState( "PRI_2", OS_FAILED );
AddUserEvent( "Defeat", UE_BULLETTIME_END );
}
}
}
//============================================================================================================================
public Patrol()
{
Move("grp_patrol", pink, true, Q_CYCLE, MF_OVERRUN|MF_ATTACKMOVE);
Move("grp_patrol", orange, false, Q_CYCLE, MF_OVERRUN|MF_ATTACKMOVE);
Move("grp_patrol", black, true, Q_CYCLE, MF_OVERRUN|MF_ATTACKMOVE);
Move("grp_patrol", green, false, Q_CYCLE, MF_OVERRUN|MF_ATTACKMOVE);
Move("grp_patrol", yellow, true, Q_CYCLE, MF_OVERRUN|MF_ATTACKMOVE);
}
//============================================================================================================================
public Retreat()
{
RemoveEvent( "Retreat" );
new northMP = CountMPInSelector("area_north", true, gPlayerTeam);
new westMP = CountMPInSelector("area_west", true, gPlayerTeam);
new eastMP = CountMPInSelector("area_east", true, gPlayerTeam);
DebugMessageP1( "NorthMP:", northMP, DL_MESSAGE );
DebugMessageP1( "WestMP:", westMP, DL_MESSAGE );
DebugMessageP1( "EastMP:", eastMP, DL_MESSAGE );
new Float:SpdLimit = GetSlowestSpeedInGroup("grp_mainforce");
new str[250];
Float2Str( SpdLimit, str, 250 );
// ShowShortMessage(str);
SetSpeedInSelector( "grp_mainforce", SpdLimit );
CmdGroupDigout("grp_heavypz", Q_OVERRIDE);
switch(GetDifficulty())
{
case 0,1://easy, normal
{
if(northMP > westMP && northMP > eastMP)// north road
{
AddTimerEvent( "DelayedRetreatNorth", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_north" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
if(westMP > northMP && westMP > eastMP)// west road
{
AddTimerEvent( "DelayedRetreatWest", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_west" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
if(eastMP > westMP && eastMP > northMP)// east road
{
AddTimerEvent( "DelayedRetreatEast", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_east" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
if(northMP > eastMP && northMP == westMP)
{
switch(Rnd(1,2))
{
case 1:// north road
{
AddTimerEvent( "DelayedRetreatNorth", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_north" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
case 2:// west road
{
AddTimerEvent( "DelayedRetreatWest", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_west" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
}
}
if(northMP > westMP && northMP == eastMP)
{
switch(Rnd(1,2))
{
case 1:// north road
{
AddTimerEvent( "DelayedRetreatNorth", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_north" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
case 2:// east road
{
AddTimerEvent( "DelayedRetreatEast", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_east" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
}
}
if(westMP > northMP && westMP == eastMP)
{
switch(Rnd(1,2))
{
case 1:// west road
{
AddTimerEvent( "DelayedRetreatWest", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_west" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
case 2:// east road
{
AddTimerEvent( "DelayedRetreatEast", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_east" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
}
}
}
case 2://hard
{
switch(Rnd(1,3))
{
case 1:
{
AddTimerEvent( "DelayedRetreatNorth", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_north" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
case 2:
{
AddTimerEvent( "DelayedRetreatWest", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_west" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
case 3:
{
AddTimerEvent( "DelayedRetreatEast", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_east" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
}
}
case 3://extreme
{
if(northMP < westMP && northMP < eastMP)// north road
{
AddTimerEvent( "DelayedRetreatNorth", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_north" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
if(westMP < northMP && westMP < eastMP)// west road
{
AddTimerEvent( "DelayedRetreatWest", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_west" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
if(eastMP < westMP && eastMP < northMP)// east road
{
AddTimerEvent( "DelayedRetreatEast", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_east" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
if(northMP < eastMP && northMP == westMP)
{
switch(Rnd(1,2))
{
case 1:// north road
{
AddTimerEvent( "DelayedRetreatNorth", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_north" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
case 2:// west road
{
AddTimerEvent( "DelayedRetreatWest", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_west" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
}
}
if(northMP < westMP && northMP == eastMP)
{
switch(Rnd(1,2))
{
case 1:// north road
{
AddTimerEvent( "DelayedRetreatNorth", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_north" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
case 2:// east road
{
AddTimerEvent( "DelayedRetreatEast", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_east" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
}
}
if(westMP < northMP && westMP == eastMP)
{
switch(Rnd(1,2))
{
case 1:// west road
{
AddTimerEvent( "DelayedRetreatWest", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_west" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
case 2:// east road
{
AddTimerEvent( "DelayedRetreatEast", DelayedTime );
CmdGroupMoveToEnt( "grp_patrol", GetEntity( "hq_east" ), Q_OVERRIDE, MF_ATTACKMOVE );
}
}
}
}
}
}
//============================================================================================================================
public DelayedRetreatNorth()
{
static counter = 0;
new newgroup[250];
counter++;
if(CountLivingInSelector( "grp_temp" ))
{
new DrID:NearestUnit = GetNearestEntity(GetEntity( "wpr1" ),"grp_temp");
RemoveFromGroup( ",grp_temp", NearestUnit );
Int2Str( counter, newgroup, 250);
AddToGroup( newgroup, NearestUnit );
if(IsEntityComp(NearestUnit, "cTurretController"))
{
SetBehav2Ent( NearestUnit,
MB_MOVE_FREELY,
FB_FIRE_AT_WILL,
UB_UNMODIFIED,
DB_VEHICLE);
}
else
{
SetBehav2Ent( NearestUnit,MB_MOVE_FREELY, FB_RETURN_FIRE);
}
Move(newgroup, purple, true, Q_ENQUEUE, MF_OVERRUN|MF_ATTACKMOVE);
Move(newgroup, red, true, Q_ENQUEUE, MF_OVERRUN|MF_ATTACKMOVE);
}
else
RemoveEvent( "DelayedRetreatNorth" );
}
public DelayedRetreatWest()
{
static counter = 0;
new newgroup[250];
counter++;
if(CountLivingInSelector( "grp_temp" ))
{
new DrID:NearestUnit = GetNearestEntity(GetEntity( "wpr16" ),"grp_temp");
RemoveFromGroup( ",grp_temp", NearestUnit );
Int2Str( counter, newgroup, 250);
AddToGroup( newgroup, NearestUnit );
if(IsEntityComp(NearestUnit, "cTurretController"))
{
SetBehav2Ent( NearestUnit,
MB_MOVE_FREELY,
FB_UNMODIFIED,
UB_UNMODIFIED,
DB_VEHICLE);
}
else
{
SetBehav2Ent( NearestUnit,MB_MOVE_FREELY, FB_RETURN_FIRE);
}
Move(newgroup, green, true, Q_ENQUEUE, MF_OVERRUN|MF_ATTACKMOVE);
Move(newgroup, brown, true, Q_ENQUEUE, MF_OVERRUN|MF_ATTACKMOVE);
}
else
RemoveEvent( "DelayedRetreatWest" );
}
public DelayedRetreatEast()
{
static counter = 0;
new newgroup[250];
counter++;
if(CountLivingInSelector( "grp_temp" ))
{
new DrID:NearestUnit = GetNearestEntity(GetEntity( "wpr24" ),"grp_temp");
RemoveFromGroup( ",grp_temp", NearestUnit );
Int2Str( counter, newgroup, 250);
AddToGroup( newgroup, NearestUnit );
if(IsEntityComp(NearestUnit, "cTurretController"))
{
SetBehav2Ent( NearestUnit,
MB_MOVE_FREELY,
FB_UNMODIFIED,
UB_UNMODIFIED,
DB_VEHICLE);
}
else
{
SetBehav2Ent( NearestUnit,MB_MOVE_FREELY, FB_RETURN_FIRE);
}
Move(newgroup, pink, true, Q_ENQUEUE, MF_OVERRUN|MF_ATTACKMOVE);
Move(newgroup, blue, true, Q_ENQUEUE, MF_OVERRUN|MF_ATTACKMOVE);
}
else
RemoveEvent( "DelayedRetreatEast" );
}
//============================================================================================================================
public Outro()
{
RemoveEvent( "GroupEliminated" );
RemoveEvent( "HQCaptured" );
SetPropertyInt( GetEntity( "hq_base" ), "Team", gPlayerTeam );
SetPropertyString( GetEntity( "hq_base" ), "Nationality", "American" );
SetPropertyBool( GetEntity( "hq_base" ), "FixedOwner", true );
new Float:fowpos[vec3];
GetPropertyVec3(GetEntity( "hq_base" ), "LogicalPos_", fowpos );
new DrID:Fow = CreateEntity( "fowbacon_180", fowpos );
SetPropertyInt( Fow, "Team", gPlayerTeam );
SetPropertyBool( Fow, "GadgetsVisible", false );
new wpname[5][10] = {{"wp_actor1"},{"wp_actor2"},{"wp_actor3"},{"wp_actor4"},{"wp_actor5"}};
new Float:pos[vec3];
for(new k = 0; k<5; k++)
{
GetPropertyVec3( GetEntity( wpname[k] ), "LogicalPos_", pos );
CreateEntity( "al_m4 fireFly", pos );
}
new wpname2[10][20] = {{"wp_pow1"},{"wp_pow2"},{"wp_pow3"},{"wp_pow4"},{"wp_pow5"},{"wp_pow6"},{"wp_pow7"},{"wp_pow8"},{"wp_pow9"},{"wp_pow10"}};
new Float:pos2[vec3];
for(new p = 0; p<10; p++)
{
GetPropertyVec3( GetEntity( wpname2[p] ), "LogicalPos_", pos2 );
new DrID:nemetkatana = CreateEntity( "ax_rifleman", pos2 );
AddToGroup( "POW", nemetkatana );
}
SetAlliance( 1, gPlayerTeam, AL_NEUTRAL );
SetAlliance( gPlayerTeam, 1, AL_NEUTRAL );
CmdGroupSetMS( "POW", Q_OVERRIDE, MS_WALK );
Move("POW", pink, true, Q_ENQUEUE, MF_OVERRUN);
Move("POW", blue, true, Q_ENQUEUE, MF_OVERRUN);
SetCutScene(true, true, true);
FadeOut(0.5);
AddTimerEvent( "CameraOutro", 2.0, "GameLogic", true );
}
public CameraOutro()
{
RemoveEvent( "CameraOutro" );
FadeIn(0.5);
AddSoundMessage(iMS09_SP007, gSoundFile7);
AddAKEntityEvent( "Victory", ANY_ENTITY, MESSAGE_END );
TeleportCameraToEnt(GetEntity( "hq_base" ));
SetCameraRotSpeed(5.0);
CameraSet(0.0, 55.0, 50.0)
SetCameraTargetRotate( -86.0 );
SetCameraTargetPitch( 55.0 );
SetCameraTargetDistance( 30.0 );
}
//============================================================================================================================
public CommandPostDestroyed(DrID:CommandPost)
{
RemoveEvent( "CommandPostDestroyed" );
if(GetObjectiveState( "HID_1" ) == OS_IN_PROGRESS)
{
SetObjectiveState( "HID_1", OS_FAILED );
SetGlobalVariable("gvMS09_SecretDocuments", 0);
}
HideEntity( GetEntity( "zaszlo" ));
}
public CommandpostTeamchanged(DrID:commandpost)
{
if(GetPropertyInt( commandpost, "Team" ) == gPlayerTeam && gOfficerDied == true)
{
if(GetObjectiveState( "HID_1" ) == OS_IN_PROGRESS)
{
SetObjectiveState( "HID_1", OS_COMPLETED );
SetGlobalVariable("gvMS09_SecretDocuments", 1);
}
SetPropertyInt( GetEntity( "zaszlo" ), "Team", gPlayerTeam );
SetPropertyString( GetEntity( "zaszlo" ), "Nationality", "American" );
}
}
//============================================================================================================================
// public UnitAreaEnter(DrID:Unit)
// {
// new compositeID[250];
// GetPropertyString( GetMsgParamObject(), "CompositeID", 240, compositeID );
// if(CompareString( compositeID, "area_roads") == 0)
// {
// if(IsInstanceOf( Unit, GetClassID( "cVehicle" )))
// {
// AddAKEntityEvent( "WreckDestruct", Unit, UNIT_DIED, 0.1 );
// }
// }
// }
// public UnitAreaExit(DrID:Unit)
// {
// new compositeID[250];
// GetPropertyString( GetMsgParamObject(), "CompositeID", 240, compositeID );
// if(CompareString( compositeID, "area_roads") == 0)
// {
// if(IsInstanceOf( Unit, GetClassID( "cVehicle" )))
// {
// RemoveEvent( "WreckDestruct" );
// }
// }
// }
//============================================================================================================================
public WreckDestruct(DrID:diedunit)
{
WreckDestructor(diedunit, "area_roads");
}
//============================================================================================================================
// public UnitTeamChanged(DrID:Vehicle)
// {
// if(IsInstanceOf( Vehicle, GetClassID( "cVehicle" )))
// {
// if(GetPropertyInt( Vehicle, "Team" ) == gPlayerTeam && GetPropertyInt( Vehicle, "LastTeam" ) == 1)
// {
// new squadname[250];
// GetPropertyString( Vehicle, "SquadName", 250, squadname );
//
// if(CompareString( squadname, "sq_panzerz") == 0)
// SetPropertyString( Vehicle, "SquadName", "" );
// SetPropertyString( Vehicle, "Group", "" );
// }
// }
// }
//============================================================================================================================
public GermanSoldierBehav(Selector[])
{
new Iterator:i = Iterate(Selector);
while(ItNext( i ))
{
new DrID:soldier = ItEntity( i );
if(IsInstanceOf( soldier, GetClassID( "cSoldier" )))
{
new groupname[250];
GetPropertyString( soldier, "Group", 200, groupname );
if(CompareString( groupname, "") == 0)
{
SetBehav2Ent( soldier, MB_MOVE_IN_VICINITY, FB_FIRE_AT_WILL, UB_EVAC, DB_UNMODIFIED, MOB_WHEN_INJURED, MTP_ATTACK);
}
}
}
}
//============================================================================================================================
public ScenarioMode()
{
new Iterator:i = Iterate( "StartingPlayerUnits" );
while(ItNext( i ))
{
AddToGroup( "grp_intro2", ItEntity( i ) );
}
ItStop( i );
}
//============================================================================================================================
public Add2GermanGroup()
{
new Iterator:i = Iterate( "SelectorTeam1" );
while(ItNext( i ))
{
if(IsInstanceOf( ItEntity( i ), GetClassID( "cVehicle" )))
AddToGroup( "grp_German", ItEntity( i ) );
}
ItStop( i );
new Iterator:t = Iterate( "SelectorTeam0" );
while(ItNext( t ))
{
if(IsInstanceOf( ItEntity( t ), GetClassID( "cVehicle" )))
{
new NationalitySTR[50];
GetPropertyString( ItEntity( t ), "Nationality", 50, NationalitySTR );
if(CompareString( NationalitySTR, "German") == 0)
AddToGroup( "grp_German", ItEntity( t ) );
}
}
ItStop( t );
}
public GermanVehicleTeamChanged(DrID:gervehicle)
{
// DebugMessage( "German vehicle is team changed!", DL_MESSAGE );
GroupRemover(gervehicle);
}