Skylands.ocs: Sky islands scenario WIP

fixed some typo in Crash.ocs
Sven Eberhardt 2012-03-12 00:50:13 +01:00
parent f6725b720f
commit 18fb523f58
64 changed files with 4117 additions and 1 deletions

View File

@ -11,7 +11,7 @@ MsgCrashedPlane=Und, habt ihr das Flugzeug schon gefunden?
AnsCrashedPlane=Nein, wir suchen noch.
# NPC Merchant
MsgSellPlans=Ich habe hier ein paar interessante Bauplaene! Fuer 150 Clunker wuerde ich sie dir ueberlasdsen.
MsgSellPlans=Ich habe hier ein paar interessante Bauplaene! Fuer 150 Clunker wuerde ich sie dir ueberlasden.
AnsNoMoney=Da muss ich noch etwas Gold abbauen. Ich komme spaeter wieder.
AnsBuyPlans=Das ist ein guter Deal; hier sind deine Clunker.
MsgGivePlans=Danke! Hier hast du Plaene fuer {{Pump}}, {{Pipe}}, {{Catapult}} und {{Cannon}}. Aber Vorsicht: Die Pumpe ist aus Holz und sollte nicht zum Pumpen von Lava verwendet werden!

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,20 @@
[DefCore]
id=LiftTower
Version=5,2,0,1
Category=C4D_Structure
Timer=5
TimerCall=SpinWheel
Width=23
Height=68
Offset=-11,-10
Vertices=4
VertexX=-11,11,-11,11
VertexY=-10,-10,58,58
VertexFriction=50,50,100,100
Value=200
Mass=4500
Components=Metal=2;Wood=4;
Exclusive=1
BlastIncinerate=100
Construction=1
ContainBlast=1

View File

@ -0,0 +1,15 @@
[DefCore]
id=LiftTower_Hook
Version=5,2,0,1
Category=C4D_Object
Timer=2
TimerCall=Rotation
Width=8
Height=8
Offset=-4,-4
Vertices=3
VertexX=0,2,-2
VertexY=1,-1,-1
VertexFriction=50,50,50
Mass=4
Rotate=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 B

View File

@ -0,0 +1,135 @@
/*-- Hook --*/
local tower, rope;
/* Connection */
public func ControlUse(object clonk, int x, int y)
{
// Search for objects to connect with!
var connect = FindObjects(Find_Category(C4D_Vehicle), Find_AtPoint(), Find_Not(Find_Func("NoLiftTowerConnection")));
if (!GetLength(connect)) return true;
if (GetLength(connect) == 1) return ConnectTo(connect[0]);
var menu = clonk->CreateRingMenu(GetID(), this);
for (var connect_object in connect)
menu->AddItem(connect_object);
menu->Show();
}
public func Selected(object menu, object selected)
{
return ConnectTo(selected->GetSymbol());
}
public func ConnectTo(object connect)
{
Hook();
/* rope->BreakRope(true);
SetRope(true);
rope->Connect(tower, connect);*/
rope->Reconnect(connect);
AddEffect("Connecting", this, 1, 1, this, nil, connect);
return true;
}
private func Hook()
{
if (Contained()) Exit();
this.Collectible = 0;
SetCategory(C4D_StaticBack);
}
private func Unhook()
{
this.Collectible = 1;
SetCategory(C4D_Object);
}
private func FxConnectingStart(object target, effect, int temp, object connect_object)
{
if (temp) return;
effect.connection = connect_object;
}
private func FxConnectingTimer(object target, effect)
{
if (!rope)
{
Unhook();
return -1;
}
if (!effect.connection)
{
Unhook();
rope->BreakRope(true);
SetRope();
return -1;
}
SetPosition(effect.connection->GetX(), effect.connection->GetY());
}
public func Connected()
{
return GetEffect("Connecting", this);
}
public func IsInteractable(object clonk)
{
return !this.Collectible && clonk->GetAction() == "Walk";
}
public func GetInteractionMetaInfo(object clonk)
{
return { IconID = LiftTower_Hook, Description = "$Unhook$" };
}
public func Interact(object clonk)
{
if(clonk->Collect(this))
{
RemoveEffect("Connecting", this);
Unhook();
rope->BreakRope(true);
SetRope();
return true;
}
return false;
}
/* Events */
protected func Hit()
{
Sound("MetalHit?");
}
func Construction(object constructor)
{
tower = constructor;
}
func SetRope(bool no_connect)
{
rope = CreateObject(LiftTower_Rope,0,0,NO_OWNER);
if (!no_connect) rope->Connect(tower, this);
tower->SetRope(rope);
return rope;
}
public func Destruction()
{
if(rope)
rope->HookRemoved();
}
protected func Rotation()
{
if (!rope) return;
SetR(rope->GetHookAngle());
}
public func NoLiftTowerConnection() { return true; }
local Name = "$Name$";
local Description = "$Description$";
local Collectible = 1;

