2010-03-04 02:58:31 +00:00
|
|
|
/*
|
|
|
|
Boom command
|
|
|
|
Authors: Randrian, Newton
|
|
|
|
|
|
|
|
Funny little survival scenario to train with the bow.
|
|
|
|
*/
|
2010-03-01 23:36:28 +00:00
|
|
|
|
2010-03-04 21:48:16 +00:00
|
|
|
// in seconds
|
|
|
|
static const Boomattack_wave_delay = 25;
|
|
|
|
|
|
|
|
static const Boomattack_angle_spread = 45;
|
|
|
|
// the bigger this value, the slower does the attack size grow
|
2010-03-05 01:01:44 +00:00
|
|
|
static const Boomattack_attack_growth = 90;
|
2010-03-04 21:48:16 +00:00
|
|
|
|
2010-03-01 23:36:28 +00:00
|
|
|
func Initialize()
|
|
|
|
{
|
2010-03-04 02:58:31 +00:00
|
|
|
var offs = 45;
|
2015-01-10 09:14:02 +00:00
|
|
|
CreateObjectAbove(WindGenerator, 1147, 938+offs)->SetR(7);
|
|
|
|
CreateObjectAbove(WindGenerator, 985, 1105+offs)->SetR(-170);
|
|
|
|
CreateObjectAbove(WindGenerator, 1055, 1085+offs)->SetR(140);
|
|
|
|
CreateObjectAbove(WindGenerator, 971, 857+offs)->SetR(-20);
|
|
|
|
CreateObjectAbove(WindGenerator, 1147, 1035+offs)->SetR(160);
|
|
|
|
CreateObjectAbove(WindGenerator, 1036, 870+offs)->SetR(-10);
|
|
|
|
CreateObjectAbove(WindGenerator, 1081, 873+offs)->SetR(18);
|
|
|
|
CreateObjectAbove(WindGenerator, 858, 930+offs)->SetR(-10);
|
2010-03-04 02:58:31 +00:00
|
|
|
|
2015-01-10 16:56:54 +00:00
|
|
|
CreateObject(Goal_SaveTheWindmills,10,10);
|
2010-03-04 02:58:31 +00:00
|
|
|
PlaceGrass(100, 800, 1400);
|
2015-10-05 23:46:36 +00:00
|
|
|
SetSkyParallax(0,25,25,0,0,0,0);
|
2012-04-12 09:48:23 +00:00
|
|
|
AddEffect("BoomAttack", nil, 100, 35);
|
2015-12-13 21:14:55 +00:00
|
|
|
Sound("Environment::WindLoop",true,40,nil,+1);
|
2010-03-01 23:36:28 +00:00
|
|
|
}
|
|
|
|
|
2010-12-23 13:35:16 +00:00
|
|
|
global func FxBoomAttackTimer(object target, effect, int time)
|
2010-03-04 21:48:16 +00:00
|
|
|
{
|
2010-03-05 16:21:43 +00:00
|
|
|
var wave = 1+time/35/Boomattack_wave_delay;
|
|
|
|
|
2010-03-04 21:48:16 +00:00
|
|
|
if(time/35 % Boomattack_wave_delay == 1)
|
|
|
|
{
|
2010-04-05 14:22:30 +00:00
|
|
|
var gol = FindObject(Find_ID(Goal_SaveTheWindmills));
|
2010-09-13 15:27:48 +00:00
|
|
|
if(gol)
|
2010-04-05 14:22:30 +00:00
|
|
|
gol->SetWave(wave);
|
2010-03-05 16:21:43 +00:00
|
|
|
if (wave < 13)
|
|
|
|
{
|
2010-04-15 22:45:30 +00:00
|
|
|
CustomMessage(Format(" $MsgWave$ ",wave),nil,NO_OWNER);
|
2010-03-05 16:21:43 +00:00
|
|
|
var wave_strength = Sqrt(9+GetPlayerCount()*time/Boomattack_attack_growth);
|
|
|
|
CreateAttackWave( Random(360) , wave_strength,Boomattack_angle_spread);
|
|
|
|
}
|
|
|
|
else if (wave == 13)
|
|
|
|
{
|
2010-04-15 22:45:30 +00:00
|
|
|
CustomMessage(" $MsgBoss$ ",nil,NO_OWNER);
|
2010-03-05 16:21:43 +00:00
|
|
|
CreateAttackWave( Random(360) , -1, Boomattack_angle_spread);
|
2010-03-06 16:03:06 +00:00
|
|
|
var gol = FindObject(Find_ID(Goal_SaveTheWindmills));
|
|
|
|
if(gol) gol->BossAttacks();
|
2010-03-05 16:21:43 +00:00
|
|
|
}
|
2010-03-04 21:48:16 +00:00
|
|
|
|
2010-03-05 16:21:43 +00:00
|
|
|
}
|
2010-03-04 21:48:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
global func CreateAttackWave(int angle, int rockets, int anglespread)
|
2010-03-01 23:36:28 +00:00
|
|
|
{
|
|
|
|
var radius = Min(LandscapeWidth()/2, LandscapeHeight()/2);
|
2010-03-05 16:21:43 +00:00
|
|
|
var rocket_id = Boomattack;
|
|
|
|
// boss
|
|
|
|
if(rockets == -1)
|
|
|
|
{
|
|
|
|
rockets = 1;
|
|
|
|
rocket_id = BigBoomattack;
|
|
|
|
}
|
|
|
|
|
2010-09-13 15:27:48 +00:00
|
|
|
for(var i=0; i<rockets; ++i)
|
2010-03-04 21:48:16 +00:00
|
|
|
{
|
|
|
|
var rocket_angle = angle + Random(anglespread) - anglespread/2;
|
|
|
|
var rocket_radius = radius * RandomX(80,100) / 100;
|
|
|
|
var x = Sin(rocket_angle, rocket_radius)+LandscapeWidth()/2;
|
|
|
|
var y = -Cos(rocket_angle, rocket_radius)+LandscapeHeight()/2;
|
|
|
|
|
2015-01-10 09:14:02 +00:00
|
|
|
CreateObjectAbove(rocket_id, x, y)->Launch(rocket_angle + 180);
|
2010-03-04 21:48:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
for(var i=0; i<GetPlayerCount(); ++i)
|
|
|
|
{
|
|
|
|
var owner = GetPlayerByIndex(i);
|
|
|
|
var gui_arrow = FindObject(Find_ID(GUI_GoalArrow), Find_Owner(owner));
|
|
|
|
if(!gui_arrow)
|
|
|
|
{
|
2015-01-10 09:14:02 +00:00
|
|
|
gui_arrow = CreateObjectAbove(GUI_GoalArrow,0,0,owner);
|
2010-03-04 21:48:16 +00:00
|
|
|
gui_arrow->SetAction("Show", GetCursor(owner));
|
|
|
|
gui_arrow->SetClrModulation(RGB(255,0,0));
|
2015-10-05 12:16:37 +00:00
|
|
|
gui_arrow->SetObjectBlitMode(GFX_BLIT_Additive);
|
2010-03-04 21:48:16 +00:00
|
|
|
}
|
|
|
|
gui_arrow->SetR(angle);
|
2013-05-11 21:17:01 +00:00
|
|
|
gui_arrow.Plane = 500;
|
2010-03-04 21:48:16 +00:00
|
|
|
}
|
2010-03-01 23:36:28 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func InitializePlayer(int iPlr, int iX, int iY, object pBase, int iTeam)
|
|
|
|
{
|
2010-03-04 02:58:31 +00:00
|
|
|
SetFoW(false,iPlr);
|
2010-03-01 23:36:28 +00:00
|
|
|
JoinPlayer(iPlr);
|
2010-03-05 01:01:44 +00:00
|
|
|
GetHiRank(iPlr)->SetPosition(LandscapeWidth()/2, LandscapeHeight()/2);
|
2010-03-01 23:36:28 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2010-03-04 22:46:29 +00:00
|
|
|
func RemovePlayer(int iPlr)
|
|
|
|
{
|
|
|
|
for(var obj in FindObjects(Find_Owner(iPlr)))
|
|
|
|
{
|
2010-03-05 01:01:44 +00:00
|
|
|
if(obj)
|
|
|
|
obj->RemoveObject();
|
2010-03-04 22:46:29 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func RelaunchPlayer(int plr)
|
|
|
|
{
|
2015-01-10 09:14:02 +00:00
|
|
|
var clonk = CreateObjectAbove(Clonk, LandscapeWidth()/2, 600, plr);
|
2010-11-25 19:23:07 +00:00
|
|
|
clonk->MakeCrewMember(plr);
|
2010-03-04 22:46:29 +00:00
|
|
|
SetCursor(plr, clonk);
|
|
|
|
JoinPlayer(plr);
|
2010-03-05 01:01:44 +00:00
|
|
|
var gui_arrow = FindObject(Find_ID(GUI_GoalArrow), Find_Owner(plr));
|
|
|
|
gui_arrow->SetAction("Show", GetCursor(plr));
|
2010-03-04 22:46:29 +00:00
|
|
|
}
|
|
|
|
|
2010-03-04 02:58:31 +00:00
|
|
|
func JoinPlayer(int iPlr)
|
2010-03-01 23:36:28 +00:00
|
|
|
{
|
|
|
|
var clonk = GetCrew(iPlr);
|
2010-03-04 02:58:31 +00:00
|
|
|
clonk->DoEnergy(1000);
|
2010-03-05 01:01:44 +00:00
|
|
|
|
2010-03-02 16:24:51 +00:00
|
|
|
clonk->CreateContents(Bow);
|
2015-01-10 09:14:02 +00:00
|
|
|
clonk->Collect(CreateObjectAbove(Arrow));
|
2010-03-04 21:48:16 +00:00
|
|
|
clonk->CreateContents(Musket);
|
2015-01-10 09:14:02 +00:00
|
|
|
clonk->Collect(CreateObjectAbove(LeadShot));
|
2010-03-01 23:36:28 +00:00
|
|
|
return;
|
2010-03-05 01:01:44 +00:00
|
|
|
}
|