Beispiel #1
0
        // Function from file: magic.dm
        public override dynamic on_hit(Ent_Static target = null, double?blocked = null, dynamic hit_zone = null)
        {
            dynamic _default = null;

            int         teleammount        = 0;
            Ent_Static  teleloc            = null;
            Ent_Dynamic stuff              = null;
            EffectSystem_SmokeSpread smoke = null;

            _default    = base.on_hit(target, blocked, (object)(hit_zone));
            teleammount = 0;
            teleloc     = target;

            if (!(target is Tile))
            {
                teleloc = target.loc;
            }

            foreach (dynamic _a in Lang13.Enumerate(teleloc, typeof(Ent_Dynamic)))
            {
                stuff = _a;


                if (!Lang13.Bool(stuff.anchored) && stuff.loc != null)
                {
                    teleammount++;
                    GlobalFuncs.do_teleport(stuff, stuff, 10);
                    smoke = new EffectSystem_SmokeSpread();
                    smoke.set_up(Num13.MaxInt(Num13.Floor(4 - teleammount), 0), stuff.loc);
                    smoke.start();
                }
            }
            return(_default);
        }
        // Function from file: experimentor.dm
        public void throwSmoke(Ent_Static where = null)
        {
            EffectSystem_SmokeSpread smoke = null;

            smoke = new EffectSystem_SmokeSpread();
            smoke.set_up(0, where);
            smoke.start();
            return;
        }
Beispiel #3
0
        // Function from file: shuffle.dm
        public override bool start(  )
        {
            ByTable moblocs                = null;
            ByTable mobs                   = null;
            Mob_Living_Carbon_Human  H     = null;
            Mob_Living_Carbon_Human  H2    = null;
            Mob_Living_Carbon_Human  H3    = null;
            EffectSystem_SmokeSpread smoke = null;

            moblocs = new ByTable();
            mobs    = new ByTable();

            foreach (dynamic _a in Lang13.Enumerate(GlobalVars.living_mob_list, typeof(Mob_Living_Carbon_Human)))
            {
                H = _a;


                if (H.z != 1)
                {
                    continue;
                }
                moblocs.Add(H.loc);
                mobs.Add(H);
            }

            if (!(mobs != null))
            {
                return(false);
            }
            GlobalFuncs.shuffle(moblocs);
            GlobalFuncs.shuffle(mobs);

            foreach (dynamic _b in Lang13.Enumerate(mobs, typeof(Mob_Living_Carbon_Human)))
            {
                H2 = _b;


                if (!(moblocs != null))
                {
                    break;
                }
                GlobalFuncs.do_teleport(H2, moblocs[moblocs.len]);
                moblocs.len -= 1;
            }

            foreach (dynamic _c in Lang13.Enumerate(GlobalVars.living_mob_list, typeof(Mob_Living_Carbon_Human)))
            {
                H3 = _c;

                smoke = new EffectSystem_SmokeSpread();
                smoke.set_up(0, H3.loc);
                smoke.start();
            }
            return(false);
        }
        // Function from file: wand.dm
        public override void zap_self(dynamic user = null)
        {
            EffectSystem_SmokeSpread smoke = null;

            GlobalFuncs.do_teleport(user, user, 10);
            smoke = new EffectSystem_SmokeSpread();
            smoke.set_up(3, user.loc);
            smoke.start();
            this.charges--;
            base.zap_self((object)(user));
            return;
        }
        // Function from file: shuffle.dm
        public override bool start(  )
        {
            ByTable mobs = null;
            Mob_Living_Carbon_Human H = null;
            Obj_Effect_ProcHolder_Spell_Targeted_MindTransfer swapper = null;
            dynamic H2 = null;
            Mob_Living_Carbon_Human  H3    = null;
            EffectSystem_SmokeSpread smoke = null;

            mobs = new ByTable();

            foreach (dynamic _a in Lang13.Enumerate(GlobalVars.living_mob_list, typeof(Mob_Living_Carbon_Human)))
            {
                H = _a;


                if (!(H.stat != 0) || !(H.mind != null) || GlobalVars.ticker.mode.wizards.Contains(H.mind) || GlobalVars.ticker.mode.apprentices.Contains(H.mind))
                {
                    continue;
                }
                mobs.Add(H);
            }

            if (!(mobs != null))
            {
                return(false);
            }
            GlobalFuncs.shuffle(mobs);
            swapper = new Obj_Effect_ProcHolder_Spell_Targeted_MindTransfer();

            while (mobs.len > 1)
            {
                H2 = Rand13.PickFromTable(mobs);
                mobs.Remove(H2);
                swapper.cast(new ByTable(new object [] { H2 }), mobs[mobs.len], 1);
                mobs.Remove(mobs[mobs.len]);
            }

            foreach (dynamic _b in Lang13.Enumerate(GlobalVars.living_mob_list, typeof(Mob_Living_Carbon_Human)))
            {
                H3 = _b;

                smoke = new EffectSystem_SmokeSpread();
                smoke.set_up(0, H3.loc);
                smoke.start();
            }
            return(false);
        }
        // Function from file: hivebot.dm
        public Obj_Structure_HivebotBeacon(dynamic loc = null) : base((object)(loc))
        {
            EffectSystem_SmokeSpread smoke = null;

            // Warning: Super call was HERE! If anything above HERE is needed by the super call, it might break!;
            smoke = new EffectSystem_SmokeSpread();
            smoke.set_up(2, this.loc);
            smoke.start();
            this.visible_message("<span class='boldannounce'>The " + this + " warps in!</span>");
            GlobalFuncs.playsound(this.loc, "sound/effects/EMPulse.ogg", 25, 1);
            Task13.Schedule(Rand13.Int(10, 600), (Task13.Closure)(() => {
                this.warpbots();
                return;
            }));
            return;
        }
        // Function from file: effects_explosion.dm
        public override void start(  )
        {
            EffectSystem_ExplParticles P = null;
            EffectSystem_SmokeSpread   S = null;

            new Obj_Effect_Explosion(this.location);
            P = new EffectSystem_ExplParticles();
            P.set_up(10, 0, this.location);
            P.start();
            Task13.Schedule(5, (Task13.Closure)(() => {
                S = new EffectSystem_SmokeSpread();
                S.set_up(2, this.location);
                S.start();
                return;
            }));
            return;
        }
