The station has flagged these jobs as high priority: "
- var/amt = length(SSjob.prioritized_jobs)
- var/amt_count
- for(var/datum/job/a in SSjob.prioritized_jobs)
- amt_count++
- if(amt_count != amt) // checks for the last job added.
- dat += " [a.title], "
- else
- dat += " [a.title].
"
- var/job_count = 0
- for(var/datum/job/job in SSjob.occupations)
- if(job && IsJobUnavailable(job.title, TRUE) == JOB_AVAILABLE)
- job_count++;
- if (job_count > round(available_job_count / 2))
- dat += "
"
- var/position_class = "otherPosition"
- if (job.title in GLOB.command_positions)
- position_class = "commandPosition"
- dat += "[job.title] ([job.current_positions]) "
- if(!job_count) //if there's nowhere to go, overflow opens up.
for(var/datum/job/job in SSjob.occupations)
- if(job.title != SSjob.overflow_role)
+ if(job && IsJobUnavailable(job.title, TRUE) == JOB_AVAILABLE)
+ var/categorized = FALSE
+ for(var/jobcat in categorizedJobs)
+ var/list/jobs = categorizedJobs[jobcat]["jobs"]
+ if(job.title in categorizedJobs[jobcat]["titles"])
+ categorized = TRUE
+ if(jobcat == "Command")
+
+ if(job.title == "Captain") // Put captain at top of command jobs
+ jobs.Insert(1, job)
+ else
+ jobs += job
+ else // Put heads at top of non-command jobs
+ if(job.title in GLOB.command_positions)
+ jobs.Insert(1, job)
+ else
+ jobs += job
+ if(!categorized)
+ categorizedJobs["Miscellaneous"]["jobs"] += job
+
+
+ dat += "
"
+ for(var/jobcat in categorizedJobs)
+ if(categorizedJobs[jobcat]["colBreak"])
+ dat += "
"
+ if(!length(categorizedJobs[jobcat]["jobs"]))
continue
- dat += "[job.title] ([job.current_positions]) "
- break
- for(var/spawner in GLOB.mob_spawners)
- job_count++
- if(job_count > round(available_job_count / 2))
- dat += "[spawner] (G) "
- dat += ""
+ var/color = categorizedJobs[jobcat]["color"]
+ dat += " "
+ dat += "
"
+ dat += "
"
// Removing the old window method but leaving it here for reference
//src << browse(dat, "window=latechoices;size=300x640;can_close=1")
// Added the new browser window method
- var/datum/browser/popup = new(src, "latechoices", "Choose Profession", 440, 500)
+ var/datum/browser/popup = new(src, "latechoices", "Choose Profession", 680, 580)
popup.add_stylesheet("playeroptions", 'html/browser/playeroptions.css')
popup.set_content(dat)
- popup.open(0) // 0 is passed to open so that it doesn't use the onclose() proc
+ popup.open(FALSE) // FALSE is passed to open so that it doesn't use the onclose() proc
/mob/dead/new_player/proc/create_character(transfer_after)
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index a6d6a7c7b6..c2518bfc9b 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -188,6 +188,7 @@
update_inv_hands()
I.pixel_x = initial(I.pixel_x)
I.pixel_y = initial(I.pixel_y)
+ I.transform = initial(I.transform)
return hand_index || TRUE
return FALSE
diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm
index 36d26f0faa..c42bd82797 100644
--- a/code/modules/mob/living/carbon/examine.dm
+++ b/code/modules/mob/living/carbon/examine.dm
@@ -88,6 +88,9 @@
if(digitalcamo)
msg += "[t_He] [t_is] moving [t_his] body in an unnatural and blatantly unsimian manner.\n"
+
+ if(combatmode)
+ msg += "[t_He] [t_is] visibly tense[resting ? "." : ", and [t_is] standing in combative stance."]\n"
GET_COMPONENT_FROM(mood, /datum/component/mood, src)
if(mood)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 7582d7fb0e..8c8c8e2d0c 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -264,6 +264,8 @@
if(pocket_item)
if(pocket_item == (pocket_id == SLOT_R_STORE ? r_store : l_store)) //item still in the pocket we search
dropItemToGround(pocket_item)
+ if(!put_in_hands(pocket_item))
+ pocket_item.forceMove(drop_location())
else
if(place_item)
if(place_item.mob_can_equip(src, usr, pocket_id, FALSE, TRUE))
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 0c50b7ef60..c32b6ace78 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -700,9 +700,13 @@
var/list/L = where
if(what == who.get_item_for_held_index(L[2]))
if(who.dropItemToGround(what))
+ if(!put_in_hands(what))
+ what.forceMove(drop_location())
log_combat(src, who, "stripped [what] off")
if(what == who.get_item_by_slot(where))
if(who.dropItemToGround(what))
+ if(!put_in_hands(what))
+ what.forceMove(drop_location())
log_combat(src, who, "stripped [what] off")
// The src mob is trying to place an item on someone
diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm
index 41644ec234..be9b435a18 100644
--- a/code/modules/mob/living/simple_animal/hostile/carp.dm
+++ b/code/modules/mob/living/simple_animal/hostile/carp.dm
@@ -93,8 +93,15 @@
desc = "A failed Syndicate experiment in weaponized space carp technology, it now serves as a lovable mascot."
gender = FEMALE
speak_emote = list("squeaks")
+ maxHealth = 90
+ health = 90
gold_core_spawnable = NO_SPAWN
faction = list(ROLE_SYNDICATE)
AIStatus = AI_OFF
+ harm_intent_damage = 12
+ obj_damage = 70
+ melee_damage_lower = 15
+ melee_damage_upper = 18
+
#undef REGENERATION_DELAY
diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm
index e16b9bb9b5..87fdbc65b0 100644
--- a/code/modules/projectiles/ammunition/_ammunition.dm
+++ b/code/modules/projectiles/ammunition/_ammunition.dm
@@ -73,6 +73,11 @@
/obj/item/ammo_casing/proc/bounce_away(still_warm = FALSE, bounce_delay = 3)
update_icon()
SpinAnimation(10, 1)
+ var/matrix/M = matrix(transform)
+ M.Turn(rand(-170,170))
+ transform = M
+ pixel_x = rand(-12, 12)
+ pixel_y = rand(-12, 12)
var/turf/T = get_turf(src)
if(still_warm && T && T.bullet_sizzle)
addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, 'sound/items/welder.ogg', 20, 1), bounce_delay) //If the turf is made of water and the shell casing is still hot, make a sizzling sound when it's ejected.
diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm
index 54ca03f872..83ce525ac8 100644
--- a/code/modules/projectiles/guns/ballistic/shotgun.dm
+++ b/code/modules/projectiles/guns/ballistic/shotgun.dm
@@ -43,7 +43,7 @@
pump(user)
recentpump = world.time + 10
if(istype(user))//CIT CHANGE - makes pumping shotguns cost a lil bit of stamina.
- user.adjustStaminaLossBuffered(5) //CIT CHANGE - DITTO. make this scale inversely to the strength stat when stats/skills are added
+ user.adjustStaminaLossBuffered(2) //CIT CHANGE - DITTO. make this scale inversely to the strength stat when stats/skills are added
return
/obj/item/gun/ballistic/shotgun/blow_up(mob/user)
@@ -206,7 +206,7 @@
desc = "A compact version of the semi automatic combat shotgun. For close encounters."
icon_state = "cshotgunc"
mag_type = /obj/item/ammo_box/magazine/internal/shot/com/compact
- w_class = WEIGHT_CLASS_BULKY
+ w_class = WEIGHT_CLASS_NORMAL
//Dual Feed Shotgun
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 53bc7e2c17..a7e4e0f590 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -1280,6 +1280,7 @@
reagent_state = SOLID
color = "#FFFFFF" // rgb: 207, 54, 0
taste_description = "the back of class"
+ no_mob_color = TRUE
/datum/reagent/colorful_reagent/crayonpowder/New()
description = "\an [colorname] powder made by grinding down crayons, good for colouring chemical reagents."
@@ -1481,14 +1482,16 @@
color = "#C8A5DC"
var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d11141","#00b159","#00aedb","#f37735","#ffc425","#008744","#0057e7","#d62d20","#ffa700")
taste_description = "rainbows"
-
+ var/no_mob_color = FALSE
/datum/reagent/colorful_reagent/on_mob_life(mob/living/carbon/M)
- M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
+ if(!no_mob_color)
+ M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
..()
/datum/reagent/colorful_reagent/reaction_mob(mob/living/M, reac_volume)
- M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
+ if(!no_mob_color)
+ M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
..()
/datum/reagent/colorful_reagent/reaction_obj(obj/O, reac_volume)
diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm
index f2e9baeba4..e1f4e3dd36 100644
--- a/code/modules/reagents/chemistry/recipes/others.dm
+++ b/code/modules/reagents/chemistry/recipes/others.dm
@@ -592,3 +592,24 @@
id = "pax"
results = list("pax" = 3)
required_reagents = list("mindbreaker" = 1, "synaptizine" = 1, "water" = 1)
+
+/datum/chemical_reaction/cat
+ name = "felined mutation toxic"
+ id = "cats"
+ results = list("felinidmutationtoxin" = 1)
+ required_reagents = list("mindbreaker" = 1, "ammonia" = 1, "water" = 1, "aphro" = 10, "stablemutationtoxin" = 1) // Maybe aphro+ if it becomes a shitty meme
+ required_temp = 450
+
+/datum/chemical_reaction/moff
+ name = "moth mutation toxic"
+ id = "moffs"
+ results = list("mothmutationtoxin" = 1)
+ required_reagents = list("liquid_dark_matter" = 2, "ammonia" = 5, "lithium" = 1, "stablemutationtoxin" = 1)
+ required_temp = 320
+
+/datum/chemical_reaction/notlight //Harder to make do to it being a hard race to play
+ name = "shadow muatatuin toxic"
+ id = "notlight"
+ results = list("shadowmutationtoxin" = 1)
+ required_reagents = list("liquid_dark_matter" = 5, "synaptizine" = 10, "oculine" = 10, "stablemutationtoxin" = 1)
+ required_temp = 600
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index 85868f1895..955b519e6a 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -103,6 +103,7 @@
else if(bartender_check(target) && thrown)
visible_message("[src] lands onto the [target.name] without spilling a single drop.")
+ transform = initial(transform)
return
else
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index b88f680dbb..f59f00a4b8 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -168,6 +168,13 @@
amount_per_transfer_from_this = 1
list_reagents = list("unstablemutationtoxin" = 1)
+/obj/item/reagent_containers/hypospray/medipen/firelocker
+ name = "fire treatment medipen"
+ desc = "A medipen that has been fulled with burn healing chemicals for personnel without advanced medical knowledge."
+ volume = 15
+ amount_per_transfer_from_this = 15
+ list_reagents = list("oxandrolone" = 5, "kelotane" = 10)
+
/obj/item/reagent_containers/hypospray/combat/heresypurge
name = "holy water autoinjector"
desc = "A modified air-needle autoinjector for use in combat situations. Prefilled with 5 doses of a holy water mixture."
diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm
index 8941724274..b5d00d2ba4 100644
--- a/code/modules/reagents/reagent_containers/pill.dm
+++ b/code/modules/reagents/reagent_containers/pill.dm
@@ -81,66 +81,77 @@
icon_state = "pill5"
list_reagents = list("toxin" = 50)
roundstart = 1
+
/obj/item/reagent_containers/pill/cyanide
name = "cyanide pill"
desc = "Don't swallow this."
icon_state = "pill5"
list_reagents = list("cyanide" = 50)
roundstart = 1
+
/obj/item/reagent_containers/pill/adminordrazine
name = "adminordrazine pill"
desc = "It's magic. We don't have to explain it."
icon_state = "pill16"
list_reagents = list("adminordrazine" = 50)
roundstart = 1
+
/obj/item/reagent_containers/pill/morphine
name = "morphine pill"
desc = "Commonly used to treat insomnia."
icon_state = "pill8"
list_reagents = list("morphine" = 30)
roundstart = 1
+
/obj/item/reagent_containers/pill/stimulant
name = "stimulant pill"
desc = "Often taken by overworked employees, athletes, and the inebriated. You'll snap to attention immediately!"
icon_state = "pill19"
list_reagents = list("ephedrine" = 10, "antihol" = 10, "coffee" = 30)
roundstart = 1
+
/obj/item/reagent_containers/pill/salbutamol
name = "salbutamol pill"
desc = "Used to treat oxygen deprivation."
icon_state = "pill16"
list_reagents = list("salbutamol" = 30)
roundstart = 1
+
/obj/item/reagent_containers/pill/charcoal
name = "charcoal pill"
desc = "Neutralizes many common toxins."
icon_state = "pill17"
list_reagents = list("charcoal" = 10)
roundstart = 1
+
/obj/item/reagent_containers/pill/epinephrine
name = "epinephrine pill"
desc = "Used to stabilize patients."
icon_state = "pill5"
list_reagents = list("epinephrine" = 15)
roundstart = 1
+
/obj/item/reagent_containers/pill/mannitol
name = "mannitol pill"
desc = "Used to treat brain damage."
icon_state = "pill17"
list_reagents = list("mannitol" = 50)
roundstart = 1
+
/obj/item/reagent_containers/pill/mutadone
name = "mutadone pill"
desc = "Used to treat genetic damage."
icon_state = "pill20"
list_reagents = list("mutadone" = 50)
roundstart = 1
+
/obj/item/reagent_containers/pill/salicyclic
name = "salicylic acid pill"
desc = "Used to dull pain."
icon_state = "pill9"
list_reagents = list("sal_acid" = 24)
roundstart = 1
+
/obj/item/reagent_containers/pill/oxandrolone
name = "oxandrolone pill"
desc = "Used to stimulate burn healing."
@@ -154,6 +165,13 @@
icon_state = "pill18"
list_reagents = list("insulin" = 50)
roundstart = 1
+
+/obj/item/reagent_containers/pill/antirad
+ name = "potassium iodide pill"
+ desc = "Used to treat radition used to counter radiation poisoning."
+ icon_state = "pill18"
+ list_reagents = list("potass_iodide" = 50)
+ roundstart = 1
///////////////////////////////////////// this pill is used only in a legion mob drop
/obj/item/reagent_containers/pill/shadowtoxin
name = "black pill"
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index e3576b3625..a51134f84d 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -166,6 +166,15 @@
user.visible_message("[user] decided life was worth living.")
return
+//Drying Agent
+/obj/item/reagent_containers/spray/drying_agent
+ name = "drying agent spray"
+ desc = "A spray bottle for drying agent."
+ volume = 100
+ list_reagents = list("drying_agent" = 100)
+ amount_per_transfer_from_this = 2
+ stream_amount = 5
+
//spray tan
/obj/item/reagent_containers/spray/spraytan
name = "spray tan"
diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm
index 0ac01aec38..d567334998 100644
--- a/code/modules/research/designs/misc_designs.dm
+++ b/code/modules/research/designs/misc_designs.dm
@@ -13,6 +13,16 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+/datum/design/health_hud_prescription
+ name = "Prescription Health Scanner HUD"
+ desc = "A heads-up display that scans the humans in view and provides accurate data about their health status. This one has a prescription lens."
+ id = "health_hud_prescription"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_SILVER = 350)
+ build_path = /obj/item/clothing/glasses/hud/health/prescription
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
+
/datum/design/health_hud_night
name = "Night Vision Health Scanner HUD"
desc = "An advanced medical head-up display that allows doctors to find patients in complete darkness."
@@ -33,6 +43,17 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+/datum/design/security_hud_prescription
+ name = "Prescription Security HUD"
+ desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status. This one has a prescription lens."
+ id = "security_hud_prescription"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_SILVER = 350)
+ build_path = /obj/item/clothing/glasses/hud/security/prescription
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+
+
/datum/design/security_hud_night
name = "Night Vision Security HUD"
desc = "A heads-up display which provides id data and vision in complete darkness."
@@ -53,6 +74,16 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+/datum/design/diagnostic_hud_prescription
+ name = "Prescription Diagnostic HUD"
+ desc = "A HUD used to analyze and determine faults within robotic machinery. This one has a prescription lens."
+ id = "diagnostic_hud_prescription"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_GOLD = 350)
+ build_path = /obj/item/clothing/glasses/hud/diagnostic/prescription
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
+
/datum/design/diagnostic_hud_night
name = "Night Vision Diagnostic HUD"
desc = "Upgraded version of the diagnostic HUD designed to function during a power failure."
@@ -107,6 +138,16 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING
+/datum/design/mesons_prescription
+ name = "Prescription Optical Meson Scanners"
+ desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition. Prescription lens has been added into this design."
+ id = "mesons_prescription"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_SILVER = 350)
+ build_path = /obj/item/clothing/glasses/meson/prescription
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING
+
/datum/design/engine_goggles
name = "Engineering Scanner Goggles"
desc = "Goggles used by engineers. The Meson Scanner mode lets you see basic structural and terrain layouts through walls, regardless of lighting condition. The T-ray Scanner mode lets you see underfloor objects such as cables and pipes."
@@ -117,6 +158,16 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+/datum/design/engine_goggles_prescription
+ name = "Prescription Engineering Scanner Goggles"
+ desc = "Goggles used by engineers. The Meson Scanner mode lets you see basic structural and terrain layouts through walls, regardless of lighting condition. The T-ray Scanner mode lets you see underfloor objects such as cables and pipes. Prescription lens has been added into this design."
+ id = "engine_goggles_prescription"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_PLASMA = 100, MAT_SILVER = 350)
+ build_path = /obj/item/clothing/glasses/meson/engine/prescription
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
/datum/design/tray_goggles
name = "Optical T-Ray Scanners"
desc = "Used by engineering staff to see underfloor objects such as cables and pipes."
@@ -127,6 +178,16 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+/datum/design/tray_goggles_prescription
+ name = "Prescription Optical T-Ray Scanners"
+ desc = "Used by engineering staff to see underfloor objects such as cables and pipes. Prescription lens has been added into this design."
+ id = "tray_goggles_prescription"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 500, MAT_GLASS = 500, MAT_SILVER = 150)
+ build_path = /obj/item/clothing/glasses/meson/engine/tray/prescription
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
/datum/design/nvgmesons
name = "Night Vision Optical Meson Scanners"
desc = "Prototype meson scanners fitted with an extra sensor which amplifies the visible light spectrum and overlays it to the UHD display."
@@ -187,86 +248,6 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
-/datum/design/handdrill
- name = "Hand Drill"
- desc = "A small electric hand drill with an interchangeable screwdriver and bolt bit"
- id = "handdrill"
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 3500, MAT_SILVER = 1500, MAT_TITANIUM = 2500)
- build_path = /obj/item/screwdriver/power
- category = list("Equipment")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/jawsoflife
- name = "Jaws of Life"
- desc = "A small, compact Jaws of Life with an interchangeable pry jaws and cutting jaws"
- id = "jawsoflife" // added one more requirment since the Jaws of Life are a bit OP
- build_path = /obj/item/crowbar/power
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 4500, MAT_SILVER = 2500, MAT_TITANIUM = 3500)
- category = list("Equipment")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/alienwrench
- name = "Alien Wrench"
- desc = "An advanced wrench obtained through Abductor technology."
- id = "alien_wrench"
- build_path = /obj/item/wrench/abductor
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
- category = list("Equipment")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/alienwirecutters
- name = "Alien Wirecutters"
- desc = "Advanced wirecutters obtained through Abductor technology."
- id = "alien_wirecutters"
- build_path = /obj/item/wirecutters/abductor
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
- category = list("Equipment")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/alienscrewdriver
- name = "Alien Screwdriver"
- desc = "An advanced screwdriver obtained through Abductor technology."
- id = "alien_screwdriver"
- build_path = /obj/item/screwdriver/abductor
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
- category = list("Equipment")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/aliencrowbar
- name = "Alien Crowbar"
- desc = "An advanced crowbar obtained through Abductor technology."
- id = "alien_crowbar"
- build_path = /obj/item/crowbar/abductor
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
- category = list("Equipment")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/alienwelder
- name = "Alien Welding Tool"
- desc = "An advanced welding tool obtained through Abductor technology."
- id = "alien_welder"
- build_path = /obj/item/weldingtool/abductor
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
- category = list("Equipment")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
-/datum/design/alienmultitool
- name = "Alien Multitool"
- desc = "An advanced multitool obtained through Abductor technology."
- id = "alien_multitool"
- build_path = /obj/item/multitool/abductor
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
- category = list("Equipment")
- departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
-
/datum/design/diskplantgene
name = "Plant Data Disk"
desc = "A disk for storing plant genetic data."
@@ -385,6 +366,86 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
+/datum/design/handdrill
+ name = "Hand Drill"
+ desc = "A small electric hand drill with an interchangeable screwdriver and bolt bit"
+ id = "handdrill"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 3500, MAT_SILVER = 1500, MAT_TITANIUM = 2500)
+ build_path = /obj/item/screwdriver/power
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/jawsoflife
+ name = "Jaws of Life"
+ desc = "A small, compact Jaws of Life with an interchangeable pry jaws and cutting jaws"
+ id = "jawsoflife" // added one more requirment since the Jaws of Life are a bit OP
+ build_path = /obj/item/crowbar/power
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 4500, MAT_SILVER = 2500, MAT_TITANIUM = 3500)
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/alienwrench
+ name = "Alien Wrench"
+ desc = "An advanced wrench obtained through Abductor technology."
+ id = "alien_wrench"
+ build_path = /obj/item/wrench/abductor
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/alienwirecutters
+ name = "Alien Wirecutters"
+ desc = "Advanced wirecutters obtained through Abductor technology."
+ id = "alien_wirecutters"
+ build_path = /obj/item/wirecutters/abductor
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/alienscrewdriver
+ name = "Alien Screwdriver"
+ desc = "An advanced screwdriver obtained through Abductor technology."
+ id = "alien_screwdriver"
+ build_path = /obj/item/screwdriver/abductor
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/aliencrowbar
+ name = "Alien Crowbar"
+ desc = "An advanced crowbar obtained through Abductor technology."
+ id = "alien_crowbar"
+ build_path = /obj/item/crowbar/abductor
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/alienwelder
+ name = "Alien Welding Tool"
+ desc = "An advanced welding tool obtained through Abductor technology."
+ id = "alien_welder"
+ build_path = /obj/item/weldingtool/abductor
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
+/datum/design/alienmultitool
+ name = "Alien Multitool"
+ desc = "An advanced multitool obtained through Abductor technology."
+ id = "alien_multitool"
+ build_path = /obj/item/multitool/abductor
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 5000, MAT_SILVER = 2500, MAT_PLASMA = 5000, MAT_TITANIUM = 2000, MAT_DIAMOND = 2000)
+ category = list("Equipment")
+ departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
+
/datum/design/anomaly_neutralizer
name = "Anomaly Neutralizer"
desc = "An advanced tool capable of instantly neutralizing anomalies, designed to capture the fleeting aberrations created by the engine."
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index 43b21771c5..e7bbd468dc 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -163,7 +163,7 @@
display_name = "Advanced Engineering"
description = "Pushing the boundaries of physics, one chainsaw-fist at a time."
prereq_ids = list("engineering", "emp_basic")
- design_ids = list("engine_goggles", "magboots", "forcefield_projector", "weldingmask")
+ design_ids = list("engine_goggles", "magboots", "forcefield_projector", "weldingmask", "tray_goggles_prescription", "engine_goggles_prescription", "mesons_prescription")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000)
export_price = 5000
@@ -426,7 +426,7 @@
display_name = "Integrated HUDs"
description = "The usefulness of computerized records, projected straight onto your eyepiece!"
prereq_ids = list("comp_recordkeeping", "emp_basic")
- design_ids = list("health_hud", "security_hud", "diagnostic_hud", "scigoggles")
+ design_ids = list("health_hud", "security_hud", "diagnostic_hud", "scigoggles", "health_hud_prescription", "security_hud_prescription", "diagnostic_hud_prescription")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500)
export_price = 5000
@@ -435,7 +435,7 @@
display_name = "Night Vision Technology"
description = "Allows seeing in the dark without actual light!"
prereq_ids = list("integrated_HUDs", "adv_engi", "emp_adv")
- design_ids = list("health_hud_night", "security_hud_night", "diagnostic_hud_night", "night_visision_goggles", "night_visision_goggles_glasses", "nvgmesons")
+ design_ids = list("health_hud_night", "security_hud_night", "diagnostic_hud_night", "night_visision_goggles", "nvgmesons", "night_visision_goggles_glasses")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
export_price = 5000
diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm
index 7e45854628..70b06e6438 100644
--- a/code/modules/security_levels/security_levels.dm
+++ b/code/modules/security_levels/security_levels.dm
@@ -1,6 +1,7 @@
GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
//SEC_LEVEL_GREEN = code green
//SEC_LEVEL_BLUE = code blue
+//SEC_LEVEL_AMBER = code amber
//SEC_LEVEL_RED = code red
//SEC_LEVEL_DELTA = code delta
@@ -12,6 +13,8 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
level = SEC_LEVEL_GREEN
if("blue")
level = SEC_LEVEL_BLUE
+ if("amber")
+ level = SEC_LEVEL_AMBER
if("red")
level = SEC_LEVEL_RED
if("delta")
@@ -25,8 +28,10 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
if(GLOB.security_level >= SEC_LEVEL_RED)
SSshuttle.emergency.modTimer(4)
+ else if(GLOB.security_level == SEC_LEVEL_AMBER)
+ SSshuttle.emergency.modTimer(2.5)
else
- SSshuttle.emergency.modTimer(2)
+ SSshuttle.emergency.modTimer(1.66)
GLOB.security_level = SEC_LEVEL_GREEN
for(var/obj/machinery/firealarm/FA in GLOB.machines)
if(is_station_level(FA.z))
@@ -35,24 +40,46 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
if(GLOB.security_level < SEC_LEVEL_BLUE)
minor_announce(CONFIG_GET(string/alert_blue_upto), "Attention! Security level elevated to blue:",1)
if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
- SSshuttle.emergency.modTimer(0.5)
+ SSshuttle.emergency.modTimer(0.6)
else
minor_announce(CONFIG_GET(string/alert_blue_downto), "Attention! Security level lowered to blue:")
if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
- SSshuttle.emergency.modTimer(2)
+ if(GLOB.security_level >= SEC_LEVEL_RED)
+ SSshuttle.emergency.modTimer(2.4)
+ else
+ SSshuttle.emergency.modTimer(1.5)
GLOB.security_level = SEC_LEVEL_BLUE
sound_to_playing_players('sound/misc/voybluealert.ogg') // Citadel change - Makes alerts play a sound
for(var/obj/machinery/firealarm/FA in GLOB.machines)
if(is_station_level(FA.z))
FA.update_icon()
+ if(SEC_LEVEL_AMBER)
+ if(GLOB.security_level < SEC_LEVEL_AMBER)
+ minor_announce(CONFIG_GET(string/alert_amber_upto), "Attention! Security level elevated to amber:",1)
+ if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
+ if(GLOB.security_level == SEC_LEVEL_GREEN)
+ SSshuttle.emergency.modTimer(0.4)
+ else
+ SSshuttle.emergency.modTimer(0.66)
+ else
+ minor_announce(CONFIG_GET(string/alert_amber_downto), "Attention! Security level lowered to amber:")
+ if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
+ SSshuttle.emergency.modTimer(1.6)
+ GLOB.security_level = SEC_LEVEL_AMBER
+ sound_to_playing_players('sound/effects/alert.ogg') // Citadel change - Makes alerts play a sound
+ for(var/obj/machinery/firealarm/FA in GLOB.machines)
+ if(is_station_level(FA.z))
+ FA.update_icon()
if(SEC_LEVEL_RED)
if(GLOB.security_level < SEC_LEVEL_RED)
minor_announce(CONFIG_GET(string/alert_red_upto), "Attention! Code red!",1)
if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
if(GLOB.security_level == SEC_LEVEL_GREEN)
SSshuttle.emergency.modTimer(0.25)
+ else if(GLOB.security_level == SEC_LEVEL_BLUE)
+ SSshuttle.emergency.modTimer(0.416)
else
- SSshuttle.emergency.modTimer(0.5)
+ SSshuttle.emergency.modTimer(0.625)
else
minor_announce(CONFIG_GET(string/alert_red_downto), "Attention! Code red!")
GLOB.security_level = SEC_LEVEL_RED
@@ -66,10 +93,12 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
if(SEC_LEVEL_DELTA)
minor_announce(CONFIG_GET(string/alert_delta), "Attention! Delta security level reached!",1)
if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL)
- if(GLOB.security_level == SEC_LEVEL_GREEN)
+ if(GLOB.security_level < SEC_LEVEL_BLUE)
SSshuttle.emergency.modTimer(0.25)
else if(GLOB.security_level == SEC_LEVEL_BLUE)
- SSshuttle.emergency.modTimer(0.5)
+ SSshuttle.emergency.modTimer(0.416)
+ else
+ SSshuttle.emergency.modTimer(0.625)
GLOB.security_level = SEC_LEVEL_DELTA
sound_to_playing_players('sound/misc/deltakalaxon.ogg') // Citadel change - Makes alerts play a sound
for(var/obj/machinery/firealarm/FA in GLOB.machines)
@@ -93,6 +122,8 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
return "green"
if(SEC_LEVEL_BLUE)
return "blue"
+ if(SEC_LEVEL_AMBER)
+ return "amber"
if(SEC_LEVEL_RED)
return "red"
if(SEC_LEVEL_DELTA)
@@ -104,6 +135,8 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
return "green"
if(SEC_LEVEL_BLUE)
return "blue"
+ if(SEC_LEVEL_AMBER)
+ return "amber"
if(SEC_LEVEL_RED)
return "red"
if(SEC_LEVEL_DELTA)
@@ -115,6 +148,8 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
return SEC_LEVEL_GREEN
if("blue")
return SEC_LEVEL_BLUE
+ if("amber")
+ return SEC_LEVEL_AMBER
if("red")
return SEC_LEVEL_RED
if("delta")
diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm
index cbc6810143..9af4194049 100644
--- a/code/modules/shuttle/emergency.dm
+++ b/code/modules/shuttle/emergency.dm
@@ -206,7 +206,9 @@
if(SEC_LEVEL_GREEN)
set_coefficient = 2
if(SEC_LEVEL_BLUE)
- set_coefficient = 1
+ set_coefficient = 1.2
+ if(SEC_LEVEL_AMBER)
+ set_coefficient = 0.8
else
set_coefficient = 0.5
var/call_time = SSshuttle.emergencyCallTime * set_coefficient * engine_coeff
diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm
index 1841ac52b5..8d0547d2c5 100644
--- a/code/modules/surgery/bodyparts/bodyparts.dm
+++ b/code/modules/surgery/bodyparts/bodyparts.dm
@@ -295,6 +295,7 @@
var/datum/species/S = H.dna.species
species_id = S.limbs_id
+ should_draw_citadel = S.should_draw_citadel // Citadel Addition
species_flags_list = H.dna.species.species_traits
if(S.use_skintones)
@@ -396,7 +397,7 @@
limb.icon_state = "[species_id]_[body_zone]"
// Citadel Start
- if(should_draw_citadel)
+ if(should_draw_citadel && !use_digitigrade)
limb.icon = 'modular_citadel/icons/mob/mutant_bodyparts.dmi'
if(should_draw_gender)
limb.icon_state = "[species_id]_[body_zone]_[icon_gender]"
diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm
index 9f71f58ff8..6ec1ea12d9 100644
--- a/code/modules/surgery/organs/lungs.dm
+++ b/code/modules/surgery/organs/lungs.dm
@@ -15,7 +15,7 @@
var/safe_co2_min = 0
var/safe_co2_max = 10 // Yes it's an arbitrary value who cares?
var/safe_toxins_min = 0
- var/safe_toxins_max = 0.05
+ var/safe_toxins_max = MOLES_GAS_VISIBLE
var/SA_para_min = 1 //Sleeping agent
var/SA_sleep_min = 5 //Sleeping agent
var/BZ_trip_balls_min = 1 //BZ gas
@@ -324,7 +324,7 @@
// Clear out moods when no miasma at all
else
SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "smell")
-
+
handle_breath_temperature(breath, H)
breath.garbage_collect()
return TRUE
diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm
index bbbe8c584d..55ead3b5b4 100644
--- a/code/modules/surgery/organs/vocal_cords.dm
+++ b/code/modules/surgery/organs/vocal_cords.dm
@@ -251,8 +251,10 @@
var/static/regex/clap_words = regex("clap|applaud")
var/static/regex/honk_words = regex("ho+nk") //hooooooonk
var/static/regex/multispin_words = regex("like a record baby|right round")
- var/static/regex/orgasm_words = regex("cum|orgasm|climax|squirt") //CITADEL CHANGE
+ var/static/regex/orgasm_words = regex("cum|orgasm|climax|squirt|heyo") //CITADEL CHANGE
var/static/regex/dab_words = regex("dab|mood") //CITADEL CHANGE
+ var/static/regex/snap_words = regex("snap") //CITADEL CHANGE
+ var/static/regex/bwoink_words = regex("what the fuck are you doing|bwoink|hey you got a moment?") //CITADEL CHANGE
var/i = 0
//STUN
@@ -582,6 +584,18 @@
for(var/V in listeners)
var/mob/living/M = V
M.say("*dab")
+
+ //SNAP
+ else if((findtext(message, snap_words)))
+ cooldown = COOLDOWN_MEME
+ for(var/V in listeners)
+ var/mob/living/M = V
+ M.say("*snap")
+
+ //BWOINK
+ else if((findtext(message, bwoink_words)))
+ cooldown = COOLDOWN_MEME
+ addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, get_turf(user), 'sound/effects/adminhelp.ogg', 300, 1), 25)
//END CITADEL CHANGES
else
diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index 1e3060137a..05fdbadf87 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -988,6 +988,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
item = /obj/item/storage/backpack/duffelbag/syndie/surgery
cost = 3
+/datum/uplink_item/device_tools/surgerybag_adv
+ name = "Syndicate Surgery Duffel Bag"
+ desc = "The Syndicate surgery duffel bag is a toolkit containing all newest surgery tools, surgical drapes, \
+ a Syndicate brand MMI, a straitjacket, a muzzle, and a full Syndicate Combat Medic Kit."
+ item = /obj/item/storage/backpack/duffelbag/syndie/surgery_adv
+ cost = 15 //Mite be to cheap
+
/datum/uplink_item/device_tools/military_belt
name = "Chest Rig"
desc = "A robust seven-slot set of webbing that is capable of holding all manner of tactical equipment."
diff --git a/config/game_options.txt b/config/game_options.txt
index bfc5ed5edb..6ff9182f0a 100644
--- a/config/game_options.txt
+++ b/config/game_options.txt
@@ -57,10 +57,12 @@ MULTIPLICATIVE_MOVESPEED /mob/living/simple_animal 1
## ALERT LEVELS ###
ALERT_GREEN All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced.
-ALERT_BLUE_UPTO The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted.
-ALERT_BLUE_DOWNTO The immediate threat has passed. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still allowed.
-ALERT_RED_UPTO There is an immediate serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised. Additionally, access requirements on some doors have been lifted.
-ALERT_RED_DOWNTO The station's destruction has been averted. There is still however an immediate serious threat to the station. Security may have weapons unholstered at all times, random searches are allowed and advised.
+ALERT_BLUE_UPTO The station has received reliable information about potential threats to the station. Security staff may have weapons visible, random searches are permitted.
+ALERT_BLUE_DOWNTO Significant confirmed threats have been neutralized. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still permitted.
+ALERT_AMBER_UPTO There are signficant confirmed threats to the station. Security staff may have weapons unholstered at all times. Random searches are allowed and advised.
+ALERT_AMBER_DOWNTO The immediate threat has passed. Security is no longer authorized to use lethal force, but may continue to have weapons drawn. Access requirements have been restored.
+ALERT_RED_UPTO There is an immediate serious threat to the station. Security is now authorized to use lethal force. Additionally, access requirements on some machines have been lifted.
+ALERT_RED_DOWNTO The station's destruction has been averted. There is still however an immediate serious threat to the station. Security is still authorized to use lethal force.
ALERT_DELTA Destruction of the station is imminent. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill.
diff --git a/html/changelogs/AutoChangeLog-pr-7908.yml b/html/changelogs/AutoChangeLog-pr-7908.yml
new file mode 100644
index 0000000000..f6c1fda2ec
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7908.yml
@@ -0,0 +1,4 @@
+author: "deathride58"
+delete-after: True
+changes:
+ - rscadd: "The new player panel now displays your currently selected character's name"
diff --git a/html/changelogs/AutoChangeLog-pr-7911.yml b/html/changelogs/AutoChangeLog-pr-7911.yml
new file mode 100644
index 0000000000..0d0d468aa8
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7911.yml
@@ -0,0 +1,4 @@
+author: "deathride58"
+delete-after: True
+changes:
+ - balance: "Flashes no longer knockdown. Instead, they deal eyeblur and have increased confusion"
diff --git a/html/changelogs/AutoChangeLog-pr-7945.yml b/html/changelogs/AutoChangeLog-pr-7945.yml
new file mode 100644
index 0000000000..edc2f96dc8
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7945.yml
@@ -0,0 +1,5 @@
+author: "Ghom"
+delete-after: True
+changes:
+ - bugfix: "fixes the perpetual lack of moisture that has affected genitalia descriptions since, like, forever."
+ - rscadd: "implements the arousal state for mammary glands."
diff --git a/html/changelogs/AutoChangeLog-pr-7951.yml b/html/changelogs/AutoChangeLog-pr-7951.yml
new file mode 100644
index 0000000000..e05a5a1911
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7951.yml
@@ -0,0 +1,6 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - bugfix: "Fixes many possible situations of null icons for cit races' bodyparts."
+ - imagedel: "Removes duplicate slimepeople' sprites."
+ - code_imp: "Purges that draw_citadel_parts()."
diff --git a/html/changelogs/AutoChangeLog-pr-7954.yml b/html/changelogs/AutoChangeLog-pr-7954.yml
new file mode 100644
index 0000000000..8a31b912ad
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7954.yml
@@ -0,0 +1,6 @@
+author: "deathride58"
+delete-after: True
+changes:
+ - balance: "Mops no longer have a delay on their cleaning, making them an actually viable alternative to all of the janitor's other cleaning tools"
+ - balance: "To balance this, mops now take stamina to clean tiles. Standard mops take 5 stamina to use, while advanced mops take 2 stamina."
+ - tweak: "Oh and also mops make fancy new sounds and play animations when used now"
diff --git a/html/changelogs/AutoChangeLog-pr-7964.yml b/html/changelogs/AutoChangeLog-pr-7964.yml
new file mode 100644
index 0000000000..33cfaa453d
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7964.yml
@@ -0,0 +1,6 @@
+author: "CydiaButt13"
+delete-after: True
+changes:
+ - rscadd: "Lamp Plushie to loadout"
+ - imageadd: "added plushie_lamp to plush icons"
+ - code_imp: "added Lamp Plush to loadout and icons and items"
diff --git a/html/changelogs/AutoChangeLog-pr-7973.yml b/html/changelogs/AutoChangeLog-pr-7973.yml
new file mode 100644
index 0000000000..df9b9e2411
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7973.yml
@@ -0,0 +1,4 @@
+author: "deathride58"
+delete-after: True
+changes:
+ - balance: "Pump-action shotguns now take 2 stamina per pump instead of 5 stamina per pump. This also applies to bolt-action rifles, as bolt racking counts as pumping."
diff --git a/html/changelogs/AutoChangeLog-pr-7976.yml b/html/changelogs/AutoChangeLog-pr-7976.yml
new file mode 100644
index 0000000000..4f334dc4ca
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7976.yml
@@ -0,0 +1,7 @@
+author: "Tupinambis"
+delete-after: True
+changes:
+ - rscadd: "Adds a new security level between Blue and Red (Amber). The shuttle call time at this level is 8 minutes."
+ - tweak: "Blue security level now has a shuttle call time of 12 minutes."
+ - tweak: "The security level increase/decrease texts have been modified to accommodate the change."
+ - imageadd: "Adds a code Amber sprite for the fire alarms"
diff --git a/html/changelogs/AutoChangeLog-pr-7977.yml b/html/changelogs/AutoChangeLog-pr-7977.yml
new file mode 100644
index 0000000000..ca43ddbbf0
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7977.yml
@@ -0,0 +1,5 @@
+author: "Zargserg"
+delete-after: True
+changes:
+ - balance: "Lungs maximum toxin threshold is 0.5% of the atmosphere."
+ - bugfix: "Permanently contaminated atmosphere does not murder crew anymore."
diff --git a/html/changelogs/AutoChangeLog-pr-7978.yml b/html/changelogs/AutoChangeLog-pr-7978.yml
new file mode 100644
index 0000000000..b35ea975c3
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7978.yml
@@ -0,0 +1,4 @@
+author: "Poojawa"
+delete-after: True
+changes:
+ - rscadd: "Added the Yogs/Oracle ported latejoin menu"
diff --git a/html/changelogs/AutoChangeLog-pr-7979.yml b/html/changelogs/AutoChangeLog-pr-7979.yml
new file mode 100644
index 0000000000..ed06d73ac1
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7979.yml
@@ -0,0 +1,4 @@
+author: "Anonymous"
+delete-after: True
+changes:
+ - imageadd: "More crusader armor variants to pick from armament: Teutonic and Hospitaller."
diff --git a/html/changelogs/AutoChangeLog-pr-7980.yml b/html/changelogs/AutoChangeLog-pr-7980.yml
new file mode 100644
index 0000000000..a0b3b09fb5
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7980.yml
@@ -0,0 +1,4 @@
+author: "MediHound"
+delete-after: True
+changes:
+ - rscadd: "Made Cyborgs be affected by Ion Storm Law Changes like AIs"
diff --git a/html/changelogs/AutoChangeLog-pr-7981.yml b/html/changelogs/AutoChangeLog-pr-7981.yml
new file mode 100644
index 0000000000..e36dd711fa
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7981.yml
@@ -0,0 +1,5 @@
+author: "Tupinambis"
+delete-after: True
+changes:
+ - tweak: "Removed the plushes from the toy crate, giving them their own."
+ - tweak: "Plushes are now less likely to spawn out of arcades"
diff --git a/html/changelogs/AutoChangeLog-pr-7982.yml b/html/changelogs/AutoChangeLog-pr-7982.yml
new file mode 100644
index 0000000000..7255219c9e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7982.yml
@@ -0,0 +1,9 @@
+author: "Coolgat3 / Avunia"
+delete-after: True
+changes:
+ - rscadd: "Made kindle put the target into stamcrit, which makes it an actually working, useful stun."
+ - rscadd: "Added a stamina loss modifier to the vanguard spell which makes the user's stamina drain at a way slower rate. This doesn't make them immune to tasers, but it takes a few hits to actually get them to fall down."
+ - tweak: "Made it so that clock culties don't start with a chameleon suit. Instead they start with an engineer suit which is pretty much the same sprite and looks. If this is not perfect, then I am willing to make a slightly more brass-colored version of the engineer suit sprite and call it a ratvarian engineer jumpsuit."
+ - balance: "Increased the cost of vanguard, as it is now a spell that works somewhat like adrenals, minus the move speed, making your stamina drain really slow and making you unable to get knocked onto the ground by just a single taser shot."
+ - balance: "Lowered the charge time of kindle, reason being that you can usually have only one active spell on you, or two at max if you decide to run two slabs, but the fact that kindle silences people for such a small amount of time makes up for it, in my opinion."
+ - server: "Figured out that the consoles and their warp function actually work with the current code. The thing that makes them not work is when the gamemode is ran on debug mode, without the required players to actually support it. It also breaks the ark timer which is stuck on -1 seconds until activation. Whenever the gamemode starts properly, like any other gamemode, with player checks and all, everything seems to work just fine."
diff --git a/html/changelogs/AutoChangeLog-pr-7983.yml b/html/changelogs/AutoChangeLog-pr-7983.yml
new file mode 100644
index 0000000000..46e0a14f96
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7983.yml
@@ -0,0 +1,4 @@
+author: "Ghommie"
+delete-after: True
+changes:
+ - code_imp: "Fixes ISINRANGE_EX using the wrong relational operator."
diff --git a/html/changelogs/AutoChangeLog-pr-7994.yml b/html/changelogs/AutoChangeLog-pr-7994.yml
new file mode 100644
index 0000000000..703dcf31e1
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7994.yml
@@ -0,0 +1,4 @@
+author: "deathride58"
+delete-after: True
+changes:
+ - tweak: "Pickpocketing items will now place them in your hands if possible"
diff --git a/html/changelogs/AutoChangeLog-pr-7995.yml b/html/changelogs/AutoChangeLog-pr-7995.yml
new file mode 100644
index 0000000000..9d118ebbff
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7995.yml
@@ -0,0 +1,5 @@
+author: "deathride58"
+delete-after: True
+changes:
+ - rscadd: "Combat mode is now displayed in examine text"
+ - rscadd: "Combat mode now makes a visible message when enabled if you haven't touched your combat mode button in the last ten seconds. It's done this way to avoid chat spam from those who know how to pull off stam regen squeezing."
diff --git a/html/changelogs/AutoChangeLog-pr-7996.yml b/html/changelogs/AutoChangeLog-pr-7996.yml
new file mode 100644
index 0000000000..518feae251
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7996.yml
@@ -0,0 +1,4 @@
+author: "deathride58"
+delete-after: True
+changes:
+ - balance: "All knockdown sources will now force people to be dismounted from ridden vehicles."
diff --git a/html/changelogs/AutoChangeLog-pr-7997.yml b/html/changelogs/AutoChangeLog-pr-7997.yml
new file mode 100644
index 0000000000..7b3db7fb44
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7997.yml
@@ -0,0 +1,9 @@
+author: "deathride58"
+delete-after: True
+changes:
+ - rscadd: "When an item is thrown, it will now be rotated and displaced."
+ - rscadd: "Shards of glass will now be rotated when spawned."
+ - rscadd: "Bullet casings will now be rotated when they're ejected from a gun."
+ - rscadd: "Bottles now have random rotations and pixel offsets when smashed via throwing."
+ - rscadd: "Picking up an item will now reset its rotation."
+ - rscadd: "Glasses thrown onto tables by bartenders will now have their rotation reset."
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 1d99a415df..03d6190507 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index f74ca2092d..904084adb5 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index d336887e21..2ed1783941 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 73f3065b4f..34d8374a42 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index c3eb8b995c..51a5a4e358 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index a64ba6468b..84155bfe43 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/monitors.dmi b/icons/obj/monitors.dmi
index f338ffcf3d..9880707010 100644
Binary files a/icons/obj/monitors.dmi and b/icons/obj/monitors.dmi differ
diff --git a/icons/obj/plushes.dmi b/icons/obj/plushes.dmi
index 0bf89ab744..08b6faba9b 100644
Binary files a/icons/obj/plushes.dmi and b/icons/obj/plushes.dmi differ
diff --git a/modular_citadel/code/datums/status_effects/debuffs.dm b/modular_citadel/code/datums/status_effects/debuffs.dm
index a57902d0cf..6dcfc84a87 100644
--- a/modular_citadel/code/datums/status_effects/debuffs.dm
+++ b/modular_citadel/code/datums/status_effects/debuffs.dm
@@ -1,5 +1,8 @@
/datum/status_effect/incapacitating/knockdown/on_creation(mob/living/new_owner, set_duration, updating_canmove, override_duration, override_stam)
if(iscarbon(new_owner) && (isnum(set_duration) || isnum(override_duration)))
+ if(istype(new_owner.buckled, /obj/vehicle/ridden))
+ var/obj/buckl = new_owner.buckled
+ buckl.unbuckle_mob(new_owner)
new_owner.resting = TRUE
new_owner.adjustStaminaLoss(isnull(override_stam)? set_duration*0.25 : override_stam)
if(isnull(override_duration) && (set_duration > 80))
diff --git a/modular_citadel/code/modules/arousal/arousal.dm b/modular_citadel/code/modules/arousal/arousal.dm
index 7ef696ee91..63ed811666 100644
--- a/modular_citadel/code/modules/arousal/arousal.dm
+++ b/modular_citadel/code/modules/arousal/arousal.dm
@@ -90,6 +90,24 @@
/mob/living/proc/updatearousal()
update_arousal_hud()
+/mob/living/carbon/updatearousal()
+ . = ..()
+ for(var/obj/item/organ/genital/G in internal_organs)
+ if(istype(G))
+ var/datum/sprite_accessory/S
+ switch(G.type)
+ if(/obj/item/organ/genital/penis)
+ S = GLOB.cock_shapes_list[G.shape]
+ if(/obj/item/organ/genital/vagina)
+ S = GLOB.vagina_shapes_list[G.shape]
+ if(/obj/item/organ/genital/breasts)
+ S = GLOB.breasts_shapes_list[G.shape]
+ if(S?.alt_aroused)
+ G.aroused_state = isPercentAroused(G.aroused_amount)
+ else
+ G.aroused_state = FALSE
+ G.update_appearance()
+
/mob/living/proc/update_arousal_hud()
return 0
@@ -175,6 +193,7 @@
"You have relieved yourself.")
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
setArousalLoss(min_arousal)
+ adjustStaminaLoss(40) //Refractory periods
/*
switch(gender)
if(MALE)
@@ -215,6 +234,7 @@
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
if(G.can_climax)
setArousalLoss(min_arousal)
+ adjustStaminaLoss(40) //Refractory periods
/mob/living/carbon/human/proc/mob_climax_outside(obj/item/organ/genital/G, mb_time = 30) //This is used for forced orgasms and other hands-free climaxes
@@ -252,6 +272,7 @@
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
if(G.can_climax)
setArousalLoss(min_arousal)
+ adjustStaminaLoss(40) //Refractory periods
/mob/living/carbon/human/proc/mob_climax_partner(obj/item/organ/genital/G, mob/living/L, spillage = TRUE, mb_time = 30) //Used for climaxing with any living thing
@@ -284,6 +305,7 @@
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
if(G.can_climax)
setArousalLoss(min_arousal)
+ adjustStaminaLoss(40) //Refractory periods
else //knots and other non-spilling orgasms
if(do_after(src, mb_time, target = src) && in_range(src, L))
fluid_source.trans_to(L, total_fluids)
@@ -295,6 +317,7 @@
SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
if(G.can_climax)
setArousalLoss(min_arousal)
+ adjustStaminaLoss(40) //Refractory periods
/mob/living/carbon/human/proc/mob_fill_container(obj/item/organ/genital/G, obj/item/reagent_containers/container, mb_time = 30) //For beaker-filling, beware the bartender
@@ -325,6 +348,7 @@
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm)
if(G.can_climax)
setArousalLoss(min_arousal)
+ adjustStaminaLoss(40) //Refractory periods
/mob/living/carbon/human/proc/pick_masturbate_genitals()
var/obj/item/organ/genital/ret_organ
diff --git a/modular_citadel/code/modules/arousal/organs/genitals.dm b/modular_citadel/code/modules/arousal/organs/genitals.dm
index b43f17e58a..c10d444f07 100644
--- a/modular_citadel/code/modules/arousal/organs/genitals.dm
+++ b/modular_citadel/code/modules/arousal/organs/genitals.dm
@@ -311,10 +311,6 @@
if(!S || S.icon_state == "none")
continue
var/mutable_appearance/genital_overlay = mutable_appearance(S.icon, layer = -layer)
- if(S.alt_aroused)
- G.aroused_state = H.isPercentAroused(G.aroused_amount)
- else
- G.aroused_state = FALSE
genital_overlay.icon_state = "[G.slot]_[S.icon_state]_[size]_[G.aroused_state]_[layertext]"
if(S.center)
diff --git a/modular_citadel/code/modules/arousal/organs/genitals_sprite_accessories.dm b/modular_citadel/code/modules/arousal/organs/genitals_sprite_accessories.dm
index 7c02b1c3a5..bcfa462789 100644
--- a/modular_citadel/code/modules/arousal/organs/genitals_sprite_accessories.dm
+++ b/modular_citadel/code/modules/arousal/organs/genitals_sprite_accessories.dm
@@ -100,6 +100,7 @@
/datum/sprite_accessory/breasts/pair
icon_state = "pair"
name = "Pair"
+ alt_aroused = TRUE
//OVIPOSITORS BE HERE
diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm
index a3df7d9f8e..66245fbb8a 100644
--- a/modular_citadel/code/modules/client/loadout/__donator.dm
+++ b/modular_citadel/code/modules/client/loadout/__donator.dm
@@ -365,6 +365,6 @@ datum/gear/darksabresheath
/datum/gear/soulneck
name = "Soul Necklace"
- category = SLOT_IN_BACKPACK
+ category = SLOT_NECK
path = /obj/item/clothing/neck/undertale
ckeywhitelist = list("twilightic")
\ No newline at end of file
diff --git a/modular_citadel/code/modules/client/loadout/backpack.dm b/modular_citadel/code/modules/client/loadout/backpack.dm
index 886a2d4df9..9f12dd8b03 100644
--- a/modular_citadel/code/modules/client/loadout/backpack.dm
+++ b/modular_citadel/code/modules/client/loadout/backpack.dm
@@ -18,6 +18,11 @@
category = SLOT_IN_BACKPACK
path = /obj/item/toy/plush/slimeplushie
+/datum/gear/plushlamp
+ name = "Lamp plushie"
+ category = SLOT_IN_BACKPACK
+ path = /obj/item/toy/plush/lampplushie
+
/datum/gear/tennis
name = "Classic Tennis Ball"
category = SLOT_IN_BACKPACK
diff --git a/modular_citadel/code/modules/mob/living/carbon/carbon.dm b/modular_citadel/code/modules/mob/living/carbon/carbon.dm
index cf5ce03bc7..8d6b4576c9 100644
--- a/modular_citadel/code/modules/mob/living/carbon/carbon.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/carbon.dm
@@ -3,6 +3,7 @@
var/lastmousedir
var/wrongdirmovedelay
var/lastdirchange
+ var/combatmessagecooldown
/mob/living/carbon/CanPass(atom/movable/mover, turf/target)
. = ..()
@@ -27,6 +28,9 @@
if(hud_used && hud_used.static_inventory)
for(var/obj/screen/combattoggle/selector in hud_used.static_inventory)
selector.rebasetointerbay(src)
+ if(world.time >= combatmessagecooldown && combatmode)
+ visible_message("[src] [resting ? "tenses up" : "drops into a combative stance"].")
+ combatmessagecooldown = 10 SECONDS + world.time //This is set 100% of the time to make sure squeezing regen out of process cycles doesn't result in the combat mode message getting spammed
SEND_SIGNAL(src, COMSIG_COMBAT_TOGGLED, src, combatmode)
return TRUE
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species.dm b/modular_citadel/code/modules/mob/living/carbon/human/species.dm
index 232725e320..1dd6276140 100644
--- a/modular_citadel/code/modules/mob/living/carbon/human/species.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/human/species.dm
@@ -1,3 +1,6 @@
+/datum/species
+ var/should_draw_citadel = FALSE
+
/datum/species/proc/alt_spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style)
if(!istype(M))
return TRUE
@@ -78,17 +81,8 @@
////////////////////
-/obj/item/bodypart/var/should_draw_citadel = FALSE
-
-/mob/living/carbon/proc/draw_citadel_parts(undo = FALSE)
- if(!undo)
- for(var/O in bodyparts)
- var/obj/item/bodypart/B = O
- B.should_draw_citadel = TRUE
- else
- for(var/O in bodyparts)
- var/obj/item/bodypart/B = O
- B.should_draw_citadel = FALSE
+/obj/item/bodypart
+ var/should_draw_citadel = FALSE
/datum/species/proc/citadel_mutant_bodyparts(bodypart, mob/living/carbon/human/H)
switch(bodypart)
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
index d7124d949c..16c5460174 100644
--- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
@@ -2,6 +2,7 @@
name = "Mammal"
id = "mammal"
default_color = "4B4B4B"
+ should_draw_citadel = TRUE
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR)
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "snout", "taur", "legs")
@@ -45,20 +46,13 @@
/datum/species/mammal/qualifies_for_rank(rank, list/features)
return TRUE
-/datum/species/mammal/on_species_gain(mob/living/carbon/human/C)
- C.draw_citadel_parts()
- . = ..()
-
-/datum/species/mammal/on_species_loss(mob/living/carbon/human/C)
- C.draw_citadel_parts(TRUE)
- . = ..()
-
//AVIAN//
/datum/species/avian
name = "Avian"
id = "avian"
say_mod = "chirps"
default_color = "BCAC9B"
+ should_draw_citadel = TRUE
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR)
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
mutant_bodyparts = list("snout", "wings", "taur", "mam_tail", "mam_body_markings", "taur")
@@ -99,19 +93,12 @@
/datum/species/avian/qualifies_for_rank(rank, list/features)
return TRUE
-/datum/species/avian/on_species_gain(mob/living/carbon/human/C)
- C.draw_citadel_parts()
- . = ..()
-
-/datum/species/avian/on_species_loss(mob/living/carbon/human/C)
- C.draw_citadel_parts(TRUE)
- . = ..()
-
//AQUATIC//
/datum/species/aquatic
name = "Aquatic"
id = "aquatic"
default_color = "BCAC9B"
+ should_draw_citadel = TRUE
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR)
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
mutant_bodyparts = list("mam_tail", "mam_body_markings", "mam_ears", "taur", "legs")
@@ -153,19 +140,12 @@
/datum/species/aquatic/qualifies_for_rank(rank, list/features)
return TRUE
-/datum/species/aquatic/on_species_gain(mob/living/carbon/human/C)
- C.draw_citadel_parts()
- . = ..()
-
-/datum/species/aquatic/on_species_loss(mob/living/carbon/human/C)
- C.draw_citadel_parts(TRUE)
- . = ..()
-
//INSECT//
/datum/species/insect
name = "Insect"
id = "insect"
default_color = "BCAC9B"
+ should_draw_citadel = TRUE
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR)
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG)
mutant_bodyparts = list("mam_body_markings", "mam_ears", "mam_tail", "taur", "moth_wings")
@@ -206,14 +186,6 @@
/datum/species/insect/qualifies_for_rank(rank, list/features)
return TRUE
-/datum/species/insect/on_species_gain(mob/living/carbon/human/C)
- C.draw_citadel_parts()
- . = ..()
-
-/datum/species/insect/on_species_loss(mob/living/carbon/human/C)
- C.draw_citadel_parts(TRUE)
- . = ..()
-
//Alien//
/datum/species/xeno
// A cloning mistake, crossing human and xenomorph DNA
@@ -221,6 +193,7 @@
id = "xeno"
say_mod = "hisses"
default_color = "00FF00"
+ should_draw_citadel = TRUE
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,DIGITIGRADE)
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "taur", "mam_body_markings")
@@ -235,7 +208,6 @@
liked_food = MEAT
/datum/species/xeno/on_species_gain(mob/living/carbon/human/C, datum/species/old_species)
- C.draw_citadel_parts()
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs")
species_traits += DIGITIGRADE
if(DIGITIGRADE in species_traits)
@@ -243,7 +215,6 @@
. = ..()
/datum/species/xeno/on_species_loss(mob/living/carbon/human/C, datum/species/new_species)
- C.draw_citadel_parts(TRUE)
if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Normal Legs")
species_traits -= DIGITIGRADE
if(DIGITIGRADE in species_traits)
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm
index 08d9d73f00..bbbe863ec2 100644
--- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/ipc.dm
@@ -3,6 +3,7 @@
id = "ipc"
say_mod = "beeps"
default_color = "00FF00"
+ should_draw_citadel = TRUE
blacklisted = 0
sexes = 0
species_traits = list(MUTCOLORS,NOEYES,NOTRANSSTING)
@@ -16,14 +17,12 @@
var/datum/action/innate/monitor_change/screen
/datum/species/ipc/on_species_gain(mob/living/carbon/human/C)
- C.draw_citadel_parts()
if(isipcperson(C) && !screen)
screen = new
screen.Grant(C)
..()
/datum/species/ipc/on_species_loss(mob/living/carbon/human/C)
- C.draw_citadel_parts(TRUE)
if(screen)
screen.Remove(C)
..()
diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index 59c4bc5ef1..d188b43083 100644
--- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -6,6 +6,7 @@
/datum/species/jelly/roundstartslime
name = "Slimeperson"
id = "slimeperson"
+ limbs_id = "slime"
default_color = "00FFFF"
species_traits = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD)
inherent_traits = list(TRAIT_TOXINLOVER)
@@ -19,14 +20,6 @@
heatmod = 1
burnmod = 1
-/datum/species/jelly/roundstartslime/on_species_gain(mob/living/carbon/human/C)
- C.draw_citadel_parts()
- . = ..()
-
-/datum/species/jelly/roundstartslime/on_species_loss(mob/living/carbon/human/C)
- C.draw_citadel_parts(TRUE)
- . = ..()
-
/datum/action/innate/slime_change
name = "Alter Form"
check_flags = AB_CHECK_CONSCIOUS
diff --git a/modular_citadel/icons/mob/clothing/trek_item_icon.dmi b/modular_citadel/icons/mob/clothing/trek_item_icon.dmi
index 4ac77773a0..86afe16b03 100644
Binary files a/modular_citadel/icons/mob/clothing/trek_item_icon.dmi and b/modular_citadel/icons/mob/clothing/trek_item_icon.dmi differ
diff --git a/modular_citadel/icons/mob/clothing/trek_mob_icon.dmi b/modular_citadel/icons/mob/clothing/trek_mob_icon.dmi
index 45045b0580..51daa8179f 100644
Binary files a/modular_citadel/icons/mob/clothing/trek_mob_icon.dmi and b/modular_citadel/icons/mob/clothing/trek_mob_icon.dmi differ
diff --git a/modular_citadel/icons/mob/mutant_bodyparts.dmi b/modular_citadel/icons/mob/mutant_bodyparts.dmi
index 8f3bfb3b87..7dcff09747 100644
Binary files a/modular_citadel/icons/mob/mutant_bodyparts.dmi and b/modular_citadel/icons/mob/mutant_bodyparts.dmi differ
diff --git a/modular_citadel/icons/mob/suit_digi.dmi b/modular_citadel/icons/mob/suit_digi.dmi
index 89284dbe52..95d03bb6d0 100644
Binary files a/modular_citadel/icons/mob/suit_digi.dmi and b/modular_citadel/icons/mob/suit_digi.dmi differ
diff --git a/modular_citadel/icons/mob/uniform_digi.dmi b/modular_citadel/icons/mob/uniform_digi.dmi
index 5d9f0ad235..c5ee6b1780 100644
Binary files a/modular_citadel/icons/mob/uniform_digi.dmi and b/modular_citadel/icons/mob/uniform_digi.dmi differ
diff --git a/modular_citadel/icons/obj/clothing/trek_item_icon.dmi b/modular_citadel/icons/obj/clothing/trek_item_icon.dmi
index 4ac77773a0..86afe16b03 100644
Binary files a/modular_citadel/icons/obj/clothing/trek_item_icon.dmi and b/modular_citadel/icons/obj/clothing/trek_item_icon.dmi differ
diff --git a/modular_citadel/icons/obj/genitals/breasts_onmob.dmi b/modular_citadel/icons/obj/genitals/breasts_onmob.dmi
index d0597e1a38..2a7342553b 100644
Binary files a/modular_citadel/icons/obj/genitals/breasts_onmob.dmi and b/modular_citadel/icons/obj/genitals/breasts_onmob.dmi differ
diff --git a/modular_citadel/sound/voice/bark1.ogg b/modular_citadel/sound/voice/bark1.ogg
new file mode 100644
index 0000000000..5d3853419f
Binary files /dev/null and b/modular_citadel/sound/voice/bark1.ogg differ
diff --git a/modular_citadel/sound/voice/bark2.ogg b/modular_citadel/sound/voice/bark2.ogg
new file mode 100644
index 0000000000..dab73c4743
Binary files /dev/null and b/modular_citadel/sound/voice/bark2.ogg differ
diff --git a/modular_citadel/sound/voice/raptor_purr.ogg b/modular_citadel/sound/voice/raptor_purr.ogg
new file mode 100644
index 0000000000..a1492718e5
Binary files /dev/null and b/modular_citadel/sound/voice/raptor_purr.ogg differ
diff --git a/sound/effects/slosh1.ogg b/sound/effects/slosh1.ogg
new file mode 100644
index 0000000000..4da76aac49
Binary files /dev/null and b/sound/effects/slosh1.ogg differ
diff --git a/sound/effects/slosh2.ogg b/sound/effects/slosh2.ogg
new file mode 100644
index 0000000000..9df0243c4c
Binary files /dev/null and b/sound/effects/slosh2.ogg differ
diff --git a/sound/music/rocketridersprayer.ogg b/sound/music/rocketridersprayer.ogg
new file mode 100644
index 0000000000..24d3beca3f
Binary files /dev/null and b/sound/music/rocketridersprayer.ogg differ
diff --git a/strings/names/clown.txt b/strings/names/clown.txt
index 8eec0990d0..d8655d7cbf 100644
--- a/strings/names/clown.txt
+++ b/strings/names/clown.txt
@@ -1,12 +1,25 @@
+Alfie
+Antsy
Baby Cakes
+Bam Bam
+Beebee
Bo Bo Sassy
Bonker
+Bonbon
Bubble
Buster Frown
+Buttercup
Button
Candy
Checkers
+Clarabell
+Clownsky
+Clueless
+Cluesky
+Dazzle
Dinky Doodle
+Doodles
+Duckie
Flop O'Honker
Freckle
Giggles
@@ -15,12 +28,18 @@ Goose McSunny
Honkel the III
Honker
Honkerbelle
+Knicknack
+Jazzy Bella
Jingle
+Joy
Jo Jo Bobo Bo
Ladybug Honks
+Lala
Miss Stockings
+Mittens
Mr Shoe
Patches
+Pancake
Pepinpop
Pocket
Razzle Dazzle
@@ -33,5 +52,11 @@ Slippy Joe
Sparkle
Speckles
Sprinkledinkle
+Squigley
+Tickle
+Topcake
Toodles Sharperton
-Ziggy Yoyo
\ No newline at end of file
+Trixy
+Witty
+Ziggy Yoyo
+Zippy
diff --git a/strings/phobia.json b/strings/phobia.json
index 3f56751333..e1ae1f4e13 100644
--- a/strings/phobia.json
+++ b/strings/phobia.json
@@ -257,6 +257,19 @@
"fowl"
],
+"cats": [
+ "mew",
+ "nya",
+ "moew",
+ "feline",
+ "cat",
+ "neko",
+ "viola",
+ "kitty",
+ "purr",
+ "headpat"
+ ],
+
"falling": [
"hold on",
"hang in there",
@@ -297,4 +310,4 @@
"ora",
"~"
]
-}
\ No newline at end of file
+}
diff --git a/strings/round_start_sounds.txt b/strings/round_start_sounds.txt
index 18fbb3f98f..a8409188fc 100644
--- a/strings/round_start_sounds.txt
+++ b/strings/round_start_sounds.txt
@@ -21,3 +21,4 @@ sound/music/indeep.ogg
sound/music/goodbyemoonmen.ogg
sound/music/flytothemoon_otomatone.ogg
sound/music/milkyway.ogg
+sound/music/rocketridersprayer.ogg
diff --git a/strings/tips.txt b/strings/tips.txt
index d389437158..9571527853 100644
--- a/strings/tips.txt
+++ b/strings/tips.txt
@@ -6,7 +6,7 @@ You can drag other players onto yourself to open the strip menu, letting you rem
Clicking on a windoor rather then bumping into it will keep it open, you can click it again to close it.
You can spray a fire extinguisher, throw items or fire a gun while floating through space to change your direction. Simply fire opposite to where you want to go.
You can change the control scheme by pressing tab. One is WASD, the other is the arrow keys. Keep in mind that hotkeys are also changed with this.
-All vending machines can be hacked to obtain some contraband items from them, and some can be fed with coins to gain access to premium items.
+All vending machines can be hacked to obtain some contraband items from them, and many can be fed with coins to gain access to premium items.
Firesuits and winter coats offer mild protection from the cold, allowing you to spend longer periods of time near breaches and space than if wearing nothing at all.
Glass shards can be welded to make glass, and metal rods can be welded to make metal. Ores can be welded too, but this takes a lot of fuel.
If you need to drag multiple people either to safety or to space, bring a locker or crate over and stuff them all in before hauling them off.
@@ -18,13 +18,16 @@ You can recolor certain items like jumpsuits and gloves in washing machines by a
Maintenance is full of equipment that is randomized every round. Look around and see if anything is worth using.
Some roles cannot be antagonists by default, but antag selection is decided first. For instance, you can set Security Officer to High without affecting your chances of becoming an antag -- the game will just select a different role.
There are many places around the station to hide contraband. A few for starters: linen boxes, toilet cisterns, body bags. Experiment to find more!
-On some maps, you can use a machine in the vault to deposit space cash for cargo points or rob cargo blind.
+On all maps, you can use a machine in the vault to deposit space cash for cargo points. Otherwise, use it to steal the station's cash and get out before the alarm goes off.
As the Captain, you are one of the highest priority targets on the station. Everything from revolutions, to nuclear operatives, to traitors that need to rob you of your unique lasgun or your life are things to worry about.
As the Captain, always take the nuclear disk and pinpointer with you every shift. It's a good idea to give one of these to another head you can trust with keeping it safe, such as the Head of Security.
As the Captain, you have absolute access and control over the station, but this does not mean that being a horrible person won't result in mutiny and a ban.
+As the Captain, you have a fancy pen that can be used as a holdout dagger or even as a scalpel in surgery!
As the Captain, you can purchase a new emergency shuttle using a communications console. Some require credits, while others give you credits in exchange. Keep in mind that purchasing dangerous shuttles will incur the ire of your crew.
As the Chief Medical Officer, your hypospray is like a refillable instant injection syringe that can hold 30 units as opposed to the standard 15.
As the Chief Medical Officer, coordinate and communicate with your doctors, chemists, and geneticists during a nuclear emergency, blob infestation, or some other crisis to keep people alive and fighting.
+As a Medical Doctor, pester Research for improved surgical tools. They work faster, don't cost much and are typically more deadly.
+As a Medical Doctor, your belt can hold a full set of surgical tools. Using sterilizine before each attempt during surgery will reduce your failure chance on tricky steps or when using less-than-optimal equipment.
As a Medical Doctor, you can attempt to drain blood from a husk with a syringe to determine the cause. If you can extract blood, it was caused by extreme temperatures or lasers, if there is no blood to extract, you have confirmed the presence of changelings.
As a Medical Doctor, while both heal toxin damage, the difference between charcoal and antitoxin is that charcoal will actively remove all other reagents from one's body, while antitoxin only removes various toxins - but can overdose.
As a Medical Doctor, you can surgically implant or extract things from people's chests. This can range from putting in a bomb to pulling out an alien larva.
@@ -38,24 +41,27 @@ As a Chemist, there are dozens of chemicals that can heal, and even more that ca
As a Chemist, some chemicals can only be synthesized by heating up the contents in the chemical heater.
As a Chemist, you will be expected to supply crew with certain chemicals. For example, clonexadone and mannitol for the cryo tubes, unstable mutagen and saltpetre for botany as well as healing pills and patches for the front desk.
As a Chemist, you can make 100u bottles from plastic sheets. The ChemMaster can produce infinite 30u glass bottles as well.
-As a Geneticist, you can eject someone from cloning early by disabling power in genetics. Note that they will suffer more genetic damage and may lose vital organs from this.
+As a Geneticist, you can eject someone from cloning early by clicking on the cloner pod with your ID. Note that they will suffer more genetic damage and may lose vital organs from this.
As a Geneticist, becoming a hulk makes you capable of dealing high melee damage, stunlocking people, and punching through walls. However, you can't fire guns, will lose your hulk status if you take too much damage, and are not considered a human by the AI while you are a hulk.
As the Virologist, your viruses can range from healing powers so great that you can heal out of critical status, or diseases so dangerous they can kill the entire crew with airborne spontaneous combustion. Experiment!
As the Virologist, you only require small amounts of vaccine to heal a sick patient. Work with the Chemist to distribute your cures more efficiently.
As the Research Director, you can take AIs out of their cores by loading them into an intelliCard, and then from there into an AI system integrity restorer computer to revive and/or repair them.
As the Research Director, you can lock down cyborgs instead of blowing them up. Then you can have their laws reset or if that doesn't work, safely dismantled.
+As the Research Director, you can upgrade your modular console with better computer parts to speed up its functions. This can be useful when using the AI system integrity restorer.
As the Research Director, your console's NTnet monitoring tool can be used to retrieve airlock passkeys, provided that someone used a door remote.
As a Scientist, you can use the mutation toxin obtained from green slimes to turn yourself into a jelly mutant. Each subspecies has unique features - for example telepathic powers, duplicating bodies or integrating slime extracts!
As a Scientist, you can maximize the number of uses you get out of a slime by feeding it slime steroid, created from purple slimes, while alive. You can then apply extract enhancer, created from cerulean slimes, on each extract.
-As a Scientist, you can disable anomalies by scanning them with an analyzer, then send a signal on the frequency it gives you with a remote signalling device. This will leave behind an anomaly core, which can be used to construct a Phazon mech!
+As a Scientist, you can disable anomalies by scanning them with an analyzer, then send a signal on the frequency it gives you with a remote signalling device. This will leave behind an anomaly core, which can be used to construct a Phazon mech, or be used in the destructive analyzer for a 10,000 point bonus!
As a Scientist, researchable stock parts can seriously improve the efficiency and speed of machines around the station. In some cases, it can even unlock new functions.
As a Scientist, you can generate research points by letting the tachyon-doppler array record increasingly large explosions.
As a Scientist, getting drunk just enough will speed up research. Skol!
+As a Scientist, you can get points by placing slime cores into the deconstructive analyzer! This even works with crossbred slime cores.
As a Roboticist, keep an ear out for anomaly announcements. If you get your hands on an anomaly core, you can build a Phazon mech!
As a Roboticist, you can repair your cyborgs with a welding tool. If they have taken burn damage from lasers, you can remove their battery, expose the wiring with a screwdriver and replace their wires with a cable coil.
As a Roboticist, you can reset a cyborg's module by cutting and mending the reset wire with a wire cutter.
As a Roboticist, you can greatly help out Shaft Miners by building a Firefighter APLU equipped with a hydraulic clamp and plasma cutter. The mech is ash storm proof and can even walk across lava!
As a Roboticist, you can augment people with cyborg limbs. Augmented limbs can easily be repaired with cables and welders.
+As a Roboticist, you can use your printer that is linked to the ore silo to teleport mats into your work place!
As the AI, you can click on people's names to look at them. This only works if there are cameras that can see them.
As the AI, you can quickly open and close doors by holding shift while clicking them, bolt them when holding ctrl, and even shock them while holding alt.
As the AI, you can take pictures with your camera and upload them to newscasters.
@@ -65,8 +71,9 @@ As a Cyborg, you are impervious to fires and heat. If you are rogue, you can rel
As a Cyborg, you are extremely vulnerable to EMPs as EMPs both stun you and damage you. The ion rifle in the armory or a traitor with an EMP kit can kill you in seconds.
As a Service Cyborg, your spray can knocks people down. However, it is blocked by gas masks.
As an Engineering Cyborg, you can attach air alarm/fire alarm/APC frames to walls by placing them on the floor and using a screwdriver on them.
-As a Medical Cyborg, you can fully perform surgery and even augment people.
+As a Medical Cyborg, you can fully perform surgery and even augment people. Best of all, they have a 0% failure chance.
As a Janitor Cyborg, you are the bane of all slaughter demons and even Bubblegum himself. Cleaning up blood stains will severely gimp them.
+As a Janitor Cyborg, you get a fancy bottle of drying agent! If you want to be nice, spray the janitor boots with them to magically upgrade them to absorbent galoshes.
As the Chief Engineer, you can rename areas or create entirely new ones using your station blueprints.
As the Chief Engineer, your hardsuit is significantly better than everybody else's. It has the best features of both engineering and atmospherics hardsuits - boasting nigh-invulnerability to radiation and all atmospheric conditions.
As the Chief Engineer, you can spy on and even forge PDA communications with the message monitor console! The key is in your office.
@@ -84,6 +91,7 @@ As an Engineer, you can use radiation collectors to generate research points. Lo
As an Engineer, don't underestimate the humble P.A.C.M.A.N. generators. With upgraded parts, a couple units working in tandem are sufficient to take over for an exploded engine or shattered solars.
As an Engineer, your departmental protolathe and circuit printer can manufacture the necessary circuit boards and components to build just about anything. Make extra medical machinery everywhere! Build a gibber for security! Set up an array of emitters pointing down the hall! The possibilities are endless!
As an Engineer, you can pry open secure storage by disabling the engine room APC's main breaker. This is obviously a bad idea if the engine is running.
+Don't forget that Cargo has access to a meteor defense satellite that can be ordered BEFORE meteors hit the station. Any idle Engineers should have this on their to-do list.
As an Engineer, your RCD can be reloaded with mineral sheets instead of just compressed matter cartridges.
As an Atmospheric Technician, you can unwrench a pipe regardless of the pressures of the gases inside, but if they're too high they can burst out and injure you!
As an Atmospheric Technician, look into replacing your gas pumps with volumetric gas pumps, as those move air in flat numerical amounts, rather than percentages which leave trace gases.
@@ -92,18 +100,31 @@ As an Atmospheric Technician, your backpack firefighter tank can launch resin. T
As an Atmospheric Technician, your ATMOS holofan projector blocks gases while allowing objects to pass through. With it, you can quickly contain gas spills, fires and hull breaches. Or, use it to seal a plasmaman cloning room.
As an Atmospheric Technician, burning a plasma/oxygen mix inside the incinerator will not only produce power, but also gases such as tritium and water vapor.
As an Atmospheric Technician, you can change the layer of a pipe by clicking with it on a wrenched pipe or other atmos component of the desired layer.
+As an Atmospheric Technician, you can take a few cans worth of N2/N2O and cool it down at local freezers. This is a good idea when dealing with (or preparing for) a supermatter meltdown.
As the Head of Security, you are expected to coordinate your security force to handle any threat that comes to the station. Sometimes it means making use of the armory to handle a blob, sometimes it means being ruthless during a revolution or cult.
As the Head of Security, you can call for executions or forced cyborgization, but may require the Captain's approval.
As the Head of Security, don't let the power go to your head. You may have high access, great equipment, and a miniature army at your side, but being a terrible person without a good reason is grounds for banning.
As the Warden, your duty is to be the watchdog of the brig and handler of prisoners when little is happening, and to hand out equipment and weapons to the security officers when a crisis strikes.
As the Warden, keep a close eye on the armory at all times, as it is a favored strike point of nuclear operatives and cocky traitors.
As the Warden, if a prisoner's crimes are heinous enough you can put them in permabrig or the gulag. Make sure to check on them once in a while!
+As the Warden, never underestimate the power of tech slugs! Scattershot fires a cone of weaker lasers, Ion slugs fires EMPs that only effect the tiles they hit, and Pulse slugs fire a singular laser that can one-hit almost any wall!
+As the Warden, you can use a surgical saw on riot shotguns to shorten the barrel, making them able to fit in your backpack.
As the Warden, you can implant criminals you suspect might re-offend with devices that will track their location and allow you to remotely inject them with disabling chemicals.
As the Warden, you can use handcuffs on orange prisoner shoes to turn them into cuffed shoes, forcing prisoners to walk and potentially thwarting an escape.
+As the Warden, tracker implants can be used on sec officers. Doing this will let you track their corpse even without suits, though the implant will biodegrade after 5 minutes.
+As the Warden, cryostasis shotgun darts hold 10u of chemicals that will not react untill it hits someone.
+As the Warden, chemical implants can be loaded with a cocktail of healing or combat chems, perfect for the Hos or other sec officers to use. Be sure to keep a eye on them though, it will not auto inject! EMPs or starvation mite lead to the chemical implant to go off as well.
+As the Warden, tracker implants can be used on sec officers. Doing this will let you be able to message them when telecoms are out, or when you suspect coms are compromised. This is also good against rogue AIs as the prisoner tracker doesn't leave logs or alarms for the AI.
+As a Security Officer, remember that correlation does not equal causation. Someone may have just been at the wrong place at the wrong time!
+As a Security Officer, remember that your belt can hold more then one stun baton.
+As a Security Officer, remember harm battoning someone in the head can deconvert them form a being a rev! This sadly doesn't work against the cult, nor does this protect them from getting reconverted.
+As a Security Officer, remember that you can attach a sec-lite to your taser or your helmet!
As a Security Officer, communicate and coordinate with your fellow officers using the security channel (:s) to avoid confusion.
As a Security Officer, your sechuds or HUDsunglasses can not only see crewmates' job assignments and criminal status, but also if they are mindshield implanted. Use this to your advantage in a revolution to definitively tell who is on your side!
As a Security Officer, mindshield implants can only prevent someone from being turned into a cultist: unlike revolutionaries, it will not de-cult them if they have already been converted.
As a Security Officer, examining someone while wearing sechuds or HUDsunglasses will let you set their arrest level, which will cause Beepsky and other security bots to chase after them.
+As a Security Officer, you can take out the power cell on your baton to replace it with a better or fully charged one. Just use a screwdriver on your baton to remove the old cell
+As a Security Officer, you can place riot shotguns on your armor, this even works with winter sec coats!
As the Detective, people leave fingerprints everywhere and on everything. With the exception of white latex, gloves will hide them. All is not lost, however, as gloves leave fibers specific to their kind such as black or nitrile, pointing to a general department.
As the Detective, you can use your forensics scanner from a distance.
As the Detective, your revolver can be loaded with .357 ammunition obtained from a hacked autolathe. Firing it has a decent chance to blow up your revolver.
@@ -119,6 +140,8 @@ As the Clown, eating bananas heals you slightly. Honk!
As the Clown, your Holy Grail is the mineral bananium, which can be given to the Roboticist to build you a fun and robust mech beloved by everyone.
As the Clown, you can use your stamp on a sheet of cardboard as the first step of making a honkbot. Fun for the whole crew!
As the Chaplain, your null rod has a lot of functions: it can convert water into holy water, which if spread on the ground prevents wizards from jaunting away, can destroy cultist runes by hitting them, and is a very powerful weapon to boot!
+The Chaplain can bless any container with water by hitting it with their bible. Holy water has a myriad of uses against both cults and large amounts of it are a great contributor to success against them.
+The Chaplain's holy weapon will kill clockwork marauders in two hits.
As the Chaplain, your bible is also a container that can store small items. Depending on your god, your starting bible may come with a surprise!
As the Chaplain, you are much more likely to get a response by praying to the gods than most people. To boost your chances, make altars with colorful crayon runes, lit candles, and wire art.
As a Botanist, you can hack the MegaSeed Vendor to get access to more exotic seeds. These seeds can alternatively be ordered from cargo.
@@ -129,15 +152,20 @@ As a Cook, you can load your food into snack vending machines.
As a Cook, you can rename your custom made food with a pen.
As a Cook, any food you make will be much healthier than the junk food found in vendors. Having the crew routinely eating from you will provide minor buffs.
As a Cook, being in the kitchen will make you remember the basics of Close Quarters Cooking. It is highly effective at removing Assistants from your workplace.
+As a Cook, your Kitchenmate can vend out trays that fit on your belt slot. These trays pick up 7 food items at a time and are a quick way to transport large meals.
+As a Cook, the advanced roasting stick is used to cook food at a distance, and can be used on SME, singularity, and other objects that cook food normally.
As the Bartender, the drinks you start with only give you the basics. If you want more advanced mixtures, look into working with chemistry, hydroponics, or even mining for things to grind up and throw in!
As the Bartender, you can use a circular saw on your shotgun to make it easier to store.
As a Janitor, if someone steals your janicart, you can instead use your space cleaner spray, grenades, water sprayer, exact bloody revenge or order another from Cargo.
+As a Janitor, the trash bag can be used to hold more than trash. Tools, medical equipment, smuggled nuclear disks... You name it!
As a Janitor, mousetraps can be used to create bombs or booby-trap containers.
-As the Curator, you are not completely defenseless. Your whip easily disarms people, your laser pointer can blind humans and cyborgs, and you can hide items in wirecut books.
+Beware the Curator, for they are not completely defenseless. The curator's whip always disarms people, their laser pointer can blind humans and cyborgs, and can hide items in wirecut books.
As the Curator, be sure to keep the shelves stocked and the library clean for crew.
As a Cargo Technician, you can hack MULEbots to make them faster, run over people in their way, and even let you ride them!
As a Cargo Technician, you can order contraband items from the supply shuttle console by de-constructing it and using a multitool on the circuit board, the re-assembling it.
As a Cargo Technician, you can earn more cargo points by shipping back crates from maintenance, liquid containers, plasma sheets, rare seeds from hydroponics, and more!
+As a Cargo Technician, you get 400 points per packet! Stamp the manifest and sending back the crate will give you 200 points for the paperwork and 200 points for the crate!
+As a Cargo Technician, paperwork is an alternative option to shipping off plasma sheets and other goods. Order Paperwork crates and go into the crafting menu to turn pens and undone paper work into completed grant paper work to get 50 points per sheet!
As the Quartermaster, be sure to check the manifests on crates you receive to make sure all the info is correct. If there's a mistake, stamp the manifest DENIED and send it back in a crate with the items untouched for a refund!
As the Quartermaster, you can construct an express supply console that instantly delivers crates by drop pod. The impact will cause a small explosion as well.
As a Shaft Miner, the northern side of Lavaland has a lot more rare minerals than on the south.
@@ -161,6 +189,9 @@ As a Monkey, you can still wear a few human items, such as backpacks, gas masks
As the Malfunctioning AI, you can shunt to an APC if the situation gets bad. This disables your doomsday device if it is active.
As the Malfunctioning AI, you should either order your cyborgs to dismantle the robotics console or blow it up yourself in order to protect them.
As the Malfunctioning AI, look into flooding the station with plasma fires to kill off large portions of the crew, letting you pick off the remaining few with space suits who escaped.
+Xenomorphs? Science can craft deadly tech shells like pulse slugs and laser scatter shot that are highly effective against any alien threat.
+When fighting aliens, it can be a good idea to turn off the gravity due to the alien's lack of zero-gravity control.
+When fighting xenomorph aliens, consider a shield. Shields can block their pounces and be worn on the back, but beware of neurotoxin.
As an Alien, your melee prowess is unmatched, but your ranged abilities are sorely lacking. Make use of corners to force a melee confrontation!
As an Alien, you take double damage from all burn attacks, such as lasers, welding tools, and fires. Furthermore, fire can destroy your resin and eggs. Expose areas to space to starve away any flamethrower fires before they can do damage!
As an Alien, resin floors not only regenerate your plasma supply, but also passively heal you. Fight on resin floors to gain a home turf advantage!
@@ -180,6 +211,7 @@ As the Blob, talking will send a message to all other overminds and all Blobbern
As a Blobbernaut, you can communicate with overminds and other Blobbernauts via :b.
As a Blobbernaut, your HUD shows your health and the core health of the overmind that created you.
As a Revolutionary, you cannot convert a head of staff or someone who has a mindshield implant, such as a security officer or those they implant. Implants can however be surgically removed, and do not carry over with cloning. Take control of medbay to keep control of conversions!
+During a revolution, you cannot convert someone with brain damage, making an un-upgraded cloner a makeshift deconversion device.
As a Revolutionary, cargo can be your best friend or your worst nightmare. In the best case scenario you will be able to order a limitless amount of guns and armor, in the worst case scenario security will take control and order a limitless number of mindshield implants to turn your fellow revolutionaries against you.
As a Revolutionary, your main power comes from how quickly you spread. Convert people as fast as you can and overwhelm the heads of staff before security can arm up.
As a Changeling, the Extract DNA sting counts for your genome absorb objective, but does not let you respec your powers.
@@ -199,8 +231,6 @@ As a Servant, converting or sabotaging Science and Genetics can make defending t
As a Servant, the Clockwork Armaments scripture allows you to summon armor and/or a weapon at will. Use it whenever you unlock it!
You can deconvert Cultists of Nar-Sie and Servants of Ratvar by feeding them large amounts of holy water. Unlike revolutionaries, implanting them with mindshield implants won't do it!
Tiles sprayed with holy water will permanently block Servants of Ratvar from teleporting onto them.
-The Chaplain can bless any container with water by hitting it with their bible. Holy water has a myriad of uses against both cults and large amounts of it are a great contributor to success against them.
-The Chaplain's holy weapon will kill clockwork marauders in two hits.
As a Wizard, you can turn people to stone, then animate the resulting statue with a staff of animation to create an extremely powerful minion, for all of 5 minutes at least.
As a Wizard, the fireball spell performs very poorly at close range, as it can easily catch you in the blast. It is best used as a form of artillery down long hallways.
As a Wizard, summoning guns will turn a large portion of the crew against themselves, but will also give everyone anything from a pea shooter to a BFG 9000. Use at your own risk!
@@ -217,17 +247,19 @@ As a Revenant, your Malfunction ability in general damages machinery and mechani
As a Revenant, the illness inflicted on humans by Blight can be easily cured by lying down or with holy water, making it best used on targets that have no time to lie down, such as humans in combat.
As a Swarmer, you can deconstruct more things than you think. Try deconstructing light switches, buttons, air alarms and more. Experiment!
As a Swarmer, you can teleport fellow swarmers away if you think they are in danger.
+As a Swarmer, you are weak to EMP and lasers. Upon death, you will drop a bluespace crystal.
+As a Swarmer, use your ability to consume guns and other weapons to disarm the crew to keep your numbers high!
As a Morph, you can talk while disguised, but your words have a chance of being slurred, giving you away!
As a Drone, you can ping other drones to alert them of areas in the station in need of repair.
+As a Drone, you can repair yourself by using a screwdriver on yourself and standing still!
As a Ghost, you can see the inside of a container on the ground by clicking on it.
As a Ghost, you can double click on just about anything to follow it. Or just warp around!
As a Devil, you gain power for every three souls you control, however you also become more obvious.
As a Devil, as long as you control at least one other soul, you will automatically resurrect, as long as a banishment ritual is not performed.
At which time a Devil's nameth is spake on the tongue of man, the Devil may appeareth.
-As a Security Officer, remember that correlation does not equal causation. Someone may have just been at the wrong place at the wrong time!
-As a Security Officer, remember that you can attach a sec-lite to your taser or your helmet!
You can swap floor tiles by holding a crowbar in one hand and a stack of tiles in the other.
When hacking doors, cutting and mending the "test light wire" will restore power to the door.
When crafting most items, you can either manually combine parts or use the crafting menu.
Suit storage units not only remove blood and dirt from clothing, but also radiation!
Remote devices will work when used through cameras. For example: Bluespace RPEDs and door remotes.
+Laser pointers can be upgraded by replacing its micro laser with a better one from RnD! Use a screwdriver on it to remove the old laser. Upgrading the laser pointer gives you better odds of stunning a cyborg, and even blinding people with sunglasses.