// Function from file: absorb.dm
        public override bool can_sting(Mob user = null, Ent_Static target = null)
        {
            Changeling        changeling = null;
            dynamic           G          = null;
            Mob_Living_Carbon target2    = null;


            if (!base.can_sting(user, target))
            {
                return(false);
            }
            changeling = user.mind.changeling;

            if (changeling.isabsorbing)
            {
                user.WriteMsg("<span class='warning'>We are already absorbing!</span>");
                return(false);
            }
            G = user.get_active_hand();

            if (!(G is Obj_Item_Weapon_Grab))
            {
                user.WriteMsg("<span class='warning'>We must be grabbing a creature in our active hand to absorb them!</span>");
                return(false);
            }

            if (Convert.ToDouble(G.state) <= 3)
            {
                user.WriteMsg("<span class='warning'>We must have a tighter grip to absorb this creature!</span>");
                return(false);
            }
            target2 = G.affecting;
            return(changeling.can_absorb_dna(user, target2));
        }
Пример #2
0
        // Function from file: mimic_voice.dm
        public override dynamic sting_action(Mob user = null, Ent_Static target = null)
        {
            Changeling changeling  = null;
            string     mimic_voice = null;

            changeling = user.mind.changeling;

            if (Lang13.Bool(changeling.mimicing))
            {
                changeling.mimicing = "";
                changeling.chem_recharge_slowdown -= 0.5;
                user.WriteMsg("<span class='notice'>We return our vocal glands to their original position.</span>");
                return(null);
            }
            mimic_voice = GlobalFuncs.stripped_input(user, "Enter a name to mimic.", "Mimic Voice", null, 26);

            if (!Lang13.Bool(mimic_voice))
            {
                return(null);
            }
            changeling.mimicing = mimic_voice;
            changeling.chem_recharge_slowdown += 0.5;
            user.WriteMsg("<span class='notice'>We shape our glands to take the voice of <b>" + mimic_voice + "</b>, this will slow down regenerating chemicals while active.</span>");
            user.WriteMsg("<span class='notice'>Use this power again to return to our original voice and return chemical production to normal levels.</span>");
            GlobalFuncs.feedback_add_details("changeling_powers", "MV");
            return(null);
        }
        // Function from file: tiny_prick.dm
        public override bool Click(dynamic loc = null, string control = null, string _params = null)
        {
            Mob        user       = null;
            Changeling changeling = null;

            user       = Task13.User;
            changeling = user.mind.changeling;

            if (changeling.chosen_sting != null)
            {
                this.unset_sting(user);
                return(false);
            }
            this.selected_dna = changeling.select_dna("Select the target DNA: ", "Target DNA");

            if (!(this.selected_dna != null))
            {
                return(false);
            }

            if (this.selected_dna.dna.species.specflags.Contains(16384))
            {
                user.WriteMsg("<span class = 'notice'>That DNA is not compatible with changeling retrovirus!");
                return(false);
            }
            base.Click((object)(loc), control, _params);
            return(false);
        }
