diff options
| author | Jan <> | 2015-07-10 18:11:22 +0200 |
|---|---|---|
| committer | Jan <_> | 2015-07-10 18:47:01 +0200 |
| commit | f1ece16c08d8c01e1d49a25f0314a96c021e73cb (patch) | |
| tree | 9bc9f547f2524dee8e62f168f317df465a6cbcdd /TemplePushing.c4s | |
| parent | 80b15646d73587f4e15a2897314692b58aa1a47f (diff) | |
| download | tempelschubsen-f1ece16c08d8c01e1d49a25f0314a96c021e73cb.tar.gz tempelschubsen-f1ece16c08d8c01e1d49a25f0314a96c021e73cb.zip | |
r0.921
Diffstat (limited to 'TemplePushing.c4s')
155 files changed, 1903 insertions, 349 deletions
diff --git a/TemplePushing.c4s/DescDE.rtf b/TemplePushing.c4s/DescDE.rtf index 9b32284..e04b3de 100644 --- a/TemplePushing.c4s/DescDE.rtf +++ b/TemplePushing.c4s/DescDE.rtf @@ -1,21 +1,93 @@ -{\rtf1\ansi\deff0\adeflang1025 -{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset1 Times New Roman;}{\f4\froman\fprq0\fcharset1 Times New Roman;}{\f5\fnil\fprq2\fcharset0 Microsoft YaHei;}{\f6\fnil\fprq2\fcharset0 Mangal;}{\f7\fnil\fprq0\fcharset1 Mangal;}} -{\colortbl;\red0\green0\blue0;\red128\green128\blue128;} -{\stylesheet{\s0\snext0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f0\fs24\lang1031 Standard;} -{\s15\sbasedon0\snext16\sb240\sa120\keepn\dbch\af5\dbch\af6\afs28\loch\f2\fs28 \u220\'dcberschrift;} -{\s16\sbasedon0\snext16\sb0\sa120 Textk\u246\'f6rper;} -{\s17\sbasedon16\snext17\sb0\sa120\dbch\af7 Liste;} -{\s18\sbasedon0\snext18\sb120\sa120\noline\i\dbch\af7\afs24\ai\fs24 Beschriftung;} -{\s19\sbasedon0\snext19\noline\dbch\af7 Verzeichnis;} -}{\info{\author Benjamin}{\creatim\yr2008\mo1\dy10\hr21\min49}{\revtim\yr2008\mo6\dy6\hr14\min24}{\printim\yr0\mo0\dy0\hr0\min0}{\comment LibreOffice}{\vern3600}}\deftab720 -\viewscale140 -{\*\pgdsctbl -{\pgdsc0\pgdscuse195\pgwsxn12240\pghsxn15840\marglsxn1417\margrsxn1417\margtsxn1417\margbsxn1134\pgdscnxt0 Standard;}} -\formshade{\*\pgdscno0}\paperh15840\paperw12240\margl1417\margr1417\margt1417\margb1134\sectd\sbknone\sectunlocked1\pgndec\pgwsxn12240\pghsxn15840\marglsxn1417\margrsxn1417\margtsxn1417\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc -\pgndec\pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f0\fs24\lang1031\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0{\b\langfe1031\rtlch \ltrch\loch\fs20\lang1031\loch\f4 -Tempelschubsen} -\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f0\fs24\lang1031\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\langfe1031\rtlch \ltrch\loch\fs16\lang1031\loch\f4 - -\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f0\fs24\lang1031\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0{\langfe1031\rtlch \ltrch\loch\fs16\lang1031\loch\f4 -In Arbeit.} -\par }
\ No newline at end of file +{\rtf1\ansi\ansicpg1252\deff0\uc1 +{\fonttbl +{\f0\fnil\fcharset0\fprq0\fttruetype Times New Roman;} +{\f1\fnil\fcharset0\fprq0\fttruetype Arial;} +{\f2\fnil\fcharset0\fprq0\fttruetype Courier New;}} +{\colortbl +\red0\green0\blue0; +\red255\green255\blue255; +\red255\green255\blue255;} +{\stylesheet +{\s7\tx1584\sbasedon32\snext31 Chapter Heading;} +{\s5\fi-431\li720 Box List;} +{\s41\sa119\f0\fs24\lang1031\sbasedon39 Textk\u246\'f6rper;} +{\s46\f0\fs24\lang1031\sbasedon39 Verzeichnis;} +{\s29\fi-431\li720\sbasedon35 Lower Case List;} +{\s4\li1440\ri1440\sa120\sbasedon31 Block Text;} +{\s1\sb240\sa118\f1\fs28\lang1031\sbasedon39\snext41 ?berschrift;} +{\s43\fi-431\li720 Triangle List;} +{\s44\fi-431\li720\sbasedon35 Upper Case List;} +{\s23\sb440\sa60\f1\fs28\b\sbasedon31\snext31 Heading 2;} +{\s6\fi-431\li720 Bullet List;} +{\s25\sb440\sa60\f1\fs24\b\sbasedon31\snext31 Heading 4;} +{\s26\fi-431\li720 Heart List;} +{\s2\fi-431\li720 Arrowhead List;} +{\s3\sb119\sa119\f0\fs24\i\lang1031\sbasedon39 Beschriftung;} +{\s38\fi-431\li720 Square List;} +{\s12\qc\sb240\sa120\f1\fs32\b\sbasedon31\snext31 Contents Header;} +{\s22\sb440\sa60\f1\fs34\b\sbasedon31\snext31 Heading 1;} +{\s20\fs20\sbasedon31 Footnote Text;} +{\s28\sa119\f0\fs24\lang1031\sbasedon41 Liste;} +{\s24\sb440\sa60\f1\fs24\b\sbasedon31\snext31 Heading 3;} +{\s35\fi-431\li720 Numbered List;} +{\s14\fi-431\li720 Diamond List;} +{\s21\fi-431\li720 Hand List;} +{\s45\fi-431\li720\sbasedon35 Upper Roman List;} +{\s31\f0\fs24 Normal;} +{\s39\f0\fs24\lang1031 Standard;} +{\s36\f2\sbasedon31 Plain Text;} +{\s47\sb240\sa119\f1\fs28\lang1031\sbasedon39\snext41\uc1 \u220 ?berschrift;} +{\s40\fi-431\li720 Star List;} +{\s37\tx1584\sbasedon32\snext31 Section Heading;} +{\s27\fi-431\li720 Implies List;} +{\s42\fi-431\li720 Tick List;} +{\s15\fi-288\li288\sbasedon31 Endnote;} +{\s13\fi-431\li720 Dashed List;} +{\s30\fi-431\li720\sbasedon31 Lower Roman List;} +{\*\cs19\fs20\super Footnote Reference;} +{\s17\sbasedon31 Endnote Text;} +{\*\cs16\fs20\super Endnote Reference;} +{\s32\tx431\sbasedon22\snext31 Numbered Heading 1;} +{\s33\tx431\sbasedon23\snext31 Numbered Heading 2;} +{\s34\tx431\sbasedon24\snext31 Numbered Heading 3;} +{\s18\fi-288\li288\fs20\sbasedon31 Footnote;} +{\s8\fi-431\li720\sbasedon31\snext31 Contents 1;} +{\s9\fi-431\li1440\sbasedon31\snext31 Contents 2;} +{\s10\fi-431\li2160\sbasedon31\snext31 Contents 3;} +{\s11\fi-431\li2880\sbasedon31\snext31 Contents 4;}} +\kerning0\cf0\ftnbj\fet2\ftnstart1\ftnnar\aftnnrlc\ftnstart1\aftnstart1\aenddoc\revprop3{\*\rdf}{\info\uc1{\author Benjamin}}\deftab720\viewkind1\paperw12240\paperh15840\margl1440\margr1440\widowctrl +\sectd\sbknone\colsx0\margtsxn1417\margbsxn1134\marglsxn1417\margrsxn1417\pgncont\ltrsect +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs20\b\lang1031{\*\listtag0}\abinodiroverride\ltrch Tempelschubsen}{\s39\f0\fs20\b\lang1031{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs20\b\lang1031{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}[}{\s39\f0\fs16\i\lang1031{\*\listtag0}In Arbeit.}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}] }{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\b\lang1031{\*\listtag0}Anmerkungen}{\s39\f0\fs16\b\lang1031{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\b\lang1031\ltrch\abiltr{\*\listtag0}\tab }{\s39\f0\fs16\b\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\li720\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031{\*\listtag0}* Feindliche Clonks in n\'e4chster N\'e4he k\'f6nnen \'fcber}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0} [}{\s39\f0\fs16\lang1031{\*\listtag0}Inventarwechsel}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}] }{\s39\f0\fs16\lang1031{\*\listtag0}geschubst werden.}{\s39\f0\fs16\lang1031{\*\listtag0}\par} +\pard\plain\ltrpar\ql\li720\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}* }{\s39\f0\fs16\lang1031{\*\listtag0}Viele Objekte,}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\lang1031{\*\listtag0}insbesondere}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\lang1031{\*\listtag0}st\'e4rkere}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\lang1031{\*\listtag0}Flints,}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\lang1031{\*\listtag0}k\'f6nnen per}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0} [}{\s39\f0\fs16\lang1031{\*\listtag0}Doppelgraben}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}] }{\s39\f0\fs16\lang1031{\*\listtag0}oder \'fcber das Kontextmen\'fc geschossen werden.}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\li720\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}* }{\s39\f0\fs16\lang1031{\*\listtag0}Pfeilpakte schie\'dfen \'fcber}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\lang1031{\*\listtag0}[Doppelgraben}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}] }{\s39\f0\fs16\lang1031{\*\listtag0}einen Pfeil der entsprechenden Art.}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\li720\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}* }{\s39\f0\fs16\lang1031{\*\listtag0}Einige Objekte springen mit einer bestimmten Wahrscheinlichkeit beim Aufprall weiter.}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\lang1031{\*\listtag0}(nur vertikal}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0})}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\li720\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031{\*\listtag0}* Objekte beginnen zu verschwinden,}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\lang1031{\*\listtag0}wenn sie l\'e4ngere Zeit unber\'fchrt bleiben.}{\s39\f0\fs16\lang1031{\*\listtag0}\par} +\pard\plain\ltrpar\ql\li720\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\b\lang1031{\*\listtag0}\abinodiroverride\ltrch \'c4nderungen}{\s39\f0\fs16\b\lang1031{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}~ r0.921}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\tab }{\s39\f0\fs16\lang1031{\*\listtag0}!}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\lang1031{\*\listtag0}Meteoriten und Meteoritenhagel entfernt}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\tab }{\s39\f0\fs16\lang1031{\*\listtag0}!}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\lang1031{\*\listtag0}Kelch bei Sudden Death entfernt}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\tab }{\s39\f0\fs16\lang1031{\*\listtag0}*}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\lang1031{\*\listtag0}Namen im Scoreboard nun linksb\'fcndig}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\tab }{\s39\f0\fs16\lang1031{\*\listtag0}*}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\lang1031{\*\listtag0}Killverfolgung von Explosionen verbessert}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}~}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\i\lang1031{\*\listtag0}r0.92}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\tab }{\s39\f0\fs16\lang1031{\*\listtag0}! Sounds und Dateigr\'f6\'dfe optimiert}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031{\*\listtag0}\tab * Weitere Zauberverbesserungen}{\s39\f0\fs16\lang1031{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\tab *}{\s39\f0\fs16\lang1031{\*\listtag0} Killverfolgung kalibriert}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\tab \tab \tab }{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\i\lang1031{\*\listtag0}~ r0.917a}{\s39\f0\fs16\i\lang1031{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\tab }{\s39\f0\fs16\lang1031{\*\listtag0}! Runden enden nun schneller}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\tab ! }{\s39\f0\fs16\lang1031{\*\listtag0}Eliminationen nach Spielende verhindert}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\li720\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}* }{\s39\f0\fs16\lang1031{\*\listtag0}Mehrere Zauber verfeinert und ausgeglichen}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\li720\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}* }{\s39\f0\fs16\lang1031{\*\listtag0}Fehler beim Schubsen nach links behoben}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\li720\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}* }{\s39\f0\fs16\lang1031{\*\listtag0}Partikel optimiert}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}~ }{\s39\f0\fs16\i\lang1031{\*\listtag0}r0.915b}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\tab }{\s39\f0\fs16\lang1031{\*\listtag0}! Drittes Team,}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0} \uc1\u8222\'84}{\s39\f0\fs16\lang1031{\*\listtag0}Ghard\'fbr}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\uc1\u8220\'93}{\s39\f0\fs16\lang1031{\*\listtag0},}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\lang1031{\*\listtag0}hinzugef\'fcgt}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\tab * }{\s39\f0\fs16\lang1031{\*\listtag0}Teamwappen \'fcberarbeitet}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\tab * }{\s39\f0\fs16\lang1031{\*\listtag0}Kleinere Stringtablefehler behoben}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs24\lang1031{\*\listtag0}\par}}
\ No newline at end of file diff --git a/TemplePushing.c4s/DescUS.rtf b/TemplePushing.c4s/DescUS.rtf index 7f6a723..6c4f16b 100644 --- a/TemplePushing.c4s/DescUS.rtf +++ b/TemplePushing.c4s/DescUS.rtf @@ -1,21 +1,92 @@ -{\rtf1\ansi\deff0\adeflang1025 -{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset1 Times New Roman;}{\f4\froman\fprq0\fcharset1 Times New Roman;}{\f5\fnil\fprq2\fcharset0 Microsoft YaHei;}{\f6\fnil\fprq2\fcharset0 Mangal;}{\f7\fnil\fprq0\fcharset1 Mangal;}} -{\colortbl;\red0\green0\blue0;\red128\green128\blue128;} -{\stylesheet{\s0\snext0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f0\fs24\lang1031 Standard;} -{\s15\sbasedon0\snext16\sb240\sa120\keepn\dbch\af5\dbch\af6\afs28\loch\f2\fs28 \u220\'dcberschrift;} -{\s16\sbasedon0\snext16\sb0\sa120 Textk\u246\'f6rper;} -{\s17\sbasedon16\snext17\sb0\sa120\dbch\af7 Liste;} -{\s18\sbasedon0\snext18\sb120\sa120\noline\i\dbch\af7\afs24\ai\fs24 Beschriftung;} -{\s19\sbasedon0\snext19\noline\dbch\af7 Verzeichnis;} -}{\info{\author Benjamin}{\creatim\yr2008\mo1\dy10\hr21\min49}{\revtim\yr2008\mo6\dy6\hr14\min29}{\printim\yr0\mo0\dy0\hr0\min0}{\comment LibreOffice}{\vern3600}}\deftab720 -\viewscale170 -{\*\pgdsctbl -{\pgdsc0\pgdscuse195\pgwsxn12240\pghsxn15840\marglsxn1417\margrsxn1417\margtsxn1417\margbsxn1134\pgdscnxt0 Standard;}} -\formshade{\*\pgdscno0}\paperh15840\paperw12240\margl1417\margr1417\margt1417\margb1134\sectd\sbknone\sectunlocked1\pgndec\pgwsxn12240\pghsxn15840\marglsxn1417\margrsxn1417\margtsxn1417\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc -\pgndec\pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f0\fs24\lang1031\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0{\b\langfe1031\rtlch \ltrch\loch\fs20\lang2057\loch\f4 -Temple Pushing} -\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f0\fs24\lang1031\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\langfe1031\rtlch \ltrch\loch\fs16\lang2057\loch\f4 - -\par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af8\langfe2052\dbch\af6\afs24\alang1081\loch\f0\fs24\lang1031\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0{\langfe1031\rtlch \ltrch\loch\fs16\lang2057\loch\f4 -To be written.} -\par }
\ No newline at end of file +{\rtf1\ansi\ansicpg1252\deff0\uc1 +{\fonttbl +{\f0\fnil\fcharset0\fprq0\fttruetype Times New Roman;} +{\f1\fnil\fcharset0\fprq0\fttruetype Arial;} +{\f2\fnil\fcharset0\fprq0\fttruetype Courier New;}} +{\colortbl +\red0\green0\blue0; +\red255\green255\blue255; +\red255\green255\blue255;} +{\stylesheet +{\s7\tx1584\sbasedon32\snext31 Chapter Heading;} +{\s5\fi-431\li720 Box List;} +{\s41\sa119\f0\fs24\lang1031\sbasedon39 Textk\u246\'f6rper;} +{\s46\f0\fs24\lang1031\sbasedon39 Verzeichnis;} +{\s29\fi-431\li720\sbasedon35 Lower Case List;} +{\s4\li1440\ri1440\sa120\sbasedon31 Block Text;} +{\s1\sb240\sa117\f1\fs28\lang1031\sbasedon39\snext41 ?berschrift;} +{\s43\fi-431\li720 Triangle List;} +{\s44\fi-431\li720\sbasedon35 Upper Case List;} +{\s23\sb440\sa60\f1\fs28\b\sbasedon31\snext31 Heading 2;} +{\s6\fi-431\li720 Bullet List;} +{\s25\sb440\sa60\f1\fs24\b\sbasedon31\snext31 Heading 4;} +{\s26\fi-431\li720 Heart List;} +{\s2\fi-431\li720 Arrowhead List;} +{\s3\sb119\sa119\f0\fs24\i\lang1031\sbasedon39 Beschriftung;} +{\s38\fi-431\li720 Square List;} +{\s12\qc\sb240\sa120\f1\fs32\b\sbasedon31\snext31 Contents Header;} +{\s22\sb440\sa60\f1\fs34\b\sbasedon31\snext31 Heading 1;} +{\s20\fs20\sbasedon31 Footnote Text;} +{\s28\sa119\f0\fs24\lang1031\sbasedon41 Liste;} +{\s24\sb440\sa60\f1\fs24\b\sbasedon31\snext31 Heading 3;} +{\s35\fi-431\li720 Numbered List;} +{\s14\fi-431\li720 Diamond List;} +{\s21\fi-431\li720 Hand List;} +{\s45\fi-431\li720\sbasedon35 Upper Roman List;} +{\s31\f0\fs24 Normal;} +{\s39\f0\fs24\lang1031 Standard;} +{\s36\f2\sbasedon31 Plain Text;} +{\s47\sb240\sa119\f1\fs28\lang1031\sbasedon39\snext41\uc1 \u220 ?berschrift;} +{\s40\fi-431\li720 Star List;} +{\s37\tx1584\sbasedon32\snext31 Section Heading;} +{\s27\fi-431\li720 Implies List;} +{\s42\fi-431\li720 Tick List;} +{\s15\fi-288\li288\sbasedon31 Endnote;} +{\s13\fi-431\li720 Dashed List;} +{\s30\fi-431\li720\sbasedon31 Lower Roman List;} +{\*\cs19\fs20\super Footnote Reference;} +{\s17\sbasedon31 Endnote Text;} +{\*\cs16\fs20\super Endnote Reference;} +{\s32\tx431\sbasedon22\snext31 Numbered Heading 1;} +{\s33\tx431\sbasedon23\snext31 Numbered Heading 2;} +{\s34\tx431\sbasedon24\snext31 Numbered Heading 3;} +{\s18\fi-288\li288\fs20\sbasedon31 Footnote;} +{\s8\fi-431\li720\sbasedon31\snext31 Contents 1;} +{\s9\fi-431\li1440\sbasedon31\snext31 Contents 2;} +{\s10\fi-431\li2160\sbasedon31\snext31 Contents 3;} +{\s11\fi-431\li2880\sbasedon31\snext31 Contents 4;}} +\kerning0\cf0\ftnbj\fet2\ftnstart1\ftnnar\aftnnrlc\ftnstart1\aftnstart1\aenddoc\revprop3{\*\rdf}{\info\uc1{\author Benjamin}}\deftab720\viewkind1\paperw12240\paperh15840\margl1440\margr1440\widowctrl +\sectd\sbknone\colsx0\margtsxn1417\margbsxn1134\marglsxn1417\margrsxn1417\pgncont\ltrsect +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs20\b\lang2057{\*\listtag0}\abinodiroverride\ltrch Temple Pushing}{\s39\f0\fs20\b\lang2057{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs20\b\lang2057{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}[}{\s39\f0\fs16\i\lang2057{\*\listtag0}Work in progress.}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}] }{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\b\lang2057{\*\listtag0}Annotations}{\s39\f0\fs16\b\lang2057{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\b\lang2057\ltrch\abiltr{\*\listtag0}\tab }{\s39\f0\fs16\b\lang2057\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\li720\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang2057{\*\listtag0}* Nearby hostile clonks can be pushed via}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0} [}{\s39\f0\fs16\lang2057{\*\listtag0}Change Inventory}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}]}{\s39\f0\fs16\lang2057{\*\listtag0}.}{\s39\f0\fs16\lang2057{\*\listtag0}\par} +\pard\plain\ltrpar\ql\li720\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}* }{\s39\f0\fs16\lang2057{\*\listtag0}Numerous objects,}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\lang2057{\*\listtag0}especially the stronger flints,}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\lang2057{\*\listtag0}can be shot via}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0} [}{\s39\f0\fs16\lang2057{\*\listtag0}Double Dig}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}] }{\s39\f0\fs16\lang2057{\*\listtag0}or using the context menu.}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\li720\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}* }{\s39\f0\fs16\lang2057{\*\listtag0}Arrow packs are able to shoot their corresponding arrows with}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0} [}{\s39\f0\fs16\lang2057{\*\listtag0}Double Dig}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}]}{\s39\f0\fs16\lang2057{\*\listtag0}.}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\li720\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}* }{\s39\f0\fs16\lang2057{\*\listtag0}Some objects bounce off of surfaces upon collision.}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0} (}{\s39\f0\fs16\lang2057{\*\listtag0}only vertical rebounds}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0})}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang2057{\*\listtag0}\tab * Objects start to fade if left untouched for a certain amount of time.}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}\tab \tab }{\s39\f0\fs16\lang2057{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs24\lang1031{\*\listtag0}\abinodiroverride\ltrch \tab }{\s39\f0\fs24\lang1031{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\b\lang2057{\*\listtag0}\abinodiroverride\ltrch Changelog}{\s39\f0\fs16\b\lang2057{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}~ r0.921}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\itap0{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\tab }{\s39\f0\fs16\lang1031{\*\listtag0}!}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0} Removed m}{\s39\f0\fs16\lang1031{\*\listtag0}eteorites and meteorite storm}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\tab }{\s39\f0\fs16\lang1031{\*\listtag0}!}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\lang1031{\*\listtag0}Removed goblet from sudden death mode}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\tab }{\s39\f0\fs16\lang1031{\*\listtag0}*}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\lang1031{\*\listtag0}Names in scoreboard are left aligned}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\itap0{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\tab }{\s39\f0\fs16\lang1031{\*\listtag0}*}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}I}{\s39\f0\fs16\lang1031{\*\listtag0}mproved kill tracking of explosions}{\s39\f0\fs16\i\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}~ }{\s39\f0\fs16\i\lang2057\ltrch\abiltr{\*\listtag0}r0.92}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}\tab ! }{\s39\f0\fs16\lang2057{\*\listtag0}Optimized sounds and file size}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}\tab * }{\s39\f0\fs16\lang2057{\*\listtag0}Spell fixes yet again}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}\tab * }{\s39\f0\fs16\lang2057{\*\listtag0}Calibrated kill tracking}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\lang2057{\*\listtag0}~ }{\s39\f0\fs16\i\lang2057{\*\listtag0}r0.917a}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\i\lang2057\ltrch\abiltr{\*\listtag0}\tab }{\s39\f0\fs16\lang2057{\*\listtag0}! Rounds end faster}{\s39\f0\fs16\i\lang2057\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}\tab ! }{\s39\f0\fs16\lang2057{\*\listtag0}Prevented post-game eliminations}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\li720\s39\sl240\slmult1\itap0{\s39\f0\fs16\i\lang2057\ltrch\abiltr{\*\listtag0}* }{\s39\f0\fs16\lang2057{\*\listtag0}Tweaked numerous spells}{\s39\f0\fs16\i\lang2057\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\li720\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}* }{\s39\f0\fs16\lang2057{\*\listtag0}Fixed a pushing issue which occurred when trying to push leftward}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\li720\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}* }{\s39\f0\fs16\lang2057{\*\listtag0}Optimized particle effects}{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0} }{\s39\f0\fs16\lang2057\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031{\*\listtag0}~ }{\s39\f0\fs16\i\lang1031{\*\listtag0}r0.915b}{\s39\f0\fs16\lang1031{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\tab ! }{\s39\f0\fs16\lang1031{\*\listtag0}Added third team}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0} (\uc1\u8222\'84}{\s39\f0\fs16\lang1031{\*\listtag0}Ghard\'fbr}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\uc1\u8220\'93)}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031{\*\listtag0}\tab * Reworked team icons}{\s39\f0\fs16\lang1031{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\tab * }{\s39\f0\fs16\lang1031{\*\listtag0}Fixed some stringtable issues}{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\par} +\pard\plain\ltrpar\ql\s39\sl240\slmult1\itap0{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\tab }{\s39\f0\fs16\lang1031\ltrch\abiltr{\*\listtag0}\par}}
\ No newline at end of file diff --git a/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/ActMap.txt b/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/ActMap.txt new file mode 100644 index 0000000..f670372 --- /dev/null +++ b/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/ActMap.txt @@ -0,0 +1,6 @@ +[Action] +Name=Be +Procedure=NONE +Length=10 +Delay=0 +Facet=0,0,64,64
\ No newline at end of file diff --git a/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/DefCore.txt b/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/DefCore.txt new file mode 100644 index 0000000..942524a --- /dev/null +++ b/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/DefCore.txt @@ -0,0 +1,16 @@ +[DefCore] +id=BCRY +Name=Huge Crystal +Version=4,9,5 +Category=C4D_StaticBack|C4D_Background +Width=64 +Height=64 +Offset=-32,-32 +Picture=0,0,64,64 +Vertices=1 +VertexY=32 +Rotate=1 +NoStabilize=1 +IncompleteActivity=1 +StretchGrowth=1 +Oversize=1 diff --git a/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/DescDE.txt b/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/DescDE.txt new file mode 100644 index 0000000..d5c1d05 --- /dev/null +++ b/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/DescDE.txt @@ -0,0 +1 @@ +Sieht schön aus.
\ No newline at end of file diff --git a/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/DescUS.txt b/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/DescUS.txt new file mode 100644 index 0000000..62c5e47 --- /dev/null +++ b/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/DescUS.txt @@ -0,0 +1 @@ +Gems? Gems are truly outrageous. They are truly, truly, truly outrageous.
\ No newline at end of file diff --git a/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/Graphics.png b/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/Graphics.png Binary files differnew file mode 100644 index 0000000..d8ace61 --- /dev/null +++ b/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/Graphics.png diff --git a/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/Names.txt b/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/Names.txt new file mode 100644 index 0000000..a1d16fe --- /dev/null +++ b/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/Names.txt @@ -0,0 +1,2 @@ +DE:Riesiger Kristall +US:Huge Crystal diff --git a/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/Script.c b/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/Script.c new file mode 100644 index 0000000..cae886c --- /dev/null +++ b/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/Script.c @@ -0,0 +1,13 @@ +/*-- Riesiger Kristall --*/ + +#strict 2 + +func Set(int phase, int size, int rotation, int dir, int color) +{ + SetAction("Be"); + SetPhase(phase); + SetCon(size); + SetR(rotation); + SetDir(dir); + SetClrModulation(color); +} diff --git a/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/ActMap.txt b/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/ActMap.txt new file mode 100644 index 0000000..253f8fe --- /dev/null +++ b/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/ActMap.txt @@ -0,0 +1,8 @@ +[Action] +Name=Active +Procedure=NONE +FacetBase=1 +Delay=10 +Length=1 +NextAction=Active +StartCall=Activity diff --git a/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/DefCore.txt b/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/DefCore.txt new file mode 100644 index 0000000..2437635 --- /dev/null +++ b/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/DefCore.txt @@ -0,0 +1,17 @@ +[DefCore] +id=BCRS +Name=Big Crystal +Version=4,9,5 +Category=1 +Width=30 +Height=45 +Offset=-15,-22 +Value=1 +Mass=6 +Vertices=4 +VertexX=-15,15,-15,15 +VertexY=21,-21,-21,21 +Picture=0,0,30,45 +StretchGrowth=1 +Oversize=1 +Rotate=1 diff --git a/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/DescDE.txt b/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/DescDE.txt new file mode 100644 index 0000000..12ff56a --- /dev/null +++ b/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/DescDE.txt @@ -0,0 +1 @@ +Großer Kristall. diff --git a/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/DescUS.txt b/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/DescUS.txt new file mode 100644 index 0000000..fba87c7 --- /dev/null +++ b/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/DescUS.txt @@ -0,0 +1 @@ +Large crystal. diff --git a/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/Graphics.png b/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/Graphics.png Binary files differnew file mode 100644 index 0000000..2debc0e --- /dev/null +++ b/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/Graphics.png diff --git a/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/Names.txt b/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/Names.txt new file mode 100644 index 0000000..7c65f98 --- /dev/null +++ b/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/Names.txt @@ -0,0 +1,2 @@ +DE:Kristall +US:Crystal diff --git a/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/Script.c b/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/Script.c new file mode 100644 index 0000000..40ad2ac --- /dev/null +++ b/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/Script.c @@ -0,0 +1,22 @@ +/*-- Großer Kristall --*/ + +#strict 2 + +protected func Initialize() +{ + var rand=1; + if(Random(2) == 1)rand=-1; + SetObjDrawTransform(1000*rand,0,0,0,1000); +} + +protected func Activity() +{ + var cnt; + cnt=5; + while(cnt--) CreateParticle("MaterialSpark", GetX(this)-GetX()+Random(13)-6, GetY(this)-GetY()+RandomX(11),0,-1-Random(2),40,0x1f7fff); +} + +public func Activate() +{ + return SetAction("Active"); +} diff --git a/TemplePushing.c4s/Environment.c4d/Rain.ogg b/TemplePushing.c4s/Environment.c4d/Rain.ogg Binary files differnew file mode 100644 index 0000000..d7dc2cc --- /dev/null +++ b/TemplePushing.c4s/Environment.c4d/Rain.ogg diff --git a/TemplePushing.c4s/Environment.c4d/Rain.wav b/TemplePushing.c4s/Environment.c4d/Rain.wav Binary files differdeleted file mode 100644 index aee9dd8..0000000 --- a/TemplePushing.c4s/Environment.c4d/Rain.wav +++ /dev/null diff --git a/TemplePushing.c4s/Graphics.c4g/GUIProgress.png b/TemplePushing.c4s/Graphics.c4g/GUIProgress.png Binary files differnew file mode 100644 index 0000000..87e6177 --- /dev/null +++ b/TemplePushing.c4s/Graphics.c4g/GUIProgress.png diff --git a/TemplePushing.c4s/Graphics.c4g/Logo.png b/TemplePushing.c4s/Graphics.c4g/Logo.png Binary files differnew file mode 100644 index 0000000..8a370ba --- /dev/null +++ b/TemplePushing.c4s/Graphics.c4g/Logo.png diff --git a/TemplePushing.c4s/LoaderCliffPushing.jpg b/TemplePushing.c4s/LoaderTP.jpg Binary files differindex e714d65..e714d65 100644 --- a/TemplePushing.c4s/LoaderCliffPushing.jpg +++ b/TemplePushing.c4s/LoaderTP.jpg diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/ActMap.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/ActMap.txt new file mode 100644 index 0000000..c7d7b36 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/ActMap.txt @@ -0,0 +1,41 @@ +[Action] +Name=Fly +Procedure=FLOAT +Length=1 +Delay=0 +Directions=2 +FlipDir=1 +NextAction=Fly +Facet=0,0,45,45 + +[Action] +Name=Fly2 +Procedure=FLOAT +Length=1 +Delay=0 +Directions=2 +FlipDir=1 +NextAction=Fly2 +Facet=855,0,45,45 + + +[Action] +Name=Open +Procedure=FLOAT +Length=20 +Delay=1 +Directions=2 +FlipDir=1 +NextAction=Fly2 +Facet=0,0,45,45 + +[Action] +Name=Close +Procedure=FLOAT +Length=20 +Delay=1 +Directions=2 +FlipDir=1 +Reverse=1 +NextAction=Fly +Facet=0,0,45,45
\ No newline at end of file diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/DefCore.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/DefCore.txt new file mode 100644 index 0000000..39f04a6 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/DefCore.txt @@ -0,0 +1,17 @@ +[DefCore] +id=AFTF +Name=Claw +Version=4,9,5 +Category=4 +MaxUserSelect=10 +Width=45 +Height=45 +Offset=-27,-27 +Value=10 +Mass=50 +Timer=2 +TimerCall=Check +Rotate=1 + +[Physical] +Float=500
\ No newline at end of file diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/DescDE.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/DescDE.txt new file mode 100644 index 0000000..cfb916a --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/DescDE.txt @@ -0,0 +1 @@ +Die Klaue an sich.
\ No newline at end of file diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/DescUS.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/DescUS.txt new file mode 100644 index 0000000..46f7abe --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/DescUS.txt @@ -0,0 +1 @@ +The claw itself.
\ No newline at end of file diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/Graphics.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/Graphics.png Binary files differnew file mode 100644 index 0000000..5f2fe9f --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/Graphics.png diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/Names.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/Names.txt new file mode 100644 index 0000000..aad1c68 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/Names.txt @@ -0,0 +1,2 @@ +DE:Faust +US:Fist
\ No newline at end of file diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/Script.c b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/Script.c new file mode 100644 index 0000000..f8a20b7 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/Script.c @@ -0,0 +1,79 @@ +/*-- Klaue --*/ + +#strict 2 + +static const AFTF_Speed=45; + +local pClonk; +local pTimer, iSpeed, iAngle; +local iDamage; + +protected func Initialize() +{ + // Geschwindigkeit setzen + iSpeed=AFTF_Speed; + iDamage = 30; + return 1; +} + +public func Activate(pCaster,iNewAngle) +{ + // Clonk und Winkel speichern + pClonk=pCaster; + iAngle=iNewAngle; + + // Geschwindigkeit passend setzen + var iAdd=0; + if(iAngle >= 0) iAdd=180; + SetAction("Open"); + SetR(iAngle+90+iAdd); + SetXDir(Cos(iAngle-90,AFTF_Speed)); + SetYDir(Sin(iAngle-90,AFTF_Speed)); + + // Richtung anpassen + if(iAngle < 0) { SetDir(DIR_Right); } + else { SetDir(DIR_Left); } +} + +protected func Check() +{ + // Die Zeit vorbei oder stehen geblieben + if(++pTimer > 45 || iSpeed<=0) + { + // Ein letzer Effekt + CastParticles("PSpark",10,10,0,0,60,160,RGB(150,150,240),RGB(210,210,255)); + RemoveObject(); + } + + // In Materie wird die Klaue langsamer + if(GBackSolid()) + { + iSpeed-=6; + SetXDir(Cos(iAngle-90,iSpeed)); + SetYDir(Sin(iAngle-90,iSpeed)); + } + + if(!iDamage) return; + + // Clonks suchen + for(var pClnk in FindObjects(Find_OCF(OCF_Alive),Find_Distance(23,0,0),Find_NoContainer())) + { + // Nur Feine, außer die Regel ist aktiviert +// if(!ObjectCount(NTMG) && !Hostile(GetOwner(),GetOwner(pClnk))) continue; + + // Nicht in den ersten Frames den Zauberer selber treffen + if(pClnk == pClonk && pTimer < 5) continue; + + // Clonk wegschleudern + pClnk->SetAction("Tumble"); + SetPosition(GetX(pClnk),GetY(pClnk)-2,pClnk); + SetXDir(GetXDir(pClnk)+RandomX(-10,10),pClnk); + SetYDir(-20,pClnk); + + var iDmg = iSpeed/5; + if(iDmg>iDamage) iDmg = iDamage; + iDamage-=iDmg; + // Und wehtun + DoEnergy(-iDmg,pClnk); + } +} diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/DefCore.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/DefCore.txt new file mode 100644 index 0000000..4cb701b --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/DefCore.txt @@ -0,0 +1,10 @@ +[DefCore] +id=AFST +Name=MagicAirClaw +Version=4,9,5,4 +Category=1 +Width=1 +Height=1 +Picture=0,0,64,64 +Value=30 +Components=IASH=3;
\ No newline at end of file diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/DescDE.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/DescDE.txt new file mode 100644 index 0000000..4fcfb73 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/DescDE.txt @@ -0,0 +1 @@ +Erzeugt eine Klaue aus Luft, die Gegner etwas wegschleudert und verletzt.
\ No newline at end of file diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/DescUS.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/DescUS.txt new file mode 100644 index 0000000..ba0ca61 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/DescUS.txt @@ -0,0 +1 @@ +A claw of air which hurts enemies.
\ No newline at end of file diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Graphics.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Graphics.png Binary files differnew file mode 100644 index 0000000..54db3c5 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Graphics.png diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Names.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Names.txt new file mode 100644 index 0000000..d21bef2 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Names.txt @@ -0,0 +1,2 @@ +DE:Luftklaue +US:Air claw
\ No newline at end of file diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Script.c b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Script.c new file mode 100644 index 0000000..d4008c2 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Script.c @@ -0,0 +1,46 @@ +/* Luftklaue */ + +#strict 2 + +func Activate(pCaster,pRealcaster) { + var pClonk; + if(pRealcaster) pClonk=pRealcaster; + else pClonk=pCaster; + + // Nicht im Gebäude zaubern + if(Contained(pClonk)) + { + Sound("Error"); + PlayerMessage(GetOwner(pClonk), "$must_be_in_free$", pClonk); + RemoveObject(); + return 0; + } + + // Zielen wenn möglich + if (pClonk->~DoSpellAim(this(), pCaster)) return 1; + + // Sonst einfach ungezielt loslassen + var angle=-90; + if(GetDir(pClonk) == DIR_Right) angle=90; + ActivateAngle(pClonk,angle); + + return; +} + +// Aktivierung nach Zielen (iAngle: -90=links; 0=oben; +90=rechts) +public func ActivateAngle(object pCaller, int iAngle) +{ + // Klaue erzeugen und losschicken + CreateObject(AFTF,AbsX(GetX(pCaller))+Cos(iAngle-90,10),AbsY(GetY(pCaller))+Sin(iAngle-90,10)+19,GetOwner(pCaller))->Activate(pCaller,iAngle); + + // Objekt löschen + RemoveObject(); + return 1; +} + +public func IsBattlemageSpell() { return true; } + +/* Zaubercombo */ + +public func GetSpellStaff(object pMage) { return SMAR; } +public func GetSpellStaffCombo(pMage) { return ("44"); } // (1: Backward; 2: Down; 3: Forward; 4: Throw; 5: Jump; 6: Dig) diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/StringTblDE.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/StringTblDE.txt new file mode 100644 index 0000000..04eec3b --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/StringTblDE.txt @@ -0,0 +1,2 @@ +must_be_in_free=Für diesen Zauber muss|sich der Clonk im|Freien befinden! +StillDelay=Das Zauberdelay ist noch nicht abgelaufen!
\ No newline at end of file diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/StringTblUS.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/StringTblUS.txt new file mode 100644 index 0000000..3c01382 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/StringTblUS.txt @@ -0,0 +1,2 @@ +must_be_in_free=Magician must be outside|to cast this spell! +StillDelay=The spelldelay isn't over. diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/DefCore.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/DefCore.txt new file mode 100644 index 0000000..07ffdaf --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/DefCore.txt @@ -0,0 +1,8 @@ +[DefCore] +id=MATT +Version=4,9,8 +Name=Teleport +Category=C4D_StaticBack|C4D_Magic +Value=12 +Components=IMUS=1;IASH=1 +Picture=0,0,64,64 diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/DescDE.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/DescDE.txt new file mode 100644 index 0000000..bd7a8be --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/DescDE.txt @@ -0,0 +1 @@ +Teleportiert hinter einen Gegner.
\ No newline at end of file diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/DescUS.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/DescUS.txt new file mode 100644 index 0000000..62914d6 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/DescUS.txt @@ -0,0 +1 @@ +Teleports behind an enemy.
\ No newline at end of file diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/Graphics.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/Graphics.png Binary files differnew file mode 100644 index 0000000..cd389c0 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/Graphics.png diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/Names.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/Names.txt new file mode 100644 index 0000000..9ed60b8 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/Names.txt @@ -0,0 +1,2 @@ +DE:Angriffsteleport +US:Assault Teleport diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/Script.c b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/Script.c new file mode 100644 index 0000000..60dc5f2 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/Script.c @@ -0,0 +1,88 @@ +/*-- Teleport --*/ + +#strict + +func Range() +{ + var range=225; + return range; +} + + + +protected func Activate(object pCaster, object pRealCaster) +{ + // Effekt erzeugen + if(!pRealCaster) pRealCaster = pCaster; + + var possibleTargets = []; + var found=0; + var range=Range(); + for(var obj in FindObjects(Find_Distance(range),Find_OCF(OCF_CrewMember),Find_Hostile(GetOwner(pRealCaster)),Sort_Distance())) + { + var dir=-1; + if(GetDir(obj) == DIR_Left)dir=1; + + if(GBackSolid(AbsX(GetX(obj)+15*dir),AbsY(GetY(obj))) + || GBackSolid(AbsX(GetX(obj)+15*dir),AbsY(GetY(obj)+5)) + || GBackSolid(AbsX(GetX(obj)+15*dir),AbsY(GetY(obj)-9)))continue; + if(!PathFree(GetX(obj),GetY(obj),GetX(obj)+15*dir,GetY(obj) + 5))continue; + + var priority = 20 + ObjectDistance(pRealCaster, obj); + if(GBackSemiSolid(AbsX(obj->GetX()), AbsY(obj->GetY()))) + priority += 100; + + possibleTargets[GetLength(possibleTargets)] = [obj, priority]; + + } + + if(!GetLength(possibleTargets)) + { + var x = AbsX(GetX(pRealCaster)); + var y = AbsY(GetY(pRealCaster)); + var tim = CreateObject(TIM1, x, y, pRealCaster->GetOwner()); + tim->SetVisibility(VIS_Owner); + AddEffect("ScheduledRemove", tim, 1, 35 * 5, 0, MATT); + CreateParticle("RangeSpark", 0, 0, 0, 0,((range)*1000/200)*2, RGB(200, 200, 100), tim, true); + Sound("Error",0,0,0,GetOwner(pRealCaster)); + RemoveObject(); + return; + } + + + // find lowest prio target from list + var currentLowest = 0xffffff; + for(var pt in possibleTargets) + { + if(pt[1] >= currentLowest) continue; + currentLowest = pt[1]; + found = pt[0]; + } + + var dir=-1; + if(GetDir(found) == DIR_Left)dir=1; + + for(var cnt=0;cnt<5;cnt++) + { + CreateParticle("PSpark",AbsX(GetX(pRealCaster)+RandomX(-5,5)),AbsY(GetY(pRealCaster)+RandomX(-10,10)),0,0,150,GetColorDw(pRealCaster)); + CreateParticle("PSpark",AbsX(GetX(found)+15*dir+RandomX(-5,5)),AbsY(GetY(found)+RandomX(-10,10)),0,0,150,GetColorDw(pRealCaster)); + } + SetSpeed(GetXDir(found),GetYDir(found),pRealCaster); + SetPosition(GetX(found)+7*dir,GetY(found),pRealCaster); + + Sound("Scream"); + return(RemoveObject()); +} + + +func FxScheduledRemoveStop(target, effect, reason, temp) +{ + if(temp) return; + if(!target) return; + target->RemoveObject(); +} + +/* Zaubercombo */ + +public func GetSpellClass(object pMage) { return(AIR1); } +public func GetSpellCombo(pMage) { return ("222"); } // (1: Backward; 2: Down; 3: Forward; 4: Throw; 5: Jump; 6: Dig) diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/DefCore.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/DefCore.txt new file mode 100644 index 0000000..8545ace --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/DefCore.txt @@ -0,0 +1,9 @@ +[DefCore] +id=MGCY +Version=4,9,8 +Name=MagicCrystalSpikes +Category=C4D_Magic +Width=1 +Height=1 +Value=25 +Picture=0,0,64,64 diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/DescDE.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/DescDE.txt new file mode 100644 index 0000000..138b9b2 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/DescDE.txt @@ -0,0 +1 @@ +Aus dem Boden vor dem Zauberer stoßen Kristallstacheln und schädigen Lebewesen, welche sich über einem Kristall befinden. Außerdem erhalten Lebewesen kontinuierlich schaden, wenn sie neben einem solchen Kristall verweilen. diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/DescUS.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/DescUS.txt new file mode 100644 index 0000000..a37ddff --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/DescUS.txt @@ -0,0 +1 @@ +Summons numerous crystal spikes which damage entities on impact, while also dealing damage to any living clonks or animals standing next to them. diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Graphics.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Graphics.png Binary files differnew file mode 100644 index 0000000..de7ae74 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Graphics.png diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/ActMap.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/ActMap.txt new file mode 100644 index 0000000..5611746 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/ActMap.txt @@ -0,0 +1,29 @@ +[Action] +Name=Bohr +Procedure=NONE +Length=10 +Delay=2 +Facet=0,0,24,58 +NextAction=Exist +PhaseCall=StossEffect +Sound=Earthquake +EndCall=SoundBamm + +[Action] +Name=Exist +Procedure=NONE +Length=1 +Delay=1 +Facet=216,0,24,58 +NextAction=Exist +EndCall=ExistTimer +Sound=VolcanoCast + +[Action] +Name=Remove +Procedure=NONE +Length=10 +Delay=4 +Facet=0,0,24,58 +EndCall=RemoveMe +Reverse=1 diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/DefCore.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/DefCore.txt new file mode 100644 index 0000000..024172a --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/DefCore.txt @@ -0,0 +1,18 @@ +[DefCore] +id=QBCY +Name=BigCrystall +Version=4,9,5 +Category=4 +Width=24 +Height=56 +Offset=-12,-28 +Mass=100 +Components=CRYS=4; +Picture=0,56,64,64 +Vertices=3 +VertexY=-28,28,28 +VertexX=0,6,-6 +VertexFriction=50,100,100 +ColorByOwner=1 +StretchGrowth=1 +IncompleteActivity=1
\ No newline at end of file diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/DescDE.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/DescDE.txt new file mode 100644 index 0000000..34ab750 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/DescDE.txt @@ -0,0 +1 @@ +Wertvoll doch auch äußerst Spitz.
\ No newline at end of file diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/DescUS.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/DescUS.txt new file mode 100644 index 0000000..1dfbcf7 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/DescUS.txt @@ -0,0 +1 @@ +A new object definition.
\ No newline at end of file diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/Graphics.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/Graphics.png Binary files differnew file mode 100644 index 0000000..f490a20 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/Graphics.png diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsA.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsA.png Binary files differnew file mode 100644 index 0000000..f490a20 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsA.png diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsB.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsB.png Binary files differnew file mode 100644 index 0000000..f490a20 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsB.png diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsC.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsC.png Binary files differnew file mode 100644 index 0000000..f490a20 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsC.png diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsD.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsD.png Binary files differnew file mode 100644 index 0000000..f490a20 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsD.png diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsMetl.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsMetl.png Binary files differnew file mode 100644 index 0000000..14a097b --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsMetl.png diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/Names.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/Names.txt new file mode 100644 index 0000000..09888b0 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/Names.txt @@ -0,0 +1,2 @@ +DE:Kristallstachel +US:Crystal Spike diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/Overlay.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/Overlay.png Binary files differnew file mode 100644 index 0000000..a7abc6d --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/Overlay.png diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayA.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayA.png Binary files differnew file mode 100644 index 0000000..8358372 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayA.png diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayB.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayB.png Binary files differnew file mode 100644 index 0000000..57755c3 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayB.png diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayC.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayC.png Binary files differnew file mode 100644 index 0000000..1aa4791 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayC.png diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayD.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayD.png Binary files differnew file mode 100644 index 0000000..3afb2bf --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayD.png diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayMetl.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayMetl.png Binary files differnew file mode 100644 index 0000000..5a3e193 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayMetl.png diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/Script.c b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/Script.c new file mode 100644 index 0000000..1d25b23 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/Script.c @@ -0,0 +1,109 @@ +/*-- Crystal Spike --*/ + +#strict + +local iMaxTime; + +local iExtra; + +public func IsBigCrystal(){ return(1); } + +func Initialize() { + var Randi = RandomX(1,4); + if(Randi == 1) SetGraphics("A",this(), GetID(), 1,GFXOV_MODE_ExtraGraphics); + if(Randi == 2) SetGraphics("B",this(), GetID(), 1,GFXOV_MODE_ExtraGraphics); + if(Randi == 3) SetGraphics("C",this(), GetID(), 1,GFXOV_MODE_ExtraGraphics); + if(Randi == 4) SetGraphics("D",this(), GetID(), 1,GFXOV_MODE_ExtraGraphics); + SetAction("Bohr"); + return(1); +} +public func Set(inMaxTime, int iMetl){ + iMaxTime = inMaxTime; + if(iMetl){ iExtra = iMetl; + SetGraphics("Metl",this(), GetID(), 1,GFXOV_MODE_ExtraGraphics); + } + return(1); +} + +func StossEffect() { +for(var pClonk in FindObjects(Find_Distance(20), Find_OCF(OCF_Living), Find_NoContainer ())){ + if(GetAlive(pClonk)) { + if(!GetEffect("NoCrystallAttack",pClonk)) + HitObject(pClonk); + } + } +for(var pDing in FindObjects(Find_Distance(30), Find_Category(C4D_Object), Find_NoContainer ())){ + HitDing(pDing); + } + +if(!Random(1)) {CreateParticle("Smoke",0,+21,RandomX(-4,4),-5,80,RGB(120,120,120)); } +if(!Random(2)) { +var ebk = CreateObject(1EBK,0,+21,GetOwner()); +if(ebk) SetSpeed(RandomX(-5,5),RandomX(-40,-80),ebk); + } +} + +func ExistTimer() { +if(!Random(20)) Sound("Sparkle"); +if(!Random(4)) { +CreateParticle("NoGravSpark",RandomX(-8,8),RandomX(-28,26),0,-5,RandomX(10,30),GetTeamColor(GetPlayerTeam(GetOwner()))); + } + +for(var pClonk in FindObjects(Find_Distance(40), Find_OCF(OCF_Living), Find_NoContainer ())){ + if(GetAlive(pClonk)) if(!Random(20)) EffectObject(pClonk); + } + +if(iMaxTime > 0){ +if(GetActTime() > iMaxTime) SetAction("Remove"); + } +} + +global func CreateBigCrystal(int iX,int iY, int iCon, int iMTime, int iOwner) { // Erstell an der Position ein großen Kristall +var pCrys = CreateObject(QBCY,iX,iY,iOwner); +pCrys->Set(iMTime); +SetCon(iCon,pCrys); +return(pCrys); +} +func HitObject(object pClonk) { +if(!pClonk) return(0); +Sound("Crystal2",0,pClonk); +if(!FindObject(NTMG)){ + if(!Hostile(GetOwner(),GetOwner(pClonk))) return(0); + } +if(GetAction(pClonk) ne "Tumble"){ +DoEnergy(RandomX(-10,-20)+iExtra,pClonk); +Fling(pClonk, RandomX(-4,4), RandomX(-5,-9)); + AddEffect("NoCrystallAttack",pClonk,100,1,pClonk); + } +} +func HitDing(object pDing) { +if(GetID(pDing) == QBCY) return(0); +if(pDing){ SetSpeed(RandomX(-4,4),RandomX(-20,-40),pDing); +pDing->~Hit(); } +} + +func EffectObject(object pClonk) { +if(!FindObject(NTMG)){ + if(!Hostile(GetOwner(),GetOwner(pClonk))) return(0); + } +CreateParticle("NoGravSpark",GetX()-GetX(pClonk)+RandomX(-8,8),GetY()-GetY()+RandomX(-12,12),0,-5,RandomX(10,20),GetColorDw (this())); +if(!Random(2)) +DoEnergy(-7,pClonk); +} +func RemoveMe(){ +RemoveObject(this()); +} +func SoundBamm(){ + Sound("RockBreak*"); + Sound("Blast2",0,0,50); +for(var i = 0; i < 5; i++){ +var ebk = CreateObject(1EBK,0,+21,GetOwner()); +if(ebk) SetSpeed(RandomX(-5,5),RandomX(-40,-80),ebk); + } +} +global func FxNoCrystallAttackTimer(object pTarget, int iIndex, int iTime) +{ + if(!pTarget) return (false); + if(iTime >= 20) return (-1); + return (true); +}
\ No newline at end of file diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Names.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Names.txt new file mode 100644 index 0000000..10f34d9 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Names.txt @@ -0,0 +1,2 @@ +DE:Kristallstachel +US:Crystal Spikes diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Script.c b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Script.c new file mode 100644 index 0000000..1da9bb2 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Script.c @@ -0,0 +1,105 @@ +/* Crystal Spikes */ + +#strict 2 + +public func Activate(pCaster, pRealCaster) +{ + if(pRealCaster) pCaster = pRealCaster; + Sound("Magic1"); + + // Effekt prüfen + var iResult; + if (iResult = CheckEffect("CrystallSpikesNSpell", 0, 75)) return(iResult!=-1 && RemoveObject()); + + // Dinger erzeugen + var iCount = RandomX(4,7); + var sum = 0; + + for(var i = 0; i < iCount; i++) + { + sum += PlaceCrystal(5 * (i - i/2), -5, pCaster); + } + if(!sum) return 0; + + // Fertig; Zauber entfernen + RemoveObject(); + return 1; +} + +protected func PlaceCrystal(int startx, int starty, object pCaster) +{ + var dir = 2 * GetDir(pCaster) - 1; + startx += dir * (!!Random(3) * 50 + RandomX(0, 125)); + + var solid = false; + var deltax; + for (deltax = 0; deltax < 100 && !solid; deltax += (10 * RandomX(1, 3))) + { + for (var y = 0; GetY() + y < LandscapeHeight() && !solid; y += 10) + { + if (GBackSolid(startx + dir * deltax, y)) solid = true; + } + } + var x = startx + dir * deltax; + if (!solid || GetX() + startx >= LandscapeWidth() || GetX() + startx + LandscapeWidth() < 0) return; + + var y; + solid = false; + var free = false; + var upy, downy; + for (y = starty; GetY() + y > 0 && !free; --y) + { + if (!solid) + { + if (GBackSolid(x, y)) solid = true; + } + else + { + if (!GBackSolid(x, y)) + { + free = true; + upy = ++y; + } + } + } + var down = Random(2); + if (!free || down) + { + solid = false; + free = false; + for (y = starty; GetY() + y < LandscapeWidth() && !solid; ++y) + { + if (!free) + { + if (!GBackSolid(x, y)) free = true; + } + else + { + if (GBackSolid(x, y)) + { + solid = true; + } + } + } + if (!solid) + { + if (!upy) + { + return; + } + else y = upy; + } + else + { + downy = y; + } + } + if (upy && downy && down) y = downy; + + CreateBigCrystal(x, y + 3, RandomX(50, 100), RandomX(100, 200), GetOwner()); + return 1; +} + +public func GetSpellClass(object pMage) { return(EART); } +public func GetSpellCombo(pMage) { return ("444"); } // (1: Backward; 2: Down; 3: Forward; 4: Throw; 5: Jump; 6: Dig) + diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/DefCore.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/DefCore.txt new file mode 100644 index 0000000..0b8f6bd --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/DefCore.txt @@ -0,0 +1,8 @@ +[DefCore] +id=MDFL +Name=MagicDeflection +Category=1 +Picture=0,0,64,64 +Version=4,9,5,4 +Value=32 +Components=IROC=5;IMUS=1;
\ No newline at end of file diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/DescDE.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/DescDE.txt new file mode 100644 index 0000000..e0d86c7 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/DescDE.txt @@ -0,0 +1 @@ +Wirft Objekte zurück, die den Clonk treffen würden.
\ No newline at end of file diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/DescUS.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/DescUS.txt new file mode 100644 index 0000000..c07f55a --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/DescUS.txt @@ -0,0 +1 @@ +Throws objects back, which would hit the clonk. diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Graphics.png b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Graphics.png Binary files differnew file mode 100644 index 0000000..bb77e89 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Graphics.png diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Names.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Names.txt new file mode 100644 index 0000000..35a510e --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Names.txt @@ -0,0 +1,2 @@ +DE:Zurückwerfen +US:Deflection diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Script.c b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Script.c new file mode 100644 index 0000000..b3e4179 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Script.c @@ -0,0 +1,112 @@ +/* Zurückwerfen */ + +#strict 2 + +func Activate(pCaster,pRealcaster) +{ + var pClonk=pRealcaster; + if(!pClonk) pClonk=pCaster; + + // Auswählen wenn möglich + if (pCaster->~DoSpellSelect(this,300)) return 1; + + // Clonk kann nicht auswählen: Clonk bekommst selbst ein Schild + if (SelectorTarget(pClonk)) + return ActivateTarget(pClonk, pClonk); + + // ansonsten geth nich + RemoveObject(); + return 0; +} + +public func ActivateTarget(object pCaller, object pTarget) +{ + // Effekt geben + AddEffect("DeflectionPSpell",pTarget,250,2,0,GetID()); + // Objekt löschen + return RemoveObject(); +} + +public func SelectorTarget(object pTarget) +{ + // nur außerhalb von Gebäuden + if(Contained(pTarget)) return; + // muss ein Mannschaftsmitglied sein + if(!(GetOCF(pTarget)&OCF_CrewMember)) return; + // muss verbündet sein oder NTMG muss aktiviert sein + if(Hostile(GetOwner(),GetOwner(pTarget)) && !ObjectCount(NTMG)) return; + // sichtbar + if(!Visible(GetOwner(),pTarget)) return; + // darf noch keinen Effekt haben + if(GetEffect("DeflectionPSpell", pTarget)) return; + return 1; +} + +func FxDeflectionPSpellStart(pClonk, iEffectNumber, iTemp) +{ + if(iTemp) return; + // Zeit setzen + EffectVar(0,pClonk,iEffectNumber)+=450; +} + +func FxDeflectionPSpellTimer(pClonk, iEffectNumber, iEffectTime) +{ + // Zeit um + if(!EffectVar(0,pClonk,iEffectNumber)--) return -1; + // Nicht in Gebäuden + if(Contained(pClonk)) return; + //Funken an der benötigten Stelle + for(var pObj in FindObjects(Find_OCF(OCF_HitSpeed1),Find_Layer(GetObjectLayer()), Find_NoContainer(), Find_Category(C4D_Object), Find_Distance(21, GetX(pClonk), GetY(pClonk)), Find_Not(Find_Distance(11, GetX(pClonk), GetY(pClonk))))) + { + // Wenn das Objekt auf den Clonk zufliegt + if( (GetXDir(pObj)<0) == (GetX(pObj)>GetX(pClonk)) || (GetYDir(pObj)<0) == (GetY(pObj)>GetY(pClonk))) + { + // Eigenen Stab ignorieren + if(GetEffect("StaffFlight", pObj)) + if(EffectVar(0, pObj, GetEffect("StaffFlight", pObj))==pClonk) + continue; + if(Abs(GetXDir(pObj))<5) SetXDir(GetXDir(pObj)+RandomX(-10,10), pObj); + if(Abs(GetYDir(pObj))<5) SetYDir(3, pObj); + SetSpeed(-GetXDir(pObj),-GetYDir(pObj), pObj); + CreateParticle("NoGravSpark", AbsX(GetX(pObj)), AbsY(GetY(pObj)), 0, 0, 80, RGB(80,50,50)); + if(!GetEffect("IntDeflected", pObj)) + EffectVar(0,pClonk,iEffectNumber) = Max(EffectVar(0,pClonk,iEffectNumber)-50,0); + AddEffect("IntDeflected", pObj, 1, 20); + Sound("Rip", 0, pObj); + } + } + // Partikel Kreiseffekt + if(Mod(iEffectTime,4)) return; + var iAngle = iEffectTime*10; + while(iAngle>=360) iAngle -= 360; + var px= Sin(iAngle, 15); + var py= Cos(iAngle, 15); + CreateParticle("NoGravSpark", px+GetX(pClonk), py+GetY(pClonk), 0, 0, 50, RGB(50,80,50), pClonk); + CreateParticle("NoGravSpark",-py+GetX(pClonk), px+GetY(pClonk), 0, 0, 50, RGB(50,50,80), pClonk); + CreateParticle("NoGravSpark",-px+GetX(pClonk),-py+GetY(pClonk), 0, 0, 50, RGB(50,80,50), pClonk); + CreateParticle("NoGravSpark", py+GetX(pClonk),-px+GetY(pClonk), 0, 0, 50, RGB(50,50,80), pClonk); + return 1; +} + +private func FxDeflectionPSpellEffect(string szNewEffectName, object pTarget, int iNumber) +{ + // Andere Effekte aufnehmen + if(szNewEffectName == "DeflectionPSpell") + { + if(EffectVar(0,pTarget,iNumber)>50) return -1; + return -2; + } +} + +private func FxDeflectionPSpellAdd(object pTarget, int iNumber, string szNewEffectName, int iNewEffectTimer, int iChange0, int iChange1, int iChange2, int iTime) { + // Effekt übernehmen + EffectVar(0,pTarget,iNumber) += 300; + if(EffectVar(0,pTarget,iNumber)> 600) EffectVar(0,pTarget,iNumber)=600; +} + +protected func FxDeflectionPSpellInfo() { return "{{MDFL}} $SpellInfo$"; } + +/* Zaubercombo */ + +public func GetSpellStaff() { return SMAR; } +public func GetSpellStaffCombo() { return ("56"); } // (1: Backward; 2: Down; 3: Forward; 4: Throw; 5: Jump; 6: Dig) diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/StringTblDE.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/StringTblDE.txt new file mode 100644 index 0000000..4491f18 --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/StringTblDE.txt @@ -0,0 +1 @@ +SpellInfo=Objekte werden zurückgeworfen. diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/StringTblUS.txt b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/StringTblUS.txt new file mode 100644 index 0000000..211193a --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/StringTblUS.txt @@ -0,0 +1 @@ +SpellInfo=Objects will be reflected. diff --git a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/Script.c b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/Script.c index 98f3eaf..f433017 100644 --- a/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/Script.c +++ b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Eisnadeln.c4d/Eisnadeln.c4d/Script.c @@ -1,4 +1,4 @@ -/*-- Eislanze --*/ +/*-- Ice Needle --*/ #strict static const ICNA_Speed=50; @@ -155,7 +155,7 @@ if(!Gift==1) { Sound("Hited", living); // Schaden machen - Punch(living, 12); + Punch(living, RandomX(7, 12)); if(!Frozen(living)) Freeze(living, EffectVar(4)); return(RemoveObject()); } @@ -163,7 +163,7 @@ if(Gift==1) { Sound("Hited", living); // Schaden machen - Punch(living, (10)); + Punch(living, RandomX(5, 10)); return(RemoveObject()); } } diff --git a/TemplePushing.c4s/Misc.c4d/Eliminated.wav b/TemplePushing.c4s/Misc.c4d/Eliminated.wav Binary files differnew file mode 100644 index 0000000..8bc34cd --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/Eliminated.wav diff --git a/TemplePushing.c4s/Misc.c4d/Magic1.wav b/TemplePushing.c4s/Misc.c4d/Magic1.wav Binary files differnew file mode 100644 index 0000000..560441f --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/Magic1.wav diff --git a/TemplePushing.c4s/Particles.c4d/MSpark.c4d/Graphics.png b/TemplePushing.c4s/Misc.c4d/Particles.c4d/MSpark.c4d/Graphics.png Binary files differindex dee58d8..dee58d8 100644 --- a/TemplePushing.c4s/Particles.c4d/MSpark.c4d/Graphics.png +++ b/TemplePushing.c4s/Misc.c4d/Particles.c4d/MSpark.c4d/Graphics.png diff --git a/TemplePushing.c4s/Particles.c4d/MSpark.c4d/Particle.txt b/TemplePushing.c4s/Misc.c4d/Particles.c4d/MSpark.c4d/Particle.txt index 6ea8521..6ea8521 100644 --- a/TemplePushing.c4s/Particles.c4d/MSpark.c4d/Particle.txt +++ b/TemplePushing.c4s/Misc.c4d/Particles.c4d/MSpark.c4d/Particle.txt diff --git a/TemplePushing.c4s/Particles.c4d/PSpark.c4d/Graphics.png b/TemplePushing.c4s/Misc.c4d/Particles.c4d/PSpark.c4d/Graphics.png Binary files differindex 4d145c7..4d145c7 100644 --- a/TemplePushing.c4s/Particles.c4d/PSpark.c4d/Graphics.png +++ b/TemplePushing.c4s/Misc.c4d/Particles.c4d/PSpark.c4d/Graphics.png diff --git a/TemplePushing.c4s/Particles.c4d/PSpark.c4d/Particle.txt b/TemplePushing.c4s/Misc.c4d/Particles.c4d/PSpark.c4d/Particle.txt index e40a06e..e40a06e 100644 --- a/TemplePushing.c4s/Particles.c4d/PSpark.c4d/Particle.txt +++ b/TemplePushing.c4s/Misc.c4d/Particles.c4d/PSpark.c4d/Particle.txt diff --git a/TemplePushing.c4s/Misc.c4d/SetupMenu.c4d/StringTblUS.txt b/TemplePushing.c4s/Misc.c4d/SetupMenu.c4d/StringTblUS.txt index fc24d29..a8c53bb 100644 --- a/TemplePushing.c4s/Misc.c4d/SetupMenu.c4d/StringTblUS.txt +++ b/TemplePushing.c4s/Misc.c4d/SetupMenu.c4d/StringTblUS.txt @@ -2,7 +2,7 @@ ModeClassic=<c e6b800>Classic</c> ModeMagic=<c 4700b2>Magical</c> ModeKnightly=<c 99ff66>Medieval</c> ModeApocalyptic=<c b20000>Apocalyptical</c> -ModeFestive=<c f0ffff >Winterly</c> +ModeFestive=<c f0ffff>Winterly</c> Back=Back Done=Done Relaunches=Relaunches diff --git a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/DefCore.txt b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/DefCore.txt index 468365a..b4a5913 100644 --- a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/DefCore.txt +++ b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/DefCore.txt @@ -10,7 +10,7 @@ Vertices=4 VertexX=2,-2,-2,2 VertexY=2,-2,2,-2 VertexFriction=100,100,100,100 -Mass=20 +Mass=22 Components=IICE=2 Picture=6,0,32,32 Collectible=1 diff --git a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/DescDE.txt b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/DescDE.txt index c369562..c369562 100644 --- a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/DescDE.txt +++ b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/DescDE.txt diff --git a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/DescUS.txt b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/DescUS.txt index 81f5b9f..81f5b9f 100644 --- a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/DescUS.txt +++ b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/DescUS.txt diff --git a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/Graphics.png b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/Graphics.png Binary files differindex 431e6ff..431e6ff 100644 --- a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/Graphics.png +++ b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/Graphics.png diff --git a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/Names.txt b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/Names.txt index cc0cd4f..cc0cd4f 100644 --- a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/Names.txt +++ b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/Names.txt diff --git a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/Script.c b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/Script.c index 6fef017..f5bf91b 100644 --- a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/Script.c +++ b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/Script.c @@ -9,5 +9,4 @@ protected func Departure(object container) { // Throw only if the container was a clonk if (!(container->GetOCF() & OCF_CrewMember)) return 1; - return _inherited(container); } diff --git a/TemplePushing.c4s/Misc.c4d/Symbols.c4d/Teams.c4d/Graphics.png b/TemplePushing.c4s/Misc.c4d/Symbols.c4d/Teams.c4d/Graphics.png Binary files differindex bcce561..08ecd5a 100644 --- a/TemplePushing.c4s/Misc.c4d/Symbols.c4d/Teams.c4d/Graphics.png +++ b/TemplePushing.c4s/Misc.c4d/Symbols.c4d/Teams.c4d/Graphics.png diff --git a/TemplePushing.c4s/Misc.c4d/Trumpet.wav b/TemplePushing.c4s/Misc.c4d/Trumpet.wav Binary files differnew file mode 100644 index 0000000..8d8f8bd --- /dev/null +++ b/TemplePushing.c4s/Misc.c4d/Trumpet.wav diff --git a/TemplePushing.c4s/Modes.c4d/ApocalypticPushing.c4d/DefCore.txt b/TemplePushing.c4s/Modes.c4d/ApocalypticPushing.c4d/DefCore.txt index dc029af..a0a887c 100644 --- a/TemplePushing.c4s/Modes.c4d/ApocalypticPushing.c4d/DefCore.txt +++ b/TemplePushing.c4s/Modes.c4d/ApocalypticPushing.c4d/DefCore.txt @@ -2,7 +2,7 @@ id=APCE Name=Apocalypse Version=4,9,5 -Category=C4D_StaticBack|C4D_Rule +Category=C4D_StaticBack Width=1 Height=1 -Picture=0,0,64,64
\ No newline at end of file +Picture=0,0,64,64 diff --git a/TemplePushing.c4s/Modes.c4d/ApocalypticPushing.c4d/Names.txt b/TemplePushing.c4s/Modes.c4d/ApocalypticPushing.c4d/Names.txt index d5f8556..b613241 100644 --- a/TemplePushing.c4s/Modes.c4d/ApocalypticPushing.c4d/Names.txt +++ b/TemplePushing.c4s/Modes.c4d/ApocalypticPushing.c4d/Names.txt @@ -1,2 +1,2 @@ -DE:Apokalypse -US:Apocalypse
\ No newline at end of file +DE:Apokalyptisches Schubsen +US:Apocalyptic Pushing diff --git a/TemplePushing.c4s/Modes.c4d/ClassicPushing.c4d/DefCore.txt b/TemplePushing.c4s/Modes.c4d/ClassicPushing.c4d/DefCore.txt index a522ab5..1d170de 100644 --- a/TemplePushing.c4s/Modes.c4d/ClassicPushing.c4d/DefCore.txt +++ b/TemplePushing.c4s/Modes.c4d/ClassicPushing.c4d/DefCore.txt @@ -2,7 +2,7 @@ id=CLSC Name=Classic Version=4,9,5 -Category=C4D_StaticBack|C4D_Rule +Category=C4D_StaticBack Width=1 Height=1 Picture=0,0,64,64 diff --git a/TemplePushing.c4s/Modes.c4d/ClassicPushing.c4d/Names.txt b/TemplePushing.c4s/Modes.c4d/ClassicPushing.c4d/Names.txt index b51e7b6..9c4bb35 100644 --- a/TemplePushing.c4s/Modes.c4d/ClassicPushing.c4d/Names.txt +++ b/TemplePushing.c4s/Modes.c4d/ClassicPushing.c4d/Names.txt @@ -1,2 +1,2 @@ -DE:Klassisch -US:Classic +DE:Klassisches Schubsen +US:Classic Pushing diff --git a/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/Names.txt b/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/Names.txt deleted file mode 100644 index 7ceb54b..0000000 --- a/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/Names.txt +++ /dev/null @@ -1,2 +0,0 @@ -DE:Ritterliches Schubsen -US:Knightly Pushing diff --git a/TemplePushing.c4s/Modes.c4d/MagicalPushing.c4d/Names.txt b/TemplePushing.c4s/Modes.c4d/MagicalPushing.c4d/Names.txt index 8e9cb1f..120731b 100644 --- a/TemplePushing.c4s/Modes.c4d/MagicalPushing.c4d/Names.txt +++ b/TemplePushing.c4s/Modes.c4d/MagicalPushing.c4d/Names.txt @@ -1,2 +1,2 @@ DE:Magisches Schubsen -US:Magical Push +US:Magical Pushing diff --git a/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/DefCore.txt b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/DefCore.txt index a25e551..a25e551 100644 --- a/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/DefCore.txt +++ b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/DefCore.txt diff --git a/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/DescDE.txt b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/DescDE.txt index cb214af..cb214af 100644 --- a/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/DescDE.txt +++ b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/DescDE.txt diff --git a/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/DescUS.txt b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/DescUS.txt index 1d780af..1d780af 100644 --- a/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/DescUS.txt +++ b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/DescUS.txt diff --git a/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/Graphics.png b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/Graphics.png Binary files differindex dbcf80d..dbcf80d 100644 --- a/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/Graphics.png +++ b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/Graphics.png diff --git a/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/Names.txt b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/Names.txt new file mode 100644 index 0000000..2d301de --- /dev/null +++ b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/Names.txt @@ -0,0 +1,2 @@ +DE:Mittelalterliches Schubsen +US:Medieval Pushing diff --git a/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/Script.c b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/Script.c index d7bff28..8f9e261 100644 --- a/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/Script.c +++ b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/Script.c @@ -1,4 +1,4 @@ -/*-- Knightly --*/ +/*-- Medieval --*/ #strict 2 diff --git a/TemplePushing.c4s/Particles.c4d/Names.txt b/TemplePushing.c4s/Particles.c4d/Names.txt deleted file mode 100644 index 496790c..0000000 --- a/TemplePushing.c4s/Particles.c4d/Names.txt +++ /dev/null @@ -1,2 +0,0 @@ -DE:Neuer Objektordner -US:New object folder diff --git a/TemplePushing.c4s/Rules.c4d/OutFader.c4d/Script.c b/TemplePushing.c4s/Rules.c4d/OutFader.c4d/Script.c index 9bd1dea..f5906f0 100644 --- a/TemplePushing.c4s/Rules.c4d/OutFader.c4d/Script.c +++ b/TemplePushing.c4s/Rules.c4d/OutFader.c4d/Script.c @@ -16,27 +16,27 @@ func Fading(iPlr) if (GetAction(obj)=="Idle") { // Object owned by anyone? - if (GetOwner(obj)==-1) FadeOut(obj,2); + if (GetOwner(obj)== -1) FadeOut(obj,2); else FadeOut(obj,3); } - else if (GetAction(obj)=="Dead" && !GetAlive()) + else if (!GetAlive(obj)) { - if (GetOwner(obj)==-1) FadeOut(obj,1); + if (GetOwner(obj)== -1) FadeOut(obj,1); else FadeOut(obj,5); } else if (GetAction(obj)=="Be") { - if (GetOwner(obj)==-1) FadeOut(obj,2); + if (GetOwner(obj)== -1) FadeOut(obj,2); else FadeOut(obj,3); } else if (GetAction(obj)=="None") { - if (GetOwner(obj)==-1) FadeOut(obj,1); - else FadeOut(obj,1); + if (GetOwner(obj)== -1) FadeOut(obj,2); + else FadeOut(obj,3); } else if (GetAction(obj)=="Exist") { - if (GetOwner(obj)==-1) FadeOut(obj,2); + if (GetOwner(obj)== -1) FadeOut(obj,2); else FadeOut(obj,3); } } diff --git a/TemplePushing.c4s/Scenario.txt b/TemplePushing.c4s/Scenario.txt index 20a56d9..716b10b 100644 --- a/TemplePushing.c4s/Scenario.txt +++ b/TemplePushing.c4s/Scenario.txt @@ -1,7 +1,8 @@ [Head]
Icon=27
-Title=Temple Pushing r0.8b
+Title=Temple Pushing r0.921
MaxPlayer=8
+MaxPlayerLeague=12
[Definitions]
Definition1=Objects.c4d
@@ -11,8 +12,6 @@ Definition4=Western.c4d\Magic.c4d\Flint.c4d Definition5=Worlds.c4f\FoggyCliffs.c4s\Fog.c4d
Definition6=Worlds.c4f\Desert.c4s\Lenseflare.c4d
Definition7=Worlds.c4f\Desert.c4s\Sonne.c4d
-Definition8=Western.c4f\Misc.c4d\Waterfall.c4d
-Definition9=Western.c4f\Misc.c4d\Lavafall.c4d
Definition10=Western.c4d\Magic.c4d\Plague.c4d
[Game]
@@ -24,7 +23,7 @@ BottomOpen=1 Gravity=83
[Weather]
-Climate=0,0,0,0
+Climate=100,100,100,100
[Player1]
Crew=CLNK=1
diff --git a/TemplePushing.c4s/Script.c b/TemplePushing.c4s/Script.c index 488b606..9c39a8d 100644 --- a/TemplePushing.c4s/Script.c +++ b/TemplePushing.c4s/Script.c @@ -5,10 +5,10 @@ static const MODE_Classic = 0, MODE_Magic = 1, MODE_Festive = 2, MODE_Apocalyptic = 3, MODE_Knightly = 4; static const SBRD_FirstRow = 0; -static const SBRD_NameCol = 0, SBRD_RelaunchesCol = 1, SBRD_ScoreCol = 2; -static const SORT_NAMECOL_Title = 0, SORT_NAMECOL_Team = 1, SORT_NAMECOL_Player = 2, SORT_NAMECOL_Leaver = 3; +static const SBRD_TeamSortCol = -3, SBRD_SortCol = -2, SBRD_NameCol = -1, SBRD_RelaunchesCol = 0, SBRD_ScoreCol = 1; +static const SORT_SORTCOL_Team = 0, SORT_SORTCOL_Player = 1, SORT_SORTCOL_Leaver = 2; -static const MaxTeamCount = 2; +static const MaxTeamCount = 3; static section, mode; static numRelaunches; @@ -17,11 +17,13 @@ static playerDeaths, playerScore, teamScore; static ambienceEnabled; static suddendeathEnabled; static loadingSection; +static eliminatedPlayers; static gameStartMessage, countdown, gameStarted, gameOver; func Initialize() { ShowLobby(); + eliminatedPlayers = []; // Create Thrones for recreational purposes CreateObject(THRN, 590, 420, NO_OWNER); @@ -39,8 +41,14 @@ func Initialize() menu->LocalN("extinguisherEnabled") = true; menu->LocalN("rotateInJumpEnabled") = true; menu->LocalN("numRelaunches") = 10; - menu->LocalN("deathmatchWinScore") = 20; - menu->LocalN("ambienceEnabled") = true; + menu->LocalN("deathmatchWinScore") = 15; + menu->LocalN("ambienceEnabled") = !GetLeague(); + + // Modulate endscreen + SetNextMission("TemplePushing.c4s", "Rematch", "$Rematch$"); + + // Set possible spells + SetScrollSpells([ABLA, MBOT, MFRB, MDBT, GVTY, MLGT, CFAL, MSSH, MINV, MARK, MFWV, MGFL, LAVS, MGPL, ICNL, MDFL, AFST, MGCY, MATT]); ScriptGo(true); } @@ -62,10 +70,13 @@ func InitializePlayer(int player) var team = GetPlayerTeam(player); if (team) { - SetScoreboardData(TeamRow(team), SBRD_NameCol, Format("<c %x>Team %s</c>", GetTeamColor(team), GetTeamName(team)), SORT_NAMECOL_Team); + SetScoreboardData(TeamRow(team), SBRD_NameCol, Format("<c %x>Team %s</c>", GetTeamColor(team), GetTeamName(team))); + SetScoreboardData(TeamRow(team), SBRD_SortCol, " ", SORT_SORTCOL_Team); } } - SetScoreboardData(PlayerRow(player), SBRD_NameCol, GetTaggedPlayerName(player), SORT_NAMECOL_Player); + SetScoreboardData(PlayerRow(player), SBRD_NameCol, GetTaggedPlayerName(player)); + SetScoreboardData(PlayerRow(player), SBRD_SortCol, " ", SORT_SORTCOL_Player); + SetScoreboardData(PlayerRow(player), SBRD_TeamSortCol, " ", GetPlayerTeam(player)); UpdateScoreboard(player); LaunchClonk(player, GetCrew(player)); } @@ -78,6 +89,8 @@ func RemovePlayer(int player) if (!LobbyActive() && (!deathmatchEnabled && GetRelaunchesLeft(player) >= 0 || deathmatchEnabled && !gameOver)) { UpdateScoreboard(player, true); + eliminatedPlayers[GetPlayerID(player)] = true; + CheckGameOver(); } } @@ -123,7 +136,8 @@ func UpdateScoreboard(int player, bool leaver) { text = "{{SLVR}}"; // Move leaver to the bottom of the list - SetScoreboardData(PlayerRow(player), SBRD_NameCol, GetTaggedPlayerName(player), SORT_NAMECOL_Leaver); + SetScoreboardData(PlayerRow(player), SBRD_NameCol, GetTaggedPlayerName(player)); + SetScoreboardData(PlayerRow(player), SBRD_SortCol, " ", SORT_SORTCOL_Leaver); } else text = Format("%d", playerScore[playerID]); @@ -131,9 +145,10 @@ func UpdateScoreboard(int player, bool leaver) SetScoreboardData(PlayerRow(player), SBRD_ScoreCol, text, playerScore[playerID]); // Sort rows + SortScoreboard(SBRD_TeamSortCol); SortScoreboard(SBRD_ScoreCol, true); if (!deathmatchEnabled) SortScoreboard(SBRD_RelaunchesCol, true); - SortScoreboard(SBRD_NameCol); + SortScoreboard(SBRD_SortCol); } func ShowLobby() @@ -162,6 +177,15 @@ func StartGame(object menu, string message) Log("After LoadScenarioSection()"); loadingSection = false; section = CreateObject(sectionID, 0, 0, NO_OWNER); + + // Play ambience sounds + if (ambienceEnabled) + { + for(var sound in section->SectionAmbienceSounds()) + { + SoundLevel(sound[0], sound[1]); + } + } // Create spawnpoints if (mode != MODE_Apocalyptic) @@ -173,22 +197,23 @@ func StartGame(object menu, string message) if (mode == MODE_Classic) { - spawnPointSpawner->SetDefinitions([[ROCK, 7], [SCRL, 5], [FLNT, 7], [SFLN, 9], [STFN, 3], [EFLN, 5], [FBMP, 4], [ARWP, 4]]); - spawnPointSpawner->SetSpawnInterval(900); + spawnPointSpawner->SetDefinitions([[ROCK, 5], [SCRL, 5], [FLNT, 4], [SFLN, 9], [STFN, 3], [EFLN, 5], [FBMP, 4]]); + spawnPointSpawner->SetSpawnInterval(800); } if (mode == MODE_Festive) { - spawnPointSpawner->SetDefinitions([[TSWB, 10], [SCRL, 5]]); + spawnPointSpawner->SetDefinitions([[TSWB, 7], [SCRL, 5], [ICE1, 3]]); spawnPointSpawner->SetSpawnInterval(600); } if (mode == MODE_Knightly) { spawnPointSpawner->SetDefinitions([[SFLN, 3], [EFLN,3], [SWOR, 5], [AXE1, 5], [SPER, 2], [ARWP, 5], [SCRL, 5], [FARP, 3]]); - spawnPointSpawner->SetSpawnInterval(1000); + spawnPointSpawner->SetSpawnInterval(800); } if (mode == MODE_Magic) { - spawnPointSpawner->SetDefinitions([[SCRL, 14], [GBLT, 1]]); + if (suddendeathEnabled) spawnPointSpawner->SetDefinitions([[SCRL, 19]]); + else spawnPointSpawner->SetDefinitions([[SCRL, 19], [GBLT, 1]]); spawnPointSpawner->SetSpawnInterval(750); spawnPointSpawner->SetSpawnpointGamma(RGB(5, 5, 10), RGB(80, 80, 150), RGB(200, 200, 255)); } @@ -210,6 +235,7 @@ func StartGame(object menu, string message) if (ambienceEnabled) CreateObject(SNOR, 0, 0, NO_OWNER); SetSkyAdjust(RGB(189, 189, 255)); SetGamma(RGB(0, 0, 50), RGB(100, 100, 128), RGB(200, 200, 255)); + SetScrollSpells([MICS, ABLA, MFWV, MLGT, MGPL, ICNL, AFST, MDFL, MGCY, MATT]); } // Create melee goal @@ -243,14 +269,15 @@ func StartGame(object menu, string message) CreateObject(APCE, 0, 0, NO_OWNER); } - SetScoreboardData(SBRD_Caption, SBRD_NameCol, " ", SORT_NAMECOL_Title); // Make sure the name column gets created first + SetScoreboardData(SBRD_Caption, SBRD_NameCol, " "); // Make sure the name column gets created first // Deathmatch? if (deathmatchEnabled) { Log("Creating deathmatch rule"); CreateObject(DTHM, 0, 0, NO_OWNER); - SetScoreboardData(SBRD_FirstRow, SBRD_NameCol, "$WinScore$", SORT_NAMECOL_Title); + SetScoreboardData(SBRD_FirstRow, SBRD_NameCol, "$WinScore$"); + SetScoreboardData(SBRD_FirstRow, SBRD_SortCol, " "); SetScoreboardData(SBRD_FirstRow, SBRD_ScoreCol, Format("%d $Kills$", deathmatchWinScore)); } else @@ -317,8 +344,49 @@ func ShowCountdown() func LobbyActive() { return !section; } +global func GetActiveTeamCount() +{ + var teams = []; + for(var i = 0; i < GetPlayerCount(); i++) + { + if(!eliminatedPlayers[GetPlayerID(GetPlayerByIndex(i))]) + { + ++teams[GetPlayerTeam(GetPlayerByIndex(i))]; + } + } + + teams[-1] = 0; + var count = 0; + for(var teamCount in teams) + { + if(teamCount > 0) + { + ++count; + } + } + return count; +} + +global func EliminatePlayer(int iPlr, bool fQuiet) +{ + var ret = _inherited(iPlr, fQuiet); + eliminatedPlayers[GetPlayerID(iPlr)] = true; + + // Check if the game is over + CheckGameOver(); + return ret; +} + +global func CheckGameOver() +{ + if (GetActiveTeamCount() <= 1) StartGameOverEffect(); +} + func HandleKill(int killed, int killer) { + // Check if the game is over + if (GetEffectCount("GameOver")) return 0; + // Assume suicide if killer cannot be determined if (killer == NO_OWNER) killer = killed; @@ -409,6 +477,45 @@ func HandleKill(int killed, int killer) return killedEliminated; } +func OnGoalsFulfilled() +{ + // Safety only, GameOver-Effect should have already started + CheckGameOver(); + return 1; +} + +global func StartGameOverEffect() +{ + if (!GetEffect("GameOver")) AddEffect("GameOver", 0, 1, 1); +} + +global func FxGameOverStart(object pTarget, int iEffectNumber) +{ + EffectVar(0, pTarget, iEffectNumber) = section->SectionAmbienceSounds(); +} + +global func FxGameOverTimer(object pTarget, int iEffectNumber, int iEffectTime) +{ + var sounds = EffectVar(0, pTarget, iEffectNumber); + if (iEffectTime <= 100 && ambienceEnabled) + { + for(var sound in sounds) + { + SoundLevel(sound[0], sound[1]*(100 - iEffectTime)/100); + } + } + else if((iEffectTime > 200) || (iEffectTime > 100 && !ambienceEnabled)) + { + return -1; + } +} + +global func FxGameOverStop(object pTarget, int iEffectNumber) +{ + Sound("Trumpet", 1); + GameOver(); +} + func GetPlayers() { var players = CreateArray(GetPlayerCount()); @@ -455,7 +562,7 @@ func LaunchClonk(int player, object clonk, bool relaunch) // Move clonk to random position - var NumCheckPos = 10; + var NumCheckPos = 25; var positions = CreateArray(NumCheckPos); for (var i = 0; i < NumCheckPos; ++i) @@ -488,7 +595,7 @@ func LaunchClonk(int player, object clonk, bool relaunch) clonk->SetCrewEnabled(false); } - // No corpses in apocalopyse mode + // No corpses in apocalypse mode if (mode == MODE_Apocalyptic) clonk->LocalN("removeOnDeath") = true; // Enable rotation in jump for the clonk if allowed by rule @@ -502,12 +609,14 @@ func LaunchClonk(int player, object clonk, bool relaunch) clonk->Schedule("SelectCrew(GetOwner(), this, true)", 20); } + // Respawn effects PlayerMessage(player, "{{SREL}}", clonk); DrawParticleLine("PSpark", GetX(clonk), 0, GetX(clonk), GetY(clonk), 10, 150, RGBa(Random(255), Random(255), Random(255),50), RGBa(Random(255), Random(255), Random(255),50), 0); DrawParticleLine("PSpark", GetX(clonk) + RandomX(5, 60), 0, GetX(clonk), GetY(clonk), 10, 150, RGBa(Random(255), Random(255), Random(255),50), RGBa(Random(255), Random(255), Random(255),50), 0); DrawParticleLine("PSpark", GetX(clonk) - RandomX(5, 60), 0, GetX(clonk), GetY(clonk), 10, 150, RGBa(Random(255), Random(255), Random(255),50), RGBa(Random(255), Random(255), Random(255),50), 0); Sound("PlayerJoin", 0, clonk, 100); CastParticles("MSpark", 50, 20, GetX(clonk), GetY(clonk), 50, 75, RGBa(128,128,255,0), RGBa(255,255,255,127)); + SetPlrView(player, clonk); ResetHealth(clonk); } @@ -524,7 +633,7 @@ func ResetHealth(object clonk) } } -func CheckDeathmatchKillCount() +func CheckGameStatus() { if (GetTeamCount() == 0) { @@ -577,4 +686,4 @@ func CheckDeathmatchKillCount() } } } -}
\ No newline at end of file +} diff --git a/TemplePushing.c4s/SectClassic.c4g/Map.bmp b/TemplePushing.c4s/SectClassic.c4g/Map.bmp Binary files differindex 3f5e325..33fd91a 100644 --- a/TemplePushing.c4s/SectClassic.c4g/Map.bmp +++ b/TemplePushing.c4s/SectClassic.c4g/Map.bmp diff --git a/TemplePushing.c4s/SectClassic.c4g/Scenarios.txt b/TemplePushing.c4s/SectClassic.c4g/Scenarios.txt index 45f9492..a5f1397 100644 --- a/TemplePushing.c4s/SectClassic.c4g/Scenarios.txt +++ b/TemplePushing.c4s/SectClassic.c4g/Scenarios.txt @@ -15,11 +15,8 @@ Gravity=83,0,10,200 SkyScrollMode=2 [Weather] -Climate=0,0,0,0 +Climate=100,100,100,100 YearSpeed=20,10,0,100 Wind=0,100,-100,100 Lightning=28,0,0,100 -[Disasters] -Meteorite=100,0,0,100 -Earthquake=28,0,0,100 diff --git a/TemplePushing.c4s/SectCloudTemple.c4g/Map.bmp b/TemplePushing.c4s/SectCloudTemple.c4g/Map.bmp Binary files differindex ba8a1d2..c5158a1 100644 --- a/TemplePushing.c4s/SectCloudTemple.c4g/Map.bmp +++ b/TemplePushing.c4s/SectCloudTemple.c4g/Map.bmp diff --git a/TemplePushing.c4s/SectCloudTemple.c4g/Scenario.txt b/TemplePushing.c4s/SectCloudTemple.c4g/Scenario.txt index c1af59a..cef39c0 100644 --- a/TemplePushing.c4s/SectCloudTemple.c4g/Scenario.txt +++ b/TemplePushing.c4s/SectCloudTemple.c4g/Scenario.txt @@ -19,11 +19,7 @@ SkyScrollMode=2 FoWColor=13158600 [Weather] -Climate=100,0,0,100 +Climate=100,100,100,100 YearSpeed=20,10,0,100 Wind=0,0,0,0 Lightning=0,0,0,0 - -[Disasters] -Meteorite=100,0,0,100 -Earthquake=0,0,0,0 diff --git a/TemplePushing.c4s/SectLiquidTemple.c4g/Scenario.txt b/TemplePushing.c4s/SectLiquidTemple.c4g/Scenario.txt index 392b6d2..379a109 100644 --- a/TemplePushing.c4s/SectLiquidTemple.c4g/Scenario.txt +++ b/TemplePushing.c4s/SectLiquidTemple.c4g/Scenario.txt @@ -16,11 +16,7 @@ Gravity=83,0,10,200 SkyScrollMode=2 [Weather] -Climate=100,0,0,100 +Climate=100,100,100,100 YearSpeed=20,10,0,100 Wind=0,100,-100,100 Lightning=0,0,0,0 - -[Disasters] -Meteorite=100,0,0,100 -Earthquake=0,0,0,0 diff --git a/TemplePushing.c4s/SectLobby.c4g/Scenario.txt b/TemplePushing.c4s/SectLobby.c4g/Scenario.txt index f7321eb..e07c910 100644 --- a/TemplePushing.c4s/SectLobby.c4g/Scenario.txt +++ b/TemplePushing.c4s/SectLobby.c4g/Scenario.txt @@ -16,7 +16,7 @@ Gravity=83,0,10,200 SkyScrollMode=2 [Weather] -Climate=0,0,0,0 +Climate=100,100,100,100 [Player1] Crew=CLNK=1 diff --git a/TemplePushing.c4s/Sections.c4d/Ambience.ogg b/TemplePushing.c4s/Sections.c4d/Ambience.ogg Binary files differnew file mode 100644 index 0000000..1f2bb70 --- /dev/null +++ b/TemplePushing.c4s/Sections.c4d/Ambience.ogg diff --git a/TemplePushing.c4s/Sections.c4d/Ambience.wav b/TemplePushing.c4s/Sections.c4d/Ambience.wav Binary files differdeleted file mode 100644 index de426a5..0000000 --- a/TemplePushing.c4s/Sections.c4d/Ambience.wav +++ /dev/null diff --git a/TemplePushing.c4s/Sections.c4d/CloudAmbience.ogg b/TemplePushing.c4s/Sections.c4d/CloudAmbience.ogg Binary files differnew file mode 100644 index 0000000..b6e01a6 --- /dev/null +++ b/TemplePushing.c4s/Sections.c4d/CloudAmbience.ogg diff --git a/TemplePushing.c4s/Sections.c4d/CloudAmbience.wav b/TemplePushing.c4s/Sections.c4d/CloudAmbience.wav Binary files differdeleted file mode 100644 index 43f270a..0000000 --- a/TemplePushing.c4s/Sections.c4d/CloudAmbience.wav +++ /dev/null diff --git a/TemplePushing.c4s/Sections.c4d/ExtremeAmbience.ogg b/TemplePushing.c4s/Sections.c4d/ExtremeAmbience.ogg Binary files differnew file mode 100644 index 0000000..15275e0 --- /dev/null +++ b/TemplePushing.c4s/Sections.c4d/ExtremeAmbience.ogg diff --git a/TemplePushing.c4s/Sections.c4d/ExtremeAmbience.wav b/TemplePushing.c4s/Sections.c4d/ExtremeAmbience.wav Binary files differdeleted file mode 100644 index 4861190..0000000 --- a/TemplePushing.c4s/Sections.c4d/ExtremeAmbience.wav +++ /dev/null diff --git a/TemplePushing.c4s/Sections.c4d/FestiveAmbience.ogg b/TemplePushing.c4s/Sections.c4d/FestiveAmbience.ogg Binary files differnew file mode 100644 index 0000000..40438f7 --- /dev/null +++ b/TemplePushing.c4s/Sections.c4d/FestiveAmbience.ogg diff --git a/TemplePushing.c4s/Sections.c4d/FestiveAmbience.wav b/TemplePushing.c4s/Sections.c4d/FestiveAmbience.wav Binary files differdeleted file mode 100644 index 7b8ca6b..0000000 --- a/TemplePushing.c4s/Sections.c4d/FestiveAmbience.wav +++ /dev/null diff --git a/TemplePushing.c4s/Sections.c4d/LiquidAmbience.ogg b/TemplePushing.c4s/Sections.c4d/LiquidAmbience.ogg Binary files differnew file mode 100644 index 0000000..f8dd22c --- /dev/null +++ b/TemplePushing.c4s/Sections.c4d/LiquidAmbience.ogg diff --git a/TemplePushing.c4s/Sections.c4d/LiquidAmbience.wav b/TemplePushing.c4s/Sections.c4d/LiquidAmbience.wav Binary files differdeleted file mode 100644 index e601b3e..0000000 --- a/TemplePushing.c4s/Sections.c4d/LiquidAmbience.wav +++ /dev/null diff --git a/TemplePushing.c4s/Sections.c4d/SectClassic.c4d/Script.c b/TemplePushing.c4s/Sections.c4d/SectClassic.c4d/Script.c index cbf4f40..ed67274 100644 --- a/TemplePushing.c4s/Sections.c4d/SectClassic.c4d/Script.c +++ b/TemplePushing.c4s/Sections.c4d/SectClassic.c4d/Script.c @@ -5,18 +5,15 @@ public func SectionName() { return "Classic"; } public func SpawnpointLocations() { return [[550, 282], [603, 205], [682, 282], [784, 227], [912, 168], [1040, 120], - [648, 460], [432, 438], [170, 118], [299, 170], [441, 230], [1175, 290], [105, 380], [910, 400], [560, 610]]; } + [648, 460], [432, 438], [170, 118], [299, 170], [441, 230], [1170, 290], [105, 375], [910, 400], [560, 610], [1040, 530], [300, 530], [780, 530], [1040, 400]]; } protected func Initialize() { // Moving bricks - var bricks = [CreateObject(BRK2, 225, 150, NO_OWNER), CreateObject(BRK2, 985, 150, NO_OWNER)]; + var bricks = [CreateObject(BRK2, 240, 150, NO_OWNER), CreateObject(BRK2, 970, 150, NO_OWNER)]; if (ambienceEnabled) - { - // Background Sound - if (mode != MODE_Apocalyptic && mode != MODE_Festive) SoundLevel("Ambience", 70); - + { // Fog for (var i; i < 300; ++i) { @@ -43,9 +40,6 @@ protected func Initialize() AddEffect("FireRain", 0, 20, 1); CreateObject(FRRN, 0, 0, NO_OWNER); - // Background sound - SoundLevel("ExtremeAmbience", 100); - // Modulate brick color (object + material) for (var brick in bricks) { @@ -56,15 +50,21 @@ protected func Initialize() } if (mode == MODE_Festive) - { - // Chilly ambience - if (ambienceEnabled) SoundLevel("FestiveAmbience", 60); - + { // Modulate brick color (object + material) for (var brick in bricks) { - brick->SetClrModulation(RGB(189, 243, 255)); + brick->SetClrModulation(RGBa(125, 200, 255, 30)); } - SetMaterialColor(Material("Brick"), 100, 100, 230, 150, 150, 255, 30, 30, 50); + + // Modulate material colour + SetMatAdjust(RGBa(125, 200, 255, 30)); } +} + +public func SectionAmbienceSounds() +{ + if (mode == MODE_Festive) return [["FestiveAmbience.ogg", 25]]; + else if (mode == MODE_Apocalyptic) return [["ExtremeAmbience.ogg", 75]]; + else return [["Ambience.ogg", 50], ["Rain.ogg", 75]]; }
\ No newline at end of file diff --git a/TemplePushing.c4s/Sections.c4d/SectCloudTemple.c4d/Fog3.c4d/Particle.txt b/TemplePushing.c4s/Sections.c4d/SectCloudTemple.c4d/Fog3.c4d/Particle.txt index 146bc0b..b2a1315 100644 --- a/TemplePushing.c4s/Sections.c4d/SectCloudTemple.c4d/Fog3.c4d/Particle.txt +++ b/TemplePushing.c4s/Sections.c4d/SectCloudTemple.c4d/Fog3.c4d/Particle.txt @@ -1,6 +1,6 @@ [Particle] Name=Fog3 -MaxCount=500 +MaxCount=300 InitFn=StdInit ExecFn=StdExec DrawFn=Std diff --git a/TemplePushing.c4s/Sections.c4d/SectCloudTemple.c4d/Script.c b/TemplePushing.c4s/Sections.c4d/SectCloudTemple.c4d/Script.c index b2f1c25..ead2b17 100644 --- a/TemplePushing.c4s/Sections.c4d/SectCloudTemple.c4d/Script.c +++ b/TemplePushing.c4s/Sections.c4d/SectCloudTemple.c4d/Script.c @@ -4,35 +4,36 @@ public func SectionName() { return "CloudTemple"; } -public func SpawnpointLocations() { return [[70, 100], [140, 310], [1105, 310], [431, 443], [830, 160], [420, 160], [300, 90], [230, 440], [320, 310], [530, 90], [625, 160],[720, 90], [930, 310], [820, 440], [950, 90], [1180, 100]]; } +public func SpawnpointLocations() { return [[70, 100], [140, 310], [1105, 310], [431, 443], [830, 160], [420, 160], [300, 90], [230, 440], [320, 310], [530, 90], [625, 160],[720, 90], [930, 310], [820, 440], [950, 90], [1180, 100], [1020, 440]]; } protected func Initialize() { Music(); - // Create "Clouds" - for (var i; i < 100; ++i) + if (ambienceEnabled) { - if (mode == MODE_Apocalyptic) - { - CreateParticle("Fog3", Random(LandscapeWidth()), RandomX(570, 700) -10, 0, 0, RandomX(1250, 2000), RGB(255,0,0)); - } - else + // Create "Clouds" + for (var i; i < 80; ++i) { - CreateParticle("Fog3", Random(LandscapeWidth()), RandomX(570, 700) -10, 0, 0, RandomX(1250, 2000)); + if (mode == MODE_Apocalyptic) + { + CreateParticle("Fog3", Random(LandscapeWidth()), RandomX(570, 700) -10, 0, 0, RandomX(1250, 2000), RGB(255,0,0)); + } + else + { + CreateParticle("Fog3", Random(LandscapeWidth()), RandomX(570, 700) -10, 0, 0, RandomX(1250, 2000)); + } } - } - - if (ambienceEnabled) - { - // Create background sound - if (mode != MODE_Apocalyptic && mode != MODE_Festive) SoundLevel("CloudAmbience", 50); // Create sun and lenseflare CreateObject(SONE, 0, 0, NO_OWNER); CreateObject(LENS, 0, 0, NO_OWNER); + + // Create crystals + CreateObject(BCRY, LandscapeWidth()/2, 171, NO_OWNER); + // CreateObject(BCRS, 100, 100, NO_OWNER); } - + if (mode == MODE_Apocalyptic) { // Rock fall @@ -45,20 +46,27 @@ protected func Initialize() AddEffect("FireRain", 0, 20, 1); CreateObject(FRRN, 0, 0, NO_OWNER); - // Background sound - SoundLevel("ExtremeAmbience", 100); - // Modulate brick and crystal colour SetMaterialColor(Material("Brick"), 100, 0, 0, 150, 0, 0, 20, 0, 0); SetMaterialColor(Material("SkyCrystal"), 245, 0, 0, 255, 0, 0, 20, 0, 0); + + // Modulate huge/giant crystal colour + // SetColor } if (mode == MODE_Festive) - { - // Chilly ambience - SoundLevel("FestiveAmbience", 60); + { + // Modulate material colour + SetMatAdjust(RGBa(175, 230, 255, 55)); - // Modulate brick colour - SetMaterialColor(Material("Brick"), 100, 100, 230, 150, 150, 255, 30, 30, 50); + // Modulate crystal colour + SetClrModulation(RGBa(175, 230, 255, 55), FindObject(BCRY)); } +} + +public func SectionAmbienceSounds() +{ + if (mode == MODE_Festive) return [["FestiveAmbience.ogg", 25]]; + else if (mode == MODE_Apocalyptic) return [["ExtremeAmbience.ogg", 75]]; + else return [["CloudAmbience.ogg", 50]]; }
\ No newline at end of file diff --git a/TemplePushing.c4s/Sections.c4d/SectLiquidTemple.c4d/Script.c b/TemplePushing.c4s/Sections.c4d/SectLiquidTemple.c4d/Script.c index 651ac9a..9a7bed4 100644 --- a/TemplePushing.c4s/Sections.c4d/SectLiquidTemple.c4d/Script.c +++ b/TemplePushing.c4s/Sections.c4d/SectLiquidTemple.c4d/Script.c @@ -15,9 +15,6 @@ public func SectionName() { return "LiquidTemple"; } // Create lava rain if (mode != MODE_Festive) AddEffect("LavaRain", 0, 20, 1); - // Create background sound - if (mode != MODE_Apocalyptic && mode != MODE_Festive) SoundLevel("LiquidAmbience", 50); - /* for (var i; i < 300; ++i) { @@ -38,22 +35,21 @@ public func SectionName() { return "LiquidTemple"; } AddEffect("FireRain", 0, 20, 1); CreateObject(FRRN, 0, 0, NO_OWNER); - // Background sound - SoundLevel("ExtremeAmbience", 100); - // Modulate brick colour (material) SetMaterialColor(Material("Brick"), 100, 0, 0, 150, 0, 0, 20, 0, 0); } if (mode == MODE_Festive) { - // Chilly ambience - if (ambienceEnabled) SoundLevel("FestiveAmbience", 60); - // Modulate colours SetSkyAdjust(RGB(90,90,255)); SetMaterialColor(Material("Brick"), 150, 150, 255, 150, 150, 255, 150, 150, 255); } } - +public func SectionAmbienceSounds() +{ + if (mode == MODE_Festive) return [["FestiveAmbience.ogg", 25]]; + else if (mode == MODE_Apocalyptic) return [["ExtremeAmbience.ogg", 75]]; + else return [["LiquidAmbience.ogg", 50], ["Rain.ogg", 10]]; +} diff --git a/TemplePushing.c4s/StringTblDE.txt b/TemplePushing.c4s/StringTblDE.txt index 9c05ef0..4cc6de6 100644 --- a/TemplePushing.c4s/StringTblDE.txt +++ b/TemplePushing.c4s/StringTblDE.txt @@ -1,5 +1,6 @@ TeamOne=Lldhyr TeamTwo=Phephr +TeamThree=Ghardûr MsgRelaunch=Du hast noch <c 00ff00>%d</c> Relaunches. MsgOneRelaunch=Du hast nur noch <c ffff00>einen</c> Relaunch. MsgLastRelaunch=Das war dein <c ff0000>letzter</c> Relaunch. @@ -9,3 +10,4 @@ Kills=Kills WinScore=Ziel MsgDeathmatchWin=<c %x>Team %s</c> erringt den Sieg. Win=Sieg +Rematch=Startet eine weitere Runde Tempelschubsen. diff --git a/TemplePushing.c4s/StringTblUS.txt b/TemplePushing.c4s/StringTblUS.txt index d5e9265..5acb400 100644 --- a/TemplePushing.c4s/StringTblUS.txt +++ b/TemplePushing.c4s/StringTblUS.txt @@ -1,7 +1,8 @@ TeamOne=Lldhyr TeamTwo=Phephr +TeamThree=Ghardûr MsgRelaunch=You have <c 00ff00>%d</c> relaunches remaining. -MsgOneRelaunch=You only have <c ffff00>one<c/> relaunch remaining. +MsgOneRelaunch=You only have <c ffff00>one</c> relaunch remaining. MsgLastRelaunch=This was your <c ff0000>last</c> relaunch. Death=<i><c ff0000>Out</c></i> Load=Loading Landscape... @@ -9,4 +10,5 @@ Kills=Kills WinScore=Goal MsgDeathmatchWin=<c %x>Team %s</c> wins the match. Win=Win +Rematch=Starts another round of Temple Pushing. diff --git a/TemplePushing.c4s/System.c4g/Aimer.c b/TemplePushing.c4s/System.c4g/Aimer.c new file mode 100644 index 0000000..30a30e9 --- /dev/null +++ b/TemplePushing.c4s/System.c4g/Aimer.c @@ -0,0 +1,47 @@ +/*-- Aimer appendto --*/ + +#strict 2 +#appendto AIMR + +local targetDir; + +private func DoDirControl(int iDir) +{ + // Abbruch, wenn das Zielobjekt weg ist + if (!pTargetObject) return(Abort()); + // Richtungsänderung? + if (iDir != targetDir) + { + iAngle=-iAngle; + if(GetAction(pTargetObject) != "Scale") + { + pTargetObject->SetDir(iDir); + } + pArrow->UpdateAngle(iAngle); + pTargetObject->~AimingAngle(iAngle); + targetDir = iDir; + } + else + // Tastendruck in Zielrichtung: Zaubern! + DoEnter(); + return(1); +} + +private func DoUpDownControl(int iByChange) +{ + // Abbruch, wenn das Zielobjekt weg ist + if (!pTargetObject) return(Abort()); + // Zielrichtung ändern + iAngle = BoundBy(Abs(iAngle) + iByChange, 0, 180); + if (!targetDir) iAngle *= -1; + pArrow->UpdateAngle(iAngle); + pTargetObject->~AimingAngle(iAngle); + return(1); +} + +public func Create(object pCommandObject, object pMenuObj, int iStartAngle) +{ + var ret = _inherited(pCommandObject, pMenuObj, iStartAngle); + targetDir = pTargetObject->GetDir(); + return ret; +}
\ No newline at end of file diff --git a/TemplePushing.c4s/System.c4g/ApocalypseEffects.c b/TemplePushing.c4s/System.c4g/ApocalypseEffects.c index cefa608..585a385 100644 --- a/TemplePushing.c4s/System.c4g/ApocalypseEffects.c +++ b/TemplePushing.c4s/System.c4g/ApocalypseEffects.c @@ -9,8 +9,7 @@ global func FxCreateTeraFlintsTimer() var clonk = GetCrew(GetPlayerByIndex(i)); if (!clonk) continue; - var teraflint = CreateObject(EFLN, 0, 0, NO_OWNER); - if (!clonk->Collect(teraflint)) teraflint->RemoveObject(); + if (clonk->ContentsCount(EFLN) < 3) clonk->CreateContents(EFLN); } return 1; diff --git a/TemplePushing.c4s/System.c4g/Arrowpack.c b/TemplePushing.c4s/System.c4g/Arrowpack.c index 5f86151..da2c5ec 100644 --- a/TemplePushing.c4s/System.c4g/Arrowpack.c +++ b/TemplePushing.c4s/System.c4g/Arrowpack.c @@ -8,7 +8,7 @@ local coolingDown; protected func Initialize() { - iUsedItems = Random(MaxPackCount() - 1); + iUsedItems = RandomX(7,8); } private func CooledDown() @@ -37,7 +37,7 @@ protected func Activate(object clonk) // Start cooldown coolingDown = true; - Schedule("coolingDown = false", RandomX(1, 20)); + Schedule("coolingDown = false", RandomX(3, 5)); // Play sound Sound("Arrow"); diff --git a/TemplePushing.c4s/System.c4g/Blackout.c b/TemplePushing.c4s/System.c4g/Blackout.c new file mode 100644 index 0000000..b3f3bdb --- /dev/null +++ b/TemplePushing.c4s/System.c4g/Blackout.c @@ -0,0 +1,51 @@ +/*-- Kill tracking Blackout --*/ + +#appendto MBOT +#strict 2 + +public func Activate(object pCaster, object pRealcaster) { + // Effekte! + Sound("Magic*", 0, this(), 70); + var iRange=100; + var iDuration = 37; + var iAng, iX, iY, iRng; + // Kombo: Stein verlängert Dauer + var pComboObj; + if (pComboObj = FindContents(ROCK, pCaster)) + { + iDuration *= 2; + RemoveObject(pComboObj); + } + // Kombo: Fisch und Kohle vergrößert Radius + pComboObj = FindContents(FISH, pCaster); + if (!pComboObj) pComboObj = FindContents(DFSH, pCaster); + if (!pComboObj) pComboObj = FindContents(COAL, pCaster); + if (pComboObj) + { + if (GetAlive(pComboObj)) + iRange *= 3; + else + iRange *= 2; + RemoveObject(pComboObj); + } + for(var i=iRange/2; i>0; --i) + { + iAng=Random(360); + iRng=Random(iRange/2); + iX=Sin(iAng, iRng); + iY=Cos(iAng, iRng); + CreateParticle("Feather", iX, iY, RandomX(-5,5), -3, 50+Random(25)); + } + var pClonk,pVictim; + if(!(pClonk=pRealcaster)) pClonk=pCaster; + // alle Clonks im näheren Umkreis prüfen + while(pVictim=FindObject(0,-iRange/2,-iRange/2,iRange,iRange,OCF_CrewMember,0,0,NoContainer(),pVictim)) + // die Opfer sind feindliche Clonks oder alle Clonks außer dem Zauberer selbst wenn NoTeamMagic aktiviert ist + if((Hostile(GetOwner(pVictim),GetOwner(pClonk)) || ObjectCount(NTMG)) && pClonk!=pVictim) + { + // wirkt länger bei heruntergekämpften Clonks + AddEffect("SleepNSpell",pVictim,123,25,0,GetID(),iDuration*((115-GetEnergy(pVictim)*100000/GetPhysical("Energy",0, pVictim))/5)); + SetKiller(GetController(pClonk), pVictim); + } + return(1); +} diff --git a/TemplePushing.c4s/System.c4g/Clonk.c b/TemplePushing.c4s/System.c4g/Clonk.c index c934938..3ac40a0 100644 --- a/TemplePushing.c4s/System.c4g/Clonk.c +++ b/TemplePushing.c4s/System.c4g/Clonk.c @@ -7,6 +7,7 @@ local rotateInJump; local removeOnDeath; +/* protected func ControlThrow(object byObj) { // First check if the clonk already handles the throw control @@ -19,6 +20,7 @@ protected func ControlThrow(object byObj) arrowPack->Activate(this); return 1; } +*/ protected func ControlSpecial() { @@ -33,10 +35,11 @@ protected func ControlSpecial() // Find clonks in range var clonks = FindObjects( Find_ID(CLNK), - Find_InRect(-10 + GetDir() * 20, 0, 10, 10), + Find_InRect(-20 + GetDir() * 29, 0, 12, 10), Find_OCF(OCF_Alive), - Find_Hostile(GetOwner())); - + Find_Hostile(GetOwner()), + Find_Not(Find_Action("Tumble"))); + if (GetLength(clonks) == 0) return 0; // Randomly select clonk to be pushed diff --git a/TemplePushing.c4s/System.c4g/CurseFall.c b/TemplePushing.c4s/System.c4g/CurseFall.c new file mode 100644 index 0000000..3b8c451 --- /dev/null +++ b/TemplePushing.c4s/System.c4g/CurseFall.c @@ -0,0 +1,43 @@ +/*-- Kill tracking falling curse --*/ + +#strict 2 +#appendto CFAL + +protected func FxCurseFallingStart(pClonk, iEffectNumber, iTemp, iX, iY, pCaller) +{ + EffectVar(6, pClonk, iEffectNumber) = GetController(pCaller); + return _inherited(pClonk, iEffectNumber, iTemp, iX, iY, pCaller); +} + +protected func FxCurseFallingTimer(pClonk, iEffectNumber, iEffectTime) +{ + var rval = FxCurseTimer(pClonk, iEffectNumber, iEffectTime); + if (rval != FX_OK) return rval; + if (FxCurseIsActive(pClonk, iEffectNumber)) + { + var killer = EffectVar(6, pClonk, iEffectNumber); + // Bei Bedarf stolpern + if(pClonk->GetContact(0, -1, 8)) + { + if(GetXDir(pClonk) || GetAction(pClonk) != "Walk" ) + { + if(WildcardMatch(GetAction(pClonk), "*Magic") || WildcardMatch(GetAction(pClonk), "*Cast")) + { + // Bei Magie-Aktion nicht so häufig stören + if(!Random(120)) { ObjectSetAction(pClonk, "FlatUp"); SetXDir(0, pClonk); SetKiller(killer, pClonk); } + } + else + { + if(!Random(60)) { ObjectSetAction(pClonk, "KneelDown"); SetXDir(0, pClonk); SetKiller(killer, pClonk); } + if(!Random(60)) { ObjectSetAction(pClonk, "FlatUp"); SetXDir(0, pClonk); SetKiller(killer, pClonk); } + } + } + } + // In Flug nur Tumble + else + { + if(!Random(50)) { ObjectSetAction(pClonk, "Tumble"); SetKiller(killer, pClonk); } + } + } + return FX_OK; +} diff --git a/TemplePushing.c4s/System.c4g/Explode.c b/TemplePushing.c4s/System.c4g/Explode.c new file mode 100644 index 0000000..39b4c4a --- /dev/null +++ b/TemplePushing.c4s/System.c4g/Explode.c @@ -0,0 +1,78 @@ +/* Fix kill-tracking for Explosionspunkt + * (only moved SetController under Fling) */ +#strict + +// Objekte beschädigen und wegschleudern +global func BlastObjects(int x, int y, int level, object container, int cause_plr_plus_one, object layer) +{ + var obj; + + // Koordinaten sind immer global angegeben. In lokale Koordinaten umrechnen + var l_x = x - GetX(), l_y = y - GetY(); + + // Im Container? + if (container) + { + if (GetObjectLayer(container) == layer) + { + BlastObject(level, container, cause_plr_plus_one); + if (!container) return true; // Container koennte inzwischen entfernt worden sein + for (obj in FindObjects(Find_Container(container), Find_Layer(layer))) + if (obj) BlastObject(level, obj, cause_plr_plus_one); + } + } + else + { + // Objekt ist draußen + // Objekte am Explosionspunkt beschädigen + for (var obj in FindObjects(Find_AtRect(l_x-5, l_y-5, 10,10), Find_NoContainer(), Find_Layer(layer))) + if (obj) BlastObject(level, obj, cause_plr_plus_one); + // Objekte im Explosionsradius schleudern + var shockwave_objs = FindObjects(Find_Distance(level, l_x,l_y), Find_NoContainer(), Find_Layer(layer), + Find_Or(Find_Category(C4D_Object|C4D_Living|C4D_Vehicle), Find_Func("CanBeHitByShockwaves")), Find_Func("BlastObjectsShockwaveCheck",x,y)); + var cnt = GetLength(shockwave_objs); + if (cnt) + { + // Die Schleuderenergie teilt sich bei vielen Objekten auf + //Log("Shockwave objs %v (%d)", shockwave_objs, cnt); + var shock_speed = Sqrt(2 * level * level / BoundBy(cnt, 2, 12)); + for (var obj in shockwave_objs) if (obj) // obj noch prüfen, weil OnShockwaveHit Objekte aus dem Array löschen könnte + { + // Objekt hat benutzerdefinierte Reaktion auf die Schockwelle? + if (obj->~OnShockwaveHit(level, x,y)) continue; + // Lebewesen leiden besonders + var cat = GetCategory(obj); + if (cat & C4D_Living) + { + DoEnergy(level/-2, obj, false, FX_Call_EngBlast, cause_plr_plus_one); + DoDamage(level/2, obj, FX_Call_DmgBlast, cause_plr_plus_one); + } + // Schockwelle + var mass_fact = 20, mass_mul = 100; if (cat & C4D_Living) { mass_fact = 8; mass_mul = 80; } + mass_fact = BoundBy(GetMass(obj)*mass_mul/1000, 4, mass_fact); + var dx = 100*(GetX(obj)-x)+Random(51)-25; + var dy = 100*(GetY(obj)-y)+Random(51)-25; + var vx, vy; + if (dx) + { + vx = Abs(dx)/dx * (100*level-Abs(dx)) * shock_speed / level / mass_fact; + } + vy = (Abs(dy) - 100*level) * shock_speed / level / mass_fact; + if (cat & C4D_Object) + { + // Objekte nicht zu schnell werden lassen + var ovx = GetXDir(obj, 100), ovy = GetYDir(obj, 100); + if (ovx*vx > 0) vx = (Sqrt(vx*vx + ovx*ovx) - Abs(vx)) * Abs(vx)/vx; + if (ovy*vy > 0) vy = (Sqrt(vy*vy + ovy*ovy) - Abs(vy)) * Abs(vy)/vy; + } + //Log("%v v(%v %v) d(%v %v) m=%v l=%v s=%v", obj, vx,vy, dx,dy, mass_fact, level, shock_speed); + Fling(obj, vx,vy, 100, true); + SetKiller(cause_plr_plus_one-1, obj); + // Killverfolgung bei Projektilen + if (cat & C4D_Object) SetController(cause_plr_plus_one-1, obj); + } + } + } + // Fertig + return true; +} diff --git a/TemplePushing.c4s/System.c4g/FireBall.c b/TemplePushing.c4s/System.c4g/FireBall.c new file mode 100644 index 0000000..40d1eab --- /dev/null +++ b/TemplePushing.c4s/System.c4g/FireBall.c @@ -0,0 +1,79 @@ +/*-- Increase distance to caster to avoid autokills --*/ + +#appendto FIRB +#strict 2 + +func FxFireballFlightTimer(pTarget, iEffectNumber, iEffectTime) +{ + var iSize=EffectVar(0, pTarget, iEffectNumber); + var iMaxSize=EffectVar(1, pTarget, iEffectNumber); + var iAngle=EffectVar(2, pTarget, iEffectNumber); + var iLaunchFree=EffectVar(3, pTarget, iEffectNumber); + var pCaster = EffectVar(4, pTarget, iEffectNumber); + var iSizeBoost=EffectVar(5, pTarget, iEffectNumber); + if(iSize<=0) return(RemoveObject()); + if(GBackLiquid()) return(RemoveObject()); + // Effekt + for( var i=4; i>0; --i) + { + CreateParticle("Fire", RandomX(-iSize/50,iSize/50), RandomX(-iSize/50,iSize/50), RandomX(-2,2)+GetXDir()/2, RandomX(-2,2)+GetYDir()/2, iSize*60/100+Random(15), RGBa(Random(255),0,0,90)); + CreateParticle("Fire2", RandomX(-iSize/50,iSize/50), RandomX(-iSize/50,iSize/50), RandomX(-2,2)+GetXDir()/2, RandomX(-2,2)+GetYDir()/2, iSize+Random(15)); + } + // Ausrichtung nach Caster + if (!iLaunchFree && pCaster) + { + var x=GetX(pCaster)+Sin(iAngle, 25), y=GetY(pCaster)-Cos(iAngle, 25); + if (GetX()!=x || GetY()!=y) + { + DrawParticleLine("Fire", x-GetX(), y-GetY(), 0, 0, 5, 40, 16777215, 16777215, 0); + SetPosition(x, y); + } + } + // Noch nicht voll aufgeladen? + if (iSize < iMaxSize) + { + for( var i=5; i>0; --i) + { + var iR, iD; + var iX=Sin(iR=Random(360), iD=RandomX(iSize/10,iSize/5)); + var iY=Cos(iR, iD); + CreateParticle("Fire", iX, iY, -iX/3, -iY/3, Random(25), RGBa(Random(255),0,0,90)); + CreateParticle("Fire2", iX, iY, -iX/3, -iY/3, Random(35)); + } + // Vergrößern + EffectVar(0, pTarget, iEffectNumber) = ++iSize; + // Nichts weiter während des Wachsens + return(1); + } + // Abschuss noch nicht freigegeben? + if (!iLaunchFree) return(1); + // Maximale Laufzeit + if(iEffectTime-iLaunchFree>550) return(RemoveObject()); + // Geschwindigkeit anpassen + SetXDir(Sin(iAngle, FIRB_Speed)); + SetYDir(-Cos(iAngle, FIRB_Speed)); + // Suche nach brennbaren Zielen + var pObj; + while(pObj=FindObject(0, 0, 1, 0, 0, OCF_Inflammable, 0, 0, NoContainer(), pObj)) + { + if(GBackLiquid(GetX(pObj), GetY(pObj))) continue; + if(GetOCF(pObj) & OCF_CrewMember) if (GetAlive(pObj)) return(Hit()); + if(iSizeBoost || !Random(3)) Incinerate(pObj); + } + // Zielen auf CrewMember - klappt wegen Winkelüberlauf schlecht gerade nach unten (was solls...) + var iMinAngleDiff = 360, iTargetAngle = iAngle; + while (pObj = FindObject(0, Sin(iAngle, FIRB_AimSearchRange)-FIRB_AimSearchRange/2, -Cos(iAngle, FIRB_AimSearchRange)-FIRB_AimSearchRange/2, FIRB_AimSearchRange, FIRB_AimSearchRange, OCF_CrewMember, 0,0, NoContainer(), pObj)) + { + if (!GetAlive(pObj)) continue; + var iThisTargetAngle = Angle(GetX(), GetY(), GetX(pObj), GetY(pObj)); + if (iThisTargetAngle > 180) iThisTargetAngle -= 360; + if (Abs(iThisTargetAngle - iAngle) < iMinAngleDiff) + { + iMinAngleDiff = Abs(iThisTargetAngle - iAngle); + iTargetAngle = iThisTargetAngle; + } + } + EffectVar(2, pTarget, iEffectNumber) = BoundBy(iTargetAngle, iAngle-FIRB_AimDirAdjust, iAngle+FIRB_AimDirAdjust); + // OK; weiter existieren + return(1); +} diff --git a/TemplePushing.c4s/System.c4g/Freeze.c b/TemplePushing.c4s/System.c4g/Freeze.c new file mode 100644 index 0000000..d10457e --- /dev/null +++ b/TemplePushing.c4s/System.c4g/Freeze.c @@ -0,0 +1,36 @@ +/*-- Freeze --*/ + +#strict + +#appendto FREZ + + +global func FxFreezeTimer(pTarget, iEffectNumber, iEffectTime) +{ + // In Lava schwimmend? Dann schnell auftauen (nur für Monster und andere nicht brennbare Lebewesen wichtig) + if(GetMaterialVal("Incindiary", "Material", pTarget->GetMaterial())) + return -1; + // Partikeleffekte für den betroffenen + var id = GetID(pTarget); + CreateParticle("NoGravSpark",GetX(pTarget)+RandomX(-GetDefWidth(id)/2, GetDefWidth(id)/2),GetY(pTarget)+RandomX(-GetDefHeight(id)/2, GetDefHeight(id)/2),0,RandomX(-2, -4),RandomX(18,28),RGB(10,120,210), pTarget); + CreateParticle("Freeze",GetX(pTarget),GetY(pTarget),0,0,EffectVar(1, pTarget, iEffectNumber)*5+20,RGB(0,40,80),pTarget); + // Runterzählen + EffectVar(0, pTarget, iEffectNumber)-=1; + if(EffectVar(0, pTarget, iEffectNumber)<=0) return FX_Execute_Kill; + // Ein bischen tut Einfrieren auch weh + var dmg=EffectVar(4, pTarget, iEffectNumber); + var r=2; + if(dmg) r=1; + + if(!Random(r)) { + var d=RandomX(1200,dmg); + EffectVar(4, pTarget, iEffectNumber)=BoundBy(dmg-d, 0, 0xffffff); + // Damit der richtige Spieler den Schaden verursacht + var pFrom = GetCursor(EffectVar(2, pTarget, iEffectNumber)); + if(pFrom) + pFrom->DoEnergy(-d*2,pTarget, true); + else + DoEnergy(-d*2, pTarget, true); + } + return FX_OK; +}
\ No newline at end of file diff --git a/TemplePushing.c4s/System.c4g/Frostwave.c b/TemplePushing.c4s/System.c4g/Frostwave.c index d30db5e..682e502 100644 --- a/TemplePushing.c4s/System.c4g/Frostwave.c +++ b/TemplePushing.c4s/System.c4g/Frostwave.c @@ -1,99 +1,99 @@ /*-- Frostwave --*/ - + #strict 2 - + #appendto MFWV - + local maxRadius; - + protected func Initialize() { - maxRadius = 90; + maxRadius = 90; } - + func Activate(object caster, object realcaster) { - if (realcaster) caster = realcaster; - - if (AddEffect("FrostwaveNSpell", this, 130, 1, this, 0, caster, maxRadius) <= 0) - { - RemoveObject(); - return 1; - } - - Sound("MgWind*"); - return 1; + if (realcaster) caster = realcaster; + + if (AddEffect("FrostwaveNSpell", this, 130, 1, this, 0, caster, maxRadius) <= 0) + { + RemoveObject(); + return 1; + } + + Sound("MgWind*"); + return 1; } - + func FxFrostwaveNSpellStart(object target, int number, int temp, object caster, int maxRadius) { - if (temp) return; - - // Initial radius - EffectVar(1, target, number) = 20; - - // Position - EffectVar(2, target, number) = caster->GetX(); - EffectVar(3, target, number) = caster->GetY(); - - // Caster - EffectVar(4, target, number) = caster; - EffectVar(6, target, number) = caster->GetController(); - - // Maximum radius - EffectVar(7, target, number) = maxRadius; - - // Combo - var combo = caster->FindContents(ICE1); - if (combo) - { - EffectVar(5, target, number) = true; - combo->RemoveObject(); - } - - return 1; + if (temp) return; + + // Initial radius + EffectVar(1, target, number) = 20; + + // Position + EffectVar(2, target, number) = caster->GetX(); + EffectVar(3, target, number) = caster->GetY(); + + // Caster + EffectVar(4, target, number) = caster; + EffectVar(6, target, number) = caster->GetController(); + + // Maximum radius + EffectVar(7, target, number) = maxRadius; + + // Combo + var combo = caster->FindContents(ICE1); + if (combo) + { + EffectVar(5, target, number) = true; + combo->RemoveObject(); + } + + return 1; } - + func FxFrostwaveNSpellTimer(object target, int number, int time) { - var radius = EffectVar(1, target, number); - - // Remove if maximum radius is reached - if (radius >= EffectVar(7, target, number)) return -1; - - // Position - var absX = EffectVar(2, target, number), relX = AbsX(absX); - var absY = EffectVar(3, target, number), relY = AbsY(absY); - - // Combo? - var searchOCF = OCF_Alive; - if (EffectVar(5, target, number)) searchOCF |= OCF_Collectible; - - // Effects! - CreateParticle("FrostWave", relX, relY, RandomX(-1, 1), RandomX(-1, 1), 400 + 10 * radius, RGB(255, 255, 255)); - - // Fling enemies - var caster = EffectVar(4, target, number); - for (var obj in FindObjects( - Find_Distance(radius + 5, relX, relY), Find_Not(Find_Distance(radius - 5)), - Find_OCF(searchOCF), Find_NoContainer(), Find_Not(caster))) - { - var angle = Angle(absX, absY, obj->GetX(), obj->GetY()); - obj->SetKiller(EffectVar(6, target, number)); - Fling(obj, Sin(angle, 80) / 9, -Cos(angle, 80) / 9); - if (!Frozen(obj)) Freeze(obj, caster); - } - - // Increase radius - EffectVar(1, target, number) += 8; - - return 1; + var radius = EffectVar(1, target, number); + + // Remove if maximum radius is reached + if (radius >= EffectVar(7, target, number)) return -1; + + // Position + var absX = EffectVar(2, target, number), relX = AbsX(absX); + var absY = EffectVar(3, target, number), relY = AbsY(absY); + + // Combo? + var searchOCF = OCF_Alive; + if (EffectVar(5, target, number)) searchOCF |= OCF_Collectible; + + // Effects! + CreateParticle("FrostWave", relX, relY, RandomX(-1, 1), RandomX(-1, 1), 400 + 10 * radius, RGB(255, 255, 255)); + + // Fling enemies + var caster = EffectVar(4, target, number); + for (var obj in FindObjects( + Find_Distance(radius + 5, relX, relY), Find_Not(Find_Distance(radius - 5)), + Find_OCF(searchOCF), Find_NoContainer(), Find_Not(caster))) + { + var angle = Angle(absX, absY, obj->GetX(), obj->GetY()); + obj->SetKiller(EffectVar(6, target, number)); + Fling(obj, Sin(angle, 80) / 9, -Cos(angle, 80) / 9); + if (!Frozen(obj)) Freeze(obj, caster); + } + + // Increase radius + EffectVar(1, target, number) += 8; + + return 1; } - + /* Zaubercombo */ - + public func GetSpellClass() { return WATR; } public func GetSpellCombo() { return "335"; } // (1: Backward; 2: Down; 3: Forward; 4: Throw; 5: Jump; 6: Dig) - + /* Custom radius */ -public func SetMaxRadius(int radius) { maxRadius = radius; } +public func SetMaxRadius(int radius) { maxRadius = radius; }
\ No newline at end of file diff --git a/TemplePushing.c4s/System.c4g/Ice.c b/TemplePushing.c4s/System.c4g/Ice.c index 329d013..9bfdc89 100644 --- a/TemplePushing.c4s/System.c4g/Ice.c +++ b/TemplePushing.c4s/System.c4g/Ice.c @@ -1,20 +1,21 @@ /*--- Eisklumpen ---*/ - + #strict 2 - + #appendto ICE1 - + local hit; - + protected func Hit() { - if (!hit) - { - var frostwave = CreateObject(MFWV, 0, 0, NO_OWNER); - frostwave->SetMaxRadius(60); - frostwave->Activate(this); - hit = true; - } - - return _inherited(); + if (!hit) + { + var frostwave = CreateObject(MFWV, 0, 0, NO_OWNER); + frostwave->SetMaxRadius(60); + frostwave->Activate(this); + hit = true; + } + + CastParticles("Snow", 50, 20, 0, 0, 50, 80, RGBa(120,120,255,0), RGBa(90,90,255,127)); + RemoveObject(); }
\ No newline at end of file diff --git a/TemplePushing.c4s/System.c4g/IceBall.c b/TemplePushing.c4s/System.c4g/IceBall.c new file mode 100644 index 0000000..c9b67ab --- /dev/null +++ b/TemplePushing.c4s/System.c4g/IceBall.c @@ -0,0 +1,97 @@ +/*-- Iceball --*/ + +#strict + +#appendto ICEB + +public func ControlLeft() {} + +public func ControlRight() {} + +// Die restlichen Tasten mit Stop belegen, damit Klassisch auch gerade fliegen kann +public func ControlDig() {} + +public func ControlUp() {} + +public func ControlDown() {} + +// Bei JnR wenn die Taste losgelassen wird auch keine Drehung mehr +public func ControlLeftReleased() {} + +public func ControlRightReleased() {} + +// Werfen löst den Eisschlag aus +public func ControlThrow() {} + +func FxIceStrikeFlightTimer(pTarget, iEffectNumber, iEffectTime) + { + var iSize=EffectVar(0, pTarget, iEffectNumber); + var iMaxSize=EffectVar(1, pTarget, iEffectNumber); + var iAngle=EffectVar(2, pTarget, iEffectNumber)+=EffectVar(5, pTarget, iEffectNumber); + var iLaunchFree=EffectVar(3, pTarget, iEffectNumber); + var pCaster = EffectVar(4, pTarget, iEffectNumber); + if(iSize<=0) return(RemoveObject()); + + // Effekt + for( var i=1; i>0; --i) + { + CreateParticle("NoGravSpark",RandomX(-iSize/50,iSize/50), RandomX(-iSize/50,iSize/50), +RandomX(-2,2), +RandomX(-2,2), iSize*60/100+Random(15), RGB(10,RandomX(40,140),RandomX(250, 100))); + CreateParticle("Freeze",RandomX(-iSize/50,iSize/50), RandomX(-iSize/50,iSize/50), +RandomX(-2,2), +RandomX(-2,2), iSize*60/100+Random(15), RGB(10,RandomX(250,100),RandomX(40,140))); + } + + // Ausrichtung nach Caster + if (!iLaunchFree && pCaster) + { + var x=GetX(pCaster)+Sin(iAngle, 25), y=GetY(pCaster)-Cos(iAngle, 25); + if (GetX()!=x || GetY()!=y) + { + DrawParticleLine("Snow", x-GetX(), y-GetY(), 0, 0, 5, 40, 16777215, 16777215, 0); + SetPosition(x, y); + } + } + + // Noch nicht voll aufgeladen? + if (iSize < iMaxSize) + { + for( var i=5; i>0; --i) + { + var iR, iD; + var iX=Sin(iR=Random(360), iD=RandomX(iSize/10,iSize/5)); + var iY=Cos(iR, iD); + CreateParticle("Snow", iX, iY, -iX/3, -iY/3, Random(25), RGBa(Random(255),0,0,90)); + CreateParticle("Snow", iX, iY, -iX/3, -iY/3, Random(35)); + } + + // Vergrößern + EffectVar(0, pTarget, iEffectNumber) = iSize+=10; + + // Nichts weiter während des Wachsens + return(1); + } + + // Abschuss noch nicht freigegeben? + if (!iLaunchFree) return(1); + + // Maximale Laufzeit + if(iEffectTime-iLaunchFree>550) return(RemoveObject()); + + // Geschwindigkeit anpassen + SetXDir(Sin(iAngle, ICEB_Speed)); + SetYDir(-Cos(iAngle, ICEB_Speed)); + + // Suche nach Zielen + var pObj; + for(pObj in FindObjects(Find_AtPoint(0,1),Find_OCF(OCF_CrewMember),Find_NoContainer(),Find_Layer(GetObjectLayer()))) + { + if(GetOCF(pObj) & OCF_CrewMember) if (GetAlive(pObj)) return(Hit()); + } + + // OK; weiter existieren + return(1); + } + +func FxIceStrikeFlightStop(object pTarget, int iEffectNumber, int iReason, bool fTemp) + { + if (!fTemp) RemoveObject(pTarget); + return(1); + } diff --git a/TemplePushing.c4s/System.c4g/Icestrike.c b/TemplePushing.c4s/System.c4g/Icestrike.c new file mode 100644 index 0000000..ccff6a9 --- /dev/null +++ b/TemplePushing.c4s/System.c4g/Icestrike.c @@ -0,0 +1,38 @@ +/*-- Icestrike --*/ + +#strict 2 + +#appendto MICS + +func Activate(pCaller, pRealcaller) +{ + var pClonk; + if(pRealcaller) pClonk=pRealcaller; + else pClonk=pCaller; + + // Effekt prüfen + var iResult; + if (iResult = CheckEffect("IcestrikeNSpell", 0, 125)) return(iResult!=-1 && RemoveObject()); + + // Zauber + Sound("Magic*"); + var iX, iY; + iX=AbsX(GetX(pCaller)-25+50*GetDir(pCaller)); + iY=AbsY(GetY(pCaller)); + pBall=CreateObject(ICEB, AbsX(GetX(pCaller)-25+50*GetDir(pCaller)), AbsY(GetY(pCaller)), GetOwner(pCaller)); + pBall->SetCaster(pCaller); + + // Zielen wenn möglich + if (pClonk->~DoSpellAim(this(), pCaller)) return(1); + return(1); +} + +// Aktivierung nach Zielen (iAngle: -90=links; 0=oben; +90=rechts) +public func ActivateAngle(object pCaller, int iAngle) +{ + // Eisball freigeben (wenn noch existent) + if (pBall) pBall->SetAngle(iAngle); + + // Objekt löschen + return(RemoveObject()); +}
\ No newline at end of file diff --git a/TemplePushing.c4s/System.c4g/LavaRain.c b/TemplePushing.c4s/System.c4g/LavaRain.c index 22369e0..b2c1552 100644 --- a/TemplePushing.c4s/System.c4g/LavaRain.c +++ b/TemplePushing.c4s/System.c4g/LavaRain.c @@ -4,7 +4,6 @@ global func FxLavaRainStart() { - SoundLevel("Rain", 10); return 1; } diff --git a/TemplePushing.c4s/System.c4g/Lenseflare.c b/TemplePushing.c4s/System.c4g/Lenseflare.c deleted file mode 100644 index 6de037a..0000000 --- a/TemplePushing.c4s/System.c4g/Lenseflare.c +++ /dev/null @@ -1,65 +0,0 @@ -/* Lenseflare */ - -#strict - -#appendto LENS - -protected func TuWasBraves() -{ - // Hat es seinen Besitzer verloren? :( - if((!GetPlayerName(GetOwner())) || GetOwner()==-1) - { - for(var i=0; i<MIJON(); ++i) - RemoveObject(Local(i)); - RemoveObject(this()); - return(); - } - // Sonnenposition anpassen - BerechneSonne(); - SetPosition(SonneX,SonneY); - // unskalierten Vektor ermitteln - var VektorX=GibVektorX(GetOwner()); - var VektorY=GibVektorY(GetOwner()); - var VektorDist=GibVektorDist(GetOwner()); - // Die Modulation ist für alle Flares gleich - var FarbModulation = RGBa(GibFarbMod(),GibFarbMod(),GibFarbMod(),GibAlphaMod(VektorDist)); - // Genauso auch die Abstandsangabe - var Abstaende = 1000-BoundBy((3000-VektorDist*10)/3,0,1000); // Promilleangabe 0 = nahe, 1000 = weit weg; 300 Pixel sind dabei "weit weg" - var AbstaendeAbsolut = (50*Abstaende)/10; // Wieviele 1/100 Pixel zwischen den einzelnen Lenseflares sind - // Ist unsere liebe Sonne überhaupt sichtbar (also Tag + unverdeckt) - var SonneSichtbar = IsDay() && (!GBackSemiSolid(0,0)); - // Tagsüber die Sonne einblenden - if(IsDay()) - { - SetVisibility (VIS_Owner()); - } - else - { - SetVisibility (VIS_None()); - } - // Alle Lenseflares durchgehen - for(var i=0; i<MIJON(); ++i) - { - if(SonneSichtbar) - { - // Tags sichtbar - SetVisibility (VIS_Owner(), Local(i)); - SetClrModulation(FarbModulation,Local(i)); - var LensDist = (i*AbstaendeAbsolut)/100; - SetPosition(GibLensPosX(LensDist,VektorX,VektorDist), GibLensPosY(LensDist,VektorY,VektorDist),Local(i)); - } - else - // Nachts unsichtbar ODER bei verdeckter Sonne - SetVisibility (VIS_None(), Local(i)); - } - return; // Gamma-Aenderung deaktiviert fuer Tempelschubsen - // Sofern der Spieler alleine ist - if(GetPlayerCount()==1) - if(IsDay()) - { - var Gelbstich = BoundBy((500-VektorDist)/5,0,100); // Prozentangabe 0 = weit weg, 100 = nahe; 500 Pixel sind dabei "weit weg" - SetGamma (RGB(000+(30*Gelbstich)/100,000+(30*Gelbstich)/100,000), - RGB(128+(60*Gelbstich)/100,128+(60*Gelbstich)/100,128), - RGB(255,255,255), GammaRampe_Lenseflare()); - } -}
\ No newline at end of file diff --git a/TemplePushing.c4s/System.c4g/MagicLightningBolt.c b/TemplePushing.c4s/System.c4g/MagicLightningBolt.c new file mode 100644 index 0000000..bd94dd9 --- /dev/null +++ b/TemplePushing.c4s/System.c4g/MagicLightningBolt.c @@ -0,0 +1,65 @@ +/*-- Lightning Bolt --*/ + +#strict 2 + +#appendto LGTS + +private func Advance() +{ + var obj; + + // Einschlag + var iVtx = GetVertexNum()-1, iVtxX = GetVertex(iVtx, 0), iVtxY = GetVertex(iVtx, 1); + if (GBackSolid(iVtxX-GetX(), iVtxY-GetY() )) + return(Remove()); + + // Neuen Eckpunkt + if (!AddVertex( iVtxX+iAdvX+RandomX(-5,5), iVtxY+iAdvY+RandomX(-5,5))) + return(Remove()); + + SetPosition(GetVertex(GetVertexNum()), GetVertex(GetVertexNum(), 1)); + + // Im Wasser? + if (GBackLiquid(iVtxX-GetX(), iVtxY-GetY() )) + { + // Alle Lebewesen in der Nähe bekommen was ab + for (obj in FindObjects(Find_InRect(iVtxX-GetX()-400, iVtxY-GetY()-400, 800, 800), Find_Or(Find_OCF(OCF_Alive), Find_Func("IsForceField")), Find_NoContainer(), Find_Layer(GetObjectLayer()) )) + { + if(!PathFree(iVtxX, iVtxY, GetX(obj), GetY(obj))) continue; + if(!GBackLiquid(GetX(obj)-GetX(), GetY(obj)-GetY())) continue; + // Selber so ausrichten, dass die Schlagrichtung stimmt + var xdiff = GetX(obj) - GetVertex(Max(GetVertexNum()-3, 0), 0); + if (!xdiff) xdiff = iAdvX; + if (xdiff > 0) SetDir(DIR_Right); else SetDir(DIR_Left); + obj->~LightningStrike(this); + Punch(obj, 12); + if(!Frozen(obj)) Freeze(obj); + DrawParticleLine ("LightningSpark2", iVtxX-GetX(), iVtxY-GetY(), + GetX(obj)-GetX(), GetY(obj)-GetY(), 6, 60, RGB(0,100,255)); + DrawParticleLine ("LightningSpark2", iVtxX-GetX(), iVtxY-GetY(), + GetX(obj)-GetX(), GetY(obj)-GetY(), 3, 25, RGB(250,250,255)); + } + return(Remove()); + } + + // Objektanziehung + iVtx = GetVertexNum()-1; iVtxX = GetVertex(iVtx, 0); iVtxY = GetVertex(iVtx, 1); + if (iVtx>7) + { + for (var obj in FindObjects( Find_AtRect(iVtxX-GetX()-13, iVtxY-GetY()-13, 26, 26), Find_Or(Find_OCF(OCF_Alive), Find_Func("IsForceField")), Find_Layer(GetObjectLayer()), Find_NoContainer() ) ) + { + if(!PathFree(iVtxX, iVtxY, GetX(obj), GetY(obj))) continue; + Attraction(obj); + break; + } + } + for(obj in FindObjects(Find_ID(GetID()), Find_Distance(35,iVtxX-GetX(), iVtxY-GetY()), Find_Layer(GetObjectLayer()), Find_Exclude(this()))) + { + AttractionLightning(obj); + break; + } + + Timer(); + // Weiter + return; +}
\ No newline at end of file diff --git a/TemplePushing.c4s/System.c4g/Plague.c b/TemplePushing.c4s/System.c4g/Plague.c index ea80c2e..ec7268e 100644 --- a/TemplePushing.c4s/System.c4g/Plague.c +++ b/TemplePushing.c4s/System.c4g/Plague.c @@ -4,6 +4,20 @@ #appendto MGPL +protected func Slay() { + var pClonk; + while(pClonk=FindObject(0,-iRand/6,-iRand/6,iRand/3,iRand/3,OCF_Alive(),0,0,0, pClonk)) + if(GetActionTarget() != pClonk) + AddEffect("Poison",pClonk,182,10,0,GetID(), fSnake, GetActionTarget()); + RemoveObject(); +} + +func FxPoisonStart(object pClonk,int iEffectNumber, int iTemp, fSnake, pCaster) +{ + EffectVar(2, pClonk, iEffectNumber) = GetController(pCaster); + return _inherited(pClonk, iEffectNumber, iTemp, fSnake); +} + func FxPoisonTimer(pClonk, iEffectNumber, iEffectTime) { if(iEffectTime >= 1200) return(-1); @@ -13,7 +27,12 @@ func FxPoisonTimer(pClonk, iEffectNumber, iEffectTime) CreateParticle("PSpark", GetX(pClonk), GetY(pClonk), 0, -1, EffectVar(0, pClonk, iEffectNumber)*5+50, RGBa(fSnake*55, 55, 0), pClonk, 1); if(GBackLiquid(GetX(pClonk), GetY(pClonk))) return(-1); - if(!Random(7)) DoEnergy(-2, pClonk); + var pFrom = GetCursor(EffectVar(2, pClonk, iEffectNumber)); + if(!Random(5)) + { + if(pFrom) pFrom->DoEnergy(-2, pClonk); + else DoEnergy(-2, pClonk); + } var obj; var iRadius = EffectCall(pClonk,iEffectNumber,"MaxRange"); while(obj = FindObject(0, -iRadius+GetX(pClonk),-iRadius+GetY(pClonk),iRadius*2,iRadius*2, OCF_Alive(),0,0, NoContainer(), obj)) @@ -22,12 +41,12 @@ func FxPoisonTimer(pClonk, iEffectNumber, iEffectTime) { if(!GetAction(obj)S="Field") { - AddEffect("Poison",obj,182,10,0,MGPL,fSnake); + AddEffect("Poison",obj,182,10,0,MGPL,fSnake,pFrom); } } } return(1); } -func FxPoisonMaxRange() { return(100); } +func FxPoisonMaxRange() { return(175); } diff --git a/TemplePushing.c4s/System.c4g/Rain.c b/TemplePushing.c4s/System.c4g/Rain.c index c44285f..ed48a6d 100644 --- a/TemplePushing.c4s/System.c4g/Rain.c +++ b/TemplePushing.c4s/System.c4g/Rain.c @@ -4,7 +4,6 @@ global func FxRainStart() { - SoundLevel("Rain", 100); return 1; } diff --git a/TemplePushing.c4s/System.c4g/RotationHelper.c b/TemplePushing.c4s/System.c4g/RotationHelper.c new file mode 100644 index 0000000..8d86781 --- /dev/null +++ b/TemplePushing.c4s/System.c4g/RotationHelper.c @@ -0,0 +1,10 @@ + +#strict 2 + + +global func SetDTRotation (int r, int xoff, int yoff, object obj) +{ + var fsin=Sin(r, 1000), fcos=Cos(r, 1000); // set matrix values + SetObjDrawTransform ( +fcos, +fsin, (1000-fcos)*xoff - fsin*yoff, + -fsin, +fcos, (1000-fcos)*yoff + fsin*xoff, obj ); +}
\ No newline at end of file diff --git a/TemplePushing.c4s/System.c4g/Scroll.c b/TemplePushing.c4s/System.c4g/Scroll.c index 7228fe0..6156e26 100644 --- a/TemplePushing.c4s/System.c4g/Scroll.c +++ b/TemplePushing.c4s/System.c4g/Scroll.c @@ -2,12 +2,28 @@ #appendto SCRL +static SCRL_spells; + protected func Initialize() { - var spells = [ABLA, MBOT, MFRB, MDBT, GVTY, MMTR, MLGT, CFAL, MSSH, MINV, MQKE, MARK, MFWV, MGFL, LAVS, MGPL, ICNL]; - if (mode == MODE_Festive) spells = [ABLA, MFWV, MICS, MLGT, MGPL, ICNL]; - - SetSpell(spells[Random(GetLength(spells))]); + SetSpell(SCRL_spells[Random(GetLength(SCRL_spells))]); return _inherited(); } + +public func SpellFailed(id idSpell, object pAimingClonk) +{ + // Spell canceled? Give back the scroll + SetSpell(idSpell); + if(pAimingClonk && !pAimingClonk->~RejectCollect(GetID(this), this)) + { + Enter(pAimingClonk, this); + } + pAimingClonk = 0; + return 0; +} + +global func SetScrollSpells(array spells) +{ + SCRL_spells = spells; +} diff --git a/TemplePushing.c4s/System.c4g/ShootInventory.c b/TemplePushing.c4s/System.c4g/ShootInventory.c index f310e61..b0260b5 100644 --- a/TemplePushing.c4s/System.c4g/ShootInventory.c +++ b/TemplePushing.c4s/System.c4g/ShootInventory.c @@ -11,6 +11,7 @@ #appendto SWOR #appendto SPER #appendto TSWB +#appendto METO protected func Activate(object clonk) { diff --git a/TemplePushing.c4s/System.c4g/Sun.c b/TemplePushing.c4s/System.c4g/Sun.c index 9a52923..7ad69a8 100644 --- a/TemplePushing.c4s/System.c4g/Sun.c +++ b/TemplePushing.c4s/System.c4g/Sun.c @@ -30,18 +30,4 @@ protected func TuWasBraves() // Sonnenposition anpassen BerechneSonne(); SetPosition(SonneX,SonneY); - // Nachts ausblenden - if(IsDay()) - SetVisibility (VIS_Owner()); - else - SetVisibility (VIS_None()); - // Bei Nähe zur Sonne blenden - var VektorDist=GibVektorDist(GetOwner()); - if(IsDay()) - { - var Gelbstich = BoundBy((500-VektorDist)/5,0,100); // Prozentangabe 0 = weit weg, 100 = nahe; 500 Pixel sind dabei "weit weg" - SetGamma (RGB(000+(30*Gelbstich)/100,000+(30*Gelbstich)/100,000), - RGB(128+(60*Gelbstich)/100,128+(60*Gelbstich)/100,128), - RGB(255,255,255), GammaRampe_Lenseflare()); - } }
\ No newline at end of file diff --git a/TemplePushing.c4s/System.c4g/Vanish.c b/TemplePushing.c4s/System.c4g/Vanish.c index 1ad5222..702b776 100644 --- a/TemplePushing.c4s/System.c4g/Vanish.c +++ b/TemplePushing.c4s/System.c4g/Vanish.c @@ -6,6 +6,7 @@ #appendto FARW #appendto TSWB #appendto SPER +#appendto ICE1 protected func Hit() { @@ -16,7 +17,7 @@ protected func Hit() } else if (GetID() == SPER) { - Schedule("CastParticles(\"MSpark\", 20, 5, 0, 0, 25, 30, RGBa(128,128,255,0), RGBa(255,255,255,127))", 49, 0, 0); + Schedule("CastParticles(\"MSpark\", 20, 5, 0, 0, 25, 30, RGBa(255,128,128,0), RGBa(255,128,128,127))", 49, 0, 0); Schedule("RemoveObject()", 50, 0, 0); } else if (GetID() == TSWB) diff --git a/TemplePushing.c4s/Teams.txt b/TemplePushing.c4s/Teams.txt index cb09560..42b2edd 100644 --- a/TemplePushing.c4s/Teams.txt +++ b/TemplePushing.c4s/Teams.txt @@ -17,3 +17,10 @@ TeamDistribution=Host PlrStartIndex=2 Color=16751360 IconSpec=TMS1:1 + + [Team] + id=3 + Name=$TeamThree$ + PlrStartIndex=3 + Color=6684927 + IconSpec=TMS1:2 diff --git a/TemplePushing.c4s/Title.png b/TemplePushing.c4s/Title.png Binary files differindex 7680d30..a00ad8a 100644 --- a/TemplePushing.c4s/Title.png +++ b/TemplePushing.c4s/Title.png diff --git a/TemplePushing.c4s/Title.txt b/TemplePushing.c4s/Title.txt index eb1e2ec..28159d3 100644 --- a/TemplePushing.c4s/Title.txt +++ b/TemplePushing.c4s/Title.txt @@ -1,2 +1,2 @@ -DE:Tempelschubsen r0.8b -US:Temple Pushing r0.8b +DE:Tempelschubsen r0.921 +US:Temple Pushing r0.921 diff --git a/TemplePushing.c4s/Version.txt b/TemplePushing.c4s/Version.txt index 03af619..50ddee8 100644 --- a/TemplePushing.c4s/Version.txt +++ b/TemplePushing.c4s/Version.txt @@ -1 +1 @@ -r0.8b +r0.921 |
