add tutorial 6

Still intro, outro and some NPCs missing.
liquid_container
Maikel de Vries 2016-02-07 21:29:19 +01:00
parent 2a4fa85583
commit 1ebdc31182
19 changed files with 728 additions and 1 deletions

View File

@ -36,7 +36,7 @@ protected func OnGoalsFulfilled()
// Achievement: Tutorial completed.
GainScenarioAchievement("TutorialCompleted", 3);
// Dialogue options -> next round.
SetNextMission("Tutorials.ocf\\Tutorial07.ocs", "$MsgNextTutorial$", "$MsgNextTutorialDesc$");
SetNextMission("Tutorials.ocf\\Tutorial06.ocs", "$MsgNextTutorial$", "$MsgNextTutorialDesc$");
// Normal scenario ending by goal library.
return false;
}

View File

@ -0,0 +1,7 @@
Stromproblematik
Together with Archibald you reach the friendly and calm sky village. It is a bit too calm though as their power supply is gone due to the absence of wind. They agree to help you if there power supply is restored and you construct them an airplane.
Ziel: Baue die Stromversorgung wieder auf und stelle ein Flugzeug her.
Lernrunde erklärt: Stromsystem, kaufen, Katapult.

View File

@ -0,0 +1,7 @@
Power Problems
Together with Archibald you reach the friendly and calm sky village. It is a bit too calm though as their power supply is gone due to the absence of wind. They agree to help you if there power supply is restored and you construct them an airplane.
Goal: Restore the power supply and produce an airplane.
Tutorial explains: power system, buying, catapult.

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,25 @@
[Head]
Icon=7
Title=Tutorial06
Version=7,0
MaxPlayer=1
Difficulty=6
[Definitions]
Definition1=Objects.ocd
Definition2=Decoration.ocd
[Player1]
Crew=Clonk=1
[Landscape]
TopOpen=1
BottomOpen=1
Sky=Clouds1
SkyScrollMode=2
[Weather]
Climate=0,0,0,100
StartSeason=0,0,0,100
YearSpeed=0,0,0,100
Wind=10,0,10,10

View File

