diff --git a/code/__defines/species_languages.dm b/code/__defines/species_languages.dm
index 4e5b6d6dfb0..7ad84b4a79d 100644
--- a/code/__defines/species_languages.dm
+++ b/code/__defines/species_languages.dm
@@ -52,4 +52,4 @@
#define INNATE 64 // All mobs can be assumed to speak and understand this language. (audible emotes)
#define NO_TALK_MSG 128 // Do not show the "\The [speaker] talks into \the [radio]" message
#define NO_STUTTER 256 // No stuttering, slurring, or other speech problems
-#define ALT_TRANSMIT 512 // Language is not based on vision or sound (Todo: add this into the say code and use it for the rootspeak languages)
\ No newline at end of file
+#define ALT_TRANSMIT 512 // Language is not based on vision or sound (Todo: add this into the say code and use it for the rootspeak languages)
diff --git a/code/_helpers/mobs.dm b/code/_helpers/mobs.dm
index 70456bee77f..d7fd20ac770 100644
--- a/code/_helpers/mobs.dm
+++ b/code/_helpers/mobs.dm
@@ -63,12 +63,12 @@ proc/random_facial_hair_style(gender, species = "Human")
return f_style
-proc/sanitize_name(name, species = "Human")
+proc/sanitize_name(name, species = "Human", robot = 0)
var/datum/species/current_species
if(species)
current_species = all_species[species]
- return current_species ? current_species.sanitize_name(name) : sanitizeName(name)
+ return current_species ? current_species.sanitize_name(name, robot) : sanitizeName(name, MAX_NAME_LEN, robot)
proc/random_name(gender, species = "Human")
diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm
index 68cb5276fad..bd175e4fcc2 100644
--- a/code/_helpers/text.dm
+++ b/code/_helpers/text.dm
@@ -85,7 +85,7 @@
// 0 .. 9
if(48 to 57) //Numbers
if(!last_char_group) continue //suppress at start of string
- if(!allow_numbers) continue
+ if(!allow_numbers) continue // If allow_numbers is 0, then don't do this.
output += ascii2text(ascii_char)
number_of_alphanumeric++
last_char_group = 3
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 5ecc707227c..12a05e6d3a4 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -290,19 +290,21 @@
/obj/item/weapon/module
icon = 'icons/obj/module.dmi'
icon_state = "std_module"
+ item_state = "std_mod"
w_class = ITEMSIZE_SMALL
- item_state = "electronic"
flags = CONDUCT
var/mtype = 1 // 1=electronic 2=hardware
/obj/item/weapon/module/card_reader
name = "card reader module"
icon_state = "card_mod"
+ item_state = "std_mod"
desc = "An electronic module for reading data and ID cards."
/obj/item/weapon/module/power_control
name = "power control module"
icon_state = "power_mod"
+ item_state = "std_mod"
desc = "Heavy-duty switching circuits for power control."
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
@@ -321,11 +323,13 @@
/obj/item/weapon/module/cell_power
name = "power cell regulator module"
icon_state = "power_mod"
+ item_state = "std_mod"
desc = "A converter and regulator allowing the use of power cells."
/obj/item/weapon/module/cell_power
name = "power cell charger module"
icon_state = "power_mod"
+ item_state = "std_mod"
desc = "Charging circuits for power cells."
diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm
index 63be38ba7d5..0784a1a9fc5 100644
--- a/code/game/jobs/job/captain.dm
+++ b/code/game/jobs/job/captain.dm
@@ -23,41 +23,41 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
ideal_character_age = 70 // Old geezer captains ftw
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/captain(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/cap(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/com(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/captain(H), slot_w_uniform)
- if(H.age>49)
- // Since we can have something other than the default uniform at this
- // point, check if we can actually attach the medal
- var/obj/item/clothing/uniform = H.w_uniform
- var/obj/item/clothing/accessory/medal/gold/captain/medal = new()
+/datum/job/captain/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(H), slot_l_ear)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/captain(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/cap(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/com(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/captain(H), slot_w_uniform)
+ if(H.age>49)
+ // Since we can have something other than the default uniform at this
+ // point, check if we can actually attach the medal
+ var/obj/item/clothing/uniform = H.w_uniform
+ var/obj/item/clothing/accessory/medal/gold/captain/medal = new()
- if(uniform && uniform.can_attach_accessory(medal))
- uniform.attach_accessory(null, medal)
- else
- qdel(medal)
- H.equip_to_slot_or_del(new /obj/item/device/pda/captain(H), slot_belt)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/clothing/head/caphat(H), slot_head)
- H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
- if(H.backbag == 1)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H), slot_l_hand)
+ if(uniform && uniform.can_attach_accessory(medal))
+ uniform.attach_accessory(null, medal)
else
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack)
+ qdel(medal)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/captain(H), slot_belt)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/clothing/head/caphat(H), slot_head)
+ H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H), slot_l_hand)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack)
- H.implant_loyalty()
+ H.implant_loyalty()
- return 1
+ return 1
- get_access()
- return get_all_station_access()
+/datum/job/captain/get_access()
+ return get_all_station_access()
@@ -95,22 +95,24 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
access_hop, access_RC_announce, access_keycard_auth, access_gateway)
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/hop(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_personnel(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/heads/hop(H), slot_belt)
- if(H.backbag == 1)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H), slot_l_hand)
- else
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack)
- H.implant_loyalty()
- return 1
+/datum/job/hop/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/hop(H), slot_l_ear)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_personnel(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/heads/hop(H), slot_belt)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H), slot_l_hand)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack)
+ H.implant_loyalty()
+ return 1
+
+
/datum/job/secretary
title = "Command Secretary"
@@ -131,7 +133,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
access = list(access_heads)
minimal_access = list(access_heads)
-/datum/job/secretary/equip(var/mob/living/carbon/human/H)
+/datum/job/secretary/equip(var/mob/living/carbon/human/H, var/alt_title)
if(!H) return 0
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_com(H), slot_l_ear)
switch(H.backbag)
diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm
index e4a42498d67..3a57b35f0a6 100644
--- a/code/game/jobs/job/civilian.dm
+++ b/code/game/jobs/job/civilian.dm
@@ -15,18 +15,18 @@
alt_titles = list("Barista")
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/bartender(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/device/pda/bar(H), slot_belt)
- return 1
+/datum/job/bartender/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/bartender(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/bar(H), slot_belt)
+ return 1
@@ -46,15 +46,15 @@
alt_titles = list("Cook")
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chef(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/chef(H), slot_wear_suit)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/clothing/head/chefhat(H), slot_head)
- H.equip_to_slot_or_del(new /obj/item/device/pda/chef(H), slot_belt)
- return 1
+/datum/job/chef/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chef(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/chef(H), slot_wear_suit)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/clothing/head/chefhat(H), slot_head)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/chef(H), slot_belt)
+ return 1
@@ -74,21 +74,21 @@
alt_titles = list("Hydroponicist")
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/hydroponics(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/clothing/gloves/botanic_leather(H), slot_gloves)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/apron(H), slot_wear_suit)
- H.equip_to_slot_or_del(new /obj/item/device/analyzer/plant_analyzer(H), slot_s_store)
- H.equip_to_slot_or_del(new /obj/item/device/pda/botanist(H), slot_belt)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/hydroponics(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/hyd(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/hyd(H), slot_back)
- return 1
+/datum/job/hydro/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/hydroponics(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/clothing/gloves/botanic_leather(H), slot_gloves)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/apron(H), slot_wear_suit)
+ H.equip_to_slot_or_del(new /obj/item/device/analyzer/plant_analyzer(H), slot_s_store)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/botanist(H), slot_belt)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/hydroponics(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/hyd(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/hyd(H), slot_back)
+ return 1
@@ -112,16 +112,16 @@
ideal_character_age = 40
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_cargo(H), slot_l_ear)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/cargo(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/quartermaster(H), slot_belt)
-// H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
- H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
- H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand)
- return 1
+/datum/job/qm/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_cargo(H), slot_l_ear)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/cargo(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/quartermaster(H), slot_belt)
+// H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
+ H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses)
+ H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand)
+ return 1
@@ -139,14 +139,14 @@
access = list(access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot, access_mining, access_mining_station)
minimal_access = list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting)
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_cargo(H), slot_l_ear)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/cargotech(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/cargo(H), slot_belt)
-// H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
- return 1
+/datum/job/cargo_tech/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_cargo(H), slot_l_ear)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/cargotech(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/cargo(H), slot_belt)
+// H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
+ return 1
@@ -166,27 +166,27 @@
minimal_access = list(access_mining, access_mining_station, access_mailsorting)
alt_titles = list("Drill Technician","Prospector")
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_cargo (H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/eng(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/engi(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/miner(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/device/pda/shaftminer(H), slot_belt)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
-// H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
- if(H.backbag == 1)
- H.equip_to_slot_or_del(new /obj/item/weapon/crowbar(H), slot_l_hand)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/bag/ore(H), slot_l_store)
- else
- H.equip_to_slot_or_del(new /obj/item/weapon/crowbar(H), slot_in_backpack)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/bag/ore(H), slot_in_backpack)
- return 1
+/datum/job/mining/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_cargo (H), slot_l_ear)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/eng(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/engi(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/miner(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/shaftminer(H), slot_belt)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
+// H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/crowbar(H), slot_l_hand)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/bag/ore(H), slot_l_store)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/crowbar(H), slot_in_backpack)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/bag/ore(H), slot_in_backpack)
+ return 1
- equip_survival(var/mob/living/carbon/human/H)
+/datum/job/mining/equip_survival(var/mob/living/carbon/human/H)
if(!H) return 0
H.species.equip_survival_gear(H,1)
return 1
@@ -207,13 +207,13 @@
alt_titles = list("Custodian", "Sanitation Technician")
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/janitor(H), slot_belt)
- return 1
+/datum/job/janitor/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/janitor(H), slot_belt)
+ return 1
@@ -234,13 +234,13 @@
alt_titles = list("Journalist", "Professor", "Historian", "Writer")
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/red(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/device/pda/librarian(H), slot_belt)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/weapon/barcodescanner(H), slot_l_hand)
- return 1
+/datum/job/librarian/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/red(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/librarian(H), slot_belt)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/weapon/barcodescanner(H), slot_l_hand)
+ return 1
@@ -261,22 +261,22 @@
minimal_access = list(access_lawyer, access_sec_doors, access_heads)
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/ia(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/internalaffairs(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/internalaffairs(H), slot_wear_suit)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/big(H), slot_glasses)
- H.equip_to_slot_or_del(new /obj/item/device/pda/lawyer(H), slot_belt)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase(H), slot_l_hand)
+/datum/job/lawyer/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/ia(H), slot_l_ear)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/internalaffairs(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/internalaffairs(H), slot_wear_suit)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/big(H), slot_glasses)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/lawyer(H), slot_belt)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase(H), slot_l_hand)
- H.implant_loyalty()
+ H.implant_loyalty()
- return 1
+ return 1
diff --git a/code/game/jobs/job/civilian_chaplain.dm b/code/game/jobs/job/civilian_chaplain.dm
index 26065fe1e9e..2533bb72043 100644
--- a/code/game/jobs/job/civilian_chaplain.dm
+++ b/code/game/jobs/job/civilian_chaplain.dm
@@ -15,146 +15,146 @@
alt_titles = list("Counselor")
- equip(var/mob/living/carbon/human/H, var/alt_title, var/ask_questions = TRUE)
- if(!H) return 0
+/datum/job/chaplain/equip(var/mob/living/carbon/human/H, var/alt_title, var/ask_questions = TRUE)
+ if(!H) return 0
- var/obj/item/weapon/storage/bible/B = new /obj/item/weapon/storage/bible(H) //BS12 EDIT
- H.equip_to_slot_or_del(B, slot_l_hand)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chaplain(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/device/pda/chaplain(H), slot_belt)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
- if(!ask_questions)
- return 1
-
-
- spawn(0)
- var/religion_name = "Christianity"
- var/new_religion = sanitize(input(H, "You are the crew services officer. Would you like to change your religion? Default is Christianity, in SPACE.", "Name change", religion_name), MAX_NAME_LEN)
-
- if (!new_religion)
- new_religion = religion_name
-
- switch(lowertext(new_religion))
- if("christianity")
- B.name = pick("The Holy Bible","The Dead Sea Scrolls")
- if("satanism")
- B.name = "The Unholy Bible"
- if("cthulu")
- B.name = "The Necronomicon"
- if("islam")
- B.name = "Quran"
- if("scientology")
- B.name = pick("The Biography of L. Ron Hubbard","Dianetics")
- if("chaos")
- B.name = "The Book of Lorgar"
- if("imperium")
- B.name = "Uplifting Primer"
- if("toolboxia")
- B.name = "Toolbox Manifesto"
- if("homosexuality")
- B.name = "Guys Gone Wild"
- //if("lol", "wtf", "gay", "penis", "ass", "poo", "badmin", "shitmin", "deadmin", "cock", "cocks")
- // B.name = pick("Woodys Got Wood: The Aftermath", "War of the Cocks", "Sweet Bro and Hella Jef: Expanded Edition")
- // H.setBrainLoss(100) // starts off retarded as fuck
- if("science")
- B.name = pick("Principle of Relativity", "Quantum Enigma: Physics Encounters Consciousness", "Programming the Universe", "Quantum Physics and Theology", "String Theory for Dummies", "How To: Build Your Own Warp Drive", "The Mysteries of Bluespace", "Playing God: Collector's Edition")
- else
- B.name = "The Holy Book of [new_religion]"
- feedback_set_details("religion_name","[new_religion]")
-
- spawn(1)
- var/deity_name = "Space Jesus"
- var/new_deity = sanitize(input(H, "Would you like to change your deity? Default is Space Jesus.", "Name change", deity_name), MAX_NAME_LEN)
-
- if ((length(new_deity) == 0) || (new_deity == "Space Jesus") )
- new_deity = deity_name
- B.deity_name = new_deity
-
- var/accepted = 0
- var/outoftime = 0
- spawn(200) // 20 seconds to choose
- outoftime = 1
- var/new_book_style = "Bible"
-
- while(!accepted)
- if(!B) break // prevents possible runtime errors
- new_book_style = input(H,"Which bible style would you like?") in list("Bible", "Koran", "Scrapbook", "Creeper", "White Bible", "Holy Light", "Athiest", "Tome", "The King in Yellow", "Ithaqua", "Scientology", "the bible melts", "Necronomicon")
- switch(new_book_style)
- if("Koran")
- B.icon_state = "koran"
- B.item_state = "koran"
- for(var/area/chapel/main/A in world)
- for(var/turf/T in A.contents)
- if(T.icon_state == "carpetsymbol")
- T.set_dir(4)
- if("Scrapbook")
- B.icon_state = "scrapbook"
- B.item_state = "scrapbook"
- if("Creeper")
- B.icon_state = "creeper"
- B.item_state = "syringe_kit"
- if("White Bible")
- B.icon_state = "white"
- B.item_state = "syringe_kit"
- if("Holy Light")
- B.icon_state = "holylight"
- B.item_state = "syringe_kit"
- if("Athiest")
- B.icon_state = "athiest"
- B.item_state = "syringe_kit"
- for(var/area/chapel/main/A in world)
- for(var/turf/T in A.contents)
- if(T.icon_state == "carpetsymbol")
- T.set_dir(10)
- if("Tome")
- B.icon_state = "tome"
- B.item_state = "syringe_kit"
- if("The King in Yellow")
- B.icon_state = "kingyellow"
- B.item_state = "kingyellow"
- if("Ithaqua")
- B.icon_state = "ithaqua"
- B.item_state = "ithaqua"
- if("Scientology")
- B.icon_state = "scientology"
- B.item_state = "scientology"
- for(var/area/chapel/main/A in world)
- for(var/turf/T in A.contents)
- if(T.icon_state == "carpetsymbol")
- T.set_dir(8)
- if("the bible melts")
- B.icon_state = "melted"
- B.item_state = "melted"
- if("Necronomicon")
- B.icon_state = "necronomicon"
- B.item_state = "necronomicon"
- else
- // if christian bible, revert to default
- B.icon_state = "bible"
- B.item_state = "bible"
- for(var/area/chapel/main/A in world)
- for(var/turf/T in A.contents)
- if(T.icon_state == "carpetsymbol")
- T.set_dir(2)
-
- H.update_inv_l_hand() // so that it updates the bible's item_state in his hand
-
- switch(input(H,"Look at your bible - is this what you want?") in list("Yes","No"))
- if("Yes")
- accepted = 1
- if("No")
- if(outoftime)
- H << "Welp, out of time, buddy. You're stuck. Next time choose faster."
- accepted = 1
-
- if(ticker)
- ticker.Bible_icon_state = B.icon_state
- ticker.Bible_item_state = B.item_state
- ticker.Bible_name = B.name
- ticker.Bible_deity_name = B.deity_name
- feedback_set_details("religion_deity","[new_deity]")
- feedback_set_details("religion_book","[new_book_style]")
+ var/obj/item/weapon/storage/bible/B = new /obj/item/weapon/storage/bible(H) //BS12 EDIT
+ H.equip_to_slot_or_del(B, slot_l_hand)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chaplain(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/chaplain(H), slot_belt)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
+ if(!ask_questions)
return 1
+
+ spawn(0)
+ var/religion_name = "Christianity"
+ var/new_religion = sanitize(input(H, "You are the crew services officer. Would you like to change your religion? Default is Christianity, in SPACE.", "Name change", religion_name), MAX_NAME_LEN)
+
+ if (!new_religion)
+ new_religion = religion_name
+
+ switch(lowertext(new_religion))
+ if("christianity")
+ B.name = pick("The Holy Bible","The Dead Sea Scrolls")
+ if("satanism")
+ B.name = "The Unholy Bible"
+ if("cthulu")
+ B.name = "The Necronomicon"
+ if("islam")
+ B.name = "Quran"
+ if("scientology")
+ B.name = pick("The Biography of L. Ron Hubbard","Dianetics")
+ if("chaos")
+ B.name = "The Book of Lorgar"
+ if("imperium")
+ B.name = "Uplifting Primer"
+ if("toolboxia")
+ B.name = "Toolbox Manifesto"
+ if("homosexuality")
+ B.name = "Guys Gone Wild"
+ //if("lol", "wtf", "gay", "penis", "ass", "poo", "badmin", "shitmin", "deadmin", "cock", "cocks")
+ // B.name = pick("Woodys Got Wood: The Aftermath", "War of the Cocks", "Sweet Bro and Hella Jef: Expanded Edition")
+ // H.setBrainLoss(100) // starts off retarded as fuck
+ if("science")
+ B.name = pick("Principle of Relativity", "Quantum Enigma: Physics Encounters Consciousness", "Programming the Universe", "Quantum Physics and Theology", "String Theory for Dummies", "How To: Build Your Own Warp Drive", "The Mysteries of Bluespace", "Playing God: Collector's Edition")
+ else
+ B.name = "The Holy Book of [new_religion]"
+ feedback_set_details("religion_name","[new_religion]")
+
+ spawn(1)
+ var/deity_name = "Space Jesus"
+ var/new_deity = sanitize(input(H, "Would you like to change your deity? Default is Space Jesus.", "Name change", deity_name), MAX_NAME_LEN)
+
+ if ((length(new_deity) == 0) || (new_deity == "Space Jesus") )
+ new_deity = deity_name
+ B.deity_name = new_deity
+
+ var/accepted = 0
+ var/outoftime = 0
+ spawn(200) // 20 seconds to choose
+ outoftime = 1
+ var/new_book_style = "Bible"
+
+ while(!accepted)
+ if(!B) break // prevents possible runtime errors
+ new_book_style = input(H,"Which bible style would you like?") in list("Bible", "Koran", "Scrapbook", "Creeper", "White Bible", "Holy Light", "Athiest", "Tome", "The King in Yellow", "Ithaqua", "Scientology", "the bible melts", "Necronomicon")
+ switch(new_book_style)
+ if("Koran")
+ B.icon_state = "koran"
+ B.item_state = "koran"
+ for(var/area/chapel/main/A in world)
+ for(var/turf/T in A.contents)
+ if(T.icon_state == "carpetsymbol")
+ T.set_dir(4)
+ if("Scrapbook")
+ B.icon_state = "scrapbook"
+ B.item_state = "scrapbook"
+ if("Creeper")
+ B.icon_state = "creeper"
+ B.item_state = "syringe_kit"
+ if("White Bible")
+ B.icon_state = "white"
+ B.item_state = "syringe_kit"
+ if("Holy Light")
+ B.icon_state = "holylight"
+ B.item_state = "syringe_kit"
+ if("Athiest")
+ B.icon_state = "athiest"
+ B.item_state = "syringe_kit"
+ for(var/area/chapel/main/A in world)
+ for(var/turf/T in A.contents)
+ if(T.icon_state == "carpetsymbol")
+ T.set_dir(10)
+ if("Tome")
+ B.icon_state = "tome"
+ B.item_state = "syringe_kit"
+ if("The King in Yellow")
+ B.icon_state = "kingyellow"
+ B.item_state = "kingyellow"
+ if("Ithaqua")
+ B.icon_state = "ithaqua"
+ B.item_state = "ithaqua"
+ if("Scientology")
+ B.icon_state = "scientology"
+ B.item_state = "scientology"
+ for(var/area/chapel/main/A in world)
+ for(var/turf/T in A.contents)
+ if(T.icon_state == "carpetsymbol")
+ T.set_dir(8)
+ if("the bible melts")
+ B.icon_state = "melted"
+ B.item_state = "melted"
+ if("Necronomicon")
+ B.icon_state = "necronomicon"
+ B.item_state = "necronomicon"
+ else
+ // if christian bible, revert to default
+ B.icon_state = "bible"
+ B.item_state = "bible"
+ for(var/area/chapel/main/A in world)
+ for(var/turf/T in A.contents)
+ if(T.icon_state == "carpetsymbol")
+ T.set_dir(2)
+
+ H.update_inv_l_hand() // so that it updates the bible's item_state in his hand
+
+ switch(input(H,"Look at your bible - is this what you want?") in list("Yes","No"))
+ if("Yes")
+ accepted = 1
+ if("No")
+ if(outoftime)
+ H << "Welp, out of time, buddy. You're stuck. Next time choose faster."
+ accepted = 1
+
+ if(ticker)
+ ticker.Bible_icon_state = B.icon_state
+ ticker.Bible_item_state = B.item_state
+ ticker.Bible_name = B.name
+ ticker.Bible_deity_name = B.deity_name
+ feedback_set_details("religion_deity","[new_deity]")
+ feedback_set_details("religion_book","[new_book_style]")
+ return 1
+
/datum/job/chaplain/equip_preview(var/mob/living/carbon/human/H, var/alt_title)
return equip(H, alt_title, FALSE)
diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm
index b9cc65dcdef..e8b24b04460 100644
--- a/code/game/jobs/job/engineering.dm
+++ b/code/game/jobs/job/engineering.dm
@@ -28,26 +28,26 @@
minimal_player_age = 7
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/ce(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/eng(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/engi(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_engineer(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/device/pda/heads/ce(H), slot_l_store)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots/workboots(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/white(H), slot_head)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
- H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
- return 1
+/datum/job/chief_engineer/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/ce(H), slot_l_ear)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/eng(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/engi(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_engineer(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/heads/ce(H), slot_l_store)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots/workboots(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat/white(H), slot_head)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
+ H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
+ return 1
- equip_survival(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.species.equip_survival_gear(H,1)
- return 1
+/datum/job/chief_engineer/equip_survival(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.species.equip_survival_gear(H,1)
+ return 1
/datum/job/engineer
@@ -67,26 +67,26 @@
alt_titles = list("Maintenance Technician","Engine Technician","Electrician")
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_eng(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/eng(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/engi(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots/workboots(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
- H.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat(H), slot_head)
- H.equip_to_slot_or_del(new /obj/item/device/t_scanner(H), slot_r_store)
- H.equip_to_slot_or_del(new /obj/item/device/pda/engineering(H), slot_l_store)
- return 1
+/datum/job/engineer/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_eng(H), slot_l_ear)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/eng(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/engi(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots/workboots(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
+ H.equip_to_slot_or_del(new /obj/item/clothing/head/hardhat(H), slot_head)
+ H.equip_to_slot_or_del(new /obj/item/device/t_scanner(H), slot_r_store)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/engineering(H), slot_l_store)
+ return 1
- equip_survival(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.species.equip_survival_gear(H,1)
- return 1
+/datum/job/engineer/equip_survival(var/mob/living/carbon/human/H)
+ if(!H) return 0
+ H.species.equip_survival_gear(H,1)
+ return 1
/datum/job/atmos
@@ -106,21 +106,21 @@
minimal_player_age = 3
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_eng(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/engi(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/atmospheric_technician(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots/workboots(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/atmos(H), slot_l_store)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/atmostech/(H), slot_belt)
- return 1
+/datum/job/atmos/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_eng(H), slot_l_ear)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/engi(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/atmospheric_technician(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots/workboots(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/atmos(H), slot_l_store)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/atmostech/(H), slot_belt)
+ return 1
- equip_survival(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.species.equip_survival_gear(H,1)
- return 1
+/datum/job/atmos/equip_survival(var/mob/living/carbon/human/H)
+ if(!H) return 0
+ H.species.equip_survival_gear(H,1)
+ return 1
diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm
index db8dd443cd3..589abbc0bc0 100644
--- a/code/game/jobs/job/medical.dm
+++ b/code/game/jobs/job/medical.dm
@@ -23,21 +23,21 @@
minimal_player_age = 10
ideal_character_age = 50
- equip(var/mob/living/carbon/human/H, var/alt_title)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/cmo(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/med(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/med(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_medical_officer(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/heads/cmo(H), slot_belt)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(H), slot_wear_suit)
- H.equip_to_slot_or_del(new /obj/item/device/healthanalyzer(H), slot_s_store)
- return 1
+/datum/job/cmo/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/cmo(H), slot_l_ear)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/med(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/med(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_medical_officer(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/heads/cmo(H), slot_belt)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(H), slot_wear_suit)
+ H.equip_to_slot_or_del(new /obj/item/device/healthanalyzer(H), slot_s_store)
+ return 1
/datum/job/doctor
title = "Medical Doctor"
@@ -55,50 +55,50 @@
minimal_access = list(access_medical, access_medical_equip, access_morgue, access_surgery, access_virology, access_eva)
alt_titles = list("Surgeon","Emergency Physician","Nurse","Virologist")
- equip(var/mob/living/carbon/human/H, var/alt_title)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand)
+/datum/job/doctor/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/med(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/med(H), slot_back)
+ if(has_alt_title(H, alt_title,"Emergency Physician"))
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/fr_jacket(H), slot_wear_suit)
+ else if(has_alt_title(H, alt_title,"Surgeon"))
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/blue(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
+ H.equip_to_slot_or_del(new /obj/item/clothing/head/surgery/blue(H), slot_head)
+ else if(has_alt_title(H, alt_title,"Virologist"))
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/virologist(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/virologist(H), slot_wear_suit)
+ H.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(H), slot_wear_mask)
switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/med(H), slot_back)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/virology(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/vir(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/med(H), slot_back)
- if(has_alt_title(H, alt_title,"Emergency Physician"))
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/fr_jacket(H), slot_wear_suit)
- else if(has_alt_title(H, alt_title,"Surgeon"))
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/blue(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
- H.equip_to_slot_or_del(new /obj/item/clothing/head/surgery/blue(H), slot_head)
- else if(has_alt_title(H, alt_title,"Virologist"))
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/virologist(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/virologist(H), slot_wear_suit)
- H.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(H), slot_wear_mask)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/virology(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/vir(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/viro(H), slot_back)
- else if(has_alt_title(H, alt_title,"Medical Doctor"))
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
- else if(has_alt_title(H, alt_title,"Nurse"))
- if(H.gender == FEMALE)
- if(prob(50))
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/nursesuit(H), slot_w_uniform)
- else
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/nurse(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/head/nursehat(H), slot_head)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/viro(H), slot_back)
+ else if(has_alt_title(H, alt_title,"Medical Doctor"))
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
+ else if(has_alt_title(H, alt_title,"Nurse"))
+ if(H.gender == FEMALE)
+ if(prob(50))
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/nursesuit(H), slot_w_uniform)
else
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/purple(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/nurse(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/head/nursehat(H), slot_head)
else
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
- H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_belt)
- H.equip_to_slot_or_del(new /obj/item/device/healthanalyzer(H), slot_s_store)
- return 1
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/purple(H), slot_w_uniform)
+ else
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_belt)
+ H.equip_to_slot_or_del(new /obj/item/device/healthanalyzer(H), slot_s_store)
+ return 1
@@ -121,19 +121,19 @@
minimal_player_age = 3
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chemist(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/chemist(H), slot_belt)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/chemistry(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/chem(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/chem(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(H), slot_wear_suit)
- return 1
+/datum/job/chemist/equip(var/mob/living/carbon/human/H)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chemist(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/chemist(H), slot_belt)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/chemistry(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/chem(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/chem(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(H), slot_wear_suit)
+ return 1
/* I'm commenting out Geneticist so you can't actually see it in the job menu, given that you can't play as one - Jon.
@@ -151,19 +151,19 @@
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_research)
minimal_access = list(access_medical, access_morgue, access_genetics, access_research)
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_medsci(H), slot_l_ear)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/geneticist(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/geneticist(H), slot_belt)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/genetics(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/gen(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(H), slot_wear_suit)
- H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
- return 1
+/datum/job/geneticist/equip(var/mob/living/carbon/human/H)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_medsci(H), slot_l_ear)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/geneticist(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/geneticist(H), slot_belt)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/genetics(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/gen(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(H), slot_wear_suit)
+ H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
+ return 1
*/
/datum/job/psychiatrist
@@ -182,23 +182,23 @@
minimal_access = list(access_medical, access_medical_equip, access_psychiatrist)
alt_titles = list("Psychologist")
- equip(var/mob/living/carbon/human/H, var/alt_title)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
- if(has_alt_title(H, alt_title,"Psychiatrist"))
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/psych(H), slot_w_uniform)
- else if(has_alt_title(H, alt_title,"Psychologist"))
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/psych/turtleneck(H), slot_w_uniform)
- else
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_belt)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
+/datum/job/psychiatrist/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
+ if(has_alt_title(H, alt_title,"Psychiatrist"))
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/psych(H), slot_w_uniform)
+ else if(has_alt_title(H, alt_title,"Psychologist"))
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/psych/turtleneck(H), slot_w_uniform)
+ else
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_belt)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
/datum/job/Paramedic
@@ -217,29 +217,29 @@
minimal_access = list(access_medical, access_medical_equip, access_morgue, access_eva, access_maint_tunnels, access_external_airlocks)
alt_titles = list("Emergency Medical Technician")
- equip(var/mob/living/carbon/human/H, var/alt_title)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots/jackboots(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/med(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/med(H), slot_back)
- if(has_alt_title(H, alt_title,"Emergency Medical Technician"))
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/paramedic(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/fr_jacket(H), slot_wear_suit)
- else if(has_alt_title(H, alt_title,"Paramedic"))
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/black(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/fr_jacket(H), slot_wear_suit)
- else
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/medical/emt(H), slot_belt)
- H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_l_store)
- return 1
+/datum/job/Paramedic/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots/jackboots(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/med(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/med(H), slot_back)
+ if(has_alt_title(H, alt_title,"Emergency Medical Technician"))
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/paramedic(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/fr_jacket(H), slot_wear_suit)
+ else if(has_alt_title(H, alt_title,"Paramedic"))
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/black(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/fr_jacket(H), slot_wear_suit)
+ else
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/medical/emt(H), slot_belt)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_l_store)
+ return 1
- equip_survival(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.species.equip_survival_gear(H,1)
- return 1
+/datum/job/Paramedic/equip_survival(var/mob/living/carbon/human/H)
+ if(!H) return 0
+ H.species.equip_survival_gear(H,1)
+ return 1
diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm
index 7cfc8b85800..01ea140c10c 100644
--- a/code/game/jobs/job/science.dm
+++ b/code/game/jobs/job/science.dm
@@ -26,20 +26,20 @@
minimal_player_age = 14
ideal_character_age = 50
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/rd(H), slot_l_ear)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/research_director(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/device/pda/heads/rd(H), slot_belt)
- H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/tox(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/tox(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
- return 1
+/datum/job/rd/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/rd(H), slot_l_ear)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/research_director(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/heads/rd(H), slot_belt)
+ H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/tox(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/tox(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
+ return 1
@@ -61,19 +61,19 @@
minimal_player_age = 14
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sci(H), slot_l_ear)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/scientist(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/science(H), slot_belt)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/tox(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/tox(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/science(H), slot_wear_suit)
- return 1
+/datum/job/scientist/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sci(H), slot_l_ear)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/scientist(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/science(H), slot_belt)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/tox(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/tox(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/science(H), slot_wear_suit)
+ return 1
/datum/job/xenobiologist
title = "Xenobiologist"
@@ -93,19 +93,19 @@
minimal_player_age = 14
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sci(H), slot_l_ear)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/scientist(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/science(H), slot_belt)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/tox(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/tox(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/science(H), slot_wear_suit)
- return 1
+/datum/job/xenobiologist/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sci(H), slot_l_ear)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/scientist(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/science(H), slot_belt)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/tox(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/tox(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/science(H), slot_wear_suit)
+ return 1
/datum/job/roboticist
title = "Roboticist"
@@ -125,14 +125,14 @@
minimal_player_age = 7
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sci(H), slot_l_ear)
- if(H.backbag == 2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(H.backbag == 3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/roboticist(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/roboticist(H), slot_r_store)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
- return 1
+/datum/job/roboticist/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sci(H), slot_l_ear)
+ if(H.backbag == 2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
+ if(H.backbag == 3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/roboticist(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/roboticist(H), slot_r_store)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt)
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
+ return 1
diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm
index 8d9da09cbe1..f7753efc87c 100644
--- a/code/game/jobs/job/security.dm
+++ b/code/game/jobs/job/security.dm
@@ -20,30 +20,30 @@
access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers,
access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting,
access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_external_airlocks)
- alt_titles = list("Commander")
+ alt_titles = list("Commander", "Chief of Security")
minimum_character_age = 25
minimal_player_age = 14
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/sec(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/sec(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/hos(H), slot_l_ear)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_security(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots/jackboots(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/heads/hos(H), slot_belt)
- H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
-// H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(H), slot_wear_mask) //Grab one from the armory you donk
- H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud(H), slot_glasses)
- if(H.backbag == 1)
- H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_l_store)
- else
- H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
- H.implant_loyalty()
- return 1
+/datum/job/hos/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/sec(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/sec(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/hos(H), slot_l_ear)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_security(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots/jackboots(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/heads/hos(H), slot_belt)
+ H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
+// H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(H), slot_wear_mask) //Grab one from the armory you donk
+ H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud(H), slot_glasses)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_l_store)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
+ H.implant_loyalty()
+ return 1
@@ -63,26 +63,26 @@
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_external_airlocks)
minimal_player_age = 5
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/sec(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/sec(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/warden(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots/jackboots(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/warden(H), slot_belt)
- H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
- H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud(H), slot_glasses)
-// H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(H), slot_wear_mask) //Grab one from the armory you donk
- H.equip_to_slot_or_del(new /obj/item/device/flash(H), slot_l_store)
- if(H.backbag == 1)
- H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_l_hand)
- else
- H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
- return 1
+/datum/job/warden/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_l_ear)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/sec(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/sec(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/warden(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots/jackboots(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/warden(H), slot_belt)
+ H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
+ H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud(H), slot_glasses)
+// H.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(H), slot_wear_mask) //Grab one from the armory you donk
+ H.equip_to_slot_or_del(new /obj/item/device/flash(H), slot_l_store)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_l_hand)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
+ return 1
@@ -102,31 +102,32 @@
minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_eva, access_external_airlocks)
economic_modifier = 5
minimal_player_age = 3
- equip(var/mob/living/carbon/human/H, var/alt_title)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/det(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/detective(H), slot_belt)
- H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
- H.equip_to_slot_or_del(new /obj/item/weapon/flame/lighter/zippo(H), slot_l_store)
- if(H.backbag == 1)//Why cant some of these things spawn in his office?
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_l_hand)
- else
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_in_backpack)
- if(has_alt_title(H, alt_title,"Forensic Technician"))
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/forensics/blue(H), slot_wear_suit)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase/crimekit, slot_r_hand)
- else
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/det_trench(H), slot_wear_suit)
- H.equip_to_slot_or_del(new /obj/item/clothing/head/det(H), slot_head)
- H.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase/crimekit(H), slot_r_hand)
- return 1
+
+/datum/job/detective/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_l_ear)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/det(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/detective(H), slot_belt)
+ H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
+ H.equip_to_slot_or_del(new /obj/item/weapon/flame/lighter/zippo(H), slot_l_store)
+ if(H.backbag == 1)//Why cant some of these things spawn in his office?
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_l_hand)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_in_backpack)
+ if(has_alt_title(H, alt_title,"Forensic Technician"))
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/forensics/blue(H), slot_wear_suit)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase/crimekit, slot_r_hand)
+ else
+ H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/det_trench(H), slot_wear_suit)
+ H.equip_to_slot_or_del(new /obj/item/clothing/head/det(H), slot_head)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/briefcase/crimekit(H), slot_r_hand)
+ return 1
@@ -146,22 +147,23 @@
access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_morgue, access_external_airlocks)
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_external_airlocks)
minimal_player_age = 3
- equip(var/mob/living/carbon/human/H)
- if(!H) return 0
- H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_l_ear)
- switch(H.backbag)
- if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back)
- if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/sec(H), slot_back)
- if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
- if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/sec(H), slot_back)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots/jackboots(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/device/pda/security(H), slot_belt)
- H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
- H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_s_store)
- H.equip_to_slot_or_del(new /obj/item/device/flash(H), slot_l_store)
- if(H.backbag == 1)
- H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_l_hand)
- else
- H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
- return 1
+
+/datum/job/officer/equip(var/mob/living/carbon/human/H, var/alt_title)
+ if(!H) return 0
+ H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_l_ear)
+ switch(H.backbag)
+ if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back)
+ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/sec(H), slot_back)
+ if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
+ if(5) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger/sec(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security(H), slot_w_uniform)
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/boots/jackboots(H), slot_shoes)
+ H.equip_to_slot_or_del(new /obj/item/device/pda/security(H), slot_belt)
+ H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
+ H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_s_store)
+ H.equip_to_slot_or_del(new /obj/item/device/flash(H), slot_l_store)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_l_hand)
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/handcuffs(H), slot_in_backpack)
+ return 1
diff --git a/code/game/objects/items/devices/translator.dm b/code/game/objects/items/devices/translator.dm
index 0bb26b32bc7..90fb43724ed 100644
--- a/code/game/objects/items/devices/translator.dm
+++ b/code/game/objects/items/devices/translator.dm
@@ -16,7 +16,8 @@
if(!listening) //Turning ON
langset = input(user,"Translate to which of your languages?","Language Selection") as null|anything in user.languages
if(langset)
- if(langset && ((langset.flags & NONVERBAL) || (langset.flags & HIVEMIND)))
+ if(langset && ((langset.flags & NONVERBAL) || (langset.flags & HIVEMIND) || (!langset.machine_understands)))
+ //Nonverbal means no spoken words to translate, so I didn't see the need to remove it.
to_chat(user, "\The [src] cannot output that language.")
return
else
@@ -49,6 +50,9 @@
if (language && (language.flags & NONVERBAL))
return //Not gonna translate sign language
+ if (!language.machine_understands)
+ return //Any other languages that it can't translate.
+
if (visual && ((L.sdisabilities & BLIND) || L.eye_blind))
return //Can't see the screen, don't get the message
diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm
index da2b23e0e32..7680231428f 100644
--- a/code/game/objects/items/stacks/nanopaste.dm
+++ b/code/game/objects/items/stacks/nanopaste.dm
@@ -6,7 +6,7 @@
icon_state = "tube"
origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3)
amount = 10
-
+ w_class = ITEMSIZE_SMALL
/obj/item/stack/nanopaste/attack(mob/living/M as mob, mob/user as mob)
if (!istype(M) || !istype(user))
diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm
index 9684bba4dbe..c5e6614de25 100755
--- a/code/game/objects/items/weapons/AI_modules.dm
+++ b/code/game/objects/items/weapons/AI_modules.dm
@@ -10,7 +10,6 @@ AI MODULES
name = "\improper AI module"
icon = 'icons/obj/module.dmi'
icon_state = "std_mod"
- item_state = "electronic"
desc = "An AI Module for transmitting encrypted instructions to the AI."
flags = CONDUCT
force = 5.0
diff --git a/code/game/objects/items/weapons/towels.dm b/code/game/objects/items/weapons/towels.dm
index 5f66562c61e..0c433a63a04 100644
--- a/code/game/objects/items/weapons/towels.dm
+++ b/code/game/objects/items/weapons/towels.dm
@@ -12,6 +12,10 @@
/obj/item/weapon/towel/attack_self(mob/living/user as mob)
user.visible_message(text("[] uses [] to towel themselves off.", user, src))
playsound(user, 'sound/weapons/towelwipe.ogg', 25, 1)
+ if(user.fire_stacks > 0)
+ user.fire_stacks = (max(0, user.fire_stacks - 1.5))
+ else if(user.fire_stacks < 0)
+ user.fire_stacks = (min(0, user.fire_stacks + 1.5))
/obj/item/weapon/towel/random/New()
..()
diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm
index 0d8a94944d8..bd23290e301 100644
--- a/code/game/objects/structures/janicart.dm
+++ b/code/game/objects/structures/janicart.dm
@@ -4,7 +4,8 @@
icon = 'icons/obj/janitor.dmi'
icon_state = "cart"
anchored = 0
- density = 1
+ density = 1
+ climbable = 1
flags = OPENCONTAINER
//copypaste sorry
var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm
index db234a1a2e8..5e0c0d5abb5 100644
--- a/code/game/objects/structures/mop_bucket.dm
+++ b/code/game/objects/structures/mop_bucket.dm
@@ -4,6 +4,7 @@
icon = 'icons/obj/janitor.dmi'
icon_state = "mopbucket"
density = 1
+ climbable = 1
w_class = ITEMSIZE_NORMAL
pressure_resistance = 5
flags = OPENCONTAINER
diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm
index 793df9dc436..fa6dec5715b 100644
--- a/code/game/verbs/ooc.dm
+++ b/code/game/verbs/ooc.dm
@@ -37,7 +37,8 @@
log_ooc("[mob.name]/[key] : [msg]")
- handle_spam_prevention(MUTE_OOC)
+ if(msg)
+ handle_spam_prevention(MUTE_OOC)
var/ooc_style = "everyone"
if(holder && !holder.fakekey)
@@ -107,7 +108,8 @@
log_ooc("(LOCAL) [mob.name]/[key] : [msg]")
- handle_spam_prevention(MUTE_OOC)
+ if(msg)
+ handle_spam_prevention(MUTE_OOC)
var/mob/source = mob.get_looc_source()
var/turf/T = get_turf(source)
diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm
index 90d9c9d275c..753094debaf 100644
--- a/code/modules/admin/verbs/adminhelp.dm
+++ b/code/modules/admin/verbs/adminhelp.dm
@@ -17,7 +17,8 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
adminhelped = 1 //Determines if they get the message to reply by clicking the name.
- handle_spam_prevention(MUTE_ADMINHELP)
+ if(msg)
+ handle_spam_prevention(MUTE_ADMINHELP)
//clean the input msg
if(!msg)
diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm
index c5eb60a94b2..9fcb8347741 100644
--- a/code/modules/admin/verbs/pray.dm
+++ b/code/modules/admin/verbs/pray.dm
@@ -10,10 +10,11 @@
if(!msg) return
if(usr.client)
- client.handle_spam_prevention(MUTE_PRAY)
- if(usr.client.prefs.muted & MUTE_PRAY)
- usr << "\red You cannot pray (muted)."
- return
+ if(msg)
+ client.handle_spam_prevention(MUTE_PRAY)
+ if(usr.client.prefs.muted & MUTE_PRAY)
+ usr << "\red You cannot pray (muted)."
+ return
var/image/cross = image('icons/obj/storage.dmi',"bible")
msg = "\blue \icon[cross] PRAY: [key_name(src, 1)] (?) (PP) (VV) (SM) ([admin_jump_link(src, src)]) (CA) (SC): [msg]"
diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm
index 23b42457508..d991cd48250 100644
--- a/code/modules/client/preference_setup/general/01_basic.dm
+++ b/code/modules/client/preference_setup/general/01_basic.dm
@@ -32,7 +32,7 @@ datum/preferences/proc/set_biological_gender(var/gender)
pref.age = sanitize_integer(pref.age, get_min_age(), get_max_age(), initial(pref.age))
pref.biological_gender = sanitize_inlist(pref.biological_gender, get_genders(), pick(get_genders()))
pref.identifying_gender = (pref.identifying_gender in all_genders_define_list) ? pref.identifying_gender : pref.biological_gender
- pref.real_name = sanitize_name(pref.real_name, pref.species)
+ pref.real_name = sanitize_name(pref.real_name, pref.species, is_FBP())
if(!pref.real_name)
pref.real_name = random_name(pref.identifying_gender, pref.species)
pref.spawnpoint = sanitize_inlist(pref.spawnpoint, spawntypes, initial(pref.spawnpoint))
@@ -76,7 +76,7 @@ datum/preferences/proc/set_biological_gender(var/gender)
if(href_list["rename"])
var/raw_name = input(user, "Choose your character's name:", "Character Name") as text|null
if (!isnull(raw_name) && CanUseTopic(user))
- var/new_name = sanitize_name(raw_name, pref.species)
+ var/new_name = sanitize_name(raw_name, pref.species, is_FBP())
if(new_name)
pref.real_name = new_name
return TOPIC_REFRESH
diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm
index 36112423fcc..e9ec0caf9dd 100644
--- a/code/modules/client/preference_setup/general/03_body.dm
+++ b/code/modules/client/preference_setup/general/03_body.dm
@@ -671,6 +671,11 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
while(null in pref.rlimb_data)
pref.rlimb_data -= null
+ // Sanitize the name so that there aren't any numbers sticking around.
+ pref.real_name = sanitize_name(pref.real_name, pref.species)
+ if(!pref.real_name)
+ pref.real_name = random_name(pref.identifying_gender, pref.species)
+
/datum/category_item/player_setup_item/general/body/proc/SetSpecies(mob/user)
if(!pref.species_preview || !(pref.species_preview in all_species))
pref.species_preview = "Human"
diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm
index 4d348c8d715..45f4c11cdeb 100644
--- a/code/modules/mob/dead/observer/say.dm
+++ b/code/modules/mob/dead/observer/say.dm
@@ -7,10 +7,11 @@
log_say("Ghost/[src.key] : [message]")
if (src.client)
- client.handle_spam_prevention(MUTE_DEADCHAT)
- if(src.client.prefs.muted & MUTE_DEADCHAT)
- src << "\red You cannot talk in deadchat (muted)."
- return
+ if(message)
+ client.handle_spam_prevention(MUTE_DEADCHAT)
+ if(src.client.prefs.muted & MUTE_DEADCHAT)
+ src << "\red You cannot talk in deadchat (muted)."
+ return
. = src.say_dead(message)
@@ -27,10 +28,11 @@
log_emote("Ghost/[src.key] : [message]")
if(src.client)
- client.handle_spam_prevention(MUTE_DEADCHAT)
- if(src.client.prefs.muted & MUTE_DEADCHAT)
- src << "\red You cannot emote in deadchat (muted)."
- return
+ if(message)
+ client.handle_spam_prevention(MUTE_DEADCHAT)
+ if(src.client.prefs.muted & MUTE_DEADCHAT)
+ src << "\red You cannot emote in deadchat (muted)."
+ return
. = src.emote_dead(message)
diff --git a/code/modules/mob/language/monkey.dm b/code/modules/mob/language/monkey.dm
index ce276a358ab..c6024d346b7 100644
--- a/code/modules/mob/language/monkey.dm
+++ b/code/modules/mob/language/monkey.dm
@@ -5,18 +5,70 @@
ask_verb = "chimpers"
exclaim_verb = "screeches"
key = "6"
+ machine_understands = 0
/datum/language/skrell/monkey
name = "Neaera"
desc = "Squik squik squik."
key = "8"
+ machine_understands = 0
/datum/language/unathi/monkey
name = "Stok"
desc = "Hiss hiss hiss."
key = "7"
+ machine_understands = 0
/datum/language/tajaran/monkey
name = "Farwa"
desc = "Meow meow meow."
key = "9"
+ machine_understands = 0
+
+/datum/language/corgi
+ name = "Dog"
+ desc = "Woof woof woof."
+ speech_verb = "barks"
+ ask_verb = "woofs"
+ exclaim_verb = "howls"
+ key = "n"
+ flags = RESTRICTED
+ machine_understands = 0
+ space_chance = 100
+ syllables = list("bark", "woof", "bowwow", "yap", "arf")
+
+/datum/language/cat
+ name = "Cat"
+ desc = "Meow meow meow."
+ speech_verb = "meows"
+ ask_verb = "mrowls"
+ exclaim_verb = "yowls"
+ key = "c"
+ flags = RESTRICTED
+ machine_understands = 0
+ space_chance = 100
+ syllables = list("meow", "mrowl", "purr", "meow", "meow", "meow")
+
+/datum/language/mouse
+ name = "Mouse"
+ desc = "Squeak squeak. *Nibbles on cheese*"
+ speech_verb = "squeaks"
+ ask_verb = "squeaks"
+ exclaim_verb = "squeaks"
+ key = "m"
+ flags = RESTRICTED
+ machine_understands = 0
+ space_chance = 100
+ syllables = list("squeak") // , "gripes", "oi", "meow")
+
+/datum/language/bird
+ name = "Bird"
+ desc = "Chirp chirp, give me food"
+ speech_verb = "chirps"
+ ask_verb = "tweets"
+ exclaim_verb = "squawks"
+ key = "m"
+ flags = RESTRICTED
+ machine_understands = 0
+ space_chance = 100
+ syllables = list("chirp", "squawk", "tweet")
\ No newline at end of file
diff --git a/code/modules/mob/language/outsider.dm b/code/modules/mob/language/outsider.dm
index 8c174a2ff74..3e85f4efece 100644
--- a/code/modules/mob/language/outsider.dm
+++ b/code/modules/mob/language/outsider.dm
@@ -4,6 +4,7 @@
speech_verb = "says"
colour = "changeling"
key = "g"
+ machine_understands = 0
flags = RESTRICTED | HIVEMIND
/datum/language/ling/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
@@ -21,6 +22,7 @@
exclaim_verb = "sings"
colour = "alien"
key = "x"
+ machine_understands = 0
flags = RESTRICTED | HIVEMIND
/datum/language/corticalborer/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
@@ -80,4 +82,5 @@
exclaim_verb = "chants"
colour = "cult"
key = "y"
+ machine_understands = 0
flags = RESTRICTED | HIVEMIND
diff --git a/code/modules/mob/language/station.dm b/code/modules/mob/language/station.dm
index 8e2f2987c9e..85942fcb4e9 100644
--- a/code/modules/mob/language/station.dm
+++ b/code/modules/mob/language/station.dm
@@ -6,6 +6,7 @@
exclaim_verb = "rustles"
colour = "soghun"
key = "q"
+ machine_understands = 0
flags = RESTRICTED
syllables = list("hs","zt","kr","st","sh")
@@ -18,6 +19,7 @@
name = LANGUAGE_ROOTGLOBAL
desc = "A complex language known instinctively by Dionaea, 'spoken' by emitting modulated radio waves. This version uses low frequency waves for slow communication at long ranges."
key = "w"
+ machine_understands = 0
flags = RESTRICTED | HIVEMIND
/datum/language/unathi
diff --git a/code/modules/mob/language/synthetic.dm b/code/modules/mob/language/synthetic.dm
index 2a2ddb0ff97..36dd57bc692 100644
--- a/code/modules/mob/language/synthetic.dm
+++ b/code/modules/mob/language/synthetic.dm
@@ -6,6 +6,7 @@
ask_verb = "queries"
exclaim_verb = "declares"
key = "b"
+ machine_understands = 0
flags = RESTRICTED | HIVEMIND
var/drone_only
@@ -64,5 +65,6 @@
exclaim_verb = "transmits"
colour = "say_quote"
key = "d"
+ machine_understands = 0
flags = RESTRICTED | HIVEMIND
drone_only = 1
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index ff16d332fee..b63e6257038 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -194,8 +194,8 @@
inherent_verbs = list()
inherent_verbs |= /mob/living/carbon/human/proc/regurgitate
-/datum/species/proc/sanitize_name(var/name)
- return sanitizeName(name)
+/datum/species/proc/sanitize_name(var/name, var/robot = 0)
+ return sanitizeName(name, MAX_NAME_LEN, robot)
/datum/species/proc/equip_survival_gear(var/mob/living/carbon/human/H,var/extendedtank = 1)
var/boxtype = /obj/item/weapon/storage/box/survival //Default survival box
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index fd4f706b153..1aef4eca81e 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -133,10 +133,11 @@ proc/get_radio_key_from_channel(var/channel)
/mob/living/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0)
//If you're muted for IC chat
if(client)
- client.handle_spam_prevention(MUTE_IC)
- if((client.prefs.muted & MUTE_IC) || say_disabled)
- src << "You cannot speak in IC (Muted)."
- return
+ if(message)
+ client.handle_spam_prevention(MUTE_IC)
+ if((client.prefs.muted & MUTE_IC) || say_disabled)
+ src << "You cannot speak in IC (Muted)."
+ return
//Redirect to say_dead if talker is dead
if(stat)
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index ccfd19e8aa7..795e535ebfd 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -18,7 +18,7 @@ var/global/list/robot_modules = list(
icon = 'icons/obj/module.dmi'
icon_state = "std_module"
w_class = ITEMSIZE_NO_CONTAINER
- item_state = "electronic"
+ item_state = "std_mod"
flags = CONDUCT
var/hide_on_manifest = 0
var/channels = list()
diff --git a/code/modules/mob/living/simple_animal/animals/bat.dm b/code/modules/mob/living/simple_animal/animals/bat.dm
index d7ed8e5f403..1d722c0b8a6 100644
--- a/code/modules/mob/living/simple_animal/animals/bat.dm
+++ b/code/modules/mob/living/simple_animal/animals/bat.dm
@@ -36,6 +36,8 @@
max_n2 = 0
minbodytemp = 0
+ has_langs = list("Mouse")
+
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
var/mob/living/owner
diff --git a/code/modules/mob/living/simple_animal/animals/cat.dm b/code/modules/mob/living/simple_animal/animals/cat.dm
index 808ebdb8fa6..9b3df512470 100644
--- a/code/modules/mob/living/simple_animal/animals/cat.dm
+++ b/code/modules/mob/living/simple_animal/animals/cat.dm
@@ -27,6 +27,7 @@
holder_type = /obj/item/weapon/holder/cat
mob_size = MOB_SMALL
+ has_langs = list("Cat")
speak_chance = 1
speak = list("Meow!","Esp!","Purr!","HSSSSS")
speak_emote = list("purrs", "meows")
diff --git a/code/modules/mob/living/simple_animal/animals/corgi.dm b/code/modules/mob/living/simple_animal/animals/corgi.dm
index 8f4adf8e540..11b2302aaa4 100644
--- a/code/modules/mob/living/simple_animal/animals/corgi.dm
+++ b/code/modules/mob/living/simple_animal/animals/corgi.dm
@@ -17,6 +17,7 @@
see_in_dark = 5
mob_size = 8
+ has_langs = list("Dog")
speak_chance = 1
speak = list("YAP", "Woof!", "Bark!", "AUUUUUU")
speak_emote = list("barks", "woofs")
diff --git a/code/modules/mob/living/simple_animal/animals/farm_animals.dm b/code/modules/mob/living/simple_animal/animals/farm_animals.dm
index fc21fbddfde..e65654cdadd 100644
--- a/code/modules/mob/living/simple_animal/animals/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/animals/farm_animals.dm
@@ -167,6 +167,7 @@
response_harm = "kicks"
attacktext = "kicked"
+ has_langs = list("Bird")
speak_chance = 2
speak = list("Cherp.","Cherp?","Chirrup.","Cheep!")
speak_emote = list("cheeps")
@@ -213,6 +214,7 @@ var/global/chicken_count = 0
response_harm = "kicks"
attacktext = "kicked"
+ has_langs = list("Bird")
speak_chance = 2
speak = list("Cluck!","BWAAAAARK BWAK BWAK BWAK!","Bwaak bwak.")
speak_emote = list("clucks","croons")
diff --git a/code/modules/mob/living/simple_animal/animals/goose.dm b/code/modules/mob/living/simple_animal/animals/goose.dm
index 217ea0b0246..ded7c5214a2 100644
--- a/code/modules/mob/living/simple_animal/animals/goose.dm
+++ b/code/modules/mob/living/simple_animal/animals/goose.dm
@@ -35,6 +35,7 @@
max_n2 = 0
minbodytemp = 0
+ has_langs = list("Bird")
speak_chance = 10
speak = list("HONK!")
emote_hear = list("honks loudly!")
diff --git a/code/modules/mob/living/simple_animal/animals/mouse.dm b/code/modules/mob/living/simple_animal/animals/mouse.dm
index 43b12961bd6..cb06aecb7ee 100644
--- a/code/modules/mob/living/simple_animal/animals/mouse.dm
+++ b/code/modules/mob/living/simple_animal/animals/mouse.dm
@@ -29,6 +29,7 @@
minbodytemp = 223 //Below -50 Degrees Celcius
maxbodytemp = 323 //Above 50 Degrees Celcius
+ has_langs = list("Mouse")
speak_chance = 1
speak = list("Squeek!","SQUEEK!","Squeek?")
speak_emote = list("squeeks","squeeks","squiks")
diff --git a/code/modules/mob/living/simple_animal/animals/parrot.dm b/code/modules/mob/living/simple_animal/animals/parrot.dm
index 03f0261688d..0f0fcb3a6bb 100644
--- a/code/modules/mob/living/simple_animal/animals/parrot.dm
+++ b/code/modules/mob/living/simple_animal/animals/parrot.dm
@@ -46,6 +46,7 @@
stop_automated_movement = 1
universal_speak = 1
+ has_langs = list("Bird")
speak_chance = 2
speak = list("Hi","Hello!","Cracker?","BAWWWWK george mellons griffing me")
speak_emote = list("squawks","says","yells")
diff --git a/code/modules/mob/living/simple_animal/animals/penguin.dm b/code/modules/mob/living/simple_animal/animals/penguin.dm
index 40c085a72f7..90074edef59 100644
--- a/code/modules/mob/living/simple_animal/animals/penguin.dm
+++ b/code/modules/mob/living/simple_animal/animals/penguin.dm
@@ -20,6 +20,7 @@
melee_damage_upper = 15
attacktext = "pecked"
+ has_langs = list("Bird")
speak_chance = 0
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm
index e7023cb519f..3f46c81dd79 100644
--- a/code/modules/mob/new_player/sprite_accessories.dm
+++ b/code/modules/mob/new_player/sprite_accessories.dm
@@ -1021,9 +1021,13 @@
icon_state = "tat_campbell"
body_parts = list(BP_R_ARM)
+ left
+ name = "Tattoo (Campbell, L.Arm)"
+ body_parts = list(BP_L_ARM)
+
tat_tiger
name = "Tattoo (Tiger Stripes, Body)"
- icon_state = "tat_campbell"
+ icon_state = "tat_tiger"
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN)
taj_paw_socks
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index e3fabe82f55..4034346fdd1 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -1127,7 +1127,7 @@ Note that amputating the affected organ does in fact remove the infection from t
return !(status & (ORGAN_MUTATED|ORGAN_DEAD))
/obj/item/organ/external/proc/is_malfunctioning()
- return ((robotic >= ORGAN_ROBOT) && (brute_dam + burn_dam) >= 10 && prob(brute_dam + burn_dam))
+ return ((robotic >= ORGAN_ROBOT) && (brute_dam + burn_dam) >= 25 && prob(brute_dam + burn_dam))
/obj/item/organ/external/proc/embed(var/obj/item/weapon/W, var/silent = 0)
if(!owner || loc != owner)
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index ef73f3c031d..c58bd2f1662 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -5,9 +5,6 @@
/obj/item/weapon/cell/New()
..()
charge = maxcharge
-
-/obj/item/weapon/cell/initialize()
- ..()
update_icon()
/obj/item/weapon/cell/drain_power(var/drain_check, var/surge, var/power = 0)
diff --git a/code/modules/projectiles/effects.dm b/code/modules/projectiles/effects.dm
index 71d5d12d2ee..ba6a749ebee 100644
--- a/code/modules/projectiles/effects.dm
+++ b/code/modules/projectiles/effects.dm
@@ -225,9 +225,32 @@
light_power = 0.5
light_color = "#00C6FF"
+//----------------------------
+// Dark matter stun
+//----------------------------
+
+/obj/effect/projectile/darkmatterstun/tracer
+ icon_state = "darkt"
+ light_range = 2
+ light_power = 0.5
+ light_color = "#8837A3"
+
+/obj/effect/projectile/darkmatterstun/muzzle
+ icon_state = "muzzle_darkt"
+ light_range = 2
+ light_power = 0.5
+ light_color = "#8837A3"
+
+/obj/effect/projectile/darkmatterstun/impact
+ icon_state = "impact_darkt"
+ light_range = 2
+ light_power = 0.5
+ light_color = "#8837A3"
+
//----------------------------
// Dark matter
//----------------------------
+
/obj/effect/projectile/darkmatter/tracer
icon_state = "darkb"
light_range = 2
diff --git a/code/modules/projectiles/guns/vox.dm b/code/modules/projectiles/guns/vox.dm
index 857b56fa6b7..d3a846ab08f 100644
--- a/code/modules/projectiles/guns/vox.dm
+++ b/code/modules/projectiles/guns/vox.dm
@@ -58,16 +58,30 @@
item_state = "darkcannon"
fire_sound = 'sound/weapons/eLuger.ogg'
w_class = ITEMSIZE_HUGE
- charge_cost = 600
- projectile_type = /obj/item/projectile/beam/darkmatter
+ charge_cost = 300
+ projectile_type = /obj/item/projectile/beam/stun/darkmatter
self_recharge = 1
accuracy = 2
firemodes = list(
+ list(mode_name="stunning", burst=1, fire_delay=null, move_delay=null, burst_accuracy=list(2), dispersion=null, projectile_type=/obj/item/projectile/beam/stun/darkmatter, charge_cost = 300),
list(mode_name="focused", burst=1, fire_delay=null, move_delay=null, burst_accuracy=list(2), dispersion=null, projectile_type=/obj/item/projectile/beam/darkmatter, charge_cost = 600),
list(mode_name="scatter burst", burst=8, fire_delay=null, move_delay=4, burst_accuracy=list(0, 0, 0, 0, 0, 0, 0, 0), dispersion=list(3, 3, 3, 3, 3, 3, 3, 3, 3), projectile_type=/obj/item/projectile/energy/darkmatter, charge_cost = 300),
)
+/obj/item/projectile/beam/stun/darkmatter
+ name = "dark matter wave"
+ icon_state = "darkt"
+ nodamage = 1
+ taser_effect = 1
+ agony = 55
+ damage_type = HALLOSS
+ light_color = "#8837A3"
+
+ muzzle_type = /obj/effect/projectile/darkmatterstun/muzzle
+ tracer_type = /obj/effect/projectile/darkmatterstun/tracer
+ impact_type = /obj/effect/projectile/darkmatterstun/impact
+
/obj/item/projectile/beam/darkmatter
name = "dark matter bolt"
icon_state = "darkb"
@@ -107,33 +121,29 @@
self_recharge = 1
charge_cost = 600
- projectile_type=/obj/item/projectile/sonic/strong
+ projectile_type=/obj/item/projectile/sonic/weak
firemodes = list(
+ list(mode_name="suppressive", projectile_type=/obj/item/projectile/sonic/weak, charge_cost = 200),
list(mode_name="normal", projectile_type=/obj/item/projectile/sonic/strong, charge_cost = 600),
- list(mode_name="suppressive", projectile_type=/obj/item/projectile/sonic/weak, charge_cost = 300),
)
/obj/item/projectile/sonic
name = "sonic pulse"
icon_state = "sound"
- damage = 15
+ damage = 5
armor_penetration = 30
damage_type = BRUTE
check_armour = "melee"
embed_chance = 0
vacuum_traversal = 0
-// var/amplitude = 10 //Roughly how loud it is, changes the way damage will work, and such
-
/obj/item/projectile/sonic/weak
- agony = 30
+ agony = 50
/obj/item/projectile/sonic/strong
damage = 45
-//Already have thoughts on how to improve this, will take a day or two after initial testing. - Anewbe
-
/obj/item/projectile/sonic/strong/on_hit(var/atom/movable/target, var/blocked = 0)
if(ismob(target))
var/throwdir = get_dir(firer,target)
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index a0a6a89cb29..41ad4cb5c6c 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -164,7 +164,7 @@
name = "Carthatoline"
id = "carthatoline"
result = "carthatoline"
- required_reagents = list("dylovene" = 1, "carbon" = 2, "phoron" = 0.1)
+ required_reagents = list("anti_toxin" = 1, "carbon" = 2, "phoron" = 0.1)
catalysts = list("phoron" = 1)
result_amount = 2
@@ -1840,4 +1840,4 @@
id = "berrytea"
result = "berrytea"
required_reagents = list("tea" = 5, "berryjuice" = 1)
- result_amount = 6
\ No newline at end of file
+ result_amount = 6
diff --git a/html/changelogs/Anewbe - Automute.yml b/html/changelogs/Anewbe - Automute.yml
new file mode 100644
index 00000000000..6ff50860373
--- /dev/null
+++ b/html/changelogs/Anewbe - Automute.yml
@@ -0,0 +1,36 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Anewbe
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - bugfix: "Automute shouldn't trigger if you don't type anything."
\ No newline at end of file
diff --git a/html/changelogs/Anewbe - Chief of Security.yml b/html/changelogs/Anewbe - Chief of Security.yml
new file mode 100644
index 00000000000..3ca2a8c8fd1
--- /dev/null
+++ b/html/changelogs/Anewbe - Chief of Security.yml
@@ -0,0 +1,36 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Anewbe
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Adds the Chief of Security alt title for the HoS."
diff --git a/html/changelogs/Anewbe - Robolimbs.yml b/html/changelogs/Anewbe - Robolimbs.yml
new file mode 100644
index 00000000000..62ee10a1f90
--- /dev/null
+++ b/html/changelogs/Anewbe - Robolimbs.yml
@@ -0,0 +1,36 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Anewbe
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - tweak: "Robolimbs can take a bit more damage before they start malfunctioning."
\ No newline at end of file
diff --git a/html/changelogs/Anewbe - Towels.yml b/html/changelogs/Anewbe - Towels.yml
new file mode 100644
index 00000000000..0d89a8c6766
--- /dev/null
+++ b/html/changelogs/Anewbe - Towels.yml
@@ -0,0 +1,36 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Anewbe
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Drying yourself off with a towel should actually dry you off a bit now."
diff --git a/html/changelogs/Atermonera - FBPnumbernames.yml b/html/changelogs/Atermonera - FBPnumbernames.yml
new file mode 100644
index 00000000000..d96b3075e53
--- /dev/null
+++ b/html/changelogs/Atermonera - FBPnumbernames.yml
@@ -0,0 +1,13 @@
+# Your name.
+author: Atermonera
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "FBPs can now have numbers in their name. The first character cannot be a number."
\ No newline at end of file
diff --git a/html/changelogs/Atermonera - Translators.yml b/html/changelogs/Atermonera - Translators.yml
new file mode 100644
index 00000000000..278506535cc
--- /dev/null
+++ b/html/changelogs/Atermonera - Translators.yml
@@ -0,0 +1,37 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Atermonera
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Common simple animals now have their own language, and as such are no longer understandable by humans."
+ - bugfix: "Translators can't understand the same languages that recorders can't, including the new animal languages."
diff --git a/icons/effects/projectiles.dmi b/icons/effects/projectiles.dmi
index 9664b3e13bc..b20126b60db 100644
Binary files a/icons/effects/projectiles.dmi and b/icons/effects/projectiles.dmi differ
diff --git a/icons/mob/human_races/markings.dmi b/icons/mob/human_races/markings.dmi
index 636c829bd5f..e4e4101b4bf 100644
Binary files a/icons/mob/human_races/markings.dmi and b/icons/mob/human_races/markings.dmi differ
diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi
index 5a63eb1c3d0..c616f88fa52 100644
Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ
diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi
index d2822ad0210..ea726a451bd 100644
Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ
diff --git a/icons/mob/items/righthand_storage.dmi b/icons/mob/items/righthand_storage.dmi
index 16cb0d762f1..e3ecbc1f09b 100644
Binary files a/icons/mob/items/righthand_storage.dmi and b/icons/mob/items/righthand_storage.dmi differ
diff --git a/maps/northern_star/polaris-1.dmm b/maps/northern_star/polaris-1.dmm
index 5a6a0fd393a..f70b5481a84 100644
--- a/maps/northern_star/polaris-1.dmm
+++ b/maps/northern_star/polaris-1.dmm
@@ -10011,7 +10011,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbbdbb
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaacAaadbtEbvcbtGaadbtEbvcbtGaadbtEbvcbtGaadbtEbvcbtGaadbtEbvcbtGaadacOaaaaadaadaaaaaaaaaaaaaaabtHbtHbvdbvebtHbvfbvgbvhawxbvjbvkbkPbkPbkQbkQbkSbkPbkPdELdELahyahyahyahybtHbtHbYedoobsBaahbtTdIWdIVdIYdIXdIZdIJbvlbvmbvnbMNbykbvpbvqbvrbMKbvsbvtbvubvvbvwbvxbvybvzbvAbvBbDKbllahyahybaiaZzbMObhrbaiahyahyahyaahaahaahaahaahaahbjWbjWbrwbpMckQbZfclHcqpbrMbjWbjWaahaahaahaZdaZHaZdahyahyahybbMaZLbaJbgEbgEbvGbvHbiEbhzbiEbvKbvLbgEbgEbiGaZJbbDahyahyahybbNaYGbRLaUwbvNahyahybvObFrbuqbvQbGZbvSbvTcqsbsXanvbvWbvXbvYbvYbvZbwabwbbwcbwdbwebwebwfbwgbQwbwibwjbwkbwlbwmbwnbwoboObwpbwqbwrbtqbwsbwtboOaZWaZmaahaahbgmbgmbgmbgmbAQbwvbwwbmfbyUbwybwzbkJbkJbGRbkJbwAbwBbwCbgmbgmaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbdbbdbbdbbdbbdbbdbbdaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaadaadaaaaaaaaaaaabtHbwDbwEbwFbtHbwGbwHbwIbwJbwKbwLdJadELahyahyahyahydELdELahyahyahyahyahyahybtHbYebsBbwMbwMbwMbwMbwMbwMbwMbwMbwMbwNbwObwPbdTbHDbwRbKGbwTbMNbwUbuabsCbucbwVbwWbwXbllbwYbKJbwYbllahybeebeeblmblnblobboahyahyaahaahaahaahaahaahaahbjWbjWbjWcuwcuvbZgcuHcvCbjWbjWbjWaahaahaZdaZdaZHaZdaZdahyahyahyaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIaZIaZJaZKaZLaZIahyahyahyahyaToaZjblDaZlaToaToahybxcbKKbxebvSbLZbxgbxhbxibsXanAbxkbxlbxmbvYbvYbxnbqhbxpbxqbthbthbxrbtfbxsbxtbxubxvbxwbxxbADbvRboOboOboOboObxAboOboOboOaZWaZmaahaahaahaahaahbgmbxBbxCbkJbxDbkJbxBbxEbkJbxFbxGbkJbxHbxIbkJbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaaaaadaadaaaaaaaaabtHbxJbxKbxLbtHdDfbxMbxNbxObxPbxQbtLaahaahaahahyahyahyahyahyahyahyahyaahaahbtHbEUbwMbwMbxRbxSbxTbxUbxVbxWbxXbwMbxYbxZbyabdTbybbycbydbyebdTbyfbuabygbyhbyhbyhbyhbyhbMHbyjbNtbyhbfzbeebylaZzbcnbymbboaZdaahaahaahaahaahaahaahaahaahbjWbjWbjWbvDbjWbjWbjWbjWbjWaahaahaZdaZdaZGaZHaZGaZdaZdahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyahyaZdaToaYGbynbiPbyoaTobypbyqbyrbysbytbyubyvbywbyxbyybyzbyAbyBbyCbvYbxobsXbyEbtbbyFbyGbyHbyIbyJbyKbyLbyMbyNbxybyPbyQbyRbyScbIbCLbyVbyWbyXbyYbySaZWaZmaahaahaahaahaahbgmbyZbzabzbbzcbzdbzebzfbzgbzhbzibkJdkQbzkbzlbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaaaaaaaadbzmbznbznbznbznbzobtHbtHbtLbzpbzqbzrbzsawybtLaahaahaahaahahyahyahyahyahyahyaahaahaahbtHbEUbwMbzubzvbzwbzxbzybzzbzAbzBbzCbzDbzEbzFbzGbzHbzIbzJbzKbzLbzMbzNbzObzPbzQbzRbzSbzPbNUbzUbzVbzWbzXbzYbecbajbhqbhrbzZaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaahaahbjWbxabjWbjWaZdaZdaZdaZdaZdaZdbAabAbbAcbAdaZGaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdbAebAfbAgbaRaUvbAibAjbAkbvSbAlbvSbAmbxgbAnbBEbuCbApbAqbArbAsbAtbAubuCdopbAwbqmbAxbAxbAybtfbAzbwibAAbABbACbADbAEbAFbySbAGbAHbAIbyWbyWbAJbySbAKaZmaahaahaahaahaahbgmbgmdkRbAMbANbAObAPcBYbARbASbATbAUbAVbAWbAXbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAacAacAaadaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaabtEbvcbtGaaaaadaaaaaaaaaaaaaadbzmbznbznbznbznbzobtHbtHbtLbzpbzqbzrbzsawybtLaahaahaahaahahyahyahyahyahyahyaahaahaahbtHbEUbwMbzubzvbzwbzxbzybzzbzAbzBbzCbzDbzEbzFbzGbzHbzIbzJbzKbzLbzMbzNbzObzPbzQbzRbzSbzPbNUbzUbzVbzWbzXbzYbecbajbhqbhrbzZaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaahaahbjWbxabjWbjWbCbaZdaZdaZdaZdaZdbAabAbbAcbAdaZGaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdaZdbAebAfbAgbaRaUvbAibAjbAkbvSbAlbvSbAmbxgbAnbBEbuCbApbAqbArbAsbAtbAubuCdopbAwbqmbAxbAxbAybtfbAzbwibAAbABbACbADbAEbAFbySbAGbAHbAIbyWbyWbAJbySbAKaZmaahaahaahaahaahbgmbgmdkRbAMbANbAObAPcBYbARbASbATbAUbAVbAWbAXbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaaaaaabkfbBabBabBbbBcbBdbBebBfbBgbBhbBibtLbBjbBkbBlbBmbztbtLaahaahaahaahaahahyahyahyahyaahaahaahaahbtHbEUbwMbBnbzwbBobBpbBqbBrbBsbBrbBtbBubBvbBwbBxbjJbBybjJbBzbjJbjJbBAbBBbBCbBDcMebBFbBGbBHbBIbBJbBKbBLbBMbBNbBObBPbBQbBRbBSbBTbBUbBUbBUbBUbBVbBUbBWaZdaZdaZdaZdbBXaZdaZdaZdbBYbBZbBZbBZbBZbBZbCabCbbCcbCdbCdbCdbCdbCdbCdbCdbaSbaTbaTbaTbaTbaTbaVbaWbaWbaWbaXbaYbaWbaZbaWbbSbbabbTbClbCmbbRbCnbCobCpbCqbCrbvQbCsbvSbCtbCubwabCvbCwbCxbCzbyDbCybwabCBbCCbCDbCEbCEbCFbCGbwhbxtbCHbCIbCJbCKbIcbySbySbCMbCNbCObCPbyWbAJbySbAKaZmaahaahaahaahaahaahbgmbgmbgmbJJbCRbgmbgmbgmbgmbgmbgmbCSbCTbgmbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaadbCUbCVbCVbCVbAYbCVbCVbCVbAYbCVbCVbCVbAYbCVbCVbCVbAYbCVbCVbCVbAYbCVbCVbCVbCVdiNbAZbDabCZbDcbDdbDebDfbDgbDhbDibDjbtLbtLbDkbtLbtLbDlbtLaahaahaahaahaahaahaahahyahyaahaahaahaahbtHbEUbwMbDmbDnbDobDpbDqbDrbDsbDtbwMbDubDvbDwbDxbDybDzbDAbDBbDCbDDbDEbDFbyhbDGbDHbDIbDJbObbDLbzVbzWbzXbzYbecbecbDMbDNbDOaZdbDPbDQbDRbDSbDTbDUbDVbDWbDXbDYbDZbEabEbbBUbBUbBUbEcaZdaZdaZdaZdaZGbEdbEebEfaZGbEjbEjbEjbEjbEjbEjbbUaZGbbVbbXbbWaZGbEgbEgbEgbEgbEgbbYbEkbiDbjYaZdbElaUvbetbEmaVlbEnbEobEpbEqbErbEsbEtbEubEvbEwbsXbsYbsZbExbsYbEybsZbsXbEzbtbbyFbyGbyHbEAbtfbEBbuKbECbEDbuKbySbySbySdBabEFbEGbEHbEIbyWbAJbySbAKaZmaahaahaahaahaahaahaahbgmbEJbEKbELbgmaahaahaahaahbgmbgmbgmbgmaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAaaaaadaaaaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaivaadaaaaadaaaaaabkfbBabBabENbEObEPbEQbznbERbESbETbEUbEUbEVbEWbtHbEXbtHaahaahaahaahaahaahaahaahaahaahaahaahaahbtHbEUbwMbEYbEZbFabFbbFcbFdbFebFfbwMbFgbfubFhbFibFjbFkbFlbFmbFibFnbFobFnbyhbyhbyhbyhbyhbPNbFqbRGbyhbfzbeebFsbecbcnbFtbboaZdbFubFubFubFubFubFubFvdoyaZdbFxbFybFxaZdbFzbFAbFBdoCaZdaahaahaZdaZdaZGaZHaZGbEjbEjbcabbZbcHbcGbEjbcIbFQbEjbEgbEgbEgbEgbIQbIQbcJbEgbcKbFDbEgaZdaZdaTobcLbgJaUvbFSaTobypbyqbFTbAlbFUbFVbFWbFXbEqbFYbFZbGabGbbGcbGdbGebGfbGgbGhbGibGjbGjbGkbGlbtbbGmbGnbGobGpbySdoSbGrbGsbGtbGubGvbGwbyWbAJbySaZWaZmaZmaahaahaahaahaahaahbgmbxzbGydpKbgmaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa