/* Clonk */ #strict 2 #appendto CLNK local rotateInJump; local removeOnDeath; protected func ControlThrow(object byObj) { // First check if the clonk already handles the throw control var ret = _inherited(byObj); if (ret) return ret; // Launch arrow from pack in inventory var arrowPack = Contents(); if (!arrowPack || !arrowPack->~IsArrowPack()) return 0; arrowPack->Activate(this); return 1; } 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), Find_Hostile(GetOwner())); if (GetLength(clonks) == 0) return 0; // Randomly select clonk to be pushed var target = clonks[Random(GetLength(clonks))]; Fling(target, -1 + GetDir() * 2, -1); target->SetKiller(GetOwner()); return 1; } protected func ControlLeft() { if (rotateInJump && GetAction() == "Jump" || GetAction() == "Tumble") SetDir(DIR_Left); return _inherited(); } protected func ControlRight() { if (rotateInJump && GetAction() == "Jump" || GetAction() == "Tumble") SetDir(DIR_Right); return _inherited(); } protected func Death(int killedBy) { var ret = _inherited(killedBy); if (removeOnDeath) RemoveObject(); return ret; } public func QueryCatchBlow(object arrow) { return arrow->GetOwner() == GetOwner(); }