From f5a80c493dcefbc8f45987b8fd454d974f739cf7 Mon Sep 17 00:00:00 2001
From: Jan <>
Date: Mon, 2 Feb 2015 17:05:03 +0100
Subject: TemplePushBeta.c4s
---
TemplePushing.c4s/Script.c | 389 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 389 insertions(+)
create mode 100644 TemplePushing.c4s/Script.c
(limited to 'TemplePushing.c4s/Script.c')
diff --git a/TemplePushing.c4s/Script.c b/TemplePushing.c4s/Script.c
new file mode 100644
index 0000000..a3c12a3
--- /dev/null
+++ b/TemplePushing.c4s/Script.c
@@ -0,0 +1,389 @@
+/*-- Klippenschubsen --*/
+
+#strict 2
+
+static relaunches, playerScore, teamScore;
+static deathmatchKillLimit;
+static g_iSaveSectIndex,szSection;
+static pChooser,iDif;
+
+func Initialize()
+{
+ // Create background sound, fog and rain
+ SoundLevel("Ambiente", 50);
+ for (var i; i < 300; ++i)
+ {
+ CreateParticle("Fog", Random(LandscapeWidth()), Random(LandscapeHeight()) + 500, RandomX(3, 9), 0, RandomX(1000, 1500));
+ }
+ CreateObject(RAIN, 0, 0, NO_OWNER);
+
+ // Moving brick
+ CreateObject(BRK2, 225, 150, NO_OWNER);
+ CreateObject(BRK2, 985, 150, NO_OWNER);
+
+ // Create relaunch counter, player score and team score arrays
+ relaunches = CreateArray();
+ playerScore = CreateArray();
+ teamScore = CreateArray();
+
+ deathmatchKillLimit = 20;
+
+ // Initialize scoreboard
+ SetScoreboardData(SBRD_Caption, 0, "{{MELE}}");
+ SetScoreboardData(SBRD_Caption, 1, "{{GBLT}}");
+ SetScoreboardData(SBRD_Caption, 2, "{{CXIV}}");
+}
+
+func InitializePlayer(int plr)
+{
+ if (!iDif && GetCrew(GetPlayerCount() - 1)) InitializePlayer2(0);
+ if (!FindObject(DTHM)) relaunches[plr] = 10;
+ playerScore[plr] = 0;
+ UpdateScoreboard();
+ DoScoreboardShow(1);
+ ScriptGo(true);
+}
+
+func OnClonkDeath(object clonk, int killedBy)
+{
+ var isDeathmatch = !!FindObject(DTHM);
+ var player = clonk->GetOwner();
+ var team = GetPlayerTeam(player);
+ var teamKill = GetPlayerID(killedBy) == 0 || killedBy == player || team != 0 && team == GetPlayerTeam(killedBy);
+
+ // Killed by opponent?
+ if (!teamKill)
+ {
+ ++playerScore[killedBy];
+ if (isDeathmatch) CheckDeathmatchKillCount();
+ }
+ else
+ {
+ // Deathmatch: Decrement kill counter on suicide or team kill.
+ if (isDeathmatch) --playerScore[killedBy];
+ }
+
+ // Update relaunch counter
+ if (!isDeathmatch)
+ {
+ // No relaunches left?
+ if (relaunches[player] - 1 < 0)
+ {
+ EliminatePlayer(player);
+ return;
+ }
+ else
+ {
+ --relaunches[player];
+ }
+
+ // Show relaunch message. Warn player if he only has one/no relaunch(es) remaining.
+ if (relaunches[player] == 0)
+ {
+ PlayerMessage(player, "$MsgLastRelaunch$");
+ }
+ if (relaunches[player] == 1)
+ {
+ PlayerMessage (player, "$MsgOneRelaunch$");
+ }
+ else
+ {
+ PlayerMessage(player, "$MsgRelaunch$", 0, relaunches[player]);
+ }
+ }
+
+ // Create new clonk at random position
+ var positions = [[168, 120], [301, 150], [914, 150], [1050, 120]];
+ var position = positions[Random(GetLength(positions))];
+ var newclonk = CreateObject(CLNK, position[0], position[1], player);
+ newclonk->GrabObjectInfo(clonk);
+
+ // Armageddon?
+ if (FindObject(FRRN))
+ {
+ AddEffect("DoTerra", newclonk, 200, 50);
+ AddEffect("Bottom", newclonk, 200, 2);
+ }
+
+ SelectCrew(player, newclonk, true);
+}
+
+func CheckDeathmatchKillCount()
+{
+ var gameOver = false;
+
+ if (GetTeamCount() == 0)
+ {
+ var winner = -1;
+
+ // Check if a player has reached the kill limit
+ for (var i = 0; i < GetPlayerCount(); ++i)
+ {
+ var plr = GetPlayerByIndex(i);
+ if (playerScore[plr] >= deathmatchKillLimit)
+ {
+ winner = plr;
+ gameOver = true;
+ break;
+ }
+ }
+
+ // Eliminate other players if there is a winner
+ for (var i = 0; i < GetPlayerCount(); ++i)
+ {
+ var plr = GetPlayerByIndex(i);
+ if (plr != winner) EliminatePlayer(plr);
+ }
+ }
+ else
+ {
+ var winnerTeam = 0;
+
+ // Clear team score array
+ teamScore = CreateArray(GetTeamCount());
+
+ // Calculate team score and check if kill limit is reached
+ for (var i = 0; i < GetPlayerCount(); ++i)
+ {
+ var plr = GetPlayerByIndex(i), team = GetPlayerTeam(plr);
+ teamScore[team] += playerScore[plr];
+ if (teamScore >= deathmatchKillLimit)
+ {
+ winnerTeam = team;
+ gameOver = true;
+ break;
+ }
+ }
+
+ // Do we have a winner?
+ if (winnerTeam != 0)
+ {
+ for (var i = 0; i < GetPlayerCount(); ++i)
+ {
+ var plr = GetPlayerByIndex(i);
+ if (GetPlayerTeam(plr) != winnerTeam) EliminatePlayer(plr);
+ }
+ }
+ }
+
+ UpdateScoreboard();
+
+ if (gameOver) GameOver(2014);
+}
+
+func UpdateScoreboard()
+{
+ for (var plr; plr < GetPlayerCount(); ++plr)
+ {
+ SortScoreboard(0, true);
+ plr = GetPlayerByIndex(plr);
+ SetScoreboardData(plr, 0, GetTaggedPlayerName(plr), relaunches[plr]);
+ SetScoreboardData(plr, 2, Format("%d", playerScore[plr]));
+ if (relaunches[plr] < 0)
+ {
+ SetScoreboardData(plr, 1, WarningText("$Death$"));
+ }
+ else if (relaunches[plr] <= 1)
+ {
+ SetScoreboardData(plr, 1, WarningInt(relaunches[plr]));
+ }
+ else
+ {
+ SetScoreboardData(plr, 1, Format("%d", relaunches[plr]));
+ }
+ }
+}
+
+func Script2()
+{
+ UpdateScoreboard();
+ goto(1);
+ return 1;
+}
+
+global func WarningText(sText) { return(Format("%s",RGB(200,0,0),sText)); }
+global func WarningInt(iText) { return(Format("%d",RGB(200,0,0),iText)); }
+
+/*-----------------------Spielmodi-----------------------*/
+
+//Auswahl
+func InitializePlayer2(iPlr)
+{
+ pChooser=GetHiRank(iPlr);
+ CreateMenu(EFLN,pChooser,0,0,0,0,1);
+ AddMenuItem("$Mode1$","SetDif",ROCK,pChooser,0,1);
+ AddMenuItem("$Mode2$","SetDif",FLRN,pChooser,0,2);
+ AddMenuItem("$Mode3$","SetDif",SMGC,pChooser,0,3);
+ AddMenuItem("$Mode4$","SetDif",FXV1,pChooser,0,4);
+ AddMenuItem("$Random$","SetDif",RMMG,pChooser,0,RandomX(1,4));
+ return(1);
+}
+
+func SetDif(dummy,i)
+{
+ if (i == 1) Message("$Mode1$");
+ if (i == 2) Message("$Mode2$");
+ if (i == 3) Message("$Mode3$");
+ if (i == 4) Message("$Mode4$");
+
+ if (i==1) CreateObject(SPWN);
+ if (i==2)
+ {
+ Schedule("ChangeSection(\"SuddenDeath\")",10);
+ Message("$Load$");
+ }
+ if (i==3)
+ {
+ CreateObject(MSPW);
+ SetGamma(RGB(5,5,10),RGB(80,80,150),RGB(200,200,255));
+ }
+ if (i==4) UltimateExtreme();
+return(1);
+}
+
+func UltimateExtreme()
+{
+ RemoveAll(SPNP);
+ RemoveAll(MSPN);
+ RemoveObject(FindObject(SPWN));
+ CastObjects(RCKF,10);
+ CreateObject(FRRN);
+ MusicLevel(0);
+ SoundLevel("ExtremeAmbiente",100);
+ SoundLevel("Ambiente",0);
+ for (var Plr;Plr < GetPlayerCount();Plr ++)
+ {
+ relaunches[Plr] = 5;
+ AddEffect("DoTerra",GetHiRank(Plr),200,50);
+ AddEffect("Bottom",GetHiRank(Plr),200,2);
+ }
+ var brick;
+ for (var i;i0;i--)
+ {
+ CreateObject(BRK2,i*90,0);
+ CreateObject(SPNP,Random(LandscapeWidth()),Random(LandscapeHeight()+500));
+ }
+ CastObjects(CANN,RandomX(10,20),Random(150),LandscapeWidth()/2);
+ CreateObject(RAIN);
+ CreateObject(FLRN);
+ CreateObject(MELE);
+ // Alles gespeicherte wieder herstellen
+ if (g_iSaveSectIndex)
+ while (g_iSaveSectIndex--)
+ if (obj=Global(20+g_iSaveSectIndex))
+ { obj->SetObjectStatus(1); Global(20+g_iSaveSectIndex)=0; }
+ g_iSaveSectIndex=0;
+ for (var iPlr;iPlrContentsCount();
+ for (var i = 0; i < contentsCount; ++i)
+ {
+ SaveSectObj(obj->Contents(i));
+ }
+
+ // Save object
+ Global(20 + g_iSaveSectIndex++) = obj;
+ obj->SetObjectStatus(C4OS_INACTIVE);
+}
+
+/*-------------- Effects -----------------*/
+
+global func FxDoTerraTimer(object target)
+{
+ if (target->ContentsCount() < 3) target->CreateContents(EFLN);
+ ShakeViewPort(10);
+ return 1;
+}
+
+global func FxBottomTimer(object target)
+{
+ if (target->GetY() >= LandscapeHeight() - 20) target->SetPosition(target->GetX() + RandomX(-10, 10), 0);
+ return 1;
+}
+
+global func FxWarStart(object target, int effectNumber)
+{
+ EffectVar(0, 0, effectNumber) = 255;
+ EffectVar(1, 0, effectNumber) = 1;
+ return 1;
+}
+
+global func FxWarTimer(object target, int effectNumber)
+{
+ // Remove corpses
+ for (var obj in FindObjects(Find_OCF(OCF_CrewMember), Find_Not(Find_OCF(OCF_Alive))))
+ {
+ obj->RemoveObject();
+ }
+
+ if (EffectVar(1, 0, effectNumber) == 1)
+ {
+ --EffectVar(0, 0, effectNumber);
+ }
+ else
+ {
+ ++EffectVar(0, 0, effectNumber);
+ }
+
+ if (EffectVar(0, 0, effectNumber) < 0)
+ {
+ EffectVar(1, 0, effectNumber) = 0;
+ }
+ else if (EffectVar(0, 0, effectNumber) > 255)
+ {
+ EffectVar(1, 0, effectNumber) = 1;
+ }
+
+ var color = EffectVar(0, 0, effectNumber);
+ SetSkyAdjust(RGB(255, color / 2, color / 4), RGB(128, color / 2, color / 4));
+ SetGamma(RGB(2, 0, 0), RGB(128, color / 2, color / 4), RGB(180, color /2 , color / 4));
+
+ return 1;
+}
\ No newline at end of file
--
cgit v1.2.3-54-g00ecf