Пример #4
0
        // Function from file: tgstation.dme
        public override void on_purchase(Mob user = null)
        {
            Changeling changeling = null;

            base.on_purchase(user);
            changeling = user.mind.changeling;
            changeling.chem_storage       += 25;
            changeling.chem_recharge_rate *= 2;
            return;
        }
        // Function from file: mutations.dm
        public override dynamic sting_action(Mob user = null, Ent_Static target = null)
        {
            Changeling changeling = null;
            dynamic    S          = null;

            changeling = user.mind.changeling;

            if (!(changeling != null))
            {
                return(null);
            }
            S = base.sting_action(user, target);
            S.remaining_uses = Num13.Floor(changeling.absorbedcount * 3);
            return(1);
        }
        // Function from file: changeling_power.dm
        public virtual bool can_sting(Mob user = null, Ent_Static target = null)
        {
            Changeling c = null;


            if (!(user is Mob_Living_Carbon_Human) && !(user is Mob_Living_Carbon_Monkey))
            {
                return(false);
            }

            if (this.req_human && !(user is Mob_Living_Carbon_Human))
            {
                user.WriteMsg("<span class='warning'>We cannot do that in this form!</span>");
                return(false);
            }
            c = user.mind.changeling;

            if (c.chem_charges < this.chemical_cost)
            {
                user.WriteMsg(new Txt("<span class='warning'>We require at least ").item(this.chemical_cost).str(" unit").s().str(" of chemicals to do that!</span>").ToString());
                return(false);
            }

            if (c.absorbedcount < this.req_dna)
            {
                user.WriteMsg(new Txt("<span class='warning'>We require at least ").item(this.req_dna).str(" sample").s().str(" of compatible DNA.</span>").ToString());
                return(false);
            }

            if (this.req_stat < user.stat)
            {
                user.WriteMsg("<span class='warning'>We are incapacitated.</span>");
                return(false);
            }

            if ((user.status_flags & 8192) != 0 && this.name != "Regenerate")
            {
                user.WriteMsg("<span class='warning'>We are incapacitated.</span>");
                return(false);
            }

            if (c.geneticdamage > this.max_genetic_damage)
            {
                user.WriteMsg("<span class='warning'>Our genomes are still reassembling. We need time to recover first.</span>");
                return(false);
            }
            return(true);
        }
        // Function from file: transform.dm
        public override dynamic sting_action(Mob user = null, Ent_Static target = null)
        {
            Changeling        changeling  = null;
            Changelingprofile chosen_prof = null;

            changeling  = user.mind.changeling;
            chosen_prof = changeling.select_dna("Select the target DNA: ", "Target DNA", user);

            if (!(chosen_prof != null))
            {
                return(null);
            }
            GlobalFuncs.changeling_transform(user, chosen_prof);
            GlobalFuncs.feedback_add_details("changeling_powers", "TR");
            return(1);
        }
        // Function from file: hivemind.dm
        public override dynamic sting_action(Mob user = null, Ent_Static target = null)
        {
            Changeling        changeling      = null;
            ByTable           names           = null;
            Changelingprofile prof            = null;
            dynamic           S               = null;
            Base_Data         chosen_prof     = null;
            dynamic           downloaded_prof = null;

            changeling = user.mind.changeling;
            names      = new ByTable();

            foreach (dynamic _a in Lang13.Enumerate(GlobalVars.hivemind_bank, typeof(Changelingprofile)))
            {
                prof = _a;


                if (!changeling.stored_profiles.Contains(prof))
                {
                    names[prof.name] = prof;
                }
            }

            if (names.len <= 0)
            {
                user.WriteMsg("<span class='notice'>There's no new DNA to absorb from the air.</span>");
                return(null);
            }
            S = Interface13.Input("Select a DNA absorb from the air: ", "Absorb DNA", null, null, names, InputType.Null | InputType.Any);

            if (!Lang13.Bool(S))
            {
                return(null);
            }
            chosen_prof = names[S];

            if (!(chosen_prof != null))
            {
                return(null);
            }
            downloaded_prof = Lang13.Call(chosen_prof.type);
            ((dynamic)chosen_prof).copy_profile(downloaded_prof);
            changeling.add_profile(downloaded_prof);
            user.WriteMsg("<span class='notice'>We absorb the DNA of " + S + " from the air.</span>");
            GlobalFuncs.feedback_add_details("changeling_powers", "HD");
            return(1);
        }
