summaryrefslogtreecommitdiffstats
path: root/TemplePushing.c4s/System.c4g/Freeze.c
blob: 879a05a21d250aea76c2aa6e1bd10ad45f9458d3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*-- Damage adjustment to Freeze --*/

#strict

#appendto FREZ


global func FxFreezeTimer(pTarget, iEffectNumber, iEffectTime)
{
  // In Lava schwimmend? Dann schnell auftauen (nur für Monster und andere nicht brennbare Lebewesen wichtig)
  if(GetMaterialVal("Incindiary", "Material", pTarget->GetMaterial()))
    return -1;
  // Partikeleffekte für den betroffenen
  var id = GetID(pTarget);
  CreateParticle("NoGravSpark",GetX(pTarget)+RandomX(-GetDefWidth(id)/2, GetDefWidth(id)/2),GetY(pTarget)+RandomX(-GetDefHeight(id)/2, GetDefHeight(id)/2),0,RandomX(-2, -4),RandomX(18,28),RGB(10,120,210), pTarget);
  CreateParticle("Freeze",GetX(pTarget),GetY(pTarget),0,0,EffectVar(1, pTarget, iEffectNumber)*5+20,RGB(0,40,80),pTarget);
  // Runterzählen
  EffectVar(0, pTarget, iEffectNumber)-=1;
  if(EffectVar(0, pTarget, iEffectNumber)<=0) return FX_Execute_Kill;
  // Ein bischen tut Einfrieren auch weh
  var dmg=EffectVar(4, pTarget, iEffectNumber);
  var r=2;
  if(dmg) r=1;
  
  if(!Random(r)) {
   var d=RandomX(1200,dmg);
   EffectVar(4, pTarget, iEffectNumber)=BoundBy(dmg-d, 0, 0xffffff);
   // Damit der richtige Spieler den Schaden verursacht
   var pFrom = GetCursor(EffectVar(2, pTarget, iEffectNumber));
   if(pFrom)
     pFrom->DoEnergy(-d*2,pTarget, true);
   else
     DoEnergy(-d*2, pTarget, true);
  }
  return FX_OK;
}