View File

@ -0,0 +1,3 @@
Name=Haken
Description=Drücke [Benutzen] vor einem Fahrzeug oder einem anderen großen Gegenstand, um den Haken zu befestigen.
Unhook=Haken abnehmen.

View File

@ -0,0 +1,3 @@
Name=Hook
Description=Press [Use] in front of a vehicle or another big object to attach the hook.
Unhook=Unhook object.

View File

@ -0,0 +1,8 @@
[DefCore]
id=LiftTower_Rope
Version=5,2,0,1
Category=C4D_StaticBack
Vertices=2
Width=2
Height=12
Offset=-1,-6

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 767 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@ -0,0 +1,259 @@
/*
Lift Tower Rope
Author: Randrian, Clonkonaut
The rope used for the lift tower.
Connect(obj1, obj2) connects two objects
BreakRope() breaks the rope
*/
#include Library_Rope
static const Weight = 1;
// Call this to break the rope.
public func BreakRope(bool silent)
{
if(length == -1) return;
length = -1;
var act1 = objects[0][0];
var act2 = objects[1][0];
SetAction("Idle");
// notify action targets.
if (act1 != nil && !silent)
act1->~OnRopeBreak();
if (act2 != nil && !silent)
act2->~OnRopeBreak();
RemoveRope();
RemoveObject();
return;
}
/* --------------------- Callbacks form the rope ---------------------- */
/* To be overloaded for special segment behaviour */
private func CreateSegment(int index, object previous)
{
if(index == 0) return;
var segment;
segment = CreateObject(LiftTower_Rope);
return segment;
}
/*-- Rope connecting --*/
// Connects two objects to the rope, but the length will vary on their positions.
public func Connect(object obj1, object obj2)
{
StartRopeConnect(obj1, obj2);
SetMaxLength(200);
SetFixed(true, false);
SetAction("Hide");
AddEffect("IntHang", this, 1, 1, this);
return;
}
public func Reconnect(object reconnect)
{
objects[1][0] = reconnect;
}
public func GetConnectStatus() { return !length_auto; }
public func HookRemoved()
{
BreakRope();
}
func FxIntHangTimer() { TimeStep(); }
local last_point;
func UpdateLines()
{
var oldangle;
for(var i=1; i < ParticleCount; i++)
{
// Update the Position of the Segment
segments[i]->SetPosition(GetPartX(i), GetPartY(i));
// Calculate the angle to the previous segment
var angle = Angle(particles[i][0][0], particles[i][0][1], particles[i-1][0][0], particles[i-1][0][1]);
// Draw the left line
var start = particles[i-1][0][:];
var end = particles[i][0][:];
if(i == 1 && ParticleCount > 2)
{
angle = Angle(particles[2][0][0], particles[2][0][1], particles[0][0][0], particles[0][0][1]);
end = particles[0][0][:];
end[0] += -Sin(angle, 45*Rope_Precision/10);
end[1] += +Cos(angle, 45*Rope_Precision/10);
segments[i]->SetGraphics("Invis");
}
if(i == 2)
{
angle = Angle(particles[2][0][0], particles[2][0][1], particles[0][0][0], particles[0][0][1]);
start = particles[0][0][:];
start[0] += -Sin(angle, 45*Rope_Precision/10);
start[1] += +Cos(angle, 45*Rope_Precision/10);
segments[i]->SetGraphics("Short");
}
var diff = Vec_Sub(end,start);
var point = Vec_Add(start, Vec_Div(diff, 2));
var diffangle = Vec_Angle(diff, [0,0]);
var length = Vec_Length(diff)*1000/Rope_Precision/10;
if(i == ParticleCount-1)
{
var old = particles[i-2][0][:];
var old_diff = Vec_Sub(start,old);
var o_length = Vec_Length(old_diff)*1000/Rope_Precision/10;
if(!o_length) diff = old_diff;
else diff = Vec_Div(Vec_Mul(old_diff, length),o_length);
diffangle = Vec_Angle(diff, [0,0]);
point = Vec_Add(start, Vec_Div(diff, 2));
last_point = point;
}
segments[i]->SetGraphics(nil);
SetLineTransform(segments[i], -diffangle, point[0]*10-GetPartX(i)*1000,point[1]*10-GetPartY(i)*1000, length );
// Remember the angle
oldangle = angle;
}
}
func GetHookAngle()
{
if(ParticleCount > 3)
return Angle(particles[-2][0][0], particles[-2][0][1], particles[-3][0][0], particles[-3][0][1])+180;
}
func SetLineTransform(obj, int r, int xoff, int yoff, int length, int layer, int MirrorSegments) {
if(!MirrorSegments) MirrorSegments = 1;
var fsin=Sin(r, 1000), fcos=Cos(r, 1000);
// set matrix values
obj->SetObjDrawTransform (
+fcos*MirrorSegments, +fsin*length/1000, xoff,
-fsin*MirrorSegments, +fcos*length/1000, yoff,layer
);
}
/* Overload */
local pull_position, pull_faults, pull_frame;
// Altered to not just pull the objects into the rope's direction but
// if the object doesn't not move it is tried to shake it free by applying
// impulses to every direction
func ForcesOnObjects()
{
if(!length) return;
var redo = LengthAutoTryCount();
while(length_auto && redo)
{
var speed = Vec_Length(Vec_Sub(particles[-1][0], particles[-1][1]));
if(length == GetMaxLength())
{
if(ObjContact(objects[1][0]))
speed = 40;
else speed = 100;
}
if(speed > 150) DoLength(1);
else if(speed < 50) DoLength(-1);
else redo = 0;
if(redo) redo --;
}
var j = 0;
if(PullObjects() )
for(var i = 0; i < 2; i++)
{
if(i == 1) j = ParticleCount-1;
var obj = objects[i][0];
if(obj == nil || objects[i][1] == 0) continue;
if(obj->Contained()) obj = obj->Contained();
if( (obj->GetAction() == "Walk" || obj->GetAction() == "Scale" || obj->GetAction() == "Hangle"))
obj->SetAction("Jump");
if( obj->GetAction() == "Climb")
obj->SetAction("Jump");
var xdir = BoundBy(particles[j][0][0]-particles[j][1][0], -100, 100);
var ydir = particles[j][0][1]-particles[j][1][1];
if (!obj->GetContact(-1))
ydir = BoundBy(ydir, -50, 50);
if (pull_position && pull_frame != FrameCounter() && !Distance(pull_position[0], pull_position[1], obj->GetX(), obj->GetY()))
{
if (!pull_faults)
{
ydir *= -1;
pull_faults++;
}
else
{
xdir *= -1;
pull_faults = 0;
}
}
else
{
pull_position = [obj->GetX(), obj->GetY()];
pull_faults = 0;
}
pull_frame = FrameCounter();
obj->SetXDir( xdir, Rope_Precision);
obj->SetYDir( obj->GetYDir() + ydir, Rope_Precision);
//Log("%v, %v", xdir, ydir);
}
}
// Altered to function in 'ConnectPull' mode
public func ConstraintObjects()
{
if(length < GetMaxLength()) // in the rope library this is
{ // if(length_auto && length < GetMaxLength())
for(var i = 0, i2 = 0; i < 2; i++ || i2--)
SetParticleToObject(i2, i);
}
}
// This is called constantly by the lift tower as long as something is reeled in
// Altered so the rope will not get shorter than the distance between the tower
// and the hooked up object
public func DoLength(int dolength)
{
var obj = objects[0][0]; // First connected object
var obj2 = objects[1][0]; // Second connected object
// I guess this is not possible but just to be sure
if (!obj || !obj2) return _inherited(dolength);
if (obj->Contained()) obj = obj->Contained();
if (obj2->Contained()) obj2 = obj2->Contained();
// Line would be shorter than the distance? Do nothing
if (dolength < 0 && ObjectDistance(obj, obj2) > GetLineLength()/100) return;
return _inherited(dolength);
}
func Definition(def)
{
def.LineColors = [RGB(66,33,00), RGB(66,33,00)];
}
local ActMap = {
Hide = {
Prototype = Action,
Name = "Hide",
},
};
local Name = "$Name$";

