openclonk/planet/Missions.ocf/Skylands.ocs/Script.c

80 lines
1.7 KiB
C

/**
Skylands
Assemble a plane on some floating islands
@authors Sven2
*/
static g_is_initialized;
static g_intro_initialized;
func DoInit(int first_player)
{
// Test
//CreateObjectAbove(LiftTower, 178,405, first_player);
// Set time of day to evening and create some clouds and celestials.
Cloud->Place(15);
EnsureObject(Rule_BuyAtFlagpole,0,0,-1);
SetSkyAdjust(0xff000000);
var storm = EnsureObject(Storm,0,0,NO_OWNER);
storm->SetStorm(-20,0,1000);
SetSkyParallax(1); // move background with the wind
var time = EnsureObject(Environment_Time,0,0,-1);
time->SetTime(600);
time->SetCycleSpeed(20);
// Goal
CreateObject(Goal_Plane);
// Plane part restore
for (var part in FindObjects(Find_Func("IsPlanePart"))) part->AddRestoreMode();
return true;
}
func EnsureObject(id def, int x, int y, int owner)
{
var obj = FindObject(Find_ID(def));
if (!obj) obj = CreateObjectAbove(def,x,y,owner);
return obj;
}
func InitializePlayer(int plr)
{
// Scenario init
if (!g_is_initialized) g_is_initialized = DoInit(plr);
// Move clonks to location and give them a shovel.
var index = 0, crew;
while (crew = GetCrew(plr, index))
{
var x = 150 + Random(50);
crew->SetPosition(x , 400);
crew->CreateContents(Shovel);
// one clonk can construct, another can mine.
if (index == 1)
{
crew->CreateContents(Hammer);
crew->CreateContents(Wood,4);
crew->CreateContents(Metal);
}
else
{
crew->CreateContents(Axe);
crew->CreateContents(Wood,3);
crew->CreateContents(Metal,2);
}
index++;
}
return;
}
func OnPlaneFinished(object plane)
{
// todo: outro
plane->CreateObjectAbove(Plane, 0,0, NO_OWNER);
plane->RemoveObject();
}
func OnGoalsFulfilled()
{
GainScenarioAchievement("Done");
return false;
}