Beispiel #8
0
        // Function from file: step_triggers.dm
        public override bool Trigger(Ent_Dynamic A = null)
        {
            Tile dest = null;
            EffectSystem_SparkSpread s  = null;
            EffectSystem_SparkSpread s2 = null;
            EffectSystem_SmokeSpread s3 = null;
            EffectSystem_SmokeSpread s4 = null;

            dest = Map13.GetTile(this.locationx, this.locationy, this.z);
            A.Move(dest);

            if (this.entersparks)
            {
                s = new EffectSystem_SparkSpread();
                s.set_up(4, 1, this);
                s.start();
            }

            if (this.exitsparks)
            {
                s2 = new EffectSystem_SparkSpread();
                s2.set_up(4, 1, dest);
                s2.start();
            }

            if (this.entersmoke)
            {
                s3 = new EffectSystem_SmokeSpread();
                s3.set_up(4, 1, this, 0);
                s3.start();
            }

            if (this.exitsmoke)
            {
                s4 = new EffectSystem_SmokeSpread();
                s4.set_up(4, 1, dest, 0);
                s4.start();
            }
            this.uses--;

            if (this.uses == 0)
            {
                GlobalFuncs.qdel(this);
            }
            return(false);
        }
        // Function from file: curseditems.dm
        public override bool start(  )
        {
            string  item_set              = null;
            ByTable wearslots             = null;
            ByTable loadout               = null;
            bool?   ruins_spaceworthiness = null;
            bool?   ruins_wizard_loadout  = null;
            Mob_Living_Carbon_Human H     = null;
            ByTable slots = null;
            int?    i     = null;
            dynamic J     = null;
            dynamic I     = null;
            Mob_Living_Carbon_Human  H2    = null;
            EffectSystem_SmokeSpread smoke = null;

            item_set              = Rand13.Pick(new object [] { "wizardmimic", "swords", "bigfatdoobie", "boxing", "voicemodulators", "catgirls2015" });
            wearslots             = new ByTable(new object [] { 13, 12, 11, 2, 5, 10, 8 });
            loadout               = new ByTable();
            ruins_spaceworthiness = null;
            ruins_wizard_loadout  = null;
            loadout.len           = 7;

            switch ((string)(item_set))
            {
            case "wizardmimic":
                loadout = new ByTable(new object [] { typeof(Obj_Item_Clothing_Suit_Wizrobe), typeof(Obj_Item_Clothing_Shoes_Sandal), typeof(Obj_Item_Clothing_Head_Wizard) });
                ruins_spaceworthiness = true;
                break;

            case "swords":
                loadout[5] = typeof(Obj_Item_Weapon_Katana_Cursed);
                break;

            case "bigfatdoobie":
                loadout[4]            = typeof(Obj_Item_Clothing_Mask_Cigarette_Rollie_Trippy);
                ruins_spaceworthiness = true;
                break;

            case "boxing":
                loadout[4]            = typeof(Obj_Item_Clothing_Mask_Luchador);
                loadout[6]            = typeof(Obj_Item_Clothing_Gloves_Boxing);
                ruins_spaceworthiness = true;
                break;

            case "voicemodulators":
                loadout[4] = typeof(Obj_Item_Clothing_Mask_Gas_Voice);
                break;

            case "catgirls2015":
                loadout[3]            = typeof(Obj_Item_Clothing_Head_Kitty);
                ruins_spaceworthiness = true;
                ruins_wizard_loadout  = true;
                break;
            }

            foreach (dynamic _b in Lang13.Enumerate(GlobalVars.living_mob_list, typeof(Mob_Living_Carbon_Human)))
            {
                H = _b;


                if (ruins_spaceworthiness == true && (H.z != 1 || H.loc is Tile_Space))
                {
                    continue;
                }

                if (ruins_wizard_loadout == true && H.mind != null && (GlobalVars.ticker.mode.wizards.Contains(H.mind) || GlobalVars.ticker.mode.apprentices.Contains(H.mind)))
                {
                    continue;
                }

                if (item_set == "catgirls2015")
                {
                    H.gender = GlobalVars.FEMALE;
                }
                slots = new ByTable(new object [] { H.wear_suit, H.shoes, H.head, H.wear_mask, H.r_hand, H.gloves, H.ears });
                i     = null;
                i     = 1;

                while ((i ?? 0) <= loadout.len)
                {
                    if (Lang13.Bool(loadout[i]))
                    {
                        J = loadout[i];
                        I = Lang13.Call(J);
                        H.unEquip(slots[i]);
                        H.equip_to_slot_or_del(I, Convert.ToInt32(wearslots[i]));
                        I.flags |= 2;
                        I.name   = "cursed " + I.name;
                    }
                    i++;
                }
            }

            foreach (dynamic _c in Lang13.Enumerate(GlobalVars.living_mob_list, typeof(Mob_Living_Carbon_Human)))
            {
                H2 = _c;

                smoke = new EffectSystem_SmokeSpread();
                smoke.set_up(0, H2.loc);
                smoke.start();
            }
            return(false);
        }
        // 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: spell.dm
        public void after_cast(dynamic targets = null)
        {
            Ent_Static target   = null;
            Ent_Static location = null;
            EffectSystem_SparkSpread          sparks = null;
            EffectSystem_SmokeSpread          smoke  = null;
            EffectSystem_SmokeSpread_Bad      smoke2 = null;
            EffectSystem_SmokeSpread_Sleeping smoke3 = null;


            foreach (dynamic _a in Lang13.Enumerate(targets, typeof(Ent_Static)))
            {
                target = _a;

                location = null;

                if (target is Mob_Living)
                {
                    location = target.loc;
                }
                else if (target is Tile)
                {
                    location = target;
                }

                if (target is Mob_Living && Lang13.Bool(this.message))
                {
                    ((dynamic)target).WriteMsg("" + this.message);
                }

                if (this.sparks_spread)
                {
                    sparks = new EffectSystem_SparkSpread();
                    sparks.set_up(this.sparks_amt, 0, location);
                    sparks.start();
                }

                if (this.smoke_spread != 0)
                {
                    if (this.smoke_spread == 1)
                    {
                        smoke = new EffectSystem_SmokeSpread();
                        smoke.set_up(this.smoke_amt, location);
                        smoke.start();
                    }
                    else if (this.smoke_spread == 2)
                    {
                        smoke2 = new EffectSystem_SmokeSpread_Bad();
                        smoke2.set_up(this.smoke_amt, location);
                        smoke2.start();
                    }
                    else if (this.smoke_spread == 3)
                    {
                        smoke3 = new EffectSystem_SmokeSpread_Sleeping();
                        smoke3.set_up(this.smoke_amt, location);
                        smoke3.start();
                    }
                }
            }
            return;
        }