Пример #9
0
        // Function from file: hivemind.dm
        public override dynamic sting_action(Mob user = null, Ent_Static target = null)
        {
            Changeling        changeling   = null;
            ByTable           names        = null;
            Changelingprofile prof         = null;
            dynamic           chosen_name  = null;
            Changelingprofile chosen_dna   = null;
            dynamic           uploaded_dna = null;

            changeling = user.mind.changeling;
            names      = new ByTable();

            foreach (dynamic _a in Lang13.Enumerate(changeling.stored_profiles, typeof(Changelingprofile)))
            {
                prof = _a;


                if (!GlobalVars.hivemind_bank.Contains(prof))
                {
                    names.Add(prof.name);
                }
            }

            if (names.len <= 0)
            {
                user.WriteMsg("<span class='notice'>The airwaves already have all of our DNA.</span>");
                return(null);
            }
            chosen_name = Interface13.Input("Select a DNA to channel: ", "Channel DNA", null, null, names, InputType.Null | InputType.Any);

            if (!Lang13.Bool(chosen_name))
            {
                return(null);
            }
            chosen_dna = changeling.get_dna(chosen_name);

            if (!(chosen_dna != null))
            {
                return(null);
            }
            uploaded_dna = Lang13.Call(chosen_dna.type);
            chosen_dna.copy_profile(uploaded_dna);
            GlobalVars.hivemind_bank.Add(uploaded_dna);
            user.WriteMsg("<span class='notice'>We channel the DNA of " + chosen_name + " to the air.</span>");
            GlobalFuncs.feedback_add_details("changeling_powers", "HU");
            return(1);
        }
        // Function from file: changeling_power.dm
        public virtual void try_to_sting(Mob user = null, Ent_Static target = null)
        {
            Changeling c = null;


            if (!this.can_sting(user, target))
            {
                return;
            }
            c = user.mind.changeling;

            if (Lang13.Bool(this.sting_action(user, target)))
            {
                this.sting_feedback(user, target);
                this.take_chemical_cost(c);
            }
            return;
        }
        // Function from file: absorb.dm
        public override dynamic sting_action(Mob user = null, Ent_Static target = null)
        {
            dynamic           G          = null;
            Mob_Living        target2    = null;
            Changeling        changeling = null;
            Mob_Dead_Observer ghost      = null;

            G          = user.get_active_hand();
            target2    = G.affecting;
            changeling = user.mind.changeling;
            user.WriteMsg("<span class='notice'>We tighen our grip. We must hold still....</span>");
            target2.do_jitter_animation(500);
            ((Mob_Living)user).do_jitter_animation(500);

            if (!GlobalFuncs.do_mob(user, target2, 20))
            {
                user.WriteMsg("<span class='warning'>The body swap has been interrupted!</span>");
                return(null);
            }
            target2.WriteMsg("<span class='userdanger'>" + user + " tightens their grip as a painful sensation invades your body.</span>");

            if (!changeling.has_dna(((dynamic)target2).dna))
            {
                changeling.add_new_profile(target2, user);
            }
            changeling.remove_profile(user);
            ghost = target2.ghostize(false);
            user.mind.transfer_to(target2);

            if (ghost != null)
            {
                ghost.mind.transfer_to(user);

                if (Lang13.Bool(ghost.key))
                {
                    user.key = ghost.key;
                }
            }
            user.Paralyse(2);
            target2.WriteMsg("<span class='warning'>Our genes cry out as we swap our " + user + " form for " + target2 + ".</span>");
            return(null);
        }
        // Function from file: humanform.dm
        public override dynamic sting_action(Mob user = null, Ent_Static target = null)
        {
            Changeling        changeling  = null;
            ByTable           names       = null;
            Changelingprofile prof        = null;
            dynamic           chosen_name = null;
            Changelingprofile chosen_prof = null;
            dynamic           newmob      = null;

            changeling = user.mind.changeling;
            names      = new ByTable();

            foreach (dynamic _a in Lang13.Enumerate(changeling.stored_profiles, typeof(Changelingprofile)))
            {
                prof = _a;

                names.Add("" + prof.name);
            }
            chosen_name = Interface13.Input("Select the target DNA: ", "Target DNA", null, null, names, InputType.Null | InputType.Any);

            if (!Lang13.Bool(chosen_name))
            {
                return(null);
            }
            chosen_prof = changeling.get_dna(chosen_name);

            if (!(chosen_prof != null))
            {
                return(null);
            }

            if (!(user != null) || Lang13.Bool(user.notransform))
            {
                return(0);
            }
            user.WriteMsg("<span class='notice'>We transform our appearance.</span>");
            changeling.purchasedpowers.Remove(this);
            newmob = ((dynamic)user).humanize(279);
            GlobalFuncs.changeling_transform(newmob, chosen_prof);
            GlobalFuncs.feedback_add_details("changeling_powers", "LFT");
            return(1);
        }
