summaryrefslogtreecommitdiffstats
path: root/TemplePushing.c4s/Misc.c4d/AdditionalSpells.c4d/Airclaw.c4d/Claw.c4d/Script.c
blob: 90f7758f260c95d6f5ee1aca66c39057eb60b9ef (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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*-- Klaue --*/

#strict 2

static const AFTF_Speed=45;

local pClonk;
local pTimer, iSpeed, iAngle;
local iDamage;

protected func Initialize() 
{
  // Geschwindigkeit setzen
  iSpeed=AFTF_Speed;
  iDamage = 30;
  return 1;
}

public func Activate(pCaster,iNewAngle)
{
  // Clonk und Winkel speichern
  pClonk=pCaster;
  iAngle=iNewAngle;
  
  // Geschwindigkeit passend setzen
  var iAdd=0;
  if(iAngle >= 0) iAdd=180;
  SetAction("Open");
  SetR(iAngle+90+iAdd);
  SetXDir(Cos(iAngle-90,AFTF_Speed));
  SetYDir(Sin(iAngle-90,AFTF_Speed));
 
  // Richtung anpassen
  if(iAngle < 0) { SetDir(DIR_Right); }
  else { SetDir(DIR_Left); }
}

protected func Check()
{
  // Die Zeit vorbei oder stehen geblieben
  if(++pTimer > 45 || iSpeed<=0)
  {
    // Ein letzer Effekt
    CastParticles("PSpark",10,10,0,0,60,160,RGB(150,150,240),RGB(210,210,255));
    RemoveObject();
  }

  // In Materie wird die Klaue langsamer
  if(GBackSolid())
  {
   iSpeed-=4;
   SetXDir(Cos(iAngle-90,iSpeed));
   SetYDir(Sin(iAngle-90,iSpeed));
  }

  if(!iDamage) return;

  // Clonks suchen
  for(var pClnk in FindObjects(Find_OCF(OCF_Alive),Find_Distance(23,0,0),Find_NoContainer()))
  {
    // Nur Feine, außer die Regel ist aktiviert
//    if(!ObjectCount(NTMG) && !Hostile(GetOwner(),GetOwner(pClnk))) continue;

    // Nicht in den ersten Frames den Zauberer selber treffen
    if(pClnk == pClonk && pTimer < 5) continue;

    // Clonk wegschleudern
    pClnk->SetAction("Tumble");
    SetPosition(GetX(pClnk),GetY(pClnk)-2,pClnk);
    SetXDir(GetXDir(pClnk)+RandomX(-10,10),pClnk);
    SetYDir(-20,pClnk);

    var iDmg = iSpeed/5;
    if(iDmg>iDamage) iDmg = iDamage;
    iDamage-=iDmg;
    // Und wehtun
    DoEnergy(-iDmg,pClnk);
  }
}