summaryrefslogtreecommitdiffstats
path: root/TemplePushing.c4s/System.c4g
diff options
context:
space:
mode:
authorJan <>2015-02-02 18:49:15 +0100
committerJan <_>2015-07-10 17:52:21 +0200
commitde97f8b2898e8fd00c5d6108e2832b7e6cd3668f (patch)
treedc8d478aec0b71e0c4dd797e51080335220d02cf /TemplePushing.c4s/System.c4g
parentca61c54b9bd69af897e4cc9d4385137fb56fd11a (diff)
downloadtempelschubsen-de97f8b2898e8fd00c5d6108e2832b7e6cd3668f.tar.gz
tempelschubsen-de97f8b2898e8fd00c5d6108e2832b7e6cd3668f.zip
TemplePushingB.c4s
Diffstat (limited to 'TemplePushing.c4s/System.c4g')
-rw-r--r--TemplePushing.c4s/System.c4g/Airblast.c84
-rw-r--r--TemplePushing.c4s/System.c4g/Arrowpack.c3
-rw-r--r--TemplePushing.c4s/System.c4g/Curses.c30
-rw-r--r--TemplePushing.c4s/System.c4g/MagicLightning.c24
-rw-r--r--TemplePushing.c4s/System.c4g/Scroll.c4
-rw-r--r--TemplePushing.c4s/System.c4g/ShootInventory.c2
-rw-r--r--TemplePushing.c4s/System.c4g/Sun.c47
-rw-r--r--TemplePushing.c4s/System.c4g/Vanish.c15
8 files changed, 202 insertions, 7 deletions
diff --git a/TemplePushing.c4s/System.c4g/Airblast.c b/TemplePushing.c4s/System.c4g/Airblast.c
new file mode 100644
index 0000000..473263b
--- /dev/null
+++ b/TemplePushing.c4s/System.c4g/Airblast.c
@@ -0,0 +1,84 @@
+/* Airblast kill tracking */
+
+#strict
+
+#appendto ABLA
+
+func FxAirblastNSpellTimer(object pTarget, int iNumber, int iTime) {
+ var iPos, pObj, iX, iY, iSpeed, iRandom, iAngle, iSize, iStep;
+
+ var iPos = EffectVar(1,pTarget,iNumber);
+ // löschen falls schon zu weit alles weggeblasen
+ if(iPos >= EffectCall(pTarget,iNumber,"MaxRange")) return(-1);
+
+ iStep = -iPos/18+EffectCall(pTarget,iNumber,"MaxRange")/17;
+
+ iX = EffectVar(2,pTarget,iNumber);
+ iY = EffectVar(3,pTarget,iNumber);
+
+ iAngle = EffectVar(0,pTarget,iNumber);
+ iSize = iStep+iPos/5;
+
+ iX += Sin(iAngle, iPos);
+ iY -= Cos(iAngle, iPos);
+
+ //Log("%d,%d",iSize,iStep);
+
+
+ // Log("%d,%d,%d,%d",iX+Sin(iAngle,iPos)-iSize,iY-Cos(iAngle,iPos)-iSize,iSize*2,iSize*2);
+
+ // Objekte wegblasen
+ while(pObj=FindObject(0,iX-iSize,iY-iSize,iSize*2,iSize*2,OCF_Collectible()|OCF_Alive(),0,0,NoContainer(),pObj))
+ {
+ if(Stuck(pObj)) continue;
+ if (GetProcedure(pObj) eq "ATTACH") continue; // Keine getragenen Schilde, Alchemiebeutel, etc.
+ iSpeed=iStep*6;
+ if(iSpeed<0) iSpeed=0;
+
+ // Sound fürs Wegblasen
+ Sound("MgWndB", false, pObj);
+
+ //Log("%s: %d; %d,%d",GetName(pObj),iSpeed,Sin(iAngle,iSpeed+20),-iSpeed);
+
+ if(GetAlive(pObj))
+ {
+ iRandom=Random(3);
+ //DoEnergy(-1-iRandom,pObj);
+ //pObj->~CatchBlow(-1-iRandom,this());
+ pObj->SetKiller(EffectVar(6,pTarget,iNumber));
+ Fling(pObj,Sin(iAngle,iSpeed+20)/9,-iSpeed/2/9);
+ }
+ else
+ {
+ SetSpeed(Sin(iAngle,iSpeed+20),-iSpeed/2,pObj);
+
+ // Richtigen Controller setzen
+ SetController(EffectVar(6,pTarget,iNumber),pObj);
+ }
+ }
+
+ // Explosionen bei Kombo
+ var iMat;
+ if (EffectVar(4, pTarget, iNumber))
+ if (GBackSolid(iX, iY))
+ {
+ iMat = GetMaterial(iX,iY);
+ if (iMat >= 0 && iMat != Material("Vehicle"))
+ {
+ Explode(17, CreateObject(ROCK, iX,iY,EffectVar(5, pTarget, iNumber)));
+ return(-1);
+ }
+ }
+
+ var clr = iPos*255/EffectCall(pTarget,iNumber,"MaxRange");
+ CreateParticle("PSpark",iX,iY,0,0,iSize*15,RGBa(200,200,255,clr*127/255));
+
+ // alle 20 Pixel wird nach Objekten gesucht
+ EffectVar(1,pTarget,iNumber)+=iStep;
+ while(pObj=FindObject(0,iX-iSize,iY-iSize,iSize*2,iSize*2,OCF_Alive(),0,0,NoContainer(),pObj)) {
+ if(GetKiller(pObj)!=EffectVar(6,pTarget,iNumber)) {
+ DoEnergy(-1,pObj, 1,,EffectVar(6,pTarget,iNumber)+1);
+ DoEnergy(+1,pObj, 1,,EffectVar(6,pTarget,iNumber));
+ }
+ }
+}
diff --git a/TemplePushing.c4s/System.c4g/Arrowpack.c b/TemplePushing.c4s/System.c4g/Arrowpack.c
index e046e4c..5f86151 100644
--- a/TemplePushing.c4s/System.c4g/Arrowpack.c
+++ b/TemplePushing.c4s/System.c4g/Arrowpack.c
@@ -38,6 +38,9 @@ protected func Activate(object clonk)
// Start cooldown
coolingDown = true;
Schedule("coolingDown = false", RandomX(1, 20));
+
+ // Play sound
+ Sound("Arrow");
return 1;
} \ No newline at end of file
diff --git a/TemplePushing.c4s/System.c4g/Curses.c b/TemplePushing.c4s/System.c4g/Curses.c
new file mode 100644
index 0000000..7a1e86f
--- /dev/null
+++ b/TemplePushing.c4s/System.c4g/Curses.c
@@ -0,0 +1,30 @@
+/*-- Prevent Curse Scrolls from vanishing --*/
+
+#strict 2
+
+#appendto CAHE
+
+local pCasterClonk;
+
+public func Activate(pCaster,pRealcaster)
+{
+ var pClonk;
+ if(pRealcaster) pClonk=pRealcaster;
+ else pClonk=pCaster;
+
+ pCasterClonk = pClonk; // Caster speichern, damit es sich unter keinen Umständen selber wählen kann
+ // Auswählen wenn möglich
+ if (pClonk->~DoSpellSelect(this(),300)) return(1);
+
+ var pTarget;
+ // Clonk kann nicht auswählen: nächsten Gegner verfluchen
+ while(pTarget=FindObject(0,-300,-300,150,150,OCF_CrewMember,0,0,NoContainer(),pTarget))
+ if(SelectorTarget(pTarget))
+ return(ActivateTarget(pTarget));
+
+ // ansonsten geht nich
+ var iResult;
+ if (iResult = CheckEffect("*Curse*", 0, 125)) return(iResult!=-1 && RemoveObject());
+
+ return(0);
+}
diff --git a/TemplePushing.c4s/System.c4g/MagicLightning.c b/TemplePushing.c4s/System.c4g/MagicLightning.c
new file mode 100644
index 0000000..ebed7a5
--- /dev/null
+++ b/TemplePushing.c4s/System.c4g/MagicLightning.c
@@ -0,0 +1,24 @@
+/* Magic Lighting doesn't disappear --*/
+
+#strict
+
+#appendto MLGT
+
+func Activate(pCaster,pRealcaster) {
+ var pClonk;
+ if(pRealcaster) pClonk=pRealcaster;
+ else pClonk=pCaster;
+
+ var iResult;
+ if (iResult = CheckEffect("LightningNSpell", 0, 125)) return(iResult!=-1 && RemoveObject());
+
+ // Zielen wenn möglich
+ if (pClonk->~DoSpellAim(this(), pCaster)) return(1);
+
+ // Blitz erzeugen
+ var obj = CreateObject(LGTS, -GetX(), -GetY(), GetOwner(pClonk));
+ obj->Launch(GetX(pCaster)+GetVertex(0, VTX_X, pCaster), GetY(pCaster)+GetVertex(0, VTX_Y, pCaster), (!GetDir(pCaster))*1800);
+ Sound("Thunder*");
+ RemoveObject();
+ return(1);
+}
diff --git a/TemplePushing.c4s/System.c4g/Scroll.c b/TemplePushing.c4s/System.c4g/Scroll.c
index 076c30b..310652c 100644
--- a/TemplePushing.c4s/System.c4g/Scroll.c
+++ b/TemplePushing.c4s/System.c4g/Scroll.c
@@ -6,10 +6,10 @@ func Initialize()
{
if (mode == MODE_Festive)
{
- var spells = [ABLA, MFWV, MICS, MLGT, MGPL];
+ var spells = [ABLA, MFWV, MICS, MLGT, MGPL, ICNL];
SetSpell(spells[Random(GetLength(spells))]);
}
- else var spells = [ABLA, MBOT, MFRB, MDBT, GVTY, MMTR, MLGT, CFAL, MSSH, MINV, MQKE, MARK, MFWV, MGFL, LAVS, MGPL];
+ else var spells = [ABLA, MBOT, MFRB, MDBT, GVTY, MMTR, MLGT, CFAL, MSSH, MINV, MQKE, MARK, MFWV, MGFL, LAVS, MGPL, ICNL];
SetSpell(spells[Random(GetLength(spells))]);
return _inherited();
diff --git a/TemplePushing.c4s/System.c4g/ShootInventory.c b/TemplePushing.c4s/System.c4g/ShootInventory.c
index 20bfef3..6adcfcc 100644
--- a/TemplePushing.c4s/System.c4g/ShootInventory.c
+++ b/TemplePushing.c4s/System.c4g/ShootInventory.c
@@ -81,7 +81,7 @@ protected func Activate(object clonk)
}
else
{
- Exit(0, -10 + 20 * clonk->GetDir(), 0, 0 + 180 * clonk->GetDir(), -80 + 160 * clonk->GetDir(), -15);
+ Exit(0, -10 + 20 * clonk->GetDir(), 0, 0 + 360 * clonk->GetDir(), -80 + 160 * clonk->GetDir(), -15);
SetYDir(-15);
SetXDir(-80 + 160 * clonk->GetDir());
}
diff --git a/TemplePushing.c4s/System.c4g/Sun.c b/TemplePushing.c4s/System.c4g/Sun.c
new file mode 100644
index 0000000..9a52923
--- /dev/null
+++ b/TemplePushing.c4s/System.c4g/Sun.c
@@ -0,0 +1,47 @@
+/*-- Sun --*/
+
+#strict
+
+#appendto SONE
+
+private func BerechneSonneY()
+{
+ var ZeitObjekt = FindObject(TIME);
+ if(!ZeitObjekt)
+ SonneY = 30;
+
+ else return _inherited();
+}
+
+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());
+ // Bei Nähe zur Sonne blenden
+ var VektorDist=GibVektorDist(GetOwner());
+ if(IsDay())
+ {
+ var Gelbstich = BoundBy((500-VektorDist)/5,0,100); // Prozentangabe 0 = weit weg, 100 = nahe; 500 Pixel sind dabei "weit weg"
+ SetGamma (RGB(000+(30*Gelbstich)/100,000+(30*Gelbstich)/100,000),
+ RGB(128+(60*Gelbstich)/100,128+(60*Gelbstich)/100,128),
+ RGB(255,255,255), GammaRampe_Lenseflare());
+ }
+} \ No newline at end of file
diff --git a/TemplePushing.c4s/System.c4g/Vanish.c b/TemplePushing.c4s/System.c4g/Vanish.c
index 37d1d78..8eae5cb 100644
--- a/TemplePushing.c4s/System.c4g/Vanish.c
+++ b/TemplePushing.c4s/System.c4g/Vanish.c
@@ -11,17 +11,24 @@ protected func Hit()
{
if (GetID() == FARW)
{
- Schedule("RemoveObject()", 80, 0, 0);
+ Schedule("CastParticles(\"MSpark\", 20, 5, 0, 0, 25, 30, RGBa(128,128,255,0), RGBa(255,255,255,127))", 69, 0, 0);
+ Schedule("RemoveObject()", 70, 0, 0);
}
else if (GetID() == SPER)
{
+ Schedule("CastParticles(\"MSpark\", 20, 5, 0, 0, 25, 30, RGBa(128,128,255,0), RGBa(255,255,255,127))", 49, 0, 0);
Schedule("RemoveObject()", 50, 0, 0);
}
+ else if (GetID() == TSWB)
+ {
+ CastParticles("Snow", 50, 20, 0, 0, 50, 80, RGBa(255,255,255,0), RGBa(255,255,255,0));
+ Schedule("RemoveObject()", 2, 0, 0);
+ }
else
{
- CastParticles("MSpark", 20,5, 0,0, 25, 30, RGBa(128,128,255,0), RGBa(255,255,255,127));
- RemoveObject();
- return 1;
+ CastParticles("MSpark", 20, 5, 0, 0, 25, 30, RGBa(128,128,255,0), RGBa(255,255,255,127));
+ Schedule("RemoveObject()", 5, 0, 0);
+ return _inherited();
}
}