View File

@ -0,0 +1,14 @@
material Material
{
receive_shadows on
technique
{
pass
{
ambient 0.500000 0.500000 0.500000 1.000000
diffuse 0.584337 0.584337 0.584337 1.000000
specular 0.500000 0.500000 0.500000 1.000000 12.500000
emissive 0.000000 0.000000 0.000000 1.000000
}
}
}

View File

@ -0,0 +1,163 @@
/*--
LiftTower
Authors: Clonkonaut
--*/
local hook, rope;
local hook_pos, anim_no, stopped, direction;
static const LIFTTOWER_HOOK_LOOSEDIST = 50;
public func Construction()
{
SetProperty("MeshTransformation",Trans_Rotate(RandomX(-20,20),0,1,0));
return _inherited(...);
}
protected func Initialize()
{
OnRopeBreak();
hook_pos = CreateArray();
anim_no = PlayAnimation("Turn", 10, Anim_Const(0), Anim_Const(1000));
stopped = true;
}
/* Rope */
func OnRopeBreak()
{
if (!hook)
hook = CreateObject(LiftTower_Hook, 0,0, NO_OWNER);
hook->Enter(this);
}
/* Interaction */
func IsInteractable(object clonk)
{
return GetCon() >= 100;
}
func GetInteractionMetaInfo()
{
if (!hook) OnRopeBreak();
if (hook->Contained() == this)
return { IconID = LiftTower_Hook, Description = "$TakeHook$" };
}
func Interact(object clonk)
{
if (!hook) OnRopeBreak();
if (clonk->GetAction() == "Walk")
{
if (hook->Contained() == this)
if (clonk->Collect(hook,true))
hook->SetRope();
return true;
}
return false;
}
func SetRope(object rope_to_set)
{
rope = rope_to_set;
}
/* Control */
public func ControlUp(object clonk)
{
return DrawIn();
}
public func ControlStop(object clonk)
{
return RemoveEffect("DrawIn", this);
}
public func DrawIn()
{
if (!rope) return false;
if (!hook) OnRopeBreak();
if (hook->Contained() == this) return false;
if (ObjectDistance(hook) < LIFTTOWER_HOOK_LOOSEDIST) return false;
if (GetEffect("DrawIn", this)) return false;
rope->ConnectPull();
return AddEffect("DrawIn", this, 1, 1, this);
}
private func FxDrawInTimer(effect)
{
if (!rope) return -1;
if (!hook)
{
OnRopeBreak();
return -1;
}
rope->DoLength(-1);
if (ObjectDistance(hook) < LIFTTOWER_HOOK_LOOSEDIST) return -1;
}
private func FxDrawInStop(object target, effect, int temp)
{
if (temp) return;
if (!rope) return;
rope->ConnectLoose();
}
/* Animation */
protected func SpinWheel()
{
if (!hook) return StopWheel();
if (hook->Contained() == this) return StopWheel();
if (hook->GetX() == hook_pos[0])
if (hook->GetY() == hook_pos[1])
return StopWheel();
stopped = false;
var new_direction = false;
if (!direction)
{
direction = 100;
new_direction = true;
}
if (Distance(GetX(),GetY(), hook->GetX(), hook->GetY()) < Distance(GetX(),GetY(), hook_pos[0], hook_pos[1]))
{
if (direction > 0)
{
direction = -100;
new_direction = true;
}
}
else if (direction < 0)
{
direction = 100;
new_direction = true;
}
hook_pos = [hook->GetX(), hook->GetY()];
if (!new_direction) return;
if (direction < 0)
anim_no = PlayAnimation("Turn", 10, Anim_Linear(GetAnimationPosition(anim_no), GetAnimationLength("Turn"), 0, 40, ANIM_Loop), Anim_Const(1000));
else
anim_no = PlayAnimation("Turn", 10, Anim_Linear(GetAnimationPosition(anim_no), 0, GetAnimationLength("Turn"), 40, ANIM_Loop), Anim_Const(1000));
}
private func StopWheel()
{
if (stopped) return;
var position = GetAnimationPosition(anim_no);
stopped = true;
direction = 0;
anim_no = PlayAnimation("Turn", 10, Anim_Const(position), Anim_Const(1000));
}
func Definition(def) {
SetProperty("PictureTransformation", Trans_Mul(Trans_Translate(2000,0,7000),Trans_Rotate(-20,1,0,0),Trans_Rotate(30,0,1,0)), def);
}
local Name = "$Name$";
local Description = "$Description$";
local Touchable = 1;

