summaryrefslogtreecommitdiffstats
path: root/TemplePushing.c4s
diff options
context:
space:
mode:
authorMittendrein Markus <maxmitti@gmx.net>2016-02-13 00:34:23 +0100
committerMittendrein Markus <maxmitti@gmx.net>2016-02-13 00:34:23 +0100
commit853eeae473d3bd8c5ae7a0fde1e4dfd97bd0c57e (patch)
treeb47eea03f0c47df1a36aa472b03ef0c9d26b2a4e /TemplePushing.c4s
parentf7afa300ca3ceae2af7742414862630d1464dfb8 (diff)
downloadtempelschubsen-853eeae473d3bd8c5ae7a0fde1e4dfd97bd0c57e.tar.gz
tempelschubsen-853eeae473d3bd8c5ae7a0fde1e4dfd97bd0c57e.zip
Dragonbreath doesn't incinerate the caster
Diffstat (limited to 'TemplePushing.c4s')
-rw-r--r--TemplePushing.c4s/System.c4g/Clonk.c6
-rw-r--r--TemplePushing.c4s/System.c4g/FBreath.c105
-rw-r--r--TemplePushing.c4s/System.c4g/Firebreath.c17
3 files changed, 128 insertions, 0 deletions
diff --git a/TemplePushing.c4s/System.c4g/Clonk.c b/TemplePushing.c4s/System.c4g/Clonk.c
index 09c4b20..cad2f5f 100644
--- a/TemplePushing.c4s/System.c4g/Clonk.c
+++ b/TemplePushing.c4s/System.c4g/Clonk.c
@@ -10,6 +10,7 @@ local removeOnDeath;
protected func Initialize()
{
AddEffect("CheckStuck2", this, 20, 1, this);
+ AddEffect("CheckBurn", this, 101, 0, this);
SetPhysical("Fight", 75000, PHYS_Temporary, this);
SetPhysical("Scale", 60000, PHYS_Temporary, this);
SetPhysical("Hangle", 60000, PHYS_Temporary, this);
@@ -101,3 +102,8 @@ private func FxCheckStuck2Timer(object pTarget, int iEffectNumber, int iEffectTi
if ((d == -1 && GetComDir(pTarget) != COMD_Left) || (d == 1 && GetComDir(pTarget) != COMD_Right)) SetComDir(COMD_Up, pTarget);
}
}
+
+func FxCheckBurnEffect(string newEffectName, object target, int effectNumber, int newEffectNumber, int causedBy, bool fBlasted, object incineratingObject)
+{
+ if (newEffectName == "Fire" && incineratingObject && incineratingObject->~QueryIncinerateObject(target)) return FX_Effect_Deny;
+}
diff --git a/TemplePushing.c4s/System.c4g/FBreath.c b/TemplePushing.c4s/System.c4g/FBreath.c
new file mode 100644
index 0000000..ce0b116
--- /dev/null
+++ b/TemplePushing.c4s/System.c4g/FBreath.c
@@ -0,0 +1,105 @@
+/*-- Dont inflame caster --*/
+#strict 2
+#appendto FBRT
+
+local pTarget;
+
+func Activate(pTrg,iTime,iXPos,iYPos,iAngle,iAngleDir,int iExtraSpeed, bool fDeadly) {
+ iLifetime=iTime; // Zeit bis das Ding gelöscht wird
+ iX=iXPos; // Von der Mitte abweichende Position (X)
+ iY=iYPos; // Von der Mitte abweichende Position (Y)
+ iSpeed = FBRT_BaseSpeed + iExtraSpeed;// Geschwindigkeit: Basisgeschwindigkeit + Zusatz
+ SetR(iAngle);
+ SetRDir(iAngleDir); // Rotationsgeschwindigkeit
+ SetAction("Exist",pTrg); // Objekt an dass es pseudo-attached wird
+ fLethal = fDeadly;
+ pTarget = pTrg;
+}
+
+protected func InflameTimer()
+{
+ DoCon(+20);
+ // In Material, was Feuer löscht (Wasser): löschen
+ if(GetMaterialVal("Extinguisher","Material",GetMaterial(0,0)))
+ {
+ Smoke(0, 0, 24);
+ return RemoveObject();
+ }
+ // Zeug anzünden
+ var obj;
+ while (obj = FindObject(0, 0,1, 0,0, OCF_Inflammable, 0,0, NoContainer(), obj))
+ if (!OnFire(obj) && obj != pTarget) if (!Random(GetDefContactIncinerate(GetID(obj))))
+ Incinerate(obj);
+}
+
+func Timer() { // alle 4 Frames
+ var iXDir,iYDir,iAngle;
+ var pActTarget = GetActionTarget();
+ // Kein Feuer-Spucker: löschen
+ if(!pActTarget) return(RemoveObject());
+ // Magischer Feuerspucker muss die ganze Zeit zaubern
+ var iMLength=GetActMapVal("Length",GetAction(pActTarget),GetID(pActTarget));
+ if(GetActMapVal("Name","Magic",GetID(pActTarget))) {
+ // z.B. während des Zauberns durch einen Stein getroffen
+ if(!DoesMagic(pActTarget)) return(RemoveObject());
+ // Zauberaktion für das zaubernde Objekt: Es wird angenommen, dass diese
+ // in einem Raum von etwa 2/6 bis 5/6 der Zauberaktion spielt
+ if(GetPhase(pActTarget) >= iMLength*5/6) SetPhase(iMLength*2/6,pActTarget);
+ }
+
+ // In Material, was Feuer löscht (Wasser): löschen
+ if(GetMaterialVal("Extinguisher","Material",GetMaterial(0,0)))
+ {
+ Sound("Pshshsh");
+ return RemoveObject();
+ }
+ // löschen
+ if(GetActTime()>iLifetime) return(RemoveObject());
+
+ // Pseudo-Attach
+ SetPosition(GetX(pActTarget),GetY(pActTarget));
+
+ // Größe+Drehung des Zielobjektes in die Position einbeziehen
+ var iX2 = (Cos(GetR(pActTarget), iX*GetCon(pActTarget)) - Sin(GetR(pActTarget), iY*GetCon(pActTarget)))/100;
+ var iY2 = (Sin(GetR(pActTarget), iX*GetCon(pActTarget)) + Cos(GetR(pActTarget), iY*GetCon(pActTarget)))/100;
+
+ // Optionales Vertex-Attachment am Trägerobjekt (überschreibt vorhergehende Ausrichtungsfunktionen)
+ if (fVertexAttach)
+ {
+ iX2 = pActTarget->GetVertex(iAttachVertex, 0);
+ iY2 = pActTarget->GetVertex(iAttachVertex, 1);
+ }
+
+ for(var i=iSpeed/60+1; i>0 ;--i) {
+
+ iAngle=RandomX(-12,+12);
+
+ // Winkel usw berechnen
+ if(!Random(3)) iAngle=RandomX(-12,+12);
+ iXDir=Sin(GetR()+iAngle,iSpeed) + GetXDir(GetActionTarget());
+ iYDir=-Cos(GetR()+iAngle,iSpeed) + GetYDir(GetActionTarget());
+
+ // Effekt
+ CreateParticle("DBFire",iX2,iY2,iXDir,iYDir,RandomX(50,100),RGB(255,255,255));
+
+ // Anzünd-Objekte in die Richtung verschießen
+ var inflamer = CreateObject(FBRT,
+ iX2+Sin(GetR()+iAngle,10),
+ iY2-Cos(GetR()+iAngle,18),
+ GetOwner());
+ LocalN("pTarget", inflamer) = pTarget;
+ inflamer->ActivateInflamer(iXDir, iYDir, fLethal);
+ }
+}
+
+func QueryOwnCatchBlow(object target)
+{
+ if (target == pTarget) return true;
+ else return _inherited(target, ...);
+}
+
+func QueryIncinerateObject(object target)
+{
+ if (target == pTarget) return true;
+ else return _inherited(target, ...);
+}
diff --git a/TemplePushing.c4s/System.c4g/Firebreath.c b/TemplePushing.c4s/System.c4g/Firebreath.c
new file mode 100644
index 0000000..deffe2c
--- /dev/null
+++ b/TemplePushing.c4s/System.c4g/Firebreath.c
@@ -0,0 +1,17 @@
+/*-- Dont inflame caster --*/
+#strict 2
+#appendto MDBT
+
+public func ActivateAngle(object pCaller, int iAngle)
+{
+ DebugLog("%v", pCaller);
+ if (GetAction(pCaller) == "HoverCast") return 0;
+
+ /*if (!GetDir(pCaller) && iAngle>0) CreateFireBreath(pCaller, 40, Sin(iAngle, 10), -Cos(iAngle, 10) - (Abs(iAngle) > 90) * 4, -Abs(iAngle)-90);
+ else*/ CreateFireBreath(pCaller, 40, Sin(iAngle, 10), -Cos(iAngle, 10) - (Abs(iAngle) > 90) * 4, iAngle);
+
+ Sound("DragonFire");
+
+ RemoveObject();
+ return 1;
+}