global func AddCyclopsAI(object clonk) // somewhat hacky, but it works { var effect_name = "IntCyclopsAI"; var fx = GetEffect(effect_name, clonk); if (!fx) fx = AddEffect(effect_name, clonk, 1, 2); if (!fx || !clonk) return nil; clonk.ai = fx; // bin inventory var cnt = clonk->ContentsCount(); fx.bound_weapons = CreateArray(cnt); for (var i=0; i<cnt; ++i) fx.bound_weapons[i] = clonk->Contents(i); // set home fx.home_x = clonk->GetX(); fx.home_y = clonk->GetY(); fx.home_dir = DIR_Left; // set guard range fx.guard_range = { x = fx.home_x-AI_DefGuardRangeX, y = fx.home_y-AI_DefGuardRangeY, wdt = AI_DefGuardRangeX*2, hgt = AI_DefGuardRangeY*2}; fx.spray_old = {time = 0, v0 = 0, v1 = 0, reach = 0}; fx.spray_cur = {time = 0, v0 = 0, v1 = 0, reach = 0}; AI->SetMaxAggroDistance(clonk, AI_DefMaxAggroDistance); return fx; }
// Set the current inventory to be removed when the clonk dies. Only works if clonk has an AI. func BindInventory(object clonk) { var fx = GetEffect("S2AI", clonk); if (!fx || !clonk) return false; var cnt = clonk->ContentsCount(); fx.bound_weapons = CreateArray(cnt); for (var i=0; i<cnt; ++i) fx.bound_weapons[i] = clonk->Contents(i); clonk->Call(fx.ai.UpdateDebugDisplay, fx); return true; }
func FxAttack_PanicStart(object c, proplist fx, int temp) { if (temp) return; // high walk speed c.ActMap = { Prototype = Clonk.ActMap, Walk = { Prototype = Clonk.ActMap.Walk } }; c.ActMap.Walk.Speed = c.ActMap.Walk.Speed * 3 / 2; c->SetAction("Walk"); // drop heavy stuff var item = c->Contents(); if (item && item->~IsBarrel()) item->Exit(); // start running FxAttack_PanicTimer(c, fx, 0); return FX_OK; }