@ -0,0 +1,424 @@
/**
Tutorial 06: Power Problems
Author: Maikel
The player has reached the friendly village high up in the skies, they don't have power as there is no wind.
Help them setting up a back-up power supply and construct an airplane so they will fight against the evil faction.
Following controls and concepts are explained:
* Power system and overview
* Buying at the flagpole
* Construction of steam engine and compensator
* Catapult (shooting objects and oneself)
* Production of airplane
TODO:
* Outro with airplane who takes the player to the next round.
* Intro with airship from bottom left (also add to tutorial 5).
* NPC clonks.
* Children NPCs playing with the catapults.
* Make a script player who is owner of the village.
*/
static guide; // guide object.
protected func Initialize()
{
// Tutorial goal.
var goal = CreateObject(Goal_Tutorial);
goal.Name = "$MsgGoalName$";
goal.Description = "$MsgGoalDescription$";
// Enable buying at the flagpole
CreateObject(Rule_BuyAtFlagpole);
// Place objects in different sections.
InitBottomIsland();
InitMiddleIsland();
InitTopIsland();
InitVegetation();
InitAnimals();
InitAI();
// Dialogue options -> repeat round.
SetNextMission("Tutorials.ocf\\Tutorial06.ocs", "$MsgRepeatRound$", "$MsgRepeatRoundDesc$");
return;
}
// Gamecall from goals, set next mission.
protected func OnGoalsFulfilled()
{
// Achievement: Tutorial completed.
GainScenarioAchievement("TutorialCompleted", 3);
// Dialogue options -> next round.
SetNextMission("Tutorials.ocf\\Tutorial07.ocs", "$MsgNextTutorial$", "$MsgNextTutorialDesc$");
// Normal scenario ending by goal library.
return false;
}
private func InitBottomIsland()
{
var shipyard = CreateObjectAbove(Shipyard, 250, 568);
shipyard->MakeInvincible();
shipyard->CreateContents(Wood, 4);
shipyard->CreateContents(Metal, 6);
CreateObjectAbove(Flagpole, 440, 544)->MakeInvincible();
CreateObjectAbove(WindGenerator, 400, 544)->MakeInvincible();
return;
}
private func InitMiddleIsland()
{
// A catapult to get to the bottom island.
var catapult = CreateObjectAbove(Catapult, 760, 408);
catapult->MakeInvincible();
catapult->SetDir(DIR_Left);
var chemical_lab = CreateObjectAbove(ChemicalLab, 850, 368);
chemical_lab->MakeInvincible();
chemical_lab->CreateContents(Dynamite, 5);
CreateObjectAbove(WindGenerator, 890, 368)->MakeInvincible();
var sawmill = CreateObjectAbove(Sawmill, 996, 360);
sawmill->MakeInvincible();
sawmill->SetDir(DIR_Right);
// A chest with a windbag on the small island (this is the easter egg).
var chest = CreateObjectAbove(Chest, 1004, 176);
chest->MakeInvincible();
chest->CreateContents(WindBag);
return;
}
private func InitTopIsland()
{
// A catapult to get to the middle island.
var catapult = CreateObjectAbove(Catapult, 432, 248);
catapult->MakeInvincible();
var elevator = CreateObjectAbove(Elevator, 312, 240);
elevator->SetDir(DIR_Right);
elevator->MakeInvincible();
elevator->CreateShaft(200);
var case = elevator->GetCase();
case->SetPosition(case->GetX(), 496);
case->MakeInvincible();
var workshop = CreateObjectAbove(ToolsWorkshop, 220, 240);
workshop->MakeInvincible();
workshop->CreateContents(Hammer, 2);
workshop->CreateContents(Shovel, 2);
workshop->CreateContents(Pickaxe, 2);
CreateObjectAbove(Flagpole, 356, 240)->MakeInvincible();
CreateObjectAbove(WindGenerator, 270, 240)->MakeInvincible();
return;
}
private func InitVegetation()
{
Grass->Place(85);
PlaceObjects(Rock, 20, "Earth");
PlaceObjects(Firestone, 8, "Earth");
Branch->Place(10);
Mushroom->Place(12);
Flower->Place(10);
Trunk->Place(3);
Tree_Deciduous->Place(12);
Tree_Coniferous2->Place(2);
Tree_Coniferous3->Place(2);
return;
}
private func InitAnimals()
{
// Some animals as atmosphere.
Butterfly->Place(20);
Zaphive->Place(2);
Mosquito->Place(2);
return;
}
// Initializes the AI: which is all defined in System.ocg
private func InitAI()
{
// Village head.
var npc_head = CreateObjectAbove(Clonk, 250, 558);
npc_head->SetName("Archibald");
npc_head->SetObjectLayer(npc_head);
npc_head->SetDir(DIR_Left);
npc_head->SetDialogue("VillageHead");
npc_head->SetAlternativeSkin("Sage");
// Skyville head.
var npc_head = CreateObjectAbove(Clonk, 260, 558);
npc_head->SetName("Ludwig");
npc_head->SetObjectLayer(npc_head);
npc_head->SetDir(DIR_Left);
npc_head->SetDialogue("SkyvilleHead");
npc_head->SetAlternativeSkin("MaleBlackHair");
return;
}
/*-- Player Handling --*/
protected func InitializePlayer(int plr)
{
// Position player's clonk.
var clonk = GetCrew(plr);
clonk->SetPosition(220, 558);
clonk->CreateContents(Shovel);
var effect = AddEffect("ClonkRestore", clonk, 100, 10);
effect.to_x = 220;
effect.to_y = 558;
// Standard player zoom for tutorials.
SetPlayerViewLock(plr, true);
SetPlayerZoomByViewRange(plr, 300, nil, PLRZOOM_Direct | PLRZOOM_Set | PLRZOOM_LimitMax);
SetPlayerZoomByViewRange(plr, LandscapeWidth(), nil, PLRZOOM_LimitMax);
// Claim ownership of structures.
for (var structure in FindObjects(Find_Or(Find_Category(C4D_Structure), Find_Func("IsFlagpole"))))
structure->SetOwner(plr);
// Knowledge and base material for this round.
SetPlrKnowledge(plr, Compensator);
SetPlrKnowledge(plr, SteamEngine);
SetPlrKnowledge(plr, Airplane);
SetBaseMaterial(plr, Metal, 20);
// Set wealth to buy items.
SetWealth(plr, 400);
// Add an effect to the clonk to track the goal.
var track_goal = AddEffect("TrackGoal", nil, 100, 2);
track_goal.plr = plr;
// Start the intro sequence.
StartSequence("Intro", 0, plr);
// Create tutorial guide and control effect.
guide = CreateObject(TutorialGuide, 0, 0, plr);
guide->HideGuide();
var effect = AddEffect("TutorialReachedSkyIsland", nil, 100, 5);
effect.plr = plr;
return;
}
/*-- Intro, Tutorial Goal & Outro --*/
global func FxTrackGoalTimer(object target, proplist effect, int time)
{
if (FindObject(Find_ID(Airplane)))
{
StartSequence("Outro", 0, effect.plr);
return FX_Execute_Kill;
}
return FX_OK;
}
public func ShowLastGuideMessage()
{
guide->AddGuideMessage("$MsgTutorialCompleted$");
guide->ShowGuideMessage();
guide->ShowGuide();
return;
}
/*-- Guide Messages --*/
public func OnIntroSequenceFinished()
{
var interact = GetPlayerControlAssignment(guide->GetOwner(), CON_Interact, true, true);
guide->AddGuideMessage(Format("$MsgTutorialTakeElevator$", interact));
guide->ShowGuide();
guide->ShowGuideMessage();
return;
}
global func FxTutorialReachedSkyIslandTimer(object target, proplist effect)
{
var crew = GetCrew(effect.plr);
if (crew && FindObject(Find_ID(Hammer), Find_Container(crew)))
{
guide->AddGuideMessage("$MsgTutorialBuildCompensator$");
guide->ShowGuideMessage();
var new_effect = AddEffect("TutorialPlacedCompensatorSite", nil, 100, 5);
new_effect.plr = effect.plr;
return FX_Execute_Kill;
}
return FX_OK;
}
global func FxTutorialPlacedCompensatorSiteTimer(object target, proplist effect)
{
var site = FindObject(Find_ID(ConstructionSite), Find_AtRect(160, 260, 80, 40));
var compensator = FindObject(Find_ID(Compensator), Find_AtRect(160, 260, 80, 40));
if ((site && site.definition == Compensator) || compensator)
{
var interaction_menu = GetPlayerControlAssignment(effect.plr, CON_Contents, true, true);
guide->AddGuideMessage(Format("$MsgTutorialBuyMetal$", interaction_menu));
guide->ShowGuideMessage();
var new_effect = AddEffect("TutorialFinishedCompensator", nil, 100, 5);
new_effect.plr = effect.plr;
return FX_Execute_Kill;
}
return FX_OK;
}
global func FxTutorialFinishedCompensatorTimer(object target, proplist effect)
{
if (FindObject(Find_ID(Compensator), Find_AtRect(160, 260, 80, 40)))
{
guide->AddGuideMessage("$MsgTutorialPowerOverview$");
guide->ShowGuideMessage();
var new_effect = AddEffect("TutorialLookedAtPowerOverview", nil, 100, 5);
new_effect.plr = effect.plr;
return FX_Execute_Kill;
}
return FX_OK;
}
global func FxTutorialLookedAtPowerOverviewTimer(object target, proplist effect)
{
// TODO: fix me (should be triggered when the E menu is openend).
if (effect.looked_at || true)
{
var interact = GetPlayerControlAssignment(effect.plr, CON_Interact, true, true);
var interact_cycle = GetPlayerControlAssignment(effect.plr, CON_InteractNext_CycleObject, true, true);
guide->AddGuideMessage(Format("$MsgTutorialEnterCatapult$", interact, interact_cycle, interact));
guide->ShowGuideMessage();
var new_effect = AddEffect("TutorialEnteredCatapult", nil, 100, 5);
new_effect.plr = effect.plr;
return FX_Execute_Kill;
}
return FX_OK;
}
global func FxTutorialEnteredCatapultTimer(object target, proplist effect)
{
var catapult = FindObject(Find_ID(Catapult), Find_Distance(80, 432, 248));
if (catapult && GetCrew(effect.plr) == FindObject(Find_OCF(OCF_CrewMember), Find_Container(catapult)))
{
var zoom_in = GetPlayerControlAssignment(effect.plr, CON_WheelZoomIn, true, true);
var zoom_out = GetPlayerControlAssignment(effect.plr, CON_WheelZoomOut, true, true);
var use = GetPlayerControlAssignment(effect.plr, CON_Use, true, true);
guide->AddGuideMessage(Format("$MsgTutorialLaunchCatapult$", zoom_in, zoom_out, use));
guide->ShowGuideMessage();
var new_effect = AddEffect("TutorialReachedMiddleIsland", nil, 100, 5);
new_effect.plr = effect.plr;
return FX_Execute_Kill;
}
return FX_OK;
}
global func FxTutorialReachedMiddleIslandTimer(object target, proplist effect)
{
if (FindObject(Find_OCF(OCF_CrewMember), Find_Owner(effect.plr), Find_InRect(744, 336, 300, 280)))
{
guide->AddGuideMessage("$MsgTutorialBuildSteamEngine$");
guide->ShowGuideMessage();
var new_effect = AddEffect("TutorialPlacedSteamEngineSite", nil, 100, 5);
new_effect.plr = effect.plr;
return FX_Execute_Kill;
}
return FX_OK;
}
global func FxTutorialPlacedSteamEngineSiteTimer(object target, proplist effect)
{
var site = FindObject(Find_ID(ConstructionSite), Find_AtRect(832, 400, 72, 56));
if (site && site.definition == SteamEngine)
{
guide->AddGuideMessage("$MsgTutorialTransportMaterials$");
guide->ShowGuideMessage();
var new_effect = AddEffect("TutorialReachedTopIsland", nil, 100, 5);
new_effect.plr = effect.plr;
return FX_Execute_Kill;
}
return FX_OK;
}
global func FxTutorialReachedTopIslandTimer(object target, proplist effect)
{
if (FindObject(Find_OCF(OCF_CrewMember), Find_Owner(effect.plr), Find_InRect(200, 200, 200, 40)))
{
var interact = GetPlayerControlAssignment(effect.plr, CON_Interact, true, true);
guide->AddGuideMessage(Format("$MsgTutorialShootCoalAndMetal$", interact));
guide->ShowGuideMessage();
var new_effect = AddEffect("TutorialReachedMiddleIslandSecond", nil, 100, 5);
new_effect.plr = effect.plr;
return FX_Execute_Kill;
}
return FX_OK;
}
global func FxTutorialReachedMiddleIslandSecondTimer(object target, proplist effect)
{
if (FindObject(Find_OCF(OCF_CrewMember), Find_Owner(effect.plr), Find_InRect(744, 336, 300, 280)))
{
guide->AddGuideMessage("$MsgTutorialFinishSteamEngine$");
guide->ShowGuideMessage();
return FX_Execute_Kill;
}
return FX_OK;
}
protected func OnGuideMessageShown(int plr, int index)
{
// Show the location for the compensator.
if (index == 1)
{
TutArrowShowPos(200, 300, 135);
}
// Show the location for the steam engine.
if (index == 6)
{
TutArrowShowPos(872, 456, 135);
}
return;
}
protected func OnGuideMessageRemoved(int plr, int index)
{
TutArrowClear();
return;
}
/*-- Clonk restoring --*/
global func FxClonkRestoreTimer(object target, proplist effect, int time)
{
// Respawn clonk to new location if reached certain position.
return FX_OK;
}
// Relaunches the clonk, from death or removal.
global func FxClonkRestoreStop(object target, effect, int reason, bool temporary)
{
if (reason == 3 || reason == 4)
{
var restorer = CreateObject(ObjectRestorer, 0, 0, NO_OWNER);
var x = BoundBy(target->GetX(), 0, LandscapeWidth());
var y = BoundBy(target->GetY(), 0, LandscapeHeight());
restorer->SetPosition(x, y);
var to_x = effect.to_x;
var to_y = effect.to_y;
// Respawn new clonk.
var plr = target->GetOwner();
var clonk = CreateObject(Clonk, 0, 0, plr);
clonk->GrabObjectInfo(target);
Rule_BaseRespawn->TransferInventory(target, clonk);
SetCursor(plr, clonk);
clonk->DoEnergy(100000);
restorer->SetRestoreObject(clonk, nil, to_x, to_y, 0, "ClonkRestore");
GameCall("OnClonkRestore", clonk);
}
return FX_OK;
}