View File

@ -0,0 +1,3 @@
Name=Hebeturm
Description=Um schwere Lasten zu heben.
TakeHook=Haken nehmen.

View File

@ -0,0 +1,3 @@
Name=Lift Tower
Description=For pulling heavy loads.
TakeHook=Take the hook.

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -0,0 +1,16 @@
[DefCore]
id=Plane_Chassis
Version=5,2,0,1
Category=C4D_Vehicle
Width=60
Height=25
Offset=-30,-12
Vertices=6
VertexX=-25,-25,0,0,27,25
VertexY=7,-7,7,-7,-8,1
VertexFriction=30,60,30,60,60,30
Value=40
Mass=100
Components=Wood=3;Metal=2;
Rotate=1
Float=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

View File

@ -0,0 +1,20 @@
/*--
Plane part: Chassis
Author: Sven2
Used to construct the plane
--*/
private func Hit()
{
Sound("WoodHit");
}
public func Definition(proplist def)
{
}
local Collectible = false;
local Name = "$Name$";
local Description = "$Description$";
local Rebuy = true;

View File

@ -0,0 +1,2 @@
Name=Rumpf
Description=Ein wichtiges Teil des Flugzeuges.

View File

@ -0,0 +1,2 @@
Name=Chassis
Description=An important part of the plane.

