From 06f04e63743291c8dcb334be491e48a45823853b Mon Sep 17 00:00:00 2001 From: Zuhayr Date: Wed, 5 Jun 2013 17:35:38 +0930 Subject: [PATCH] Vox mutantrace, vox clothing, minor surgery mod for mutantrace specific surgery steps. Fixed captain's jacket sprite. --- baystation12.dme | 3 - code/datums/datacore.dm | 5 ++ code/datums/datumvars.dm | 2 +- code/modules/admin/admin_verbs.dm | 2 +- code/modules/client/preferences.dm | 5 ++ code/modules/clothing/spacesuits/alien.dm | 68 ++++++++++++++++++- code/modules/mob/living/carbon/human/human.dm | 8 ++- code/modules/mob/living/carbon/human/life.dm | 19 +++++- .../mob/living/carbon/human/update_icons.dm | 5 ++ code/modules/mob/living/say.dm | 15 +++- code/modules/mob/mob_defines.dm | 1 + code/modules/mob/new_player/new_player.dm | 4 ++ .../mob/new_player/preferences_setup.dm | 5 ++ .../mob/new_player/sprite_accessories.dm | 7 +- code/modules/mob/say.dm | 4 +- code/modules/organs/organ_external.dm | 2 + code/modules/projectiles/projectile/change.dm | 2 +- code/modules/surgery/surgery.dm | 20 +++++- code/stylesheet.dm | 1 + 19 files changed, 163 insertions(+), 15 deletions(-) diff --git a/baystation12.dme b/baystation12.dme index 090daa54fab..970e2ba7be2 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -53,9 +53,6 @@ #define FILE_DIR "sound/voice" #define FILE_DIR "sound/voice/Serithi" #define FILE_DIR "sound/weapons" -#define FILE_DIR "tools" -#define FILE_DIR "tools/AddToChangelog" -#define FILE_DIR "tools/AddToChangelog/AddToChangelog" // END_FILE_DIR // BEGIN_PREFERENCES #define DEBUG diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index cce20b731c2..e2a9e1e1bfe 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -122,6 +122,8 @@ proc/get_id_photo(var/mob/living/carbon/human/H) icobase = 'icons/mob/human_races/r_lizard.dmi' if("Skrell") icobase = 'icons/mob/human_races/r_skrell.dmi' + if("Vox") + icobase = 'icons/mob/human_races/r_vox.dmi' else icobase = 'icons/mob/human_races/r_human.dmi' @@ -147,6 +149,9 @@ proc/get_id_photo(var/mob/living/carbon/human/H) preview_icon.Blend(rgb(-H.s_tone, -H.s_tone, -H.s_tone), ICON_SUBTRACT) var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes_s") + if(H.get_species()=="Vox") + eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "vox_eyes_s") + eyes_s.Blend(rgb(H.r_eyes, H.g_eyes, H.b_eyes), ICON_ADD) var/datum/sprite_accessory/hair_style = hair_styles_list[H.h_style] diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 6d9ecca0efb..81abf92546a 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -730,7 +730,7 @@ client usr << "This can only be done to instances of type /mob/living/carbon/human" return - var/new_mutantrace = input("Please choose a new mutantrace","Mutantrace",null) as null|anything in list("NONE","golem","lizard","slime","plant","shadow","tajaran","skrell") + var/new_mutantrace = input("Please choose a new mutantrace","Mutantrace",null) as null|anything in list("NONE","golem","lizard","slime","plant","shadow","tajaran","skrell","vox") switch(new_mutantrace) if(null) return diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 25daafc9f41..62b8b84324e 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -646,7 +646,7 @@ var/list/admin_verbs_mod = list( if(!istype(M, /mob/living/carbon/human)) usr << "\red You can only do this to humans!" return - switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Unathi and Tajaran can result in unintended consequences.",,"Yes","No")) + switch(alert("Are you sure you wish to edit this mob's appearance? Skrell, Unathi, Vox and Tajaran can result in unintended consequences.",,"Yes","No")) if("No") return var/new_facial = input("Please select facial hair color.", "Character Generation") as color diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 8f15102cdd1..0d2832657ea 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -792,6 +792,10 @@ datum/preferences if(is_alien_whitelisted(user, "Skrell")) //Check for Skrell and admins new_species += "Skrell" whitelisted = 1 + if(is_alien_whitelisted(user, "Vox")) //Check for Skrell and admins + new_species += "Vox" + whitelisted = 1 + if(!whitelisted) alert(user, "You cannot change your species as you need to be whitelisted. If you wish to be whitelisted contact an admin in-game, on the forums, or on IRC.") @@ -799,6 +803,7 @@ datum/preferences new_species += "Tajaran" new_species += "Unathi" new_species += "Skrell" + new_species += "Vox" species = input("Please select a species", "Character Generation", null) in new_species if(prev_species != species) diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm index b9ab877f59f..45e753c9acc 100644 --- a/code/modules/clothing/spacesuits/alien.dm +++ b/code/modules/clothing/spacesuits/alien.dm @@ -21,4 +21,70 @@ armor = list(melee = 40, bullet = 30, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 50) allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd) heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE \ No newline at end of file + max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE + +// Vox space gear (vaccuum suit, low pressure armour) +// Can't be equipped by any other species due to bone structure and vox cybernetics. + +/obj/item/clothing/head/helmet/space/vox/pressure + name = "alien helmet" + icon_state = "vox-pressure" + item_state = "vox-pressure" + desc = "Hey, wasn't this a prop in \'The Abyss\'?" + armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30) + +/obj/item/clothing/suit/space/vox/pressure + name = "alien pressure suit" + icon_state = "vox-pressure" + item_state = "vox-pressure" + desc = "A huge, armoured, pressurized suit, designed for distinctly nonhuman proportions." + w_class = 3 + allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen) + slowdown = 2 + armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) + +/obj/item/clothing/head/helmet/space/vox/carapace + name = "alien visor" + icon_state = "vox-carapace" + item_state = "vox-carapace" + desc = "A glowing visor, perhaps stolen from a depressed Cylon." + armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30) + +/obj/item/clothing/suit/space/vox/carapace + name = "alien carapace armour" + icon_state = "vox-carapace" + item_state = "vox-carapace" + desc = "An armoured, segmented carapace with glowing purple lights. It looks pretty run-down." + w_class = 3 + allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen) + slowdown = 1 + armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) + +/obj/item/clothing/head/helmet/space/vox/mob_can_equip(M as mob, slot) + var/mob/living/carbon/human/V = M + if(V.dna.mutantrace != "vox") + V << "This clearly isn't designed for your species!" + return 0 + return ..() + +/obj/item/clothing/suit/space/vox/mob_can_equip(M as mob, slot) + var/mob/living/carbon/human/V = M + if(V.dna.mutantrace != "vox") + V << "This clearly isn't designed for your species!" + return 0 + + return ..() + +/obj/item/clothing/under/vox/vox_casual + name = "alien clothing" + desc = "This doesn't look very comfortable." + icon_state = "vox-casual-1" + color = "vox-casual-1" + item_state = "vox-casual-1" + +/obj/item/clothing/under/vox/vox_robes + name = "alien robes" + desc = "Weird and flowing!" + icon_state = "vox-casual-2" + color = "vox-casual-2" + item_state = "vox-casual-2" \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index e08d96b6601..e8cdbe9a692 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -811,6 +811,8 @@ return "Tajaran" if("skrell") return "Skrell" + if("vox") + return "Vox" if("plant") return "Mobile vegetation" if("golem") @@ -826,6 +828,8 @@ return "Skrell" else if(src.dna.mutantrace == "tajaran") return "Tajaran" + else if(src.dna.mutantrace == "vox") + return "vox" /mob/living/carbon/proc/update_mutantrace_languages() if(src.dna) @@ -835,6 +839,8 @@ src.skrell_talk_understand = 1 else if(src.dna.mutantrace == "tajaran") src.tajaran_talk_understand = 1 + else if(src.dna.mutantrace == "vox") + src.vox_talk_understand = 1 /mob/living/carbon/human/proc/play_xylophone() if(!src.xylophone) @@ -1105,4 +1111,4 @@ .=..() if(istype(feet_blood_DNA, /list) && feet_blood_DNA.len) del(feet_blood_DNA) - return 1 + return 1 diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 79b111cf521..a28652f8ca2 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -392,6 +392,7 @@ var/SA_para_min = 1 var/SA_sleep_min = 5 var/oxygen_used = 0 + var/nitrogen_used = 0 var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME //Partial pressure of the O2 in our breath @@ -401,8 +402,10 @@ // And CO2, lets say a PP of more than 10 will be bad (It's a little less really, but eh, being passed out all round aint no fun) var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*breath_pressure // Tweaking to fit the hacky bullshit I've done with atmo -- TLE //var/CO2_pp = (breath.carbon_dioxide/breath.total_moles())*0.5 // The default pressure value + // Nitrogen, for Vox. + var/Nitrogen_pp = (breath.nitrogen/breath.total_moles())*breath_pressure - if(O2_pp < safe_oxygen_min) // Too little oxygen + if(O2_pp < safe_oxygen_min && src.dna.mutantrace!="vox") // Too little oxygen if(prob(20)) spawn(0) emote("gasp") if(O2_pp > 0) @@ -420,6 +423,19 @@ oxyloss += 5*ratio oxygen_used = breath.oxygen*ratio/6 oxygen_alert = max(oxygen_alert, 1)*/ + else if(Nitrogen_pp < safe_oxygen_min && src.dna.mutantrace=="vox") //Vox breathe nitrogen, not oxygen. + + if(prob(20)) + spawn(0) emote("gasp") + if(Nitrogen_pp > 0) + var/ratio = safe_oxygen_min/Nitrogen_pp + adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS)) + failed_last_breath = 1 + nitrogen_used = breath.nitrogen*ratio/6 + else + adjustOxyLoss(HUMAN_MAX_OXYLOSS) + failed_last_breath = 1 + oxygen_alert = max(oxygen_alert, 1) else // We're in safe limits failed_last_breath = 0 adjustOxyLoss(-5) @@ -427,6 +443,7 @@ oxygen_alert = 0 breath.oxygen -= oxygen_used + breath.nitrogen -= nitrogen_used breath.carbon_dioxide += oxygen_used //CO2 does not affect failed_last_breath. So if there was enough oxygen in the air but too much co2, this will hurt you, but only once per 4 ticks, instead of once per tick. diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index c765bf9711f..c506b35250d 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -313,6 +313,8 @@ proc/get_damage_icon_part(damage_state, body_part) //Eyes if(!skeleton) var/icon/eyes_s = new/icon('icons/mob/human_face.dmi', "eyes_s") + if(src.get_species()=="Vox") + eyes_s = new/icon('icons/mob/human_face.dmi', "vox_eyes_s") eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) stand_icon.Blend(eyes_s, ICON_OVERLAY) @@ -442,6 +444,9 @@ proc/get_damage_icon_part(damage_state, body_part) if("skrell") race_icon = 'icons/mob/human_races/r_skrell.dmi' deform_icon = 'icons/mob/human_races/r_def_skrell.dmi' + if("vox") + race_icon = 'icons/mob/human_races/r_vox.dmi' + deform_icon = 'icons/mob/human_races/r_def_vox.dmi' else race_icon = 'icons/mob/human_races/r_human.dmi' deform_icon = 'icons/mob/human_races/r_def_human.dmi' diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 12262202f67..420e20a1b92 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -18,6 +18,7 @@ var/list/department_radio_keys = list( ":k" = "skrell", "#k" = "skrell", ".k" = "skrell", ":j" = "tajaran", "#j" = "tajaran", ".j" = "tajaran", ":o" = "soghun", "#o" = "soghun", ".o" = "soghun", + ":v" = "vox", "#v" = "vox", ".v" = "vox", ":R" = "right hand", "#R" = "right hand", ".R" = "right hand", ":L" = "left hand", "#L" = "left hand", ".L" = "left hand", @@ -37,6 +38,7 @@ var/list/department_radio_keys = list( ":K" = "skrell", "#K" = "skrell", ".K" = "skrell", ":J" = "tajaran", "#J" = "tajaran", ".J" = "tajaran", ":O" = "soghun", "#O" = "soghun", ".O" = "soghun", + ":V" = "vox", "#V" = "vox", ".V" = "vox", //kinda localization -- rastaf0 //same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding. @@ -185,6 +187,7 @@ var/list/department_radio_keys = list( var/is_speaking_skrell = 0 var/is_speaking_soghun = 0 var/is_speaking_taj = 0 + var/is_speaking_vox = 0 var/is_speaking_radio = 0 switch (message_mode) @@ -283,6 +286,10 @@ var/list/department_radio_keys = list( if(skrell_talk_understand || universal_speak) is_speaking_skrell = 1 + if ("vox") + if(vox_talk_understand || universal_speak) + is_speaking_vox = 1 + if("changeling") if(mind && mind.changeling) for(var/mob/Changeling in mob_list) @@ -370,7 +377,7 @@ var/list/department_radio_keys = list( for (var/M in listening) if(hascall(M,"say_understands")) - if (M:say_understands(src) && !is_speaking_skrell && !is_speaking_soghun && !is_speaking_taj) + if (M:say_understands(src) && !is_speaking_skrell && !is_speaking_soghun && !is_speaking_vox && !is_speaking_taj) heard_a += M else if(ismob(M)) if(is_speaking_skrell && (M:skrell_talk_understand || M:universal_speak)) @@ -379,6 +386,8 @@ var/list/department_radio_keys = list( heard_a += M else if(is_speaking_taj && (M:tajaran_talk_understand || M:universal_speak)) heard_a += M + else if(is_speaking_vox && (M:vox_talk_understand || M:universal_speak)) + heard_a += M else heard_b += M else @@ -394,7 +403,7 @@ var/list/department_radio_keys = list( var/rendered = null if (length(heard_a)) - var/message_a = say_quote(message,is_speaking_soghun,is_speaking_skrell,is_speaking_taj) + var/message_a = say_quote(message,is_speaking_soghun,is_speaking_skrell,is_speaking_taj,is_speaking_vox) if (italics) message_a = "[message_a]" @@ -419,7 +428,7 @@ var/list/department_radio_keys = list( message_b = voice_message else message_b = stars(message) - message_b = say_quote(message_b,is_speaking_soghun,is_speaking_skrell,is_speaking_taj) + message_b = say_quote(message_b,is_speaking_soghun,is_speaking_skrell,is_speaking_taj,is_speaking_vox) if (italics) message_b = "[message_b]" diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 882714cd0e3..9715e6ed20c 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -211,6 +211,7 @@ var/tajaran_talk_understand = 0 var/soghun_talk_understand = 0 var/skrell_talk_understand = 0 + var/vox_talk_understand = 0 var/has_limbs = 1 //Whether this mob have any limbs he can move with var/can_stand = 1 //Whether this mob have ability to stand diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 5ba8a959b9c..686007c7173 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -349,6 +349,10 @@ if(is_alien_whitelisted(src, "Skrell"|| !config.usealienwhitelist)) new_character.dna.mutantrace = "skrell" new_character.skrell_talk_understand = 1 + if(client.prefs.species == "Vox") + if(is_alien_whitelisted(src, "Vox"|| !config.usealienwhitelist)) + new_character.dna.mutantrace = "vox" + new_character.vox_talk_understand = 1 if(ticker.random_players) new_character.gender = pick(MALE, FEMALE) diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 8794b6342c3..f1cf54af153 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -144,6 +144,8 @@ datum/preferences icobase = 'icons/mob/human_races/r_lizard.dmi' if("Skrell") icobase = 'icons/mob/human_races/r_skrell.dmi' + if("Vox") + icobase = 'icons/mob/human_races/r_vox.dmi' else icobase = 'icons/mob/human_races/r_human.dmi' preview_icon = new /icon(icobase, "torso_[g]") @@ -172,6 +174,9 @@ datum/preferences preview_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT) var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "eyes_s") + if(species=="Vox") + eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = "vox_eyes_s") + eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD) var/datum/sprite_accessory/hair_style = hair_styles_list[h_style] diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 78d0c509cde..4d4baf0ba18 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -306,7 +306,7 @@ name = "Shaved" icon_state = "bald" gender = NEUTER - species_allowed = list("Human","Unathi","Tajaran","Skrell") + species_allowed = list("Human","Unathi","Tajaran","Skrell","Vox") watson name = "Watson Mustache" @@ -493,6 +493,11 @@ icon_state = "hair_messy" species_allowed = list("Tajaran") + vox_quills_short + name = "Short Vox Quills" + icon_state = "vox_shortquills" + species_allowed = list("Vox") + /datum/sprite_accessory/facial_hair taj_sideburns diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 8a28152a239..9f3660eb7c5 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -69,7 +69,7 @@ return 1 return 0 -/mob/proc/say_quote(var/text,var/is_speaking_soghun,var/is_speaking_skrell,var/is_speaking_tajaran) +/mob/proc/say_quote(var/text,var/is_speaking_soghun,var/is_speaking_skrell,var/is_speaking_tajaran,var/is_speaking_vox) if(!text) return "says, \"...\""; //not the best solution, but it will stop a large number of runtimes. The cause is somewhere in the Tcomms code //tcomms code is still runtiming somewhere here @@ -80,6 +80,8 @@ return "warbles, \"[text]\""; if (is_speaking_tajaran) return "mrowls, \"[text]\""; + if (is_speaking_vox) + return "chirps, \"[text]\""; //Needs Virus2 // if (src.disease_symptoms & DISEASE_HOARSE) // return "rasps, \"[text]\""; diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 78d7ea56153..4d0e8bfac35 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -740,6 +740,8 @@ obj/item/weapon/organ/New(loc, mob/living/carbon/human/H) base = new('icons/mob/human_races/r_lizard.dmi') if("skrell") base = new('icons/mob/human_races/r_skrell.dmi') + if("vox") + base = new('icons/mob/human_races/r_vox.dmi') else base = new('icons/mob/human_races/r_human.dmi') if(base) diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm index ebd6a1e512e..2b4b4c457d8 100644 --- a/code/modules/projectiles/projectile/change.dm +++ b/code/modules/projectiles/projectile/change.dm @@ -74,7 +74,7 @@ var/mob/living/carbon/human/H = new_mob if(H.dna) - H.dna.mutantrace = pick("lizard","tajaran","skrell","golem","slime","plant",4;"") + H.dna.mutantrace = pick("lizard","tajaran","skrell","golem","slime","plant","vox",4;"") else return diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 2d8db6670cf..fd109b259cb 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -5,6 +5,9 @@ // type path referencing tools that can be used for this step, and how well are they suited for it var/list/allowed_tools = null + // type paths referencing mutantraces that this step applies to. + var/list/allowed_species = null + var/list/disallowed_species = null // duration of the step var/min_duration = 0 @@ -22,6 +25,21 @@ return allowed_tools[T] return 0 + // Checks if this step applies to the mutantrace of the user. + proc/is_valid_mutantrace(mob/living/carbon/human/target) + + if(allowed_species) + for(var/species in allowed_species) + if(target.dna.mutantrace == species) + return 1 + + if(disallowed_species) + for(var/species in disallowed_species) + if (target.dna.mutantrace == species) + return 0 + + return 1 + // checks whether this step can be applied with the given user and target proc/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) return 0 @@ -63,7 +81,7 @@ proc/do_surgery(mob/living/M, mob/living/user, obj/item/tool) return 0 for(var/datum/surgery_step/S in surgery_steps) //check if tool is right or close enough and if this step is possible - if( S.tool_quality(tool) && S.can_use(user, M, user.zone_sel.selecting, tool)) + if( S.tool_quality(tool) && S.can_use(user, M, user.zone_sel.selecting, tool) && S.is_valid_mutantrace(M)) S.begin_step(user, M, user.zone_sel.selecting, tool) //start on it //We had proper tools! (or RNG smiled.) and User did not move or change hands. if( prob(S.tool_quality(tool)) && do_mob(user, M, rand(S.min_duration, S.max_duration))) diff --git a/code/stylesheet.dm b/code/stylesheet.dm index 2481e247afd..902160e9ef9 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -55,6 +55,7 @@ h1.alert, h2.alert {color: #000000;} .tajaran {color: #803B56;} .skrell {color: #00CED1;} .soghun {color: #228B22;} +.vox {color: #AA00AA;} .say_quote {font-family: Georgia, Verdana, sans-serif;} .interface {color: #330033;}