Пример #13
0
        // Function from file: evolution_menu.dm
        public override bool Click(dynamic loc = null, string control = null, string _params = null)
        {
            Changeling changeling = null;
            dynamic    dat        = null;


            if (!(Task13.User != null) || !(Task13.User.mind != null) || !(Task13.User.mind.changeling != null))
            {
                return(false);
            }
            changeling = Task13.User.mind.changeling;

            if (!(GlobalVars.sting_paths != null))
            {
                GlobalVars.sting_paths = GlobalFuncs.init_paths(typeof(Obj_Effect_ProcHolder_Changeling));
            }
            dat = this.create_menu(changeling);
            Interface13.Browse(Task13.User, dat, "window=powers;size=600x700");
            return(false);
        }
        // Function from file: hivemind.dm
        public override bool can_sting(Mob user = null, Ent_Static target = null)
        {
            Changeling changeling = null;
            dynamic    first_prof = null;


            if (!base.can_sting(user, target))
            {
                return(false);
            }
            changeling = user.mind.changeling;
            first_prof = changeling.stored_profiles[1];

            if (first_prof.name == user.real_name)
            {
                user.WriteMsg("<span class='warning'>We have reached our capacity to store genetic information! We must transform before absorbing more.</span>");
                return(false);
            }
            return(true);
        }
Пример #15
0
        // Function from file: mutations.dm
        public bool check_suit(Mob user = null)
        {
            Changeling changeling = null;
            Mob        H          = null;
            dynamic    T          = null;

            changeling = user.mind.changeling;

            if (!(user is Mob_Living_Carbon_Human) || !(changeling != null))
            {
                return(true);
            }
            H = user;

            if (Lang13.Bool(((dynamic)this.suit_type).IsInstanceOfType(((dynamic)H).wear_suit)) || Lang13.Bool(((dynamic)this.helmet_type).IsInstanceOfType(((dynamic)H).head)))
            {
                H.visible_message("<span class='warning'>" + H + " casts off their " + this.suit_name_simple + "!</span>", "<span class='warning'>We cast off our " + this.suit_name_simple + (this.genetic_damage > 0 ? ", temporarily weakening our genomes." : ".") + "</span>", "<span class='italics'>You hear the organic matter ripping and tearing!</span>");
                GlobalFuncs.qdel(((dynamic)H).wear_suit);
                GlobalFuncs.qdel(((dynamic)H).head);
                H.update_inv_wear_suit();
                H.update_inv_head();
                H.update_hair();

                if (this.blood_on_castoff)
                {
                    T = GlobalFuncs.get_turf(H);

                    if (T is Tile_Simulated)
                    {
                        ((Ent_Static)T).add_blood(H);
                        GlobalFuncs.playsound(H.loc, "sound/effects/splat.ogg", 50, 1);
                    }
                }
                changeling.geneticdamage          += this.genetic_damage;
                changeling.chem_recharge_slowdown -= this.recharge_slowdown;
                return(true);
            }
            return(false);
        }
        // Function from file: hivemind.dm
        public override void on_purchase(Mob user = null)
        {
            Changeling changeling = null;
            Obj_Effect_ProcHolder_Changeling_HivemindUpload   S1 = null;
            Obj_Effect_ProcHolder_Changeling_HivemindDownload S2 = null;

            base.on_purchase(user);
            changeling = user.mind.changeling;
            changeling.changeling_speak = true;
            user.WriteMsg("<i><font color=#800080>Use say \":g message\" to communicate with the other changelings.</font></i>");
            S1 = new Obj_Effect_ProcHolder_Changeling_HivemindUpload();

            if (!changeling.has_sting(S1))
            {
                changeling.purchasedpowers.Add(S1);
            }
            S2 = new Obj_Effect_ProcHolder_Changeling_HivemindDownload();

            if (!changeling.has_sting(S2))
            {
                changeling.purchasedpowers.Add(S2);
            }
            return;
        }