View File

@ -0,0 +1,18 @@
[DefCore]
id=Plane_Construction
Version=5,2,0,1
Category=C4D_Structure
Width=60
Height=29
Offset=-30,-14
Vertices=2
VertexX=-18,18
VertexY=14,14
VertexFriction=100,100
Value=200
Mass=4000
Components=Plane_Propeller=1;Plane_Chassis=1;Plane_Skids=1;Plane_Engine=1;Plane_Wings=1;
Construction=0
Rotate=0
TimerCall=Timer
Timer=10

View File

@ -0,0 +1,16 @@
[DefCore]
id=Plane_Engine
Version=5,2,0,1
Category=C4D_Object
Width=13
Height=8
Offset=-6,-4
Vertices=4
VertexX=-3,-3,5,5
VertexY=-3,3,-3,3
VertexFriction=60,60,60,60
Value=12
Mass=20
Components=Metal=10;
Rotate=1
Float=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,22 @@
/*--
Plane part: Engine
Author: Sven2
Used to construct the plane
--*/
private func Hit()
{
Sound("WoodHit");
}
func IsToolProduct() { return true; }
public func Definition(proplist def)
{
}
local Collectible = true;
local Name = "$Name$";
local Description = "$Description$";
local Rebuy = true;

View File

@ -0,0 +1,2 @@
Name=Motor
Description=Ein wichtiges Teil des Flugzeuges.

View File

@ -0,0 +1,2 @@
Name=Engine
Description=An important part of the plane.

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File

@ -0,0 +1,16 @@
[DefCore]
id=Plane_Propeller
Version=5,2,0,1
Category=C4D_Object
Width=9
Height=10
Offset=-5,-5
Vertices=3
VertexX=-4,3,3
VertexY=0,-4,4
VertexFriction=60,60,60
Value=12
Mass=20
Components=Wood=1;Metal=1;
Rotate=1
Float=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -0,0 +1,20 @@
/*--
Plane part: Propeller
Author: Sven2
Used to construct the plane
--*/
private func Hit()
{
Sound("WoodHit");
}
public func Definition(proplist def)
{
}
local Collectible = true;
local Name = "$Name$";
local Description = "$Description$";
local Rebuy = true;