View File

@ -0,0 +1,22 @@
# Goal Description
MsgGoalName=Restore Power
MsgGoalDescription=Restore the power supply and construct an airplane.
# Dialogue options
MsgNextTutorial=&Nächste Lernrunde
MsgNextTutorialDesc=Die nächste Lernrunde starten.
MsgRepeatRound=&Lernrunde wiederholen
MsgRepeatRoundDesc=Diese Lernrunde wiederholen.
# Tutorial messages
MsgTutorialTakeElevator=There is just barely enough wind to supply the elevator with power. Take it up to the sky island above, then take a hammer from the workshop over there. To call the elevator, press [%s] when standing close to the elevator shaft.
MsgTutorialBuildCompensator=On this island we can build a compensator, build one at the indicated location underground. Compensators can store superfluous power in the system, this is useful when you have wind generators.
MsgTutorialBuyMetal=Good, you can dig out a coal on the left and add it to the construction site. The villagers allow you to buy metal from their flagpole. In some rounds you can buy certain items at the flagpole, just open the interaction menu (by pressing [%s]) and click on the item you want to buy in the \"Buy Stuff\" tab.
MsgTutorialPowerOverview=Okay now that the compensator is finished any surplus power will be stored by it. All power in a connected area is shared, an overview can be found at the flagpole in the \"Power Overview\" tab.
MsgTutorialEnterCatapult=Now it is time you get to the island on the right to build a steam engine as back-up power supply. We can use the catapult for that, with which you can either shoot objects or yourself. Stand in front of the catapult and hold [%s], then press [%s] to toggle between entering and grabbing the catapult and release [%s] again.
MsgTutorialLaunchCatapult=To see where you are aiming the catapult you might want to zoom out, you can zoom with [F5/F6] or with [%s/%s]. Then hold [%s] to start aiming the catapult and release it to shoot yourself, the trajectory will go through the mouse cursor if possible.
MsgTutorialBuildSteamEngine=Good, you see that catapults can be a mode of transportation! Use your hammer to place a steam engine at the indicated location underground. Steam engines burn fuel like coal and wood to produce power on demand, exactly what we need to power the shipyard.
MsgTutorialTransportMaterials=This construction needs rock and metal, to get the rock you can fetch some dynamite from the chemical lab and blast the patch of rock on this island. To get the metal we need to access a flagpole to buy some more. Use the catapult on this island to get to the bottom island and use the elevator to get up again.
MsgTutorialShootCoalAndMetal=The steam engine will also need some coal to produce power, dig out some coal and then grab the catapult with [%s]. Select a piece of coal in your inventory and shoot it over to the island on the right the same way you shot yourself. Then buy three pieces of metal and shoot yourself to the island as well.
MsgTutorialFinishSteamEngine=Good, now finish the steam engine and put some coal into it. Then catapult yourself to the island with the shipyard and produce the airplane.
MsgTutorialCompleted=You are becoming an expert. Time to get some clunkers in the next tutorial!

