diff options
194 files changed, 2645 insertions, 0 deletions
diff --git a/TemplePushing.c4s/CliffPushing.c4d/Ambiente.wav b/TemplePushing.c4s/CliffPushing.c4d/Ambiente.wav Binary files differnew file mode 100644 index 0000000..9bd2ab1 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Ambiente.wav 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 Binary files differnew file mode 100644 index 0000000..9fd8437 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Flint.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..4519567 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..b4a8989 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Frostwave.c4d/Wave.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..cd806b8 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Maplang.bmp diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Mapsymm.bmp b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Mapsymm.bmp Binary files differnew file mode 100644 index 0000000..08e92d2 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Mapsymm.bmp 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 Binary files differnew file mode 100644 index 0000000..2aaf5d5 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..bd299ab --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/EmptyGoblet.c4d/Title.png diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/Graphics.png b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/Graphics.png Binary files differnew file mode 100644 index 0000000..cc8e6cf --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..16aa9b6 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/OGoblet.c4d/Title.png diff --git a/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Sky.jpg b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Sky.jpg Binary files differnew file mode 100644 index 0000000..d060665 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Extra.c4d/Sky.jpg diff --git a/TemplePushing.c4s/CliffPushing.c4d/ExtremeAmbiente.wav b/TemplePushing.c4s/CliffPushing.c4d/ExtremeAmbiente.wav Binary files differnew file mode 100644 index 0000000..3a5f174 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/ExtremeAmbiente.wav 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 Binary files differnew file mode 100644 index 0000000..c9c7c9b --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/FlintRain.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..2ac7a18 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..5fd65db --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Rain.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..aee9dd8 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Rain.c4d/Rain.wav 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 Binary files differnew file mode 100644 index 0000000..0d4f247 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Thunders1.wav diff --git a/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Thunders2.wav b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Thunders2.wav Binary files differnew file mode 100644 index 0000000..02af2fe --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Rain.c4d/Thunders2.wav 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 Binary files differnew file mode 100644 index 0000000..30e20a2 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Armageddon.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..2bfe0a4 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Deathmatch.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..d97f792 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/FriendlyPushing.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..351d65c --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..c5f3687 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicSpawnpoint.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..0fa62b6 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/MagicSpawnpoints.c4d/MagicalPushing.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..351d65c --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..0fa62b6 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/OnlyScrolls.c4d/MagicalPushing.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..1543a79 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..c5f3687 --- /dev/null +++ b/TemplePushing.c4s/CliffPushing.c4d/Rules.c4d/Spawnpoints.c4d/Spawnpoint.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..c50d46e --- /dev/null +++ b/TemplePushing.c4s/Icon.png diff --git a/TemplePushing.c4s/LoaderCliffPushing.jpg b/TemplePushing.c4s/LoaderCliffPushing.jpg Binary files differnew file mode 100644 index 0000000..e714d65 --- /dev/null +++ b/TemplePushing.c4s/LoaderCliffPushing.jpg 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 Binary files differnew file mode 100644 index 0000000..1b531ea --- /dev/null +++ b/TemplePushing.c4s/Locals.c4d/Brick.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..abe856a --- /dev/null +++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..25b3618 --- /dev/null +++ b/TemplePushing.c4s/Locals.c4d/Cannon.c4d/Symbols.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..6b89fed --- /dev/null +++ b/TemplePushing.c4s/Locals.c4d/Extinguisher.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..4c16706 --- /dev/null +++ b/TemplePushing.c4s/Locals.c4d/Fog.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..bc94254 --- /dev/null +++ b/TemplePushing.c4s/Locals.c4d/Lenseflare.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..62add4d --- /dev/null +++ b/TemplePushing.c4s/Locals.c4d/Sonne.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..4225d9d --- /dev/null +++ b/TemplePushing.c4s/Map.bmp 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 Binary files differnew file mode 100644 index 0000000..186b6d9 --- /dev/null +++ b/TemplePushing.c4s/Material.c4g/Brick.png diff --git a/TemplePushing.c4s/Material.c4g/DarkenB.png b/TemplePushing.c4s/Material.c4g/DarkenB.png Binary files differnew file mode 100644 index 0000000..2256e2b --- /dev/null +++ b/TemplePushing.c4s/Material.c4g/DarkenB.png diff --git a/TemplePushing.c4s/Material.c4g/Fleckig.png b/TemplePushing.c4s/Material.c4g/Fleckig.png Binary files differnew file mode 100644 index 0000000..1cf7988 --- /dev/null +++ b/TemplePushing.c4s/Material.c4g/Fleckig.png diff --git a/TemplePushing.c4s/Material.c4g/RoughDark.png b/TemplePushing.c4s/Material.c4g/RoughDark.png Binary files differnew file mode 100644 index 0000000..3a8ac93 --- /dev/null +++ b/TemplePushing.c4s/Material.c4g/RoughDark.png diff --git a/TemplePushing.c4s/Material.c4g/SmallRock.png b/TemplePushing.c4s/Material.c4g/SmallRock.png Binary files differnew file mode 100644 index 0000000..7e6946c --- /dev/null +++ b/TemplePushing.c4s/Material.c4g/SmallRock.png 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 Binary files differnew file mode 100644 index 0000000..c724960 --- /dev/null +++ b/TemplePushing.c4s/Material.c4g/TransB.png 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 Binary files differnew file mode 100644 index 0000000..1a9ac64 --- /dev/null +++ b/TemplePushing.c4s/Material.c4g/WallStuff.png diff --git a/TemplePushing.c4s/Scenario.txt b/TemplePushing.c4s/Scenario.txt Binary files differnew file mode 100644 index 0000000..39d9449 --- /dev/null +++ b/TemplePushing.c4s/Scenario.txt 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 Binary files differnew file mode 100644 index 0000000..9b2fbf0 --- /dev/null +++ b/TemplePushing.c4s/SectSuddenDeath.c4g/Map.bmp 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 Binary files differnew file mode 100644 index 0000000..b073dc3 --- /dev/null +++ b/TemplePushing.c4s/Sky.jpg 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 Binary files differnew file mode 100644 index 0000000..bcce561 --- /dev/null +++ b/TemplePushing.c4s/Teams.c4d/Graphics.png 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 Binary files differnew file mode 100644 index 0000000..b05157b --- /dev/null +++ b/TemplePushing.c4s/Title.png 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 |
