summaryrefslogtreecommitdiffstats
path: root/TemplePushing.c4s
diff options
context:
space:
mode:
authorJan <>2015-02-02 17:05:03 +0100
committerJan <_>2015-07-10 17:44:33 +0200
commitf5a80c493dcefbc8f45987b8fd454d974f739cf7 (patch)
tree724195326f990379940b35e0f5eaacb37e4860bc /TemplePushing.c4s
downloadtempelschubsen-f5a80c493dcefbc8f45987b8fd454d974f739cf7.tar.gz
tempelschubsen-f5a80c493dcefbc8f45987b8fd454d974f739cf7.zip
TemplePushBeta.c4s
Diffstat (limited to 'TemplePushing.c4s')
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Ambiente.wavbin0 -> 1608340 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/FireBomb.c20
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/DefCore.txt10
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/Graphics.pngbin0 -> 8828 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/Script.c31
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/DefCore.txt8
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Graphics.pngbin0 -> 9117 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Script.c86
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Wave.c4d/Graphics.pngbin0 -> 5362 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Wave.c4d/Particle.txt13
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Maplang.bmpbin0 -> 33402 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Mapsymm.bmpbin0 -> 9594 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/DefCore.txt22
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/DefCore.txt22
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/Graphics.pngbin0 -> 4655 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/Script.c25
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/Title.pngbin0 -> 29757 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/Graphics.pngbin0 -> 4696 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/Script.c54
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/Title.pngbin0 -> 29834 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Sky.jpgbin0 -> 91525 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/ExtremeAmbiente.wavbin0 -> 929500 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/DefCore.txt7
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/DefCore.txt8
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/Graphics.pngbin0 -> 11259 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/Script.c23
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Graphics.pngbin0 -> 177 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Rain.c4d/Graphics.pngbin0 -> 528 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Rain.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Rain.c4d/Particle.txt13
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Rain.c4d/Rain.wavbin0 -> 381056 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Script.c22
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Thunders1.wavbin0 -> 73868 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Thunders2.wavbin0 -> 34716 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/DefCore.txt9
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/Graphics.pngbin0 -> 6847 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/Script.c7
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/DefCore.txt9
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/Graphics.pngbin0 -> 7358 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/Script.c7
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/DefCore.txt9
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/Graphics.pngbin0 -> 6841 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/Script.c5
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/DefCore.txt9
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/Graphics.pngbin0 -> 10487 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/ActMap.txt4
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/DefCore.txt12
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/Graphics.pngbin0 -> 206 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/Script.c177
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/DefCore.txt8
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/Graphics.pngbin0 -> 9715 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/Script.c29
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/DefCore.txt9
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/Graphics.pngbin0 -> 10487 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/DefCore.txt8
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/Graphics.pngbin0 -> 9715 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/Script.c21
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/DefCore.txt9
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Graphics.pngbin0 -> 5838 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Script.c28
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/ActMap.txt4
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/DefCore.txt12
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/Graphics.pngbin0 -> 206 bytes
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/Script.c177
-rw-r--r--TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Title.txt2
-rw-r--r--TemplePushing.c4s/DescDE.rtf25
-rw-r--r--TemplePushing.c4s/DescUS.rtf25
-rw-r--r--TemplePushing.c4s/Icon.pngbin0 -> 10271 bytes
-rw-r--r--TemplePushing.c4s/LoaderCliffPushing.jpgbin0 -> 154784 bytes
-rw-r--r--TemplePushing.c4s/Locals.c4d/Brick.c4d/ActMap.txt6
-rw-r--r--TemplePushing.c4s/Locals.c4d/Brick.c4d/DefCore.txt26
-rw-r--r--TemplePushing.c4s/Locals.c4d/Brick.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/Locals.c4d/Brick.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/Locals.c4d/Brick.c4d/Graphics.pngbin0 -> 5188 bytes
-rw-r--r--TemplePushing.c4s/Locals.c4d/Brick.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/Locals.c4d/Brick.c4d/Script.c30
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/ActMap.txt8
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/DefCore.txt24
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/Graphics.pngbin0 -> 26534 bytes
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/Script.c176
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/StringTblDE.txt4
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/StringTblUS.txt4
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/Symbols.c4d/DefCore.txt8
-rw-r--r--TemplePushing.c4s/Locals.c4d/Cannon.c4d/Symbols.c4d/Graphics.pngbin0 -> 20663 bytes
-rw-r--r--TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/ActMap.txt7
-rw-r--r--TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DefCore.txt10
-rw-r--r--TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Graphics.pngbin0 -> 6308 bytes
-rw-r--r--TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Script.c28
-rw-r--r--TemplePushing.c4s/Locals.c4d/Fog.c4d/Graphics.pngbin0 -> 4583 bytes
-rw-r--r--TemplePushing.c4s/Locals.c4d/Fog.c4d/Particle.txt12
-rw-r--r--TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/ActMap.txt129
-rw-r--r--TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DefCore.txt11
-rw-r--r--TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Graphics.pngbin0 -> 81997 bytes
-rw-r--r--TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Script.c183
-rw-r--r--TemplePushing.c4s/Locals.c4d/Sonne.c4d/ActMap.txt17
-rw-r--r--TemplePushing.c4s/Locals.c4d/Sonne.c4d/DefCore.txt11
-rw-r--r--TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescDE.txt1
-rw-r--r--TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescUS.txt1
-rw-r--r--TemplePushing.c4s/Locals.c4d/Sonne.c4d/Graphics.pngbin0 -> 48292 bytes
-rw-r--r--TemplePushing.c4s/Locals.c4d/Sonne.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/Locals.c4d/Sonne.c4d/Script.c191
-rw-r--r--TemplePushing.c4s/Map.bmpbin0 -> 9594 bytes
-rw-r--r--TemplePushing.c4s/Material.c4g/Brick.c4m8
-rw-r--r--TemplePushing.c4s/Material.c4g/Brick.pngbin0 -> 6758 bytes
-rw-r--r--TemplePushing.c4s/Material.c4g/DarkenB.pngbin0 -> 386 bytes
-rw-r--r--TemplePushing.c4s/Material.c4g/Fleckig.pngbin0 -> 712 bytes
-rw-r--r--TemplePushing.c4s/Material.c4g/RoughDark.pngbin0 -> 12912 bytes
-rw-r--r--TemplePushing.c4s/Material.c4g/SmallRock.pngbin0 -> 27773 bytes
-rw-r--r--TemplePushing.c4s/Material.c4g/TexMap.txt80
-rw-r--r--TemplePushing.c4s/Material.c4g/TransB.pngbin0 -> 642 bytes
-rw-r--r--TemplePushing.c4s/Material.c4g/Wall.c4m7
-rw-r--r--TemplePushing.c4s/Material.c4g/WallStuff.pngbin0 -> 33673 bytes
-rw-r--r--TemplePushing.c4s/Scenario.txtbin0 -> 3800 bytes
-rw-r--r--TemplePushing.c4s/Script.c389
-rw-r--r--TemplePushing.c4s/SectSuddenDeath.c4g/Map.bmpbin0 -> 9526 bytes
-rw-r--r--TemplePushing.c4s/SectSuddenDeath.c4g/Scenario.txt17
-rw-r--r--TemplePushing.c4s/Sky.jpgbin0 -> 83495 bytes
-rw-r--r--TemplePushing.c4s/StringTblDE.txt12
-rw-r--r--TemplePushing.c4s/StringTblUS.txt12
-rw-r--r--TemplePushing.c4s/System.c4g/Axe.c20
-rw-r--r--TemplePushing.c4s/System.c4g/Clonk.c27
-rw-r--r--TemplePushing.c4s/System.c4g/EmptyGoblet.c13
-rw-r--r--TemplePushing.c4s/System.c4g/Flint.c20
-rw-r--r--TemplePushing.c4s/System.c4g/Goblet.c12
-rw-r--r--TemplePushing.c4s/System.c4g/Meteor.c7
-rw-r--r--TemplePushing.c4s/System.c4g/Rock.c20
-rw-r--r--TemplePushing.c4s/System.c4g/Scroll.c10
-rw-r--r--TemplePushing.c4s/System.c4g/StringTblDE.txt2
-rw-r--r--TemplePushing.c4s/System.c4g/StringTblUS.txt2
-rw-r--r--TemplePushing.c4s/System.c4g/Sword.c20
-rw-r--r--TemplePushing.c4s/Teams.c4d/DefCore.txt8
-rw-r--r--TemplePushing.c4s/Teams.c4d/Graphics.pngbin0 -> 16625 bytes
-rw-r--r--TemplePushing.c4s/Teams.c4d/Names.txt2
-rw-r--r--TemplePushing.c4s/Teams.txt16
-rw-r--r--TemplePushing.c4s/Title.pngbin0 -> 58714 bytes
-rw-r--r--TemplePushing.c4s/Title.txt2
-rw-r--r--TemplePushing.c4s/Version.txt1
194 files changed, 2645 insertions, 0 deletions
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Ambiente.wav b/TemplePushing.c4s/CliffPushing.c4d/Ambiente.wav
new file mode 100644
index 0000000..9bd2ab1
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Ambiente.wav
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/FireBomb.c b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/FireBomb.c
new file mode 100644
index 0000000..125bd49
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/FireBomb.c
@@ -0,0 +1,20 @@
+#strict
+#appendto FBMP
+
+func Activate(pClonk)
+{
+ [$Shot$|Image=GNPW]
+ Sound("Blast2");
+ Exit(this(),-10+20*GetDir(pClonk));
+ SetXDir(-80+160*GetDir(pClonk));
+ SetYDir(-10);
+ return(1);
+}
+
+func Hit()
+{
+ if (Random(2)) return(_inherited());
+ SetYDir(-20);
+ Sound("BOING");
+ return(1);
+}
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/DefCore.txt b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/DefCore.txt
new file mode 100644
index 0000000..6ed04c9
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/DefCore.txt
@@ -0,0 +1,10 @@
+[DefCore]
+id=_MFL
+Version=4,9,8
+Name=MagicFlint
+Category=C4D_Magic
+Width=1
+Height=1
+Value=25
+Components=IROC=2;ILOA=2
+Picture=0,0,64,64
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/DescDE.txt b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/DescDE.txt
new file mode 100644
index 0000000..bc8405a
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/DescDE.txt
@@ -0,0 +1 @@
+Zaubert einen Flint herbei. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/DescUS.txt b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/DescUS.txt
new file mode 100644
index 0000000..80f5e9e
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/DescUS.txt
@@ -0,0 +1 @@
+Summons a flint. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/Graphics.png b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/Graphics.png
new file mode 100644
index 0000000..9fd8437
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/Names.txt b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/Names.txt
new file mode 100644
index 0000000..b182b58
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Flint herbeizaubern
+US:Summon flint
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/Script.c b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/Script.c
new file mode 100644
index 0000000..b514189
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/Script.c
@@ -0,0 +1,31 @@
+/* Flint herbeizaubern */
+
+#strict
+static FlintID;
+
+public func Activate(pCaster,pRealcaster) {
+ var pSlurp;
+ var pFlint;
+
+ FlintID=[FLNT,SFLN,EFLN];
+
+ // Effekt prüfen
+ var iResult;
+ if (iResult = CheckEffect("FlintNSpell", 0, 125)) return(iResult!=-1 && RemoveObject());
+ // Sound
+ Sound("Magic*");
+ // Effekt
+ CreateParticle("MSpark", 0,0, 1000, RGBa(255,50,50,150));
+
+ if(pRealcaster) pCaster=pRealcaster;
+ { pFlint = CreateContents(FlintID[Random(GetLength(FlintID))],pCaster); }
+
+ RemoveObject();
+
+ return(1);
+}
+
+/* Zaubercombo */
+
+public func GetSpellClass(object pMage) { return(EART); }
+public func GetSpellCombo(pMage) { return("422"); } // (1: Backward; 2: Down; 3: Forward; 4: Throw; 5: Jump; 6: Dig)
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/DefCore.txt b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/DefCore.txt
new file mode 100644
index 0000000..09eaa86
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/DefCore.txt
@@ -0,0 +1,8 @@
+[DefCore]
+id=_FWV
+Version=4,9,8
+Name=Frostwave
+Category=C4D_Magic
+Value=18
+Components=IICE=4
+Picture=0,0,64,64
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/DescDE.txt b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/DescDE.txt
new file mode 100644
index 0000000..0f080c4
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/DescDE.txt
@@ -0,0 +1 @@
+Sendet eine Frostwelle aus, die Gegner wegschleudert und einfriert. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/DescUS.txt b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/DescUS.txt
new file mode 100644
index 0000000..956f6c4
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/DescUS.txt
@@ -0,0 +1 @@
+Casts an frostwave which flings enemys away. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Graphics.png b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Graphics.png
new file mode 100644
index 0000000..4519567
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Names.txt b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Names.txt
new file mode 100644
index 0000000..8615e7c
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Frostwelle
+US:Frost wave
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Script.c b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Script.c
new file mode 100644
index 0000000..142a8cb
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Script.c
@@ -0,0 +1,86 @@
+#strict
+
+func Activate(pCaster,pRealcaster) {
+ var pClonk, pComboObj;
+ if(pRealcaster) pClonk=pRealcaster;
+ else pClonk=pCaster;
+
+ var iNum = AddEffect("FrostwaveNSpell",0,130,1,0,GetID(),0,GetX(pCaster),GetY(pCaster),pClonk);
+ if (iNum <= 0) return (iNum<0, RemoveObject());
+ Sound("MgWind*");
+ RemoveObject();
+ return(1);
+}
+
+func FxFrostwaveNSpellStart(object pTarget, int iNumber, int iTemp, int iAngle, int iX, int iY, object pCaller) {
+ if(iTemp) return();
+
+ // Radius anpassen
+ EffectVar(1,pTarget,iNumber) = 20;
+
+ // Position
+ EffectVar(2,pTarget,iNumber) = iX;
+ EffectVar(3,pTarget,iNumber) = iY;
+
+ // Zauberer
+ EffectVar(4,pTarget,iNumber) = pCaller;
+ EffectVar(6,pTarget,iNumber) = GetController(pCaller);
+
+ // Kombo
+ var pCombo = FindContents(ICE1, pCaller);
+ if (pCombo)
+ {
+ EffectVar(5,pTarget,iNumber) = true;
+ RemoveObject(pCombo);
+ }
+}
+
+func FxFrostwaveNSpellTimer(object pTarget, int iNumber, int iTime) {
+
+ var iRaduis = EffectVar(1,pTarget,iNumber);
+ // löschen falls schon zu weit
+ if(iRaduis >= EffectCall(pTarget,iNumber,"MaxRange")) return(-1);
+
+ // Position
+ var iX = EffectVar(2,pTarget,iNumber);
+ var iY = EffectVar(3,pTarget,iNumber);
+
+ // Kombo?
+ var dwSearchOCF = OCF_Alive;
+ if (EffectVar(5,pTarget,iNumber)) dwSearchOCF += OCF_Collectible;
+
+ // Effekt!
+ CreateParticle("FrostWave",iX,iY, RandomX(-1,1),RandomX(-1,1), 400+10*iRaduis,RGB(255,255,255));
+var obj;
+
+ var angle;
+ // Alle Gegner wegschleudern
+ while(obj = FindObject(0, -iRaduis-5+iX,-iRaduis-5+iY,iRaduis*2+10,iRaduis*2+10, dwSearchOCF, 0,0, NoContainer(), obj))
+ {
+ if(obj == Contained()) continue;
+ if(Inside(Distance(GetX(obj), GetY(obj), iX, iY), iRaduis-5, iRaduis+5))
+ {
+ angle=Angle(iX, iY, GetX(obj), GetY(obj) );
+ if(GetAlive(obj))
+ {
+ obj->SetKiller(EffectVar(6,pTarget,iNumber));
+ Fling(obj, Sin(angle, 80)/9, -Cos(angle, 80)/9);
+ if(!Frozen(obj)) Freeze(obj, EffectVar(4,pTarget,iNumber));
+ }
+ else
+ {
+ SetXDir(Sin(angle, 50), obj); SetYDir(-Cos(angle, 50), obj);
+ SetController(GetController(EffectVar(4,pTarget,iNumber)),obj);
+ }
+ }
+ }
+
+ EffectVar(1,pTarget,iNumber)+=8;
+}
+
+func FxFrostwaveNSpellMaxRange() { return(75); }
+
+/* Zaubercombo */
+
+public func GetSpellClass(object pMage) { return(WATR); }
+public func GetSpellCombo(pMage) { return ("335"); } // (1: Backward; 2: Down; 3: Forward; 4: Throw; 5: Jump; 6: Dig)
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Wave.c4d/Graphics.png b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Wave.c4d/Graphics.png
new file mode 100644
index 0000000..b4a8989
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Wave.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Wave.c4d/Particle.txt b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Wave.c4d/Particle.txt
new file mode 100644
index 0000000..56ed2c0
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Wave.c4d/Particle.txt
@@ -0,0 +1,13 @@
+[Particle]
+Name=FrostWave
+MaxCount=350
+InitFn=StdInit
+ExecFn=StdExec
+DrawFn=Std
+Face=0,0,64,64,-32,-32
+GravityAcc=0
+RByV=1
+AlphaFade=5
+Delay=0
+Additive=1
+Repeats=1
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Maplang.bmp b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Maplang.bmp
new file mode 100644
index 0000000..cd806b8
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Maplang.bmp
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Mapsymm.bmp b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Mapsymm.bmp
new file mode 100644
index 0000000..08e92d2
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Mapsymm.bmp
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Names.txt b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Names.txt
new file mode 100644
index 0000000..23fb108
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Extraobjekte
+US:Additional Objects \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/DefCore.txt b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/DefCore.txt
new file mode 100644
index 0000000..c31ec02
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/DefCore.txt
@@ -0,0 +1,22 @@
+[DefCore]
+id=OGBT
+Version=4,9,8
+Name=Goblet
+Category=C4D_Object|C4D_SelectMaterial|C4D_SelectHomebase
+MaxUserSelect=10
+Timer=5
+TimerCall=FillCheck
+Width=8
+Height=9
+Offset=-4,-4
+Vertices=4
+VertexX=-4,4,-4,4
+VertexY=-4,-4,4,4
+VertexFriction=50,50,50,50
+Value=85
+Mass=10
+Components=KELK=1
+Picture=0,9,35,48
+Rebuy=1
+Collectible=1
+Rotate=1
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/DescDE.txt b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/DescDE.txt
new file mode 100644
index 0000000..bae43a3
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/DescDE.txt
@@ -0,0 +1 @@
+Magisches Trinkgefäß. Bringt, wenn gefüllt, dem Träger Lebensenergie. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/DescUS.txt b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/DescUS.txt
new file mode 100644
index 0000000..9bd1347
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/DescUS.txt
@@ -0,0 +1 @@
+Magical container of liquids. Replenishes the bearer's energy. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/DefCore.txt b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/DefCore.txt
new file mode 100644
index 0000000..134d1d8
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/DefCore.txt
@@ -0,0 +1,22 @@
+[DefCore]
+id=EGBL
+Version=4,9,8
+Name=Goblet
+Category=C4D_Object|C4D_SelectMaterial|C4D_SelectKnowledge|C4D_SelectHomebase
+MaxUserSelect=10
+Timer=5
+TimerCall=FillCheck
+Width=8
+Height=9
+Offset=-4,-4
+Vertices=4
+VertexX=-4,4,-4,4
+VertexY=-4,-4,4,4
+VertexFriction=50,50,50,50
+Value=85
+Mass=10
+Components=METL=2
+Picture=0,9,35,48
+Rebuy=1
+Collectible=1
+Rotate=1
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/DescDE.txt b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/DescDE.txt
new file mode 100644
index 0000000..d360789
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/DescDE.txt
@@ -0,0 +1 @@
+Trinkgefäß. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/DescUS.txt b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/DescUS.txt
new file mode 100644
index 0000000..9bd1347
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/DescUS.txt
@@ -0,0 +1 @@
+Magical container of liquids. Replenishes the bearer's energy. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/Graphics.png b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/Graphics.png
new file mode 100644
index 0000000..2aaf5d5
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/Names.txt b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/Names.txt
new file mode 100644
index 0000000..4c85279
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Kelch
+US:Goblet \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/Script.c b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/Script.c
new file mode 100644
index 0000000..bdd3eeb
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/Script.c
@@ -0,0 +1,25 @@
+/*-- Leerer Kelch --*/
+
+#strict
+
+local iFill, iTimer;
+
+func FillCheck()
+ {
+ ++iTimer;
+ if(!(iTimer%5))
+ {
+ var iX = Sin(GetR(), RandomX(-4,8) );
+ var iY = -Cos(GetR(), RandomX(-4,4) );
+ if(!Contained())
+ CreateParticle("NoGravSpark", iX, iY,0,0,RandomX(25, 55),RGBa(255,255,0,120));
+ iTimer=0;
+ }
+ if(GetMaterial() == Material("Water"))
+ {
+ if((iFill+=ExtractMaterialAmount(0,2, Material("Water"), 6))>=10 )
+ ChangeDef(GBLT);
+ }
+ }
+
+public func IsMagicProduct() { return(true); }
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/Title.png b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/Title.png
new file mode 100644
index 0000000..bd299ab
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/Title.png
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/Graphics.png b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/Graphics.png
new file mode 100644
index 0000000..cc8e6cf
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/Names.txt b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/Names.txt
new file mode 100644
index 0000000..4c85279
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Kelch
+US:Goblet \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/Script.c b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/Script.c
new file mode 100644
index 0000000..a040037
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/Script.c
@@ -0,0 +1,54 @@
+/*-- Kelch --*/
+
+#strict
+
+local iTimer;
+
+func Initialize()
+ {
+ return(1);
+ }
+
+func FillCheck()
+ {
+ if(!Contained())
+ if(Inside(GetR(), 20, 340))
+ Hit();
+ if(!(iTimer%5))
+ {
+ var iX = Sin(GetR(), RandomX(-4,4) );
+ var iY = -Cos(GetR(), RandomX(-4,1) );
+ if(!Contained())
+ CreateParticle("NoGravSpark", iX, iY,0,0,RandomX(25, 55),RGBa(255,255,0,120));
+ }
+ iTimer++;
+ if(iTimer>=10)
+ {
+ if(GetOCF(Contained()) & OCF_CrewMember())
+ DoEnergy(+15, Contained());
+ iTimer=0;
+ }
+ return(1);
+ }
+
+func Hit()
+ {
+ if(!GBackLiquid())
+ {
+ for(var i=15; i>0; i--)
+ {
+ var iX=Sin(GetR(), RandomX(4,8)), iY=-Cos(GetR(), RandomX(4,8)), iXDir=GetWind()*30/100, iYDir=-Cos(GetR()+RandomX(-2,2), Random(7));
+ InsertMaterial(Material("Water"), iX, iY, iXDir, iYDir);
+ }
+ SetEmpty();
+ }
+ }
+
+private func SetEmpty()
+ {
+ ChangeDef(EGBL);
+ return(1);
+ }
+
+// Mit Kelch: Aufwertung zum Magus
+public func GetRevaluationCombo() { return(MAGE); }
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/Title.png b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/Title.png
new file mode 100644
index 0000000..16aa9b6
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/Title.png
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Sky.jpg b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Sky.jpg
new file mode 100644
index 0000000..d060665
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Sky.jpg
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/ExtremeAmbiente.wav b/TemplePushing.c4s/CliffPushing.c4d/ExtremeAmbiente.wav
new file mode 100644
index 0000000..3a5f174
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/ExtremeAmbiente.wav
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/DefCore.txt b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/DefCore.txt
new file mode 100644
index 0000000..ab2cba9
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/DefCore.txt
@@ -0,0 +1,7 @@
+[DefCore]
+id=RAIN
+Name=Rain
+Version=4,9,5
+Category=C4D_StaticBack
+MaxUserSelect=1
+Value=1 \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/DescDE.txt b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/DescDE.txt
new file mode 100644
index 0000000..55fe10e
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/DescDE.txt
@@ -0,0 +1 @@
+Es regnet den ganzen Tag, aber irgendwie seh ich kein einzigen Tropfen Wasser! \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/DescUS.txt b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/DescUS.txt
new file mode 100644
index 0000000..ba66ef1
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/DescUS.txt
@@ -0,0 +1 @@
+It rains the whole time, but there is no only drop of water \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/DefCore.txt b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/DefCore.txt
new file mode 100644
index 0000000..3da4878
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/DefCore.txt
@@ -0,0 +1,8 @@
+[DefCore]
+id=FLRN
+Name=Sudden Death
+Version=4,9,5
+Category=C4D_StaticBack
+MaxUserSelect=1
+Value=1
+Picture=0,0,64,64 \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/DescDE.txt b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/DescDE.txt
new file mode 100644
index 0000000..d63d0bf
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/DescDE.txt
@@ -0,0 +1 @@
+Es regnet Flints und es entstehen Wurmlöcher die ins Nichts führen. Was will man mehr? \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/DescUS.txt b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/DescUS.txt
new file mode 100644
index 0000000..36b2f0e
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/DescUS.txt
@@ -0,0 +1 @@
+It's raining men! \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/Graphics.png b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/Graphics.png
new file mode 100644
index 0000000..c9c7c9b
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/Script.c b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/Script.c
new file mode 100644
index 0000000..8fdcf9d
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/Script.c
@@ -0,0 +1,23 @@
+/*-- Flintregen --*/
+
+#strict
+
+protected func Initialize() {
+ SetPosition(0,0);
+ AddEffect("Flnt",0,1,20,0,GetID());
+ return(1);
+}
+
+func FxFlntTimer()
+{
+ if (!Random(20))
+ {
+ //Wurmloch
+ CreateObject(MGWP,Random(LandscapeWidth()),Random(LandscapeHeight()))->Activate(FindObject());
+ //Und einmal Free-Shaken
+ ShakeFree(Random(LandscapeWidth()),Random(LandscapeHeight()),Random(100));
+ }
+ //Zum Schluss noch ein kleines Geschenk des Himmels
+ var flnt = CreateObject(SFLN,Random(LandscapeWidth()),0);
+ return(1);
+}
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Graphics.png b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Graphics.png
new file mode 100644
index 0000000..2ac7a18
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Names.txt b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Names.txt
new file mode 100644
index 0000000..d439aa7
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Regen
+US:Rain \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Rain.c4d/Graphics.png b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Rain.c4d/Graphics.png
new file mode 100644
index 0000000..5fd65db
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Rain.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Rain.c4d/Names.txt b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Rain.c4d/Names.txt
new file mode 100644
index 0000000..b836a4c
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Rain.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Regentropfen
+US:Raindrop
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Rain.c4d/Particle.txt b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Rain.c4d/Particle.txt
new file mode 100644
index 0000000..867e00a
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Rain.c4d/Particle.txt
@@ -0,0 +1,13 @@
+[Particle]
+Name=Rain
+MaxCount=600
+InitFn=StdInit
+ExecFn=StdExec
+CollisionFn=Die
+DrawFn=Std
+Face=0,0,64,64,-32,-32
+Delay=0
+GravityAcc=70
+RByV=1
+VertexCount=1
+Additive=0
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Rain.c4d/Rain.wav b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Rain.c4d/Rain.wav
new file mode 100644
index 0000000..aee9dd8
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Rain.c4d/Rain.wav
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Script.c b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Script.c
new file mode 100644
index 0000000..f31a3f9
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Script.c
@@ -0,0 +1,22 @@
+/*-- Regen --*/
+
+#strict
+
+protected func Initialize() {
+ SetPosition(0,0);
+ AddEffect("Rain",0,1,1,0,GetID());
+ SoundLevel("Rain",100);
+ return(1);
+}
+
+func FxRainTimer()
+{
+ var color = RGB(150,150,255);
+ if (FindObject(RCKF)) color = RGB(100,0,0);
+ for (var i;i<3;i++)
+ CreateParticle("Rain",Random(LandscapeWidth()),0,0,200,Random(300),RGB(170,170,255));
+ if (!Random(200)) Sound("Thunders*");
+ if (!Random(50) && FindObject(FRRN)) CreateObject(DFLM,Random(LandscapeWidth()));
+ return(1);
+}
+
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Thunders1.wav b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Thunders1.wav
new file mode 100644
index 0000000..0d4f247
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Thunders1.wav
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Thunders2.wav b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Thunders2.wav
new file mode 100644
index 0000000..02af2fe
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Thunders2.wav
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/DefCore.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/DefCore.txt
new file mode 100644
index 0000000..0342fe5
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/DefCore.txt
@@ -0,0 +1,9 @@
+[DefCore]
+id=FRRN
+Version=4,9,8
+Name=Armageddon
+Category=C4D_StaticBack|C4D_Rule
+MaxUserSelect=1
+Width=1
+Height=1
+Picture=0,0,64,64
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/DescDE.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/DescDE.txt
new file mode 100644
index 0000000..ecf7b67
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/DescDE.txt
@@ -0,0 +1 @@
+Lässt es Feuer regnen und sichert den Nachschub an Terra-Flints. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/DescUS.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/DescUS.txt
new file mode 100644
index 0000000..98c639e
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/DescUS.txt
@@ -0,0 +1 @@
+Let fire rains and creates flints in the inventory of each clonk. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/Graphics.png b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/Graphics.png
new file mode 100644
index 0000000..30e20a2
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/Script.c b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/Script.c
new file mode 100644
index 0000000..e037351
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/Script.c
@@ -0,0 +1,7 @@
+/*-- Feuerregen --*/
+
+#strict
+
+protected func Activate(iPlr) {
+ MessageWindow(GetDesc(),iPlr);
+}
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/DefCore.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/DefCore.txt
new file mode 100644
index 0000000..ed84dcf
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/DefCore.txt
@@ -0,0 +1,9 @@
+[DefCore]
+id=DTHM
+Version=4,9,8
+Name=Deathmatch
+Category=C4D_StaticBack|C4D_Rule
+MaxUserSelect=1
+Width=1
+Height=1
+Picture=0,0,64,64
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/DescDE.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/DescDE.txt
new file mode 100644
index 0000000..70921c2
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/DescDE.txt
@@ -0,0 +1 @@
+Jeder Spieler muss versuchen 10 Gegner zu töten, damit sein Team gewinnt. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/DescUS.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/DescUS.txt
new file mode 100644
index 0000000..c1eba93
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/DescUS.txt
@@ -0,0 +1 @@
+That player wich kills 10 enemys wins the game. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/Graphics.png b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/Graphics.png
new file mode 100644
index 0000000..2bfe0a4
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/Script.c b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/Script.c
new file mode 100644
index 0000000..cbb211d
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/Script.c
@@ -0,0 +1,7 @@
+/*-- Deathmatch --*/
+
+#strict
+
+protected func Activate(iPlr) {
+ MessageWindow(GetDesc(),iPlr);
+}
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/DescDE.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/DescDE.txt
new file mode 100644
index 0000000..bf4504d
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/DescDE.txt
@@ -0,0 +1 @@
+Regelobjekte bestimmen den Spielablauf und bieten in Einzelfällen Sonderoptionen. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/DescUS.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/DescUS.txt
new file mode 100644
index 0000000..022d0bf
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/DescUS.txt
@@ -0,0 +1 @@
+Rule objects affect general game play and in some cases offer special options. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/DefCore.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/DefCore.txt
new file mode 100644
index 0000000..1ddf7c5
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/DefCore.txt
@@ -0,0 +1,9 @@
+[DefCore]
+id=FYPG
+Version=4,9,8
+Name=Friendly Pushing
+Category=C4D_StaticBack|C4D_Rule
+MaxUserSelect=1
+Width=1
+Height=1
+Picture=0,0,64,64
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/DescDE.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/DescDE.txt
new file mode 100644
index 0000000..729840e
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/DescDE.txt
@@ -0,0 +1 @@
+Clonks können befreundete Spieler schubsen \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/DescUS.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/DescUS.txt
new file mode 100644
index 0000000..6b5d08d
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/DescUS.txt
@@ -0,0 +1 @@
+Clonks can push allied players. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/Graphics.png b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/Graphics.png
new file mode 100644
index 0000000..d97f792
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/Names.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/Names.txt
new file mode 100644
index 0000000..34d3e41
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Teamschubsen
+US:Friendly Pushing \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/Script.c b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/Script.c
new file mode 100644
index 0000000..fb43957
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/Script.c
@@ -0,0 +1,5 @@
+/*-- Friendly Pushing --*/
+
+#strict
+
+protected func Activate(int plr) { MessageWindow(GetDesc(), plr); }
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/DefCore.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/DefCore.txt
new file mode 100644
index 0000000..f57caf8
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/DefCore.txt
@@ -0,0 +1,9 @@
+[DefCore]
+id=MSPW
+Version=4,9,8
+Name=MagicSpawnpoints
+Category=C4D_StaticBack|C4D_Rule
+MaxUserSelect=1
+Width=1
+Height=1
+Picture=0,0,64,64
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/DescDE.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/DescDE.txt
new file mode 100644
index 0000000..4370091
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/DescDE.txt
@@ -0,0 +1 @@
+Im Spiel finden sich Spawnpoints, die als sicherer Nachschub an Schriftrollen dienen. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/DescUS.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/DescUS.txt
new file mode 100644
index 0000000..f1ebe61
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/DescUS.txt
@@ -0,0 +1 @@
+Creates some spawnpoints in the game wich are creating scrolls. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/Graphics.png b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/Graphics.png
new file mode 100644
index 0000000..351d65c
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/ActMap.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/ActMap.txt
new file mode 100644
index 0000000..f29cad6
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/ActMap.txt
@@ -0,0 +1,4 @@
+[Action]
+Name=Invis
+Facet=10,0,10,10
+NextAction=Hold
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/DefCore.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/DefCore.txt
new file mode 100644
index 0000000..8016aaa
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/DefCore.txt
@@ -0,0 +1,12 @@
+[DefCore]
+id=MSPN
+Name=MagicSpawnpoint
+Version=4,9,5
+Category=25165825
+Width=10
+Height=10
+Offset=-5,-5
+Picture=0,0,10,10
+Timer=5
+TimerCall=Timer
+Collectible=1 \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/DescDE.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/DescDE.txt
new file mode 100644
index 0000000..9124f18
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/DescDE.txt
@@ -0,0 +1 @@
+Lässt Schriftrollen als Nachschub erscheinen. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/DescUS.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/DescUS.txt
new file mode 100644
index 0000000..ea35e3e
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/DescUS.txt
@@ -0,0 +1 @@
+Spawns scrolls. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/Graphics.png b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/Graphics.png
new file mode 100644
index 0000000..c5f3687
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/Names.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/Names.txt
new file mode 100644
index 0000000..a0ef292
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Magischer Spawnpunkt
+US:Magic Spawnpoint \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/Script.c b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/Script.c
new file mode 100644
index 0000000..4466a3a
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/Script.c
@@ -0,0 +1,177 @@
+/*-- Magic Spawnpoint --*/
+
+#strict
+
+local initialized, angle, player, spawntimer,WpID;
+
+func IsWaypoint() { return(1); }
+
+global func PlaceSpawnpoint(id idObj, int iX, int iY, int timer)
+{
+ var spwn = CreateObject(MSPN, iX, iY, -1);
+ spwn->CreateContents(idObj);
+ if(timer)
+ spwn->LocalN("spawntimer") = timer;
+ return(spwn);
+}
+
+protected func Initialize()
+{
+ if(Random(14)) WpID=SCRL;
+ else WpID=OGBT;
+ // Standardtimer = 1000 Frames
+ spawntimer = 1000;
+ SetClrModulation(RGBa(0,0,0,255));
+}
+
+protected func Timer()
+{
+ if(!player) player = CreateArray();
+ // Noch nicht initialisiert?
+ if(!initialized)
+ // Ein Inhaltsobjekt?
+ if(Contents())
+ // Initialisieren
+ return(Initialized());
+ // Kein Inhalt?
+ if(!Contents())
+ {
+ return(CreateContents(WpID));
+ }
+ // Tolle Effekt starten
+ angle += 10;
+ if(angle >= 360) angle = 0;
+ SetObjDrawTransform(1000, 0,0,0, 1000, Sin(angle, 8)*1000 - 2000,0, 1);
+ if(Random(2)) CreateParticle("NoGravSpark", RandomX(-5,5), RandomX(5,10), 0, -5, 25, RGBa(210, 210, 255, 100));
+ // Alle Timer runterzählen
+ DecreaseTimer();
+}
+
+private func Initialized()
+{
+ // Unsichtbar werden
+ SetAction("Invis");
+ // Objekt als Layer auflegen
+ SetGraphics(0, 0, GetID(Contents()), 1, 1);
+ // Transformation
+ SetObjDrawTransform(1000, 0,0,0, 1000, -5000,0, 1);
+ // Sammeleffekt starten
+// AddEffect("Collect", this(), 1, 3, this());
+ // Objekt(e) erzeugen
+ // Waffen-Bleiben-Regel
+//player = CreateArray();
+ // Initialisiert
+ initialized = true;
+}
+
+/* Timer runterzählen */
+
+private func DecreaseTimer()
+{
+ // Waffen-Bleiben-Regel
+ if(FindObject(WPST))
+ {
+ for(var i=0 ; i < GetPlayerCount() ; i++)
+ // Spielertimer runterzählen
+ {
+ if(player[GetPlayerByIndex(i)])
+ player[GetPlayerByIndex(i)] -= 5;
+ if(player[GetPlayerByIndex(i)] <= 0 && !(Local() & 2**GetPlayerByIndex(i)))
+ {
+ // Spieler kann das Objekt wieder einsammeln
+ player[GetPlayerByIndex(i)] = 0;
+ Local() += 2**GetPlayerByIndex(i);
+ }
+ }
+ }
+ else
+ {
+ // Timer runterzählen
+ player[0] -= 5;
+ if(player[0] <= 0)
+ {
+ // Objekt ist wieder da
+ player[0] = 0;
+ Local() = true;
+ SetVisibility(VIS_All());
+ }
+ }
+}
+
+/* Einsammel-Effekte */
+/*
+public func FxCollectTimer()
+{
+ // Ist ein Clonk hier? -> Einsammeln lassen
+ var pObj;
+ for(var pClonk in FindObjects(Find_AtPoint(), Find_OCF(OCF_CrewMember()), Find_OCF(OCF_CrewMember()), Find_NoContainer()))
+ if(CheckCollect(GetOwner(pClonk)))
+ {
+ pObj = FindContents();
+ // Kann der Clonk einsammeln?
+ Collect(pObj, pClonk);
+ if(Contained(pObj) == this()) RemoveObject(pObj);
+ else
+ {
+ Sound("Grab", 0, pClonk, 0, GetOwner(pClonk)+1);
+ Collected(GetOwner(pClonk));
+ }
+ }
+}*/
+
+public func RejectEntrance(object pClonk)
+{
+ // Objekt ist ein Clonk?
+ if(!(GetOCF(pClonk) & OCF_CrewMember) && !(pClonk->~CanCollectFromSpawnpoints())) return(1);
+ // Ich hab Contents?
+ if(!Contents()) return(1);
+ // Darf einsammeln
+ if(CheckCollect(GetOwner(pClonk)))
+ {
+ var pObj = Contents();
+ // Kann der Clonk einsammeln?
+ if(ObjectCount(0, 0, 0, 0, 0, 0, 0, 0, pClonk) >= 1)
+ return(1);
+
+ Collect(pObj, pClonk);
+ CreateContents(WpID);
+ Initialized();
+ if(Contained(pObj) == this()) RemoveObject(pObj);
+ else
+ {
+ Sound("Grab", 0, pClonk, 0, GetOwner(pClonk)+1);
+ Collected(GetOwner(pClonk));
+ }
+ }
+ return(1);
+}
+
+private func CheckCollect(int iPlr) // Überprüft, ob ein Spieler das Objekt einsammeln darf
+{
+ // Waffen-Bleiben-Regel
+ if(FindObject(WPST))
+ return(Local() & 2**iPlr);
+ else
+ return(Local());
+}
+
+private func Collected(int iPlr) // Regelt, dass ein Spieler das Objekt einsammelt
+{
+ // Waffen-Bleiben-Regel
+ if(FindObject(WPST))
+ {
+ // Spielertimer hochsetzen
+ player[iPlr] = spawntimer;
+ // Nicht mehr sichtbar für den Spieler
+ Local() -= 2**iPlr;
+ }
+ else
+ {
+ // Timer hochsetzen
+ player[0] = spawntimer;
+ // Nicht mehr einsammelbar
+ Local() = false;
+ // Nicht mehr sichtbar
+ SetVisibility(VIS_God());
+ }
+}
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/DefCore.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/DefCore.txt
new file mode 100644
index 0000000..f7f528c
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/DefCore.txt
@@ -0,0 +1,8 @@
+[DefCore]
+id=SMGC
+Version=4,9,8
+Name=SymbolMagic
+Category=C4D_StaticBack
+Width=1
+Height=1
+Picture=0,0,64,64
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/DescDE.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/DescDE.txt
new file mode 100644
index 0000000..e8257be
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/DescDE.txt
@@ -0,0 +1 @@
+Anstatt Gegenständen erscheinen nur Schriftrollen \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/DescUS.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/DescUS.txt
new file mode 100644
index 0000000..f2b1ba6
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/DescUS.txt
@@ -0,0 +1 @@
+Instead of objects spawnpoints contents just scrolls \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/Graphics.png b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/Graphics.png
new file mode 100644
index 0000000..0fa62b6
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/Names.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/Names.txt
new file mode 100644
index 0000000..8e9cb1f
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Magisches Schubsen
+US:Magical Push
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/Names.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/Names.txt
new file mode 100644
index 0000000..9d875f8
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Magischer Spawnpunktspawner
+US:Magic Spawnpoint Spawner
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/Script.c b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/Script.c
new file mode 100644
index 0000000..d1e7b39
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/Script.c
@@ -0,0 +1,29 @@
+/*-- Magische Spawnpoints --*/
+
+#strict
+
+protected func Activate(iPlr) {
+ MessageWindow(GetDesc(),iPlr);
+}
+
+func Initialize()
+{
+ SetGamma(RGB(5,5,10),RGB(80,80,150),RGB(200,200,255));
+ RemoveAll(SPNP);
+ CreateObject(MSPN,550,282);
+ CreateObject(MSPN,603,205);
+ CreateObject(MSPN,682,282);
+ CreateObject(MSPN,784,227);
+ CreateObject(MSPN,912,168);
+ CreateObject(MSPN,1040,120);
+ CreateObject(MSPN,651,449);
+ CreateObject(MSPN,432,438);
+ CreateObject(MSPN,170,118);
+ CreateObject(MSPN,299,170);
+ CreateObject(MSPN,435,230);
+ CreateObject(MSPN,1175,290);
+ CreateObject(MSPN,105,380);
+ CreateObject(MSPN,910,400);
+ CreateObject(MSPN,560,610);
+ return(1);
+} \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/DefCore.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/DefCore.txt
new file mode 100644
index 0000000..4515779
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/DefCore.txt
@@ -0,0 +1,9 @@
+[DefCore]
+id=JSTS
+Version=4,9,8
+Name=JustScrolls
+Category=C4D_StaticBack|C4D_Rule
+MaxUserSelect=1
+Width=1
+Height=1
+Picture=0,0,64,64
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/DescDE.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/DescDE.txt
new file mode 100644
index 0000000..96cfed2
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/DescDE.txt
@@ -0,0 +1 @@
+In den Spawnpoints erscheinen nur Schriftrollen. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/DescUS.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/DescUS.txt
new file mode 100644
index 0000000..4fb171e
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/DescUS.txt
@@ -0,0 +1 @@
+Spawnpoints contents just magic scrolls. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/Graphics.png b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/Graphics.png
new file mode 100644
index 0000000..351d65c
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/DefCore.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/DefCore.txt
new file mode 100644
index 0000000..f7f528c
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/DefCore.txt
@@ -0,0 +1,8 @@
+[DefCore]
+id=SMGC
+Version=4,9,8
+Name=SymbolMagic
+Category=C4D_StaticBack
+Width=1
+Height=1
+Picture=0,0,64,64
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/DescDE.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/DescDE.txt
new file mode 100644
index 0000000..e8257be
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/DescDE.txt
@@ -0,0 +1 @@
+Anstatt Gegenständen erscheinen nur Schriftrollen \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/DescUS.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/DescUS.txt
new file mode 100644
index 0000000..f2b1ba6
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/DescUS.txt
@@ -0,0 +1 @@
+Instead of objects spawnpoints contents just scrolls \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/Graphics.png b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/Graphics.png
new file mode 100644
index 0000000..0fa62b6
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/Names.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/Names.txt
new file mode 100644
index 0000000..8e9cb1f
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Magisches Schubsen
+US:Magical Push
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/Names.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/Names.txt
new file mode 100644
index 0000000..ac705b1
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Nur Schriftrollen
+US:Only scrolls \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/Script.c b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/Script.c
new file mode 100644
index 0000000..43af0ec
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/Script.c
@@ -0,0 +1,21 @@
+/*-- Nur Schriftrollen --*/
+
+#strict
+
+protected func Activate(iPlr) {
+ MessageWindow(GetDesc(),iPlr);
+}
+
+func Initialize()
+{
+SetGamma(RGB(5,5,10),RGB(80,80,150),RGB(200,200,255));
+ var pObj;
+ if (!FindObject(SPNP)) SPWN->Initialize();
+ while (pObj = FindObject(SPNP,0,0,0,0,0,0,0,0,pObj))
+ {
+ pObj->Initialize();
+ RemoveObject(FindContents(0,pObj));
+ CreateContents(SCRL,pObj);
+ }
+return(10);
+}
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/DefCore.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/DefCore.txt
new file mode 100644
index 0000000..41af2f9
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/DefCore.txt
@@ -0,0 +1,9 @@
+[DefCore]
+id=SPWN
+Version=4,9,8
+Name=Spawnpoint Spawner
+Category=C4D_StaticBack|C4D_Rule
+MaxUserSelect=1
+Width=1
+Height=1
+Picture=0,0,64,64
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/DescDE.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/DescDE.txt
new file mode 100644
index 0000000..3c5c1ff
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/DescDE.txt
@@ -0,0 +1 @@
+Im Spiel finden sich Spawnpoints, die als sicherer Nachschub an Waffen und Tränken dienen. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/DescUS.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/DescUS.txt
new file mode 100644
index 0000000..7a978dc
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/DescUS.txt
@@ -0,0 +1 @@
+Creates some spawnpoints in the game wich are creating weapons and potions. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Graphics.png b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Graphics.png
new file mode 100644
index 0000000..1543a79
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Names.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Names.txt
new file mode 100644
index 0000000..86138a6
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Spawnpointspawner
+US:Spawnpoint Spawner
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Script.c b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Script.c
new file mode 100644
index 0000000..a762af8
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Script.c
@@ -0,0 +1,28 @@
+/*-- Spawnpoints --*/
+
+#strict
+
+protected func Activate(iPlr) {
+ MessageWindow(GetDesc(),iPlr);
+}
+
+func Initialize()
+{
+ RemoveAll(MSPN);
+ CreateObject(SPNP,550,282);
+ CreateObject(SPNP,603,205);
+ CreateObject(SPNP,682,282);
+ CreateObject(SPNP,784,227);
+ CreateObject(SPNP,912,168);
+ CreateObject(SPNP,1040,120);
+ CreateObject(SPNP,651,449);
+ CreateObject(SPNP,432,438);
+ CreateObject(SPNP,170,118);
+ CreateObject(SPNP,299,170);
+ CreateObject(SPNP,435,230);
+ CreateObject(SPNP,1175,290);
+ CreateObject(SPNP,105,380);
+ CreateObject(SPNP,910,400);
+ CreateObject(SPNP,560,610);
+ return(1);
+} \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/ActMap.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/ActMap.txt
new file mode 100644
index 0000000..f29cad6
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/ActMap.txt
@@ -0,0 +1,4 @@
+[Action]
+Name=Invis
+Facet=10,0,10,10
+NextAction=Hold
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/DefCore.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/DefCore.txt
new file mode 100644
index 0000000..d95cd88
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/DefCore.txt
@@ -0,0 +1,12 @@
+[DefCore]
+id=SPNP
+Name=Spawnpoint
+Version=4,9,5
+Category=25165825
+Width=10
+Height=10
+Offset=-5,-5
+Picture=0,0,10,10
+Timer=5
+TimerCall=Timer
+Collectible=1 \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/DescDE.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/DescDE.txt
new file mode 100644
index 0000000..b469ce9
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/DescDE.txt
@@ -0,0 +1 @@
+Lässt Gegenstände als Nachschub erscheinen. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/DescUS.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/DescUS.txt
new file mode 100644
index 0000000..3308b95
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/DescUS.txt
@@ -0,0 +1 @@
+Spawns objects. \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/Graphics.png b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/Graphics.png
new file mode 100644
index 0000000..c5f3687
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/Names.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/Names.txt
new file mode 100644
index 0000000..c6a1143
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Spawnpunkt
+US:Spawnpoint \ No newline at end of file
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/Script.c b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/Script.c
new file mode 100644
index 0000000..6172d25
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/Script.c
@@ -0,0 +1,177 @@
+/*-- Spawnpoint --*/
+
+#strict
+
+local initialized, angle, player, spawntimer,WpID;
+
+func IsWaypoint() { return(1); }
+
+global func PlaceSpawnpoint(id idObj, int iX, int iY, int timer)
+{
+ var spwn = CreateObject(SPNP, iX, iY, -1);
+ spwn->CreateContents(idObj);
+ if(timer)
+ spwn->LocalN("spawntimer") = timer;
+ return(spwn);
+}
+
+protected func Initialize()
+{
+ if(Random(4)) WpID = [FLNT,SCRL,SFLN,ROCK];
+ else WpID = [EFLN,STFN,FBMP];
+ // Standardtimer = 750 Frames
+ spawntimer = 750;
+ SetClrModulation(RGBa(0,0,0,255));
+}
+
+protected func Timer()
+{
+ if(!player) player = CreateArray();
+ // Noch nicht initialisiert?
+ if(!initialized)
+ // Ein Inhaltsobjekt?
+ if(Contents())
+ // Initialisieren
+ return(Initialized());
+ // Kein Inhalt?
+ if(!Contents())
+ {
+ return(CreateContents(WpID[Random(GetLength(WpID))]));
+ }
+ // Tolle Effekt starten
+ angle += 10;
+ if(angle >= 360) angle = 0;
+ SetObjDrawTransform(1000, 0,0,0, 1000, Sin(angle, 8)*1000 - 2000,0, 1);
+ if(Random(2)) CreateParticle("NoGravSpark", RandomX(-5,5), RandomX(5,10), 0, -5, 25, RGBa(210, 210, 255, 100));
+ // Alle Timer runterzählen
+ DecreaseTimer();
+}
+
+private func Initialized()
+{
+ // Unsichtbar werden
+ SetAction("Invis");
+ // Objekt als Layer auflegen
+ SetGraphics(0, 0, GetID(Contents()), 1, 1);
+ // Transformation
+ SetObjDrawTransform(1000, 0,0,0, 1000, -5000,0, 1);
+ // Sammeleffekt starten
+// AddEffect("Collect", this(), 1, 3, this());
+ // Objekt(e) erzeugen
+ // Waffen-Bleiben-Regel
+//player = CreateArray();
+ // Initialisiert
+ initialized = true;
+}
+
+/* Timer runterzählen */
+
+private func DecreaseTimer()
+{
+ // Waffen-Bleiben-Regel
+ if(FindObject(WPST))
+ {
+ for(var i=0 ; i < GetPlayerCount() ; i++)
+ // Spielertimer runterzählen
+ {
+ if(player[GetPlayerByIndex(i)])
+ player[GetPlayerByIndex(i)] -= 5;
+ if(player[GetPlayerByIndex(i)] <= 0 && !(Local() & 2**GetPlayerByIndex(i)))
+ {
+ // Spieler kann das Objekt wieder einsammeln
+ player[GetPlayerByIndex(i)] = 0;
+ Local() += 2**GetPlayerByIndex(i);
+ }
+ }
+ }
+ else
+ {
+ // Timer runterzählen
+ player[0] -= 5;
+ if(player[0] <= 0)
+ {
+ // Objekt ist wieder da
+ player[0] = 0;
+ Local() = true;
+ SetVisibility(VIS_All());
+ }
+ }
+}
+
+/* Einsammel-Effekte */
+/*
+public func FxCollectTimer()
+{
+ // Ist ein Clonk hier? -> Einsammeln lassen
+ var pObj;
+ for(var pClonk in FindObjects(Find_AtPoint(), Find_OCF(OCF_CrewMember()), Find_OCF(OCF_CrewMember()), Find_NoContainer()))
+ if(CheckCollect(GetOwner(pClonk)))
+ {
+ pObj = FindContents();
+ // Kann der Clonk einsammeln?
+ Collect(pObj, pClonk);
+ if(Contained(pObj) == this()) RemoveObject(pObj);
+ else
+ {
+ Sound("Grab", 0, pClonk, 0, GetOwner(pClonk)+1);
+ Collected(GetOwner(pClonk));
+ }
+ }
+}*/
+
+public func RejectEntrance(object pClonk)
+{
+ // Objekt ist ein Clonk?
+ if(!(GetOCF(pClonk) & OCF_CrewMember) && !(pClonk->~CanCollectFromSpawnpoints())) return(1);
+ // Ich hab Contents?
+ if(!Contents()) return(1);
+ // Darf einsammeln
+ if(CheckCollect(GetOwner(pClonk)))
+ {
+ var pObj = Contents();
+ // Kann der Clonk einsammeln?
+ if(ObjectCount(0, 0, 0, 0, 0, 0, 0, 0, pClonk) >= 1)
+ return(1);
+
+ Collect(pObj, pClonk);
+ CreateContents(WpID[Random(GetLength(WpID))]);
+ Initialized();
+ if(Contained(pObj) == this()) RemoveObject(pObj);
+ else
+ {
+ Sound("Grab", 0, pClonk, 0, GetOwner(pClonk)+1);
+ Collected(GetOwner(pClonk));
+ }
+ }
+ return(1);
+}
+
+private func CheckCollect(int iPlr) // Überprüft, ob ein Spieler das Objekt einsammeln darf
+{
+ // Waffen-Bleiben-Regel
+ if(FindObject(WPST))
+ return(Local() & 2**iPlr);
+ else
+ return(Local());
+}
+
+private func Collected(int iPlr) // Regelt, dass ein Spieler das Objekt einsammelt
+{
+ // Waffen-Bleiben-Regel
+ if(FindObject(WPST))
+ {
+ // Spielertimer hochsetzen
+ player[iPlr] = spawntimer;
+ // Nicht mehr sichtbar für den Spieler
+ Local() -= 2**iPlr;
+ }
+ else
+ {
+ // Timer hochsetzen
+ player[0] = spawntimer;
+ // Nicht mehr einsammelbar
+ Local() = false;
+ // Nicht mehr sichtbar
+ SetVisibility(VIS_God());
+ }
+}
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Title.txt b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Title.txt
new file mode 100644
index 0000000..0cec1dc
--- /dev/null
+++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Title.txt
@@ -0,0 +1,2 @@
+DE:Regeln
+US:Rules
diff --git a/TemplePushing.c4s/DescDE.rtf b/TemplePushing.c4s/DescDE.rtf
new file mode 100644
index 0000000..e06f819
--- /dev/null
+++ b/TemplePushing.c4s/DescDE.rtf
@@ -0,0 +1,25 @@
+{\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 \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\rtlch \ltrch\loch
+
+\par } \ No newline at end of file
diff --git a/TemplePushing.c4s/DescUS.rtf b/TemplePushing.c4s/DescUS.rtf
new file mode 100644
index 0000000..cee4ea5
--- /dev/null
+++ b/TemplePushing.c4s/DescUS.rtf
@@ -0,0 +1,25 @@
+{\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 determined.}
+\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\rtlch \ltrch\loch
+
+\par } \ No newline at end of file
diff --git a/TemplePushing.c4s/Icon.png b/TemplePushing.c4s/Icon.png
new file mode 100644
index 0000000..c50d46e
--- /dev/null
+++ b/TemplePushing.c4s/Icon.png
Binary files differ
diff --git a/TemplePushing.c4s/LoaderCliffPushing.jpg b/TemplePushing.c4s/LoaderCliffPushing.jpg
new file mode 100644
index 0000000..e714d65
--- /dev/null
+++ b/TemplePushing.c4s/LoaderCliffPushing.jpg
Binary files differ
diff --git a/TemplePushing.c4s/Locals.c4d/Brick.c4d/ActMap.txt b/TemplePushing.c4s/Locals.c4d/Brick.c4d/ActMap.txt
new file mode 100644
index 0000000..39397ac
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Brick.c4d/ActMap.txt
@@ -0,0 +1,6 @@
+[Action]
+Name=Flying
+Procedure=FLOAT
+Directions=2
+Length=2
+Facet=0,0,20,20 \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Brick.c4d/DefCore.txt b/TemplePushing.c4s/Locals.c4d/Brick.c4d/DefCore.txt
new file mode 100644
index 0000000..bef6342
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Brick.c4d/DefCore.txt
@@ -0,0 +1,26 @@
+[DefCore]
+id=BRK2
+Name=BigBrick
+Version=4,9,5
+Category=4
+MaxUserSelect=0
+Width=20
+Height=20
+Offset=-10,-10
+Value=50
+Mass=100
+Components=ROCK=8;
+ContactCalls=1
+Picture=0,0,20,20
+Vertices=9
+VertexX=0, -11,-11, 10, 10,-12, 0, 11, 0
+VertexY=14,-11, 11,-11, 11, 0,-12, 0, 11
+VertexCNAT=127
+SolidMask=0,0,20,20
+VertexFriction=10000,10000,10000,10000,10000,10000,10000,10000,10000
+ColorByMaterial=Brick
+TimerCall=CheckHit
+Timer=1
+
+[Physical]
+Float=200 \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Brick.c4d/DescDE.txt b/TemplePushing.c4s/Locals.c4d/Brick.c4d/DescDE.txt
new file mode 100644
index 0000000..c69e382
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Brick.c4d/DescDE.txt
@@ -0,0 +1 @@
+Ein "Fahrziegel"? \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Brick.c4d/DescUS.txt b/TemplePushing.c4s/Locals.c4d/Brick.c4d/DescUS.txt
new file mode 100644
index 0000000..aaada9e
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Brick.c4d/DescUS.txt
@@ -0,0 +1 @@
+A brick as a object. \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Brick.c4d/Graphics.png b/TemplePushing.c4s/Locals.c4d/Brick.c4d/Graphics.png
new file mode 100644
index 0000000..1b531ea
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Brick.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/Locals.c4d/Brick.c4d/Names.txt b/TemplePushing.c4s/Locals.c4d/Brick.c4d/Names.txt
new file mode 100644
index 0000000..b311575
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Brick.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Ziegel
+US:Brick \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Brick.c4d/Script.c b/TemplePushing.c4s/Locals.c4d/Brick.c4d/Script.c
new file mode 100644
index 0000000..02b3933
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Brick.c4d/Script.c
@@ -0,0 +1,30 @@
+/*-- Brick --*/
+
+#strict
+local pSchatten;
+local fVer,iYL,iYH;
+
+func Initialize() {
+ SetAction("Flying");
+ SetPhase(Random(2));
+ SetDir(Random(2));
+ ContactTop();
+ iYL = 650;
+ iYH = 100;
+ return(1);
+}
+
+func ContactBottom() { SetYDir(-10); }
+func ContactTop() { SetYDir(10); }
+
+func CheckHit()
+{
+ if (GetXDir() == 0 && GetYDir() == 0)
+ {
+ SetXDir(RandomX(-100,100));
+ SetYDir(RandomX(-100,100));
+ }
+ if (GetY() >= iYL) ContactBottom();
+ if (GetY() <= iYH) ContactTop();
+ return(1);
+} \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/ActMap.txt b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/ActMap.txt
new file mode 100644
index 0000000..52447a1
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/ActMap.txt
@@ -0,0 +1,8 @@
+[Action]
+Name=Ready
+Directions=2
+FlipDir=1
+Length=19
+Delay=0
+Facet=0,0,32,28
+NextAction=Hold
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/DefCore.txt b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/DefCore.txt
new file mode 100644
index 0000000..c6c3b15
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/DefCore.txt
@@ -0,0 +1,24 @@
+[DefCore]
+id=CANN
+Version=4,9,8
+Name=Cannon
+Category=C4D_Vehicle|C4D_SelectVehicle|C4D_SelectKnowledge|C4D_SelectHomebase
+MaxUserSelect=2
+Width=32
+Height=28
+Offset=-16,-14
+Vertices=3
+VertexX=1,-8,7
+VertexY=1,13,13
+VertexCNAT=4,9,10
+VertexFriction=100,10,10
+Value=35
+Mass=110
+Components=METL=3
+Picture=608,0,64,64
+CollectionLimit=10
+Rebuy=1
+Grab=1
+GrabPutGet=C4D_GrabGet|C4D_GrabPut
+UprightAttach=8
+VehicleControl=1
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/DescDE.txt b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/DescDE.txt
new file mode 100644
index 0000000..76bb149
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/DescDE.txt
@@ -0,0 +1 @@
+Mächtige Langstreckenwaffe. Benötigt für einen Schuss eine Ladung Schießpulver. \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/DescUS.txt b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/DescUS.txt
new file mode 100644
index 0000000..993a638
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/DescUS.txt
@@ -0,0 +1 @@
+Heavy artillery. Requires one load of gunpowder per shot. \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Graphics.png b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Graphics.png
new file mode 100644
index 0000000..abe856a
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Names.txt b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Names.txt
new file mode 100644
index 0000000..2a69811
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Haubitze
+US:Cannon
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Script.c b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Script.c
new file mode 100644
index 0000000..c77c034
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Script.c
@@ -0,0 +1,176 @@
+/*-- Haubitze --*/
+
+#strict
+local WpID;
+
+/* Initialisierung */
+
+protected func Initialize()
+{
+ WpID = [FLNT,EFLN,SFLN,TFLN];
+ AddEffect("CreateCon",this(),100,150,this());
+ SetAction("Ready");
+ SetPhase(10);
+}
+
+/* Steuerung */
+
+protected func ControlConf(int conf)
+{
+ if(AimStdConf(conf))
+ Sound("CatapultSet");
+}
+
+public func ControlUp(object clonk) // Zielen: hoch (klassisch)
+{
+ [$TxtAimup$|Image=CAN1:2]
+ AimUp(clonk, 4, "ControlConf");
+}
+
+public func ControlDig(object clonk) // Zielen: runter (klassisch)
+{
+ [$TxtAimdown$|Method=Classic|Image=CAN1:0]
+ AimDown(clonk, 4, "ControlConf");
+}
+
+public func ControlDown()
+{
+ [$TxtAimdown$|Method=JumpAndRun|Image=CAN1:0] // Beschreibung fuer JnR
+}
+
+public func ControlUpdate(object clonk, int comdir) // Zielen: JnR
+{
+ AimUpdate(clonk, comdir, 4, "ControlConf");
+}
+
+public func ControlDownSingle() // Sicht zurücksetzen
+{
+ [$TxtResetview$|Method=None]
+}
+
+public func ControlThrow(pClonk) // Feuern / Inhalt
+{
+ [$TxtFire$|Image=CAN1:1]
+ // Der Clonk will doch bestimmt nur etwas nachladen: nicht vorzeitig abfeuern
+ var pThing;
+ if (pThing = pClonk->Contents())
+ if (AllowLoad(GetID(pThing)))
+ return(0);
+ // Abfeuern wenn möglich, sonst Objekt herausnehmen
+ return(Fire());
+}
+
+public func ControlCommand(string szCommand,object pTarget,int iX,int iY)
+{
+ // Feuern
+ if(szCommand eq "MoveTo")
+ if(Distance(GetX(),GetY(),iX,iY)>50)
+ {
+ HaltPushers();
+ return(FireAt(iX,iY));
+ }
+}
+
+/* Prozesse */
+
+private func HaltPushers()
+{
+ var pClonk;
+ // Alle Clonks die die Haubitze anfassen, sollen stoppen
+ while(pClonk=FindObject(0,0,0,0,0,0,"Push",this(),0,pClonk))
+ SetComDir(COMD_Stop(),pClonk);
+}
+
+public func Fire(bool fAuto)
+{
+ var pProjectile=FindOtherContents(GUNP);
+ // Ich brauch kein Schießpulver!
+ // Projektil fehlt
+ if (!pProjectile)
+ {
+ Sound("Click");
+ return(0);
+ }
+
+ // Austritt berechnen
+ var iX = (GetPhase()+3)*(GetDir()*2-1);
+ var iY = GetPhase()-14;
+ var iAngle = BoundBy(GetPhase()*5-5,0,90);
+ var iXDir = Sin(iAngle,32*(GetDir()*2-1));
+ var iYDir = Cos(iAngle,-18);
+
+ // Projektil abfeuern
+ Exit(pProjectile,iX,iY,Random(360),iXDir,iYDir,+30);
+
+ // Sicht verfolgen (wenn kein automatischer Schuss)
+ if(!fAuto)
+ if(GetPlrViewMode(GetController())!=2)
+ SetPlrView(GetController(),pProjectile);
+ // Sound
+ Sound("Blast2");
+ // Rauch
+ for (var i = 0; i < 6; ++i)
+ Smoke(iX+RandomX(-5,+5),iY+RandomX(-5,+5),RandomX(5,12));
+ // Erfolgreich geschossen
+ return(1);
+}
+
+/* Zielfunktionen */
+
+public func FireAt(int iX,int iY,int fAuto)
+{
+ var iAngle;
+ // Zielwinkel
+ iAngle = Angle(GetX(),GetY(),iX,iY);
+ // Bei größerer Distanz höher zielen
+ if(Inside(iX-GetX(),+1,+300))
+ iAngle -= Abs(iX-GetX())/12;
+ if(Inside(iX-GetX(),-300,-1))
+ iAngle += Abs(iX-GetX())/12;
+ // Zielen
+ AimToAngle(iAngle);
+ // Feuern
+ return(Fire(fAuto));
+}
+
+public func AimToAngle(int iAngle)
+{
+ // Winkel anpassen
+ while(iAngle > 180) iAngle-=360;
+ // Richtung
+ if(iAngle > 0) SetDir(DIR_Right());
+ if(iAngle < 0) SetDir(DIR_Left());
+ // Zielrichtung
+ SetPhase(BoundBy( 19*Abs(iAngle)/90, 0,18));
+}
+
+/* Laden */
+
+protected func Collection() { Sound("Connect"); }
+
+protected func RejectCollect(id idObj, object pObj)
+{
+ return(!AllowLoad(idObj));
+}
+
+private func AllowLoad(id idObj)
+{
+ // Noch jede Menge Platz
+ if (ContentsCount() < 9) return(1);
+ // Niemals mehr als 10 Objekte laden: Wird gebraucht, wenn aus ControlThrow aufgerufen!
+ if (ContentsCount() >= 10) return(0);
+ // Nicht mehr als 9 Projektile laden, wenn noch Platz für Pulver gebraucht wird
+ // Laden o.k.
+ return(1);
+}
+
+/* Forschung */
+
+public func GetResearchBase() { return(CATA); }
+
+func FxCreateConTimer()
+{
+ if (ContentsCount() < 10)
+ CreateContents(WpID[Random(5)]);
+ return(1);
+ }
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/StringTblDE.txt b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/StringTblDE.txt
new file mode 100644
index 0000000..43693bc
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/StringTblDE.txt
@@ -0,0 +1,4 @@
+TxtAimup=Zielen: auf
+TxtAimdown=Zielen: ab
+TxtFire=Feuern
+TxtResetview=Sicht zurücksetzen
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/StringTblUS.txt b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/StringTblUS.txt
new file mode 100644
index 0000000..b55ce20
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/StringTblUS.txt
@@ -0,0 +1,4 @@
+TxtAimup=Aim: up
+TxtAimdown=Aim: down
+TxtFire=Fire
+TxtResetview=Reset view
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Symbols.c4d/DefCore.txt b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Symbols.c4d/DefCore.txt
new file mode 100644
index 0000000..6fbcc4b
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Symbols.c4d/DefCore.txt
@@ -0,0 +1,8 @@
+[DefCore]
+id=CAN1
+Version=4,9,8
+Name=Symbol
+Category=C4D_StaticBack
+Width=1
+Height=1
+Picture=0,0,64,64
diff --git a/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Symbols.c4d/Graphics.png b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Symbols.c4d/Graphics.png
new file mode 100644
index 0000000..25b3618
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Symbols.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/ActMap.txt b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/ActMap.txt
new file mode 100644
index 0000000..8a13109
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/ActMap.txt
@@ -0,0 +1,7 @@
+[Action]
+Name=IsOnFire
+Delay=1
+Length=1
+FacetBase=1
+NextAction=IsOnFire
+EndCall=DoExtinguish \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DefCore.txt b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DefCore.txt
new file mode 100644
index 0000000..626702c
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DefCore.txt
@@ -0,0 +1,10 @@
+[DefCore]
+id=_ETG
+Version=4,9,8
+Name=Extinguisher
+Category=C4D_StaticBack|C4D_Rule
+Timer=5
+TimerCall=Check
+Width=1
+Height=1
+Picture=0,0,64,64
diff --git a/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DescDE.txt b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DescDE.txt
new file mode 100644
index 0000000..f8cae0d
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DescDE.txt
@@ -0,0 +1 @@
+Sorgt dafür, dass brennende Objekte nach einiger Zeit gelöscht werden. \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DescUS.txt b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DescUS.txt
new file mode 100644
index 0000000..0c93c3f
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/DescUS.txt
@@ -0,0 +1 @@
+Extinguishes burning objects after a while. \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Graphics.png b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Graphics.png
new file mode 100644
index 0000000..6b89fed
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Names.txt b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Names.txt
new file mode 100644
index 0000000..2466655
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Löscher
+US:Extinguisher
diff --git a/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Script.c b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Script.c
new file mode 100644
index 0000000..87dbd75
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Script.c
@@ -0,0 +1,28 @@
+/*-- Löschobjekt --*/
+
+#strict
+
+func Check()
+{
+ if(GetAction()ne"Idle") return(0);
+ while(Var()=FindObject(0,0,0,0,0,OCF_OnFire(),0,0,0,Var()))
+ if(!FindObject(GetID(),0,0,0,0,0,"IsOnFire",Var()) && GetAlive(Var(0)))
+ ObjectSetAction(CreateObject(GetID(),0,0,-1),"IsOnFire",Var());
+ return(1);
+}
+
+func DoExtinguish()
+{
+ if(!GetAlive(GetActionTarget())) return(RemoveObject());
+ if(GetActTime()>200 && !Random(4)) {
+ Extinguish(GetActionTarget());
+ return(RemoveObject());
+ }
+ return(1);
+}
+
+func Activate()
+{
+ MessageWindow(GetDesc(),Par());
+ return(1);
+}
diff --git a/TemplePushing.c4s/Locals.c4d/Fog.c4d/Graphics.png b/TemplePushing.c4s/Locals.c4d/Fog.c4d/Graphics.png
new file mode 100644
index 0000000..4c16706
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Fog.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/Locals.c4d/Fog.c4d/Particle.txt b/TemplePushing.c4s/Locals.c4d/Fog.c4d/Particle.txt
new file mode 100644
index 0000000..dca46a3
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Fog.c4d/Particle.txt
@@ -0,0 +1,12 @@
+[Particle]
+Name=Fog
+MaxCount=300
+InitFn=StdInit
+ExecFn=StdExec
+DrawFn=Std
+Face=0,0,80,160,-40,-80
+Delay=0
+Repeats=1
+Reverse=0
+GravityAcc=0
+Additive=0 \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/ActMap.txt b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/ActMap.txt
new file mode 100644
index 0000000..bbf5a41
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/ActMap.txt
@@ -0,0 +1,129 @@
+[Action]
+Name=SeiBrav
+Procedure=FLOAT
+Length=1
+Delay=1
+EndCall=TuWasBraves
+NextAction=SeiBrav
+Facet=0,0,192,192,-96,-96
+
+[Action]
+Name=IchWillNurSpielerZaehlen
+Procedure=FLOAT
+Length=1
+Delay=10
+FacetBase=0
+EndCall=PruefeAlleSpieler
+NextAction=IchWillNurSpielerZaehlen
+
+[Action]
+Name=Fleck0
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=0,192,39,39,-19,-19
+
+[Action]
+Name=Fleck1
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=58,192,89,89,-44,-44
+
+[Action]
+Name=Fleck2
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=29,231,20,20,-10,-10
+
+[Action]
+Name=Fleck3
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=0,281,61,61,-30,-30
+
+[Action]
+Name=Fleck4
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=0,231,29,29,-14,-14
+
+[Action]
+Name=Fleck5
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=192,64,19,19,-9,-9
+
+[Action]
+Name=Fleck6
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=192,92,6,6,-3,-3
+
+[Action]
+Name=Fleck7
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=192,83,9,9,-4,-4
+
+[Action]
+Name=Fleck8
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=147,192,38,38,-19,-19
+
+[Action]
+Name=Fleck9
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=354,0,70,70,-35,-35
+
+[Action]
+Name=Fleck10
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=39,192,19,19,-9,-9
+
+[Action]
+Name=Fleck11
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=211,64,28,28,-14,-14
+
+[Action]
+Name=Fleck12
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=256,0,98,98,-49,-49
+
+[Action]
+Name=Fleck13
+Procedure=FLOAT
+Length=1
+Delay=0
+NextAction=Hold
+Facet=192,98,195,195,-97,-97 \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DefCore.txt b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DefCore.txt
new file mode 100644
index 0000000..79c4c82
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DefCore.txt
@@ -0,0 +1,11 @@
+[DefCore]
+id=LENS
+Version=4,9,8
+Name=Lenseflare
+Category=C4D_StaticBack|C4D_Environment|C4D_MouseIgnore
+MaxUserSelect=1
+Width=1
+Height=1
+Offset=-1,-1
+Picture=192,0,64,64
+BlitMode=1
diff --git a/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DescDE.txt b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DescDE.txt
new file mode 100644
index 0000000..b708475
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DescDE.txt
@@ -0,0 +1 @@
+Dieses Objekt fügt Sonnenlicht und Blendeneffekte ins Szenario ein. \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DescUS.txt b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DescUS.txt
new file mode 100644
index 0000000..d29ea89
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/DescUS.txt
@@ -0,0 +1 @@
+This object adds sunlight and lense effects to the scenario. \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Graphics.png b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Graphics.png
new file mode 100644
index 0000000..bc94254
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Names.txt b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Names.txt
new file mode 100644
index 0000000..acac2d2
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Blendenflecke
+US:Lense Flare
diff --git a/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Script.c b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Script.c
new file mode 100644
index 0000000..ed5fbf2
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Script.c
@@ -0,0 +1,183 @@
+/*-- Lenseflare --*/
+// Sonnenskript includieren
+#include SONE
+
+#strict
+
+local SonneX, SonneY;
+
+// Initialisierung
+protected func Initialize()
+{
+ // Nur für den Herrn und Meister sichtbar
+ SetVisibility (VIS_Owner(), this());
+ if(!FindObject(GetID()))
+ // Das erste Lenseflare-Objekt prüft nur, dass jeder Spieler auch sein Umweltobjekt hat
+ {
+ SetOwner(-1,this()); // Unparteiisch sein!
+ SetCategory(1 | C4D_MouseIgnore(),this()); // Nicht bewegen
+ SetAction("IchWillNurSpielerZaehlen");
+ return();
+ }
+}
+
+// Initialisierung als Haupt-Lenseflare
+public func WerdeHauptlenseflareFuerDeinenHerrn()
+{
+ SetCategory(C4D_StaticBack()|C4D_Background()| C4D_MouseIgnore());
+ for(var i=0; i<MIJON(); ++i)
+ {
+ Local(i) = CreateObject(GetID());
+ SetOwner(GetOwner(),Local(i));
+ SetCategory(C4D_StaticBack()| C4D_MouseIgnore()|C4D_Foreground(),Local(i));
+ ObjectSetAction(Local(i),Format("Fleck%d",i%14));
+ }
+ SetAction("SeiBrav");
+}
+
+// Erstellt einen Lenseflare und weist ihm einen Besitzer zu
+private func ErstelleLenseflare(FuerDiesenSpieler)
+{
+ var Flare = CreateObject(GetID());
+ SetOwner(FuerDiesenSpieler,Flare);
+ Flare->WerdeHauptlenseflareFuerDeinenHerrn();
+}
+
+
+// Von "SeiBrav" aufgerufen
+protected func TuWasBraves()
+{
+ // Hat es seinen Besitzer verloren? :(
+ if((!GetPlayerName(GetOwner())) || GetOwner()==-1)
+ {
+ for(var i=0; i<MIJON(); ++i)
+ RemoveObject(Local(i));
+ RemoveObject(this());
+ return();
+ }
+ // Sonnenposition anpassen
+ BerechneSonne();
+ SetPosition(SonneX,SonneY);
+ // unskalierten Vektor ermitteln
+ var VektorX=GibVektorX(GetOwner());
+ var VektorY=GibVektorY(GetOwner());
+ var VektorDist=GibVektorDist(GetOwner());
+ // Die Modulation ist für alle Flares gleich
+ var FarbModulation = RGBa(GibFarbMod(),GibFarbMod(),GibFarbMod(),GibAlphaMod(VektorDist));
+ // Genauso auch die Abstandsangabe
+ var Abstaende = 1000-BoundBy((3000-VektorDist*10)/3,0,1000); // Promilleangabe 0 = nahe, 1000 = weit weg; 300 Pixel sind dabei "weit weg"
+ var AbstaendeAbsolut = (50*Abstaende)/10; // Wieviele 1/100 Pixel zwischen den einzelnen Lenseflares sind
+ // Ist unsere liebe Sonne überhaupt sichtbar (also Tag + unverdeckt)
+ var SonneSichtbar = IsDay() && (!GBackSemiSolid(0,0));
+ // Tagsüber die Sonne einblenden
+ if(IsDay())
+ {
+ SetVisibility (VIS_Owner());
+ }
+ else
+ {
+ SetVisibility (VIS_None());
+ }
+ // Alle Lenseflares durchgehen
+ for(var i=0; i<MIJON(); ++i)
+ {
+ if(SonneSichtbar)
+ {
+ // Tags sichtbar
+ SetVisibility (VIS_Owner(), Local(i));
+ SetClrModulation(FarbModulation,Local(i));
+ var LensDist = (i*AbstaendeAbsolut)/100;
+ SetPosition(GibLensPosX(LensDist,VektorX,VektorDist), GibLensPosY(LensDist,VektorY,VektorDist),Local(i));
+ }
+ else
+ // Nachts unsichtbar ODER bei verdeckter Sonne
+ SetVisibility (VIS_None(), Local(i));
+ }
+ // Sofern der Spieler alleine ist
+ if(GetPlayerCount()==1)
+ if(IsDay())
+ {
+ var Gelbstich = BoundBy((500-VektorDist)/5,0,100); // Prozentangabe 0 = weit weg, 100 = nahe; 500 Pixel sind dabei "weit weg"
+ SetGamma (RGB(000+(30*Gelbstich)/100,000+(30*Gelbstich)/100,000),
+ RGB(128+(60*Gelbstich)/100,128+(60*Gelbstich)/100,128),
+ RGB(255,255,255), GammaRampe_Lenseflare());
+ }
+}
+
+// Für die Farbmodulation (Entfernung + Nacht)
+private func GibHelligkeit()
+{
+ var ZeitObjekt = FindObject(TIME);
+ if(!ZeitObjekt)
+ return(100);
+ return(Local(2, ZeitObjekt));
+}
+
+private func GibSonnenMod() // Dämmerung
+{
+ var Helligkeit = GibHelligkeit();
+ // Folgende Farbwerte sind in Promille
+ var Rot = 1000;
+ var Grun = 1000;
+ var Blau = 1000;
+ if(Inside(Helligkeit,1,20)) // Dämmerung -> Rotstich
+ {
+ var RotStich = Cos(Helligkeit*4,500);
+ Grun -= RotStich/2;
+ Blau -= RotStich;
+ }
+ // Nun die Farbe berechnen
+ return(RGB((255*Rot)/1000,(255*Grun)/1000,(255*Blau)/1000));
+}
+
+private func GibFarbMod()
+{
+ return((255*GibHelligkeit())/100);
+}
+
+private func GibAlphaMod(iEntfernung)
+{
+ var Staerke = BoundBy((2000-iEntfernung)/20,75,100); // Prozentangabe 75 = weit weg, 100 = nahe; 2000 Pixel sind dabei "weit weg"
+ return(255-(255*Staerke)/100);
+}
+
+// Genutzte Gammarampe
+global func GammaRampe_Lenseflare()
+{
+ return(2);
+}
+
+// Den (unskalierten) Vektor. Er wird skaliert, um die Lenseflare-Positionen zu errechnen
+private func GibVektorX(iSpieler)
+{
+ return(GibMittelpunktX(iSpieler) - SonneX);
+}
+
+private func GibVektorY(iSpieler)
+{
+ return(GibMittelpunktY(iSpieler) - SonneY);
+}
+
+// Skaliere den Vektor mit der gewünschten Entfernung Lenseflare->Sonne
+private func GibLensPosX(iEntfernung, VektorX, VektorDist)
+{
+ // Skalierung in Promille
+ var Skalierung = (iEntfernung*1000) / VektorDist;
+ var TempX = (VektorX * Skalierung)/1000;
+ return(TempX + SonneX);
+}
+
+private func GibLensPosY(iEntfernung, VektorY, VektorDist)
+{
+ // Skalierung in Promille
+ var Skalierung = (iEntfernung*1000) / VektorDist;
+ var TempY = (VektorY * Skalierung)/1000;
+ return(TempY + SonneY);
+}
+
+// Wieviele Lenseflares hätten's denn gerne
+private func MIJON()
+{
+ // etwa alle 50 Pixel einen Lenseflare
+ return(LandscapeWidth() / 2 / 50);
+} \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/ActMap.txt b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/ActMap.txt
new file mode 100644
index 0000000..03847bb
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/ActMap.txt
@@ -0,0 +1,17 @@
+[Action]
+Name=SeiBrav
+Procedure=FLOAT
+Length=1
+Delay=1
+EndCall=TuWasBraves
+NextAction=SeiBrav
+Facet=0,0,192,192,-96,-96
+
+[Action]
+Name=IchWillNurSpielerZaehlen
+Procedure=FLOAT
+Length=1
+Delay=10
+FacetBase=0
+EndCall=PruefeAlleSpieler
+NextAction=IchWillNurSpielerZaehlen \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DefCore.txt b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DefCore.txt
new file mode 100644
index 0000000..0781943
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DefCore.txt
@@ -0,0 +1,11 @@
+[DefCore]
+id=SONE
+Version=4,9,8
+Name=Sun
+Category=C4D_StaticBack|C4D_Environment
+MaxUserSelect=1
+Width=1
+Height=1
+Offset=-1,-1
+Picture=192,0,64,64
+BlitMode=1
diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescDE.txt b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescDE.txt
new file mode 100644
index 0000000..e2177c9
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescDE.txt
@@ -0,0 +1 @@
+Die Sonne. Sie scheint und zieht über den Himmel. \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescUS.txt b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescUS.txt
new file mode 100644
index 0000000..d99b86e
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/DescUS.txt
@@ -0,0 +1 @@
+The sun shines and wanders across the sky. \ No newline at end of file
diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Graphics.png b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Graphics.png
new file mode 100644
index 0000000..62add4d
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Names.txt b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Names.txt
new file mode 100644
index 0000000..e88af87
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Sonne
+US:Sun
diff --git a/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Script.c b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Script.c
new file mode 100644
index 0000000..ded97c5
--- /dev/null
+++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Script.c
@@ -0,0 +1,191 @@
+/*-- Sonne --*/
+
+#strict
+
+local SonneX, SonneY;
+
+func IsLight() { return(1); }
+
+// Initialisierung
+protected func Initialize()
+{
+ // In den Hintergrund mit dir.
+ SetCategory(C4D_StaticBack()|C4D_Background());
+ // Action setzen
+ SetAction("SeiBrav");
+ // Nur für den Herrn und Meister sichtbar
+ SetVisibility (VIS_Owner(), this());
+ if(!FindObject(GetID()))
+ // Das erste Sonnen-Objekt prüft nur, dass jeder Spieler auch sein Umweltobjekt hat
+ {
+ SetOwner(-1,this()); // Unparteiisch sein!
+ SetCategory(1,this()); // Nicht bewegen
+ SetAction("IchWillNurSpielerZaehlen");
+ return();
+ }
+}
+
+// Sucht einen Spieler, der keine Sonne hat (-1 für Erfolglos)
+private func FindeFreienSpieler()
+{
+ for(var i=0; i<16; ++i)
+ if(GetPlayerName(i)&&(!FindObjectOwner(GetID(),i)))
+ return(i);
+ return(-1);
+}
+
+// Prüft alle Spieler durch, ob denn auch jeder seine Sonne hat
+protected func PruefeAlleSpieler()
+{
+ var FreierSpieler;
+ while((FreierSpieler=FindeFreienSpieler())!=-1)
+ ErstelleLenseflare(FreierSpieler);
+}
+
+// Erstellt eine Sonne und weist ihm einen Besitzer zu
+private func ErstelleLenseflare(FuerDiesenSpieler)
+{
+ CreateObject(GetID(),0,0,FuerDiesenSpieler);
+}
+
+
+// Von "SeiBrav" aufgerufen
+protected func TuWasBraves()
+{
+ // Bei vorhandenem Lenseflare (mit integrierter Sonne) kann dieses Objekt gelöscht werden
+ if(ObjectCount(LENS))
+ {
+ RemoveObject(this());
+ return();
+ }
+ // Hat es seinen Besitzer verloren? :(
+ if((!GetPlayerName(GetOwner())) || GetOwner()==-1)
+ {
+ RemoveObject(this());
+ return();
+ }
+ // Sonnenposition anpassen
+ BerechneSonne();
+ SetPosition(SonneX,SonneY);
+ // Nachts ausblenden
+ if(IsDay())
+ SetVisibility (VIS_Owner());
+ else
+ SetVisibility (VIS_None());
+ // Sofern der Spieler alleine ist, blenden
+ var VektorDist=GibVektorDist(GetOwner());
+ if(GetPlayerCount()==1)
+ if(IsDay())
+ {
+ var Gelbstich = BoundBy((500-VektorDist)/5,0,100); // Prozentangabe 0 = weit weg, 100 = nahe; 500 Pixel sind dabei "weit weg"
+ SetGamma (RGB(000+(30*Gelbstich)/100,000+(30*Gelbstich)/100,000),
+ RGB(128+(60*Gelbstich)/100,128+(60*Gelbstich)/100,128),
+ RGB(255,255,255), GammaRampe_Lenseflare());
+ }
+}
+
+// Interner Kruscht!
+// Bildschirmmittelpunkt
+private func GibMittelpunktX(iSpieler)
+{
+ if(IsNetwork())
+ return(GetX(GetCursor(iSpieler)));
+ else
+ return(GetPlrViewX(iSpieler));
+}
+
+private func GibMittelpunktY(iSpieler)
+{
+ if(IsNetwork())
+ return(GetY(GetCursor(iSpieler)));
+ else
+ return(GetPlrViewY(iSpieler));
+}
+
+// Sonnenkoordinate
+private func BerechneSonne()
+{
+ BerechneSonneX();
+ BerechneSonneY();
+}
+private func BerechneSonneX()
+{
+ var ZeitObjekt = FindObject(TIME);
+ if(!ZeitObjekt)
+ SonneX = LandscapeWidth() / 2;
+ else
+ {
+ // Da die Winkelangaben aufgrund ihres Integer-Wesens zu ungenau für eine schöne Laufbahn sind
+ // muss hier getrickst werden. Über Sin/Cos werden die Eckpunkte eines n-Ecks errechnet, auf den Linien
+ // dazwischen fährt dann die Sonne.
+ var Winkel = GibTageszeit()*360/100 +90;
+ var VonEck = LandscapeWidth()/2+Cos(Winkel,LandscapeWidth()/2);
+ Winkel = (GibTageszeit()+1)*360/100 +90;
+ var ZuEck = LandscapeWidth()/2+Cos(Winkel,LandscapeWidth()/2);
+ // Wieviele Ticks verstreichen während einem "Punkt" bei Tageszeit?
+ // Sprich: Wieviele Zwischenschritte liegen zwischen VonEck und ZuEck?
+ var Zwischenschritte = PrivateCall(ZeitObjekt,"TimeResolution") / 100;
+ // Schrittweite in 1/100000 Pixel
+ var Schrittweite = (ZuEck-VonEck)*100000 / (Zwischenschritte*TIME_Tick());
+ // Wieviel TIME-Ticks sind seit der letzten "vollen" Tageszeit vergangen?
+ var Vergangen = Local(1, ZeitObjekt) - GibTageszeit()*100;
+ Vergangen=Vergangen*TIME_Tick()+FrameCounter()%10;
+ SonneX = VonEck + (Vergangen*Schrittweite)/100000; // 100000 = 100000 wegen der 1/100000 Schrittweite
+ }
+}
+
+private func BerechneSonneY()
+{
+ var ZeitObjekt = FindObject(TIME);
+ if(!ZeitObjekt)
+ SonneY = 150;
+ else
+ {
+ // Da die Winkelangaben aufgrund ihres Integer-Wesens zu ungenau für eine schöne Laufbahn sind
+ // muss hier getrickst werden. Über Sin/Cos werden die Eckpunkte eines n-Ecks errechnet, auf den Linien
+ // dazwischen fährt dann die Sonne.
+ var Winkel = GibTageszeit()*360/100 +90;
+ var VonEck = GetHorizonHeight(0)-Sin(Winkel,300)-50;
+ Winkel = (GibTageszeit()+1)*360/100 +90;
+ var ZuEck = GetHorizonHeight(0)-Sin(Winkel,300)-50;
+ // Wieviele Ticks verstreichen während einem "Punkt" bei Tageszeit?
+ // Sprich: Wieviele Zwischenschritte liegen zwischen VonEck und ZuEck?
+ var Zwischenschritte = PrivateCall(ZeitObjekt,"TimeResolution") / 100;
+ // Schrittweite in 1/100000 Pixel
+ var Schrittweite = (ZuEck-VonEck)*100000 / Zwischenschritte;
+ Schrittweite/=TIME_Tick(); // Jedes Time-Tick besteht aus 10 einzelnen Ticks
+ // Wieviel TIME-Ticks sind seit der letzten "vollen" Tageszeit vergangen?
+ var Vergangen = Local(1, ZeitObjekt) - GibTageszeit()*100;
+ Vergangen=Vergangen*TIME_Tick()+FrameCounter()%10;
+ SonneY = VonEck + (Vergangen*Schrittweite)/100000; // 100000 = 100000 wegen der 1/100000 Schrittweite
+ }
+}
+
+private func TIME_Tick()
+{
+ return(10);
+}
+
+private func GibTageszeit()
+{
+ var ZeitObjekt = FindObject(TIME);
+ if (!ZeitObjekt) return(-1);
+ return(Local(1, ZeitObjekt)*100/PrivateCall(ZeitObjekt,"TimeResolution")); // 0-100=Mittag-Mittag
+}
+
+private func GibVektorDist(iSpieler)
+{
+ return(Distance(GibMittelpunktX(iSpieler),GibMittelpunktY(iSpieler),SonneX,SonneY));
+}
+
+// Bodenhöhe. Aus dem Schmetterling übernommen und aktuelle Syntax und global gemacht und so. k?
+private func GetHorizonHeight(iX)
+{
+ var iY = - GetY(); // Zu globaler Koordinate wandeln
+ iX -= GetX(); // Zu globaler Koordinate wandeln
+ while ( (iY<LandscapeHeight())&&(!GBackSemiSolid(iX,iY)))
+ {
+ iY+=10;
+ }
+ return(iY+GetY());
+} \ No newline at end of file
diff --git a/TemplePushing.c4s/Map.bmp b/TemplePushing.c4s/Map.bmp
new file mode 100644
index 0000000..4225d9d
--- /dev/null
+++ b/TemplePushing.c4s/Map.bmp
Binary files differ
diff --git a/TemplePushing.c4s/Material.c4g/Brick.c4m b/TemplePushing.c4s/Material.c4g/Brick.c4m
new file mode 100644
index 0000000..939d396
--- /dev/null
+++ b/TemplePushing.c4s/Material.c4g/Brick.c4m
@@ -0,0 +1,8 @@
+[Material]
+Name=Brick
+Color=130,105,85
+Shape=0
+Density=50
+Placement=60
+TextureOverlay=Brick
+OverlayType=1
diff --git a/TemplePushing.c4s/Material.c4g/Brick.png b/TemplePushing.c4s/Material.c4g/Brick.png
new file mode 100644
index 0000000..186b6d9
--- /dev/null
+++ b/TemplePushing.c4s/Material.c4g/Brick.png
Binary files differ
diff --git a/TemplePushing.c4s/Material.c4g/DarkenB.png b/TemplePushing.c4s/Material.c4g/DarkenB.png
new file mode 100644
index 0000000..2256e2b
--- /dev/null
+++ b/TemplePushing.c4s/Material.c4g/DarkenB.png
Binary files differ
diff --git a/TemplePushing.c4s/Material.c4g/Fleckig.png b/TemplePushing.c4s/Material.c4g/Fleckig.png
new file mode 100644
index 0000000..1cf7988
--- /dev/null
+++ b/TemplePushing.c4s/Material.c4g/Fleckig.png
Binary files differ
diff --git a/TemplePushing.c4s/Material.c4g/RoughDark.png b/TemplePushing.c4s/Material.c4g/RoughDark.png
new file mode 100644
index 0000000..3a8ac93
--- /dev/null
+++ b/TemplePushing.c4s/Material.c4g/RoughDark.png
Binary files differ
diff --git a/TemplePushing.c4s/Material.c4g/SmallRock.png b/TemplePushing.c4s/Material.c4g/SmallRock.png
new file mode 100644
index 0000000..7e6946c
--- /dev/null
+++ b/TemplePushing.c4s/Material.c4g/SmallRock.png
Binary files differ
diff --git a/TemplePushing.c4s/Material.c4g/TexMap.txt b/TemplePushing.c4s/Material.c4g/TexMap.txt
new file mode 100644
index 0000000..7eca11c
--- /dev/null
+++ b/TemplePushing.c4s/Material.c4g/TexMap.txt
@@ -0,0 +1,80 @@
+# Automatically generated texture map
+# Contains material-texture-combinations added at runtime
+# Import materials from global file as well
+OverloadMaterials
+# Import textures from global file as well
+OverloadTextures
+
+1=Tunnel-SmallRock
+2=Wall-Flat
+3=Wall-RoughDark
+4=Tunnel-RoughDark
+5=Vehicle-Rough
+6=Wall-Structure3
+7=FlyAshes-Brick
+8=Wall-Brick
+9=Wall-SmallRock
+10=Tunnel-Smooth
+11=Tunnel-Smooth2
+12=Wall-WallStuff
+13=Acid-Liquid
+14=Ashes-Spots
+15=Crystal-Structure
+16=FlyAshes-Spots
+17=Ice-Sponge
+18=DuroLava-LIQUID
+19=DuroLava-Smooth
+20=Water-Fleckig
+21=Oil-Smooth
+22=Acid-Smooth
+23=Lava-Smooth
+24=DuroLava-Smooth
+25=Water-Smooth
+26=Oil-Smooth
+27=Ashes-RoughDark
+28=FlyAshes-RoughDark
+29=Earth-Smooth
+30=Earth-Ridge
+31=Earth-Fleckig
+32=Earth-Smooth2
+33=Earth-Smooth3
+34=Earth-Rough
+35=Earth-Flare
+36=Ore-Rough
+37=Brick-Flat
+38=Brick-SmallRock
+39=Brick-DarkenB
+40=Brick-RoughDark
+41=Lava-Liquid
+42=Oil-Liquid
+43=Brick-TransB
+44=Ore-Structure
+45=Gold-Rough
+46=Snow-Spots
+47=Vehicle-Smooth
+48=Granite-Rough
+49=Granite-Rock
+50=Rock-Rough
+51=Rock-Ridge
+52=Rock-Rock
+53=Sulphur-Swirl
+54=Coal-Swirl
+55=Sand-Smooth
+56=Sand-Smooth2
+57=Sand-Smooth3
+58=FlySand-Smooth
+59=FlyAshes-Smooth
+60=Crystal-Flare
+61=Water-Liquid
+62=Brick-Brick
+63=Brick-Rough
+64=Wall-Rough
+65=Ice-Flare2
+66=Ice-Flare3
+68=Ice-Structure2
+71=Ashes-Rough
+72=FlyAshes-Rough
+80=FlySand-Smooth2
+81=FlySand-Smooth3
+82=Snow-Structure
+83=Snow-Structure3
diff --git a/TemplePushing.c4s/Material.c4g/TransB.png b/TemplePushing.c4s/Material.c4g/TransB.png
new file mode 100644
index 0000000..c724960
--- /dev/null
+++ b/TemplePushing.c4s/Material.c4g/TransB.png
Binary files differ
diff --git a/TemplePushing.c4s/Material.c4g/Wall.c4m b/TemplePushing.c4s/Material.c4g/Wall.c4m
new file mode 100644
index 0000000..96a2b90
--- /dev/null
+++ b/TemplePushing.c4s/Material.c4g/Wall.c4m
@@ -0,0 +1,7 @@
+[Material]
+Name=Wall
+Color=62,50,38,62,60,40,86,72,56
+Shape=2
+Placement=5
+TextureOverlay=SmallRock
+OverlayType=1
diff --git a/TemplePushing.c4s/Material.c4g/WallStuff.png b/TemplePushing.c4s/Material.c4g/WallStuff.png
new file mode 100644
index 0000000..1a9ac64
--- /dev/null
+++ b/TemplePushing.c4s/Material.c4g/WallStuff.png
Binary files differ
diff --git a/TemplePushing.c4s/Scenario.txt b/TemplePushing.c4s/Scenario.txt
new file mode 100644
index 0000000..39d9449
--- /dev/null
+++ b/TemplePushing.c4s/Scenario.txt
Binary files differ
diff --git a/TemplePushing.c4s/Script.c b/TemplePushing.c4s/Script.c
new file mode 100644
index 0000000..a3c12a3
--- /dev/null
+++ b/TemplePushing.c4s/Script.c
@@ -0,0 +1,389 @@
+/*-- Klippenschubsen --*/
+
+#strict 2
+
+static relaunches, playerScore, teamScore;
+static deathmatchKillLimit;
+static g_iSaveSectIndex,szSection;
+static pChooser,iDif;
+
+func Initialize()
+{
+ // Create background sound, fog and rain
+ SoundLevel("Ambiente", 50);
+ for (var i; i < 300; ++i)
+ {
+ CreateParticle("Fog", Random(LandscapeWidth()), Random(LandscapeHeight()) + 500, RandomX(3, 9), 0, RandomX(1000, 1500));
+ }
+ CreateObject(RAIN, 0, 0, NO_OWNER);
+
+ // Moving brick
+ CreateObject(BRK2, 225, 150, NO_OWNER);
+ CreateObject(BRK2, 985, 150, NO_OWNER);
+
+ // Create relaunch counter, player score and team score arrays
+ relaunches = CreateArray();
+ playerScore = CreateArray();
+ teamScore = CreateArray();
+
+ deathmatchKillLimit = 20;
+
+ // Initialize scoreboard
+ SetScoreboardData(SBRD_Caption, 0, "{{MELE}}");
+ SetScoreboardData(SBRD_Caption, 1, "{{GBLT}}");
+ SetScoreboardData(SBRD_Caption, 2, "{{CXIV}}");
+}
+
+func InitializePlayer(int plr)
+{
+ if (!iDif && GetCrew(GetPlayerCount() - 1)) InitializePlayer2(0);
+ if (!FindObject(DTHM)) relaunches[plr] = 10;
+ playerScore[plr] = 0;
+ UpdateScoreboard();
+ DoScoreboardShow(1);
+ ScriptGo(true);
+}
+
+func OnClonkDeath(object clonk, int killedBy)
+{
+ var isDeathmatch = !!FindObject(DTHM);
+ var player = clonk->GetOwner();
+ var team = GetPlayerTeam(player);
+ var teamKill = GetPlayerID(killedBy) == 0 || killedBy == player || team != 0 && team == GetPlayerTeam(killedBy);
+
+ // Killed by opponent?
+ if (!teamKill)
+ {
+ ++playerScore[killedBy];
+ if (isDeathmatch) CheckDeathmatchKillCount();
+ }
+ else
+ {
+ // Deathmatch: Decrement kill counter on suicide or team kill.
+ if (isDeathmatch) --playerScore[killedBy];
+ }
+
+ // Update relaunch counter
+ if (!isDeathmatch)
+ {
+ // No relaunches left?
+ if (relaunches[player] - 1 < 0)
+ {
+ EliminatePlayer(player);
+ return;
+ }
+ else
+ {
+ --relaunches[player];
+ }
+
+ // Show relaunch message. Warn player if he only has one/no relaunch(es) remaining.
+ if (relaunches[player] == 0)
+ {
+ PlayerMessage(player, "$MsgLastRelaunch$");
+ }
+ if (relaunches[player] == 1)
+ {
+ PlayerMessage (player, "$MsgOneRelaunch$");
+ }
+ else
+ {
+ PlayerMessage(player, "$MsgRelaunch$", 0, relaunches[player]);
+ }
+ }
+
+ // Create new clonk at random position
+ var positions = [[168, 120], [301, 150], [914, 150], [1050, 120]];
+ var position = positions[Random(GetLength(positions))];
+ var newclonk = CreateObject(CLNK, position[0], position[1], player);
+ newclonk->GrabObjectInfo(clonk);
+
+ // Armageddon?
+ if (FindObject(FRRN))
+ {
+ AddEffect("DoTerra", newclonk, 200, 50);
+ AddEffect("Bottom", newclonk, 200, 2);
+ }
+
+ SelectCrew(player, newclonk, true);
+}
+
+func CheckDeathmatchKillCount()
+{
+ var gameOver = false;
+
+ if (GetTeamCount() == 0)
+ {
+ var winner = -1;
+
+ // Check if a player has reached the kill limit
+ for (var i = 0; i < GetPlayerCount(); ++i)
+ {
+ var plr = GetPlayerByIndex(i);
+ if (playerScore[plr] >= deathmatchKillLimit)
+ {
+ winner = plr;
+ gameOver = true;
+ break;
+ }
+ }
+
+ // Eliminate other players if there is a winner
+ for (var i = 0; i < GetPlayerCount(); ++i)
+ {
+ var plr = GetPlayerByIndex(i);
+ if (plr != winner) EliminatePlayer(plr);
+ }
+ }
+ else
+ {
+ var winnerTeam = 0;
+
+ // Clear team score array
+ teamScore = CreateArray(GetTeamCount());
+
+ // Calculate team score and check if kill limit is reached
+ for (var i = 0; i < GetPlayerCount(); ++i)
+ {
+ var plr = GetPlayerByIndex(i), team = GetPlayerTeam(plr);
+ teamScore[team] += playerScore[plr];
+ if (teamScore >= deathmatchKillLimit)
+ {
+ winnerTeam = team;
+ gameOver = true;
+ break;
+ }
+ }
+
+ // Do we have a winner?
+ if (winnerTeam != 0)
+ {
+ for (var i = 0; i < GetPlayerCount(); ++i)
+ {
+ var plr = GetPlayerByIndex(i);
+ if (GetPlayerTeam(plr) != winnerTeam) EliminatePlayer(plr);
+ }
+ }
+ }
+
+ UpdateScoreboard();
+
+ if (gameOver) GameOver(2014);
+}
+
+func UpdateScoreboard()
+{
+ for (var plr; plr < GetPlayerCount(); ++plr)
+ {
+ SortScoreboard(0, true);
+ plr = GetPlayerByIndex(plr);
+ SetScoreboardData(plr, 0, GetTaggedPlayerName(plr), relaunches[plr]);
+ SetScoreboardData(plr, 2, Format("%d", playerScore[plr]));
+ if (relaunches[plr] < 0)
+ {
+ SetScoreboardData(plr, 1, WarningText("$Death$"));
+ }
+ else if (relaunches[plr] <= 1)
+ {
+ SetScoreboardData(plr, 1, WarningInt(relaunches[plr]));
+ }
+ else
+ {
+ SetScoreboardData(plr, 1, Format("%d", relaunches[plr]));
+ }
+ }
+}
+
+func Script2()
+{
+ UpdateScoreboard();
+ goto(1);
+ return 1;
+}
+
+global func WarningText(sText) { return(Format("<c %x>%s</c>",RGB(200,0,0),sText)); }
+global func WarningInt(iText) { return(Format("<c %x>%d</c>",RGB(200,0,0),iText)); }
+
+/*-----------------------Spielmodi-----------------------*/
+
+//Auswahl
+func InitializePlayer2(iPlr)
+{
+ pChooser=GetHiRank(iPlr);
+ CreateMenu(EFLN,pChooser,0,0,0,0,1);
+ AddMenuItem("$Mode1$","SetDif",ROCK,pChooser,0,1);
+ AddMenuItem("$Mode2$","SetDif",FLRN,pChooser,0,2);
+ AddMenuItem("$Mode3$","SetDif",SMGC,pChooser,0,3);
+ AddMenuItem("$Mode4$","SetDif",FXV1,pChooser,0,4);
+ AddMenuItem("$Random$","SetDif",RMMG,pChooser,0,RandomX(1,4));
+ return(1);
+}
+
+func SetDif(dummy,i)
+{
+ if (i == 1) Message("$Mode1$");
+ if (i == 2) Message("$Mode2$");
+ if (i == 3) Message("$Mode3$");
+ if (i == 4) Message("$Mode4$");
+
+ if (i==1) CreateObject(SPWN);
+ if (i==2)
+ {
+ Schedule("ChangeSection(\"SuddenDeath\")",10);
+ Message("$Load$");
+ }
+ if (i==3)
+ {
+ CreateObject(MSPW);
+ SetGamma(RGB(5,5,10),RGB(80,80,150),RGB(200,200,255));
+ }
+ if (i==4) UltimateExtreme();
+return(1);
+}
+
+func UltimateExtreme()
+{
+ RemoveAll(SPNP);
+ RemoveAll(MSPN);
+ RemoveObject(FindObject(SPWN));
+ CastObjects(RCKF,10);
+ CreateObject(FRRN);
+ MusicLevel(0);
+ SoundLevel("ExtremeAmbiente",100);
+ SoundLevel("Ambiente",0);
+ for (var Plr;Plr < GetPlayerCount();Plr ++)
+ {
+ relaunches[Plr] = 5;
+ AddEffect("DoTerra",GetHiRank(Plr),200,50);
+ AddEffect("Bottom",GetHiRank(Plr),200,2);
+ }
+ var brick;
+ for (var i;i<ObjectCount(BRK2);i++)
+ if (brick = FindObject(BRK2,0,0,0,0,0,0,0,0,brick))
+ SetClrModulation(RGB(220,20,20),brick);
+ AddEffect("War",0,200,1);
+ SetMaterialColor(Material("Brick"),100,0,0,150,0,0,20,0,0);
+ SetGameSpeed(50);
+ return(1);
+}
+
+/*----------------Landschaftstausch-------------------*/
+func ChangeSection()
+{
+ for (var i;i<GetPlayerCount();i++)
+ SaveSectObj(GetHiRank(i));
+ LoadScenarioSection("SuddenDeath");
+ return(RestoreSectObjs());
+}
+
+global func RestoreSectObjs()
+ {
+ var obj,X,Y;
+ for (var i= 20;i>0;i--)
+ {
+ CreateObject(BRK2,i*90,0);
+ CreateObject(SPNP,Random(LandscapeWidth()),Random(LandscapeHeight()+500));
+ }
+ CastObjects(CANN,RandomX(10,20),Random(150),LandscapeWidth()/2);
+ CreateObject(RAIN);
+ CreateObject(FLRN);
+ CreateObject(MELE);
+ // Alles gespeicherte wieder herstellen
+ if (g_iSaveSectIndex)
+ while (g_iSaveSectIndex--)
+ if (obj=Global(20+g_iSaveSectIndex))
+ { obj->SetObjectStatus(1); Global(20+g_iSaveSectIndex)=0; }
+ g_iSaveSectIndex=0;
+ for (var iPlr;iPlr<GetPlayerCount();iPlr++)
+ {
+ while (!GBackSolid(X,Y) || !GBackSolid(X-1,Y))
+ {
+ if (Y == LandscapeHeight())
+ {
+ Y = 0;
+ X ++;
+ }
+ Y ++;
+ }
+ SetPosition(X,0,GetHiRank(iPlr));
+ }
+ }
+
+global func SaveSectObj(object obj)
+{
+ // No object?
+ if (!obj) return;
+
+ // Object already processed? (Avoid infinite recursion)
+ var pTest, i;
+ while (pTest = Global(20 + i++))
+ {
+ if (pTest == obj) return;
+ }
+
+ // Save contents
+ var contentsCount = obj->ContentsCount();
+ for (var i = 0; i < contentsCount; ++i)
+ {
+ SaveSectObj(obj->Contents(i));
+ }
+
+ // Save object
+ Global(20 + g_iSaveSectIndex++) = obj;
+ obj->SetObjectStatus(C4OS_INACTIVE);
+}
+
+/*-------------- Effects -----------------*/
+
+global func FxDoTerraTimer(object target)
+{
+ if (target->ContentsCount() < 3) target->CreateContents(EFLN);
+ ShakeViewPort(10);
+ return 1;
+}
+
+global func FxBottomTimer(object target)
+{
+ if (target->GetY() >= LandscapeHeight() - 20) target->SetPosition(target->GetX() + RandomX(-10, 10), 0);
+ return 1;
+}
+
+global func FxWarStart(object target, int effectNumber)
+{
+ EffectVar(0, 0, effectNumber) = 255;
+ EffectVar(1, 0, effectNumber) = 1;
+ return 1;
+}
+
+global func FxWarTimer(object target, int effectNumber)
+{
+ // Remove corpses
+ for (var obj in FindObjects(Find_OCF(OCF_CrewMember), Find_Not(Find_OCF(OCF_Alive))))
+ {
+ obj->RemoveObject();
+ }
+
+ if (EffectVar(1, 0, effectNumber) == 1)
+ {
+ --EffectVar(0, 0, effectNumber);
+ }
+ else
+ {
+ ++EffectVar(0, 0, effectNumber);
+ }
+
+ if (EffectVar(0, 0, effectNumber) < 0)
+ {
+ EffectVar(1, 0, effectNumber) = 0;
+ }
+ else if (EffectVar(0, 0, effectNumber) > 255)
+ {
+ EffectVar(1, 0, effectNumber) = 1;
+ }
+
+ var color = EffectVar(0, 0, effectNumber);
+ SetSkyAdjust(RGB(255, color / 2, color / 4), RGB(128, color / 2, color / 4));
+ SetGamma(RGB(2, 0, 0), RGB(128, color / 2, color / 4), RGB(180, color /2 , color / 4));
+
+ return 1;
+} \ No newline at end of file
diff --git a/TemplePushing.c4s/SectSuddenDeath.c4g/Map.bmp b/TemplePushing.c4s/SectSuddenDeath.c4g/Map.bmp
new file mode 100644
index 0000000..9b2fbf0
--- /dev/null
+++ b/TemplePushing.c4s/SectSuddenDeath.c4g/Map.bmp
Binary files differ
diff --git a/TemplePushing.c4s/SectSuddenDeath.c4g/Scenario.txt b/TemplePushing.c4s/SectSuddenDeath.c4g/Scenario.txt
new file mode 100644
index 0000000..32de6d1
--- /dev/null
+++ b/TemplePushing.c4s/SectSuddenDeath.c4g/Scenario.txt
@@ -0,0 +1,17 @@
+[Head]
+NoInitialize=1
+
+[Landscape]
+Sky=SD
+TopOpen=1
+BottomOpen=1
+MapWidth=150
+MapHeight=100
+MapZoom=13,0,13,13
+NoScan=1
+ExactLandscape=0
+
+[Weather]
+Climate=10,0
+Wind=1,100
+Lightning=0,1 \ No newline at end of file
diff --git a/TemplePushing.c4s/Sky.jpg b/TemplePushing.c4s/Sky.jpg
new file mode 100644
index 0000000..b073dc3
--- /dev/null
+++ b/TemplePushing.c4s/Sky.jpg
Binary files differ
diff --git a/TemplePushing.c4s/StringTblDE.txt b/TemplePushing.c4s/StringTblDE.txt
new file mode 100644
index 0000000..c9020a3
--- /dev/null
+++ b/TemplePushing.c4s/StringTblDE.txt
@@ -0,0 +1,12 @@
+TeamOne=Tempelspringer
+TeamTwo=Klippenschubser
+MsgRelaunch=Du hast noch %d Relaunchs.
+MsgOneRelaunch=Du hast nur noch einen Relaunch.
+MsgLastRelaunch=Das war dein letzter Relaunch.
+Mode1=Modus - Klassisches Schubsen
+Mode2=Modus - <c ffff00>Sudden Death</c>
+Mode3=Modus - <c 0000ff>Magisches Schubsen</c>
+Mode4=Modus - <c ff0000>Apokalyptisches Schubsen</c>
+Random=Zufällig
+Death=Tot
+Load=Landschaft wird geladen...
diff --git a/TemplePushing.c4s/StringTblUS.txt b/TemplePushing.c4s/StringTblUS.txt
new file mode 100644
index 0000000..ef50d17
--- /dev/null
+++ b/TemplePushing.c4s/StringTblUS.txt
@@ -0,0 +1,12 @@
+TeamOne=Temple Jumpers
+TeamTwo=Cliff Pushers
+MsgRelaunch=You have %d relaunchs remaining.
+MsgOneRelaunch=You only have one relaunch remaining.
+MsgLastRelaunch=This was your last relaunch.
+Mode1=Mode - Classic Pushing
+Mode2=Mode - <c ffff00>Sudden Death</c>
+Mode3=Mode - <c 0000ff>Magical Pushing</c>
+Mode4=Mode - <c ff0000>Apocalyptical Pushing</c>
+Random=Random
+Death=Dead
+Load=Loading Landscape...
diff --git a/TemplePushing.c4s/System.c4g/Axe.c b/TemplePushing.c4s/System.c4g/Axe.c
new file mode 100644
index 0000000..1de4d9a
--- /dev/null
+++ b/TemplePushing.c4s/System.c4g/Axe.c
@@ -0,0 +1,20 @@
+#strict
+#appendto AXE1
+
+func Activate(pClonk)
+{
+ [$Shot$|Image=GNPW]
+ Sound("Blast2");
+ Exit(this(),-10+20*GetDir(pClonk));
+ SetXDir(-80+160*GetDir(pClonk));
+ SetYDir(-10);
+ return(1);
+}
+
+func Hit()
+{
+ if (Random(2)) return(_inherited());
+ SetYDir(-20);
+ Sound("BOING");
+ return(1);
+}
diff --git a/TemplePushing.c4s/System.c4g/Clonk.c b/TemplePushing.c4s/System.c4g/Clonk.c
new file mode 100644
index 0000000..2308576
--- /dev/null
+++ b/TemplePushing.c4s/System.c4g/Clonk.c
@@ -0,0 +1,27 @@
+#strict 2
+#appendto CLNK
+
+protected func ControlSpecial()
+{
+ [$Push$|Image=CXIV]
+
+ if (GetAction() != "Walk") return 0;
+
+ // Use action "Throw" starting with phase 3
+ SetAction("Throw");
+ SetPhase(3);
+
+ // Find clonks in range
+ var clonks = FindObjects(
+ Find_ID(CLNK),
+ Find_InRect(-10 + GetDir() * 20, 0, 10, 10),
+ Find_OCF(OCF_Alive),
+ // Only include allied players' clonks if "friendly pushing" rule is present
+ Find_Or(Find_Func(FindObject(FYPG)), Find_Hostile(GetOwner())));
+
+ if (GetLength(clonks) == 0) return 0;
+
+ // Randomly select clonk to be pushed
+ Fling(clonks[Random(GetLength(clonks))], -1 + GetDir() * 2, -1);
+ return 1;
+}
diff --git a/TemplePushing.c4s/System.c4g/EmptyGoblet.c b/TemplePushing.c4s/System.c4g/EmptyGoblet.c
new file mode 100644
index 0000000..7c48007
--- /dev/null
+++ b/TemplePushing.c4s/System.c4g/EmptyGoblet.c
@@ -0,0 +1,13 @@
+#strict
+#appendto EGBL
+
+func Activate(pClonk)
+{
+ [$Shot$|Image=GNPW]
+ Sound("Blast2");
+ Sound("Crystal3");
+ Exit(this(),-20+40*GetDir(pClonk));
+ SetXDir(-100+200*GetDir(pClonk));
+ SetYDir(-10);
+ return(1);
+} \ No newline at end of file
diff --git a/TemplePushing.c4s/System.c4g/Flint.c b/TemplePushing.c4s/System.c4g/Flint.c
new file mode 100644
index 0000000..978319d
--- /dev/null
+++ b/TemplePushing.c4s/System.c4g/Flint.c
@@ -0,0 +1,20 @@
+#strict
+#appendto FLNT
+
+func Activate(pClonk)
+{
+ [$Shot$|Image=GNPW]
+ Sound("Blast2");
+ Exit(this(),-10+20*GetDir(pClonk));
+ SetXDir(-80+160*GetDir(pClonk));
+ SetYDir(-10);
+ return(1);
+}
+
+func Hit()
+{
+ if (Random(2)) return(_inherited());
+ SetYDir(-20);
+ Sound("BOING");
+ return(1);
+} \ No newline at end of file
diff --git a/TemplePushing.c4s/System.c4g/Goblet.c b/TemplePushing.c4s/System.c4g/Goblet.c
new file mode 100644
index 0000000..eb4911f
--- /dev/null
+++ b/TemplePushing.c4s/System.c4g/Goblet.c
@@ -0,0 +1,12 @@
+#strict
+#appendto OGBT
+
+func Activate(pClonk)
+{
+ [$Shot$|Image=GNPW]
+ Sound("Blast2");
+ Exit(this(),-10+20*GetDir(pClonk));
+ SetXDir(-80+160*GetDir(pClonk));
+ SetYDir(-10);
+ return(1);
+}
diff --git a/TemplePushing.c4s/System.c4g/Meteor.c b/TemplePushing.c4s/System.c4g/Meteor.c
new file mode 100644
index 0000000..600733a
--- /dev/null
+++ b/TemplePushing.c4s/System.c4g/Meteor.c
@@ -0,0 +1,7 @@
+#strict
+#appendto METO
+
+protected func Hit() {
+ if (FindObject(RCKF)) Explode(Random(75));
+ Explode(explosion_base+Random(12));
+} \ No newline at end of file
diff --git a/TemplePushing.c4s/System.c4g/Rock.c b/TemplePushing.c4s/System.c4g/Rock.c
new file mode 100644
index 0000000..e094b4c
--- /dev/null
+++ b/TemplePushing.c4s/System.c4g/Rock.c
@@ -0,0 +1,20 @@
+#strict
+#appendto ROCK
+
+func Activate(pClonk)
+{
+ [$Shot$|Image=GNPW]
+ Sound("Blast1");
+ Exit(this(),-15+30*GetDir(pClonk));
+ SetXDir(-100+200*GetDir(pClonk));
+ SetYDir(-10);
+ return(1);
+}
+
+func Hit()
+{
+ if (Random(5)) return(_inherited());
+ SetYDir(-25);
+ Sound("BOING");
+ return(1);
+} \ No newline at end of file
diff --git a/TemplePushing.c4s/System.c4g/Scroll.c b/TemplePushing.c4s/System.c4g/Scroll.c
new file mode 100644
index 0000000..0bc56ba
--- /dev/null
+++ b/TemplePushing.c4s/System.c4g/Scroll.c
@@ -0,0 +1,10 @@
+#strict
+#appendto SCRL
+static SpID;
+
+func Initialize()
+{
+ SpID=[ABLA,MBOT,MFRB,MDBT,GVTY,MMTR,MLGT,CFAL,MSSH,MINV,MQKE,MARK,_FWV,_MFL];
+ SetSpell(SpID[Random(GetLength(SpID))]);
+ return(_inherited());
+} \ No newline at end of file
diff --git a/TemplePushing.c4s/System.c4g/StringTblDE.txt b/TemplePushing.c4s/System.c4g/StringTblDE.txt
new file mode 100644
index 0000000..8e22f20
--- /dev/null
+++ b/TemplePushing.c4s/System.c4g/StringTblDE.txt
@@ -0,0 +1,2 @@
+Shot=Schießen
+Push=Schubsen \ No newline at end of file
diff --git a/TemplePushing.c4s/System.c4g/StringTblUS.txt b/TemplePushing.c4s/System.c4g/StringTblUS.txt
new file mode 100644
index 0000000..42b3635
--- /dev/null
+++ b/TemplePushing.c4s/System.c4g/StringTblUS.txt
@@ -0,0 +1,2 @@
+Shot=Shoot
+Push=Push \ No newline at end of file
diff --git a/TemplePushing.c4s/System.c4g/Sword.c b/TemplePushing.c4s/System.c4g/Sword.c
new file mode 100644
index 0000000..9fc46af
--- /dev/null
+++ b/TemplePushing.c4s/System.c4g/Sword.c
@@ -0,0 +1,20 @@
+#strict
+#appendto SWOR
+
+func Activate(pClonk)
+{
+ [$Shot$|Image=GNPW]
+ Sound("Blast2");
+ Exit(this(),-10+20*GetDir(pClonk));
+ SetXDir(-80+160*GetDir(pClonk));
+ SetYDir(-10);
+ return(1);
+}
+
+func Hit()
+{
+ if (Random(2)) return(_inherited());
+ SetYDir(-20);
+ Sound("BOING");
+ return(1);
+}
diff --git a/TemplePushing.c4s/Teams.c4d/DefCore.txt b/TemplePushing.c4s/Teams.c4d/DefCore.txt
new file mode 100644
index 0000000..8668e4b
--- /dev/null
+++ b/TemplePushing.c4s/Teams.c4d/DefCore.txt
@@ -0,0 +1,8 @@
+[DefCore]
+id=TMS1
+Version=4,9,8
+Name=TeamSymbols
+Category=C4D_StaticBack
+Width=1
+Height=1
+Picture=0,0,64,64
diff --git a/TemplePushing.c4s/Teams.c4d/Graphics.png b/TemplePushing.c4s/Teams.c4d/Graphics.png
new file mode 100644
index 0000000..bcce561
--- /dev/null
+++ b/TemplePushing.c4s/Teams.c4d/Graphics.png
Binary files differ
diff --git a/TemplePushing.c4s/Teams.c4d/Names.txt b/TemplePushing.c4s/Teams.c4d/Names.txt
new file mode 100644
index 0000000..cdbcf76
--- /dev/null
+++ b/TemplePushing.c4s/Teams.c4d/Names.txt
@@ -0,0 +1,2 @@
+DE:Teamsymbole
+US:Team Symbols \ No newline at end of file
diff --git a/TemplePushing.c4s/Teams.txt b/TemplePushing.c4s/Teams.txt
new file mode 100644
index 0000000..8f8d57c
--- /dev/null
+++ b/TemplePushing.c4s/Teams.txt
@@ -0,0 +1,16 @@
+[Teams]
+Active=1
+TeamColors=1
+ [Team]
+ id=1
+ Name=$TeamOne$
+ PlrStartIndex=1
+ Color=16711680
+ IconSpec=TMS1:0
+
+ [Team]
+ id=2
+ Name=$TeamTwo$
+ PlrStartIndex=2
+ Color=16751360
+ IconSpec=TMS1:1
diff --git a/TemplePushing.c4s/Title.png b/TemplePushing.c4s/Title.png
new file mode 100644
index 0000000..b05157b
--- /dev/null
+++ b/TemplePushing.c4s/Title.png
Binary files differ
diff --git a/TemplePushing.c4s/Title.txt b/TemplePushing.c4s/Title.txt
new file mode 100644
index 0000000..1b2b32a
--- /dev/null
+++ b/TemplePushing.c4s/Title.txt
@@ -0,0 +1,2 @@
+DE:Tempelschubsen r0.5
+US:Temple Pushing r0.5 \ No newline at end of file
diff --git a/TemplePushing.c4s/Version.txt b/TemplePushing.c4s/Version.txt
new file mode 100644
index 0000000..af00bd4
--- /dev/null
+++ b/TemplePushing.c4s/Version.txt
@@ -0,0 +1 @@
+r0.5