Пример #17
0
        // Function from file: mutations.dm
        public override dynamic sting_action(Mob user = null, Ent_Static target = null)
        {
            Changeling changeling = null;


            if (!user.canUnEquip(((dynamic)user).wear_suit))
            {
                user.WriteMsg(new Txt().the(((dynamic)user).wear_suit).item().str(" is stuck to your body, you cannot grow a ").item(this.suit_name_simple).str(" over it!").ToString());
                return(null);
            }

            if (!user.canUnEquip(((dynamic)user).head))
            {
                user.WriteMsg(new Txt().the(((dynamic)user).head).item().str(" is stuck on your head, you cannot grow a ").item(this.helmet_name_simple).str(" over it!").ToString());
                return(null);
            }
            user.unEquip(((dynamic)user).head);
            user.unEquip(((dynamic)user).wear_suit);
            user.equip_to_slot_if_possible(Lang13.Call(this.suit_type, user), 13, true, true, true);
            user.equip_to_slot_if_possible(Lang13.Call(this.helmet_type, user), 11, true, true, true);
            changeling = user.mind.changeling;
            changeling.chem_recharge_slowdown += this.recharge_slowdown;
            return(1);
        }
 // Function from file: changeling_power.dm
 public void take_chemical_cost(Changeling changeling = null)
 {
     changeling.chem_charges  -= this.chemical_cost;
     changeling.geneticdamage += this.genetic_damage;
     return;
 }
        // Function from file: absorb.dm
        public override dynamic sting_action(Mob user = null, Ent_Static target = null)
        {
            Changeling changeling     = null;
            dynamic    G              = null;
            Mob_Living target2        = null;
            int?       stage          = null;
            ByTable    recent_speech  = null;
            dynamic    spoken_memory  = null;
            dynamic    spoken_memory2 = null;

            changeling             = user.mind.changeling;
            G                      = user.get_active_hand();
            target2                = G.affecting;
            changeling.isabsorbing = true;
            stage                  = null;
            stage                  = 1;

            while ((stage ?? 0) <= 3)
            {
                switch ((int?)(stage))
                {
                case 1:
                    user.WriteMsg("<span class='notice'>This creature is compatible. We must hold still...</span>");
                    break;

                case 2:
                    user.visible_message("<span class='warning'>" + user + " extends a proboscis!</span>", "<span class='notice'>We extend a proboscis.</span>");
                    break;

                case 3:
                    user.visible_message("<span class='danger'>" + user + " stabs " + target2 + " with the proboscis!</span>", "<span class='notice'>We stab " + target2 + " with the proboscis.</span>");
                    target2.WriteMsg("<span class='userdanger'>You feel a sharp stabbing pain!</span>");
                    target2.take_overall_damage(40);
                    break;
                }
                GlobalFuncs.feedback_add_details("changeling_powers", "A" + stage);

                if (!GlobalFuncs.do_mob(user, target2, 150))
                {
                    user.WriteMsg("<span class='warning'>Our absorption of " + target2 + " has been interrupted!</span>");
                    changeling.isabsorbing = false;
                    return(null);
                }
                stage++;
            }
            user.visible_message("<span class='danger'>" + user + " sucks the fluids from " + target2 + "!</span>", "<span class='notice'>We have absorbed " + target2 + ".</span>");
            target2.WriteMsg("<span class='userdanger'>You are absorbed by the changeling!</span>");

            if (!changeling.has_dna(((dynamic)target2).dna))
            {
                changeling.add_new_profile(target2, user);
            }

            if (user.nutrition < 450)
            {
                user.nutrition = Num13.MinInt(((int)(user.nutrition + target2.nutrition)), 450);
            }

            if (target2.mind != null)
            {
                target2.mind.show_memory(this, false);
                recent_speech = new ByTable();

                if (target2.say_log.len > 8)
                {
                    recent_speech = target2.say_log.Copy(target2.say_log.len - 8 + 1, 0);
                }
                else
                {
                    foreach (dynamic _b in Lang13.Enumerate(target2.say_log))
                    {
                        spoken_memory = _b;


                        if (recent_speech.len >= 8)
                        {
                            break;
                        }
                        recent_speech.Add(spoken_memory);
                    }
                }

                if (recent_speech.len != 0)
                {
                    user.mind.store_memory("<B>Some of " + target2 + "'s speech patterns, we should study these to better impersonate them!</B>");
                    user.WriteMsg("<span class='boldnotice'>Some of " + target2 + "'s speech patterns, we should study these to better impersonate them!</span>");

                    foreach (dynamic _c in Lang13.Enumerate(recent_speech))
                    {
                        spoken_memory2 = _c;

                        user.mind.store_memory("\"" + spoken_memory2 + "\"");
                        user.WriteMsg("<span class='notice'>\"" + spoken_memory2 + "\"</span>");
                    }
                    user.mind.store_memory("<B>We have no more knowledge of " + target2 + "'s speech patterns.</B>");
                    user.WriteMsg("<span class='boldnotice'>We have no more knowledge of " + target2 + "'s speech patterns.</span>");
                }

                if (target2.mind.changeling != null)
                {
                    changeling.chem_charges  += Num13.MinInt(((int)(target2.mind.changeling.chem_charges)), Convert.ToInt32(changeling.chem_storage));
                    changeling.absorbedcount += target2.mind.changeling.absorbedcount;
                    target2.mind.changeling.stored_profiles.len = 1;
                    target2.mind.changeling.absorbedcount       = 0;
                }
            }
            changeling.chem_charges = Num13.MinInt(((int)(changeling.chem_charges + 10)), Convert.ToInt32(changeling.chem_storage));
            changeling.isabsorbing  = false;
            changeling.canrespec    = true;
            target2.death(false);
            ((dynamic)target2).Drain();
            return(1);
        }