Beispiel #12
0
        // Function from file: scrolls.dm
        public void teleportscroll(Mob user = null)
        {
            dynamic   A       = null;
            Base_Data thearea = null;
            EffectSystem_SmokeSpread smoke = null;
            ByTable L       = null;
            dynamic T       = null;
            bool    clear   = false;
            Obj     O       = null;
            ByTable tempL   = null;
            dynamic attempt = null;
            bool    success = false;

            A       = Interface13.Input(user, "Area to jump to", "BOOYEA", A, GlobalVars.teleportlocs, InputType.Any);
            thearea = GlobalVars.teleportlocs[A];

            if (!(user != null) || user.stat != 0 || user.restrained() || this.uses <= 0)
            {
                return;
            }

            if (!(user == this.loc || Map13.GetDistance(this, user) <= 1 && this.loc is Tile))
            {
                return;
            }
            smoke = new EffectSystem_SmokeSpread();
            smoke.set_up(2, user.loc);
            smoke.attach(user);
            smoke.start();
            L = new ByTable();

            foreach (dynamic _b in Lang13.Enumerate(GlobalFuncs.get_area_turfs(thearea.type)))
            {
                T = _b;


                if (!T.density)
                {
                    clear = true;

                    foreach (dynamic _a in Lang13.Enumerate(T, typeof(Obj)))
                    {
                        O = _a;


                        if (O.density)
                        {
                            clear = false;
                            break;
                        }
                    }

                    if (clear)
                    {
                        L.Add(T);
                    }
                }
            }

            if (!(L.len != 0))
            {
                user.WriteMsg("The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry.");
                return;
            }

            if (user != null && user.buckled != null)
            {
                user.buckled.unbuckle_mob();
            }
            tempL   = L.Copy();
            attempt = null;
            success = false;

            while (tempL.len != 0)
            {
                attempt = Rand13.PickFromTable(tempL);
                user.Move(attempt);

                if (GlobalFuncs.get_turf(user) == attempt)
                {
                    success = true;
                    break;
                }
                else
                {
                    tempL.Remove(attempt);
                }
            }

            if (!success)
            {
                user.loc = Rand13.PickFromTable(L);
            }
            smoke.start();
            this.uses -= 1;
            return;
        }