diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm
index dc321bf63d..6fd9fc7818 100644
--- a/code/__DEFINES/status_effects.dm
+++ b/code/__DEFINES/status_effects.dm
@@ -30,6 +30,8 @@
#define STATUS_EFFECT_EXERCISED /datum/status_effect/exercised //Prevents heart disease
+#define STATUS_EFFECT_HIPPOCRATIC_OATH /datum/status_effect/hippocraticOath //Gives you an aura of healing as well as regrowing the Rod of Asclepius if lost
+
/////////////
// DEBUFFS //
/////////////
diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm
index 6487d3f8b1..3ea850260a 100644
--- a/code/controllers/subsystem/traumas.dm
+++ b/code/controllers/subsystem/traumas.dm
@@ -11,7 +11,7 @@ SUBSYSTEM_DEF(traumas)
#define PHOBIA_FILE "phobia.json"
/datum/controller/subsystem/traumas/Initialize()
- phobia_types = list("spiders", "space", "security", "clowns", "greytide", "lizards",
+ phobia_types = list("spiders", "space", "security", "clowns", "greytide", "lizards",
"skeletons", "snakes", "robots", "doctors", "authority", "the supernatural",
"aliens", "strangers")
@@ -37,33 +37,35 @@ SUBSYSTEM_DEF(traumas)
"lizards" = typecacheof(list(/mob/living/simple_animal/hostile/lizard)),
"skeletons" = typecacheof(list(/mob/living/simple_animal/hostile/skeleton)),
"snakes" = typecacheof(list(/mob/living/simple_animal/hostile/retaliate/poison/snake)),
- "robots" = typecacheof(list(/mob/living/silicon/robot, /mob/living/silicon/ai,
+ "robots" = typecacheof(list(/mob/living/silicon/robot, /mob/living/silicon/ai,
/mob/living/simple_animal/drone, /mob/living/simple_animal/bot, /mob/living/simple_animal/hostile/swarmer)),
"doctors" = typecacheof(list(/mob/living/simple_animal/bot/medbot)),
- "the supernatural" = typecacheof(list(/mob/living/simple_animal/hostile/construct,
- /mob/living/simple_animal/hostile/clockwork, /mob/living/simple_animal/drone/cogscarab,
+ "the supernatural" = typecacheof(list(/mob/living/simple_animal/hostile/construct,
+ /mob/living/simple_animal/hostile/clockwork, /mob/living/simple_animal/drone/cogscarab,
/mob/living/simple_animal/revenant, /mob/living/simple_animal/shade)),
"aliens" = typecacheof(list(/mob/living/carbon/alien, /mob/living/simple_animal/slime)),
"conspiracies" = typecacheof(list(/mob/living/simple_animal/bot/secbot, /mob/living/simple_animal/bot/ed209, /mob/living/simple_animal/drone))
)
- phobia_objs = list("spiders" = typecacheof(list(/obj/structure/spider)),
-
+ phobia_objs = list("snakes" = typecacheof(list(/obj/item/rod_of_asclepius)),
+
+ "spiders" = typecacheof(list(/obj/structure/spider)),
+
"security" = typecacheof(list(/obj/item/clothing/under/rank/security, /obj/item/clothing/under/rank/warden,
/obj/item/clothing/under/rank/head_of_security, /obj/item/clothing/under/rank/det,
/obj/item/melee/baton, /obj/item/gun/energy/taser, /obj/item/restraints/handcuffs,
/obj/machinery/door/airlock/security)),
-
+
"clowns" = typecacheof(list(/obj/item/clothing/under/rank/clown, /obj/item/clothing/shoes/clown_shoes,
/obj/item/clothing/mask/gas/clown_hat, /obj/item/device/instrument/bikehorn,
/obj/item/device/pda/clown, /obj/item/grown/bananapeel)),
-
+
"greytide" = typecacheof(list(/obj/item/clothing/under/color/grey, /obj/item/melee/baton/cattleprod,
/obj/item/twohanded/spear, /obj/item/clothing/mask/gas)),
-
+
"lizards" = typecacheof(list(/obj/item/toy/plush/lizardplushie, /obj/item/reagent_containers/food/snacks/kebab/tail,
/obj/item/organ/tail/lizard, /obj/item/reagent_containers/food/drinks/bottle/lizardwine)),
-
+
"skeletons" = typecacheof(list(/obj/item/organ/tongue/bone, /obj/item/clothing/suit/armor/bone, /obj/item/stack/sheet/bone,
/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton,
/obj/effect/decal/remains/human)),
@@ -79,54 +81,54 @@ SUBSYSTEM_DEF(traumas)
/obj/item/clothing/suit/space/hardsuit/ert, /obj/item/clothing/suit/space/hardsuit/ert/sec,
/obj/item/clothing/suit/space/hardsuit/ert/engi, /obj/item/clothing/suit/space/hardsuit/ert/med,
/obj/item/clothing/suit/space/hardsuit/deathsquad, /obj/item/clothing/head/helmet/space/hardsuit/deathsquad,
- /obj/machinery/door/airlock/centcom)),
- "robots" = typecacheof(list(/obj/machinery/computer/upload, /obj/item/aiModule/, /obj/machinery/recharge_station,
+ /obj/machinery/door/airlock/centcom)),
+ "robots" = typecacheof(list(/obj/machinery/computer/upload, /obj/item/aiModule/, /obj/machinery/recharge_station,
/obj/item/device/aicard, /obj/item/device/deactivated_swarmer, /obj/effect/mob_spawn/swarmer)),
-
- "doctors" = typecacheof(list(/obj/item/clothing/under/rank/medical, /obj/item/clothing/under/rank/chemist,
- /obj/item/clothing/under/rank/nursesuit, /obj/item/clothing/under/rank/chief_medical_officer,
- /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/pill/, /obj/item/reagent_containers/hypospray,
- /obj/item/storage/firstaid, /obj/item/storage/pill_bottle, /obj/item/device/healthanalyzer,
- /obj/structure/sign/departments/medbay, /obj/machinery/door/airlock/medical, /obj/machinery/sleeper,
+
+ "doctors" = typecacheof(list(/obj/item/clothing/under/rank/medical, /obj/item/clothing/under/rank/chemist,
+ /obj/item/clothing/under/rank/nursesuit, /obj/item/clothing/under/rank/chief_medical_officer,
+ /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/pill/, /obj/item/reagent_containers/hypospray,
+ /obj/item/storage/firstaid, /obj/item/storage/pill_bottle, /obj/item/device/healthanalyzer,
+ /obj/structure/sign/departments/medbay, /obj/machinery/door/airlock/medical, /obj/machinery/sleeper,
/obj/machinery/dna_scannernew, /obj/machinery/atmospherics/components/unary/cryo_cell, /obj/item/surgical_drapes,
/obj/item/retractor, /obj/item/hemostat, /obj/item/cautery, /obj/item/surgicaldrill, /obj/item/scalpel, /obj/item/circular_saw)),
-
- "authority" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/head_of_personnel,
- /obj/item/clothing/under/rank/head_of_security, /obj/item/clothing/under/rank/research_director,
- /obj/item/clothing/under/rank/chief_medical_officer, /obj/item/clothing/under/rank/chief_engineer,
- /obj/item/clothing/under/rank/centcom_officer, /obj/item/clothing/under/rank/centcom_commander,
- /obj/item/melee/classic_baton/telescopic, /obj/item/card/id/silver, /obj/item/card/id/gold,
+
+ "authority" = typecacheof(list(/obj/item/clothing/under/rank/captain, /obj/item/clothing/under/rank/head_of_personnel,
+ /obj/item/clothing/under/rank/head_of_security, /obj/item/clothing/under/rank/research_director,
+ /obj/item/clothing/under/rank/chief_medical_officer, /obj/item/clothing/under/rank/chief_engineer,
+ /obj/item/clothing/under/rank/centcom_officer, /obj/item/clothing/under/rank/centcom_commander,
+ /obj/item/melee/classic_baton/telescopic, /obj/item/card/id/silver, /obj/item/card/id/gold,
/obj/item/card/id/captains_spare, /obj/item/card/id/centcom, /obj/machinery/door/airlock/command)),
-
- "the supernatural" = typecacheof(list(/obj/structure/destructible/cult, /obj/item/tome,
- /obj/item/melee/cultblade, /obj/item/twohanded/required/cult_bastard, /obj/item/restraints/legcuffs/bola/cult,
- /obj/item/clothing/suit/cultrobes, /obj/item/clothing/suit/space/hardsuit/cult,
- /obj/item/clothing/suit/hooded/cultrobes, /obj/item/clothing/head/hooded/cult_hoodie, /obj/effect/rune,
- /obj/item/stack/sheet/runed_metal, /obj/machinery/door/airlock/cult, /obj/singularity/narsie,
+
+ "the supernatural" = typecacheof(list(/obj/structure/destructible/cult, /obj/item/tome,
+ /obj/item/melee/cultblade, /obj/item/twohanded/required/cult_bastard, /obj/item/restraints/legcuffs/bola/cult,
+ /obj/item/clothing/suit/cultrobes, /obj/item/clothing/suit/space/hardsuit/cult,
+ /obj/item/clothing/suit/hooded/cultrobes, /obj/item/clothing/head/hooded/cult_hoodie, /obj/effect/rune,
+ /obj/item/stack/sheet/runed_metal, /obj/machinery/door/airlock/cult, /obj/singularity/narsie,
/obj/item/device/soulstone,
- /obj/structure/destructible/clockwork, /obj/item/clockwork, /obj/item/clothing/suit/armor/clockwork,
- /obj/item/clothing/glasses/judicial_visor, /obj/effect/clockwork/sigil/, /obj/item/stack/tile/brass,
+ /obj/structure/destructible/clockwork, /obj/item/clockwork, /obj/item/clothing/suit/armor/clockwork,
+ /obj/item/clothing/glasses/judicial_visor, /obj/effect/clockwork/sigil/, /obj/item/stack/tile/brass,
/obj/machinery/door/airlock/clockwork,
- /obj/item/clothing/suit/wizrobe, /obj/item/clothing/head/wizard, /obj/item/spellbook, /obj/item/staff,
+ /obj/item/clothing/suit/wizrobe, /obj/item/clothing/head/wizard, /obj/item/spellbook, /obj/item/staff,
/obj/item/clothing/suit/space/hardsuit/shielded/wizard, /obj/item/clothing/suit/space/hardsuit/wizard,
/obj/item/gun/magic/staff, /obj/item/gun/magic/wand,
/obj/item/nullrod, /obj/item/clothing/under/rank/chaplain)),
-
+
"aliens" = typecacheof(list(/obj/item/clothing/mask/facehugger, /obj/item/organ/body_egg/alien_embryo,
/obj/structure/alien, /obj/item/toy/toy_xeno,
- /obj/item/clothing/suit/armor/abductor, /obj/item/device/abductor, /obj/item/gun/energy/alien,
+ /obj/item/clothing/suit/armor/abductor, /obj/item/device/abductor, /obj/item/gun/energy/alien,
/obj/item/abductor_baton, /obj/item/device/radio/headset/abductor, /obj/item/scalpel/alien, /obj/item/hemostat/alien,
/obj/item/retractor/alien, /obj/item/circular_saw/alien, /obj/item/surgicaldrill/alien, /obj/item/cautery/alien,
- /obj/item/clothing/head/helmet/abductor, /obj/structure/bed/abductor, /obj/structure/table_frame/abductor,
+ /obj/item/clothing/head/helmet/abductor, /obj/structure/bed/abductor, /obj/structure/table_frame/abductor,
/obj/structure/table/abductor, /obj/structure/table/optable/abductor, /obj/structure/closet/abductor, /obj/item/organ/heart/gland,
- /obj/machinery/abductor, /obj/item/crowbar/abductor, /obj/item/screwdriver/abductor, /obj/item/weldingtool/abductor,
+ /obj/machinery/abductor, /obj/item/crowbar/abductor, /obj/item/screwdriver/abductor, /obj/item/weldingtool/abductor,
/obj/item/wirecutters/abductor, /obj/item/wrench/abductor, /obj/item/stack/sheet/mineral/abductor))
)
phobia_turfs = list("space" = typecacheof(list(/turf/open/space, /turf/open/floor/holofloor/space, /turf/open/floor/fakespace)),
- "the supernatural" = typecacheof(list(/turf/open/floor/clockwork, /turf/closed/wall/clockwork,
+ "the supernatural" = typecacheof(list(/turf/open/floor/clockwork, /turf/closed/wall/clockwork,
/turf/open/floor/plasteel/cult, /turf/closed/wall/mineral/cult)),
- "aliens" = typecacheof(list(/turf/open/floor/plating/abductor, /turf/open/floor/plating/abductor2,
+ "aliens" = typecacheof(list(/turf/open/floor/plating/abductor, /turf/open/floor/plating/abductor2,
/turf/open/floor/mineral/abductor, /turf/closed/wall/mineral/abductor))
)
@@ -135,7 +137,7 @@ SUBSYSTEM_DEF(traumas)
"conspiracies" = typecacheof(list(/datum/species/abductor, /datum/species/lizard, /datum/species/synth)),
"robots" = typecacheof(list(/datum/species/android)),
"the supernatural" = typecacheof(list(/datum/species/golem/clockwork, /datum/species/golem/runic)),
- "aliens" = typecacheof(list(/datum/species/abductor, /datum/species/jelly, /datum/species/pod,
+ "aliens" = typecacheof(list(/datum/species/abductor, /datum/species/jelly, /datum/species/pod,
/datum/species/shadow))
)
diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm
index b202ef3647..4457ff3ebd 100644
--- a/code/datums/status_effects/buffs.dm
+++ b/code/datums/status_effects/buffs.dm
@@ -450,3 +450,93 @@
/datum/status_effect/exercised/Destroy()
. = ..()
STOP_PROCESSING(SSprocessing, src)
+
+//Hippocratic Oath: Applied when the Rod of Asclepius is activated.
+/datum/status_effect/hippocraticOath
+ id = "Hippocratic Oath"
+ status_type = STATUS_EFFECT_UNIQUE
+ duration = -1
+ tick_interval = 25
+ examine_text = "They seem to have an aura of healing and helpfulness about them."
+ alert_type = null
+ var/hand
+ var/deathTick = 0
+
+/datum/status_effect/hippocraticOath/on_apply()
+ //Makes the user passive, it's in their oath not to harm!
+ owner.add_trait(TRAIT_PACIFISM, "hippocraticOath")
+ var/datum/atom_hud/H = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
+ H.add_hud_to(owner)
+ return ..()
+
+/datum/status_effect/hippocraticOath/on_remove()
+ owner.remove_trait(TRAIT_PACIFISM, "hippocraticOath")
+ var/datum/atom_hud/H = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
+ H.remove_hud_from(owner)
+
+/datum/status_effect/hippocraticOath/tick()
+ if(owner.stat == DEAD)
+ if(deathTick < 4)
+ deathTick += 1
+ else
+ owner.visible_message("[owner]'s soul is absorbed into the rod, releaving the previous snake of it's duty.")
+ var/mob/living/simple_animal/hostile/retaliate/poison/snake/healSnake = new(owner.loc)
+ var/list/chems = list("bicaridine", "salbutamol", "kelotane", "antitoxin")
+ healSnake.poison_type = pick(chems)
+ healSnake.name = "Asclepius's Snake"
+ healSnake.real_name = "Asclepius's Snake"
+ healSnake.desc = "A mystical snake previously trapped upon the Rod of Asclepius, now freed of its burden. Unlike the average snake, its bites contain chemicals with minor healing properties."
+ new /obj/effect/decal/cleanable/ash(owner.loc)
+ new /obj/item/rod_of_asclepius(owner.loc)
+ qdel(owner)
+ else
+ if(iscarbon(owner))
+ var/mob/living/carbon/itemUser = owner
+ var/obj/item/heldItem = itemUser.get_item_for_held_index(hand)
+ if(heldItem == null || heldItem.type != /obj/item/rod_of_asclepius) //Checks to make sure the rod is still in their hand
+ var/obj/item/rod_of_asclepius/newRod = new(itemUser.loc)
+ newRod.activated()
+ if(!itemUser.has_hand_for_held_index(hand))
+ //If user does not have the corresponding hand anymore, give them one and return the rod to their hand
+ if(((hand % 2) == 0))
+ var/obj/item/bodypart/L = itemUser.newBodyPart("r_arm", FALSE, FALSE)
+ L.attach_limb(itemUser)
+ itemUser.put_in_r_hand(newRod)
+ else
+ var/obj/item/bodypart/L = itemUser.newBodyPart("l_arm", FALSE, FALSE)
+ L.attach_limb(itemUser)
+ itemUser.put_in_l_hand(newRod)
+ to_chat(itemUser, "Your arm suddenly grows back with the Rod of Asclepius still attached!")
+ else
+ //Otherwise get rid of whatever else is in their hand and return the rod to said hand
+ itemUser.dropItemToGround(itemUser.get_item_for_held_index(hand))
+ if(((hand % 2) == 0))
+ itemUser.put_in_r_hand(newRod)
+ else
+ itemUser.put_in_l_hand(newRod)
+ to_chat(itemUser, "The Rod of Asclepius suddenly grows back out of your arm!")
+ //Because a servant of medicines stops at nothing to help others, lets keep them on their toes and give them an additional boost.
+ if(itemUser.health < itemUser.maxHealth)
+ new /obj/effect/temp_visual/heal(get_turf(itemUser), "#375637")
+ itemUser.adjustBruteLoss(-1.5)
+ itemUser.adjustFireLoss(-1.5)
+ itemUser.adjustToxLoss(-1.5, forced = TRUE) //Because Slime People are people too
+ itemUser.adjustOxyLoss(-1.5)
+ itemUser.adjustStaminaLoss(-1.5)
+ itemUser.adjustBrainLoss(-1.5)
+ itemUser.adjustCloneLoss(-0.5) //Becasue apparently clone damage is the bastion of all health
+ //Heal all those around you, unbiased
+ for(var/mob/living/L in view(7, owner))
+ if(L.health < L.maxHealth)
+ new /obj/effect/temp_visual/heal(get_turf(L), "#375637")
+ if(iscarbon(L))
+ L.adjustBruteLoss(-3.5)
+ L.adjustFireLoss(-3.5)
+ L.adjustToxLoss(-3.5, forced = TRUE) //Because Slime People are people too
+ L.adjustOxyLoss(-3.5)
+ L.adjustStaminaLoss(-3.5)
+ L.adjustBrainLoss(-3.5)
+ L.adjustCloneLoss(-1) //Becasue apparently clone damage is the bastion of all health
+ else
+ var/mob/living/simple_animal/SM = L
+ SM.adjustHealth(-3.5, forced = TRUE)
\ No newline at end of file
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 450c2d5d0d..7f3870e418 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -33,7 +33,7 @@
else
new /obj/item/disk/design_disk/modkit_disc/rapid_repeater(src)
if(9)
- new /obj/item/organ/brain/alien(src)
+ new /obj/item/rod_of_asclepius(src)
if(10)
new /obj/item/organ/heart/cursed/wizard(src)
if(11)
@@ -76,7 +76,6 @@
new /obj/item/borg/upgrade/modkit/lifesteal(src)
new /obj/item/bedsheet/cult(src)
-
//KA modkit design discs
/obj/item/disk/design_disk/modkit_disc
name = "KA Mod Disk"
@@ -140,6 +139,54 @@
//Spooky special loot
+//Rod of Asclepius
+/obj/item/rod_of_asclepius
+ name = "Rod of Asclepius"
+ desc = "A wooden rod about the size of your forearm with a snake carved around it, winding it's way up the sides of the rod. Something about it seems to inspire in you the responsibilty and duty to help others."
+ icon = 'icons/obj/lavaland/artefacts.dmi'
+ icon_state = "asclepius_dormant"
+ var/activated = FALSE
+
+/obj/item/rod_of_asclepius/attack_self(mob/user)
+ if(activated)
+ return
+ if(!iscarbon(user))
+ to_chat(user, "The snake carving seems to come alive, if only for a moment, before returning to it's dormant state, almost as if it finds you incapable of holding it's oath.")
+ return
+ var/mob/living/carbon/itemUser = user
+ var/failText = "The snake seems unsatisfied with your incomplete oath and returns to it's previous place on the rod, returning to its dormant, wooden state. You must stand still while completing your oath!"
+ to_chat(itemUser, "The wooden snake that was carved into the rod seems to suddenly come alive and begins to slither down your arm! The compulsion to help others grows abnormally strong...")
+ if(do_after(itemUser, 40, target = itemUser))
+ itemUser.say("I swear to fulfill, to the best of my ability and judgment, this covenant:")
+ else
+ to_chat(itemUser, failText)
+ return
+ if(do_after(itemUser, 20, target = itemUser))
+ itemUser.say("I will apply, for the benefit of the sick, all measures that are required, avoiding those twin traps of overtreatment and therapeutic nihilism.")
+ else
+ to_chat(itemUser, failText)
+ return
+ if(do_after(itemUser, 30, target = itemUser))
+ itemUser.say("I will remember that I remain a member of society, with special obligations to all my fellow human beings, those sound of mind and body as well as the infirm.")
+ else
+ to_chat(itemUser, failText)
+ return
+ if(do_after(itemUser, 30, target = itemUser))
+ itemUser.say("If I do not violate this oath, may I enjoy life and art, respected while I live and remembered with affection thereafter. May I always act so as to preserve the finest traditions of my calling and may I long experience the joy of healing those who seek my help.")
+ else
+ to_chat(itemUser, failText)
+ return
+ to_chat(itemUser, "The snake, satisfied with your oath, attaches itself and the rod to your forearm with an inseparable grip. Your thoughts seem to only revolve around the core idea of helping others, and harm is nothing more than a distant, wicked memory...")
+ var/datum/status_effect/hippocraticOath/effect = itemUser.apply_status_effect(STATUS_EFFECT_HIPPOCRATIC_OATH)
+ effect.hand = itemUser.get_held_index_of_item(src)
+ activated()
+
+/obj/item/rod_of_asclepius/proc/activated()
+ flags_1 = NODROP_1 | DROPDEL_1
+ desc = "A short wooden rod with a mystical snake inseparably gripping itself and the rod to your forearm. It flows with a healing energy that disperses amongst yourself and those around you. "
+ icon_state = "asclepius_active"
+ activated = TRUE
+
//Wisp Lantern
/obj/item/device/wisp_lantern
name = "spooky lantern"
diff --git a/icons/obj/lavaland/artefacts.dmi b/icons/obj/lavaland/artefacts.dmi
index ce3030b6c5..829f8b9170 100644
Binary files a/icons/obj/lavaland/artefacts.dmi and b/icons/obj/lavaland/artefacts.dmi differ