// Function from file: double_agents.dm
        public override void forge_traitor_objectives(Mind traitor = null)
        {
            dynamic               target_mind       = null;
            Objective_Destroy     destroy_objective = null;
            Objective_Assassinate kill_objective    = null;
            Objective_Survive     survive_objective = null;
            Objective_Escape      escape_objective  = null;


            if (this.target_list.len != 0 && Lang13.Bool(this.target_list[traitor]))
            {
                target_mind = this.target_list[traitor];

                if (target_mind.current is Mob_Living_Silicon)
                {
                    destroy_objective        = new Objective_Destroy();
                    destroy_objective.owner  = traitor;
                    destroy_objective.target = target_mind;
                    destroy_objective.update_explanation_text();
                    traitor.objectives.Add(destroy_objective);
                }
                else
                {
                    kill_objective        = new Objective_Assassinate();
                    kill_objective.owner  = traitor;
                    kill_objective.target = target_mind;
                    kill_objective.update_explanation_text();
                    traitor.objectives.Add(kill_objective);
                }

                if (traitor.current is Mob_Living_Silicon)
                {
                    survive_objective       = new Objective_Survive();
                    survive_objective.owner = traitor;
                    traitor.objectives.Add(survive_objective);
                }
                else
                {
                    escape_objective       = new Objective_Escape();
                    escape_objective.owner = traitor;
                    traitor.objectives.Add(escape_objective);
                }
            }
            else
            {
                base.forge_traitor_objectives(traitor);
            }
            return;
        }
        // Function from file: syndicatebeacon.dm
        public override dynamic Topic(string href = null, ByTable href_list = null, dynamic hsrc = null)
        {
            dynamic          M                = null;
            dynamic          N                = null;
            string           objective        = null;
            Objective        custom_objective = null;
            Objective_Escape escape_objective = null;
            int       obj_count               = 0;
            Objective OBJ = null;


            if (Lang13.Bool(base.Topic(href, href_list, (object)(hsrc))))
            {
                return(null);
            }

            if (Lang13.Bool(href_list["betraitor"]))
            {
                if (this.charges < 1)
                {
                    this.updateUsrDialog();
                    return(null);
                }
                M = Lang13.FindObj(href_list["traitormob"]);

                if (Lang13.Bool(M.mind.special_role))
                {
                    this.temptext = "<i>We have no need for you at this time. Have a pleasant day.</i><br>";
                    this.updateUsrDialog();
                    return(null);
                }
                this.charges -= 1;

                switch ((int)(Rand13.Int(1, 2)))
                {
                case 1:
                    this.temptext = "<font color=red><i><b>Double-crosser. You planned to betray us from the start. Allow us to repay the favor in kind.</b></i></font>";
                    this.updateUsrDialog();
                    Task13.Schedule(Rand13.Int(50, 200), (Task13.Closure)(() => {
                        this.selfdestruct();
                        return;
                    }));
                    return(null);

                    break;
                }

                if (M is Mob_Living_Carbon_Human)
                {
                    N = M;
                    ((GameMode)GlobalVars.ticker.mode).equip_traitor(N);
                    GlobalVars.ticker.mode.traitors.Add(N.mind);
                    N.mind.special_role = "traitor";
                    objective           = "Free Objective";

                    dynamic _b = Rand13.Int(1, 100);                       // Was a switch-case, sorry for the mess.
                    if (1 <= _b && _b <= 50)
                    {
                        objective = "Steal " + Rand13.Pick(new object [] { "a hand teleporter", "the Captain's antique laser gun", "a jetpack", "the Captain's ID", "the Captain's jumpsuit" }) + ".";
                    }
                    else if (51 <= _b && _b <= 60)
                    {
                        objective = "Destroy 70% or more of the station's plasma tanks.";
                    }
                    else if (61 <= _b && _b <= 70)
                    {
                        objective = "Cut power to 80% or more of the station's tiles.";
                    }
                    else if (71 <= _b && _b <= 80)
                    {
                        objective = "Destroy the AI.";
                    }
                    else if (81 <= _b && _b <= 90)
                    {
                        objective = "Kill all monkeys aboard the station.";
                    }
                    else
                    {
                        objective = "Make certain at least 80% of the station evacuates on the shuttle.";
                    }
                    custom_objective       = new Objective(objective);
                    custom_objective.owner = N.mind;
                    N.mind.objectives.Add(custom_objective);
                    escape_objective       = new Objective_Escape();
                    escape_objective.owner = N.mind;
                    N.mind.objectives.Add(escape_objective);
                    M.WriteMsg("<B>You have joined the ranks of the Syndicate and become a traitor to the station!</B>");
                    obj_count = 1;

                    foreach (dynamic _c in Lang13.Enumerate(M.mind.objectives, typeof(Objective)))
                    {
                        OBJ = _c;

                        M.WriteMsg("<B>Objective #" + obj_count + "</B>: " + OBJ.explanation_text);
                        obj_count++;
                    }
                }
            }
            this.updateUsrDialog();
            return(null);
        }