Пример #20
0
        // Function from file: evolution_menu.dm
        public dynamic create_menu(Changeling changeling = null)
        {
            dynamic dat      = null;
            int     i        = 0;
            dynamic path     = null;
            dynamic P        = null;
            bool    ownsthis = false;
            string  color    = null;

            dat += "<html><head><title>Changling Evolution Menu</title></head>";
            dat += new Txt(@"

		<head>
			<script type='text/javascript'>

				var locked_tabs = new Array();

				function updateSearch(){


					var filter_text = document.getElementById('filter');
					var filter = filter_text.value.toLowerCase();

					if(complete_list != null && complete_list != """"){
						var mtbl = document.getElementById(""maintable_data_archive"");
						mtbl.innerHTML = complete_list;
					}

					if(filter.value == """"){
						return;
					}else{

						var maintable_data = document.getElementById('maintable_data');
						var ltr = maintable_data.getElementsByTagName(""tr"");
						for ( var i = 0; i < ltr.length; ++i )
						{
							try{
								var tr = ltr[i];
								if(tr.getAttribute(""id"").indexOf(""data"") != 0){
									continue;
								}
								var ltd = tr.getElementsByTagName(""td"");
								var td = ltd[0];
								var lsearch = td.getElementsByTagName(""b"");
								var search = lsearch[0];
								//var inner_span = li.getElementsByTagName(""span"")[1] //Should only ever contain one element.
								//document.write(""<p>""+search.innerText+""<br>""+filter+""<br>""+search.innerText.indexOf(filter))
								if ( search.innerText.toLowerCase().indexOf(filter) == -1 )
								{
									//document.write(""a"");
									//ltr.removeChild(tr);
									td.innerHTML = """";
									i--;
								}
							}catch(err) {   }
						}
					}

					var count = 0;
					var index = -1;
					var debug = document.getElementById(""debug"");

					locked_tabs = new Array();

				}

				function expand(id,name,desc,helptext,power,ownsthis){

					clearAll();

					var span = document.getElementById(id);

					body = ""<table><tr><td>"";

					body += ""</td><td align='center'>"";

					body += ""<font size='2'><b>""+desc+""</b></font> <BR>""

					body += ""<font size='2'><span class='danger'>""+helptext+""</span></font> <BR>""

					if(!ownsthis)
					{
						body += ""<a href='?src="                        ).Ref(this).str(@";P=""+power+""'>Evolve</a>""
					}
					body += ""</td><td align='center'>"";

					body += ""</td></tr></table>"";


					span.innerHTML = body
				}

				function clearAll(){
					var spans = document.getElementsByTagName('span');
					for(var i = 0; i < spans.length; i++){
						var span = spans[i];

						var id = span.getAttribute(""id"");

						if(!(id.indexOf(""item"")==0))
							continue;

						var pass = 1;

						for(var j = 0; j < locked_tabs.length; j++){
							if(locked_tabs[j]==id){
								pass = 0;
								break;
							}
						}

						if(pass != 1)
							continue;




						span.innerHTML = """";
					}
				}

				function addToLocked(id,link_id,notice_span_id){
					var link = document.getElementById(link_id);
					var decision = link.getAttribute(""name"");
					if(decision == ""1""){
						link.setAttribute(""name"",""2"");
					}else{
						link.setAttribute(""name"",""1"");
						removeFromLocked(id,link_id,notice_span_id);
						return;
					}

					var pass = 1;
					for(var j = 0; j < locked_tabs.length; j++){
						if(locked_tabs[j]==id){
							pass = 0;
							break;
						}
					}
					if(!pass)
						return;
					locked_tabs.push(id);
					var notice_span = document.getElementById(notice_span_id);
					notice_span.innerHTML = ""<span class='danger'>Locked</span> "";
					//link.setAttribute(""onClick"",""attempt('""+id+""','""+link_id+""','""+notice_span_id+""');"");
					//document.write(""removeFromLocked('""+id+""','""+link_id+""','""+notice_span_id+""')"");
					//document.write(""aa - ""+link.getAttribute(""onClick""));
				}

				function attempt(ab){
					return ab;
				}

				function removeFromLocked(id,link_id,notice_span_id){
					//document.write(""a"");
					var index = 0;
					var pass = 0;
					for(var j = 0; j < locked_tabs.length; j++){
						if(locked_tabs[j]==id){
							pass = 1;
							index = j;
							break;
						}
					}
					if(!pass)
						return;
					locked_tabs[index] = """";
					var notice_span = document.getElementById(notice_span_id);
					notice_span.innerHTML = """";
					//var link = document.getElementById(link_id);
					//link.setAttribute(""onClick"",""addToLocked('""+id+""','""+link_id+""','""+notice_span_id+""')"");
				}

				function selectTextField(){
					var filter_text = document.getElementById('filter');
					filter_text.focus();
					filter_text.select();
				}

			</script>
		</head>


	"    ).ToString();
            dat += "<body onload='selectTextField(); updateSearch();' onkeyup='updateSearch();'>";
            dat += new Txt(@"

		<table width='560' align='center' cellspacing='0' cellpadding='5' id='maintable'>
			<tr id='title_tr'>
				<td align='center'>
					<font size='5'><b>Changeling Evolution Menu</b></font><br>
					Hover over a power to see more information<br>
					Current ability choices remaining: "                    ).item(changeling.geneticpoints).str("<br>\n					By rendering a lifeform to a husk, we gain enough power to alter and adapt our evolutions.<br>\n					(<a href='?src=").Ref(this).str(@";readapt=1'>Readapt</a>)<br>
					<p>
				</td>
			</tr>
			<tr id='search_tr'>
				<td align='center'>
					<b>Search:</b> <input type='text' id='filter' value='' style='width:300px;'>
				</td>
			</tr>
	</table>

	"    ).ToString();
            dat += "\n		<span id='maintable_data_archive'>\n		<table width='560' align='center' cellspacing='0' cellpadding='5' id='maintable_data'>";
            i    = 1;

            foreach (dynamic _a in Lang13.Enumerate(GlobalVars.sting_paths))
            {
                path = _a;

                P = Lang13.Call(path);

                if (P.dna_cost <= 0)
                {
                    continue;
                }
                ownsthis = changeling.has_sting(P);
                color    = null;

                if (ownsthis)
                {
                    if (i % 2 == 0)
                    {
                        color = "#d8ebd8";
                    }
                    else
                    {
                        color = "#c3dec3";
                    }
                }
                else if (i % 2 == 0)
                {
                    color = "#f2f2f2";
                }
                else
                {
                    color = "#e6e6e6";
                }
                dat += "\n\n			<tr id='data"+ i + "' name='" + i + "' onClick=\"addToLocked('item" + i + "','data" + i + "','notice_span" + i + "')\">\n				<td align='center' bgcolor='"+ color + "'>\n					<span id='notice_span"+ i + "'></span>\n					<a id='link"+ i + "'\n					onmouseover='expand(\"item"+ i + "\",\"" + P.name + "\",\"" + P.desc + "\",\"" + P.helptext + "\",\"" + P + "\"," + ownsthis + ")'\n					>\n					<b id='search"+ i + "'>Evolve " + P + (ownsthis ? " - Purchased" : (P.req_dna > changeling.absorbedcount ? " - Requires " + P.req_dna + " absorptions" : " - Cost: " + P.dna_cost)) + "</b>\n					</a>\n					<br><span id='item"+ i + @"'></span>
				</td>
			</tr>

		"        ;
                i++;
            }
            dat += @"
		</table>
		</span>

		<script type='text/javascript'>
			var maintable = document.getElementById(""maintable_data_archive"");
			var complete_list = maintable.innerHTML;
		</script>
	</body></html>
	"    ;
            return(dat);
        }