View File

@ -0,0 +1,22 @@
# Goal Description
MsgGoalName=Restore Power
MsgGoalDescription=Restore the power supply and construct an airplane.
# Dialogue options
MsgNextTutorial=&Next tutorial
MsgNextTutorialDesc=Start the next tutorial scenario.
MsgRepeatRound=&Repeat this round
MsgRepeatRoundDesc=Restart this scenario.
# Tutorial messages
MsgTutorialTakeElevator=There is just barely enough wind to supply the elevator with power. Take it up to the sky island above, then take a hammer from the workshop over there. To call the elevator, press [%s] when standing close to the elevator shaft.
MsgTutorialBuildCompensator=On this island we can build a compensator, build one at the indicated location underground. Compensators can store superfluous power in the system, this is useful when you have wind generators.
MsgTutorialBuyMetal=Good, you can dig out a coal on the left and add it to the construction site. The villagers allow you to buy metal from their flagpole. In some rounds you can buy certain items at the flagpole, just open the interaction menu (by pressing [%s]) and click on the item you want to buy in the \"Buy Stuff\" tab.
MsgTutorialPowerOverview=Okay now that the compensator is finished any surplus power will be stored by it. All power in a connected area is shared, an overview can be found at the flagpole in the \"Power Overview\" tab.
MsgTutorialEnterCatapult=Now it is time you get to the island on the right to build a steam engine as back-up power supply. We can use the catapult for that, with which you can either shoot objects or yourself. Stand in front of the catapult and hold [%s], then press [%s] to toggle between entering and grabbing the catapult and release [%s] again.
MsgTutorialLaunchCatapult=To see where you are aiming the catapult you might want to zoom out, you can zoom with [F5/F6] or with [%s/%s]. Then hold [%s] to start aiming the catapult and release it to shoot yourself, the trajectory will go through the mouse cursor if possible.
MsgTutorialBuildSteamEngine=Good, you see that catapults can be a mode of transportation! Use your hammer to place a steam engine at the indicated location underground. Steam engines burn fuel like coal and wood to produce power on demand, exactly what we need to power the shipyard.
MsgTutorialTransportMaterials=This construction needs rock and metal, to get the rock you can fetch some dynamite from the chemical lab and blast the patch of rock on this island. To get the metal we need to access a flagpole to buy some more. Use the catapult on this island to get to the bottom island and use the elevator to get up again.
MsgTutorialShootCoalAndMetal=The steam engine will also need some coal to produce power, dig out some coal and then grab the catapult with [%s]. Select a piece of coal in your inventory and shoot it over to the island on the right the same way you shot yourself. Then buy three pieces of metal and shoot yourself to the island as well.
MsgTutorialFinishSteamEngine=Good, now finish the steam engine and put some coal into it. Then catapult yourself to the island with the shipyard and produce the airplane.
MsgTutorialCompleted=You are becoming an expert. Time to get some clunkers in the next tutorial!

View File

@ -0,0 +1,33 @@
// The Skyville head.
#appendto Dialogue
public func Dlg_SkyvilleHead_Init(object clonk)
{
return true;
}
public func Dlg_SkyvilleHead_1(object clonk)
{
MessageBox("$DlgSkyvilleHeadThanks$", clonk, dlg_target);
return true;
}
public func Dlg_SkyvilleHead_2(object clonk)
{
MessageBox("$DlgSkyvilleHeadDoBest$", clonk, clonk);
return true;
}
public func Dlg_SkyvilleHead_3(object clonk)
{
MessageBox("$DlgSkyvilleHeadManage$", clonk, dlg_target);
StopDialogue();
SetDialogueProgress(1);
return true;
}
public func Dlg_SkyvilleHead_Closed(object clonk)
{
return true;
}

View File

@ -0,0 +1,45 @@
// The village head.
#appendto Dialogue
public func Dlg_VillageHead_Init(object clonk)
{
return true;
}
public func Dlg_VillageHead_1(object clonk)
{
MessageBox("$DlgVillageHeadGrateful$", clonk, dlg_target);
return true;
}
public func Dlg_VillageHead_2(object clonk)
{
MessageBox("$DlgVillageHeadWhatToDo$", clonk, clonk);
return true;
}
public func Dlg_VillageHead_3(object clonk)
{
MessageBox("$DlgVillageHeadPower$", clonk, dlg_target);
return true;
}
public func Dlg_VillageHead_4(object clonk)
{
MessageBox("$DlgVillageHeadIWill$", clonk, clonk);
return true;
}
public func Dlg_VillageHead_5(object clonk)
{
MessageBox("$DlgVillageHeadAfterwards$", clonk, dlg_target);
StopDialogue();
SetDialogueProgress(1);
return true;
}
public func Dlg_VillageHead_Closed(object clonk)
{
return true;
}

View File

@ -0,0 +1,26 @@
// Awards the easter egg if the player finds the windbag.
#appendto WindBag
// Award achievement if the wind bag has been collected.
public func Entrance(object container)
{
if (container->GetOCF() & OCF_CrewMember)
{
// Only perform events on first wall jump.
if (GetEffect("IntAwardedAchievement", this))
return _inherited(container, ...);
AddEffect("IntAwardedAchievement", this, 100);
// Add some stars effect to the clonk indicating the easteregg.
container->CreateParticle("StarSpark", PV_Random(-3, 3), PV_Random(-14, -10), PV_Random(-5, 5), PV_Random(-8, 0), 25, Particles_Magic(), 20);
// Achievement: easter egg found.
GainScenarioAchievement("TutorialEasterEgg");
}
return _inherited(container, ...);
}
protected func FxIntAwardedAchievementStart(object target, proplist effect, int temporary)
{
// Just a an effect which should always stay and hence accept always.
return FX_OK;
}

View File

@ -0,0 +1,13 @@
// Fix the catapults to their position.
#appendto Catapult
public func Initialize()
{
SetCategory(C4D_StaticBack);
AddVertex(0, 18);
return _inherited(...);
}
public func ControlLeft(object clonk) { return true; }
public func ControlRight(object clonk) { return true; }

View File

@ -0,0 +1,29 @@
// Intro sequence for this tutorial.
#appendto Sequence
public func Intro_Init(int for_plr)
{
return true;
}
public func Intro_JoinPlayer(int plr)
{
return;
}
public func Intro_Start()
{
return ScheduleNext(40);
}
public func Intro_1()
{
return Stop();
}
public func Intro_Stop()
{
GameCall("OnIntroSequenceFinished", this.plr);
return true;
}

View File

@ -0,0 +1,40 @@
// Outro sequence for this tutorial.
#appendto Sequence
public func Outro_Init(int for_plr)
{
return true;
}
public func Outro_JoinPlayer(int plr)
{
SetPlayerZoomByViewRange(plr, 300, nil, PLRZOOM_Direct | PLRZOOM_Set);
return;
}
public func Outro_Start()
{
return ScheduleNext(4);
}
public func Outro_1()
{
// Show last guide message and then stop the sequence and fulfill the goal.
GameCall("ShowLastGuideMessage");
return ScheduleNext(108);
}
public func Outro_2()
{
return Stop();
}
public func Outro_Stop()
{
// Fulfill the tutorial goal.
var goal = FindObject(Find_ID(Goal_Tutorial));
if (goal)
goal->Fulfill();
return true;
}

View File

@ -0,0 +1,5 @@
// Larger power radius for steam engine to make a connection in this round.
#appendto SteamEngine
local DefaultFlagRadius = 300;

View File

@ -0,0 +1,11 @@
# Dialogue: village head
DlgVillageHeadGrateful=I am grateful you managed to get us here to Skyville.
DlgVillageHeadWhatToDo=Yes, it is good that these villagers want to help us.
DlgVillageHeadPower=Indeed, please help them restoring their power production.
DlgVillageHeadIWill=I will!
DlgVillageHeadAfterwards=Okay, then we can get some clunkers afterwards.
# Sequence: intro
# Sequence: outro

View File

@ -0,0 +1,16 @@
# Dialogue: village head
DlgVillageHeadGrateful=I am grateful you managed to get us here to Skyville.
DlgVillageHeadWhatToDo=Yes, it is good that these villagers want to help us.
DlgVillageHeadPower=Indeed, please help them restoring their power production.
DlgVillageHeadIWill=I will!
DlgVillageHeadAfterwards=Okay, then we can get some clunkers afterwards.
# Dialogue: Skyville head
DlgSkyvilleHeadThanks=Thanks for helping us out, it would be great if you could provide the shipyard with power again.
DlgSkyvilleHeadDoBest=I'll do my best.
DlgSkyvilleHeadManage=If you manage you can use the materials in the shipyard to produce an airplane.
# Sequence: intro
# Sequence: outro

View File

@ -0,0 +1,2 @@
DE:Stromproblematik
US:Power Problems