From f1ece16c08d8c01e1d49a25f0314a96c021e73cb Mon Sep 17 00:00:00 2001
From: Jan <>
Date: Fri, 10 Jul 2015 18:11:22 +0200
Subject: r0.921
---
TemplePushing.c4s/DescDE.rtf | 114 ++++++++++++---
TemplePushing.c4s/DescUS.rtf | 113 ++++++++++++---
.../Environment.c4d/HugeCrystal.c4d/ActMap.txt | 6 +
.../Environment.c4d/HugeCrystal.c4d/DefCore.txt | 16 +++
.../Environment.c4d/HugeCrystal.c4d/DescDE.txt | 1 +
.../Environment.c4d/HugeCrystal.c4d/DescUS.txt | 1 +
.../Environment.c4d/HugeCrystal.c4d/Graphics.png | Bin 0 -> 61200 bytes
.../Environment.c4d/HugeCrystal.c4d/Names.txt | 2 +
.../Environment.c4d/HugeCrystal.c4d/Script.c | 13 ++
.../Environment.c4d/LargeCrystal.c4d/ActMap.txt | 8 ++
.../Environment.c4d/LargeCrystal.c4d/DefCore.txt | 17 +++
.../Environment.c4d/LargeCrystal.c4d/DescDE.txt | 1 +
.../Environment.c4d/LargeCrystal.c4d/DescUS.txt | 1 +
.../Environment.c4d/LargeCrystal.c4d/Graphics.png | Bin 0 -> 1850 bytes
.../Environment.c4d/LargeCrystal.c4d/Names.txt | 2 +
.../Environment.c4d/LargeCrystal.c4d/Script.c | 22 +++
TemplePushing.c4s/Environment.c4d/Rain.ogg | Bin 0 -> 20309 bytes
TemplePushing.c4s/Environment.c4d/Rain.wav | Bin 381056 -> 0 bytes
TemplePushing.c4s/Graphics.c4g/GUIProgress.png | Bin 0 -> 632 bytes
TemplePushing.c4s/Graphics.c4g/Logo.png | Bin 0 -> 617 bytes
TemplePushing.c4s/LoaderCliffPushing.jpg | Bin 154784 -> 0 bytes
TemplePushing.c4s/LoaderTP.jpg | Bin 0 -> 154784 bytes
.../Airclaw.c4d/Claw.c4d/ActMap.txt | 41 ++++++
.../Airclaw.c4d/Claw.c4d/DefCore.txt | 17 +++
.../Airclaw.c4d/Claw.c4d/DescDE.txt | 1 +
.../Airclaw.c4d/Claw.c4d/DescUS.txt | 1 +
.../Airclaw.c4d/Claw.c4d/Graphics.png | Bin 0 -> 41178 bytes
.../Airclaw.c4d/Claw.c4d/Names.txt | 2 +
.../Airclaw.c4d/Claw.c4d/Script.c | 79 +++++++++++
.../AdditionalSpells.c4d/Airclaw.c4d/DefCore.txt | 10 ++
.../AdditionalSpells.c4d/Airclaw.c4d/DescDE.txt | 1 +
.../AdditionalSpells.c4d/Airclaw.c4d/DescUS.txt | 1 +
.../AdditionalSpells.c4d/Airclaw.c4d/Graphics.png | Bin 0 -> 7225 bytes
.../AdditionalSpells.c4d/Airclaw.c4d/Names.txt | 2 +
.../AdditionalSpells.c4d/Airclaw.c4d/Script.c | 46 ++++++
.../Airclaw.c4d/StringTblDE.txt | 2 +
.../Airclaw.c4d/StringTblUS.txt | 2 +
.../AssaultTeleport.c4d/DefCore.txt | 8 ++
.../AssaultTeleport.c4d/DescDE.txt | 1 +
.../AssaultTeleport.c4d/DescUS.txt | 1 +
.../AssaultTeleport.c4d/Graphics.png | Bin 0 -> 10192 bytes
.../AssaultTeleport.c4d/Names.txt | 2 +
.../AssaultTeleport.c4d/Script.c | 88 ++++++++++++
.../CrystalSpikes.c4d/DefCore.txt | 9 ++
.../CrystalSpikes.c4d/DescDE.txt | 1 +
.../CrystalSpikes.c4d/DescUS.txt | 1 +
.../CrystalSpikes.c4d/Graphics.png | Bin 0 -> 9129 bytes
.../CrystalSpikes.c4d/Kristall.c4d/ActMap.txt | 29 ++++
.../CrystalSpikes.c4d/Kristall.c4d/DefCore.txt | 18 +++
.../CrystalSpikes.c4d/Kristall.c4d/DescDE.txt | 1 +
.../CrystalSpikes.c4d/Kristall.c4d/DescUS.txt | 1 +
.../CrystalSpikes.c4d/Kristall.c4d/Graphics.png | Bin 0 -> 6637 bytes
.../CrystalSpikes.c4d/Kristall.c4d/GraphicsA.png | Bin 0 -> 6637 bytes
.../CrystalSpikes.c4d/Kristall.c4d/GraphicsB.png | Bin 0 -> 6637 bytes
.../CrystalSpikes.c4d/Kristall.c4d/GraphicsC.png | Bin 0 -> 6637 bytes
.../CrystalSpikes.c4d/Kristall.c4d/GraphicsD.png | Bin 0 -> 6637 bytes
.../Kristall.c4d/GraphicsMetl.png | Bin 0 -> 10340 bytes
.../CrystalSpikes.c4d/Kristall.c4d/Names.txt | 2 +
.../CrystalSpikes.c4d/Kristall.c4d/Overlay.png | Bin 0 -> 4284 bytes
.../CrystalSpikes.c4d/Kristall.c4d/OverlayA.png | Bin 0 -> 10404 bytes
.../CrystalSpikes.c4d/Kristall.c4d/OverlayB.png | Bin 0 -> 10707 bytes
.../CrystalSpikes.c4d/Kristall.c4d/OverlayC.png | Bin 0 -> 11362 bytes
.../CrystalSpikes.c4d/Kristall.c4d/OverlayD.png | Bin 0 -> 11638 bytes
.../CrystalSpikes.c4d/Kristall.c4d/OverlayMetl.png | Bin 0 -> 4493 bytes
.../CrystalSpikes.c4d/Kristall.c4d/Script.c | 109 ++++++++++++++
.../CrystalSpikes.c4d/Names.txt | 2 +
.../CrystalSpikes.c4d/Script.c | 105 ++++++++++++++
.../Deflection.c4d/DefCore.txt | 8 ++
.../AdditionalSpells.c4d/Deflection.c4d/DescDE.txt | 1 +
.../AdditionalSpells.c4d/Deflection.c4d/DescUS.txt | 1 +
.../Deflection.c4d/Graphics.png | Bin 0 -> 8232 bytes
.../AdditionalSpells.c4d/Deflection.c4d/Names.txt | 2 +
.../AdditionalSpells.c4d/Deflection.c4d/Script.c | 112 +++++++++++++++
.../Deflection.c4d/StringTblDE.txt | 1 +
.../Deflection.c4d/StringTblUS.txt | 1 +
.../Eisnadeln.c4d/Eisnadeln.c4d/Script.c | 6 +-
TemplePushing.c4s/Misc.c4d/Eliminated.wav | Bin 0 -> 1049296 bytes
TemplePushing.c4s/Misc.c4d/Magic1.wav | Bin 0 -> 50258 bytes
.../Misc.c4d/Particles.c4d/MSpark.c4d/Graphics.png | Bin 0 -> 10333 bytes
.../Misc.c4d/Particles.c4d/MSpark.c4d/Particle.txt | 15 ++
.../Misc.c4d/Particles.c4d/PSpark.c4d/Graphics.png | Bin 0 -> 274 bytes
.../Misc.c4d/Particles.c4d/PSpark.c4d/Particle.txt | 13 ++
.../Misc.c4d/SetupMenu.c4d/StringTblUS.txt | 2 +-
.../Misc.c4d/Snowball.c4d/DefCore.txt | 19 +++
TemplePushing.c4s/Misc.c4d/Snowball.c4d/DescDE.txt | 1 +
TemplePushing.c4s/Misc.c4d/Snowball.c4d/DescUS.txt | 1 +
.../Misc.c4d/Snowball.c4d/Graphics.png | Bin 0 -> 2493 bytes
TemplePushing.c4s/Misc.c4d/Snowball.c4d/Names.txt | 2 +
TemplePushing.c4s/Misc.c4d/Snowball.c4d/Script.c | 12 ++
.../Misc.c4d/Symbols.c4d/Teams.c4d/Graphics.png | Bin 16625 -> 29480 bytes
.../Misc.c4d/TSnowball.c4d/DefCore.txt | 19 ---
.../Misc.c4d/TSnowball.c4d/DescDE.txt | 1 -
.../Misc.c4d/TSnowball.c4d/DescUS.txt | 1 -
.../Misc.c4d/TSnowball.c4d/Graphics.png | Bin 2493 -> 0 bytes
TemplePushing.c4s/Misc.c4d/TSnowball.c4d/Names.txt | 2 -
TemplePushing.c4s/Misc.c4d/TSnowball.c4d/Script.c | 13 --
TemplePushing.c4s/Misc.c4d/Trumpet.wav | Bin 0 -> 435080 bytes
.../Modes.c4d/ApocalypticPushing.c4d/DefCore.txt | 4 +-
.../Modes.c4d/ApocalypticPushing.c4d/Names.txt | 4 +-
.../Modes.c4d/ClassicPushing.c4d/DefCore.txt | 2 +-
.../Modes.c4d/ClassicPushing.c4d/Names.txt | 4 +-
.../Modes.c4d/KnightlyPushing.c4d/DefCore.txt | 8 --
.../Modes.c4d/KnightlyPushing.c4d/DescDE.txt | 1 -
.../Modes.c4d/KnightlyPushing.c4d/DescUS.txt | 1 -
.../Modes.c4d/KnightlyPushing.c4d/Graphics.png | Bin 10871 -> 0 bytes
.../Modes.c4d/KnightlyPushing.c4d/Names.txt | 2 -
.../Modes.c4d/KnightlyPushing.c4d/Script.c | 5 -
.../Modes.c4d/MagicalPushing.c4d/Names.txt | 2 +-
.../Modes.c4d/MedievalPushing.c4d/DefCore.txt | 8 ++
.../Modes.c4d/MedievalPushing.c4d/DescDE.txt | 1 +
.../Modes.c4d/MedievalPushing.c4d/DescUS.txt | 1 +
.../Modes.c4d/MedievalPushing.c4d/Graphics.png | Bin 0 -> 10871 bytes
.../Modes.c4d/MedievalPushing.c4d/Names.txt | 2 +
.../Modes.c4d/MedievalPushing.c4d/Script.c | 5 +
.../Particles.c4d/MSpark.c4d/Graphics.png | Bin 10333 -> 0 bytes
.../Particles.c4d/MSpark.c4d/Particle.txt | 15 --
TemplePushing.c4s/Particles.c4d/Names.txt | 2 -
.../Particles.c4d/PSpark.c4d/Graphics.png | Bin 274 -> 0 bytes
.../Particles.c4d/PSpark.c4d/Particle.txt | 13 --
TemplePushing.c4s/Rules.c4d/OutFader.c4d/Script.c | 14 +-
TemplePushing.c4s/Scenario.txt | 7 +-
TemplePushing.c4s/Script.c | 149 ++++++++++++++++---
TemplePushing.c4s/SectClassic.c4g/Map.bmp | Bin 9594 -> 9594 bytes
TemplePushing.c4s/SectClassic.c4g/Scenarios.txt | 5 +-
TemplePushing.c4s/SectCloudTemple.c4g/Map.bmp | Bin 9594 -> 9594 bytes
TemplePushing.c4s/SectCloudTemple.c4g/Scenario.txt | 6 +-
.../SectLiquidTemple.c4g/Scenario.txt | 6 +-
TemplePushing.c4s/SectLobby.c4g/Scenario.txt | 2 +-
TemplePushing.c4s/Sections.c4d/Ambience.ogg | Bin 0 -> 106608 bytes
TemplePushing.c4s/Sections.c4d/Ambience.wav | Bin 161065 -> 0 bytes
TemplePushing.c4s/Sections.c4d/CloudAmbience.ogg | Bin 0 -> 68744 bytes
TemplePushing.c4s/Sections.c4d/CloudAmbience.wav | Bin 85925 -> 0 bytes
TemplePushing.c4s/Sections.c4d/ExtremeAmbience.ogg | Bin 0 -> 31525 bytes
TemplePushing.c4s/Sections.c4d/ExtremeAmbience.wav | Bin 32040 -> 0 bytes
TemplePushing.c4s/Sections.c4d/FestiveAmbience.ogg | Bin 0 -> 92448 bytes
TemplePushing.c4s/Sections.c4d/FestiveAmbience.wav | Bin 132335 -> 0 bytes
TemplePushing.c4s/Sections.c4d/LiquidAmbience.ogg | Bin 0 -> 61624 bytes
TemplePushing.c4s/Sections.c4d/LiquidAmbience.wav | Bin 927508 -> 0 bytes
.../Sections.c4d/SectClassic.c4d/Script.c | 30 ++--
.../SectCloudTemple.c4d/Fog3.c4d/Particle.txt | 2 +-
.../Sections.c4d/SectCloudTemple.c4d/Script.c | 56 ++++----
.../Sections.c4d/SectLiquidTemple.c4d/Script.c | 16 +--
TemplePushing.c4s/StringTblDE.txt | 2 +
TemplePushing.c4s/StringTblUS.txt | 4 +-
TemplePushing.c4s/System.c4g/Aimer.c | 47 ++++++
TemplePushing.c4s/System.c4g/ApocalypseEffects.c | 3 +-
TemplePushing.c4s/System.c4g/Arrowpack.c | 4 +-
TemplePushing.c4s/System.c4g/Blackout.c | 51 +++++++
TemplePushing.c4s/System.c4g/Clonk.c | 9 +-
TemplePushing.c4s/System.c4g/CurseFall.c | 43 ++++++
TemplePushing.c4s/System.c4g/Explode.c | 78 ++++++++++
TemplePushing.c4s/System.c4g/FireBall.c | 79 +++++++++++
TemplePushing.c4s/System.c4g/Freeze.c | 36 +++++
TemplePushing.c4s/System.c4g/Frostwave.c | 158 ++++++++++-----------
TemplePushing.c4s/System.c4g/Ice.c | 27 ++--
TemplePushing.c4s/System.c4g/IceBall.c | 97 +++++++++++++
TemplePushing.c4s/System.c4g/Icestrike.c | 38 +++++
TemplePushing.c4s/System.c4g/LavaRain.c | 1 -
TemplePushing.c4s/System.c4g/Lenseflare.c | 65 ---------
TemplePushing.c4s/System.c4g/MagicLightningBolt.c | 65 +++++++++
TemplePushing.c4s/System.c4g/Plague.c | 25 +++-
TemplePushing.c4s/System.c4g/Rain.c | 1 -
TemplePushing.c4s/System.c4g/RotationHelper.c | 10 ++
TemplePushing.c4s/System.c4g/Scroll.c | 24 +++-
TemplePushing.c4s/System.c4g/ShootInventory.c | 1 +
TemplePushing.c4s/System.c4g/Sun.c | 14 --
TemplePushing.c4s/System.c4g/Vanish.c | 3 +-
TemplePushing.c4s/Teams.txt | 7 +
TemplePushing.c4s/Title.png | Bin 51657 -> 52782 bytes
TemplePushing.c4s/Title.txt | 4 +-
TemplePushing.c4s/Version.txt | 2 +-
171 files changed, 1979 insertions(+), 425 deletions(-)
create mode 100644 TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/ActMap.txt
create mode 100644 TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/DefCore.txt
create mode 100644 TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/DescDE.txt
create mode 100644 TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/DescUS.txt
create mode 100644 TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/Graphics.png
create mode 100644 TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/Names.txt
create mode 100644 TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/Script.c
create mode 100644 TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/ActMap.txt
create mode 100644 TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/DefCore.txt
create mode 100644 TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/DescDE.txt
create mode 100644 TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/DescUS.txt
create mode 100644 TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/Graphics.png
create mode 100644 TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/Names.txt
create mode 100644 TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/Script.c
create mode 100644 TemplePushing.c4s/Environment.c4d/Rain.ogg
delete mode 100644 TemplePushing.c4s/Environment.c4d/Rain.wav
create mode 100644 TemplePushing.c4s/Graphics.c4g/GUIProgress.png
create mode 100644 TemplePushing.c4s/Graphics.c4g/Logo.png
delete mode 100644 TemplePushing.c4s/LoaderCliffPushing.jpg
create mode 100644 TemplePushing.c4s/LoaderTP.jpg
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/ActMap.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/DefCore.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/DescDE.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/DescUS.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/Graphics.png
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/Names.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/Script.c
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/DefCore.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/DescDE.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/DescUS.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Graphics.png
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Names.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Script.c
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/StringTblDE.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/StringTblUS.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/DefCore.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/DescDE.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/DescUS.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/Graphics.png
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/Names.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/Script.c
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/DefCore.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/DescDE.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/DescUS.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Graphics.png
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/ActMap.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/DefCore.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/DescDE.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/DescUS.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/Graphics.png
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsA.png
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsB.png
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsC.png
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsD.png
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsMetl.png
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/Names.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/Overlay.png
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayA.png
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayB.png
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayC.png
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayD.png
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayMetl.png
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/Script.c
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Names.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Script.c
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/DefCore.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/DescDE.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/DescUS.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Graphics.png
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Names.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Script.c
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/StringTblDE.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/StringTblUS.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/Eliminated.wav
create mode 100644 TemplePushing.c4s/Misc.c4d/Magic1.wav
create mode 100644 TemplePushing.c4s/Misc.c4d/Particles.c4d/MSpark.c4d/Graphics.png
create mode 100644 TemplePushing.c4s/Misc.c4d/Particles.c4d/MSpark.c4d/Particle.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/Particles.c4d/PSpark.c4d/Graphics.png
create mode 100644 TemplePushing.c4s/Misc.c4d/Particles.c4d/PSpark.c4d/Particle.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/Snowball.c4d/DefCore.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/Snowball.c4d/DescDE.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/Snowball.c4d/DescUS.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/Snowball.c4d/Graphics.png
create mode 100644 TemplePushing.c4s/Misc.c4d/Snowball.c4d/Names.txt
create mode 100644 TemplePushing.c4s/Misc.c4d/Snowball.c4d/Script.c
delete mode 100644 TemplePushing.c4s/Misc.c4d/TSnowball.c4d/DefCore.txt
delete mode 100644 TemplePushing.c4s/Misc.c4d/TSnowball.c4d/DescDE.txt
delete mode 100644 TemplePushing.c4s/Misc.c4d/TSnowball.c4d/DescUS.txt
delete mode 100644 TemplePushing.c4s/Misc.c4d/TSnowball.c4d/Graphics.png
delete mode 100644 TemplePushing.c4s/Misc.c4d/TSnowball.c4d/Names.txt
delete mode 100644 TemplePushing.c4s/Misc.c4d/TSnowball.c4d/Script.c
create mode 100644 TemplePushing.c4s/Misc.c4d/Trumpet.wav
delete mode 100644 TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/DefCore.txt
delete mode 100644 TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/DescDE.txt
delete mode 100644 TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/DescUS.txt
delete mode 100644 TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/Graphics.png
delete mode 100644 TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/Names.txt
delete mode 100644 TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/Script.c
create mode 100644 TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/DefCore.txt
create mode 100644 TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/DescDE.txt
create mode 100644 TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/DescUS.txt
create mode 100644 TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/Graphics.png
create mode 100644 TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/Names.txt
create mode 100644 TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/Script.c
delete mode 100644 TemplePushing.c4s/Particles.c4d/MSpark.c4d/Graphics.png
delete mode 100644 TemplePushing.c4s/Particles.c4d/MSpark.c4d/Particle.txt
delete mode 100644 TemplePushing.c4s/Particles.c4d/Names.txt
delete mode 100644 TemplePushing.c4s/Particles.c4d/PSpark.c4d/Graphics.png
delete mode 100644 TemplePushing.c4s/Particles.c4d/PSpark.c4d/Particle.txt
create mode 100644 TemplePushing.c4s/Sections.c4d/Ambience.ogg
delete mode 100644 TemplePushing.c4s/Sections.c4d/Ambience.wav
create mode 100644 TemplePushing.c4s/Sections.c4d/CloudAmbience.ogg
delete mode 100644 TemplePushing.c4s/Sections.c4d/CloudAmbience.wav
create mode 100644 TemplePushing.c4s/Sections.c4d/ExtremeAmbience.ogg
delete mode 100644 TemplePushing.c4s/Sections.c4d/ExtremeAmbience.wav
create mode 100644 TemplePushing.c4s/Sections.c4d/FestiveAmbience.ogg
delete mode 100644 TemplePushing.c4s/Sections.c4d/FestiveAmbience.wav
create mode 100644 TemplePushing.c4s/Sections.c4d/LiquidAmbience.ogg
delete mode 100644 TemplePushing.c4s/Sections.c4d/LiquidAmbience.wav
create mode 100644 TemplePushing.c4s/System.c4g/Aimer.c
create mode 100644 TemplePushing.c4s/System.c4g/Blackout.c
create mode 100644 TemplePushing.c4s/System.c4g/CurseFall.c
create mode 100644 TemplePushing.c4s/System.c4g/Explode.c
create mode 100644 TemplePushing.c4s/System.c4g/FireBall.c
create mode 100644 TemplePushing.c4s/System.c4g/Freeze.c
create mode 100644 TemplePushing.c4s/System.c4g/IceBall.c
create mode 100644 TemplePushing.c4s/System.c4g/Icestrike.c
delete mode 100644 TemplePushing.c4s/System.c4g/Lenseflare.c
create mode 100644 TemplePushing.c4s/System.c4g/MagicLightningBolt.c
create mode 100644 TemplePushing.c4s/System.c4g/RotationHelper.c
(limited to 'TemplePushing.c4s')
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
new file mode 100644
index 0000000..d8ace61
Binary files /dev/null and b/TemplePushing.c4s/Environment.c4d/HugeCrystal.c4d/Graphics.png differ
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
new file mode 100644
index 0000000..2debc0e
Binary files /dev/null and b/TemplePushing.c4s/Environment.c4d/LargeCrystal.c4d/Graphics.png differ
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
new file mode 100644
index 0000000..d7dc2cc
Binary files /dev/null and b/TemplePushing.c4s/Environment.c4d/Rain.ogg differ
diff --git a/TemplePushing.c4s/Environment.c4d/Rain.wav b/TemplePushing.c4s/Environment.c4d/Rain.wav
deleted file mode 100644
index aee9dd8..0000000
Binary files a/TemplePushing.c4s/Environment.c4d/Rain.wav and /dev/null differ
diff --git a/TemplePushing.c4s/Graphics.c4g/GUIProgress.png b/TemplePushing.c4s/Graphics.c4g/GUIProgress.png
new file mode 100644
index 0000000..87e6177
Binary files /dev/null and b/TemplePushing.c4s/Graphics.c4g/GUIProgress.png differ
diff --git a/TemplePushing.c4s/Graphics.c4g/Logo.png b/TemplePushing.c4s/Graphics.c4g/Logo.png
new file mode 100644
index 0000000..8a370ba
Binary files /dev/null and b/TemplePushing.c4s/Graphics.c4g/Logo.png differ
diff --git a/TemplePushing.c4s/LoaderCliffPushing.jpg b/TemplePushing.c4s/LoaderCliffPushing.jpg
deleted file mode 100644
index e714d65..0000000
Binary files a/TemplePushing.c4s/LoaderCliffPushing.jpg and /dev/null differ
diff --git a/TemplePushing.c4s/LoaderTP.jpg b/TemplePushing.c4s/LoaderTP.jpg
new file mode 100644
index 0000000..e714d65
Binary files /dev/null and b/TemplePushing.c4s/LoaderTP.jpg differ
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
new file mode 100644
index 0000000..5f2fe9f
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/Graphics.png differ
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
new file mode 100644
index 0000000..54db3c5
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Graphics.png differ
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
new file mode 100644
index 0000000..cd389c0
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/AssaultTeleport.c4d/Graphics.png differ
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
new file mode 100644
index 0000000..de7ae74
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Graphics.png differ
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
new file mode 100644
index 0000000..f490a20
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/Graphics.png differ
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
new file mode 100644
index 0000000..f490a20
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsA.png differ
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
new file mode 100644
index 0000000..f490a20
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsB.png differ
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
new file mode 100644
index 0000000..f490a20
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsC.png differ
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
new file mode 100644
index 0000000..f490a20
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsD.png differ
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
new file mode 100644
index 0000000..14a097b
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/GraphicsMetl.png differ
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
new file mode 100644
index 0000000..a7abc6d
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/Overlay.png differ
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
new file mode 100644
index 0000000..8358372
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayA.png differ
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
new file mode 100644
index 0000000..57755c3
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayB.png differ
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
new file mode 100644
index 0000000..1aa4791
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayC.png differ
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
new file mode 100644
index 0000000..3afb2bf
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayD.png differ
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
new file mode 100644
index 0000000..5a3e193
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/CrystalSpikes.c4d/Kristall.c4d/OverlayMetl.png differ
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
new file mode 100644
index 0000000..bb77e89
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Deflection.c4d/Graphics.png differ
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
new file mode 100644
index 0000000..8bc34cd
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/Eliminated.wav differ
diff --git a/TemplePushing.c4s/Misc.c4d/Magic1.wav b/TemplePushing.c4s/Misc.c4d/Magic1.wav
new file mode 100644
index 0000000..560441f
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/Magic1.wav differ
diff --git a/TemplePushing.c4s/Misc.c4d/Particles.c4d/MSpark.c4d/Graphics.png b/TemplePushing.c4s/Misc.c4d/Particles.c4d/MSpark.c4d/Graphics.png
new file mode 100644
index 0000000..dee58d8
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/Particles.c4d/MSpark.c4d/Graphics.png differ
diff --git a/TemplePushing.c4s/Misc.c4d/Particles.c4d/MSpark.c4d/Particle.txt b/TemplePushing.c4s/Misc.c4d/Particles.c4d/MSpark.c4d/Particle.txt
new file mode 100644
index 0000000..6ea8521
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/Particles.c4d/MSpark.c4d/Particle.txt
@@ -0,0 +1,15 @@
+[Particle]
+Name=MSpark
+MaxCount=2400
+InitFn=StdInit
+ExecFn=StdExec
+DrawFn=Std
+Face=0,0,32,32,-16,-16
+Delay=1
+Repeats=3
+Reverse=1
+GravityAcc=50
+FadeOutLen=4
+FadeOutDelay=4
+AlphaFade=0
+Additive=1
diff --git a/TemplePushing.c4s/Misc.c4d/Particles.c4d/PSpark.c4d/Graphics.png b/TemplePushing.c4s/Misc.c4d/Particles.c4d/PSpark.c4d/Graphics.png
new file mode 100644
index 0000000..4d145c7
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/Particles.c4d/PSpark.c4d/Graphics.png differ
diff --git a/TemplePushing.c4s/Misc.c4d/Particles.c4d/PSpark.c4d/Particle.txt b/TemplePushing.c4s/Misc.c4d/Particles.c4d/PSpark.c4d/Particle.txt
new file mode 100644
index 0000000..e40a06e
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/Particles.c4d/PSpark.c4d/Particle.txt
@@ -0,0 +1,13 @@
+[Particle]
+Name=PSpark
+MaxCount=16000
+InitFn=StdInit
+ExecFn=StdExec
+DrawFn=Std
+Face=0,0,12,12,-6,-6
+Delay=0
+Repeats=1
+GravityAcc=0
+AlphaFade=4
+Additive=1
+Attach=1
\ No newline at end of file
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=Classic
ModeMagic=Magical
ModeKnightly=Medieval
ModeApocalyptic=Apocalyptical
-ModeFestive=Winterly
+ModeFestive=Winterly
Back=Back
Done=Done
Relaunches=Relaunches
diff --git a/TemplePushing.c4s/Misc.c4d/Snowball.c4d/DefCore.txt b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/DefCore.txt
new file mode 100644
index 0000000..b4a5913
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/DefCore.txt
@@ -0,0 +1,19 @@
+[DefCore]
+id=TSWB
+Version=4,9,8
+Name=Snowball
+Category=C4D_Object
+Width=6
+Height=6
+Offset=-3,-3
+Vertices=4
+VertexX=2,-2,-2,2
+VertexY=2,-2,2,-2
+VertexFriction=100,100,100,100
+Mass=22
+Components=IICE=2
+Picture=6,0,32,32
+Collectible=1
+Rotate=1
+StretchGrowth=1
+Fragile=1
diff --git a/TemplePushing.c4s/Misc.c4d/Snowball.c4d/DescDE.txt b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/DescDE.txt
new file mode 100644
index 0000000..c369562
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/DescDE.txt
@@ -0,0 +1 @@
+Eine leichte aber weitreichende Wurfwaffe, die aus Schnee ausgegraben werden kann.
diff --git a/TemplePushing.c4s/Misc.c4d/Snowball.c4d/DescUS.txt b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/DescUS.txt
new file mode 100644
index 0000000..81f5b9f
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/DescUS.txt
@@ -0,0 +1 @@
+A light throwing weapon shaped from snow.
\ No newline at end of file
diff --git a/TemplePushing.c4s/Misc.c4d/Snowball.c4d/Graphics.png b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/Graphics.png
new file mode 100644
index 0000000..431e6ff
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/Graphics.png differ
diff --git a/TemplePushing.c4s/Misc.c4d/Snowball.c4d/Names.txt b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/Names.txt
new file mode 100644
index 0000000..cc0cd4f
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Schneeball
+US:Snowball
diff --git a/TemplePushing.c4s/Misc.c4d/Snowball.c4d/Script.c b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/Script.c
new file mode 100644
index 0000000..f5bf91b
--- /dev/null
+++ b/TemplePushing.c4s/Misc.c4d/Snowball.c4d/Script.c
@@ -0,0 +1,12 @@
+/*-- Schneeball --*/
+
+#strict 2
+
+#include ICE1
+#include SNWB
+
+protected func Departure(object container)
+{
+ // Throw only if the container was a clonk
+ if (!(container->GetOCF() & OCF_CrewMember)) return 1;
+}
diff --git a/TemplePushing.c4s/Misc.c4d/Symbols.c4d/Teams.c4d/Graphics.png b/TemplePushing.c4s/Misc.c4d/Symbols.c4d/Teams.c4d/Graphics.png
index bcce561..08ecd5a 100644
Binary files a/TemplePushing.c4s/Misc.c4d/Symbols.c4d/Teams.c4d/Graphics.png and b/TemplePushing.c4s/Misc.c4d/Symbols.c4d/Teams.c4d/Graphics.png differ
diff --git a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/DefCore.txt b/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/DefCore.txt
deleted file mode 100644
index 468365a..0000000
--- a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/DefCore.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-[DefCore]
-id=TSWB
-Version=4,9,8
-Name=Snowball
-Category=C4D_Object
-Width=6
-Height=6
-Offset=-3,-3
-Vertices=4
-VertexX=2,-2,-2,2
-VertexY=2,-2,2,-2
-VertexFriction=100,100,100,100
-Mass=20
-Components=IICE=2
-Picture=6,0,32,32
-Collectible=1
-Rotate=1
-StretchGrowth=1
-Fragile=1
diff --git a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/DescDE.txt b/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/DescDE.txt
deleted file mode 100644
index c369562..0000000
--- a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/DescDE.txt
+++ /dev/null
@@ -1 +0,0 @@
-Eine leichte aber weitreichende Wurfwaffe, die aus Schnee ausgegraben werden kann.
diff --git a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/DescUS.txt b/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/DescUS.txt
deleted file mode 100644
index 81f5b9f..0000000
--- a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/DescUS.txt
+++ /dev/null
@@ -1 +0,0 @@
-A light throwing weapon shaped from snow.
\ No newline at end of file
diff --git a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/Graphics.png b/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/Graphics.png
deleted file mode 100644
index 431e6ff..0000000
Binary files a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/Graphics.png and /dev/null differ
diff --git a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/Names.txt b/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/Names.txt
deleted file mode 100644
index cc0cd4f..0000000
--- a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/Names.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-DE:Schneeball
-US:Snowball
diff --git a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/Script.c b/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/Script.c
deleted file mode 100644
index 6fef017..0000000
--- a/TemplePushing.c4s/Misc.c4d/TSnowball.c4d/Script.c
+++ /dev/null
@@ -1,13 +0,0 @@
-/*-- Schneeball --*/
-
-#strict 2
-
-#include ICE1
-#include SNWB
-
-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/Trumpet.wav b/TemplePushing.c4s/Misc.c4d/Trumpet.wav
new file mode 100644
index 0000000..8d8f8bd
Binary files /dev/null and b/TemplePushing.c4s/Misc.c4d/Trumpet.wav differ
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/DefCore.txt b/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/DefCore.txt
deleted file mode 100644
index a25e551..0000000
--- a/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/DefCore.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-[DefCore]
-id=MKNI
-Version=4,9,8
-Name=KnightlyPushing
-Category=C4D_StaticBack
-Width=1
-Height=1
-Picture=0,0,64,64
diff --git a/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/DescDE.txt b/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/DescDE.txt
deleted file mode 100644
index cb214af..0000000
--- a/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/DescDE.txt
+++ /dev/null
@@ -1 +0,0 @@
-Anstatt der üblichen Waffen kommen in diesem Modus eher mittelalterliche Tötungsutensilien ins Spiel.
diff --git a/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/DescUS.txt b/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/DescUS.txt
deleted file mode 100644
index 1d780af..0000000
--- a/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/DescUS.txt
+++ /dev/null
@@ -1 +0,0 @@
-Medieval weapons, enemies and narrow landscapes – what's not to love?
diff --git a/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/Graphics.png b/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/Graphics.png
deleted file mode 100644
index dbcf80d..0000000
Binary files a/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/Graphics.png and /dev/null differ
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/KnightlyPushing.c4d/Script.c b/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/Script.c
deleted file mode 100644
index d7bff28..0000000
--- a/TemplePushing.c4s/Modes.c4d/KnightlyPushing.c4d/Script.c
+++ /dev/null
@@ -1,5 +0,0 @@
-/*-- Knightly --*/
-
-#strict 2
-
-protected func Activate(int player) { MessageWindow(GetDesc(), player); }
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/MedievalPushing.c4d/DefCore.txt b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/DefCore.txt
new file mode 100644
index 0000000..a25e551
--- /dev/null
+++ b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/DefCore.txt
@@ -0,0 +1,8 @@
+[DefCore]
+id=MKNI
+Version=4,9,8
+Name=KnightlyPushing
+Category=C4D_StaticBack
+Width=1
+Height=1
+Picture=0,0,64,64
diff --git a/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/DescDE.txt b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/DescDE.txt
new file mode 100644
index 0000000..cb214af
--- /dev/null
+++ b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/DescDE.txt
@@ -0,0 +1 @@
+Anstatt der üblichen Waffen kommen in diesem Modus eher mittelalterliche Tötungsutensilien ins Spiel.
diff --git a/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/DescUS.txt b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/DescUS.txt
new file mode 100644
index 0000000..1d780af
--- /dev/null
+++ b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/DescUS.txt
@@ -0,0 +1 @@
+Medieval weapons, enemies and narrow landscapes – what's not to love?
diff --git a/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/Graphics.png b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/Graphics.png
new file mode 100644
index 0000000..dbcf80d
Binary files /dev/null and b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/Graphics.png differ
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/MedievalPushing.c4d/Script.c b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/Script.c
new file mode 100644
index 0000000..8f9e261
--- /dev/null
+++ b/TemplePushing.c4s/Modes.c4d/MedievalPushing.c4d/Script.c
@@ -0,0 +1,5 @@
+/*-- Medieval --*/
+
+#strict 2
+
+protected func Activate(int player) { MessageWindow(GetDesc(), player); }
diff --git a/TemplePushing.c4s/Particles.c4d/MSpark.c4d/Graphics.png b/TemplePushing.c4s/Particles.c4d/MSpark.c4d/Graphics.png
deleted file mode 100644
index dee58d8..0000000
Binary files a/TemplePushing.c4s/Particles.c4d/MSpark.c4d/Graphics.png and /dev/null differ
diff --git a/TemplePushing.c4s/Particles.c4d/MSpark.c4d/Particle.txt b/TemplePushing.c4s/Particles.c4d/MSpark.c4d/Particle.txt
deleted file mode 100644
index 6ea8521..0000000
--- a/TemplePushing.c4s/Particles.c4d/MSpark.c4d/Particle.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-[Particle]
-Name=MSpark
-MaxCount=2400
-InitFn=StdInit
-ExecFn=StdExec
-DrawFn=Std
-Face=0,0,32,32,-16,-16
-Delay=1
-Repeats=3
-Reverse=1
-GravityAcc=50
-FadeOutLen=4
-FadeOutDelay=4
-AlphaFade=0
-Additive=1
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/Particles.c4d/PSpark.c4d/Graphics.png b/TemplePushing.c4s/Particles.c4d/PSpark.c4d/Graphics.png
deleted file mode 100644
index 4d145c7..0000000
Binary files a/TemplePushing.c4s/Particles.c4d/PSpark.c4d/Graphics.png and /dev/null differ
diff --git a/TemplePushing.c4s/Particles.c4d/PSpark.c4d/Particle.txt b/TemplePushing.c4s/Particles.c4d/PSpark.c4d/Particle.txt
deleted file mode 100644
index e40a06e..0000000
--- a/TemplePushing.c4s/Particles.c4d/PSpark.c4d/Particle.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-[Particle]
-Name=PSpark
-MaxCount=16000
-InitFn=StdInit
-ExecFn=StdExec
-DrawFn=Std
-Face=0,0,12,12,-6,-6
-Delay=0
-Repeats=1
-GravityAcc=0
-AlphaFade=4
-Additive=1
-Attach=1
\ No newline at end of file
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("Team %s", GetTeamColor(team), GetTeamName(team)), SORT_NAMECOL_Team);
+ SetScoreboardData(TeamRow(team), SBRD_NameCol, Format("Team %s", 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
index 3f5e325..33fd91a 100644
Binary files a/TemplePushing.c4s/SectClassic.c4g/Map.bmp and b/TemplePushing.c4s/SectClassic.c4g/Map.bmp differ
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
index ba8a1d2..c5158a1 100644
Binary files a/TemplePushing.c4s/SectCloudTemple.c4g/Map.bmp and b/TemplePushing.c4s/SectCloudTemple.c4g/Map.bmp differ
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
new file mode 100644
index 0000000..1f2bb70
Binary files /dev/null and b/TemplePushing.c4s/Sections.c4d/Ambience.ogg differ
diff --git a/TemplePushing.c4s/Sections.c4d/Ambience.wav b/TemplePushing.c4s/Sections.c4d/Ambience.wav
deleted file mode 100644
index de426a5..0000000
Binary files a/TemplePushing.c4s/Sections.c4d/Ambience.wav and /dev/null differ
diff --git a/TemplePushing.c4s/Sections.c4d/CloudAmbience.ogg b/TemplePushing.c4s/Sections.c4d/CloudAmbience.ogg
new file mode 100644
index 0000000..b6e01a6
Binary files /dev/null and b/TemplePushing.c4s/Sections.c4d/CloudAmbience.ogg differ
diff --git a/TemplePushing.c4s/Sections.c4d/CloudAmbience.wav b/TemplePushing.c4s/Sections.c4d/CloudAmbience.wav
deleted file mode 100644
index 43f270a..0000000
Binary files a/TemplePushing.c4s/Sections.c4d/CloudAmbience.wav and /dev/null differ
diff --git a/TemplePushing.c4s/Sections.c4d/ExtremeAmbience.ogg b/TemplePushing.c4s/Sections.c4d/ExtremeAmbience.ogg
new file mode 100644
index 0000000..15275e0
Binary files /dev/null and b/TemplePushing.c4s/Sections.c4d/ExtremeAmbience.ogg differ
diff --git a/TemplePushing.c4s/Sections.c4d/ExtremeAmbience.wav b/TemplePushing.c4s/Sections.c4d/ExtremeAmbience.wav
deleted file mode 100644
index 4861190..0000000
Binary files a/TemplePushing.c4s/Sections.c4d/ExtremeAmbience.wav and /dev/null differ
diff --git a/TemplePushing.c4s/Sections.c4d/FestiveAmbience.ogg b/TemplePushing.c4s/Sections.c4d/FestiveAmbience.ogg
new file mode 100644
index 0000000..40438f7
Binary files /dev/null and b/TemplePushing.c4s/Sections.c4d/FestiveAmbience.ogg differ
diff --git a/TemplePushing.c4s/Sections.c4d/FestiveAmbience.wav b/TemplePushing.c4s/Sections.c4d/FestiveAmbience.wav
deleted file mode 100644
index 7b8ca6b..0000000
Binary files a/TemplePushing.c4s/Sections.c4d/FestiveAmbience.wav and /dev/null differ
diff --git a/TemplePushing.c4s/Sections.c4d/LiquidAmbience.ogg b/TemplePushing.c4s/Sections.c4d/LiquidAmbience.ogg
new file mode 100644
index 0000000..f8dd22c
Binary files /dev/null and b/TemplePushing.c4s/Sections.c4d/LiquidAmbience.ogg differ
diff --git a/TemplePushing.c4s/Sections.c4d/LiquidAmbience.wav b/TemplePushing.c4s/Sections.c4d/LiquidAmbience.wav
deleted file mode 100644
index e601b3e..0000000
Binary files a/TemplePushing.c4s/Sections.c4d/LiquidAmbience.wav and /dev/null differ
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 %d Relaunches.
MsgOneRelaunch=Du hast nur noch einen Relaunch.
MsgLastRelaunch=Das war dein letzter Relaunch.
@@ -9,3 +10,4 @@ Kills=Kills
WinScore=Ziel
MsgDeathmatchWin=Team %s 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 %d relaunches remaining.
-MsgOneRelaunch=You only have one relaunch remaining.
+MsgOneRelaunch=You only have one relaunch remaining.
MsgLastRelaunch=This was your last relaunch.
Death=Out
Load=Loading Landscape...
@@ -9,4 +10,5 @@ Kills=Kills
WinScore=Goal
MsgDeathmatchWin=Team %s 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 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
index 7680d30..a00ad8a 100644
Binary files a/TemplePushing.c4s/Title.png and b/TemplePushing.c4s/Title.png differ
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
--
cgit v1.2.3-54-g00ecf