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