From 1b2d09bb2d945031b4c21529ac830a296e21e85e Mon Sep 17 00:00:00 2001 From: Rob Nelson Date: Sun, 1 Dec 2013 00:16:40 -0800 Subject: [PATCH] More fixings. Conflicts: code/game/machinery/computer/medical.dm --- code/datums/datacore.dm | 6 +- code/datums/diseases/dna_spread.dm | 8 +- code/game/dna/dna2.dm | 57 ++++--- code/game/dna/dna2_helpers.dm | 31 +++- code/game/dna/dna_modifier.dm | 4 +- code/game/machinery/computer/cloning.dm | 4 +- code/game/machinery/computer/medical.dm | 4 +- code/modules/admin/verbs/randomverbs.dm | 151 ++++++++++++++---- code/modules/events/disease_outbreak.dm | 4 +- .../mob/living/carbon/monkey/monkey.dm | 2 +- .../mob/new_player/sprite_accessories.dm | 2 +- 11 files changed, 204 insertions(+), 69 deletions(-) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index f76cb1b11d0..81d053c9a72 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -104,13 +104,13 @@ var/datum/data/record/L = new() L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]") L.fields["name"] = H.real_name - L.fields["rank"] = H.mind.assigned_role + L.fields["rank"] = H.mind.assigned_role L.fields["age"] = H.age L.fields["sex"] = H.gender L.fields["b_type"] = H.b_type L.fields["b_dna"] = H.dna.unique_enzymes - L.fields["enzymes"] = H.dna.struc_enzymes - L.fields["identity"] = H.dna.uni_identity + L.fields["enzymes"] = H.dna.SE // Used in respawning + L.fields["identity"] = H.dna.UI // " L.fields["image"] = getFlatIcon(H,0) //This is god-awful locked += L return diff --git a/code/datums/diseases/dna_spread.dm b/code/datums/diseases/dna_spread.dm index 81b85632f65..69a8eb6500f 100644 --- a/code/datums/diseases/dna_spread.dm +++ b/code/datums/diseases/dna_spread.dm @@ -43,9 +43,7 @@ src.original_dna["SE"] = affected_mob.dna.SE affected_mob << "\red You don't feel like yourself.." - affected_mob.dna.UI = strain_data["UI"] - affected_mob.dna.UpdateUI() - affected_mob.UpdateAppearance() + affected_mob.UpdateAppearance(strain_data["UI"]) affected_mob.dna.SE = strain_data["SE"] affected_mob.dna.UpdateSE() affected_mob.real_name = strain_data["name"] @@ -58,9 +56,7 @@ /datum/disease/dnaspread/Del() if ((original_dna["name"]) && (original_dna["UI"]) && (original_dna["SE"])) - affected_mob.dna.UI = original_dna["UI"] - affected_mob.dna.UpdateUI() - affected_mob.UpdateAppearance() + affected_mob.UpdateAppearance(original_dna["UI"]) affected_mob.dna.SE = original_dna["SE"] affected_mob.dna.UpdateSE() affected_mob.real_name = original_dna["name"] diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 31e8883815d..0038ae91949 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -22,7 +22,7 @@ // on or off. var/global/list/dna_activity_bounds[STRUCDNASIZE] -// Used to determine what each block means (admin hax and species stuff, mostly) +// Used to determine what each block means (admin hax and species stuff on /vg/, mostly) var/global/list/assigned_blocks[STRUCDNASIZE] // UI Indices (can change to mutblock style, if desired) @@ -39,22 +39,7 @@ var/global/list/assigned_blocks[STRUCDNASIZE] #define DNA_UI_GENDER 11 #define DNA_UI_BEARD_STYLE 12 #define DNA_UI_HAIR_STYLE 13 -#define DNA_UI_LENGTH 13 // Update this or you WILL break shit. - -/proc/add_zero2(t, u) - var/temp1 - while (length(t) < u) - t = "0[t]" - temp1 = t - if (length(t) > u) - temp1 = copytext(t,2,u+1) - return temp1 - -/proc/GetDNABounds(var/block) - var/list/BOUNDS=dna_activity_bounds[block] - if(!istype(BOUNDS)) - return DNA_DEFAULT_BOUNDS - return BOUNDS +#define DNA_UI_LENGTH 13 // Update this when you add something, or you WILL break shit. /datum/dna // READ-ONLY, GETS OVERWRITTEN @@ -76,7 +61,6 @@ var/global/list/assigned_blocks[STRUCDNASIZE] var/b_type = "A+" // Should probably change to an integer => string map but I'm lazy. var/mutantrace = null // The type of mutant race the player is, if applicable (i.e. potato-man) var/real_name // Stores the real name of the person who originally got this dna datum. Used primarily for changelings, - /////////////////////////////////////// // UNIQUE IDENTITY /////////////////////////////////////// @@ -125,6 +109,7 @@ var/global/list/assigned_blocks[STRUCDNASIZE] // Set a DNA UI block's raw value. /datum/dna/proc/SetUIValue(var/block,var/value,var/defer=0) + if (block<=0) return ASSERT(value>=0) ASSERT(value<=4095) UI[block]=value @@ -134,24 +119,34 @@ var/global/list/assigned_blocks[STRUCDNASIZE] // Get a DNA UI block's raw value. /datum/dna/proc/GetUIValue(var/block) + if (block<=0) return 0 return UI[block] // Set a DNA UI block's value, given a value and a max possible value. // Used in hair and facial styles (value being the index and maxvalue being the len of the hairstyle list) /datum/dna/proc/SetUIValueRange(var/block,var/value,var/maxvalue) + if (block<=0) return ASSERT(maxvalue<=4095) var/range = round(4095 / maxvalue) if(value) SetUIValue(block,value * range - rand(1,range-1)) +// Getter version of above. /datum/dna/proc/GetUIValueRange(var/block,var/maxvalue) + if (block<=0) return 0 var/value = GetUIValue(block) return round(1 +(value / 4096)*maxvalue) +// Is the UI gene "on" or "off"? +// For UI, this is simply a check of if the value is > 2050. /datum/dna/proc/GetUIState(var/block) + if (block<=0) return return UI[block] > 2050 + +// Set UI gene "on" (1) or "off" (0) /datum/dna/proc/SetUIState(var/block,var/on,var/defer=0) + if (block<=0) return var/val if(on) val=rand(2050,4095) @@ -159,17 +154,26 @@ var/global/list/assigned_blocks[STRUCDNASIZE] val=rand(1,2049) SetUIValue(block,val,defer) +// Get a hex-encoded UI block. /datum/dna/proc/GetUIBlock(var/block) return EncodeDNABlock(GetUIValue(block)) // Do not use this unless you absolutely have to. +// Set a block from a hex string. This is inefficient. If you can, use SetUIValue(). +// Used in DNA modifiers. /datum/dna/proc/SetUIBlock(var/block,var/value,var/defer=0) + if (block<=0) return return SetUIValue(block,hex2num(value),defer) +// Get a sub-block from a block. /datum/dna/proc/GetUISubBlock(var/block,var/subBlock) return copytext(GetUIBlock(block),subBlock,subBlock+1) +// Do not use this unless you absolutely have to. +// Set a block from a hex string. This is inefficient. If you can, use SetUIValue(). +// Used in DNA modifiers. /datum/dna/proc/SetUISubBlock(var/block,var/subBlock, var/newSubBlock, var/defer=0) + if (block<=0) return var/oldBlock=GetUIBlock(block) var/newBlock="" for(var/i=1, i<=length(oldBlock), i++) @@ -183,7 +187,7 @@ var/global/list/assigned_blocks[STRUCDNASIZE] // STRUCTURAL ENZYMES /////////////////////////////////////// -// Zeroes out all of the blocks. +// "Zeroes out" all of the blocks. /datum/dna/proc/ResetSE() for(var/i = 1, i <= STRUCDNASIZE, i++) SetSEValue(i,rand(1,1024),1) @@ -192,6 +196,7 @@ var/global/list/assigned_blocks[STRUCDNASIZE] // Set a DNA SE block's raw value. /datum/dna/proc/SetSEValue(var/block,var/value,var/defer=0) //testing("SetSEBlock([block],[value],[defer]): [value] -> [nval]") + if (block<=0) return ASSERT(value>=0) ASSERT(value<=4095) SE[block]=value @@ -201,22 +206,28 @@ var/global/list/assigned_blocks[STRUCDNASIZE] // Get a DNA SE block's raw value. /datum/dna/proc/GetSEValue(var/block) + if (block<=0) return 0 return SE[block] // Set a DNA SE block's value, given a value and a max possible value. // Might be used for species? /datum/dna/proc/SetSEValueRange(var/block,var/value,var/maxvalue) + if (block<=0) return ASSERT(maxvalue<=4095) var/range = round(4095 / maxvalue) if(value) SetSEValue(block, value * range - rand(1,range-1)) +// Is the block "on" (1) or "off" (0)? (Un-assigned genes are always off.) /datum/dna/proc/GetSEState(var/block) + if (block<=0) return 0 var/list/BOUNDS=GetDNABounds(block) var/value=GetSEValue(block) return (value > BOUNDS[DNA_ON_LOWERBOUND]) +// Set a block "on" or "off". /datum/dna/proc/SetSEState(var/block,var/on,var/defer=0) + if (block<=0) return var/list/BOUNDS=GetDNABounds(block) var/val if(on) @@ -225,11 +236,15 @@ var/global/list/assigned_blocks[STRUCDNASIZE] val=rand(BOUNDS[DNA_OFF_LOWERBOUND],BOUNDS[DNA_OFF_UPPERBOUND]) SetSEValue(block,val,defer) +// Get hex-encoded SE block. /datum/dna/proc/GetSEBlock(var/block) return EncodeDNABlock(GetSEValue(block)) // Do not use this unless you absolutely have to. +// Set a block from a hex string. This is inefficient. If you can, use SetUIValue(). +// Used in DNA modifiers. /datum/dna/proc/SetSEBlock(var/block,var/value,var/defer=0) + if (block<=0) return var/nval=hex2num(value) //testing("SetSEBlock([block],[value],[defer]): [value] -> [nval]") return SetSEValue(block,nval,defer) @@ -237,7 +252,11 @@ var/global/list/assigned_blocks[STRUCDNASIZE] /datum/dna/proc/GetSESubBlock(var/block,var/subBlock) return copytext(GetSEBlock(block),subBlock,subBlock+1) +// Do not use this unless you absolutely have to. +// Set a sub-block from a hex character. This is inefficient. If you can, use SetUIValue(). +// Used in DNA modifiers. /datum/dna/proc/SetSESubBlock(var/block,var/subBlock, var/newSubBlock, var/defer=0) + if (block<=0) return var/oldBlock=GetSEBlock(block) var/newBlock="" for(var/i=1, i<=length(oldBlock), i++) diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index c08d1495c97..03ed8dd23de 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -1,12 +1,33 @@ +///////////////////////////// +// Helpers for DNA2 +///////////////////////////// -// Random Bad Mutation +// Pads 0s to t until length == u +/proc/add_zero2(t, u) + var/temp1 + while (length(t) < u) + t = "0[t]" + temp1 = t + if (length(t) > u) + temp1 = copytext(t,2,u+1) + return temp1 + +// DNA Gene activation boundaries, see dna2.dm. +// Returns a list object with 4 numbers. +/proc/GetDNABounds(var/block) + var/list/BOUNDS=dna_activity_bounds[block] + if(!istype(BOUNDS)) + return DNA_DEFAULT_BOUNDS + return BOUNDS + +// Give Random Bad Mutation to M /proc/randmutb(var/mob/living/M) if(!M) return M.dna.check_integrity() var/block = pick(GLASSESBLOCK,COUGHBLOCK,FAKEBLOCK,NERVOUSBLOCK,CLUMSYBLOCK,TWITCHBLOCK,HEADACHEBLOCK,BLINDBLOCK,DEAFBLOCK,HALLUCINATIONBLOCK) M.dna.SetSEState(block, 1) -// Random Good Mutation +// Give Random Good Mutation to M /proc/randmutg(var/mob/living/M) if(!M) return M.dna.check_integrity() @@ -146,9 +167,15 @@ else return 0 +// Used below, simple injection modifier. /proc/probinj(var/pr, var/inj) return prob(pr+inj*pr) +// (Re-)Apply mutations. +// TODO: Turn into a /mob proc, change inj to a bitflag for various forms of differing behavior. +// M: Mob to mess with +// connected: Machine we're in, type unchecked so I doubt it's used beyond monkeying +// inj: 1 for if we're checking this from an injector, screws with manifestation probability calc. /proc/domutcheck(mob/living/M as mob, connected, inj) if (!M) return diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index dc50b75299c..40badab0185 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -783,9 +783,7 @@ if (src.buffers[bufferId]["ue"]) src.connected.occupant.real_name = src.buffers[bufferId]["owner"] src.connected.occupant.name = src.buffers[bufferId]["owner"] - src.connected.occupant.dna.UI = src.buffers[bufferId]["data"] - src.connected.occupant.dna.UpdateUI() - src.connected.occupant.UpdateAppearance() + src.connected.occupant.UpdateAppearance(src.buffers[bufferId]["data"]) else if (src.buffers[bufferId]["type"] == "se") src.connected.occupant.dna.SE = src.buffers[bufferId]["data"] src.connected.occupant.dna.UpdateSE() diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 3adeccdf91e..0dcfe36eb49 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -368,8 +368,8 @@ R.fields["ckey"] = subject.ckey R.fields["name"] = subject.real_name R.fields["id"] = copytext(md5(subject.real_name), 2, 6) - R.fields["UI"] = subject.dna.uni_identity - R.fields["SE"] = subject.dna.struc_enzymes + R.fields["UI"] = subject.dna.UI + R.fields["SE"] = subject.dna.SE //Add an implant if needed var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject) diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index c6f2f454567..8cd0de143c5 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -182,7 +182,7 @@ src.active2 = null src.authenticated = usr.name var/mob/living/silicon/robot/R = usr - src.rank = R.braintype + src.rank = "[R.modtype] [R.braintype]" src.screen = 1 else if (istype(src.scan, /obj/item/weapon/card/id)) @@ -432,7 +432,7 @@ var/counter = 1 while(src.active2.fields[text("com_[]", counter)]) counter++ - src.active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], 2557
[t1]") + src.active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")]
[t1]") if (href_list["del_c"]) if ((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])])) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index abafd99b4da..b5e8462a93d 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -221,6 +221,127 @@ proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0) message_admins("\blue [key_name_admin(usr)] has spawned [ckey] as a filthy xeno [alien_caste].", 1) return 1 +/* +Allow admins to set players to be able to respawn/bypass 30 min wait, without the admin having to edit variables directly +Ccomp's first proc. +*/ + +/client/proc/get_ghosts(var/notify = 0,var/what = 2) + // what = 1, return ghosts ass list. + // what = 2, return mob list + + var/list/mobs = list() + var/list/ghosts = list() + var/list/sortmob = sortAtom(mob_list) // get the mob list. + /var/any=0 + for(var/mob/dead/observer/M in sortmob) + mobs.Add(M) //filter it where it's only ghosts + any = 1 //if no ghosts show up, any will just be 0 + if(!any) + if(notify) + src << "There doesn't appear to be any ghosts for you to select." + return + + for(var/mob/M in mobs) + var/name = M.name + ghosts[name] = M //get the name of the mob for the popup list + if(what==1) + return ghosts + else + return mobs +/* + +/client/proc/allow_character_respawn() + set category = "Special Verbs" + set name = "Allow player to respawn" + set desc = "Let's the player bypass the 30 minute wait to respawn or allow them to re-enter their corpse." + if(!holder) + src << "Only administrators may use this command." + var/list/ghosts= get_ghosts(1,1) + + var/target = input("Please, select a ghost!", "COME BACK TO LIFE!", null, null) as null|anything in ghosts + if(!target) + src << "Hrm, appears you didn't select a ghost" // Sanity check, if no ghosts in the list we don't want to edit a null variable and cause a runtime error. + return + + var/mob/dead/observer/G = ghosts[target] + if(G.has_enabled_antagHUD && config.antag_hud_restricted) + var/response = alert(src, "Are you sure you wish to allow this individual to play?","Ghost has used AntagHUD","Yes","No") + if(response == "No") return + G.timeofdeath=-19999 /* time of death is checked in /mob/verb/abandon_mob() which is the Respawn verb. + timeofdeath is used for bodies on autopsy but since we're messing with a ghost I'm pretty sure + there won't be an autopsy. + */ + G.has_enabled_antagHUD = 2 + G.can_reenter_corpse = 1 + + G:show_message(text("\blue You may now respawn. You should roleplay as if you learned nothing about the round during your time with the dead."), 1) + log_admin("[key_name(usr)] allowed [key_name(G)] to bypass the 30 minute respawn limit") + message_admins("Admin [key_name_admin(usr)] allowed [key_name_admin(G)] to bypass the 30 minute respawn limit", 1) + + +/client/proc/toggle_antagHUD_use() + set category = "Server" + set name = "Toggle antagHUD usage" + set desc = "Toggles antagHUD usage for observers" + + if(!holder) + src << "Only administrators may use this command." + var/action="" + if(config.antag_hud_allowed) + for(var/mob/dead/observer/g in get_ghosts()) + if(!g.client.holder) //Remove the verb from non-admin ghosts + g.verbs -= /mob/dead/observer/verb/toggle_antagHUD + if(g.antagHUD) + g.antagHUD = 0 // Disable it on those that have it enabled + g.has_enabled_antagHUD = 2 // We'll allow them to respawn + g << "\red The Administrator has disabled AntagHUD " + config.antag_hud_allowed = 0 + src << "\red AntagHUD usage has been disabled" + action = "disabled" + else + for(var/mob/dead/observer/g in get_ghosts()) + if(!g.client.holder) // Add the verb back for all non-admin ghosts + g.verbs += /mob/dead/observer/verb/toggle_antagHUD + g << "\blue The Administrator has enabled AntagHUD " // Notify all observers they can now use AntagHUD + config.antag_hud_allowed = 1 + action = "enabled" + src << "\blue AntagHUD usage has been enabled" + + + log_admin("[key_name(usr)] has [action] antagHUD usage for observers") + message_admins("Admin [key_name_admin(usr)] has [action] antagHUD usage for observers", 1) + + + +/client/proc/toggle_antagHUD_restrictions() + set category = "Server" + set name = "Toggle antagHUD Restrictions" + set desc = "Restricts players that have used antagHUD from being able to join this round." + if(!holder) + src << "Only administrators may use this command." + var/action="" + if(config.antag_hud_restricted) + for(var/mob/dead/observer/g in get_ghosts()) + g << "\blue The administrator has lifted restrictions on joining the round if you use AntagHUD" + action = "lifted restrictions" + config.antag_hud_restricted = 0 + src << "\blue AntagHUD restrictions have been lifted" + else + for(var/mob/dead/observer/g in get_ghosts()) + g << "\red The administrator has placed restrictions on joining the round if you use AntagHUD" + g << "\red Your AntagHUD has been disabled, you may choose to re-enabled it but will be under restrictions " + g.antagHUD = 0 + g.has_enabled_antagHUD = 0 + action = "placed restrictions" + config.antag_hud_restricted = 1 + src << "\red AntagHUD restrictions have been enabled" + + log_admin("[key_name(usr)] has [action] on joining the round if they use AntagHUD") + message_admins("Admin [key_name_admin(usr)] has [action] on joining the round if they use AntagHUD", 1) +*/ + + /* If a guy was gibbed and you want to revive him, this is a good way to do so. Works kind of like entering the game with a new character. Character receives a new mind if they didn't have one. @@ -327,9 +448,7 @@ Traitors and the like can also be revived with the previous role mostly intact. new_character.dna.unique_enzymes = record_found.fields["b_dna"]//Enzymes are based on real name but we'll use the record for conformity. new_character.dna.SE = record_found.fields["enzymes"]//This is the default of enzymes so I think it's safe to go with. new_character.dna.UpdateSE() - new_character.dna.UI = record_found.fields["identity"]//DNA identity is carried over. - new_character.dna.UpdateUI() - new_character.UpdateAppearance()//Now we configure their appearance based on their unique identity, same as with a DNA machine or somesuch. + new_character.UpdateAppearance(record_found.fields["identity"])//Now we configure their appearance based on their unique identity, same as with a DNA machine or somesuch. else//If they have no records, we just do a random DNA for them, based on their random appearance/savefile. new_character.dna.ready_dna(new_character) @@ -410,30 +529,6 @@ Traitors and the like can also be revived with the previous role mostly intact. feedback_add_details("admin_verb","RSPCH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return new_character -/client/proc/get_ghosts(var/notify = 0,var/what = 2) - // what = 1, return ghosts ass list. - // what = 2, return mob list - - var/list/mobs = list() - var/list/ghosts = list() - var/list/sortmob = sortAtom(mob_list) // get the mob list. - /var/any=0 - for(var/mob/dead/observer/M in sortmob) - mobs.Add(M) //filter it where it's only ghosts - any = 1 //if no ghosts show up, any will just be 0 - if(!any) - if(notify) - src << "There doesn't appear to be any ghosts for you to select." - return - - for(var/mob/M in mobs) - var/name = M.name - ghosts[name] = M //get the name of the mob for the popup list - if(what==1) - return ghosts - else - return mobs - /client/proc/toggle_antagHUD_use() set category = "Server" set name = "Toggle antagHUD usage" @@ -920,4 +1015,4 @@ Traitors and the like can also be revived with the previous role mostly intact. config.allow_random_events = 0 usr << "Random events disabled" message_admins("Admin [key_name_admin(usr)] has disabled random events.", 1) - feedback_add_details("admin_verb","TRE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + feedback_add_details("admin_verb","TRE") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index fe6f56624f6..a424cdd72af 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -30,8 +30,8 @@ continue var/datum/disease/dnaspread/D = new D.strain_data["name"] = H.real_name - D.strain_data["UI"] = H.dna.uni_identity - D.strain_data["SE"] = H.dna.struc_enzymes + D.strain_data["UI"] = H.dna.UI + D.strain_data["SE"] = H.dna.SE D.carrier = 1 D.holder = H D.affected_mob = H diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index e5432e7b7c3..99a397cd3f4 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -38,7 +38,7 @@ reagents = R R.my_atom = src - if(name == "monkey" || name == "farwa" || name == "stok" || name == "neara" || name == "diona nymph") //Hideous but necessary to stop Pun-Pun becoming generic. + if(name == initial(name)) //To stop Pun-Pun becoming generic. name = "[name] ([rand(1, 1000)])" real_name = name diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index df3c99add96..dcb69336b79 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -7,7 +7,7 @@ Enjoy! - Doohl - Notice: This all gets automatically compiled in a list in dna.dm, so you do not + Notice: This all gets automatically compiled in a list in dna2.dm, so you do not have to define any UI values for sprite accessories manually for hair and facial hair. Just add in new hair types and the game will naturally adapt.