forked from Mirrors/openclonk
BeyondTheRocks: Added Ore mine scenario
A somewhat more difficult scenario for suitable for a next release, may also be used for testing stuff in the meanwhile,
parent
d26689f8be
commit
724eac83c8
Binary file not shown.
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
|
@ -0,0 +1,90 @@
|
||||||
|
/*--
|
||||||
|
Iron Peak
|
||||||
|
Author: Maikel
|
||||||
|
|
||||||
|
A mountain peak filled with iron ore and coal, the crust consists
|
||||||
|
of granite, rock, ice and some entrances.
|
||||||
|
--*/
|
||||||
|
|
||||||
|
// Fills an overlay randomly with the specified material.
|
||||||
|
overlay RandomMat {
|
||||||
|
mask=1; invert=1; grp=1;
|
||||||
|
// Combine multiple algortihms to obtain more regularity than just rndchecker.
|
||||||
|
overlay {
|
||||||
|
algo=rndchecker; a=18;
|
||||||
|
zoomX=-25; zoomY=-25;
|
||||||
|
turbulence=100; lambda=3;
|
||||||
|
mask=1;
|
||||||
|
} | overlay {
|
||||||
|
algo=bozo; a=25;
|
||||||
|
zoomX=10; zoomY=-10;
|
||||||
|
turbulence=1000; lambda=3;
|
||||||
|
mask=1;
|
||||||
|
} | overlay {
|
||||||
|
algo=bozo; a=25;
|
||||||
|
zoomX=-10; zoomY=10;
|
||||||
|
turbulence=1000; lambda=3;
|
||||||
|
mask=1;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Fills the mountain with materials.
|
||||||
|
overlay MountainMaterials {
|
||||||
|
// Earth as background material.
|
||||||
|
mat=Earth; tex=earth;
|
||||||
|
RandomMat & overlay { mat=Earth; tex=earth_dry; };
|
||||||
|
RandomMat & overlay { mat=Earth; tex=earth_rough; };
|
||||||
|
// Combine random mat with all materials needed.
|
||||||
|
RandomMat & overlay { mat=Granite; tex=granite; };
|
||||||
|
RandomMat & overlay { mat=Rock; tex=rock_cracked; };
|
||||||
|
RandomMat & overlay { mat=Snow; tex=snow1; };
|
||||||
|
RandomMat & overlay { mat=Ice; tex=ice3; };
|
||||||
|
RandomMat & overlay { mat=Rock; tex=rock; };
|
||||||
|
RandomMat & overlay { mat=Tunnel; tex=tunnel; };
|
||||||
|
RandomMat & overlay { mat=Sulphur; tex=sulphur; };
|
||||||
|
RandomMat & overlay { mat=Ore; tex=ore; };
|
||||||
|
RandomMat & overlay { mat=Coal; tex=coal; };
|
||||||
|
// A little more diagonal tunnels.
|
||||||
|
overlay {
|
||||||
|
algo=lines; a=3; b=20;
|
||||||
|
rotate=45;
|
||||||
|
turbulence=100;
|
||||||
|
mat=Tunnel; tex=tunnel;
|
||||||
|
};
|
||||||
|
overlay {
|
||||||
|
algo=lines; a=3; b=20;
|
||||||
|
rotate=-45;
|
||||||
|
turbulence=100;
|
||||||
|
mat=Tunnel; tex=tunnel;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Fills the mountain crust with rocks and some earth and ice.
|
||||||
|
overlay CrustMaterials {
|
||||||
|
mat=Rock; tex=rock;
|
||||||
|
// Combine random mat with crust materials.
|
||||||
|
RandomMat & overlay { mat=Earth; tex=earth_dry; };
|
||||||
|
RandomMat & overlay { mat=Ice; tex=ice3; };
|
||||||
|
RandomMat & overlay { mat=Tunnel; tex=tunnel; };
|
||||||
|
RandomMat & overlay { mat=Granite; tex=granite; };
|
||||||
|
RandomMat & overlay { mat=Rock; tex=rock_cracked; };
|
||||||
|
};
|
||||||
|
|
||||||
|
map IronPeak {
|
||||||
|
overlay {
|
||||||
|
// A simple mountain peak with the polygon algorithm.
|
||||||
|
algo=poly;
|
||||||
|
point { x=0%; y=140%; };
|
||||||
|
point { x=45%; y=12%; };
|
||||||
|
point { x=55%; y=12%; };
|
||||||
|
point { x=100%; y=140%; };
|
||||||
|
turbulence=100; lambda=1;
|
||||||
|
// Fill the mountain with materials.
|
||||||
|
MountainMaterials;
|
||||||
|
overlay {
|
||||||
|
// Create a crust mainly with rocks and some entrance points.
|
||||||
|
algo=border; a=5; b=5;
|
||||||
|
CrustMaterials;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,13 @@
|
||||||
|
[Material]
|
||||||
|
Name=Rock
|
||||||
|
Shape=Rough
|
||||||
|
Density=50
|
||||||
|
Friction=100
|
||||||
|
BlastFree=1
|
||||||
|
Blast2Object=Rock
|
||||||
|
Blast2ObjectRatio=75
|
||||||
|
MaxAirSpeed=100
|
||||||
|
MaxSlide=250
|
||||||
|
Placement=50
|
||||||
|
Soil=1
|
||||||
|
TextureOverlay=rock
|
|
@ -0,0 +1,72 @@
|
||||||
|
# Static Map Material/Texture Table
|
||||||
|
# Index +128 for underground materials
|
||||||
|
OverloadMaterials
|
||||||
|
OverloadTextures
|
||||||
|
|
||||||
|
10=Tunnel-tunnel
|
||||||
|
11=Tunnel-tunnel
|
||||||
|
12=Tunnel-brickback
|
||||||
|
13=BrickSoft-brick1
|
||||||
|
19=DuroLava-lava_red
|
||||||
|
20=Water-water1-water2-water3-water1-water3-water2
|
||||||
|
#21=Oil-Liquid
|
||||||
|
22=Acid-acid
|
||||||
|
23=Lava-lava_red
|
||||||
|
24=DuroLava-lava_red
|
||||||
|
25=Water-water
|
||||||
|
#26=Oil-Smooth
|
||||||
|
27=Acid-acid
|
||||||
|
28=Lava-lava_red
|
||||||
|
29=Earth-earth_dry
|
||||||
|
30=Earth-earth_rough
|
||||||
|
31=Earth-earth_topsoil
|
||||||
|
32=Earth-earth_midsoil
|
||||||
|
#33=Ashes-Smooth3
|
||||||
|
#34=Ashes-Rough
|
||||||
|
#35=Ashes-Ridge
|
||||||
|
|
||||||
|
36=Ore-ore
|
||||||
|
37=Ore-ore
|
||||||
|
38=Ore-ore
|
||||||
|
|
||||||
|
40=Granite-granite
|
||||||
|
41=Granite-granite
|
||||||
|
42=Granite-rock
|
||||||
|
|
||||||
|
45=Gold-gold
|
||||||
|
|
||||||
|
50=Rock-rock
|
||||||
|
51=Rock-rock_cracked
|
||||||
|
52=Rock-rock
|
||||||
|
|
||||||
|
53=Sulphur-sulphur
|
||||||
|
|
||||||
|
54=Coal-coal
|
||||||
|
|
||||||
|
55=Sand-sand_rough
|
||||||
|
#56=Sand-Smooth2
|
||||||
|
#57=Sand-Smooth3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#59=FlyAshes-Smooth
|
||||||
|
|
||||||
|
#60=Crystal-Flare
|
||||||
|
#61=Crystal-Structure
|
||||||
|
#62=Crystal-Structure2
|
||||||
|
|
||||||
|
65=Ice-ice2
|
||||||
|
66=Ice-ice2
|
||||||
|
67=Ice-ice3
|
||||||
|
68=Ice-ice3
|
||||||
|
|
||||||
|
70=Snow-snow1
|
||||||
|
71=Snow-snow1
|
||||||
|
72=Snow-snow1
|
||||||
|
73=Brick-brick1
|
||||||
|
|
||||||
|
#80=FlySand-Smooth2
|
||||||
|
#81=FlySand-Smooth3
|
||||||
|
#82=FlySand-Smooth
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
[Head]
|
||||||
|
Icon=1
|
||||||
|
Title=IronPeak
|
||||||
|
Version=5,0,0,0
|
||||||
|
Difficulty=20
|
||||||
|
|
||||||
|
[Definitions]
|
||||||
|
Definition1=Objects.ocd
|
||||||
|
|
||||||
|
[Game]
|
||||||
|
Rules=Rule_EnergyNeed=1;Rule_TeamAccount=1;
|
||||||
|
|
||||||
|
[Player1]
|
||||||
|
Wealth=80
|
||||||
|
Crew=Clonk=2
|
||||||
|
Knowledge=WoodenCabin=1;Foundry=1;SteamEngine=1;ToolsWorkshop=1;WindGenerator=1;CableCrossing=1;Pickaxe=1;Axe=1;Hammer=1;Shovel=1;
|
||||||
|
HomeBaseMaterial=Shovel=2;Pickaxe=2;Axe=2;Hammer=2;Dynamite=10;Loam=10;Wood=20;Metal=10;Clonk=2;CableLorry=2;CableLorryReel=5;
|
||||||
|
|
||||||
|
[Player2]
|
||||||
|
Wealth=80
|
||||||
|
Crew=Clonk=2
|
||||||
|
Knowledge=WoodenCabin=1;Foundry=1;SteamEngine=1;ToolsWorkshop=1;WindGenerator=1;CableCrossing=1;Pickaxe=1;Axe=1;Hammer=1;Shovel=1;
|
||||||
|
HomeBaseMaterial=Shovel=2;Pickaxe=2;Axe=2;Hammer=2;Dynamite=10;Loam=10;Wood=20;Metal=10;Clonk=2;CableLorry=2;CableLorryReel=5;
|
||||||
|
|
||||||
|
[Player3]
|
||||||
|
Wealth=80
|
||||||
|
Crew=Clonk=2
|
||||||
|
Knowledge=WoodenCabin=1;Foundry=1;SteamEngine=1;ToolsWorkshop=1;WindGenerator=1;CableCrossing=1;Pickaxe=1;Axe=1;Hammer=1;Shovel=1;
|
||||||
|
HomeBaseMaterial=Shovel=2;Pickaxe=2;Axe=2;Hammer=2;Dynamite=10;Loam=10;Wood=20;Metal=10;Clonk=2;CableLorry=2;CableLorryReel=5;
|
||||||
|
|
||||||
|
[Player4]
|
||||||
|
Wealth=80
|
||||||
|
Crew=Clonk=2
|
||||||
|
Knowledge=WoodenCabin=1;Foundry=1;SteamEngine=1;ToolsWorkshop=1;WindGenerator=1;CableCrossing=1;Pickaxe=1;Axe=1;Hammer=1;Shovel=1;
|
||||||
|
HomeBaseMaterial=Shovel=2;Pickaxe=2;Axe=2;Hammer=2;Dynamite=10;Loam=10;Wood=20;Metal=10;Clonk=2;CableLorry=2;CableLorryReel=5;
|
||||||
|
|
||||||
|
[Landscape]
|
||||||
|
InEarth=Rock=1;Firestone=3;Loam=2
|
||||||
|
InEarthLevel=30,0,0,100
|
||||||
|
Sky=Clouds2
|
||||||
|
MapWidth=150
|
||||||
|
MapHeight=150
|
||||||
|
BottomOpen=1
|
||||||
|
|
||||||
|
[Weather]
|
||||||
|
Climate=100
|
||||||
|
YearSpeed=0
|
||||||
|
Wind=1,100,-100,100
|
||||||
|
|
|
@ -0,0 +1,181 @@
|
||||||
|
/**
|
||||||
|
Iron Peak
|
||||||
|
A chilly mountain peak filled with iron ore and coal.
|
||||||
|
|
||||||
|
@authors Maikel
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// Spawn location for all players.
|
||||||
|
static mountain_location;
|
||||||
|
|
||||||
|
protected func Initialize()
|
||||||
|
{
|
||||||
|
// Goal: Resource extraction, set to ore mining.
|
||||||
|
var goal = CreateObject(Goal_ResourceExtraction);
|
||||||
|
goal->SetResource("Ore");
|
||||||
|
|
||||||
|
// Goal: Construct flagpole at the top.
|
||||||
|
// TODO: implement this goal.
|
||||||
|
|
||||||
|
// Find A good location for the players to start.
|
||||||
|
FindMountainLocation();
|
||||||
|
|
||||||
|
// Cover the mountain in some snow already.
|
||||||
|
GiveMountainSnowCover();
|
||||||
|
|
||||||
|
// Bottom of the map should only be open at the sides.
|
||||||
|
CloseMapBottom();
|
||||||
|
|
||||||
|
// Add a snow storm effect, strong winds and lot's of snow.
|
||||||
|
AddEffect("SnowStorm", nil, 100, 5, nil);
|
||||||
|
|
||||||
|
// Create a lorry with necessary equipment to start a settlement.
|
||||||
|
//var lorry = CreateObject(Lorry, mountain_location[0], mountain_location[1], NO_OWNER);
|
||||||
|
//lorry->CreateContents(Wood, 16);
|
||||||
|
//lorry->CreateContents(Metal, 4);
|
||||||
|
//lorry->CreateContents(Dynamite, 3);
|
||||||
|
//lorry->CreateContents(CableReel, 3);
|
||||||
|
// TODO: Make sure lorry stays on mountains.
|
||||||
|
|
||||||
|
// Place some coniferous trees, but only up to 2/3 of the mountain.
|
||||||
|
for (var i = 0; i < 16 + Random(5); i++)
|
||||||
|
PlaceVegetation(Tree_Coniferous, 0, LandscapeHeight() / 3, LandscapeWidth(), 2 * LandscapeHeight() / 3, 1000 * (61 + Random(40)));
|
||||||
|
|
||||||
|
// Some mushrooms as source of food.
|
||||||
|
for (var i = 0; i < 30 + Random(10); i++)
|
||||||
|
PlaceVegetation(Mushroom, 0, 0, LandscapeWidth(), LandscapeHeight());
|
||||||
|
|
||||||
|
// Set time of day to evening and create some clouds and celestials.
|
||||||
|
CreateObject(Environment_Clouds);
|
||||||
|
CreateObject(Environment_Celestial);
|
||||||
|
var time = CreateObject(Environment_Time);
|
||||||
|
time->SetTime(1125);
|
||||||
|
time->SetCycleSpeed(0);
|
||||||
|
|
||||||
|
// A light blue hue, to indicate the cold climate.
|
||||||
|
var blue = 12;
|
||||||
|
SetGamma(RGB(0,0,blue), RGB(128-blue,128-blue,128+blue), RGB(255-blue,255-blue,255));
|
||||||
|
|
||||||
|
// Some natural disasters.
|
||||||
|
var earthquakes = CreateObject(Earthquake);
|
||||||
|
// earthquakes->SetChance(30);
|
||||||
|
// TODO: Rockfall.
|
||||||
|
|
||||||
|
//LogMatCounts();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
private func FindMountainLocation()
|
||||||
|
{
|
||||||
|
// Default to top middle of the map.
|
||||||
|
mountain_location = [LandscapeWidth() / 2, LandscapeHeight() / 2];
|
||||||
|
var x = 0, y = 0;
|
||||||
|
for (var i = 0; i < 1000; i++)
|
||||||
|
{
|
||||||
|
// Random x coordinate.
|
||||||
|
var x = Random(LandscapeWidth()), y = 0;
|
||||||
|
// Find corresponding y coordinate.
|
||||||
|
while (!GBackSolid(x, y) && y < 9 * LandscapeHeight() / 10)
|
||||||
|
y += 2;
|
||||||
|
// Check if surface is relatively flat (check for flatter surfaces first).
|
||||||
|
var d = i / 250 + 1;
|
||||||
|
if (!GBackSolid(x + 10, y - 20) && !GBackSolid(x - 10, y - 20) && !GBackSolid(x + 10, y - d) && !GBackSolid(x - 10, y - d) && GBackSolid(x + 10, y + d) && GBackSolid(x - 10, y + d))
|
||||||
|
if (y > LandscapeHeight() / 2)
|
||||||
|
{
|
||||||
|
mountain_location = [x, y - 10];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
private func LogMatCounts()
|
||||||
|
{
|
||||||
|
for (var i = 0; i < 128; i++)
|
||||||
|
{
|
||||||
|
if (GetMaterialCount(i) > 0)
|
||||||
|
Log("Material %s has %d count.", MaterialName(i), GetMaterialCount(i) / 100);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
private func GiveMountainSnowCover()
|
||||||
|
{
|
||||||
|
// Loop over the map horizontally.
|
||||||
|
for (var x = 0; x < LandscapeWidth(); x += 20)
|
||||||
|
{
|
||||||
|
// Find height of mountain at this x.
|
||||||
|
var y = 0;
|
||||||
|
while (!GBackSolid(x, y) && y < LandscapeHeight())
|
||||||
|
y += 10;
|
||||||
|
if (y < 9 * LandscapeHeight() / 10)
|
||||||
|
CastPXS("Snow", 10 + Random(50), 40, x, y - 40, 180, 40);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
private func CloseMapBottom()
|
||||||
|
{
|
||||||
|
var y = LandscapeHeight() - 1;
|
||||||
|
for (var x = 0; x < LandscapeWidth(); x++)
|
||||||
|
if (!GBackSky(x, y))
|
||||||
|
DrawMaterialQuad("Brick", x, y-1, x, y+1, x-1, y+1, x-1, y-1, true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This effect should be called every 5 frames.
|
||||||
|
global func FxSnowStormStart(object target, proplist effect)
|
||||||
|
{
|
||||||
|
// Always a strong wind, either to the left or the right.
|
||||||
|
effect.wind = (2 * Random(2) - 1) * (90 + Random(10));
|
||||||
|
// Accordingly a stormy sound.
|
||||||
|
Sound("WindLoop.ogg", true, 80, nil, 1);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
global func FxSnowStormTimer(object target, proplist effect)
|
||||||
|
{
|
||||||
|
// Change wind every now and then.
|
||||||
|
if (!Random(200))
|
||||||
|
effect.wind = (2 * Random(2) - 1) * (90 + Random(10));
|
||||||
|
|
||||||
|
// Adapt current wind to target wind and add a little random.
|
||||||
|
var wind = GetWind(0, 0, true);
|
||||||
|
if (effect.wind > wind)
|
||||||
|
SetWind(wind + Random(3));
|
||||||
|
else if (effect.wind < wind)
|
||||||
|
SetWind(wind - Random(3));
|
||||||
|
else
|
||||||
|
SetWind(wind + 1 - Random(3));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected func InitializePlayer(int plr)
|
||||||
|
{
|
||||||
|
// Disable FoW for development reasons.
|
||||||
|
SetFoW(false, plr);
|
||||||
|
// Move clonks to location and give them a shovel.
|
||||||
|
var index = 0, crew;
|
||||||
|
while (crew = GetCrew(plr, index))
|
||||||
|
{
|
||||||
|
crew->SetPosition(mountain_location[0], mountain_location[1]);
|
||||||
|
// First clonk can construct, others can mine.
|
||||||
|
if (index == 0)
|
||||||
|
{
|
||||||
|
crew->CreateContents(Hammer);
|
||||||
|
crew->CreateContents(Axe);
|
||||||
|
crew->CreateContents(CableReel);
|
||||||
|
crew->CreateContents(Dynamite);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
crew->CreateContents(Shovel);
|
||||||
|
crew->CreateContents(Pickaxe);
|
||||||
|
crew->CreateContents(Dynamite, 2);
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
DE:Eisenberg
|
||||||
|
US:Iron Peak
|
Loading…
Reference in New Issue