View File

@ -0,0 +1,2 @@
Name=Propeller
Description=Ein wichtiges Teil des Flugzeuges.

View File

@ -0,0 +1,2 @@
Name=Propeller
Description=An important part of the plane.

View File

@ -0,0 +1,62 @@
/*--
Plane construction site
Author: Sven2
Successive buildup of the plane
--*/
local progress, next_part;
public func Initialize()
{
SetProgress(0);
}
func SetProgress(int new_progress)
{
var parts = [Plane_Skids, Plane_Chassis, Plane_Wings, Plane_Engine, Plane_Propeller, nil];
progress = new_progress;
if (!progress)
{
SetGraphics("Site");
SetGraphics(nil, nil, GFX_Overlay, GFXOV_MODE_Base);
}
else if (progress < 5)
{
SetGraphics(Format("%d", new_progress));
SetGraphics("Site", GetID(), GFX_Overlay, GFXOV_MODE_Base);
}
else
{
SetGraphics();
SetGraphics(nil, nil, GFX_Overlay, GFXOV_MODE_Base);
}
next_part = parts[progress];
return true;
}
func Timer()
{
if (next_part)
for (var part in FindObjects(Find_ID(next_part), Find_InRect(-30,-15,60,30), Find_Layer(GetObjectLayer())))
if (part->GetCon() >= 100)
{
AddPart(part);
return;
}
}
func AddPart(object part)
{
part->RemoveObject();
Sound("Applause", true);
SetProgress(progress+1);
return true;
}
func Definition(def) {
}
local Name = "$Name$";

View File

@ -0,0 +1,16 @@
[DefCore]
id=Plane_Skids
Version=5,2,0,1
Category=C4D_Vehicle
Width=38
Height=8
Offset=-19,-4
Vertices=5
VertexX=-18,-12,8,18,0
VertexY=3,-3,-3,3,3
VertexFriction=30,60,60,30,30
Value=20
Mass=20
Components=Metal=2;
Rotate=1
Float=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@ -0,0 +1,20 @@
/*--
Plane part: Skids
Author: Sven2
Used to construct the plane
--*/
private func Hit()
{
Sound("WoodHit");
}
public func Definition(proplist def)
{
}
local Collectible = false;
local Name = "$Name$";
local Description = "$Description$";
local Rebuy = true;

View File

@ -0,0 +1,2 @@
Name=Kufen
Description=Ein wichtiges Teil des Flugzeuges.

View File

@ -0,0 +1,2 @@
Name=Skids
Description=An important part of the plane.

View File

@ -0,0 +1 @@
Name=Flugzeugbaustelle

View File

@ -0,0 +1 @@
Name=Plane construction site

View File

@ -0,0 +1,16 @@
[DefCore]
id=Plane_Wings
Version=5,2,0,1
Category=C4D_Vehicle
Width=10
Height=35
Offset=-5,-17
Vertices=4
VertexX=-4,-4,4,4
VertexY=-16,16,-16,16
VertexFriction=60,60,60,60
Value=30
Mass=50
Components=Wood=2;Metal=1;
Rotate=1
Float=0

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -0,0 +1,20 @@
/*--
Plane part: Wings
Author: Sven2
Used to construct the plane
--*/
private func Hit()
{
Sound("WoodHit");
}
public func Definition(proplist def)
{
}
local Collectible = false;
local Name = "$Name$";
local Description = "$Description$";
local Rebuy = true;

View File

@ -0,0 +1,2 @@
Name=Fluegel
Description=Ein wichtiges Teil des Flugzeuges.

View File

@ -0,0 +1,2 @@
Name=Wings
Description=An important part of the plane.

View File

