diff --git a/code/datums/diseases/appendicitis.dm b/code/datums/diseases/appendicitis.dm index a9959ef0636..8ab0f1b491e 100644 --- a/code/datums/diseases/appendicitis.dm +++ b/code/datums/diseases/appendicitis.dm @@ -23,9 +23,6 @@ src.cure() if(stage == 1) - if(affected_mob.op_stage.appendix == 2.0) - // appendix is removed, can't get infected again - src.cure() if(prob(5)) affected_mob << "\red You feel a stinging pain in your abdomen!" affected_mob.emote("me",1,"winces slightly.") @@ -48,7 +45,6 @@ var/mob/living/carbon/human/H = affected_mob H << "\red Your abdomen is a world of pain!" H.Weaken(10) - H.op_stage.appendix = 2.0 var/datum/organ/external/groin = H.get_organ("groin") var/datum/wound/W = new /datum/wound/internal_bleeding(20) diff --git a/code/game/gamemodes/events/space_ninja.dm b/code/game/gamemodes/events/space_ninja.dm index 5dae9e6e4b7..ff8b760bc1d 100644 --- a/code/game/gamemodes/events/space_ninja.dm +++ b/code/game/gamemodes/events/space_ninja.dm @@ -415,7 +415,7 @@ As such, it's hard-coded for now. No reason for it not to be, really. if(13) directive += "Some disgruntled NanoTrasen employees have been supportive of our operations. Be wary of any mistreatment by command staff." if(14) - var/xenorace = pick("Unathi","Tajaran", "Skrellian") + var/xenorace = pick("Unathi","Tajara", "Skrell") directive += "A group of [xenorace] radicals have been loyal supporters of the Spider Clan. Favor [xenorace] crew whenever possible." if(15) directive += "The Spider Clan has recently been accused of religious insensitivity. Attempt to speak with the Chaplain and prove these accusations false." diff --git a/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm b/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm index 6df5a22050c..580322f8e17 100644 --- a/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm +++ b/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm @@ -6,7 +6,7 @@ datum/directive/terminations/alien_fraud proc/is_alien(mob/M) var/species = M.get_species() - return species == "Tajaran" || species == "Unathi" + return species == "Tajara" || species == "Unathi" datum/directive/terminations/alien_fraud/get_crew_to_terminate() var/list/aliens[0] @@ -30,7 +30,7 @@ datum/directive/terminations/alien_fraud/meets_prerequisites() var/unathi = 0 for(var/mob/M in player_list) var/species = M.get_species() - if(species == "Tajaran") + if(species == "Tajara") tajarans++ if(species == "Unathi") unathi++ diff --git a/code/game/gamemodes/mutiny/directives/tau_ceti_needs_women_directive.dm b/code/game/gamemodes/mutiny/directives/tau_ceti_needs_women_directive.dm index b70ffd659d1..f1aa2e914db 100644 --- a/code/game/gamemodes/mutiny/directives/tau_ceti_needs_women_directive.dm +++ b/code/game/gamemodes/mutiny/directives/tau_ceti_needs_women_directive.dm @@ -28,7 +28,7 @@ datum/directive/tau_ceti_needs_women var/list/aliens[0] for(var/mob/M in get_crew_of_target_gender()) var/species = M.get_species() - if(species == "Tajaran" || species == "Unathi" || species == "Skrell") + if(species == "Tajara" || species == "Unathi" || species == "Skrell") aliens.Add(M) return aliens diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 911dc58d846..9a7f2e4cdf0 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -232,8 +232,8 @@ var/global/list/turf/synd_spawn = list() switch(race) if("Unathi") new_suit.species_restricted = list("Unathi") - if("Tajaran") - new_suit.species_restricted = list("Tajaran") + if("Tajara") + new_suit.species_restricted = list("Tajara") if("Skrell") new_suit.species_restricted = list("Skrell") diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 0400d58689e..16ae2f5e545 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -480,7 +480,7 @@ var/global/datum/controller/occupations/job_master //TODO: Generalize this by-species if(H.species) - if(H.species.name == "Tajaran" || H.species.name == "Unathi") + if(H.species.name == "Tajara" || H.species.name == "Unathi") H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes,1) else if(H.species.name == "Vox") H.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(H), slot_wear_mask) diff --git a/code/game/machinery/bioprinter.dm b/code/game/machinery/bioprinter.dm index 4ce50d404c5..a0ac4258cce 100644 --- a/code/game/machinery/bioprinter.dm +++ b/code/game/machinery/bioprinter.dm @@ -5,6 +5,9 @@ desc = "It's a machine that grows replacement organs." icon = 'icons/obj/surgery.dmi' + anchored = 1 + density = 1 + icon_state = "bioprinter" var/prints_prosthetics diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 3f0b7448895..8fc6fa35993 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -602,7 +602,7 @@ //Departments that the cycler can paint suits to look like. var/list/departments = list("Engineering","Mining","Medical","Security","Atmos") //Species that the suits can be configured to fit. - var/list/species = list("Human","Skrell","Unathi","Tajaran") + var/list/species = list("Human","Skrell","Unathi","Tajara") var/target_department var/target_species @@ -622,35 +622,35 @@ model_text = "Engineering" req_access = list(access_construction) departments = list("Engineering","Atmos") - species = list("Human","Tajaran","Skrell","Unathi") //Add Unathi when sprites exist for their suits. + species = list("Human","Tajara","Skrell","Unathi") //Add Unathi when sprites exist for their suits. /obj/machinery/suit_cycler/mining name = "Mining suit cycler" model_text = "Mining" req_access = list(access_mining) departments = list("Mining") - species = list("Human","Tajaran","Skrell","Unathi") + species = list("Human","Tajara","Skrell","Unathi") /obj/machinery/suit_cycler/security name = "Security suit cycler" model_text = "Security" req_access = list(access_security) departments = list("Security") - species = list("Human","Tajaran","Skrell","Unathi") + species = list("Human","Tajara","Skrell","Unathi") /obj/machinery/suit_cycler/medical name = "Medical suit cycler" model_text = "Medical" req_access = list(access_medical) departments = list("Medical") - species = list("Human","Tajaran","Skrell","Unathi") + species = list("Human","Tajara","Skrell","Unathi") /obj/machinery/suit_cycler/syndicate name = "Nonstandard suit cycler" model_text = "Nonstandard" req_access = list(access_syndicate) departments = list("Mercenary") - species = list("Human","Tajaran","Skrell","Unathi") + species = list("Human","Tajara","Skrell","Unathi") can_repair = 1 /obj/machinery/suit_cycler/attack_ai(mob/user as mob) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index c121bf746f8..80f1fcb8e51 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -44,7 +44,7 @@ /* Species-specific sprites, concept stolen from Paradise//vg/. ex: sprite_sheets = list( - "Tajaran" = 'icons/cat/are/bad' + "Tajara" = 'icons/cat/are/bad' ) If index term exists and icon_override is not set, this sprite sheet will be used. */ @@ -261,6 +261,9 @@ //START HUMAN var/mob/living/carbon/human/H = M + if(H.species && !(slot in H.species.hud.equip_slots)) + return 0 + switch(slot) if(slot_l_hand) if(H.l_hand) diff --git a/code/game/objects/items/devices/modkit.dm b/code/game/objects/items/devices/modkit.dm index 02d11f22519..819583ef234 100644 --- a/code/game/objects/items/devices/modkit.dm +++ b/code/game/objects/items/devices/modkit.dm @@ -17,7 +17,7 @@ /obj/item/device/modkit/afterattack(obj/O, mob/user as mob, proximity) if(!proximity) return - + if (!target_species) return //it shouldn't be null, okay? @@ -31,12 +31,12 @@ for (var/permitted_type in permitted_types) if(istype(O, permitted_type)) allowed = 1 - + var/obj/item/clothing/I = O if (!istype(I) || !allowed) user << "[src] is unable to modify that." return - + var/excluding = ("exclude" in I.species_restricted) var/in_list = (target_species in I.species_restricted) if (excluding ^ in_list) @@ -57,7 +57,7 @@ parts &= ~MODKIT_HELMET if (istype(I, /obj/item/clothing/suit)) parts &= ~MODKIT_SUIT - + if(!parts) user.drop_from_inventory(src) del(src) @@ -69,4 +69,4 @@ /obj/item/device/modkit/tajaran name = "tajaran hardsuit modification kit" desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user. This one looks like it's meant for Tajaran." - target_species = "Tajaran" \ No newline at end of file + target_species = "Tajara" \ No newline at end of file diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index bb73a223c79..f00a8a9e6e9 100755 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1187,7 +1187,7 @@ datum/preferences b_type = new_b_type if("hair") - if(species == "Human" || species == "Unathi" || species == "Tajaran" || species == "Skrell") + if(species == "Human" || species == "Unathi" || species == "Tajara" || species == "Skrell") var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference") as color|null if(new_hair) r_hair = hex2num(copytext(new_hair, 2, 4)) @@ -1267,7 +1267,7 @@ datum/preferences s_tone = 35 - max(min( round(new_s_tone), 220),1) if("skin") - if(species == "Unathi" || species == "Tajaran" || species == "Skrell") + if(species == "Unathi" || species == "Tajara" || species == "Skrell") var/new_skin = input(user, "Choose your character's skin colour: ", "Character Preference") as color|null if(new_skin) r_skin = hex2num(copytext(new_skin, 2, 4)) diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm index 306a31a81c8..5f2a5880cba 100644 --- a/code/modules/client/preferences_gear.dm +++ b/code/modules/client/preferences_gear.dm @@ -177,12 +177,14 @@ var/global/list/gear_datums = list() cost = 2 slot = slot_head +// This was sprited and coded specifically for Zhan-Khazan characters. Before you +// decide that it's 'not even Taj themed' maybe you should read the wiki, gamer. ~ Z /datum/gear/zhan_scarf - display_name = "headscarf, white" + display_name = "Zhan headscarf" path = /obj/item/clothing/head/tajaran/scarf cost = 2 slot = slot_head -// whitelisted = "Tajaran" // It's a headscarf. It isn't even a taj-themed headscarf! + whitelisted = "Tajara" // Eyes @@ -460,7 +462,7 @@ var/global/list/gear_datums = list() path = /obj/item/clothing/suit/tajaran/furs cost = 3 slot = slot_wear_suit - whitelisted = "Tajaran" // You do have a monopoly on a fur suit tho + whitelisted = "Tajara" // You do have a monopoly on a fur suit tho // Gloves diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index fa4dad398da..232fd91dad6 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -44,7 +44,7 @@ //Set species_restricted list switch(target_species) if("Human", "Skrell") //humanoid bodytypes - species_restricted = list("exclude","Unathi","Tajaran","Diona","Vox") + species_restricted = list("exclude","Unathi","Tajara","Diona","Vox") else species_restricted = list(target_species) @@ -63,9 +63,9 @@ //Set species_restricted list switch(target_species) if("Skrell") - species_restricted = list("exclude","Unathi","Tajaran","Diona","Vox") + species_restricted = list("exclude","Unathi","Tajara","Diona","Vox") if("Human") - species_restricted = list("exclude","Skrell","Unathi","Tajaran","Diona","Vox") + species_restricted = list("exclude","Skrell","Unathi","Tajara","Diona","Vox") else species_restricted = list(target_species) @@ -177,7 +177,7 @@ BLIND // can't see anything body_parts_covered = HANDS slot_flags = SLOT_GLOVES attack_verb = list("challenged") - species_restricted = list("exclude","Unathi","Tajaran") + species_restricted = list("exclude","Unathi","Tajara") sprite_sheets = list("Vox" = 'icons/mob/species/vox/gloves.dmi') /obj/item/clothing/gloves/examine() @@ -214,7 +214,7 @@ BLIND // can't see anything desc = "[desc]
They have had the fingertips cut off of them." if("exclude" in species_restricted) species_restricted -= "Unathi" - species_restricted -= "Tajaran" + species_restricted -= "Tajara" return //Head @@ -248,7 +248,7 @@ BLIND // can't see anything permeability_coefficient = 0.50 slowdown = SHOES_SLOWDOWN - species_restricted = list("exclude","Unathi","Tajaran") + species_restricted = list("exclude","Unathi","Tajara") sprite_sheets = list("Vox" = 'icons/mob/species/vox/shoes.dmi') //Suit diff --git a/code/modules/clothing/gloves/stungloves.dm b/code/modules/clothing/gloves/stungloves.dm index c40ff3e80c8..976b16e7e68 100644 --- a/code/modules/clothing/gloves/stungloves.dm +++ b/code/modules/clothing/gloves/stungloves.dm @@ -3,29 +3,29 @@ user << "That won't work." //i'm not putting my lips on that! ..() return - + //add wires if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = W if (clipped) user << "The [src] are too badly mangled for wiring." return - + if(wired) user << "The [src] are already wired." return - + if(C.get_amount() < 2) user << "There is not enough wire to cover the [src]." return - + C.use(2) wired = 1 siemens_coefficient = 3.0 user << "You wrap some wires around the [src]." update_icon() return - + //add cell else if(istype(W, /obj/item/weapon/cell)) if(!wired) @@ -56,26 +56,26 @@ user << "You cut the wires away from the [src]." update_icon() return - + //clipping fingertips if(!clipped) playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) user.visible_message("\red [user] cuts the fingertips off of the [src].","\red You cut the fingertips off of the [src].") - + clipped = 1 name = "mangled [name]" desc = "[desc]
They have had the fingertips cut off of them." if("exclude" in species_restricted) species_restricted -= "Unathi" - species_restricted -= "Tajaran" + species_restricted -= "Tajara" return else user << "The [src] have already been clipped!" update_icon() return - + return - + ..() /obj/item/clothing/gloves/update_icon() diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm index a8017a95da0..4fef9c19587 100644 --- a/code/modules/clothing/spacesuits/rig.dm +++ b/code/modules/clothing/spacesuits/rig.dm @@ -14,15 +14,15 @@ max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE //Species-specific stuff. - species_restricted = list("exclude","Unathi","Tajaran","Skrell","Diona","Vox") + species_restricted = list("exclude","Unathi","Tajara","Skrell","Diona","Vox") sprite_sheets_refit = list( "Unathi" = 'icons/mob/species/unathi/helmet.dmi', - "Tajaran" = 'icons/mob/species/tajaran/helmet.dmi', + "Tajara" = 'icons/mob/species/tajaran/helmet.dmi', "Skrell" = 'icons/mob/species/skrell/helmet.dmi', ) sprite_sheets_obj = list( "Unathi" = 'icons/obj/clothing/species/unathi/hats.dmi', - "Tajaran" = 'icons/obj/clothing/species/tajaran/hats.dmi', + "Tajara" = 'icons/obj/clothing/species/tajaran/hats.dmi', "Skrell" = 'icons/obj/clothing/species/skrell/hats.dmi', ) @@ -64,15 +64,15 @@ heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE - species_restricted = list("exclude","Unathi","Tajaran","Diona","Vox") + species_restricted = list("exclude","Unathi","Tajara","Diona","Vox") sprite_sheets_refit = list( "Unathi" = 'icons/mob/species/unathi/suit.dmi', - "Tajaran" = 'icons/mob/species/tajaran/suit.dmi', + "Tajara" = 'icons/mob/species/tajaran/suit.dmi', "Skrell" = 'icons/mob/species/skrell/suit.dmi', ) sprite_sheets_obj = list( "Unathi" = 'icons/obj/clothing/species/unathi/suits.dmi', - "Tajaran" = 'icons/obj/clothing/species/tajaran/suits.dmi', + "Tajara" = 'icons/obj/clothing/species/tajaran/suits.dmi', "Skrell" = 'icons/obj/clothing/species/skrell/suits.dmi', ) @@ -364,7 +364,7 @@ armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60) siemens_coefficient = 0.6 var/obj/machinery/camera/camera - species_restricted = list("exclude","Unathi","Tajaran","Skrell","Vox") + species_restricted = list("exclude","Unathi","Tajara","Skrell","Vox") /obj/item/clothing/head/helmet/space/rig/syndi/attack_self(mob/user) @@ -392,7 +392,7 @@ armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 60) allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/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) siemens_coefficient = 0.6 - species_restricted = list("exclude","Unathi","Tajaran","Skrell","Vox") + species_restricted = list("exclude","Unathi","Tajara","Skrell","Vox") //Wizard Rig diff --git a/code/modules/mob/living/carbon/human/alien/alien_species.dm b/code/modules/mob/living/carbon/human/alien/alien_species.dm index fc7d589cd96..b592c6292b7 100644 --- a/code/modules/mob/living/carbon/human/alien/alien_species.dm +++ b/code/modules/mob/living/carbon/human/alien/alien_species.dm @@ -1,6 +1,8 @@ //Stand-in until this is made more lore-friendly. /datum/species/xenos name = "Xenomorph" + name_plural = "Xenomorphs" + default_language = "Xenomorph" language = "Hivemind" unarmed_type = /datum/unarmed_attack/claws/strong @@ -40,7 +42,6 @@ has_organ = list( "heart" = /datum/organ/internal/heart, - "lungs" = /datum/organ/internal/lungs, "brain" = /datum/organ/internal/brain/xeno, "plasma vessel" = /datum/organ/internal/xenos/plasmavessel, "hive node" = /datum/organ/internal/xenos/hivenode, @@ -116,7 +117,6 @@ has_organ = list( "heart" = /datum/organ/internal/heart, - "lungs" = /datum/organ/internal/lungs, "brain" = /datum/organ/internal/brain/xeno, "plasma vessel" = /datum/organ/internal/xenos/plasmavessel/queen, "acid gland" = /datum/organ/internal/xenos/acidgland, @@ -155,7 +155,6 @@ has_organ = list( "heart" = /datum/organ/internal/heart, - "lungs" = /datum/organ/internal/lungs, "brain" = /datum/organ/internal/brain/xeno, "plasma vessel" = /datum/organ/internal/xenos/plasmavessel/hunter, "hive node" = /datum/organ/internal/xenos/hivenode, @@ -183,7 +182,6 @@ has_organ = list( "heart" = /datum/organ/internal/heart, - "lungs" = /datum/organ/internal/lungs, "brain" = /datum/organ/internal/brain/xeno, "plasma vessel" = /datum/organ/internal/xenos/plasmavessel/sentinel, "acid gland" = /datum/organ/internal/xenos/acidgland, @@ -214,7 +212,6 @@ has_organ = list( "heart" = /datum/organ/internal/heart, - "lungs" = /datum/organ/internal/lungs, "brain" = /datum/organ/internal/brain/xeno, "egg sac" = /datum/organ/internal/xenos/eggsac, "plasma vessel" = /datum/organ/internal/xenos/plasmavessel/queen, diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index c8294d73583..7194eba0998 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1210,7 +1210,7 @@ src << msg organ.take_damage(rand(1,3), 0, 0) - if(!(organ.status & ORGAN_ROBOT)) //There is no blood in protheses. + if(!(organ.status & ORGAN_ROBOT) && !(species.flags & NO_BLOOD)) //There is no blood in protheses. organ.status |= ORGAN_BLEEDING src.adjustToxLoss(rand(1,3)) diff --git a/code/modules/mob/living/carbon/human/human_species.dm b/code/modules/mob/living/carbon/human/human_species.dm index c313c6015e0..051ef214f41 100644 --- a/code/modules/mob/living/carbon/human/human_species.dm +++ b/code/modules/mob/living/carbon/human/human_species.dm @@ -12,7 +12,7 @@ /mob/living/carbon/human/tajaran/New(var/new_loc) h_style = "Tajaran Ears" - ..(new_loc, "Tajaran") + ..(new_loc, "Tajara") /mob/living/carbon/human/unathi/New(var/new_loc) h_style = "Unathi Horns" diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 917251731d8..bc94620069c 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -5,6 +5,7 @@ /datum/species var/name // Species name. + var/name_plural var/icobase = 'icons/mob/human_races/r_human.dmi' // Normal icon set. var/deform = 'icons/mob/human_races/r_def_human.dmi' // Mutated icon set. @@ -202,6 +203,7 @@ /datum/species/human name = "Human" + name_plural = "Humans" language = "Sol Common" primitive = /mob/living/carbon/monkey unarmed_type = /datum/unarmed_attack/punch @@ -213,6 +215,7 @@ /datum/species/unathi name = "Unathi" + name_plural = "Unathi" icobase = 'icons/mob/human_races/r_lizard.dmi' deform = 'icons/mob/human_races/r_def_lizard.dmi' language = "Sinta'unathi" @@ -239,7 +242,8 @@ base_color = "#066000" /datum/species/tajaran - name = "Tajaran" + name = "Tajara" + name_plural = "Tajaran" icobase = 'icons/mob/human_races/r_tajaran.dmi' deform = 'icons/mob/human_races/r_def_tajaran.dmi' language = "Siik'tajr" @@ -264,6 +268,7 @@ /datum/species/skrell name = "Skrell" + name_plural = "Skrell" icobase = 'icons/mob/human_races/r_skrell.dmi' deform = 'icons/mob/human_races/r_def_skrell.dmi' language = "Skrellian" @@ -278,6 +283,7 @@ /datum/species/vox name = "Vox" + name_plural = "Vox" icobase = 'icons/mob/human_races/r_vox.dmi' deform = 'icons/mob/human_races/r_def_vox.dmi' default_language = "Vox-pidgin" @@ -324,6 +330,7 @@ /datum/species/vox/armalis name = "Vox Armalis" + name_plural = "Vox" icobase = 'icons/mob/human_races/r_armalis.dmi' deform = 'icons/mob/human_races/r_armalis.dmi' rarity_value = 10 @@ -364,6 +371,7 @@ /datum/species/diona name = "Diona" + name_plural = "Dionaea" icobase = 'icons/mob/human_races/r_diona.dmi' deform = 'icons/mob/human_races/r_def_plant.dmi' language = "Rootspeak" @@ -428,6 +436,8 @@ /datum/species/machine name = "Machine" + name_plural = "machines" + icobase = 'icons/mob/human_races/r_machine.dmi' deform = 'icons/mob/human_races/r_machine.dmi' language = "Tradeband" @@ -551,6 +561,7 @@ var/has_throw = 1 // Set to draw throw button. var/has_resist = 1 // Set to draw resist button. var/has_internals = 1 // Set to draw the internals toggle button. + var/list/equip_slots = list() // Checked by mob_can_equip(). // Contains information on the position and tag for all inventory slots // to be drawn for the mob. This is fairly delicate, try to avoid messing with it @@ -572,3 +583,18 @@ "storage2" = list("loc" = ui_storage2, "slot" = slot_r_store, "state" = "pocket"), "belt" = list("loc" = ui_belt, "slot" = slot_belt, "state" = "belt") ) + +/datum/hud_data/New() + ..() + for(var/slot in gear) + equip_slots |= gear[slot]["slot"] + + if(has_hands) + equip_slots |= slot_l_hand + equip_slots |= slot_r_hand + equip_slots |= slot_handcuffed + + if(slot_back in equip_slots) + equip_slots |= slot_in_backpack + + equip_slots |= slot_legcuffed \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index a49760a5279..f3a13b60355 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -177,6 +177,7 @@ var/global/list/damage_icon_parts = list() proc/get_damage_icon_part(damage_state, body_part) if(damage_icon_parts["[damage_state]/[body_part]"] == null) var/icon/DI = new /icon('icons/mob/dam_human.dmi', damage_state) // the damage icon for whole human + // TODO: Convert dam_human.dmi to greyscale and blend in species.blood_colour here. DI.Blend(new /icon('icons/mob/dam_mask.dmi', body_part), ICON_MULTIPLY) // mask with this organ's pixels damage_icon_parts["[damage_state]/[body_part]"] = DI return DI diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index a38ba9c6957..678eeccd6cd 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -94,7 +94,7 @@ ..() dna.mutantrace = "tajaran" - greaterform = "Tajaran" + greaterform = "Tajara" add_language("Siik'tajr") /mob/living/carbon/monkey/movement_delay() diff --git a/code/modules/mob/living/simple_animal/borer/borer_powers.dm b/code/modules/mob/living/simple_animal/borer/borer_powers.dm index 9f47dd6cf49..c07a105cbba 100644 --- a/code/modules/mob/living/simple_animal/borer/borer_powers.dm +++ b/code/modules/mob/living/simple_animal/borer/borer_powers.dm @@ -181,6 +181,9 @@ H.internal_organs_by_name["brain"] = B H.internal_organs |= B + var/datum/organ/external/affecting = H.get_organ("head") + affecting.implants -= src + var/s2h_id = src.computer_id var/s2h_ip= src.lastKnownIP src.computer_id = null diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 1e5906eaef4..3b231b751ee 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -496,7 +496,7 @@ name = "Shaved" icon_state = "bald" gender = NEUTER - species_allowed = list("Human","Unathi","Tajaran","Skrell","Vox","Machine") + species_allowed = list("Human","Unathi","Tajara","Skrell","Vox","Machine") watson name = "Watson Mustache" @@ -636,62 +636,62 @@ taj_ears name = "Tajaran Ears" icon_state = "ears_plain" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_clean name = "Tajara Clean" icon_state = "hair_clean" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_bangs name = "Tajara Bangs" icon_state = "hair_bangs" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_braid name = "Tajara Braid" icon_state = "hair_tbraid" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_shaggy name = "Tajara Shaggy" icon_state = "hair_shaggy" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_mohawk name = "Tajaran Mohawk" icon_state = "hair_mohawk" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_plait name = "Tajara Plait" icon_state = "hair_plait" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_straight name = "Tajara Straight" icon_state = "hair_straight" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_long name = "Tajara Long" icon_state = "hair_long" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_rattail name = "Tajara Rat Tail" icon_state = "hair_rattail" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_spiky name = "Tajara Spiky" icon_state = "hair_tajspiky" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_messy name = "Tajara Messy" icon_state = "hair_messy" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") vox_quills_short name = "Short Vox Quills" @@ -703,32 +703,32 @@ taj_sideburns name = "Tajara Sideburns" icon_state = "facial_mutton" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_mutton name = "Tajara Mutton" icon_state = "facial_mutton" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_pencilstache name = "Tajara Pencilstache" icon_state = "facial_pencilstache" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_moustache name = "Tajara Moustache" icon_state = "facial_moustache" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_goatee name = "Tajara Goatee" icon_state = "facial_goatee" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_smallstache name = "Tajara Smallsatche" icon_state = "facial_smallstache" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") //skin styles - WIP //going to have to re-integrate this with surgery @@ -750,7 +750,7 @@ name = "Default tajaran skin" icon_state = "default" icon = 'icons/mob/human_races/r_tajaran.dmi' - species_allowed = list("Tajaran") + species_allowed = list("Tajara") unathi name = "Default Unathi skin" diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index 45eb41585d8..9af498eea36 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -32,7 +32,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 if(B.id == "blood") B.data = list( "donor"=src,"viruses"=null,"species"=species.name,"blood_DNA"=dna.unique_enzymes,"blood_colour"= species.blood_color,"blood_type"=dna.b_type, \ "resistances"=null,"trace_chem"=null, "virus2" = null, "antibodies" = null) - B.color = B.data["blood_color"] + B.color = B.data["blood_colour"] // Takes care blood loss and regeneration /mob/living/carbon/human/proc/handle_blood() diff --git a/code/modules/organs/organ_alien.dm b/code/modules/organs/organ_alien.dm index 8ecb8bb6581..ae70f485d96 100644 --- a/code/modules/organs/organ_alien.dm +++ b/code/modules/organs/organ_alien.dm @@ -96,8 +96,8 @@ if(!istype(H)) return - var/datum/reagent/blood = H.vessel.reagent_list["blood"] - blood_splatter(H,blood,1) + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in H.vessel.reagent_list + blood_splatter(H,B,1) var/obj/effect/decal/cleanable/blood/splatter/goo = locate() in get_turf(owner) if(goo) goo.name = "husk ichor" @@ -170,27 +170,31 @@ name = "xeno organ" icon = 'icons/effects/blood.dmi' desc = "It smells like an accident in a chemical factory." - organ_tag = "special" //TODO functionality for transplants. /obj/item/organ/xenos/eggsac name = "egg sac" icon_state = "xgibmid1" + organ_tag = "egg sac" /obj/item/organ/xenos/plasmavessel name = "plasma vessel" - icon_state = "xgibdown" + icon_state = "xgibdown1" + organ_tag = "plasma vessel" /obj/item/organ/xenos/acidgland name = "acid gland" icon_state = "xgibtorso" + organ_tag = "acid gland" /obj/item/organ/xenos/hivenode name = "hive node" icon_state = "xgibmid2" + organ_tag = "hive node" /obj/item/organ/xenos/resinspinner name = "hive node" icon_state = "xgibmid2" + organ_tag = "resin spinner" //VOX ORGANS. /datum/organ/internal/stack diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index c4df67cc870..874bb936723 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -490,13 +490,18 @@ Note that amputating the affected organ does in fact remove the infection from t burn_dam = 0 status &= ~ORGAN_BLEEDING var/clamped = 0 + + var/mob/living/carbon/human/H + if(istype(owner,/mob/living/carbon/human)) + H = owner + for(var/datum/wound/W in wounds) if(W.damage_type == CUT || W.damage_type == BRUISE) brute_dam += W.damage else if(W.damage_type == BURN) burn_dam += W.damage - if(!(status & ORGAN_ROBOT) && W.bleeding()) + if(!(status & ORGAN_ROBOT) && W.bleeding() && (H && !(H.species.flags & NO_BLOOD))) W.bleed_timer-- status |= ORGAN_BLEEDING @@ -504,7 +509,7 @@ Note that amputating the affected organ does in fact remove the infection from t number_wounds += W.amount - if (open && !clamped) //things tend to bleed if they are CUT OPEN + if (open && !clamped && (H && !(H.species.flags & NO_BLOOD))) //things tend to bleed if they are CUT OPEN status |= ORGAN_BLEEDING diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index 5605f8c40f8..907d5fa1228 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -83,14 +83,15 @@ if(rejecting % 10 == 0) //Only fire every ten rejection ticks. switch(rejecting) if(1 to 50) - take_damage(rand(1,2)) + take_damage(1) if(51 to 200) - take_damage(rand(2,3)) - if(201 to 500) - take_damage(rand(3,4)) owner.reagents.add_reagent("toxin", 1) + take_damage(1) + if(201 to 500) + take_damage(rand(2,3)) + owner.reagents.add_reagent("toxin", 2) if(501 to INFINITY) - take_damage(5) + take_damage(4) owner.reagents.add_reagent("toxin", rand(3,5)) /datum/organ/internal/proc/take_damage(amount, var/silent=0) diff --git a/code/modules/organs/organ_objects.dm b/code/modules/organs/organ_objects.dm index ea49f7276ad..178958d9361 100644 --- a/code/modules/organs/organ_objects.dm +++ b/code/modules/organs/organ_objects.dm @@ -46,8 +46,8 @@ if(fresh && prob(40)) fresh-- - var/datum/reagent/blood = reagents.reagent_list["blood"] - blood_splatter(src,blood,1) + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in reagents.reagent_list + blood_splatter(src,B,1) health -= rand(1,3) if(health <= 0) @@ -215,8 +215,8 @@ return user << "\blue You take an experimental bite out of \the [src]." - var/datum/reagent/blood = reagents.reagent_list["blood"] - blood_splatter(src,blood,1) + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in reagents.reagent_list + blood_splatter(src,B,1) user.drop_from_inventory(src) diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index a05c6f120b2..238657c28da 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -52,7 +52,10 @@ "\blue You have made a bloodless incision on [target]'s [affected.display_name] with \the [tool].",) //Could be cleaner ... affected.open = 1 - affected.status |= ORGAN_BLEEDING + + if(istype(target) && !(target.species.flags & NO_BLOOD)) + affected.status |= ORGAN_BLEEDING + affected.createwound(CUT, 1) affected.clamp() spread_germs_to_organ(affected, user) @@ -89,7 +92,10 @@ user.visible_message("\blue [user] has constructed a prepared incision on and within [target]'s [affected.display_name] with \the [tool].", \ "\blue You have constructed a prepared incision on and within [target]'s [affected.display_name] with \the [tool].",) affected.open = 1 - affected.status |= ORGAN_BLEEDING + + if(istype(target) && !(target.species.flags & NO_BLOOD)) + affected.status |= ORGAN_BLEEDING + affected.createwound(CUT, 1) affected.clamp() affected.open = 2 @@ -128,7 +134,10 @@ user.visible_message("\blue [user] has made an incision on [target]'s [affected.display_name] with \the [tool].", \ "\blue You have made an incision on [target]'s [affected.display_name] with \the [tool].",) affected.open = 1 - affected.status |= ORGAN_BLEEDING + + if(istype(target) && !(target.species.flags & NO_BLOOD)) + affected.status |= ORGAN_BLEEDING + affected.createwound(CUT, 1) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index e2ad2be2104..b5fbb3ecb06 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -327,7 +327,7 @@ O.organ_data.rejecting = null // Transfer over some blood data, if the organ doesn't have data. - var/datum/reagent/blood/organ_blood = O.reagents.reagent_list["blood"] + var/datum/reagent/blood/organ_blood = locate(/datum/reagent/blood) in O.reagents.reagent_list if(!organ_blood || !organ_blood.data["blood_DNA"]) target.vessel.trans_to(O, 5, 1, 1) @@ -367,32 +367,32 @@ if(!target.species) user << "\red You have no idea what species this person is. Report this on the bug tracker." - return 0 + return 2 var/o_is = (O.gender == PLURAL) ? "are" : "is" - var/o_a = (O.gender == PLURAL) ? "" : " a" + var/o_a = (O.gender == PLURAL) ? "" : "a " var/o_do = (O.gender == PLURAL) ? "don't" : "doesn't" if(target.species.has_organ[O.organ_tag]) if(!O.health) user << "\red \The [O.organ_tag] [o_is] in no state to be transplanted." - return 0 + return 2 if(!target.internal_organs_by_name[O.organ_tag]) organ_missing = 1 else user << "\red \The [target] already has [o_a][O.organ_tag]." - return 0 + return 2 if(O.organ_data && affected.name == O.organ_data.parent_organ) organ_compatible = 1 else user << "\red \The [O.organ_tag] [o_do] normally go in \the [affected.display_name]." - return 0 + return 2 else - user << "\red \A [target.species.name] doesn't normally have [o_a][O.organ_tag]." - return 0 + user << "\red You're pretty sure [target.species.name_plural] don't normally have [o_a][O.organ_tag]." + return 2 return ..() && organ_missing && organ_compatible @@ -412,7 +412,7 @@ if(istype(O)) - var/datum/reagent/blood/transplant_blood = O.reagents.reagent_list["blood"] + var/datum/reagent/blood/transplant_blood = locate(/datum/reagent/blood) in O.reagents.reagent_list if(!transplant_blood) O.organ_data.transplant_data = list() O.organ_data.transplant_data["species"] = target.species.name diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 9ce44d12607..c5e883e79a4 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -77,21 +77,34 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user) E.germ_level = max(germ_level,E.germ_level) //as funny as scrubbing microbes out with clean gloves is - no. -proc/do_surgery(mob/living/M, mob/living/user, obj/item/tool) - if(!istype(M,/mob/living/carbon)) +proc/do_surgery(mob/living/carbon/M, mob/living/user, obj/item/tool) + if(!istype(M)) return 0 if (user.a_intent == "harm") //check for Hippocratic Oath return 0 + if(M.op_stage.in_progress) //Can't operate on someone repeatedly. + user << "\red You can't operate on the patient while surgery is already in progress." + return 1 + 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) && S.is_valid_target(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))) - S.end_step(user, M, user.zone_sel.selecting, tool) //finish successfully - else if (tool in user.contents && user.Adjacent(M)) //or - S.fail_step(user, M, user.zone_sel.selecting, tool) //malpractice~ - return 1 //don't want to do weapony things after surgery + if(S.tool_quality(tool)) + var/step_is_valid = S.can_use(user, M, user.zone_sel.selecting, tool) + if(step_is_valid && S.is_valid_target(M)) + if(step_is_valid == 2) // This is a failure that already has a message for failing. + return 1 + M.op_stage.in_progress = 1 + 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))) + S.end_step(user, M, user.zone_sel.selecting, tool) //finish successfully + else if (tool in user.contents && user.Adjacent(M)) //or + S.fail_step(user, M, user.zone_sel.selecting, tool) //malpractice~ + else // This failing silently was a pain. + user << "\red You must remain close to your patient to conduct surgery." + M.op_stage.in_progress = 0 // Clear the in-progress flag. + return 1 //don't want to do weapony things after surgery + if (user.a_intent == "help") user << "\red You can't see any useful way to use [tool] on [M]." return 1 @@ -116,6 +129,6 @@ proc/sort_surgeries() /datum/surgery_status/ var/eyes = 0 var/face = 0 - var/appendix = 0 var/head_reattach = 0 - var/current_organ + var/current_organ = "organ" + var/in_progress = 0 \ No newline at end of file diff --git a/code/modules/virus2/disease2.dm b/code/modules/virus2/disease2.dm index d21f8b72af4..977c9ab9cab 100644 --- a/code/modules/virus2/disease2.dm +++ b/code/modules/virus2/disease2.dm @@ -10,7 +10,7 @@ var/list/datum/disease2/effectholder/effects = list() var/antigen = 0 // 16 bits describing the antigens, when one bit is set, a cure with that bit can dock here var/max_stage = 4 - var/list/affected_species = list("Human","Unathi","Skrell","Tajaran") + var/list/affected_species = list("Human","Unathi","Skrell","Tajara") /datum/disease2/disease/New() uniqueID = rand(0,10000) diff --git a/icons/mob/alien.dmi b/icons/mob/alien.dmi index 2f31429878b..362dcc96ea2 100644 Binary files a/icons/mob/alien.dmi and b/icons/mob/alien.dmi differ