forked from Mirrors/openclonk
HotIce alternate map added.
Also converted old map to Map.c and fixed some spawning issues.stable-6.1
parent
e9b076f6d3
commit
b1b8fedb25
|
@ -1,31 +0,0 @@
|
||||||
/* Hot ice */
|
|
||||||
|
|
||||||
overlay Ice {
|
|
||||||
mat=Ice; tex=ice2;
|
|
||||||
overlay {
|
|
||||||
algo=rndchecker; a=0;
|
|
||||||
zoomX=-100; zoomY=-100;
|
|
||||||
turbulence=100; lambda=3;
|
|
||||||
mat=Ice; tex=ice3;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
map HotIce {
|
|
||||||
overlay { algo=sin; ox=21; oy=65; zoomX=-100; zoomY=-100; invert=1; turbulence=10; } &
|
|
||||||
Ice { algo=poly;
|
|
||||||
point {x=12%; y=58%; };
|
|
||||||
point {x=88%; y=58%; };
|
|
||||||
point {x=70%; y=68%; };
|
|
||||||
point {x=30%; y=68%; };
|
|
||||||
};
|
|
||||||
|
|
||||||
overlay { algo=random; a=50; } &
|
|
||||||
Ice { algo=poly;
|
|
||||||
point {x=30%; y=5%; };
|
|
||||||
point {x=70%; y=5%; };
|
|
||||||
point {x=88%; y=50%; };
|
|
||||||
point {x=12%; y=50%; };
|
|
||||||
};
|
|
||||||
|
|
||||||
overlay { mat=DuroLava; tex=lava_red; y=80; sub=0; };
|
|
||||||
};
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
/**
|
||||||
|
Hot Ice
|
||||||
|
Ice islands above a lava lake
|
||||||
|
|
||||||
|
@authors Sven2
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Called be the engine: draw the complete map here.
|
||||||
|
public func InitializeMap(proplist map)
|
||||||
|
{
|
||||||
|
// Map type 0: One big island; more small islands above
|
||||||
|
// Map type 1: Only many small islands
|
||||||
|
var t = SCENPAR_MapType;
|
||||||
|
var w = map.Wdt, h=map.Hgt;
|
||||||
|
|
||||||
|
// Bottom lava lake
|
||||||
|
map->Draw("^DuroLava", nil, [0,h*4/5,w,h/5]);
|
||||||
|
|
||||||
|
// Big island
|
||||||
|
if (t == 0)
|
||||||
|
{
|
||||||
|
var island = { Algo=MAPALGO_Polygon, X=[0,w,w*6/8,w*2/8], Y=[h*4/10,h*4/10,h*7/10,h*7/10] };
|
||||||
|
island = { Algo=MAPALGO_Turbulence, Op=island, Amplitude=[0, 8] };
|
||||||
|
map->Draw("^Ice-ice2", island, [w/10,h*13/20,w*8/10,h*3/20]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Small islands
|
||||||
|
var n_islands = [12,37][t];
|
||||||
|
while(n_islands--)
|
||||||
|
{
|
||||||
|
var y = h*2/10 + Random(h*(3+t*2)/10);
|
||||||
|
var x = w*1/10 + Random(w*8/10);
|
||||||
|
var szx = t*Random(3);
|
||||||
|
var szy = 1+t*Random(Random(2));
|
||||||
|
map->Draw("^Ice-ice2", nil, [x-szx,y,1+2*szx,szy]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Alternate texctures
|
||||||
|
var icealt_tex = { Algo=MAPALGO_RndChecker, Wdt=2, Hgt=3 };
|
||||||
|
icealt_tex = { Algo=MAPALGO_Turbulence, Op=icealt_tex };
|
||||||
|
icealt_tex = { Algo=MAPALGO_And, Op=[Duplicate("Ice"), icealt_tex]};
|
||||||
|
map->Draw("^Ice-ice3", icealt_tex);
|
||||||
|
|
||||||
|
// Return true to tell the engine a map has been successfully created.
|
||||||
|
return true;
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
[ParameterDef]
|
||||||
|
Name=$MapType$
|
||||||
|
Description=$DescMapType$
|
||||||
|
ID=MapType
|
||||||
|
Default=0
|
||||||
|
|
||||||
|
[Options]
|
||||||
|
|
||||||
|
[Option]
|
||||||
|
Name=$MapTypeBigIsland$
|
||||||
|
Description=$DescMapTypeBigIsland$
|
||||||
|
Value=0
|
||||||
|
|
||||||
|
[Option]
|
||||||
|
Name=$MapTypeSpots$
|
||||||
|
Description=$DescMapTypeSpots$
|
||||||
|
Value=1
|
|
@ -10,8 +10,8 @@ Goals=Goal_Melee=1;
|
||||||
Rules=Rule_KillLogs=1;Rule_Gravestones=1;
|
Rules=Rule_KillLogs=1;Rule_Gravestones=1;
|
||||||
|
|
||||||
[Landscape]
|
[Landscape]
|
||||||
MapWidth=20
|
MapWidth=64
|
||||||
MapHeight=20
|
MapHeight=40
|
||||||
TopOpen=1
|
TopOpen=1
|
||||||
BottomOpen=1
|
BottomOpen=1
|
||||||
MapZoom=18,0,0,18
|
MapZoom=18,0,0,18
|
||||||
|
|
|
@ -5,8 +5,9 @@ func Initialize()
|
||||||
// Materials: Chests
|
// Materials: Chests
|
||||||
var i,pos;
|
var i,pos;
|
||||||
var ls_wdt = LandscapeWidth(), ls_hgt = LandscapeHeight();
|
var ls_wdt = LandscapeWidth(), ls_hgt = LandscapeHeight();
|
||||||
|
var top_area_hgt = ls_hgt*[50,80][SCENPAR_MapType]/100;
|
||||||
for (i=0; i<6; ++i)
|
for (i=0; i<6; ++i)
|
||||||
if (pos=FindLocation(Loc_InRect(0,0,ls_wdt,ls_hgt/2-100), Loc_Wall(CNAT_Bottom))) // Loc_Wall adds us 100 pixels...
|
if (pos=FindLocation(Loc_InRect(0,0,ls_wdt,top_area_hgt-100), Loc_Wall(CNAT_Bottom))) // Loc_Wall adds us 100 pixels...
|
||||||
{
|
{
|
||||||
var chest = CreateObjectAbove(Chest,pos.x,pos.y);
|
var chest = CreateObjectAbove(Chest,pos.x,pos.y);
|
||||||
if (chest)
|
if (chest)
|
||||||
|
@ -23,13 +24,13 @@ func Initialize()
|
||||||
}
|
}
|
||||||
// Materials: Firestones
|
// Materials: Firestones
|
||||||
for (i=0; i<30; ++i)
|
for (i=0; i<30; ++i)
|
||||||
if (pos=FindLocation(Loc_InRect(0,0,ls_wdt,ls_hgt/2), Loc_Solid()))
|
if (pos=FindLocation(Loc_InRect(0,0,ls_wdt,top_area_hgt), Loc_Solid()))
|
||||||
if (GBackSolid(pos.x,pos.y-1))
|
if (IsFirestoneSpot(pos.x,pos.y))
|
||||||
CreateObjectAbove(Firestone,pos.x,pos.y-1);
|
CreateObjectAbove(Firestone,pos.x,pos.y-1);
|
||||||
// Some firestones in lower half
|
// Some firestones in lower half. For ap type 1, more firestones in lower than upper half.
|
||||||
for (i=0; i<30; ++i)
|
for (i=0; i<30; ++i)
|
||||||
if (pos=FindLocation(Loc_InRect(0,ls_hgt/2,ls_wdt,ls_hgt/3), Loc_Solid()))
|
if (pos=FindLocation(Loc_InRect(0,ls_hgt/2,ls_wdt,ls_hgt/3), Loc_Solid()))
|
||||||
if (GBackSolid(pos.x,pos.y-1))
|
if (IsFirestoneSpot(pos.x,pos.y))
|
||||||
CreateObjectAbove(Firestone,pos.x,pos.y-1);
|
CreateObjectAbove(Firestone,pos.x,pos.y-1);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -38,10 +39,11 @@ func InitializePlayer(int plr)
|
||||||
{
|
{
|
||||||
// everything visible
|
// everything visible
|
||||||
SetFoW(false, plr);
|
SetFoW(false, plr);
|
||||||
// player positioning
|
// player positioning. In lower area for both maps becuase starting high is an an advantage.
|
||||||
var ls_wdt = LandscapeWidth(), ls_hgt = LandscapeHeight();
|
var ls_wdt = LandscapeWidth(), ls_hgt = LandscapeHeight();
|
||||||
var crew = GetCrew(plr);
|
var crew = GetCrew(plr);
|
||||||
var start_pos = FindLocation(Loc_InRect(ls_wdt/5,ls_hgt/2,ls_wdt*3/5,ls_hgt/3), Loc_Wall(CNAT_Bottom), Loc_Space(20), Loc_Space(20,true));
|
var start_pos = FindLocation(Loc_InRect(ls_wdt/5,ls_hgt/2,ls_wdt*3/5,ls_hgt/3), Loc_Wall(CNAT_Bottom), Loc_Func(Scenario.IsStartSpot));
|
||||||
|
if (!start_pos) start_pos = FindLocation(Loc_InRect(ls_wdt/10,0,ls_wdt*8/10,ls_hgt*4/5), Loc_Wall(CNAT_Bottom), Loc_Func(Scenario.IsStartSpot));
|
||||||
if (!start_pos) start_pos = {x=Random(ls_wdt*6/10)+ls_wdt*2/10, y=ls_hgt*58/100};
|
if (!start_pos) start_pos = {x=Random(ls_wdt*6/10)+ls_wdt*2/10, y=ls_hgt*58/100};
|
||||||
crew->SetPosition(start_pos.x, start_pos.y-10);
|
crew->SetPosition(start_pos.x, start_pos.y-10);
|
||||||
// initial material
|
// initial material
|
||||||
|
@ -53,3 +55,19 @@ func InitializePlayer(int plr)
|
||||||
crew->DoEnergy(1000);
|
crew->DoEnergy(1000);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Horizontal Loc_Space doesn't work with Loc_Wall because it checks inside the ground.
|
||||||
|
func IsStartSpot(int x, int y)
|
||||||
|
{
|
||||||
|
// Don't spawn just at the border of an island.
|
||||||
|
if (!GBackSolid(x-3,y+2)) return false;
|
||||||
|
if (!GBackSolid(x+3,y+2)) return false;
|
||||||
|
// Spawn with some space.
|
||||||
|
return PathFree(x-5, y, x+5, y) && PathFree(x, y-21, x, y-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
func IsFirestoneSpot(int x, int y)
|
||||||
|
{
|
||||||
|
// Very thorough ice surrounding check so they don't explode right away or when the first layer of ice melts
|
||||||
|
return GBackSolid(x,y-1) && GBackSolid(x,y+4) && GBackSolid(x-2,y) && GBackSolid(x+2,y);
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
MapType=Karte
|
||||||
|
DescMapType=Definiert die Landschaftsform.
|
||||||
|
MapTypeBigIsland=Große Insel
|
||||||
|
DescMapTypeBigIsland=Eine zentrale Hauptinsel mit einigen Eisflecken in der Luft.
|
||||||
|
MapTypeSpots=Kleine inseln
|
||||||
|
DescMapTypeSpots=Viele kleine Eisflecken in der Luft.
|
|
@ -0,0 +1,6 @@
|
||||||
|
MapType=Map
|
||||||
|
DescMapType=Defines the shape of the landscape.
|
||||||
|
MapTypeBigIsland=Big island
|
||||||
|
DescMapTypeBigIsland=One central main island with small spots of ice in the air above.
|
||||||
|
MapTypeSpots=Small islands
|
||||||
|
DescMapTypeSpots=Many small spots of ice in the air.
|
Loading…
Reference in New Issue