@ -0,0 +1,50 @@
[Head]
Icon=25
Title=Skylands
Version=5,2,90,20
Difficulty=20
MaxPlayer=30
NoInitialize=true
[Game]
Rules=Rule_EnergyNeed=1;Rule_TeamAccount=1;Rule_BuyAtFlagpole=1
[Player1]
Wealth=10,0,0,250
Crew=Clonk=2
Knowledge=Plane_Engine=1;Foundry=1;ToolsWorkshop=1;WindGenerator=1;Flagpole=1;Sawmill=1;Elevator=1;Lorry=1;Pickaxe=1;Axe=1;Hammer=1;Shovel=1;Firestone=1;Barrel=1;Dynamite=1;DynamiteBox=1;LiftTower=1;Pump=1
HomeBaseMaterial=Loam=10;Wood=5;Metal=3;Shovel=2;Axe=2;Hammer=2;Clonk=5
HomeBaseProduction=Loam=10;Wood=5;Metal=3;Shovel=2;Axe=2;Hammer=2;Clonk=5
[Player2]
Wealth=10,0,0,250
Crew=Clonk=2
Knowledge=Plane_Engine=1;Foundry=1;ToolsWorkshop=1;WindGenerator=1;Flagpole=1;Sawmill=1;Elevator=1;Lorry=1;Pickaxe=1;Axe=1;Hammer=1;Shovel=1;Firestone=1;Barrel=1;Dynamite=1;DynamiteBox=1;LiftTower=1;Pump=1
HomeBaseMaterial=Loam=10;Wood=5;Metal=3;Shovel=2;Axe=2;Hammer=2;Clonk=5
HomeBaseProduction=Loam=10;Wood=5;Metal=3;Shovel=2;Axe=2;Hammer=2;Clonk=5
[Player3]
Wealth=10,0,0,250
Crew=Clonk=2
Knowledge=Plane_Engine=1;Foundry=1;ToolsWorkshop=1;WindGenerator=1;Flagpole=1;Sawmill=1;Elevator=1;Lorry=1;Pickaxe=1;Axe=1;Hammer=1;Shovel=1;Firestone=1;Barrel=1;Dynamite=1;DynamiteBox=1;LiftTower=1;Pump=1
HomeBaseMaterial=Loam=10;Wood=5;Metal=3;Shovel=2;Axe=2;Hammer=2;Clonk=5
HomeBaseProduction=Loam=10;Wood=5;Metal=3;Shovel=2;Axe=2;Hammer=2;Clonk=5
[Player4]
Wealth=10,0,0,250
Crew=Clonk=2
Knowledge=Plane_Engine=1;Foundry=1;ToolsWorkshop=1;WindGenerator=1;Flagpole=1;Sawmill=1;Elevator=1;Lorry=1;Pickaxe=1;Axe=1;Hammer=1;Shovel=1;Firestone=1;Barrel=1;Dynamite=1;DynamiteBox=1;LiftTower=1;Pump=1
HomeBaseMaterial=Loam=10;Wood=5;Metal=3;Shovel=2;Axe=2;Hammer=2;Clonk=5
HomeBaseProduction=Loam=10;Wood=5;Metal=3;Shovel=2;Axe=2;Hammer=2;Clonk=5
[Landscape]
Sky=Clouds2
BottomOpen=true
MapWidth=100,0,64,10000
MapHeight=200,0,40,10000
NewStyleLandscape=2
[Weather]
Climate=0,10,0,100
YearSpeed=0,0,0,100
Wind=0,100,-100,100

View File

@ -0,0 +1,60 @@
/**
Skylands
Assemble a plane on some floating islands
@authors Sven2
*/
static g_is_initialized;
static g_intro_initialized;
func DoInit(int first_player)
{
// Set time of day to evening and create some clouds and celestials.
EnsureObject(Environment_Clouds,0,0,-1);
EnsureObject(Environment_Celestial,0,0,-1);
EnsureObject(Rule_BuyAtFlagpole,0,0,-1);
var time = EnsureObject(Environment_Time,0,0,-1);
time->SetTime(600);
time->SetCycleSpeed(12);
// Goal
//CreateObject(Goal_Plane);
return true;
}
func EnsureObject(id def, int x, int y, int owner)
{
var obj = FindObject(Find_ID(def));
if (!obj) obj = CreateObject(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(GrappleBow);
}
index++;
}
return;
}

View File

@ -0,0 +1,5 @@
[Teams]
Active=false
Custom=false
AllowHostilityChange=true
AutoGenerateTeams=true

View File

@ -0,0 +1,2 @@
DE:Himmelsinseln
US:Skylands