// Function from file: disposal-unit.dm public void expel(Obj_Structure_Disposalholder H = null) { dynamic T = null; Tile target = null; Ent_Dynamic AM = null; T = GlobalFuncs.get_turf(this); GlobalFuncs.playsound(this, "sound/machines/hiss.ogg", 50, 0, 0); if (H != null) { foreach (dynamic _a in Lang13.Enumerate(H, typeof(Ent_Dynamic))) { AM = _a; target = GlobalFuncs.get_offset_target_turf(this.loc, Rand13.Int(5) - Rand13.Int(5), Rand13.Int(5) - Rand13.Int(5)); AM.forceMove(T); AM.pipe_eject(0); AM.throw_at_fast(target, 5, 1); } H.vent_gas(this.loc); GlobalFuncs.qdel(H); } return; }
// Function from file: disposal-structures.dm public void expel(Obj_Structure_Disposalholder H = null) { dynamic T = null; Ent_Dynamic AM = null; T = GlobalFuncs.get_turf(this); Icon13.Flick("outlet-open", this); if (this.start_eject + 30 < Game13.time) { this.start_eject = Game13.time; GlobalFuncs.playsound(this, "sound/machines/warning-buzzer.ogg", 50, 0, 0); Task13.Sleep(20); GlobalFuncs.playsound(this, "sound/machines/hiss.ogg", 50, 0, 0); } else { Task13.Sleep(20); } if (H != null) { foreach (dynamic _a in Lang13.Enumerate(H, typeof(Ent_Dynamic))) { AM = _a; AM.forceMove(T); AM.pipe_eject(this.dir); AM.throw_at_fast(this.target, this.eject_range, 1); } H.vent_gas(T); GlobalFuncs.qdel(H); } return; }
// Function from file: mass_driver.dm public void drive(dynamic amount = null) { int O_limit = 0; dynamic target = null; Ent_Dynamic O = null; if ((this.stat & 3) != 0) { return; } this.f_use_power(500); target = GlobalFuncs.get_edge_target_turf(this, this.dir); foreach (dynamic _a in Lang13.Enumerate(this.loc, typeof(Ent_Dynamic))) { O = _a; if (!Lang13.Bool(O.anchored) || O is Obj_Mecha) { O_limit++; if (O_limit >= 20) { this.audible_message("<span class='notice'>" + this + " lets out a screech, it doesn't seem to be able to handle the load.</span>"); break; } this.f_use_power(500); O.throw_at_fast(target, this.drive_range * (this.power ?? 0), this.power); } } Icon13.Flick("mass_driver1", this); return; }
// Function from file: recipes.dm public void goonchem_vortex(dynamic T = null, bool setting_type = false, int range = 0) { Ent_Dynamic X = null; int distance = 0; double? moving_power = null; dynamic throw_target = null; double? i = null; double? i2 = null; foreach (dynamic _a in Lang13.Enumerate(Map13.FetchInRangeExcludeThis(T, range), typeof(Ent_Dynamic))) { X = _a; if (X is Obj_Effect) { continue; } if (!Lang13.Bool(X.anchored)) { distance = Map13.GetDistance(X, T); moving_power = Num13.MaxInt(range - distance, 1); if ((moving_power ?? 0) > 2) { if (setting_type) { throw_target = GlobalFuncs.get_edge_target_turf(X, Map13.GetDistance(X, Map13.GetStepAway(X, T, null))); X.throw_at_fast(throw_target, moving_power, 1); } else { X.throw_at_fast(T, moving_power, 1); } } else { Task13.Schedule(0, (Task13.Closure)(() => { if (setting_type) { i = null; i = 0; while ((i ?? 0) < (moving_power ?? 0)) { Task13.Sleep(2); Map13.StepAway(X, T, null); if (!false) { break; } i++; } } else { i2 = null; i2 = 0; while ((i2 ?? 0) < (moving_power ?? 0)) { Task13.Sleep(2); Map13.StepTowardsSimple(X, T); if (!false) { break; } i2++; } } return; })); } } } return; }
// Function from file: experimentor.dm public void experiment(double?exp = null, dynamic exp_on = null) { dynamic chosenchem = null; dynamic criticalReaction = null; Mob_Living m = null; dynamic target = null; dynamic throwing = null; dynamic T = null; Obj_Effect_Decal_Cleanable_Greenglow reagentdecal = null; string savedName = null; dynamic newPath = null; dynamic CG = null; Reagents R = null; EffectSystem_SmokeSpread_Chem smoke = null; Reagents R2 = null; EffectSystem_SmokeSpread_Chem smoke2 = null; Obj_Item_Weapon_ReagentContainers_Food_Drinks_Coffee C = null; dynamic start = null; dynamic M = null; dynamic MT = null; Obj_Item_Projectile_Magic_Fireball FB = null; GasMixture env = null; double transfer_moles = 0; GasMixture removed = null; double? heat_capacity = null; Mob_Living m2 = null; Obj_Machinery_Vending_Coffee C2 = null; Reagents R3 = null; EffectSystem_SmokeSpread_Chem smoke3 = null; GasMixture env2 = null; double transfer_moles2 = 0; GasMixture removed2 = null; double? heat_capacity2 = null; EffectSystem_SmokeSpread smoke4 = null; dynamic material = null; Ent_Dynamic AM = null; ByTable throwAt = null; Ent_Dynamic AM2 = null; int? counter = null; Ent_Dynamic cast = null; dynamic a = null; dynamic b = null; dynamic R4 = null; int globalMalf = 0; Mob_Living m3 = null; ByTable reqs = null; dynamic T2 = null; this.recentlyExperimented = true; this.icon_state = "h_lathe_wloop"; criticalReaction = Lang13.FindIn(exp_on, (this.critical_items != null ? GlobalVars.TRUE : GlobalVars.FALSE)); if (exp == 1) { this.visible_message("" + this + " prods at " + exp_on + " with mechanical arms."); if (Rand13.PercentChance(35) && Lang13.Bool(criticalReaction)) { this.visible_message("" + exp_on + " is gripped in just the right way, enhancing its focus."); this.badThingCoeff++; } if (Rand13.PercentChance(((int)(20 - this.badThingCoeff)))) { this.visible_message("<span class='danger'>" + this + " malfunctions and destroys " + exp_on + ", lashing its arms out at nearby people!</span>"); foreach (dynamic _a in Lang13.Enumerate(Map13.FetchInViewExcludeThis(this, 1), typeof(Mob_Living))) { m = _a; m.apply_damage(15, "brute", Rand13.Pick(new object [] { "head", "chest", "groin" })); this.investigate_log("Experimentor dealt minor brute to " + m + ".", "experimentor"); } this.ejectItem(GlobalVars.TRUE); } if (Rand13.PercentChance(((int)(35 - this.badThingCoeff)))) { this.visible_message("<span class='warning'>" + this + " malfunctions!</span>"); exp = 6; } if (Rand13.PercentChance(((int)(50 - this.badThingCoeff)))) { this.visible_message("<span class='danger'>" + this + " malfunctions, throwing the " + exp_on + "!</span>"); target = Lang13.FindIn(typeof(Mob_Living), Map13.FetchInViewExcludeThis(this, 7)); if (Lang13.Bool(target)) { throwing = this.loaded_item; this.investigate_log("Experimentor has thrown " + this.loaded_item + " at " + target, "experimentor"); this.ejectItem(); if (Lang13.Bool(throwing)) { ((Ent_Dynamic)throwing).throw_at(target, 10, 1); } } } } if (exp == 2) { this.visible_message("<span class='danger'>" + this + " reflects radioactive rays at " + exp_on + "!</span>"); if (Rand13.PercentChance(35) && Lang13.Bool(criticalReaction)) { this.visible_message("" + exp_on + " has activated an unknown subroutine!"); this.cloneMode = GlobalVars.TRUE; this.cloneCount = this.badThingCoeff; this.investigate_log("Experimentor has made a clone of " + exp_on, "experimentor"); this.ejectItem(); } if (Rand13.PercentChance(((int)(20 - this.badThingCoeff)))) { this.visible_message("<span class='danger'>" + this + " malfunctions, melting " + exp_on + " and leaking radiation!</span>"); GlobalFuncs.radiation_pulse(GlobalFuncs.get_turf(this), 1, 1, 25, true); this.ejectItem(GlobalVars.TRUE); } if (Rand13.PercentChance(((int)(35 - this.badThingCoeff)))) { this.visible_message("<span class='warning'>" + this + " malfunctions, spewing toxic waste!</span>"); foreach (dynamic _b in Lang13.Enumerate(Map13.FetchInViewExcludeThis(this, 1))) { T = _b; if (!T.density) { if (Rand13.PercentChance(95)) { reagentdecal = new Obj_Effect_Decal_Cleanable_Greenglow(T); reagentdecal.reagents.add_reagent("radium", 7); } } } } if (Rand13.PercentChance(((int)(50 - this.badThingCoeff)))) { savedName = "" + exp_on; this.ejectItem(GlobalVars.TRUE); newPath = this.pickWeighted(this.valid_items); this.loaded_item = Lang13.Call(newPath, this); this.visible_message("<span class='warning'>" + this + " malfunctions, transforming " + savedName + " into " + this.loaded_item + "!</span>"); this.investigate_log("Experimentor has transformed " + savedName + " into " + this.loaded_item, "experimentor"); if (this.loaded_item is Obj_Item_Weapon_Grenade_ChemGrenade) { CG = this.loaded_item; ((Obj_Item_Weapon_Grenade)CG).prime(); } this.ejectItem(); } } if (exp == 3) { this.visible_message("<span class='warning'>" + this + " fills its chamber with gas, " + exp_on + " included.</span>"); if (Rand13.PercentChance(35) && Lang13.Bool(criticalReaction)) { this.visible_message("" + exp_on + " achieves the perfect mix!"); new Obj_Item_Stack_Sheet_Mineral_Plasma(GlobalFuncs.get_turf(Rand13.PickFromTable(Map13.FetchInViewExcludeThis(this, 1)))); } if (Rand13.PercentChance(((int)(20 - this.badThingCoeff)))) { this.visible_message("<span class='danger'>" + this + " destroys " + exp_on + ", leaking dangerous gas!</span>"); chosenchem = Rand13.Pick(new object [] { "carbon", "radium", "toxin", "condensedcapsaicin", "mushroomhallucinogen", "space_drugs", "ethanol", "beepskysmash" }); R = new Reagents(50); R.my_atom = this; R.add_reagent(chosenchem, 50); this.investigate_log("Experimentor has released " + chosenchem + " smoke.", "experimentor"); smoke = new EffectSystem_SmokeSpread_Chem(); smoke.set_up(R, 0, this); GlobalFuncs.playsound(this.loc, "sound/effects/smoke.ogg", 50, 1, -3); smoke.start(); GlobalFuncs.qdel(R); this.ejectItem(GlobalVars.TRUE); } if (Rand13.PercentChance(((int)(20 - this.badThingCoeff)))) { this.visible_message("<span class='danger'>" + this + "'s chemical chamber has sprung a leak!</span>"); chosenchem = Rand13.Pick(new object [] { "mutationtoxin", "nanomachines", "sacid" }); R2 = new Reagents(50); R2.my_atom = this; R2.add_reagent(chosenchem, 50); smoke2 = new EffectSystem_SmokeSpread_Chem(); smoke2.set_up(R2, 0, this); GlobalFuncs.playsound(this.loc, "sound/effects/smoke.ogg", 50, 1, -3); smoke2.start(); GlobalFuncs.qdel(R2); this.ejectItem(GlobalVars.TRUE); this.warn_admins(Task13.User, "" + chosenchem + " smoke"); this.investigate_log("Experimentor has released <font color='red'>" + chosenchem + "</font> smoke!", "experimentor"); } if (Rand13.PercentChance(((int)(35 - this.badThingCoeff)))) { this.visible_message("" + this + " malfunctions, spewing harmless gas."); this.throwSmoke(this.loc); } if (Rand13.PercentChance(((int)(50 - this.badThingCoeff)))) { this.visible_message("<span class='warning'>" + this + " melts " + exp_on + ", ionizing the air around it!</span>"); GlobalFuncs.empulse(this.loc, 4, 6); this.investigate_log("Experimentor has generated an Electromagnetic Pulse.", "experimentor"); this.ejectItem(GlobalVars.TRUE); } } if (exp == 4) { this.visible_message("" + this + " raises " + exp_on + "'s temperature."); if (Rand13.PercentChance(35) && Lang13.Bool(criticalReaction)) { this.visible_message("<span class='warning'>" + this + "'s emergency coolant system gives off a small ding!</span>"); GlobalFuncs.playsound(this.loc, "sound/machines/ding.ogg", 50, 1); C = new Obj_Item_Weapon_ReagentContainers_Food_Drinks_Coffee(GlobalFuncs.get_turf(Rand13.PickFromTable(Map13.FetchInViewExcludeThis(this, 1)))); chosenchem = Rand13.Pick(new object [] { "plasma", "capsaicin", "ethanol" }); C.reagents.remove_any(25); C.reagents.add_reagent(chosenchem, 50); C.name = "Cup of Suspicious Liquid"; C.desc = "It has a large hazard symbol printed on the side in fading ink."; this.investigate_log("Experimentor has made a cup of " + chosenchem + " coffee.", "experimentor"); } if (Rand13.PercentChance(((int)(20 - this.badThingCoeff)))) { start = GlobalFuncs.get_turf(this); M = Lang13.FindIn(typeof(Mob_Living), Map13.FetchInView(3, this)); MT = GlobalFuncs.get_turf(M); if (Lang13.Bool(MT)) { this.visible_message("<span class='danger'>" + this + " dangerously overheats, launching a flaming fuel orb!</span>"); this.investigate_log("Experimentor has launched a <font color='red'>fireball</font> at " + M + "!", "experimentor"); FB = new Obj_Item_Projectile_Magic_Fireball(start); FB.original = MT; FB.current = start; FB.yo = Convert.ToDouble(MT.y - start.y); FB.xo = Convert.ToDouble(MT.x - start.x); FB.fire(); } } if (Rand13.PercentChance(((int)(35 - this.badThingCoeff)))) { this.visible_message("<span class='danger'>" + this + " malfunctions, melting " + exp_on + " and releasing a burst of flame!</span>"); GlobalFuncs.explosion(this.loc, -1, 0, 0, 0, 0, null, 2); this.investigate_log("Experimentor started a fire.", "experimentor"); this.ejectItem(GlobalVars.TRUE); } if (Rand13.PercentChance(((int)(50 - this.badThingCoeff)))) { this.visible_message("<span class='warning'>" + this + " malfunctions, melting " + exp_on + " and leaking hot air!</span>"); env = this.loc.return_air(); transfer_moles = env.total_moles() * 0.25; removed = env.remove(transfer_moles); if (removed != null) { heat_capacity = removed.heat_capacity(); if (heat_capacity == 0 || heat_capacity == null) { heat_capacity = 1; } removed.temperature = Num13.MinInt(Convert.ToInt32((removed.temperature * heat_capacity + 100000) / heat_capacity), 1000); } env.merge(removed); this.air_update_turf(); this.investigate_log("Experimentor has released hot air.", "experimentor"); this.ejectItem(GlobalVars.TRUE); } if (Rand13.PercentChance(((int)(50 - this.badThingCoeff)))) { this.visible_message("<span class='warning'>" + this + " malfunctions, activating its emergency coolant systems!</span>"); this.throwSmoke(this.loc); foreach (dynamic _c in Lang13.Enumerate(Map13.FetchInViewExcludeThis(this, 1), typeof(Mob_Living))) { m2 = _c; m2.apply_damage(5, "burn", Rand13.Pick(new object [] { "head", "chest", "groin" })); this.investigate_log("Experimentor has dealt minor burn damage to " + m2, "experimentor"); } this.ejectItem(); } } if (exp == 5) { this.visible_message("" + this + " lowers " + exp_on + "'s temperature."); if (Rand13.PercentChance(35) && Lang13.Bool(criticalReaction)) { this.visible_message("<span class='warning'>" + this + "'s emergency coolant system gives off a small ding!</span>"); C2 = new Obj_Machinery_Vending_Coffee(GlobalFuncs.get_turf(Rand13.PickFromTable(Map13.FetchInViewExcludeThis(this, 1)))); GlobalFuncs.playsound(this.loc, "sound/machines/ding.ogg", 50, 1); chosenchem = Rand13.Pick(new object [] { "uranium", "frostoil", "ephedrine" }); C2.reagents.remove_any(25); C2.reagents.add_reagent(chosenchem, 50); C2.name = "Cup of Suspicious Liquid"; C2.desc = "It has a large hazard symbol printed on the side in fading ink."; this.investigate_log("Experimentor has made a cup of " + chosenchem + " coffee.", "experimentor"); } if (Rand13.PercentChance(((int)(20 - this.badThingCoeff)))) { this.visible_message("<span class='danger'>" + this + " malfunctions, shattering " + exp_on + " and releasing a dangerous cloud of coolant!</span>"); R3 = new Reagents(50); R3.my_atom = this; R3.add_reagent("frostoil", 50); this.investigate_log("Experimentor has released frostoil gas.", "experimentor"); smoke3 = new EffectSystem_SmokeSpread_Chem(); smoke3.set_up(R3, 0, this); GlobalFuncs.playsound(this.loc, "sound/effects/smoke.ogg", 50, 1, -3); smoke3.start(); GlobalFuncs.qdel(R3); this.ejectItem(GlobalVars.TRUE); } if (Rand13.PercentChance(((int)(35 - this.badThingCoeff)))) { this.visible_message("<span class='warning'>" + this + " malfunctions, shattering " + exp_on + " and leaking cold air!</span>"); env2 = this.loc.return_air(); transfer_moles2 = env2.total_moles() * 0.25; removed2 = env2.remove(transfer_moles2); if (removed2 != null) { heat_capacity2 = removed2.heat_capacity(); if (heat_capacity2 == 0 || heat_capacity2 == null) { heat_capacity2 = 1; } removed2.temperature = (removed2.temperature * heat_capacity2 - 75000) / heat_capacity2; } env2.merge(removed2); this.air_update_turf(); this.investigate_log("Experimentor has released cold air.", "experimentor"); this.ejectItem(GlobalVars.TRUE); } if (Rand13.PercentChance(((int)(50 - this.badThingCoeff)))) { this.visible_message("<span class='warning'>" + this + " malfunctions, releasing a flurry of chilly air as " + exp_on + " pops out!</span>"); smoke4 = new EffectSystem_SmokeSpread(); smoke4.set_up(0, this.loc); smoke4.start(); this.ejectItem(); } } if (exp == 6) { this.visible_message("<span class='warning'>" + exp_on + " activates the crushing mechanism, " + exp_on + " is destroyed!</span>"); if (Rand13.PercentChance(35) && Lang13.Bool(criticalReaction)) { this.visible_message("<span class='warning'>" + this + "'s crushing mechanism slowly and smoothly descends, flattening the " + exp_on + "!</span>"); new Obj_Item_Stack_Sheet_Plasteel(GlobalFuncs.get_turf(Rand13.PickFromTable(Map13.FetchInViewExcludeThis(this, 1)))); } if (this.linked_console.linked_lathe != null) { foreach (dynamic _d in Lang13.Enumerate(exp_on.materials)) { material = _d; ((MaterialContainer)((dynamic)this.linked_console.linked_lathe).materials).insert_amount(Num13.MinInt(Convert.ToInt32(((dynamic)this.linked_console.linked_lathe).materials.max_amount - ((dynamic)this.linked_console.linked_lathe).materials.total_amount), Convert.ToInt32(exp_on.materials[material])), material); } } if (Rand13.PercentChance(((int)(20 - this.badThingCoeff)))) { this.visible_message("<span class='danger'>" + this + "'s crusher goes way too many levels too high, crushing right through space-time!</span>"); GlobalFuncs.playsound(this.loc, "sound/effects/supermatter.ogg", 50, 1, -3); this.investigate_log("Experimentor has triggered the 'throw things' reaction.", "experimentor"); foreach (dynamic _e in Lang13.Enumerate(Map13.FetchInViewExcludeThis(this, 7), typeof(Ent_Dynamic))) { AM = _e; if (!Lang13.Bool(AM.anchored)) { AM.throw_at_fast(this, 10, 1); } } } if (Rand13.PercentChance(((int)(35 - this.badThingCoeff)))) { this.visible_message("<span class='danger'>" + this + "'s crusher goes one level too high, crushing right into space-time!</span>"); GlobalFuncs.playsound(this.loc, "sound/effects/supermatter.ogg", 50, 1, -3); this.investigate_log("Experimentor has triggered the 'minor throw things' reaction.", "experimentor"); throwAt = new ByTable(); foreach (dynamic _f in Lang13.Enumerate(Map13.FetchInViewExcludeThis(this, 7), typeof(Ent_Dynamic))) { AM2 = _f; if (!Lang13.Bool(AM2.anchored)) { throwAt.Add(AM2); } } counter = null; counter = 1; while ((counter ?? 0) < throwAt.len) { cast = throwAt[counter]; cast.throw_at_fast(Rand13.PickFromTable(throwAt), 10, 1); counter++; } } this.ejectItem(GlobalVars.TRUE); } if (exp == 8) { a = Rand13.Pick(new object [] { "rumbles", "shakes", "vibrates", "shudders" }); b = Rand13.Pick(new object [] { "crushes", "spins", "viscerates", "smashes", "insults" }); this.visible_message("<span class='warning'>" + exp_on + " " + a + ", and " + b + ", the experiment was a failure.</span>"); } if (exp == 7) { this.visible_message("" + this + " scans the " + exp_on + ", revealing its true nature!"); GlobalFuncs.playsound(this.loc, "sound/effects/supermatter.ogg", 50, 3, -1); R4 = this.loaded_item; R4.reveal(); this.investigate_log("Experimentor has revealed a relic with <span class='danger'>" + R4.realProc + "</span> effect.", "experimentor"); this.ejectItem(); } if (Rand13.PercentChance(((int)(20 - this.badThingCoeff)))) { globalMalf = Rand13.Int(1, 100); if (globalMalf < 15) { this.visible_message("<span class='warning'>" + this + "'s onboard detection system has malfunctioned!</span>"); this.item_reactions["" + exp_on.type] = Rand13.Pick(new object [] { 1, 2, 3, 4, 5, 6 }); this.ejectItem(); } if (globalMalf > 16 && globalMalf < 35) { this.visible_message("<span class='warning'>" + this + " melts " + exp_on + ", ian-izing the air around it!</span>"); this.throwSmoke(this.loc); if (Lang13.Bool(this.trackedIan)) { this.throwSmoke(this.trackedIan.loc); this.trackedIan.loc = this.loc; this.investigate_log("Experimentor has stolen Ian!", "experimentor"); } else { new Mob_Living_SimpleAnimal_Pet_Dog_Corgi(this.loc); this.investigate_log("Experimentor has spawned a new corgi.", "experimentor"); } this.ejectItem(GlobalVars.TRUE); } if (globalMalf > 36 && globalMalf < 50) { this.visible_message("<span class='warning'>" + this + " improves " + exp_on + ", drawing the life essence of those nearby!</span>"); foreach (dynamic _g in Lang13.Enumerate(Map13.FetchInView(this, 4), typeof(Mob_Living))) { m3 = _g; m3.WriteMsg("<span class='danger'>You feel your flesh being torn from you, mists of blood drifting to " + this + "!</span>"); m3.apply_damage(50, "brute", "chest"); this.investigate_log("Experimentor has taken 50 brute a blood sacrifice from " + m3, "experimentor"); } reqs = this.ConvertReqString2List(exp_on.origin_tech); foreach (dynamic _h in Lang13.Enumerate(reqs)) { T2 = _h; reqs[T2] = reqs[T2] + 1; } exp_on.origin_tech = String13.MakeUrlParams(reqs); this.investigate_log("Experimentor has set the origin tech of " + exp_on + " to " + exp_on.origin_tech, "experimentor"); } if (globalMalf > 51 && globalMalf < 75) { this.visible_message("<span class='warning'>" + this + " encounters a run-time error!</span>"); this.throwSmoke(this.loc); if (Lang13.Bool(this.trackedRuntime)) { this.throwSmoke(this.trackedRuntime.loc); this.trackedRuntime.loc = this.loc; this.investigate_log("Experimentor has stolen Runtime!", "experimentor"); } else { new Mob_Living_SimpleAnimal_Pet_Cat(this.loc); this.investigate_log("Experimentor failed to steal runtime, and instead spawned a new cat.", "experimentor"); } this.ejectItem(GlobalVars.TRUE); } if (globalMalf > 76) { this.visible_message("<span class='warning'>" + this + " begins to smoke and hiss, shaking violently!</span>"); this.f_use_power(500000); this.investigate_log("Experimentor has drained power from its APC", "experimentor"); } } Task13.Schedule(((int)(this.resetTime)), (Task13.Closure)(() => { this.icon_state = "h_lathe"; this.recentlyExperimented = false; return; })); return; }
// Function from file: wizard.dm public override bool cast(dynamic targets = null, dynamic thearea = null, dynamic user = null) { thearea = thearea ?? Task13.User; ByTable thrownatoms = null; dynamic throwtarget = null; int distfromcaster = 0; dynamic T = null; Ent_Dynamic AM = null; Ent_Dynamic AM2 = null; Obj_Effect_Overlay targeteffect = null; Ent_Dynamic M = null; Ent_Dynamic M2 = null; thrownatoms = new ByTable(); this.playMagSound(); foreach (dynamic _b in Lang13.Enumerate(targets)) { T = _b; foreach (dynamic _a in Lang13.Enumerate(T, typeof(Ent_Dynamic))) { AM = _a; thrownatoms.Add(AM); } } foreach (dynamic _c in Lang13.Enumerate(thrownatoms, typeof(Ent_Dynamic))) { AM2 = _c; if (AM2 == thearea || Lang13.Bool(AM2.anchored)) { continue; } targeteffect = new Obj_Effect_Overlay() { icon = "icons/effects/effects.dmi", icon_state = "shieldsparkles", mouse_opacity = 0, density = false }; targeteffect.icon_state = this.animation; AM2.overlays.Add(targeteffect); throwtarget = GlobalFuncs.get_edge_target_turf(thearea, Map13.GetDistance(thearea, Map13.GetStepAway(AM2, thearea, null))); distfromcaster = Map13.GetDistance(thearea, AM2); Task13.Schedule(10, (Task13.Closure)(() => { AM2.overlays.Remove(targeteffect); GlobalFuncs.qdel(targeteffect); return; })); if (distfromcaster == 0) { if (AM2 is Mob_Living) { M = AM2; ((dynamic)M).Weaken(5); ((dynamic)M).adjustBruteLoss(5); ((dynamic)M).WriteMsg("<span class='userdanger'>You're slammed into the floor by " + thearea + "!</span>"); } } else { if (AM2 is Mob_Living) { M2 = AM2; ((dynamic)M2).Weaken(2); ((dynamic)M2).WriteMsg("<span class='userdanger'>You're thrown back by " + thearea + "!</span>"); } AM2.throw_at_fast(throwtarget, Num13.MaxInt(3, Num13.MinInt(this.maxthrow - Num13.MaxInt(0, Num13.MinInt(distfromcaster - 2, distfromcaster)), this.maxthrow)), 1, thearea); } } return(false); }
// Function from file: disposal-structures.dm public void expel(dynamic H = null, dynamic T = null, int?direction = null) { dynamic target = null; dynamic myturf = null; Ent_Dynamic AM = null; Ent_Dynamic AM2 = null; if (T is Tile_Simulated_Floor) { myturf = T; if (Lang13.Bool(myturf.builtin_tile)) { myturf.builtin_tile.loc = T; myturf.builtin_tile = null; } ((Tile_Simulated_Floor)myturf).make_plating(); } if (Lang13.Bool(direction)) { if (T is Tile_Space) { target = GlobalFuncs.get_edge_target_turf(T, direction); } else { target = GlobalFuncs.get_ranged_target_turf(T, direction, 10); } GlobalFuncs.playsound(this, "sound/machines/hiss.ogg", 50, 0, 0); if (Lang13.Bool(H)) { foreach (dynamic _a in Lang13.Enumerate(H, typeof(Ent_Dynamic))) { AM = _a; AM.forceMove(this.loc); AM.pipe_eject(direction); AM.throw_at_fast(target, 10, 1); } } } else { GlobalFuncs.playsound(this, "sound/machines/hiss.ogg", 50, 0, 0); if (Lang13.Bool(H)) { foreach (dynamic _b in Lang13.Enumerate(H, typeof(Ent_Dynamic))) { AM2 = _b; target = GlobalFuncs.get_offset_target_turf(T, Rand13.Int(5) - Rand13.Int(5), Rand13.Int(5) - Rand13.Int(5)); AM2.forceMove(this.loc); AM2.pipe_eject(0); AM2.throw_at_fast(target, 5, 1); } } } ((Obj_Structure_Disposalholder)H).vent_gas(T); GlobalFuncs.qdel(H); return; }
// Function from file: blob_reagents.dm public void reagent_vortex(dynamic M = null, int setting_type = 0, double?reac_volume = null) { dynamic pull = null; int range_power = 0; Ent_Dynamic X = null; Ent_Dynamic L = null; double? distance = null; int moving_power = 0; dynamic throw_target = null; double? throw_range = null; double i = 0; double i2 = 0; if (Lang13.Bool(M)) { pull = GlobalFuncs.get_turf(M); range_power = Num13.MaxInt(1, Num13.MinInt(((int)(Num13.Round((reac_volume ?? 0) / 5, 1))), 5)); foreach (dynamic _c in Lang13.Enumerate(Map13.FetchInRange(pull, range_power), typeof(Ent_Dynamic))) { X = _c; if (X is Obj_Effect) { continue; } if (X is Mob_Living) { L = X; if (Lang13.Bool(((dynamic)L).faction.Contains("blob"))) { continue; } } if (!Lang13.Bool(X.anchored)) { distance = Map13.GetDistance(X, pull); moving_power = Num13.MaxInt(((int)(range_power - (distance ?? 0))), 1); if (moving_power > 2) { if (setting_type != 0) { throw_target = GlobalFuncs.get_edge_target_turf(X, Map13.GetDistance(X, Map13.GetStepAway(X, pull, null))); throw_range = 5 - (distance ?? 0); X.throw_at_fast(throw_target, throw_range, 1); } else { X.throw_at_fast(pull, distance, 1); } } else { Task13.Schedule(0, (Task13.Closure)(() => { if (setting_type != 0) { foreach (dynamic _a in Lang13.IterateRange(0, moving_power - 1)) { i = _a; Task13.Sleep(2); Map13.StepAway(X, pull, null); if (!false) { break; } } } else { foreach (dynamic _b in Lang13.IterateRange(0, moving_power - 1)) { i2 = _b; Task13.Sleep(2); Map13.StepTowardsSimple(X, pull); if (!false) { break; } } } return; })); } } } } return; }