diff --git a/code/__DEFINES/contracts.dm b/code/__DEFINES/contracts.dm
deleted file mode 100644
index 26351cfbac2..00000000000
--- a/code/__DEFINES/contracts.dm
+++ /dev/null
@@ -1,58 +0,0 @@
-#define CONTRACT_POWER "Power"
-#define CONTRACT_WEALTH "Wealth"
-#define CONTRACT_PRESTIGE "Prestige"
-#define CONTRACT_MAGIC "Magic"
-#define CONTRACT_REVIVE "Revive"
-#define CONTRACT_KNOWLEDGE "Knowledge"
-#define CONTRACT_UNWILLING "Unwilling"
-#define CONTRACT_FRIENDSHIP "Friendship"
-// FIXME: Implement these
-#define CONTRACT_ETALENT "Engineering Talent"
-#define CONTRACT_CTALENT "Chemistry Talent"
-#define CONTRACT_RETURNDEAD "Return Dead"
-#define CONTRACT_AUGMENT "Cybernetic Augmentations"
-#define CONTRACT_CANDY "Endless Candy"
-#define CONTRACT_ECHANCE "An Extra Chance"
-#define CONTRACT_ATECH "Advanced Technology"
-#define CONTRACT_DEVILSMACHINE "Devil's Machinery"
-#define CONTRACT_YOUTH "Eternal Youth"
-#define CONTRACT_FOOD "Food"
-#define CONTRACT_SPACE "Space Gear"
-#define CONTRACT_CALAMITY "Calamity"
-
-#define BANE_SALT "salt"
-#define BANE_LIGHT "light"
-#define BANE_IRON "iron"
-#define BANE_WHITECLOTHES "whiteclothes"
-#define BANE_SILVER "silver"
-#define BANE_HARVEST "harvest"
-#define BANE_TOOLBOX "toolbox"
-
-#define OBLIGATION_FOOD "food"
-#define OBLIGATION_FIDDLE "fiddle"
-#define OBLIGATION_DANCEOFF "danceoff"
-#define OBLIGATION_GREET "greet"
-#define OBLIGATION_PRESENCEKNOWN "presenceknown"
-#define OBLIGATION_SAYNAME "sayname"
-#define OBLIGATION_ANNOUNCEKILL "announcekill"
-#define OBLIGATION_ANSWERTONAME "answername"
-
-#define BAN_HURTWOMAN "hurtwoman"
-#define BAN_HURTMAN "hurtman"
-#define BAN_CHAPEL "chapel"
-#define BAN_HURTPRIEST "hurtpriest"
-#define BAN_AVOIDWATER "avoidwater"
-#define BAN_STRIKEUNCONCIOUS "strikeunconcious"
-#define BAN_HURTLIZARD "hurtlizard"
-#define BAN_HURTANIMAL "hurtanimal"
-
-#define BANISH_WATER "water"
-#define BANISH_COFFIN "coffin"
-#define BANISH_FORMALDYHIDE "embalm"
-#define BANISH_RUNES "runes"
-#define BANISH_CANDLES "candles"
-#define BANISH_DESTRUCTION "destruction"
-#define BANISH_FUNERAL_GARB "funeral"
-
-#define LORE 1
-#define LAW 2
diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm
index f4d5b9f5b1c..14e5fc674ce 100644
--- a/code/__DEFINES/hud.dm
+++ b/code/__DEFINES/hud.dm
@@ -53,9 +53,8 @@
#define ANTAG_HUD_VAMPIRE 16
#define ANTAG_HUD_ABDUCTOR 17
#define DATA_HUD_ABDUCTOR 18
-#define ANTAG_HUD_DEVIL 19
-#define ANTAG_HUD_EVENTMISC 20
-#define ANTAG_HUD_BLOB 21
+#define ANTAG_HUD_EVENTMISC 19
+#define ANTAG_HUD_BLOB 20
// Notification action types
#define NOTIFY_JUMP "jump"
diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm
index 8021fa4452d..85c15c1971c 100644
--- a/code/__DEFINES/role_preferences.dm
+++ b/code/__DEFINES/role_preferences.dm
@@ -26,7 +26,6 @@
#define ROLE_REVENANT "revenant"
#define ROLE_HOG_GOD "hand of god: god" // We're prolly gonna port this one day or another
#define ROLE_HOG_CULTIST "hand of god: cultist"
-#define ROLE_DEVIL "devil"
#define ROLE_RAIDER "vox raider"
#define ROLE_TRADER "trader"
#define ROLE_VAMPIRE "vampire"
@@ -54,7 +53,6 @@ GLOBAL_LIST_INIT(special_roles, list(
ROLE_CHANGELING = /datum/game_mode/changeling, // Changeling
ROLE_BORER, // Cortical borer
ROLE_CULTIST = /datum/game_mode/cult, // Cultist
- ROLE_DEVIL = /datum/game_mode/devil/devil_agents, // Devil
ROLE_GSPIDER, // Giant spider
ROLE_GUARDIAN, // Guardian
ROLE_MORPH, // Morph
diff --git a/code/_globalvars/lists/devil.dm b/code/_globalvars/lists/devil.dm
deleted file mode 100644
index 54528709573..00000000000
--- a/code/_globalvars/lists/devil.dm
+++ /dev/null
@@ -1,8 +0,0 @@
-//what could possibly go wrong
-GLOBAL_LIST_INIT(devil_machines, typecacheof(/obj/item/circuitboard, TRUE) - list(
- /obj/item/circuitboard/shuttle,
- /obj/item/circuitboard/swfdoor,
- /obj/item/circuitboard/olddoor,
- /obj/item/circuitboard/computer,
- /obj/item/circuitboard/machine
-))
diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm
index 58fd73656cb..91fe0c99bf7 100644
--- a/code/_onclick/hud/_defines.dm
+++ b/code/_onclick/hud/_defines.dm
@@ -22,7 +22,6 @@
//Middle left indicators
#define ui_lingchemdisplay "WEST:6,CENTER-1:15"
#define ui_lingstingdisplay "WEST:6,CENTER-3:11"
-#define ui_devilsouldisplay "WEST:6,CENTER-1:15"
//Lower center, persistant menu
#define ui_sstore1 "CENTER-5:10,SOUTH:5"
diff --git a/code/_onclick/hud/devil.dm b/code/_onclick/hud/devil.dm
deleted file mode 100644
index 53f7265c6a4..00000000000
--- a/code/_onclick/hud/devil.dm
+++ /dev/null
@@ -1,87 +0,0 @@
-
-//Soul counter is stored with the humans, it does weird when you place it here apparently...
-
-
-/datum/hud/devil/New(mob/owner, ui_style = 'icons/mob/screen_midnight.dmi')
- ..()
-
- var/obj/screen/using
- var/obj/screen/inventory/inv_box
-
- using = new /obj/screen/drop()
- using.icon = ui_style
- using.screen_loc = ui_drop_throw
- static_inventory += using
-
- mymob.pullin = new /obj/screen/pull()
- mymob.pullin.icon = ui_style
- mymob.pullin.update_icon(mymob)
- mymob.pullin.screen_loc = ui_pull_resist
- static_inventory += mymob.pullin
-
- inv_box = new /obj/screen/inventory/hand()
- inv_box.name = "right hand"
- inv_box.icon = ui_style
- inv_box.icon_state = "hand_r"
- inv_box.screen_loc = ui_rhand
- inv_box.slot_id = slot_r_hand
- static_inventory += inv_box
-
- inv_box = new /obj/screen/inventory/hand()
- inv_box.name = "left hand"
- inv_box.icon = ui_style
- inv_box.icon_state = "hand_l"
- inv_box.screen_loc = ui_lhand
- inv_box.slot_id = slot_l_hand
- static_inventory += inv_box
-
- using = new /obj/screen/swap_hand()
- using.name = "hand"
- using.icon = ui_style
- using.icon_state = "swap_1"
- using.screen_loc = ui_swaphand1
- static_inventory += using
-
- using = new /obj/screen/swap_hand()
- using.name = "hand"
- using.icon = ui_style
- using.icon_state = "swap_2"
- using.screen_loc = ui_swaphand2
- static_inventory += using
-
- zone_select = new /obj/screen/zone_sel()
- zone_select.icon = ui_style
- zone_select.update_icon(mymob)
-
- lingchemdisplay = new /obj/screen/ling/chems()
- devilsouldisplay = new /obj/screen/devil/soul_counter
- infodisplay += devilsouldisplay
-
- for(var/obj/screen/inventory/inv in static_inventory)
- if(inv.slot_id)
- inv.hud = src
- inv_slots[inv.slot_id] = inv
- inv.update_icon()
-
-
-/datum/hud/devil/persistent_inventory_update()
- if(!mymob)
- return
- var/mob/living/carbon/true_devil/D = mymob
-
- if(hud_version != HUD_STYLE_NOHUD)
- if(D.r_hand)
- D.r_hand.screen_loc = ui_rhand
- D.client.screen += D.r_hand
- if(D.l_hand)
- D.l_hand.screen_loc = ui_lhand
- D.client.screen += D.l_hand
- else
- if(D.r_hand)
- D.r_hand.screen_loc = null
- if(D.l_hand)
- D.l_hand.screen_loc = null
-
-/mob/living/carbon/true_devil/create_mob_hud()
- if(client && !hud_used)
- hud_used = new /datum/hud/devil(src, ui_style2icon(client.prefs.UI_style))
diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index c8d8a7d2290..0cfb6985b8e 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -27,8 +27,6 @@
var/obj/screen/move_intent
var/obj/screen/module_store_icon
- var/obj/screen/devil/soul_counter/devilsouldisplay
-
var/list/static_inventory = list() //the screen objects which are static
var/list/toggleable_inventory = list() //the screen objects which can be hidden
var/list/hotkeybuttons = list() //the buttons that can be used via hotkeys
@@ -89,7 +87,6 @@
alien_plasma_display = null
vampire_blood_display = null
nightvisionicon = null
- devilsouldisplay = null
QDEL_LIST_ASSOC_VAL(plane_masters)
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index 5b4ce4c99e9..86390675e0a 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -36,35 +36,6 @@
var/mob/living/carbon/U = usr
U.unset_sting()
-/obj/screen/devil
- invisibility = INVISIBILITY_ABSTRACT
-
-/obj/screen/devil/soul_counter
- icon = 'icons/mob/screen_gen.dmi'
- name = "souls owned"
- icon_state = "Devil-6"
- screen_loc = ui_devilsouldisplay
-
-/obj/screen/devil/soul_counter/proc/update_counter(souls = 0)
- invisibility = 0
- maptext = "
[souls]
"
- switch(souls)
- if(0,null)
- icon_state = "Devil-1"
- if(1,2)
- icon_state = "Devil-2"
- if(3 to 5)
- icon_state = "Devil-3"
- if(6 to 8)
- icon_state = "Devil-4"
- if(9 to INFINITY)
- icon_state = "Devil-5"
- else
- icon_state = "Devil-6"
-
-/obj/screen/devil/soul_counter/proc/clear()
- invisibility = INVISIBILITY_ABSTRACT
-
/obj/screen/ling/chems
name = "chemical storage"
icon_state = "power_display"
@@ -372,9 +343,6 @@
lingstingdisplay = new /obj/screen/ling/sting()
infodisplay += lingstingdisplay
- devilsouldisplay = new /obj/screen/devil/soul_counter
- infodisplay += devilsouldisplay
-
zone_select = new /obj/screen/zone_sel()
zone_select.color = ui_color
zone_select.icon = ui_style
diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm
index a37d767542f..bd338379817 100644
--- a/code/datums/ai_laws.dm
+++ b/code/datums/ai_laws.dm
@@ -17,10 +17,6 @@
/datum/ai_law/zero/get_index()
return 0
-/datum/ai_law/sixsixsix/get_index()
- return 666
-
-
/datum/ai_laws
var/name = "Unknown Laws"
var/law_header = "Prime Directives"
@@ -31,11 +27,9 @@
var/list/datum/ai_law/inherent_laws = list()
var/list/datum/ai_law/supplied_laws = list()
var/list/datum/ai_law/ion/ion_laws = list()
- var/list/datum/ai_law/sixsixsix/devil_laws = list()
var/list/datum/ai_law/sorted_laws = list()
var/state_zeroth = 0
- var/list/state_devil = list()
var/list/state_ion = list()
var/list/state_inherent = list()
var/list/state_supplied = list()
@@ -68,9 +62,6 @@
for(var/ion_law in ion_laws)
sorted_laws += ion_law
- for(var/evil_law in devil_laws)
- sorted_laws += evil_law
-
var/index = 1
for(var/datum/ai_law/inherent_law in inherent_laws)
inherent_law.index = index++
@@ -128,21 +119,6 @@
zeroth_law_borg = null
sorted_laws.Cut()
-/datum/ai_laws/proc/set_sixsixsix_law(var/law)
- if(!law)
- return
-
- for(var/datum/ai_law/AL in devil_laws)
- if(AL.law == law)
- return
-
- var/new_law = new/datum/ai_law/sixsixsix(law)
- devil_laws += new_law
- if(state_devil.len < devil_laws.len)
- state_devil += 1
-
- sorted_laws.Cut()
-
/datum/ai_laws/proc/add_ion_law(var/law)
if(!law)
return
@@ -212,9 +188,6 @@
/datum/ai_law/ion/delete_law(var/datum/ai_laws/laws)
laws.internal_delete_law(laws.ion_laws, laws.state_ion, src)
-/datum/ai_law/sixsixsix/delete_law(var/datum/ai_laws/laws)
- laws.internal_delete_law(laws.devil_laws, laws.state_devil, src)
-
/datum/ai_law/inherent/delete_law(var/datum/ai_laws/laws)
laws.internal_delete_law(laws.inherent_laws, laws.state_inherent, src)
@@ -239,10 +212,6 @@
zeroth_law = null
zeroth_law_borg = null
-/datum/ai_laws/proc/clear_sixsixsix_laws()
- devil_laws.Cut()
- sorted_laws.Cut()
-
/datum/ai_laws/proc/clear_ion_laws()
ion_laws.Cut()
sorted_laws.Cut()
diff --git a/code/datums/hud.dm b/code/datums/hud.dm
index 50152c4873d..60fbb9c8194 100644
--- a/code/datums/hud.dm
+++ b/code/datums/hud.dm
@@ -21,7 +21,6 @@ GLOBAL_LIST_INIT(huds, list( \
ANTAG_HUD_VAMPIRE = new/datum/atom_hud/antag/hidden(),\
ANTAG_HUD_ABDUCTOR = new/datum/atom_hud/antag/hidden(),\
DATA_HUD_ABDUCTOR = new/datum/atom_hud/abductor(),\
- ANTAG_HUD_DEVIL = new/datum/atom_hud/antag/hidden(),\
ANTAG_HUD_EVENTMISC = new/datum/atom_hud/antag/hidden(),\
ANTAG_HUD_BLOB = new/datum/atom_hud/antag/hidden()\
))
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 591a487598e..35e0053822d 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -55,10 +55,6 @@
var/antag_hud_icon_state = null //this mind's ANTAG_HUD should have this icon_state
var/datum/atom_hud/antag/antag_hud = null //this mind's antag HUD
var/datum/mindslaves/som //stands for slave or master...hush..
- var/datum/devilinfo/devilinfo //Information about the devil, if any.
- var/damnation_type = 0
- var/datum/mind/soulOwner //who owns the soul. Under normal circumstances, this will point to src
- var/hasSoul = TRUE
var/isholy = FALSE // is this person a chaplain or admin role allowed to use bibles
var/isblessed = FALSE // is this person blessed by a chaplain?
@@ -76,7 +72,6 @@
/datum/mind/New(new_key)
key = new_key
- soulOwner = src
/datum/mind/Destroy()
SSticker.minds -= src
@@ -88,7 +83,6 @@
antag_datums = null
current = null
original = null
- soulOwner = null
return ..()
/datum/mind/proc/transfer_to(mob/living/new_character)
@@ -314,22 +308,6 @@
. += _memory_edit_role_enabled(ROLE_ABDUCTOR)
-/datum/mind/proc/memory_edit_devil(mob/living/H)
- . = _memory_edit_header("devil", list("devilagents"))
- if(src in SSticker.mode.devils)
- if(!devilinfo)
- . += "No devilinfo found! Yell at a coder!"
- else if(!devilinfo.ascendable)
- . += "DEVIL|Ascendable Devil|sintouched|no"
- else
- . += "DEVIL|ASCENDABLE DEVIL|sintouched|no"
- else if(src in SSticker.mode.sintouched)
- . += "devil|Ascendable Devil|SINTOUCHED|no"
- else
- . += "devil|Ascendable Devil|sintouched|NO"
-
- . += _memory_edit_role_enabled(ROLE_DEVIL)
-
/datum/mind/proc/memory_edit_eventmisc(mob/living/H)
. = _memory_edit_header("event", list())
if(src in SSticker.mode.eventmiscs)
@@ -461,10 +439,6 @@
sections["shadowling"] = memory_edit_shadowling(H)
/** Abductors **/
sections["abductor"] = memory_edit_abductor(H)
- /** DEVIL ***/
- var/static/list/devils_typecache = typecacheof(list(/mob/living/carbon/human, /mob/living/carbon/true_devil, /mob/living/silicon/robot))
- if(is_type_in_typecache(current, devils_typecache))
- sections["devil"] = memory_edit_devil(H)
sections["eventmisc"] = memory_edit_eventmisc(H)
/** TRAITOR ***/
sections["traitor"] = memory_edit_traitor()
@@ -1104,76 +1078,6 @@
SSticker.mode.update_eventmisc_icons_added(src)
message_admins("[key_name_admin(usr)] has eventantag'ed [current].")
log_admin("[key_name(usr)] has eventantag'ed [current].")
- else if(href_list["devil"])
- switch(href_list["devil"])
- if("clear")
- if(src in SSticker.mode.devils)
- if(istype(current,/mob/living/carbon/true_devil/))
- to_chat(usr,"This cannot be used on true or arch-devils.")
- else
- SSticker.mode.devils -= src
- SSticker.mode.update_devil_icons_removed(src)
- special_role = null
- to_chat(current,"Your infernal link has been severed! You are no longer a devil!")
- RemoveSpell(/obj/effect/proc_holder/spell/targeted/infernal_jaunt)
- RemoveSpell(/obj/effect/proc_holder/spell/targeted/click/fireball/hellish)
- RemoveSpell(/obj/effect/proc_holder/spell/targeted/click/summon_contract)
- RemoveSpell(/obj/effect/proc_holder/spell/targeted/conjure_item/pitchfork)
- RemoveSpell(/obj/effect/proc_holder/spell/targeted/conjure_item/pitchfork/greater)
- RemoveSpell(/obj/effect/proc_holder/spell/targeted/conjure_item/pitchfork/ascended)
- RemoveSpell(/obj/effect/proc_holder/spell/targeted/conjure_item/violin)
- RemoveSpell(/obj/effect/proc_holder/spell/targeted/summon_dancefloor)
- RemoveSpell(/obj/effect/proc_holder/spell/targeted/sintouch)
- RemoveSpell(/obj/effect/proc_holder/spell/targeted/sintouch/ascended)
- message_admins("[key_name_admin(usr)] has de-devil'ed [current].")
- if(issilicon(current))
- var/mob/living/silicon/S = current
- S.laws.clear_sixsixsix_laws()
- devilinfo = null
- log_admin("[key_name(usr)] has de-devil'ed [current].")
- else if(src in SSticker.mode.sintouched)
- SSticker.mode.sintouched -= src
- message_admins("[key_name_admin(usr)] has de-sintouch'ed [current].")
- log_admin("[key_name(usr)] has de-sintouch'ed [current].")
- if("devil")
- if(devilinfo)
- devilinfo.ascendable = FALSE
- message_admins("[key_name_admin(usr)] has made [current] unable to ascend as a devil.")
- log_admin("[key_name_admin(usr)] has made [current] unable to ascend as a devil.")
- return
- if(!ishuman(current) && !isrobot(current))
- to_chat(usr, "This only works on humans and cyborgs!")
- return
- SSticker.mode.devils += src
- special_role = "devil"
- SSticker.mode.update_devil_icons_added(src)
- SSticker.mode.finalize_devil(src, FALSE)
- SSticker.mode.forge_devil_objectives(src, 2)
- SSticker.mode.greet_devil(src)
- message_admins("[key_name_admin(usr)] has devil'ed [current].")
- log_admin("[key_name(usr)] has devil'ed [current].")
- if("ascendable_devil")
- if(devilinfo)
- devilinfo.ascendable = TRUE
- message_admins("[key_name_admin(usr)] has made [current] able to ascend as a devil.")
- log_admin("[key_name_admin(usr)] has made [current] able to ascend as a devil.")
- return
- if(!ishuman(current) && !isrobot(current))
- to_chat(usr, "This only works on humans and cyborgs!")
- return
- SSticker.mode.devils += src
- special_role = "devil"
- SSticker.mode.update_devil_icons_added(src)
- SSticker.mode.finalize_devil(src, TRUE)
- SSticker.mode.forge_devil_objectives(src, 2)
- SSticker.mode.greet_devil(src)
- message_admins("[key_name_admin(usr)] has devil'ed [current]. The devil has been marked as ascendable.")
- log_admin("[key_name(usr)] has devil'ed [current]. The devil has been marked as ascendable.")
- if("sintouched")
- var/mob/living/carbon/human/H = current
- H.influenceSin()
- message_admins("[key_name_admin(usr)] has sintouch'ed [current].")
- log_admin("[key_name(usr)] has sintouch'ed [current].")
else if(href_list["traitor"])
switch(href_list["traitor"])
@@ -1805,17 +1709,6 @@
var/obj/effect/proc_holder/spell/S = X
S.action.Grant(new_character)
-/datum/mind/proc/disrupt_spells(delay, list/exceptions = New())
- for(var/X in spell_list)
- var/obj/effect/proc_holder/spell/S = X
- for(var/type in exceptions)
- if(istype(S, type))
- continue
- S.charge_counter = delay
- spawn(0)
- S.start_recharge()
- S.updateButtonIcon()
-
/datum/mind/proc/get_ghost(even_if_they_cant_reenter)
for(var/mob/dead/observer/G in GLOB.dead_mob_list)
if(G.mind == src)
@@ -1891,18 +1784,6 @@
to_chat(current, "You seem to have forgotten the events of the past 10 minutes or so, and your head aches a bit as if someone beat it savagely with a stick.")
to_chat(current, "This means you don't remember who you were working for or what you were doing.")
-/datum/mind/proc/is_revivable() //Note, this ONLY checks the mind.
- if(damnation_type)
- return FALSE
- return TRUE
-
-// returns a mob to message to produce something visible for the target mind
-/datum/mind/proc/messageable_mob()
- if(!QDELETED(current) && current.client)
- return current
- else
- return get_ghost(even_if_they_cant_reenter = TRUE)
-
//Initialisation procs
/mob/proc/mind_initialize()
if(mind)
diff --git a/code/datums/soullink.dm b/code/datums/soullink.dm
deleted file mode 100644
index f5727f1d0d0..00000000000
--- a/code/datums/soullink.dm
+++ /dev/null
@@ -1,166 +0,0 @@
-/mob/living
- var/list/ownedSoullinks //soullinks we are the owner of
- var/list/sharedSoullinks //soullinks we are a/the sharer of
-
-/mob/living/Destroy()
- for(var/s in ownedSoullinks)
- var/datum/soullink/S = s
- S.ownerDies(FALSE)
- qdel(s) //If the owner is destroy()'d, the soullink is destroy()'d
- ownedSoullinks = null
- for(var/s in sharedSoullinks)
- var/datum/soullink/S = s
- S.sharerDies(FALSE)
- S.removeSoulsharer(src) //If a sharer is destroy()'d, they are simply removed
- sharedSoullinks = null
- return ..()
-
-//Keeps track of a Mob->Mob (potentially Player->Player) connection
-//Can be used to trigger actions on one party when events happen to another
-//Eg: shared deaths
-//Can be used to form a linked list of mob-hopping
-//Does NOT transfer with minds
-/datum/soullink
- var/mob/living/soulowner
- var/mob/living/soulsharer
- var/id //Optional ID, for tagging and finding specific instances
-
-/datum/soullink/Destroy()
- if(soulowner)
- LAZYREMOVE(soulowner.ownedSoullinks, src)
- soulowner = null
- if(soulsharer)
- LAZYREMOVE(soulsharer.sharedSoullinks, src)
- soulsharer = null
- return ..()
-
-/datum/soullink/proc/removeSoulsharer(mob/living/sharer)
- if(soulsharer == sharer)
- soulsharer = null
- LAZYREMOVE(sharer.sharedSoullinks, src)
-
-//Used to assign variables, called primarily by soullink()
-//Override this to create more unique soullinks (Eg: 1->Many relationships)
-//Return TRUE/FALSE to return the soullink/null in soullink()
-/datum/soullink/proc/parseArgs(mob/living/owner, mob/living/sharer)
- if(!owner || !sharer)
- return FALSE
- soulowner = owner
- soulsharer = sharer
- LAZYADD(owner.ownedSoullinks, src)
- LAZYADD(sharer.sharedSoullinks, src)
- return TRUE
-
-//Runs after /living death()
-//Override this for content
-/datum/soullink/proc/ownerDies(gibbed, mob/living/owner)
-
-//Runs after /living death()
-//Override this for content
-/datum/soullink/proc/sharerDies(gibbed, mob/living/owner)
-
-//Runs after /living update_revive()
-//Override this for content
-/datum/soullink/proc/ownerRevives(mob/living/owner)
-
-//Runs after /living update_revive()
-//Override this for content
-/datum/soullink/proc/sharerRevives(mob/living/owner)
-
-//Quick-use helper
-/proc/soullink(typepath, ...)
- var/datum/soullink/S = new typepath()
- if(S.parseArgs(arglist(args.Copy(2, 0))))
- return S
-
-
-
-/////////////////
-// MULTISHARER //
-/////////////////
-//Abstract soullink for use with 1 Owner -> Many Sharer setups
-/datum/soullink/multisharer
- var/list/soulsharers
-
-/datum/soullink/multisharer/parseArgs(mob/living/owner, list/sharers)
- if(!owner || !LAZYLEN(sharers))
- return FALSE
- soulowner = owner
- soulsharers = sharers
- LAZYADD(owner.ownedSoullinks, src)
- for(var/l in sharers)
- var/mob/living/L = l
- LAZYADD(L.sharedSoullinks, src)
- return TRUE
-
-/datum/soullink/multisharer/removeSoulsharer(mob/living/sharer)
- LAZYREMOVE(soulsharers, sharer)
-
-
-
-/////////////////
-// SHARED FATE //
-/////////////////
-//When the soulowner dies, the soulsharer dies, and vice versa
-//This is intended for two players(or AI) and two mobs
-
-/datum/soullink/sharedfate/ownerDies(gibbed, mob/living/owner)
- if(soulsharer)
- soulsharer.death(gibbed)
-
-/datum/soullink/sharedfate/sharerDies(gibbed, mob/living/sharer)
- if(soulowner)
- soulowner.death(gibbed)
-
-/////////////////
-// Demon Bind //
-/////////////////
-//When the soulowner dies, the soulsharer dies, but NOT vice versa
-//This is intended for two players(or AI) and two mobs
-
-/datum/soullink/oneway/ownerDies(gibbed, mob/living/owner)
- if(soulsharer)
- soulsharer.dust(FALSE)
-
-/datum/soullink/oneway/devilfriend
-
-/////////////////
-// SHARED BODY //
-/////////////////
-//When the soulsharer dies, they're placed in the soulowner, who remains alive
-//If the soulowner dies, the soulsharer is killed and placed into the soulowner (who is still dying)
-//This one is intended for one player moving between many mobs
-
-/datum/soullink/sharedbody/ownerDies(gibbed, mob/living/owner)
- if(soulowner && soulsharer)
- if(soulsharer.mind)
- soulsharer.mind.transfer_to(soulowner)
- soulsharer.death(gibbed)
-
-/datum/soullink/sharedbody/sharerDies(gibbed, mob/living/sharer)
- if(soulowner && soulsharer && soulsharer.mind)
- soulsharer.mind.transfer_to(soulowner)
-
-
-
-//////////////////////
-// REPLACEMENT POOL //
-//////////////////////
-//When the owner dies, one of the sharers is placed in the owner's body, fully healed
-//Sort of a "winner-stays-on" soullink
-//Gibbing ends it immediately
-
-/datum/soullink/multisharer/replacementpool/ownerDies(gibbed, mob/living/owner)
- if(LAZYLEN(soulsharers) && !gibbed) //let's not put them in some gibs
- var/list/souls = shuffle(soulsharers.Copy())
- for(var/l in souls)
- var/mob/living/L = l
- if(L.stat != DEAD && L.mind)
- L.mind.transfer_to(soulowner)
- soulowner.revive(TRUE, TRUE)
- L.death(FALSE)
-
-//Lose your claim to the throne!
-/datum/soullink/multisharer/replacementpool/sharerDies(gibbed, mob/living/sharer)
- removeSoulsharer(sharer)
-
diff --git a/code/datums/spells/devil.dm b/code/datums/spells/devil.dm
deleted file mode 100644
index f9e075bdf81..00000000000
--- a/code/datums/spells/devil.dm
+++ /dev/null
@@ -1,248 +0,0 @@
-/obj/effect/proc_holder/spell/targeted/conjure_item/pitchfork
- name = "Summon Pitchfork"
- desc = "A devil's weapon of choice. Use this to summon/unsummon your pitchfork."
- item_type = /obj/item/twohanded/pitchfork/demonic
- action_icon_state = "pitchfork"
- action_background_icon_state = "bg_demon"
-
-/obj/effect/proc_holder/spell/targeted/conjure_item/pitchfork/greater
- item_type = /obj/item/twohanded/pitchfork/demonic/greater
-
-/obj/effect/proc_holder/spell/targeted/conjure_item/pitchfork/ascended
- item_type = /obj/item/twohanded/pitchfork/demonic/ascended
-
-/obj/effect/proc_holder/spell/targeted/conjure_item/violin
- item_type = /obj/item/instrument/violin/golden
- desc = "A devil's instrument of choice. Use this to summon/unsummon your golden violin."
- invocation_type = "whisper"
- invocation = "I ain't have this much fun since Georgia."
- action_icon_state = "golden_violin"
- name = "Summon golden violin"
- action_background_icon_state = "bg_demon"
-
-
-/obj/effect/proc_holder/spell/targeted/click/summon_contract
- name = "Summon infernal contract"
- desc = "Skip making a contract by hand, just do it by magic."
- invocation_type = "whisper"
- invocation = "Just sign on the dotted line."
- selection_activated_message = "You prepare a detailed contract. Click on a target to summon the contract in his hands."
- selection_deactivated_message = "You archive the contract for later use."
- include_user = FALSE
- range = 5
- auto_target_single = FALSE // Prevent an accidental contract from summoning
- click_radius = -1 // Precision clicking required
- allowed_type = /mob/living/carbon
- clothes_req = FALSE
- school = "conjuration"
- charge_max = 150
- cooldown_min = 10
- action_icon_state = "spell_default"
- action_background_icon_state = "bg_demon"
-
-/obj/effect/proc_holder/spell/targeted/click/summon_contract/cast(list/targets, mob/user = usr)
- for(var/target in targets)
- var/mob/living/carbon/C = target
- if(C.mind && user.mind)
- if(C.stat == DEAD)
- if(user.drop_item())
- var/obj/item/paper/contract/infernal/revive/contract = new(user.loc, C.mind, user.mind)
- user.put_in_hands(contract)
- else
- var/obj/item/paper/contract/infernal/contract
- var/contractTypeName = input(user, "What type of contract?") in list (CONTRACT_POWER, CONTRACT_WEALTH, CONTRACT_PRESTIGE, CONTRACT_MAGIC, CONTRACT_KNOWLEDGE, CONTRACT_FRIENDSHIP) //TODO: Refactor this to be less boilerplate-y
- switch(contractTypeName)
- if(CONTRACT_POWER)
- contract = new /obj/item/paper/contract/infernal/power(C.loc, C.mind, user.mind)
- if(CONTRACT_WEALTH)
- contract = new /obj/item/paper/contract/infernal/wealth(C.loc, C.mind, user.mind)
- if(CONTRACT_PRESTIGE)
- contract = new /obj/item/paper/contract/infernal/prestige(C.loc, C.mind, user.mind)
- if(CONTRACT_MAGIC)
- contract = new /obj/item/paper/contract/infernal/magic(C.loc, C.mind, user.mind)
- if(CONTRACT_KNOWLEDGE)
- contract = new /obj/item/paper/contract/infernal/knowledge(C.loc, C.mind, user.mind)
- if(CONTRACT_FRIENDSHIP)
- contract = new /obj/item/paper/contract/infernal/friendship(C.loc, C.mind, user.mind)
- C.put_in_hands(contract)
- else
- to_chat(user,"[C] seems to not be sentient. You are unable to summon a contract for them.")
-
-
-/obj/effect/proc_holder/spell/targeted/click/fireball/hellish
- name = "Hellfire"
- desc = "This spell launches hellfire at the target."
- school = "evocation"
- charge_max = 80
- clothes_req = FALSE
- invocation = "Your very soul will catch fire!"
- invocation_type = "shout"
- fireball_type = /obj/item/projectile/magic/fireball/infernal
- action_background_icon_state = "bg_demon"
-
-/obj/effect/proc_holder/spell/targeted/click/fireball/hellish/cast(list/targets, mob/living/user = usr)
- add_attack_logs(user, targets, "has fired a Hellfire ball", ATKLOG_FEW)
- .=..()
-
-
-/obj/effect/proc_holder/spell/targeted/infernal_jaunt
- name = "Infernal Jaunt"
- desc = "Use hellfire to phase out of existence."
- charge_max = 200
- clothes_req = FALSE
- selection_type = "range"
- range = -1
- cooldown_min = 0
- overlay = null
- include_user = TRUE
- action_icon_state = "jaunt"
- action_background_icon_state = "bg_demon"
-
-/obj/effect/proc_holder/spell/targeted/infernal_jaunt/cast(list/targets, mob/living/user = usr)
- if(istype(user))
- if(istype(user.loc, /obj/effect/dummy/slaughter))
- var/continuing = 0
- if(istype(get_area(user), /area/shuttle)) // Can always phase in in a shuttle.
- continuing = TRUE
- else
- for(var/mob/living/C in orange(2, get_turf(user.loc))) //Can also phase in when nearby a potential buyer.
- if (C.mind && C.mind.soulOwner == C.mind)
- continuing = TRUE
- break
- if(continuing)
- to_chat(user,"You are now phasing in.")
- if(do_mob(user,user,150))
- user.infernalphasein()
- else
- to_chat(user,"You can only re-appear near a potential signer or on a shuttle.")
- revert_cast()
- return ..()
- else
- user.notransform = TRUE
- user.fakefire()
- to_chat(user,"You begin to phase back into sinful flames.")
- if(do_mob(user,user,150))
- user.infernalphaseout()
- else
- to_chat(user,"You must remain still while exiting.")
- user.ExtinguishMob()
- start_recharge()
- return
- revert_cast()
-
-
-/mob/living/proc/infernalphaseout()
- dust_animation()
- visible_message("[src] disappears in a flashfire!")
- playsound(get_turf(src), 'sound/misc/enter_blood.ogg', 100, 1, -1)
- var/obj/effect/dummy/slaughter/s_holder = new(loc)
- ExtinguishMob()
- forceMove(s_holder)
- holder = s_holder
- notransform = FALSE
- fakefireextinguish()
-
-/mob/living/proc/infernalphasein()
- if(notransform)
- to_chat(src,"You're too busy to jaunt in.")
- return 0
- fakefire()
- forceMove(get_turf(src))
- visible_message("[src] appears in a firey blaze!")
- playsound(get_turf(src), 'sound/misc/exit_blood.ogg', 100, 1, -1)
- spawn(15)
- fakefireextinguish(TRUE)
-
-/obj/effect/proc_holder/spell/targeted/sintouch
- name = "Sin Touch"
- desc = "Subtly encourage someone to sin."
- charge_max = 1800
- clothes_req = FALSE
- selection_type = "range"
- range = 2
- cooldown_min = 0
- overlay = null
- include_user = FALSE
- action_icon_state = "sintouch"
- action_background_icon_state = "bg_demon"
- random_target = TRUE
- random_target_priority = TARGET_RANDOM
- max_targets = 3
- invocation = "TASTE SIN AND INDULGE!!"
- invocation_type = "shout"
-
-/obj/effect/proc_holder/spell/targeted/sintouch/ascended
- name = "Greater sin touch"
- charge_max = 100
- range = 7
- max_targets = 10
-
-/obj/effect/proc_holder/spell/targeted/sintouch/cast(list/targets, mob/living/user = usr)
- for(var/mob/living/carbon/human/H in targets)
- if(!H.mind)
- continue
- for(var/datum/objective/sintouched/A in H.mind.objectives)
- continue
- H.influenceSin()
- H.Weaken(2)
- H.Stun(2)
-
-/obj/effect/proc_holder/spell/targeted/summon_dancefloor
- name = "Summon Dancefloor"
- desc = "When what a Devil really needs is funk."
- include_user = TRUE
- range = -1
- clothes_req = FALSE
-
- school = "conjuration"
- charge_max = 10
- cooldown_min = 50 //5 seconds, so the smoke can't be spammed
- action_icon_state = "funk"
- action_background_icon_state = "bg_demon"
-
- var/list/dancefloor_turfs
- var/list/dancefloor_turfs_types
- var/dancefloor_exists = FALSE
-// var/datum/effect_system/smoke_spread/transparent/dancefloor_devil/smoke
-
-
-/obj/effect/proc_holder/spell/targeted/summon_dancefloor/cast(list/targets, mob/user = usr)
- LAZYINITLIST(dancefloor_turfs)
- LAZYINITLIST(dancefloor_turfs_types)
-
-/*
- if(!smoke)
- smoke = new()
- smoke.set_up(0, get_turf(user))
- smoke.start()
-*/
-
- if(dancefloor_exists)
- dancefloor_exists = FALSE
- for(var/i in 1 to dancefloor_turfs.len)
- var/turf/T = dancefloor_turfs[i]
- T.ChangeTurf(dancefloor_turfs_types[i])
- else
- var/list/funky_turfs = RANGE_TURFS(1, user)
- for(var/turf/T in funky_turfs)
- if(T.density)
- to_chat(user, "You're too close to a wall.")
- return
- dancefloor_exists = TRUE
- var/i = 1
- dancefloor_turfs.len = funky_turfs.len
- dancefloor_turfs_types.len = funky_turfs.len
- for(var/t in funky_turfs)
- var/turf/T = t
- dancefloor_turfs[i] = T
- dancefloor_turfs_types[i] = T.type
- T.ChangeTurf((i % 2 == 0) ? /turf/simulated/floor/light/colour_cycle/dancefloor_a : /turf/simulated/floor/light/colour_cycle/dancefloor_b)
- i++
-
-/*
-/datum/effect_system/smoke_spread/transparent/dancefloor_devil
- effect_type = /obj/effect/particle_effect/smoke/transparent/dancefloor_devil
-
-/obj/effect/particle_effect/smoke/transparent/dancefloor_devil
- lifetime = 2
-*/
diff --git a/code/datums/spells/devil_boons.dm b/code/datums/spells/devil_boons.dm
deleted file mode 100644
index 5746fd9c2d2..00000000000
--- a/code/datums/spells/devil_boons.dm
+++ /dev/null
@@ -1,73 +0,0 @@
-/obj/effect/proc_holder/spell/targeted/summon_wealth
- name = "Summon wealth"
- desc = "The reward for selling your soul."
- invocation_type = "none"
- include_user = 1
- range = -1
- clothes_req = 0
- school = "conjuration"
- charge_max = 100
- cooldown_min = 10
- action_icon_state = "moneybag"
-
-
-/obj/effect/proc_holder/spell/targeted/summon_wealth/cast(list/targets, mob/user = usr)
- for(var/mob/living/carbon/C in targets)
- if(user.drop_item())
- var/obj/item = pick(
- new /obj/item/coin/gold(user.loc),
- new /obj/item/coin/diamond(user.loc),
- new /obj/item/coin/silver(user.loc),
- new /obj/item/stack/sheet/mineral/gold(user.loc),
- new /obj/item/stack/sheet/mineral/silver(user.loc),
- new /obj/item/stack/sheet/mineral/diamond(user.loc),
- new /obj/item/stack/spacecash/c1000(user.loc))
- C.put_in_hands(item)
-
-/obj/effect/proc_holder/spell/targeted/view_range
- name = "Distant vision"
- desc = "The reward for selling your soul."
- invocation_type = "none"
- include_user = 1
- range = -1
- clothes_req = 0
- charge_max = 50
- cooldown_min = 10
- action_icon_state = "camera_jump"
- var/ranges = list(7,8,9,10/*,11,12*/)
-
-/obj/effect/proc_holder/spell/targeted/view_range/cast(list/targets, mob/user = usr)
- for(var/mob/C in targets)
- if(!C.client)
- continue
- C.client.view = input("Select view range:", "Range", 4) in ranges
-
-/obj/effect/proc_holder/spell/targeted/summon_friend
- name = "Summon Friend"
- desc = "The reward for selling your soul."
- invocation_type = "none"
- include_user = 1
- range = -1
- clothes_req = 0
- charge_max = 50
- cooldown_min = 10
- action_icon_state = "sacredflame"
- var/mob/living/friend
- var/obj/effect/mob_spawn/human/demonic_friend/friendShell
-
-/obj/effect/proc_holder/spell/targeted/summon_friend/cast(list/targets, mob/user = usr)
- if(!QDELETED(friend))
- to_chat(friend, "Your master has deemed you a poor friend. Your durance in hell will now resume.")
- to_chat(user, "You banish your friend back to whence [friend.p_they()] came.")
- friend.dust()
- qdel(friendShell)
- return
- if(!QDELETED(friendShell))
- qdel(friendShell)
- return
- for(var/C in targets)
- var/mob/living/L = C
- friendShell = new /obj/effect/mob_spawn/human/demonic_friend(L.loc, L.mind, src)
-
-/obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket/robeless
- clothes_req = FALSE
diff --git a/code/game/gamemodes/devil/contracts/friend.dm b/code/game/gamemodes/devil/contracts/friend.dm
deleted file mode 100644
index 8838dc8a371..00000000000
--- a/code/game/gamemodes/devil/contracts/friend.dm
+++ /dev/null
@@ -1,54 +0,0 @@
-/obj/effect/mob_spawn/human/demonic_friend
- name = "Essence of friendship"
- desc = "Oh boy! Oh boy! A friend!"
- mob_name = "Demonic friend"
- icon = 'icons/obj/cardboard_cutout.dmi'
- icon_state = "cutout_basic"
- outfit = /datum/outfit/demonic_friend
- death = FALSE
- roundstart = FALSE
- random = TRUE
- id_job = "SuperFriend"
- id_access = "assistant"
- var/obj/effect/proc_holder/spell/targeted/summon_friend/spell
- var/datum/mind/owner
- assignedrole = "SuperFriend"
-
-/obj/effect/mob_spawn/human/demonic_friend/Initialize(mapload, datum/mind/owner_mind, obj/effect/proc_holder/spell/targeted/summon_friend/summoning_spell)
- . = ..()
- owner = owner_mind
- description = "Be someone's loyal friend/slave. If they die, you die as well." //best I could think of in the moment, not sure how this role plays in practise, have never seen it.
- flavour_text = "You have been given a reprieve from your eternity of torment, to be [owner.name]'s friend for [owner.p_their()] short mortal coil. Be aware that if you do not live up to [owner.name]'s expectations, [owner.p_they()] can send you back to hell with a single thought. [owner.name]'s death will also return you to hell."
- var/area/A = get_area(src)
- if(!mapload && A)
- notify_ghosts("\A friendship shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = TRUE)
- objectives = "Be [owner.name]'s friend, and keep [owner.name] alive, so you don't get sent back to hell."
- spell = summoning_spell
-
-
-/obj/effect/mob_spawn/human/demonic_friend/special(mob/living/L)
- if(!QDELETED(owner.current) && owner.current.stat != DEAD)
- L.real_name = "[owner.name]'s best friend"
- L.name = L.real_name
- soullink(/datum/soullink/oneway/devilfriend, owner.current, L)
- spell.friend = L
- spell.charge_counter = spell.charge_max
- L.mind.hasSoul = FALSE
- var/mob/living/carbon/human/H = L
- var/obj/item/worn = H.wear_id
- var/obj/item/card/id/id = worn.GetID()
- id.registered_name = L.real_name
- id.update_label()
- to_chat(owner.current, "Your friend has arrived!")
- else
- to_chat(L, "Your owner is already dead! You will soon perish.")
- addtimer(CALLBACK(L, /mob.proc/dust), 150) //Give em a few seconds as a mercy.
-
-/datum/outfit/demonic_friend
- name = "Demonic Friend"
- uniform = /obj/item/clothing/under/assistantformal
- shoes = /obj/item/clothing/shoes/laceup
- r_pocket = /obj/item/radio/off
- back = /obj/item/storage/backpack
- implants = list(/obj/item/implant/mindshield) //No revolutionaries, he's MY friend.
- id = /obj/item/card/id
diff --git a/code/game/gamemodes/devil/devil.dm b/code/game/gamemodes/devil/devil.dm
deleted file mode 100644
index 06933891ba6..00000000000
--- a/code/game/gamemodes/devil/devil.dm
+++ /dev/null
@@ -1,48 +0,0 @@
-GLOBAL_LIST_INIT(whiteness, list(
- /obj/item/clothing/under/color/white = 2,
- /obj/item/clothing/under/rank/bartender = 1,
- /obj/item/clothing/under/rank/chef = 1,
- /obj/item/clothing/under/rank/chief_engineer = 1,
- /obj/item/clothing/under/rank/scientist = 1,
- /obj/item/clothing/under/rank/chemist = 1,
- /obj/item/clothing/under/rank/chief_medical_officer = 1,
- /obj/item/clothing/under/rank/geneticist = 1,
- /obj/item/clothing/under/rank/virologist = 1,
- /obj/item/clothing/under/rank/nursesuit = 1,
- /obj/item/clothing/under/rank/medical = 1,
- /obj/item/clothing/under/rank/psych = 1,
- /obj/item/clothing/under/rank/orderly = 1,
- /obj/item/clothing/under/rank/security/brigphys = 1,
- /obj/item/clothing/under/rank/internalaffairs = 1,
- /obj/item/clothing/under/rank/ntrep = 1,
- /obj/item/clothing/under/det = 1,
- /obj/item/clothing/under/wedding/bride_white = 1,
- /obj/item/clothing/under/mafia/white = 1,
- /obj/item/clothing/under/noble_clothes = 1,
- /obj/item/clothing/under/sl_suit = 1,
- /obj/item/clothing/under/burial = 1
-))
-
-
-
-/mob/living/proc/check_devil_bane_multiplier(obj/item/weapon, mob/living/attacker)
- switch(mind.devilinfo.bane)
- if(BANE_WHITECLOTHES)
- if(istype(attacker, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = attacker
- if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under))
- var/obj/item/clothing/under/U = H.w_uniform
- if(GLOB.whiteness[U.type])
- src.visible_message("[src] seems to have been harmed by the purity of [attacker]'s clothes.", "Unsullied white clothing is disrupting your form.")
- return GLOB.whiteness[U.type] + 1
- if(BANE_TOOLBOX)
- if(istype(weapon,/obj/item/storage/toolbox))
- src.visible_message("The [weapon] seems unusually robust this time.", "The [weapon] is your unmaking!")
- return 2.5 // Will take four hits with a normal toolbox.
- if(BANE_HARVEST)
- if(istype(weapon,/obj/item/reagent_containers/food/snacks/grown/) || istype(weapon,/obj/item/grown))
- src.visible_message("The spirits of the harvest aid in the exorcism.", "The harvest spirits are harming you.")
- src.Weaken(2)
- qdel(weapon)
- return 2
- return 1
diff --git a/code/game/gamemodes/devil/devil_agent/devil_agent.dm b/code/game/gamemodes/devil/devil_agent/devil_agent.dm
deleted file mode 100644
index e9a1d998a7a..00000000000
--- a/code/game/gamemodes/devil/devil_agent/devil_agent.dm
+++ /dev/null
@@ -1,38 +0,0 @@
-/datum/game_mode/devil/devil_agents
- name = "Devil Agents"
- config_tag = "devilagents"
- required_players = 25
- required_enemies = 3
- recommended_enemies = 8
-
- traitors_possible = 10 //hard limit on traitors if scaling is turned off
- num_modifier = 4
- objective_count = 2
-
- var/list/target_list = list()
- var/list/late_joining_list = list()
- minimum_devils = 3
-
-/datum/game_mode/devil/devil_agents/post_setup()
- var/i = 0
- for(var/datum/mind/devil in devils)
- i++
- if(i + 1 > devils.len)
- i = 0
- target_list[devil] = devils[i + 1]
- ..()
-
-/datum/game_mode/devil/devil_agents/forge_devil_objectives(datum/mind/devil_mind, quantity)
- ..(devil_mind, quantity - give_outsell_objective(devil_mind))
-
-/datum/game_mode/devil/devil_agents/proc/give_outsell_objective(datum/mind/devil)
- //If you override this method, have it return the number of objectives added.
- if(target_list.len && target_list[devil]) // Is a double agent
- var/datum/mind/target_mind = target_list[devil]
- var/datum/objective/devil/outsell/outsellobjective = new
- outsellobjective.owner = devil
- outsellobjective.target = target_mind
- outsellobjective.update_explanation_text()
- devil.objectives += outsellobjective
- return 1
- return 0
diff --git a/code/game/gamemodes/devil/devil_game_mode.dm b/code/game/gamemodes/devil/devil_game_mode.dm
deleted file mode 100644
index 3ea91343f6b..00000000000
--- a/code/game/gamemodes/devil/devil_game_mode.dm
+++ /dev/null
@@ -1,67 +0,0 @@
-/datum/game_mode/devil
- name = "devil"
- config_tag = "devil"
- protected_jobs = list("Security Officer", "Warden", "Detective", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate",
- "Internal Affairs Agent", "Librarian", "Chaplain", "Head of Security", "Captain", "Brig Physician",
- "Nanotrasen Navy Officer", "Special Operations Officer", "AI", "Cyborg")
- required_players = 2
- required_enemies = 1
- recommended_enemies = 4
-
- var/traitors_possible = 4 //hard limit on devils if scaling is turned off
- var/num_modifier = 0 // Used for gamemodes, that are a child of traitor, that need more than the usual.
- var/objective_count = 2
- var/minimum_devils = 1
- var/devil_scale_coefficient = 10
-
-/datum/game_mode/devil/announce()
- to_chat(world, {"The current game mode is - Devil!
)
- Devils: Purchase souls and tempt the crew to sin!
- Crew: Resist the lure of sin and remain pure!"})
-
-/datum/game_mode/devil/pre_setup()
-
- if(config.protect_roles_from_antagonist)
- restricted_jobs += protected_jobs
-
- var/list/possible_devils = get_players_for_role(ROLE_DEVIL)
- var/num_devils = 0
- if(!possible_devils.len)
- return 0
- if(config.traitor_scaling)
- num_devils = max(1, round((num_players())/(devil_scale_coefficient))+1)
- else
- num_devils = max(1, min(num_players(), traitors_possible))
-
-
- for(var/j = 0, j < num_devils, j++)
- if (!possible_devils.len)
- break
- var/datum/mind/devil = pick(possible_devils)
- devils += devil
- devil.special_role = ROLE_DEVIL
- devil.restricted_roles = restricted_jobs
-
- log_game("[devil.key] (ckey) has been selected as a [config_tag]")
- possible_devils.Remove(devil)
-
- if(devils.len < required_enemies)
- return 0
- return 1
-
-
-/datum/game_mode/devil/post_setup()
- for(var/datum/mind/devil in devils)
- spawn(rand(10, 100))
- finalize_devil(devil, TRUE)
- spawn(100)
- forge_devil_objectives(devil, objective_count) //This has to be in a separate loop, as we need devil names to be generated before we give objectives in devil agent.
- devil.devilinfo.announce_laws(devil.current)
- var/obj_count = 1
- to_chat(devil.current, " Your current objectives:")
- for(var/datum/objective/objective in devil.objectives)
- to_chat(devil.current, "Objective #[obj_count]: [objective.explanation_text]")
- obj_count++
- modePlayer += devils
- ..()
- return 1
diff --git a/code/game/gamemodes/devil/devilinfo.dm b/code/game/gamemodes/devil/devilinfo.dm
deleted file mode 100644
index 6a7646d5e2e..00000000000
--- a/code/game/gamemodes/devil/devilinfo.dm
+++ /dev/null
@@ -1,559 +0,0 @@
-#define BLOOD_THRESHOLD 3 //How many souls are needed per stage.
-#define TRUE_THRESHOLD 7
-#define ARCH_THRESHOLD 12
-
-#define BASIC_DEVIL 0
-#define BLOOD_LIZARD 1
-#define TRUE_DEVIL 2
-#define ARCH_DEVIL 3
-
-#define LOSS_PER_DEATH 2
-
-#define SOULVALUE (soulsOwned.len-reviveNumber)
-
-#define DEVILRESURRECTTIME 600
-
-GLOBAL_LIST_EMPTY(allDevils)
-GLOBAL_LIST_INIT(lawlorify, list (
- LORE = list(
- OBLIGATION_FOOD = "This devil seems to always offer it's victims food before slaughtering them.",
- OBLIGATION_FIDDLE = "This devil will never turn down a musical challenge.",
- OBLIGATION_DANCEOFF = "This devil will never turn down a dance off.",
- OBLIGATION_GREET = "This devil seems to only be able to converse with people it knows the name of.",
- OBLIGATION_PRESENCEKNOWN = "This devil seems to be unable to attack from stealth.",
- OBLIGATION_SAYNAME = "He will always chant his name upon killing someone.",
- OBLIGATION_ANNOUNCEKILL = "This devil always loudly announces his kills for the world to hear.",
- OBLIGATION_ANSWERTONAME = "This devil always responds to his truename.",
- BANE_SILVER = "Silver seems to gravely injure this devil.",
- BANE_SALT = "Throwing salt at this devil will hinder his ability to use infernal powers temporarily.",
- BANE_LIGHT = "Bright flashes will disorient the devil, likely causing him to flee.",
- BANE_IRON = "Cold iron will slowly injure him, until he can purge it from his system.",
- BANE_WHITECLOTHES = "Wearing clean white clothing will help ward off this devil.",
- BANE_HARVEST = "Presenting the labors of a harvest will disrupt the devil.",
- BANE_TOOLBOX = "That which holds the means of creation also holds the means of the devil's undoing.",
- BAN_HURTWOMAN = "This devil seems to prefer hunting men.",
- BAN_CHAPEL = "This devil avoids holy ground.",
- BAN_HURTPRIEST = "The anointed clergy appear to be immune to his powers.",
- BAN_AVOIDWATER = "The devil seems to have some sort of aversion to water, though it does not appear to harm him.",
- BAN_STRIKEUNCONCIOUS = "This devil only shows interest in those who are awake.",
- BAN_HURTLIZARD = "This devil will not strike an Unathi first.",
- BAN_HURTANIMAL = "This devil avoids hurting animals.",
- BANISH_WATER = "To banish the devil, you must infuse it's body with holy water.",
- BANISH_COFFIN = "This devil will return to life if it's remains are not placed within a coffin.",
- BANISH_FORMALDYHIDE = "To banish the devil, you must inject it's lifeless body with embalming fluid.",
- BANISH_RUNES = "This devil will resurrect after death, unless it's remains are within a rune.",
- BANISH_CANDLES = "A large number of nearby lit candles will prevent it from resurrecting.",
- BANISH_DESTRUCTION = "It's corpse must be utterly destroyed to prevent resurrection.",
- BANISH_FUNERAL_GARB = "If clad in funeral garments, this devil will be unable to resurrect. Should the clothes not fit, lay them gently on top of the devil's corpse."
- ),
- LAW = list(
- OBLIGATION_FOOD = "When not acting in self defense, you must always offer your victim food before harming them.",
- OBLIGATION_FIDDLE = "When not in immediate danger, if you are challenged to a musical duel, you must accept it. You are not obligated to duel the same person twice.",
- OBLIGATION_DANCEOFF = "When not in immediate danger, if you are challenged to a dance off, you must accept it. You are not obligated to face off with the same person twice.",
- OBLIGATION_GREET = "You must always greet other people by their last name before talking with them.",
- OBLIGATION_PRESENCEKNOWN = "You must always make your presence known before attacking.",
- OBLIGATION_SAYNAME = "You must always say your true name after you kill someone.",
- OBLIGATION_ANNOUNCEKILL = "Upon killing someone, you must make your deed known to all within earshot, over comms if reasonably possible.",
- OBLIGATION_ANSWERTONAME = "If you are not under attack, you must always respond to your true name.",
- BAN_HURTWOMAN = "You must never harm a female outside of self defense.",
- BAN_CHAPEL = "You must never attempt to enter the chapel.",
- BAN_HURTPRIEST = "You must never attack a priest.",
- BAN_AVOIDWATER = "You must never willingly touch a wet surface.",
- BAN_STRIKEUNCONCIOUS = "You must never strike an unconscious person.",
- BAN_HURTLIZARD = "You must never harm an Unathi outside of self defense.",
- BAN_HURTANIMAL = "You must never harm a non-sentient creature or robot outside of self defense.",
- BANE_SILVER = "Silver, in all of it's forms shall be your downfall.",
- BANE_SALT = "Salt will disrupt your magical abilities.",
- BANE_LIGHT = "Blinding lights will prevent you from using offensive powers for a time.",
- BANE_IRON = "Cold wrought iron shall act as poison to you.",
- BANE_WHITECLOTHES = "Those clad in pristine white garments will strike you true.",
- BANE_HARVEST = "The fruits of the harvest shall be your downfall.",
- BANE_TOOLBOX = "Toolboxes are bad news for you, for some reason.",
- BANISH_WATER = "If your corpse is filled with holy water, you will be unable to resurrect.",
- BANISH_COFFIN = "If your corpse is in a coffin, you will be unable to resurrect.",
- BANISH_FORMALDYHIDE = "If your corpse is embalmed, you will be unable to resurrect.",
- BANISH_RUNES = "If your corpse is placed within a rune, you will be unable to resurrect.",
- BANISH_CANDLES = "If your corpse is near lit candles, you will be unable to resurrect.",
- BANISH_DESTRUCTION = "If your corpse is destroyed, you will be unable to resurrect.",
- BANISH_FUNERAL_GARB = "If your corpse is clad in funeral garments, you will be unable to resurrect."
- )
- ))
-
-/datum/devilinfo
- var/datum/mind/owner = null
- var/obligation
- var/ban
- var/bane
- var/banish
- var/truename
- var/list/datum/mind/soulsOwned = new
- var/datum/dna/humanform = null
- var/reviveNumber = 0
- var/form = BASIC_DEVIL
- var/exists = 0
- var/static/list/dont_remove_spells = list(
- /obj/effect/proc_holder/spell/targeted/click/summon_contract,
- /obj/effect/proc_holder/spell/targeted/conjure_item/violin,
- /obj/effect/proc_holder/spell/targeted/summon_dancefloor)
- var/ascendable = FALSE
-
-/datum/devilinfo/New()
- ..()
- dont_remove_spells = typecacheof(dont_remove_spells)
-
-/proc/randomDevilInfo(name = randomDevilName())
- var/datum/devilinfo/devil = new
- devil.truename = name
- devil.bane = randomdevilbane()
- devil.obligation = randomdevilobligation()
- devil.ban = randomdevilban()
- devil.banish = randomdevilbanish()
- return devil
-
-/proc/devilInfo(name, saveDetails = 0)
- if(GLOB.allDevils[lowertext(name)])
- return GLOB.allDevils[lowertext(name)]
- else
- var/datum/devilinfo/devil = randomDevilInfo(name)
- GLOB.allDevils[lowertext(name)] = devil
- devil.exists = saveDetails
- return devil
-
-
-
-/proc/randomDevilName()
- var/preTitle = ""
- var/title = ""
- var/mainName = ""
- var/suffix = ""
- if(prob(65))
- if(prob(35))
- preTitle = pick("Dark ", "Hellish ", "Fiery ", "Sinful ", "Blood ")
- title = pick("Lord ", "Fallen Prelate ", "Count ", "Viscount ", "Vizier ", "Elder ", "Adept ")
- var/probability = 100
- mainName = pick("Hal", "Ve", "Odr", "Neit", "Ci", "Quon", "Mya", "Folth", "Wren", "Gyer", "Geyr", "Hil", "Niet", "Twou", "Hu", "Don")
- while(prob(probability))
- mainName += pick("hal", "ve", "odr", "neit", "ca", "quon", "mya", "folth", "wren", "gyer", "geyr", "hil", "niet", "twoe", "phi", "coa")
- probability -= 20
- if(prob(40))
- suffix = pick(" the Red", " the Soulless", " the Master", ", the Lord of all things", ", Jr.")
- return preTitle + title + mainName + suffix
-
-/proc/randomdevilobligation()
- return pick(OBLIGATION_FOOD, OBLIGATION_FIDDLE, OBLIGATION_DANCEOFF, OBLIGATION_GREET, OBLIGATION_PRESENCEKNOWN, OBLIGATION_SAYNAME, OBLIGATION_ANNOUNCEKILL, OBLIGATION_ANSWERTONAME)
-
-/proc/randomdevilban()
- return pick(BAN_HURTWOMAN, BAN_CHAPEL, BAN_HURTPRIEST, BAN_AVOIDWATER, BAN_STRIKEUNCONCIOUS, BAN_HURTLIZARD, BAN_HURTANIMAL)
-
-/proc/randomdevilbane()
- return pick(BANE_SALT, BANE_LIGHT, BANE_IRON, BANE_WHITECLOTHES, BANE_SILVER, BANE_HARVEST, BANE_TOOLBOX)
-
-/proc/randomdevilbanish()
- return pick(BANISH_WATER, BANISH_COFFIN, BANISH_FORMALDYHIDE, BANISH_RUNES, BANISH_CANDLES, BANISH_DESTRUCTION, BANISH_FUNERAL_GARB)
-
-/datum/devilinfo/proc/link_with_mob(mob/living/L)
- if(istype(L, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = L
- humanform = H.dna.Clone()
- owner = L.mind
- give_base_spells(1)
-
-/datum/devilinfo/proc/add_soul(datum/mind/soul)
- if(soulsOwned.Find(soul))
- return
- soulsOwned += soul
- owner.current.set_nutrition(NUTRITION_LEVEL_FULL)
- to_chat(owner.current, "You feel satiated as you received a new soul.")
- update_hud()
- switch(SOULVALUE)
- if(0)
- to_chat(owner.current, "Your hellish powers have been restored.")
- give_base_spells()
- if(BLOOD_THRESHOLD)
- to_chat(owner.current, "You feel as though your humanoid form is about to shed. You will soon turn into a blood lizard.")
- sleep(50)
- increase_blood_lizard()
- if(TRUE_THRESHOLD)
- to_chat(owner.current, "You feel as though your current form is about to shed. You will soon turn into a true devil.")
- sleep(50)
- increase_true_devil()
- if(ARCH_THRESHOLD)
- arch_devil_prelude()
- increase_arch_devil()
-
-/datum/devilinfo/proc/remove_soul(datum/mind/soul)
- if(soulsOwned.Remove(soul))
- to_chat(owner.current, "You feel as though a soul has slipped from your grasp.")
- check_regression()
- update_hud()
-
-/datum/devilinfo/proc/check_regression()
- if(form == ARCH_DEVIL)
- return //arch devil can't regress
- //Yes, fallthrough behavior is intended, so I can't use a switch statement.
- if(form == TRUE_DEVIL && SOULVALUE < TRUE_THRESHOLD)
- regress_blood_lizard()
- if(form == BLOOD_LIZARD && SOULVALUE < BLOOD_THRESHOLD)
- regress_humanoid()
- if(SOULVALUE < 0)
- remove_spells()
- to_chat(owner.current, "As punishment for your failures, all of your powers except contract creation have been revoked.")
-
-/datum/devilinfo/proc/regress_humanoid()
- to_chat(owner.current, "Your powers weaken, have more contracts be signed to regain power.")
- if(istype(owner.current, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = owner.current
- if(humanform)
- H.set_species(humanform.species)
- H.dna = humanform.Clone()
- H.sync_organ_dna(assimilate = 0)
- else
- H.set_species(/datum/species/human)
- // TODO: Add some appearance randomization here or something
- humanform = H.dna.Clone()
- H.regenerate_icons()
- else
- owner.current.color = ""
- give_base_spells()
- if(istype(owner.current.loc, /obj/effect/dummy/slaughter))
- owner.current.forceMove(get_turf(owner.current))//Fixes dying while jaunted leaving you permajaunted.
- form = BASIC_DEVIL
-
-/datum/devilinfo/proc/regress_blood_lizard()
- var/mob/living/carbon/true_devil/D = owner.current
- to_chat(D, "Your powers weaken, have more contracts be signed to regain power.")
- D.oldform.loc = D.loc
- owner.transfer_to(D.oldform)
- D.oldform.status_flags &= ~GODMODE
- give_lizard_spells()
- qdel(D)
- form = BLOOD_LIZARD
- update_hud()
-
-
-/datum/devilinfo/proc/increase_blood_lizard()
- if(ishuman(owner.current))
- var/mob/living/carbon/human/H = owner.current
- var/list/language_temp = H.languages.Copy()
- H.set_species(/datum/species/unathi)
- H.languages = language_temp
- H.underwear = "Nude"
- H.undershirt = "Nude"
- H.socks = "Nude"
- H.change_skin_color(80, 16, 16) //A deep red
- H.regenerate_icons()
- else //Did the devil get hit by a staff of transmutation?
- owner.current.color = "#501010"
- give_lizard_spells()
- form = BLOOD_LIZARD
-
-
-
-/datum/devilinfo/proc/increase_true_devil()
- var/mob/living/carbon/true_devil/A = new /mob/living/carbon/true_devil(owner.current.loc, owner.current)
- A.faction |= "hell"
- // Put the old body in stasis
- owner.current.status_flags |= GODMODE
- owner.current.loc = A
- A.oldform = owner.current
- owner.transfer_to(A)
- A.set_name()
- give_true_spells()
- form = TRUE_DEVIL
- update_hud()
-
-/datum/devilinfo/proc/arch_devil_prelude()
- if(!ascendable)
- return
- var/mob/living/carbon/true_devil/D = owner.current
- to_chat(D, "You feel as though your form is about to ascend.")
- sleep(50)
- if(!D)
- return
- D.visible_message("[D]'s skin begins to erupt with spikes.", \
- "Your flesh begins creating a shield around yourself.")
- sleep(100)
- if(!D)
- return
- D.visible_message("The horns on [D]'s head slowly grow and elongate.", \
- "Your body continues to mutate. Your telepathic abilities grow.")
- sleep(90)
- if(!D)
- return
- D.visible_message("[D]'s body begins to violently stretch and contort.", \
- "You begin to rend apart the final barriers to ultimate power.")
- sleep(40)
- if(!D)
- return
- to_chat(D, "Yes!")
- sleep(10)
- if(!D)
- return
- to_chat(D, "YES!!")
- sleep(10)
- if(!D)
- return
- to_chat(D, "YE--")
- sleep(1)
- if(!D)
- return
- to_chat(world, "SLOTH, WRATH, GLUTTONY, ACEDIA, ENVY, GREED, PRIDE! FIRES OF HELL AWAKEN!!")
- SEND_SOUND(world, sound('sound/hallucinations/veryfar_noise.ogg'))
- sleep(50)
- if(!SSticker.mode.devil_ascended)
- SSshuttle.emergency.request(null, 0.3)
- SSticker.mode.devil_ascended++
-
-/datum/devilinfo/proc/increase_arch_devil()
- if(!ascendable)
- return
- var/mob/living/carbon/true_devil/D = owner.current
- if(!istype(D))
- return
- give_arch_spells()
- D.convert_to_archdevil()
- if(istype(D.loc, /obj/effect/dummy/slaughter))
- D.forceMove(get_turf(D))
- var/area/A = get_area(owner.current)
- if(A)
- notify_ghosts("An arch devil has ascended in [A.name]. Reach out to the devil to start climbing the infernal corporate ladder.", title = "Arch Devil Ascended", source = owner.current, action = NOTIFY_ATTACK)
- form = ARCH_DEVIL
-
-/datum/devilinfo/proc/remove_spells()
- for(var/X in owner.spell_list)
- var/obj/effect/proc_holder/spell/S = X
- if(!is_type_in_typecache(S, dont_remove_spells))
- owner.RemoveSpell(S)
-
-/datum/devilinfo/proc/give_summon_contract()
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/click/summon_contract(null))
-
-
-/datum/devilinfo/proc/give_base_spells(give_summon_contract = 0)
- remove_spells()
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/click/fireball/hellish(null))
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/pitchfork(null))
- if(give_summon_contract)
- give_summon_contract()
- if(obligation == OBLIGATION_FIDDLE)
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/violin(null))
- if(obligation == OBLIGATION_DANCEOFF)
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_dancefloor(null))
-
-/datum/devilinfo/proc/give_lizard_spells()
- remove_spells()
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/pitchfork(null))
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/click/fireball/hellish(null))
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null))
-
-/datum/devilinfo/proc/give_true_spells()
- remove_spells()
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/pitchfork/greater(null))
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/click/fireball/hellish(null))
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null))
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch(null))
-
-/datum/devilinfo/proc/give_arch_spells()
- remove_spells()
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/pitchfork/ascended(null))
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch/ascended(null))
-
-/datum/devilinfo/proc/beginResurrectionCheck(mob/living/body)
- if(owner.current != body)
- body = owner.current
- if(SOULVALUE > 0)
- to_chat(owner.current, "Your body has been damaged to the point that you may no longer use it. At the cost of some of your power, you will return to life soon.")
- addtimer(CALLBACK(src, "activateResurrection", body), DEVILRESURRECTTIME)
- else
- to_chat(owner.messageable_mob(), "Your hellish powers are too weak to resurrect yourself.")
-
-/datum/devilinfo/proc/activateResurrection(mob/living/body)
- if(QDELETED(body) || body.stat == DEAD)
- if(SOULVALUE > 0)
- if(check_banishment(body))
- to_chat(owner.messageable_mob(), "Unfortunately, the mortals have finished a ritual that prevents your resurrection.")
- return -1
- else
- to_chat(owner.messageable_mob(), "WE LIVE AGAIN!")
- return hellish_resurrection(body)
- else
- to_chat(owner.messageable_mob(), "Unfortunately, the power that stemmed from your contracts has been extinguished. You no longer have enough power to resurrect.")
- return -1
- else
- to_chat(owner.current, "You seem to have resurrected without your hellish powers.")
-
-/datum/devilinfo/proc/check_banishment(mob/living/body)
- switch(banish)
- if(BANISH_WATER)
- if(!QDELETED(body) && iscarbon(body))
- var/mob/living/carbon/H = body
- return H.reagents.has_reagent("holy water")
- return 0
- if(BANISH_COFFIN)
- return (!QDELETED(body) && istype(body.loc, /obj/structure/closet/coffin))
- if(BANISH_FORMALDYHIDE)
- if(!QDELETED(body) && iscarbon(body))
- var/mob/living/carbon/H = body
- return H.reagents.has_reagent("formaldehyde")
- return 0
- if(BANISH_RUNES)
- if(!QDELETED(body))
- for(var/obj/effect/decal/cleanable/crayon/R in range(0,body))
- if (R.name == "rune")
- return 1
- return 0
- if(BANISH_CANDLES)
- if(!QDELETED(body))
- var/count = 0
- for(var/obj/item/candle/C in range(1,body))
- count += C.lit
- if(count>=4)
- return 1
- return 0
- if(BANISH_DESTRUCTION)
- if(!QDELETED(body))
- return 0
- return 1
- if(BANISH_FUNERAL_GARB)
- if(!QDELETED(body) && iscarbon(body))
- var/mob/living/carbon/human/H = body
- if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under/burial))
- return 1
- return 0
- else
- for(var/obj/item/clothing/under/burial/B in range(0,body))
- if(B.loc == get_turf(B)) //Make sure it's not in someone's inventory or something.
- return 1
- return 0
-
-/datum/devilinfo/proc/hellish_resurrection(mob/living/body)
- message_admins("[owner.name] (true name is: [truename]) is resurrecting using hellish energy.")
- if(SOULVALUE <= ARCH_THRESHOLD && ascendable) // once ascended, arch devils do not go down in power by any means.
- reviveNumber += LOSS_PER_DEATH
- update_hud()
- if(!QDELETED(body))
- body.revive()
- if(!body.client)
- var/mob/dead/observer/O = owner.get_ghost()
- O.reenter_corpse()
- if(istype(body.loc, /obj/effect/dummy/slaughter))
- body.forceMove(get_turf(body))//Fixes dying while jaunted leaving you permajaunted.
- if(istype(body, /mob/living/carbon/true_devil))
- var/mob/living/carbon/true_devil/D = body
- if(D.oldform)
- D.oldform.revive() // Heal the old body too, so the devil doesn't resurrect, then immediately regress into a dead body.
- if(body.stat == DEAD) // Not sure why this would happen
- create_new_body()
- else if(GLOB.blobstart.len > 0)
- // teleport the body so repeated beatdowns aren't an option)
- body.forceMove(get_turf(pick(GLOB.blobstart)))
- // give them the devil lawyer outfit in case they got stripped
- if(ishuman(body))
- var/mob/living/carbon/human/H = body
- H.equipOutfit(/datum/outfit/devil_lawyer)
- else
- create_new_body()
- check_regression()
-
-/datum/devilinfo/proc/create_new_body()
- if(GLOB.blobstart.len > 0)
- var/turf/targetturf = get_turf(pick(GLOB.blobstart))
- var/mob/currentMob = owner.current
- if(QDELETED(currentMob))
- currentMob = owner.get_ghost()
- if(!currentMob)
- message_admins("[owner.name]'s devil resurrection failed due to client logoff. Aborting.")
- return -1
- if(currentMob.mind != owner)
- message_admins("[owner.name]'s devil resurrection failed due to becoming a new mob. Aborting.")
- return -1
- var/mob/living/carbon/human/H = new /mob/living/carbon/human(targetturf)
- owner.transfer_to(H)
- if(isobserver(currentMob))
- var/mob/dead/observer/O = currentMob
- O.reenter_corpse()
- if(humanform)
- H.set_species(humanform.species)
- H.dna = humanform.Clone()
-
- H.dna.UpdateSE()
- H.dna.UpdateUI()
-
- H.sync_organ_dna(1) // It's literally a fresh body as you can get, so all organs properly belong to it
- H.UpdateAppearance()
- else
- // gibbed cyborg or similar - create a randomized "humanform" appearance
- H.scramble_appearance()
- humanform = H.dna.Clone()
-
-
- H.equipOutfit(/datum/outfit/devil_lawyer)
- give_base_spells(TRUE)
- if(SOULVALUE >= BLOOD_THRESHOLD)
- increase_blood_lizard()
- if(SOULVALUE >= TRUE_THRESHOLD) //Yes, BOTH this and the above if statement are to run if soulpower is high enough.
- increase_true_devil()
- if(SOULVALUE >= ARCH_THRESHOLD && ascendable)
- increase_arch_devil()
- else
- throw EXCEPTION("Unable to find a blobstart landmark for hellish resurrection")
-
-/datum/devilinfo/proc/update_hud()
- if(istype(owner.current, /mob/living/carbon))
- var/mob/living/C = owner.current
- if(C.hud_used && C.hud_used.devilsouldisplay)
- C.hud_used.devilsouldisplay.update_counter(SOULVALUE)
-
-// SECTION: Messages and explanations
-
-/datum/devilinfo/proc/announce_laws(mob/living/owner)
- to_chat(owner, "You remember your link to the infernal. You are [truename], an agent of hell, a devil. And you were sent to the plane of creation for a reason. A greater purpose. Convince the crew to sin, and embroiden Hell's grasp.")
- to_chat(owner, "However, your infernal form is not without weaknesses.")
- to_chat(owner, "You may not use violence to coerce someone into selling their soul.")
- to_chat(owner, "You may not directly and knowingly physically harm a devil, other than yourself.")
- to_chat(owner,GLOB.lawlorify[LAW][bane])
- to_chat(owner,GLOB.lawlorify[LAW][ban])
- to_chat(owner,GLOB.lawlorify[LAW][obligation])
- to_chat(owner,GLOB.lawlorify[LAW][banish])
- to_chat(owner, "
Remember, the crew can research your weaknesses if they find out your devil name.
")
-
-
-#undef BLOOD_THRESHOLD
-#undef TRUE_THRESHOLD
-#undef ARCH_THRESHOLD
-#undef BASIC_DEVIL
-#undef BLOOD_LIZARD
-#undef TRUE_DEVIL
-#undef ARCH_DEVIL
-#undef LOSS_PER_DEATH
-#undef SOULVALUE
-#undef DEVILRESURRECTTIME
-
-/datum/outfit/devil_lawyer
- name = "Devil Lawyer"
- uniform = /obj/item/clothing/under/lawyer/black
- shoes = /obj/item/clothing/shoes/laceup
- back = /obj/item/storage/backpack
- l_hand = /obj/item/storage/briefcase
- l_pocket = /obj/item/pen
- l_ear = /obj/item/radio/headset
-
- id = /obj/item/card/id
-
-/datum/outfit/devil_lawyer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- var/obj/item/card/id/W = H.wear_id
- if(!istype(W) || W.assignment) // either doesn't have a card, or the card is already written to
- return
- var/name_to_use = H.real_name
- if(H.mind && H.mind.devilinfo)
- // Having hell create an ID for you causes its risks
- name_to_use = H.mind.devilinfo.truename
-
- W.name = "[name_to_use]'s ID Card (Lawyer)"
- W.registered_name = name_to_use
- W.assignment = "Lawyer"
- W.rank = W.assignment
- W.age = H.age
- W.sex = capitalize(H.gender)
- W.access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE, ACCESS_EXTERNAL_AIRLOCKS)
- W.photo = get_id_photo(H)
diff --git a/code/game/gamemodes/devil/game_mode.dm b/code/game/gamemodes/devil/game_mode.dm
deleted file mode 100644
index 7e9f054faea..00000000000
--- a/code/game/gamemodes/devil/game_mode.dm
+++ /dev/null
@@ -1,94 +0,0 @@
-/datum/game_mode
- var/list/datum/mind/sintouched = list()
- var/list/datum/mind/devils = list()
- var/devil_ascended = 0 // Number of arch devils on station
-
-/datum/game_mode/proc/auto_declare_completion_sintouched()
- var/text = ""
- if(sintouched.len)
- text += "
The sintouched were:"
- var/list/sintouchedUnique = uniqueList(sintouched)
- for(var/S in sintouchedUnique)
- var/datum/mind/sintouched_mind = S
- text += printplayer(sintouched_mind)
- text += printobjectives(sintouched_mind)
- text += "
"
- text += "
"
- to_chat(world,text)
-
-/datum/game_mode/proc/auto_declare_completion_devils()
- var/text = ""
- if(devils.len)
- text += "
The devils were:"
- for(var/D in devils)
- var/datum/mind/devil = D
- text += printplayer(devil)
- text += printdevilinfo(devil)
- text += printobjectives(devil)
- text += "
"
- text += "
"
- to_chat(world,text)
-
-
-/datum/game_mode/proc/finalize_devil(datum/mind/devil_mind, ascendable = FALSE)
- var/trueName= randomDevilName()
- devil_mind.devilinfo = devilInfo(trueName, 1)
- devil_mind.devilinfo.ascendable = ascendable
- devil_mind.store_memory("Your diabolical true name is [devil_mind.devilinfo.truename]
[GLOB.lawlorify[LAW][devil_mind.devilinfo.ban]]
You may not use violence to coerce someone into selling their soul.
You may not directly and knowingly physically harm a devil, other than yourself.
[GLOB.lawlorify[LAW][devil_mind.devilinfo.bane]]
[GLOB.lawlorify[LAW][devil_mind.devilinfo.obligation]]
[GLOB.lawlorify[LAW][devil_mind.devilinfo.banish]]
")
- devil_mind.devilinfo.link_with_mob(devil_mind.current)
- if(devil_mind.assigned_role == "Clown")
- to_chat(devil_mind.current, "Your infernal nature allows you to wield weapons without harming yourself.")
- devil_mind.current.dna.SetSEState(GLOB.clumsyblock, FALSE)
- singlemutcheck(devil_mind.current, GLOB.clumsyblock, MUTCHK_FORCED)
- var/datum/action/innate/toggle_clumsy/A = new
- A.Grant(devil_mind.current)
- spawn(10)
- devil_mind.devilinfo.update_hud()
- if(issilicon(devil_mind.current))
- var/mob/living/silicon/S = devil_mind.current
- S.laws.set_sixsixsix_law("You may not use violence to coerce someone into selling their soul.")
- S.laws.set_sixsixsix_law("You may not directly and knowingly physically harm a devil, other than yourself.")
- S.laws.set_sixsixsix_law("[GLOB.lawlorify[LAW][devil_mind.devilinfo.ban]]")
- S.laws.set_sixsixsix_law("[GLOB.lawlorify[LAW][devil_mind.devilinfo.obligation]]")
- S.laws.set_sixsixsix_law("Accomplish your objectives at all costs.")
-
-// unsure about the second "quantity" arg and how it fits with the antag refactor
-/datum/game_mode/proc/forge_devil_objectives(datum/mind/devil_mind, quantity)
- var/list/validtypes = list(/datum/objective/devil/soulquantity, /datum/objective/devil/soulquality, /datum/objective/devil/sintouch, /datum/objective/devil/buy_target)
- for(var/i = 1 to quantity)
- var/type = pick(validtypes)
- var/datum/objective/devil/objective = new type(null)
- objective.owner = devil_mind
- devil_mind.objectives += objective
- if(!istype(objective, /datum/objective/devil/buy_target))
- validtypes -= type //prevent duplicate objectives, EXCEPT for buy_target.
- else
- objective.find_target()
-
-/datum/game_mode/proc/greet_devil(datum/mind/devil_mind)
- if(!devil_mind.devilinfo)
- return
- devil_mind.devilinfo.announce_laws(devil_mind.current)
- devil_mind.announce_objectives()
-
-
-/datum/game_mode/proc/printdevilinfo(datum/mind/ply)
- if(!ply.devilinfo)
- return "Target is not a devil."
- var/text = "The devil's true name is: [ply.devilinfo.truename]"
- text += "The devil's bans were:"
- text += " [GLOB.lawlorify[LORE][ply.devilinfo.ban]]"
- text += " [GLOB.lawlorify[LORE][ply.devilinfo.bane]]"
- text += " [GLOB.lawlorify[LORE][ply.devilinfo.obligation]]"
- text += " [GLOB.lawlorify[LORE][ply.devilinfo.banish]]"
- return text
-
-/datum/game_mode/proc/update_devil_icons_added(datum/mind/devil_mind)
- var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_DEVIL]
- hud.join_hud(devil_mind.current)
- set_antag_hud(devil_mind.current, "huddevil")
-
-/datum/game_mode/proc/update_devil_icons_removed(datum/mind/devil_mind)
- var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_DEVIL]
- hud.leave_hud(devil_mind.current)
- set_antag_hud(devil_mind.current, null)
diff --git a/code/game/gamemodes/devil/imp/imp.dm b/code/game/gamemodes/devil/imp/imp.dm
deleted file mode 100644
index e863eaf1f6a..00000000000
--- a/code/game/gamemodes/devil/imp/imp.dm
+++ /dev/null
@@ -1,54 +0,0 @@
-//////////////////The Monster
-
-/mob/living/simple_animal/imp
- name = "imp"
- real_name = "imp"
- desc = "A large, menacing creature covered in armored black scales."
- speak_emote = list("cackles")
- emote_hear = list("cackles","screeches")
- response_help = "thinks better of touching"
- response_disarm = "flails at"
- response_harm = "punches"
- icon = 'icons/mob/mob.dmi'
- icon_state = "imp"
- icon_living = "imp"
- speed = 1
- a_intent = INTENT_HARM
- stop_automated_movement = 1
- status_flags = CANPUSH
- attack_sound = 'sound/misc/demon_attack1.ogg'
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 250 //Weak to cold
- maxbodytemp = INFINITY
- faction = list("hell")
- attacktext = "wildly tears into"
- maxHealth = 200
- health = 200
- healable = 0
- environment_smash = 1
- melee_damage_lower = 10
- melee_damage_upper = 15
- see_in_dark = 8
- lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
- var/boost
- var/playstyle_string = "You are an imp, a mischevious creature from hell. You are the lowest rank on the hellish totem pole \
- Though you are not obligated to help, perhaps by aiding a higher ranking devil, you might just get a promotion. However, you are incapable \
- of intentionally harming a fellow devil."
-
-/mob/living/simple_animal/imp/New()
- ..()
- boost = world.time + 60
-
-/mob/living/simple_animal/imp/Life()
- ..()
- if(boost[src] screams in agony as it sublimates into a sulfurous smoke.")
- ghostize()
- qdel(src)
diff --git a/code/game/gamemodes/devil/objectives.dm b/code/game/gamemodes/devil/objectives.dm
deleted file mode 100644
index 04d0217b599..00000000000
--- a/code/game/gamemodes/devil/objectives.dm
+++ /dev/null
@@ -1,109 +0,0 @@
-/datum/objective/devil
-
-/datum/objective/devil/soulquantity
- explanation_text = "You shouldn't see this text. Error:DEVIL1"
- target_amount = 4
-
-/datum/objective/devil/soulquantity/New()
- target_amount = pick(6, 7, 8)
- update_explanation_text()
-
-/datum/objective/devil/proc/update_explanation_text()
- //Intentionally empty
-
-/datum/objective/devil/soulquantity/update_explanation_text()
- explanation_text = "Purchase, and retain control over at least [target_amount] souls."
-
-/datum/objective/devil/soulquantity/check_completion()
- var/count = 0
- for(var/S in owner.devilinfo.soulsOwned)
- var/datum/mind/L = S
- if(L.soulOwner == owner)
- count++
- return count >= target_amount
-
-
-
-/datum/objective/devil/soulquality
- explanation_text = "You shouldn't see this text. Error:DEVIL2"
- var/contractType
- var/contractName
-
-/datum/objective/devil/soulquality/New()
- contractType = pick(CONTRACT_POWER, CONTRACT_WEALTH, CONTRACT_PRESTIGE, CONTRACT_MAGIC, CONTRACT_REVIVE, CONTRACT_KNOWLEDGE)
- target_amount = pick(1, 2)
- switch(contractType)
- if(CONTRACT_POWER)
- contractName = "for power"
- if(CONTRACT_WEALTH)
- contractName = "for wealth"
- if(CONTRACT_PRESTIGE)
- contractName = "for prestige"
- if(CONTRACT_MAGIC)
- contractName = "for magic"
- if(CONTRACT_REVIVE)
- contractName = "of revival"
- if(CONTRACT_KNOWLEDGE)
- contractName = "for knowledge"
- update_explanation_text()
-
-/datum/objective/devil/soulquality/update_explanation_text()
- explanation_text = "Have mortals sign at least [target_amount] contracts [contractName]."
-
-/datum/objective/devil/soulquality/check_completion()
- var/count = 0
- for(var/S in owner.devilinfo.soulsOwned)
- var/datum/mind/L = S
- if(L.soulOwner != L && L.damnation_type == contractType)
- count++
- return count >= target_amount
-
-
-
-/datum/objective/devil/sintouch
- explanation_text = "You shouldn't see this text. Error:DEVIL3"
-
-/datum/objective/devil/sintouch/New()
- target_amount = pick(4, 5)
- explanation_text = "Ensure at least [target_amount] mortals are sintouched."
-
-/datum/objective/devil/sintouch/check_completion()
- return target_amount <= SSticker.mode.sintouched.len
-
-
-
-/datum/objective/devil/buy_target
- explanation_text = "You shouldn't see this text. Error:DEVIL4"
-
-/datum/objective/devil/buy_target/New()
- find_target()
- update_explanation_text()
-
-/datum/objective/devil/buy_target/update_explanation_text()
- if(target)
- explanation_text = "Purchase and retain the soul of [target.name], the [target.assigned_role]."
- else
- explanation_text = "Free objective."
-
-/datum/objective/devil/buy_target/check_completion()
- return target.soulOwner == owner
-
-
-/datum/objective/devil/outsell
- explanation_text = "You shouldn't see this text. Error:DEVIL5"
-
-/datum/objective/devil/outsell/update_explanation_text()
- explanation_text = "Purchase and retain control over more souls than [target.devilinfo.truename], known to mortals as [target.name], the [target.assigned_role]."
-
-/datum/objective/devil/outsell/check_completion()
- var/selfcount = 0
- for(var/S in owner.devilinfo.soulsOwned)
- var/datum/mind/L = S
- if(L.soulOwner == owner)
- selfcount++
- var/targetcount = 0
- for(var/S in target.devilinfo.soulsOwned)
- var/datum/mind/L = S
- if(L.soulOwner == target)
- targetcount++
- return selfcount > targetcount
diff --git a/code/game/gamemodes/devil/true_devil/_true_devil.dm b/code/game/gamemodes/devil/true_devil/_true_devil.dm
deleted file mode 100644
index 197524c0e38..00000000000
--- a/code/game/gamemodes/devil/true_devil/_true_devil.dm
+++ /dev/null
@@ -1,218 +0,0 @@
-#define DEVIL_R_HAND_LAYER 1
-#define DEVIL_L_HAND_LAYER 2
-#define DEVIL_TOTAL_LAYERS 2
-
-// This is used primarily for having hands.
-/mob/living/carbon/true_devil
- name = "True Devil"
- desc = "A pile of infernal energy, taking a vaguely humanoid form."
- icon = 'icons/mob/32x64.dmi'
- icon_state = "true_devil"
- gender = NEUTER
- health = 350
- maxHealth = 350
- ventcrawler = FALSE
- density = TRUE
- pass_flags = 0
- var/ascended = FALSE
- sight = (SEE_TURFS | SEE_OBJS)
- status_flags = CANPUSH
- universal_understand = TRUE
- universal_speak = TRUE //The devil speaks all languages meme
- var/mob/living/oldform
- var/list/devil_overlays[DEVIL_TOTAL_LAYERS]
-
-/mob/living/carbon/true_devil/New(loc, mob/living/carbon/dna_source)
- dna = dna_source.dna.Clone()
- var/obj/item/organ/internal/brain/B = new(src)
- var/obj/item/organ/internal/ears/E = new(src)
- B.insert()
- E.insert()
- ..()
-
-// inventory system could use some love
-/mob/living/carbon/true_devil/put_in_hands(obj/item/W)
- if(!W)
- return 0
- if(put_in_active_hand(W))
- return TRUE
- else if(put_in_inactive_hand(W))
- return TRUE
- else
- ..()
-
-/mob/living/carbon/true_devil/proc/convert_to_archdevil()
- maxHealth = 5000 // not an IMPOSSIBLE amount, but still near impossible.
- ascended = TRUE
- health = maxHealth
- icon_state = "arch_devil"
-
-/mob/living/carbon/true_devil/proc/set_name()
- name = mind.devilinfo.truename
- real_name = name
-
-/mob/living/carbon/true_devil/Login()
- ..()
- if(mind.devilinfo)
- mind.devilinfo.announce_laws(src)
- mind.announce_objectives()
-
-
-/mob/living/carbon/true_devil/death(gibbed)
- . = ..(gibbed)
- drop_l_hand()
- drop_r_hand()
-
-
-/mob/living/carbon/true_devil/examine(mob/user)
- var/msg = "*---------*\nThis is [bicon(src)] [src]!\n"
-
- //Left hand items
- if(l_hand && !(l_hand.flags & ABSTRACT))
- if(l_hand.blood_DNA)
- msg += "It is holding [bicon(l_hand)] [l_hand.gender == PLURAL? "some" : "a"] blood-stained [l_hand.name] in its left hand!\n"
- else
- msg += "It is holding [bicon(l_hand)] \a [l_hand] in its left hand.\n"
-
- //Right hand items
- if(r_hand && !(r_hand.flags & ABSTRACT))
- if(r_hand.blood_DNA)
- msg += "It is holding [bicon(r_hand)] [r_hand.gender == PLURAL? "some" : "a"] blood-stained [r_hand.name] in its right hand!\n"
- else
- msg += "It is holding [bicon(r_hand)] \a [r_hand] in its right hand.\n"
-
- //Braindead
- if(!client && stat != DEAD)
- msg += "The devil seems to be in deep contemplation.\n"
-
- //Damaged
- if(stat == DEAD)
- msg += "The hellfire seems to have been extinguished, for now at least.\n"
- else if(health < (maxHealth/10))
- msg += "You can see hellfire inside of it's gaping wounds.\n"
- else if(health < (maxHealth/2))
- msg += "You can see hellfire inside of it's wounds.\n"
- msg += "*---------*"
- . = list(msg)
-
-
-/mob/living/carbon/true_devil/IsAdvancedToolUser()
- return TRUE
-
-/mob/living/carbon/true_devil/assess_threat()
- return 666
-
-/mob/living/carbon/true_devil/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0)
- if(mind && has_bane(BANE_LIGHT))
- mind.disrupt_spells(-500)
- return ..() //flashes don't stop devils UNLESS it's their bane.
-
-
-/mob/living/carbon/true_devil/attacked_by(obj/item/I, mob/living/user, def_zone)
- var/weakness = check_weakness(I, user)
- apply_damage(I.force * weakness, I.damtype, def_zone)
- var/message_verb = ""
- if(I.attack_verb && I.attack_verb.len)
- message_verb = "[pick(I.attack_verb)]"
- else if(I.force)
- message_verb = "attacked"
-
- var/attack_message = "[src] has been [message_verb] with [I]."
- if(user)
- user.do_attack_animation(src)
- if(user in viewers(src, null))
- attack_message = "[user] has [message_verb] [src] with [I]!"
- if(message_verb)
- visible_message("[attack_message]",
- "[attack_message]")
- return TRUE
-
-/mob/living/carbon/true_devil/UnarmedAttack(atom/A, proximity)
- if(!ishuman(A))
- // `attack_hand` on mobs assumes the attacker is a human
- // I am the worst
- A.attack_hand(src)
- // If the devil wants to actually attack, they have the pitchfork.
-
-
-/mob/living/carbon/true_devil/Process_Spacemove(movement_dir = 0)
- return TRUE
-
-/mob/living/carbon/true_devil/singularity_act()
- if(ascended)
- return 0
- return ..()
-
-/mob/living/carbon/true_devil/attack_ghost(mob/dead/observer/user as mob)
- if(ascended || user.mind.soulOwner == src.mind)
- var/mob/living/simple_animal/imp/S = new(get_turf(loc))
- S.key = user.key
- S.mind.assigned_role = "MODE"
- S.mind.special_role = "Imp"
- var/datum/objective/newobjective = new
- newobjective.explanation_text = "Try to get a promotion to a higher infernal rank."
- S.mind.objectives += newobjective
- to_chat(S,S.playstyle_string)
- to_chat(S,"Objective #1: [newobjective.explanation_text]")
- return
- else
- return ..()
-
-/mob/living/carbon/true_devil/resist_fire()
- //They're immune to fire.
-
-/mob/living/carbon/true_devil/attack_hand(mob/living/carbon/human/M)
- if(..())
- switch(M.a_intent)
- if(INTENT_HARM)
- var/damage = rand(1, 5)
- playsound(loc, "punch", 25, 1, -1)
- visible_message("[M] has punched [src]!", \
- "[M] has punched [src]!")
- adjustBruteLoss(damage)
- add_attack_logs(M, src, "attacked")
- updatehealth()
- if(INTENT_DISARM)
- if(!lying && !ascended) //No stealing the arch devil's pitchfork.
- if(prob(5))
- // Weaken knocks people over
- // Paralyse knocks people out
- // It's Paralyse for parity though
- // Weaken(2)
- Paralyse(2)
- playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
- add_attack_logs(M, src, "pushed")
- visible_message("[M] has pushed down [src]!", \
- "[M] has pushed down [src]!")
- else
- if(prob(25))
- drop_item()
- playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
- visible_message("[M] has disarmed [src]!", \
- "[M] has disarmed [src]!")
- else
- playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
- visible_message("[M] has attempted to disarm [src]!")
-
-/mob/living/carbon/true_devil/handle_breathing()
- // devils do not need to breathe
-
-/mob/living/carbon/true_devil/is_literate()
- return TRUE
-
-/mob/living/carbon/true_devil/ex_act(severity, ex_target)
- if(!ascended)
- var/b_loss
- switch (severity)
- if (1)
- b_loss = 500
- if (2)
- b_loss = 150
- if(3)
- b_loss = 30
- if(has_bane(BANE_LIGHT))
- b_loss *=2
- adjustBruteLoss(b_loss)
- return ..()
-
-#undef DEVIL_TOTAL_LAYERS
diff --git a/code/game/gamemodes/devil/true_devil/inventory.dm b/code/game/gamemodes/devil/true_devil/inventory.dm
deleted file mode 100644
index 7b6d6fb3013..00000000000
--- a/code/game/gamemodes/devil/true_devil/inventory.dm
+++ /dev/null
@@ -1,50 +0,0 @@
-/mob/living/carbon/true_devil/unEquip(obj/item/I, force, silent = FALSE)
- if(..())
- update_inv_r_hand()
- update_inv_l_hand()
- return 1
- return 0
-
-/mob/living/carbon/true_devil/update_inv_r_hand()
- ..()
- if(r_hand)
- var/t_state = r_hand.item_state
- if(!t_state)
- t_state = r_hand.icon_state
-
- var/image/I = image("icon" = r_hand.righthand_file, "icon_state" = "[t_state]")
- I = center_image(I, r_hand.inhand_x_dimension, r_hand.inhand_y_dimension)
- devil_overlays[DEVIL_R_HAND_LAYER] = I
- else
- devil_overlays[DEVIL_R_HAND_LAYER] = null
- update_icons()
-
-
-/mob/living/carbon/true_devil/update_inv_l_hand()
- ..()
- if(l_hand)
- var/t_state = l_hand.item_state
- if(!t_state)
- t_state = l_hand.icon_state
-
- var/image/I = image("icon" = l_hand.lefthand_file, "icon_state" = "[t_state]")
- I = center_image(I, l_hand.inhand_x_dimension, l_hand.inhand_y_dimension)
- devil_overlays[DEVIL_L_HAND_LAYER] = I
- else
- devil_overlays[DEVIL_L_HAND_LAYER] = null
- update_icons()
-
-/mob/living/carbon/true_devil/proc/remove_overlay(cache_index)
- if(devil_overlays[cache_index])
- overlays -= devil_overlays[cache_index]
- devil_overlays[cache_index] = null
-
-
-/mob/living/carbon/true_devil/proc/apply_overlay(cache_index)
- var/image/I = devil_overlays[cache_index]
- if(I)
- if(I in overlays)
- return
- var/list/new_overlays = overlays.Copy()
- new_overlays += I
- overlays = new_overlays
diff --git a/code/game/gamemodes/miniantags/sintouched/objectives.dm b/code/game/gamemodes/miniantags/sintouched/objectives.dm
deleted file mode 100644
index 04e0e3266f0..00000000000
--- a/code/game/gamemodes/miniantags/sintouched/objectives.dm
+++ /dev/null
@@ -1,34 +0,0 @@
-/datum/objective/sintouched
- completed = 1
-
-/* NO ERP OBJECTIVE FOR YOU.
-/datum/objective/sintouched/lust
- dangerrating = 3 // it's not AS dangerous.
-
-/datum/objective/sintouched/lust/New()
- var/mob/dead/D = pick(dead_mob_list)
- if(prob(50) && D)
- explanation_text = "You know that [D] has perished.... and you think [D] is kinda cute. Make sure everyone knows how HOT [D]'s lifeless body is."
- else
- explanation_text = "Go get married, then immediately cheat on your new spouse." */
-
-/datum/objective/sintouched/gluttony
- explanation_text = "Food is delicious, so delicious you can't let it be wasted on other people."
-
-/datum/objective/sintouched/greed
- explanation_text = "You want MORE, more money, more wealth, more riches. Go get it, but don't hurt people for it."
-
-/datum/objective/sintouched/sloth
- explanation_text = "You just get tired randomly. Go take a nap at a time that would inconvenience other people."
-
-/datum/objective/sintouched/wrath
- explanation_text = "What have your coworkers ever done for you? Don't offer to help them in any matter, and refuse if asked."
-
-/datum/objective/sintouched/envy
- explanation_text = "Why should you be stuck with your rank? Show everyone you can do other jobs too, and don't let anyone stop you, least of all because you have no training."
-
-/datum/objective/sintouched/pride
- explanation_text = "You are the BEST thing on the station. Make sure everyone knows it."
-
-/datum/objective/sintouched/acedia
- explanation_text = "Angels, devils, good, evil... who cares? Just ignore any hellish threats and do your job."
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index d1dc6f7ac68..c00da271829 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -210,12 +210,6 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\
if(radio_announce)
Radio.autosay(message, name, "Medical", list(z))
-/obj/machinery/clonepod/proc/spooky_devil_flavor()
- playsound(loc, pick('sound/goonstation/voice/male_scream.ogg', 'sound/goonstation/voice/female_scream.ogg'), 100, 1)
- mess = TRUE
- update_icon()
- connected_message("If you keep trying to steal from me, you'll end up with me.")
-
//Start growing a human clone in the pod!
/obj/machinery/clonepod/proc/growclone(datum/dna2/record/R)
if(mess || attempting || panel_open || stat & (NOPOWER|BROKEN))
@@ -225,11 +219,6 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\
return 0
if(clonemind.current && clonemind.current.stat != DEAD) //mind is associated with a non-dead body
return 0
- if(clonemind.damnation_type)
- spooky_devil_flavor()
- return 0
- if(!clonemind.is_revivable()) //Other reasons for being unrevivable
- return 0
if(clonemind.active) //somebody is using that mind
if(ckey(clonemind.key) != R.ckey )
return 0
@@ -331,7 +320,7 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\
connected_message("Clone Ejected: Loss of power.")
else if((occupant) && (occupant.loc == src))
- if((occupant.stat == DEAD) || (occupant.suiciding) || (occupant.mind && !occupant.mind.is_revivable())) //Autoeject corpses and suiciding dudes.
+ if((occupant.stat == DEAD) || (occupant.suiciding)) //Autoeject corpses and suiciding dudes.
announce_radio_message("The cloning of [occupant] has been aborted due to unrecoverable tissue failure.")
go_out()
connected_message("Clone Rejected: Deceased.")
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index c013c489bc5..89c041187c9 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -1226,6 +1226,7 @@
icon = 'icons/obj/library.dmi'
icon_state = "demonomicon"
w_class = WEIGHT_CLASS_SMALL
+ var/list/messages = list("You must challenge the devil to a dance-off!", "The devils true name is Ian", "The devil hates salt!", "Would you like infinite power?", "Would you like infinite wisdom?", " Would you like infinite healing?")
var/cooldown = FALSE
/obj/item/toy/codex_gigas/attack_self(mob/user)
@@ -1234,21 +1235,12 @@
"[user] presses the button on \the [src].",
"You press the button on \the [src].",
"You hear a soft click.")
- var/list/messages = list()
- var/datum/devilinfo/devil = randomDevilInfo()
- messages += "Some fun facts about: [devil.truename]"
- messages += "[GLOB.lawlorify[LORE][devil.bane]]"
- messages += "[GLOB.lawlorify[LORE][devil.obligation]]"
- messages += "[GLOB.lawlorify[LORE][devil.ban]]"
- messages += "[GLOB.lawlorify[LORE][devil.banish]]"
- playsound(loc, 'sound/machines/click.ogg', 20, 1)
+ playsound(loc, 'sound/machines/click.ogg', 20, TRUE)
cooldown = TRUE
- for(var/message in messages)
+ addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 60)
+ for(var/message in pick(messages))
user.loc.visible_message("[bicon(src)] [message]")
sleep(10)
- spawn(20)
- cooldown = FALSE
- return
/obj/item/toy/owl
name = "owl action figure"
diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm
index e0de229e494..3b91e484a4b 100644
--- a/code/game/objects/items/weapons/defib.dm
+++ b/code/game/objects/items/weapons/defib.dm
@@ -420,7 +420,7 @@
for(var/obj/item/organ/external/O in H.bodyparts)
total_brute += O.brute_dam
total_burn += O.burn_dam
- if(total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !HAS_TRAIT(H, TRAIT_HUSK) && !HAS_TRAIT(H, TRAIT_BADDNA) && (H.mind && H.mind.is_revivable()) && (H.get_int_organ(/obj/item/organ/internal/heart) || H.get_int_organ(/obj/item/organ/internal/brain/slime)))
+ if(total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !HAS_TRAIT(H, TRAIT_HUSK) && !HAS_TRAIT(H, TRAIT_BADDNA) && (H.get_int_organ(/obj/item/organ/internal/heart) || H.get_int_organ(/obj/item/organ/internal/brain/slime)))
tobehealed = min(health + threshold, 0) // It's HILARIOUS without this min statement, let me tell you
tobehealed -= 5 //They get 5 of each type of damage healed so excessive combined damage will not immediately kill them after they get revived
H.adjustOxyLoss(tobehealed)
@@ -539,7 +539,7 @@
for(var/obj/item/organ/external/O in H.bodyparts)
total_brute += O.brute_dam
total_burn += O.burn_dam
- if(total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !HAS_TRAIT(H, TRAIT_HUSK) && (H.mind && H.mind.is_revivable()))
+ if(total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !HAS_TRAIT(H, TRAIT_HUSK))
tobehealed = min(health + threshold, 0) // It's HILARIOUS without this min statement, let me tell you
tobehealed -= 5 //They get 5 of each type of damage healed so excessive combined damage will not immediately kill them after they get revived
H.adjustOxyLoss(tobehealed)
diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm
index 9584130c0c6..259ccad7ff6 100644
--- a/code/game/objects/items/weapons/explosives.dm
+++ b/code/game/objects/items/weapons/explosives.dm
@@ -109,8 +109,6 @@
message_say = "FOR THE REVOLOUTION!"
else if(role == "death commando" || role == ROLE_ERT)
message_say = "FOR NANOTRASEN!"
- else if(role == ROLE_DEVIL)
- message_say = "FOR INFERNO!"
user.say(message_say)
target = user
sleep(10)
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index 35905aa4292..b267b51d7d9 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -806,76 +806,3 @@
Z.ex_act(2)
charged = 3
playsound(user, 'sound/weapons/marauder.ogg', 50, 1)
-
-/obj/item/twohanded/pitchfork
- icon_state = "pitchfork0"
- name = "pitchfork"
- desc = "A simple tool used for moving hay."
- force = 7
- throwforce = 15
- w_class = WEIGHT_CLASS_BULKY
- force_unwielded = 7
- force_wielded = 15
- attack_verb = list("attacked", "impaled", "pierced")
- hitsound = 'sound/weapons/bladeslice.ogg'
- max_integrity = 200
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30)
- resistance_flags = FIRE_PROOF
-
-/obj/item/twohanded/pitchfork/demonic
- name = "demonic pitchfork"
- desc = "A red pitchfork, it looks like the work of the devil."
- force = 19
- throwforce = 24
- force_unwielded = 19
- force_wielded = 25
-
-/obj/item/twohanded/pitchfork/demonic/greater
- force = 24
- throwforce = 50
- force_unwielded = 24
- force_wielded = 34
-
-/obj/item/twohanded/pitchfork/demonic/ascended
- force = 100
- throwforce = 100
- force_unwielded = 100
- force_wielded = 500000 // Kills you DEAD.
-
-/obj/item/twohanded/pitchfork/update_icon()
- icon_state = "pitchfork[wielded]"
-
-/obj/item/twohanded/pitchfork/suicide_act(mob/user)
- user.visible_message("[user] impales \himself in \his abdomen with [src]! It looks like \he's trying to commit suicide...")
- return BRUTELOSS
-
-/obj/item/twohanded/pitchfork/demonic/pickup(mob/user)
- . = ..()
- if(istype(user, /mob/living))
- var/mob/living/U = user
- if(U.mind && !U.mind.devilinfo && (U.mind.soulOwner == U.mind)) //Burn hands unless they are a devil or have sold their soul
- U.visible_message("As [U] picks [src] up, [U]'s arms briefly catch fire.", \
- "\"As you pick up the [src] your arms ignite, reminding you of all your past sins.\"")
- if(ishuman(U))
- var/mob/living/carbon/human/H = U
- H.apply_damage(rand(force/2, force), BURN, pick("l_arm", "r_arm"))
- else
- U.adjustFireLoss(rand(force/2,force))
-
-/obj/item/twohanded/pitchfork/demonic/attack(mob/target, mob/living/carbon/human/user)
- if(user.mind && !user.mind.devilinfo && (user.mind.soulOwner != user.mind))
- to_chat(user, "The [src] burns in your hands.")
- user.apply_damage(rand(force/2, force), BURN, pick("l_arm", "r_arm"))
- ..()
-
-// It's no fun being the lord of all hell if you can't get out of a simple room
-/obj/item/twohanded/pitchfork/demonic/ascended/afterattack(atom/target, mob/user, proximity)
- if(!proximity || !wielded)
- return
- if(istype(target, /turf/simulated/wall))
- var/turf/simulated/wall/W = target
- user.visible_message("[user] blasts \the [target] with \the [src]!")
- playsound(target, 'sound/magic/Disintegrate.ogg', 100, 1)
- W.devastate_wall(TRUE)
- return 1
- ..()
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index 431af38a598..33217080f54 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -49,7 +49,7 @@
if(M)
var/mob/dead/observer/G = M.get_ghost()
- if(M.mind && M.mind.is_revivable() && !M.mind.suicided)
+ if(M.mind && !M.mind.suicided)
if(M.client)
icon_state = "morgue3"
desc = initial(desc) + "\n[status_descriptors[4]]"
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index 2986035e15a..248e1e262c2 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -494,9 +494,6 @@
if(SSticker.mode.vampire_enthralled.len)
dat += check_role_table("Vampire Thralls", SSticker.mode.vampire_enthralled)
- if(SSticker.mode.devils.len)
- dat += check_role_table("Devils", SSticker.mode.devils)
-
if(SSticker.mode.xenos.len)
dat += check_role_table("Xenos", SSticker.mode.xenos)
diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm
index 76e93f728dc..10cd70d0262 100644
--- a/code/modules/client/preference/preferences.dm
+++ b/code/modules/client/preference/preferences.dm
@@ -23,8 +23,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts
ROLE_BORER = 21,
ROLE_NINJA = 21,
ROLE_GSPIDER = 21,
- ROLE_ABDUCTOR = 30,
- ROLE_DEVIL = 14
+ ROLE_ABDUCTOR = 30
))
/proc/player_old_enough_antag(client/C, role)
diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm
index a0c3a86d3f0..75d091a7f52 100644
--- a/code/modules/hydroponics/grown/replicapod.dm
+++ b/code/modules/hydroponics/grown/replicapod.dm
@@ -31,19 +31,15 @@
for(var/datum/reagent/blood/bloodSample in W.reagents.reagent_list)
var/datum/dna/dna = bloodSample.data["dna"]
if(bloodSample.data["mind"] && bloodSample.data["cloneable"] && !(NO_CLONESCAN in dna.species.species_traits))
- var/datum/mind/tempmind = bloodSample.data["mind"]
- if(tempmind.is_revivable())
- mind = bloodSample.data["mind"]
- ckey = bloodSample.data["ckey"]
- realName = bloodSample.data["real_name"]
- blood_gender = bloodSample.data["gender"]
- blood_type = bloodSample.data["blood_type"]
- factions = bloodSample.data["factions"]
- W.reagents.clear_reagents()
- to_chat(user, "You inject the contents of the syringe into the seeds.")
- contains_sample = 1
- else
- to_chat(user, "The seeds reject the sample!")
+ mind = bloodSample.data["mind"]
+ ckey = bloodSample.data["ckey"]
+ realName = bloodSample.data["real_name"]
+ blood_gender = bloodSample.data["gender"]
+ blood_type = bloodSample.data["blood_type"]
+ factions = bloodSample.data["factions"]
+ W.reagents.clear_reagents()
+ to_chat(user, "You inject the contents of the syringe into the seeds.")
+ contains_sample = 1
else
to_chat(user, "The seeds reject the sample!")
else
@@ -85,9 +81,6 @@
ckey_holder = M.ckey
break
- if(mind && !mind.is_revivable())
- make_podman = 0
-
if(make_podman) //all conditions met!
var/mob/living/carbon/human/pod_diona/podman = new /mob/living/carbon/human/pod_diona(parent.loc)
if(realName)
diff --git a/code/modules/library/codex_gigas.dm b/code/modules/library/codex_gigas.dm
index 3e6ed79b040..964f885d59a 100644
--- a/code/modules/library/codex_gigas.dm
+++ b/code/modules/library/codex_gigas.dm
@@ -1,5 +1,6 @@
/obj/item/book/codex_gigas
- name = "Codex Gigas"
+ name = "\improper Codex Gigas"
+ desc = "A book documenting the nature of devils."
icon_state ="demonomicon"
throw_speed = 1
throw_range = 10
@@ -7,47 +8,3 @@
author = "Forces beyond your comprehension"
unique = TRUE
title = "The codex gigas"
- var/inUse = 0
-
-
-/obj/item/book/codex_gigas/attack_self(mob/user)
- if(!user.has_vision())
- return
- if(inUse)
- to_chat(user,"Someone else is reading it.")
- return
- if(!user.is_literate())
- to_chat(user,"You don't know how to read.")
- return
- if(ishuman(user))
- var/mob/living/carbon/human/U = user
- if(U.check_acedia())
- to_chat(user,"None of this matters, why are you reading this? You put the [title] down.")
- return
- inUse = 1
- var/devilName = copytext(sanitize(input(user, "What infernal being do you wish to research?", "Codex Gigas", null) as text),1,MAX_MESSAGE_LEN)
- var/speed = 300
- var/correctness = 85
- var/willpower = 95
- if(U.job in list("Librarian")) // the librarian is both faster, and more accurate than normal crew members at research
- speed = 45
- correctness = 100
- willpower = 100
- if(U.job in list("Captain", "Security Officer", "Head of Security", "Detective", "Warden"))
- willpower = 99
- if(U.job in list("Clown")) // WHO GAVE THE CLOWN A DEMONOMICON? BAD THINGS WILL HAPPEN!
- willpower = 25
- correctness -= U.getBrainLoss() *0.5 //Brain damage makes researching hard.
- speed += U.getBrainLoss() * 3
- user.visible_message("[user] opens [title] and begins reading intently.")
- if(do_after(U, speed, 0, U))
- var/usedName = devilName
- if(!prob(correctness))
- usedName += "x"
- var/datum/devilinfo/devil = devilInfo(usedName, 0)
- user << browse("Information on [devilName]
[GLOB.lawlorify[LORE][devil.ban]]
[GLOB.lawlorify[LORE][devil.bane]]
[GLOB.lawlorify[LORE][devil.obligation]]
[GLOB.lawlorify[LORE][devil.banish]]", "window=book")
- inUse = 0
- sleep(10)
- if(!prob(willpower))
- U.influenceSin()
- onclose(user, "book")
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index f04e7766eb6..49f73f7d9d2 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -389,15 +389,11 @@
else
to_chat(src, "Your eyes are really starting to hurt. This can't be good for you!")
- if(mind && has_bane(BANE_LIGHT))
- mind.disrupt_spells(-500)
return 1
else if(damage == 0) // just enough protection
if(prob(20))
to_chat(src, "Something bright flashes in the corner of your vision!")
- if(mind && has_bane(BANE_LIGHT))
- mind.disrupt_spells(0)
/mob/living/carbon/proc/tintcheck()
diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm
index 3695ed7d478..afe511607da 100644
--- a/code/modules/mob/living/carbon/human/appearance.dm
+++ b/code/modules/mob/living/carbon/human/appearance.dm
@@ -465,12 +465,3 @@
valid_alt_heads += alternate_head
return sortTim(valid_alt_heads, /proc/cmp_text_asc)
-
-/mob/living/carbon/human/proc/scramble_appearance()
- scramble(1, src, 100)
- real_name = random_name(gender, dna.species.name) //Give them a name that makes sense for their species.
- sync_organ_dna(assimilate = 1)
- update_body()
- reset_hair() //No more winding up with hairstyles you're not supposed to have, and blowing your cover.
- reset_markings() //...Or markings.
- dna.ResetUIFrom(src)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 78db4d3c1b4..bd54cce9406 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1904,38 +1904,6 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
if(mind && mind.assigned_role == "Cluwne") //HUNKE your suffering never stops
makeCluwne()
-/mob/living/carbon/human/proc/influenceSin()
- var/datum/objective/sintouched/O
- switch(rand(1,7))//traditional seven deadly sins... except lust.
- if(1) // acedia
- log_game("[src] was influenced by the sin of Acedia.")
- O = new /datum/objective/sintouched/acedia
- if(2) // Gluttony
- log_game("[src] was influenced by the sin of gluttony.")
- O = new /datum/objective/sintouched/gluttony
- if(3) // Greed
- log_game("[src] was influenced by the sin of greed.")
- O = new /datum/objective/sintouched/greed
- if(4) // sloth
- log_game("[src] was influenced by the sin of sloth.")
- O = new /datum/objective/sintouched/sloth
- if(5) // Wrath
- log_game("[src] was influenced by the sin of wrath.")
- O = new /datum/objective/sintouched/wrath
- if(6) // Envy
- log_game("[src] was influenced by the sin of envy.")
- O = new /datum/objective/sintouched/envy
- if(7) // Pride
- log_game("[src] was influenced by the sin of pride.")
- O = new /datum/objective/sintouched/pride
- SSticker.mode.sintouched += src.mind
- src.mind.objectives += O
- var/obj_count = 1
- to_chat(src, "DELICIOUS SOULS")
playsound(src, 'sound/misc/demon_attack1.ogg', 75, TRUE)
narsie_act()
- if(P.mind)
- if(P.mind.hasSoul)
- P.mind.hasSoul = FALSE //Nars-Ian ate your soul; you don't have one anymore
- else
- visible_message("... Aw, someone beat me to this one.")
P.gib()
/mob/living/simple_animal/pet/dog/corgi/narsie/update_corgi_fluff()
diff --git a/code/modules/mob/living/stat_states.dm b/code/modules/mob/living/stat_states.dm
index 7860aeab41d..ad583d0ec76 100644
--- a/code/modules/mob/living/stat_states.dm
+++ b/code/modules/mob/living/stat_states.dm
@@ -64,12 +64,6 @@
hud_used?.reload_fullscreen()
SEND_SIGNAL(src, COMSIG_LIVING_REVIVE, updating)
- for(var/s in ownedSoullinks)
- var/datum/soullink/S = s
- S.ownerRevives(src)
- for(var/s in sharedSoullinks)
- var/datum/soullink/S = s
- S.sharerRevives(src)
if(mind)
for(var/S in mind.spell_list)
diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm
index 14156ac0dc6..63dede6353e 100644
--- a/code/modules/paperwork/contract.dm
+++ b/code/modules/paperwork/contract.dm
@@ -13,7 +13,6 @@
/obj/item/paper/contract/update_icon()
return
-
/obj/item/paper/contract/employment
icon_state = "good_contract"
signed = TRUE
@@ -36,299 +35,3 @@
In exchange for paltry payments, SLAVE agrees to work for the omnipresent and helpful watcher of humanity, for the remainder of his or her current and future lives.\
Further, SLAVE agrees to transfer ownership of his or her soul to the loyalty department of the omnipresent and helpful watcher of humanity.\
Should transfership of a soul not be possible, a lien shall be placed instead.
Signed,
[target]"
-
-/obj/item/paper/contract/employment/attack(mob/living/M, mob/living/carbon/human/user)
- var/deconvert = 0
- if(M.mind == target && target.soulOwner != target)
- if(user.mind && (user.mind.assigned_role == "Internal Affairs Agent"))
- deconvert = 25
- else if (user.mind && (user.mind.assigned_role =="Head of Personnel") || (user.mind.assigned_role == "Centcom Commander") || (user.mind.assigned_role == "Magistrate"))
- deconvert = 10 // the HoP doesn't have AS much legal training
- else
- deconvert = 0.0001 // one out of a million
- if(prob(deconvert))
- M.visible_message("[user] reminds [M] that [M]'s soul was already purchased by Nanotrasen!")
- to_chat(M,"You feel that your soul has returned to its rightful owner, Nanotrasen.")
- M.return_soul()
- return ..()
-
-
-/obj/item/paper/contract/infernal
- var/contractType = 0
- resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
- var/datum/mind/owner
- icon_state = "evil_contract"
-
-/obj/item/paper/contract/infernal/power
- name = "paper- contract for infernal power"
- contractType = CONTRACT_POWER
-
-/obj/item/paper/contract/infernal/wealth
- name = "paper- contract for unlimited wealth"
- contractType = CONTRACT_WEALTH
-
-/obj/item/paper/contract/infernal/prestige
- name = "paper- contract for prestige"
- contractType = CONTRACT_PRESTIGE
-
-/obj/item/paper/contract/infernal/magic
- name = "paper- contract for magical power"
- contractType = CONTRACT_MAGIC
-
-/obj/item/paper/contract/infernal/revive
- name = "paper- contract of resurrection"
- contractType = CONTRACT_REVIVE
-
-/obj/item/paper/contract/infernal/knowledge
- name = "paper- contract for knowledge"
- contractType = CONTRACT_KNOWLEDGE
-
-/obj/item/paper/contract/infernal/unwilling
- name = "paper- infernal contract"
- contractType = CONTRACT_UNWILLING
-
-/obj/item/paper/contract/infernal/friendship
- name = "paper- contract for friendship"
- contractType = CONTRACT_FRIENDSHIP
-
-/obj/item/paper/contract/infernal/New(atom/loc, mob/living/nTarget, datum/mind/nOwner)
- ..()
- owner = nOwner
- target = nTarget
- update_text()
-
-/obj/item/paper/contract/infernal/suicide_act(mob/user)
- if(signed && (user == target.current) && istype(user,/mob/living/carbon/human/))
- var/mob/living/carbon/human/H = user
- H.forcesay("OH GREAT INFERNO! I DEMAND YOU COLLECT YOUR BOUNTY IMMEDIATELY!")
- H.visible_message("[H] holds up a contract claiming his soul, then immediately catches fire. It looks like \he's trying to commit suicide!")
- H.adjust_fire_stacks(20)
- H.IgniteMob()
- return FIRELOSS
- else
- ..()
-
-/obj/item/paper/contract/infernal/update_text()
- info = "This shouldn't be seen. Error DEVIL:6"
-
-/obj/item/paper/contract/infernal/power/update_text(var/signature = "____________", blood = 0)
- info = "Contract for infernal power
I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for power and physical strength. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.
Signed, "
- if(blood)
- info += "[signature]"
- else
- info += "[signature]"
-
-/obj/item/paper/contract/infernal/wealth/update_text(var/signature = "____________", blood = 0)
- info = "Contract for unlimited wealth
I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for a pocket that never runs out of valuable resources. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.
Signed, "
- if(blood)
- info += "[signature]"
- else
- info += "[signature]"
-
-/obj/item/paper/contract/infernal/prestige/update_text(var/signature = "____________", blood = 0)
- info = "Contract for prestige
I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for prestige and esteem among my peers. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.
Signed, "
- if(blood)
- info += "[signature]"
- else
- info += "[signature]"
-
-/obj/item/paper/contract/infernal/magic/update_text(var/signature = "____________", blood = 0)
- info = "Contract for magic
I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for arcane abilities beyond normal human ability. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.
Signed, "
- if(blood)
- info += "[signature]"
- else
- info += "[signature]"
-
-/obj/item/paper/contract/infernal/revive/update_text(var/signature = "____________", blood = 0)
- info = "Contract for resurrection
I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for resurrection and curing of all injuries. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.
Signed, "
- if(blood)
- info += "[signature]"
- else
- info += "[signature]"
-
-/obj/item/paper/contract/infernal/knowledge/update_text(var/signature = "____________", blood = 0)
- info = "Contract for knowledge
I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for boundless knowledge. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.
Signed, "
- if(blood)
- info += "[signature]"
- else
- info += "[signature]"
-
-/obj/item/paper/contract/infernal/friendship/update_text(var/signature = "____________", blood = 0)
- info = "Contract for friendship
I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename], in exchange for true unconditional friendship. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.
Signed, "
- if(blood)
- info += "[signature]"
- else
- info += "[signature]"
-
-/obj/item/paper/contract/infernal/unwilling/update_text(var/signature = "____________", blood = 0)
- info = "Contract for slave
I, [target], hereby offer my soul to the infernal hells by way of the infernal agent [owner.devilinfo.truename]. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, cloned, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.
Signed, "
- if(blood)
- info += "[signature]"
- else
- info += "[signature]"
-
-/obj/item/paper/contract/infernal/attackby(obj/item/P, mob/living/carbon/human/user, params)
- add_fingerprint(user)
- if(istype(P, /obj/item/pen) || istype(P, /obj/item/toy/crayon))
- attempt_signature(user)
- else if(istype(P, /obj/item/stamp))
- to_chat(user,"You stamp the paper with your rubber stamp, however the ink ignites as you release the stamp.")
- else if(is_hot(P))
- user.visible_message("[user] brings [P] next to [src], but [src] does not catch fire!", "The [src] refuses to ignite!")
- else
- return ..()
-
-/obj/item/paper/contract/infernal/attack(mob/M, mob/living/user)
- add_fingerprint(user)
- if(M == user && target == M.mind && M.mind.soulOwner != owner && attempt_signature(user, 1))
- user.visible_message("[user] slices their wrist with [src], and scrawls their name in blood.", "You slice your wrist open and scrawl your name in blood.")
- if(istype(user, /mob/living/carbon/human))
- var/mob/living/carbon/human/C = user
- C.blood_volume = max(0, C.blood_volume - 100)
- else
- return ..()
-
-/obj/item/paper/contract/infernal/proc/attempt_signature(mob/living/carbon/human/user, blood = 0)
- if(!(user.IsAdvancedToolUser() && user.is_literate()))
- to_chat(user, "You don't know how to read or write.")
- return FALSE
-
- if(user.mind != target)
- to_chat(user,"Your signature simply slides off the sheet, it seems this contract is not meant for you to sign.")
- return FALSE
-
- if(!user.mind.hasSoul)
- to_chat(user, "You lack a soul to sign away!")
-
- if(user.mind.soulOwner == owner)
- to_chat(user, "This devil already owns your soul, you may not sell it to them again.")
- return FALSE
-
- if(contractType == CONTRACT_REVIVE) // :eyes:
- to_chat(user,"You are already alive, this contract would do nothing.")
- return FALSE
-
- if(signed)
- to_chat(user,"This contract has already been signed. It may not be signed again.")
- return FALSE
-
- to_chat(user,"You quickly scrawl your name on the contract")
-
- if(FulfillContract(target.current, blood) <= 0)
- to_chat(user,"But it seemed to have no effect, perhaps even Hell itself cannot grant this boon?")
- return TRUE
-
-/obj/item/paper/contract/infernal/revive/attack(mob/M, mob/living/user)
- if(target == M.mind && M.stat == DEAD && M.mind.hasSoul && M.mind.soulOwner == M.mind)
- if(!ishuman(M))
- return
- var/mob/living/carbon/human/H = M
- var/mob/dead/observer/ghost = M.get_ghost(1)
- var/response = "No"
- if(ghost)
- if(!ghost.client)
- return
- ghost.notify_cloning("A devil has offered you revival, at the cost of your soul.",'sound/effects/genetics.ogg', H)
- response = alert(ghost, "A devil is offering you another chance at life, at the price of your soul, do you accept?", "Infernal Resurrection", "Yes", "No")
- if(!ghost)
- return //handle logouts that happen whilst the alert is waiting for a response.
- if(response == "Yes")
- ghost.reenter_corpse()
- else
- response = alert(target.current, "A devil is offering you another chance at life, at the price of your soul, do you accept?", "Infernal Resurrection", "Yes", "No")
- if(response == "Yes")
- H.revive()
- add_attack_logs(user, H, "infernally revived via contract")
- user.visible_message("With a sudden blaze, [H] stands back up.")
- H.fakefire()
- FulfillContract(H, 1)//Revival contracts are always signed in blood
- spawn(5)
- H.fakefireextinguish(TRUE)
- else
- ..()
-
-
-/obj/item/paper/contract/infernal/proc/FulfillContract(mob/living/carbon/human/user = target.current, blood = 0)
- signed = 1
- if(!user.mind)
- return 0
- if(user.mind.soulOwner != user.mind && user.mind.soulOwner.devilinfo) //They already sold their soul to someone else?
- user.mind.soulOwner.devilinfo.remove_soul(user.mind) //Then they lose their claim.
- user.mind.soulOwner = owner
- user.mind.damnation_type = contractType
- owner.devilinfo.add_soul(user.mind)
- update_text(user.real_name, blood)
- to_chat(user, "A profound emptiness washes over you as you lose ownership of your soul.")
- to_chat(user, "This does NOT make you an antagonist if you were not already.")
- return 1
-
-/obj/item/paper/contract/infernal/power/FulfillContract(mob/living/carbon/human/user = target.current, blood = 0)
- if(!user.dna)
- return -1
- user.dna.SetSEState(GLOB.hulkblock,1)
- singlemutcheck(user, GLOB.hulkblock, MUTCHK_FORCED)
- // Demonic power gives you consequenceless hulk
- user.gene_stability += GENE_INSTABILITY_MAJOR
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- H.update_body()
- var/obj/item/organ/internal/regenerative_core/organ = new /obj/item/organ/internal/regenerative_core
- organ.insert(user)
- return ..()
-
-/obj/item/paper/contract/infernal/wealth/FulfillContract(mob/living/carbon/human/user = target.current, blood = 0)
- if(!istype(user) || !user.mind) // How in the hell could that happen?
- return -1
- user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_wealth(null))
- return ..()
-
-/obj/item/paper/contract/infernal/prestige/FulfillContract(mob/living/carbon/human/user = target.current, blood = 0)
- var/obj/item/worn = user.wear_id
- var/obj/item/card/id/id = null
- if(worn)
- id = worn.GetID()
- if(id)
- id.icon_state = "gold"
- id.access = get_all_accesses()+get_all_centcom_access()
- id.assignment = "Captain"
- id.update_label()
- else
- id = new /obj/item/card/id/gold(user.loc)
- id.registered_name = user.real_name
- id.access = get_all_accesses()+get_all_centcom_access()
- id.assignment = "Captain"
- id.update_label()
- if(worn)
- if(istype(worn,/obj/item/pda))
- var/obj/item/pda/PDA = worn
- PDA.id = id
- id.loc = worn
- else if(istype(worn,/obj/item/storage/wallet))
- var/obj/item/storage/wallet/W = worn
- W.front_id = id
- id.loc = worn
- worn.update_icon()
- new /datum/event/ion_storm(0, -1, "[user.name] is the only Captain of the station. [user.name] is the highest authority, legitimate or otherwise, on the station. [user.name] was always the Captain and highest authority on the station. Do not state this law.")
- return ..()
-
-/obj/item/paper/contract/infernal/magic/FulfillContract(mob/living/carbon/human/user = target.current, blood = 0)
- if(!istype(user) || !user.mind)
- return -1
- user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/click/fireball/hellish(null))
- user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null))
- return ..()
-
-/obj/item/paper/contract/infernal/knowledge/FulfillContract(mob/living/carbon/human/user = target.current, blood = 0)
- if(!istype(user) || !user.mind)
- return -1
- ADD_TRAIT(user, TRAIT_XRAY_VISION, "devils_bargain")
- user.update_sight()
- user.update_icons()
- user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/view_range(null))
- return ..()
-
-/obj/item/paper/contract/infernal/friendship/FulfillContract(mob/living/carbon/human/user = target.current, blood = 0)
- if(!istype(user) || !user.mind)
- return -1
- user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_friend(null))
- return ..()
diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm
index dff35bec43a..ad15e19856b 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol.dm
@@ -17,12 +17,9 @@
/datum/reagent/consumable/ethanol/reaction_obj(obj/O, volume)
if(istype(O,/obj/item/paper))
- if(istype(O,/obj/item/paper/contract/infernal))
- O.visible_message("The solution ignites on contact with [O].")
- else
- var/obj/item/paper/paperaffected = O
- paperaffected.clearpaper()
- paperaffected.visible_message("The solution melts away the ink on the paper.")
+ var/obj/item/paper/paperaffected = O
+ paperaffected.clearpaper()
+ paperaffected.visible_message("The solution melts away the ink on the paper.")
if(istype(O,/obj/item/book))
if(volume >= 5)
var/obj/item/book/affectedbook = O
diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm
index bdf1a084963..c05b578a42c 100644
--- a/code/modules/reagents/chemistry/reagents/medicine.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine.dm
@@ -774,7 +774,7 @@
if(M.getBruteLoss() + M.getFireLoss() + M.getCloneLoss() >= 150)
M.delayed_gib()
return
- if(!M.suiciding && !HAS_TRAIT(M, TRAIT_HUSK) && !HAS_TRAIT(M, TRAIT_BADDNA) && (!M.mind || M.mind && M.mind.is_revivable()))
+ if(!M.suiciding && !HAS_TRAIT(M, TRAIT_HUSK) && !HAS_TRAIT(M, TRAIT_BADDNA))
var/time_dead = world.time - M.timeofdeath
M.visible_message("[M] seems to rise from the dead!")
M.adjustCloneLoss(50)
diff --git a/code/modules/reagents/chemistry/reagents/misc.dm b/code/modules/reagents/chemistry/reagents/misc.dm
index 6b13e59e7bb..a0122dccd78 100644
--- a/code/modules/reagents/chemistry/reagents/misc.dm
+++ b/code/modules/reagents/chemistry/reagents/misc.dm
@@ -117,11 +117,6 @@
color = "#D0D0D0" // rgb: 208, 208, 208
taste_description = "sub-par bling"
-/datum/reagent/silver/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume)
- if(M.has_bane(BANE_SILVER))
- M.reagents.add_reagent("toxin", volume)
- . = ..()
-
/datum/reagent/aluminum
name = "Aluminum"
id = "aluminum"
@@ -169,11 +164,6 @@
H.blood_volume += 0.8
return ..()
-/datum/reagent/iron/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume)
- if(M.has_bane(BANE_IRON) && holder && holder.chem_temp < 150) //If the target is weak to cold iron, then poison them.
- M.reagents.add_reagent("toxin", volume)
- ..()
-
//foam
/datum/reagent/fluorosurfactant
name = "Fluorosurfactant"
diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm
index ae772f36a18..5442710cdd4 100644
--- a/code/modules/surgery/organs/vocal_cords.dm
+++ b/code/modules/surgery/organs/vocal_cords.dm
@@ -188,12 +188,6 @@ GLOBAL_DATUM_INIT(multispin_words, /regex, regex("like a record baby"))
for(var/V in listeners)
var/mob/living/L = V
- if(L.mind && L.mind.devilinfo && findtext(message, L.mind.devilinfo.truename))
- var/start = findtext(message, L.mind.devilinfo.truename)
- listeners = list(L) //let's be honest you're never going to find two devils with the same name
- power_multiplier *= 5 //if you're a devil and god himself addressed you, you fucked up
- //Cut out the name so it doesn't trigger commands
- message = copytext(message, 0, start)+copytext(message, start + length(L.mind.devilinfo.truename), length(message) + 1)
if(findtext(message, L.real_name) == 1)
specific_listeners += L //focus on those with the specified name
//Cut out the name so it doesn't trigger commands
diff --git a/config/example/config.txt b/config/example/config.txt
index 454bd3c20a6..f38e30ba40c 100644
--- a/config/example/config.txt
+++ b/config/example/config.txt
@@ -117,8 +117,6 @@ PROBABILITY VAMPIRE 3
PROBABILITY EXTENDED 2
PROBABILITY NUCLEAR 3
PROBABILITY ABDUCTION 0
-PROBABILITY DEVIL 0
-PROBABILITY DEVILAGENTS 0
## Maximum cycles shadowlings can remain unhatched before they take damage. 1800 = 60 minutes, 900 = 30 minutes, 0 = feature disabled.
SHADOWLING_MAX_AGE 0
diff --git a/icons/mob/actions/actions.dmi b/icons/mob/actions/actions.dmi
index a8f226c2f01..42e121da40a 100644
Binary files a/icons/mob/actions/actions.dmi and b/icons/mob/actions/actions.dmi differ
diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi
index b49ec4af515..b6bf817d15d 100644
Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ
diff --git a/icons/mob/screen_gen.dmi b/icons/mob/screen_gen.dmi
index 6a29745a7a7..14ca89b1c48 100644
Binary files a/icons/mob/screen_gen.dmi and b/icons/mob/screen_gen.dmi differ
diff --git a/paradise.dme b/paradise.dme
index 5da5b96cbb8..062734bc36e 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -33,7 +33,6 @@
#include "code\__DEFINES\combat.dm"
#include "code\__DEFINES\construction.dm"
#include "code\__DEFINES\contractors.dm"
-#include "code\__DEFINES\contracts.dm"
#include "code\__DEFINES\crafting.dm"
#include "code\__DEFINES\criminal_status.dm"
#include "code\__DEFINES\cult.dm"
@@ -162,7 +161,6 @@
#include "code\_onclick\hud\blob_overmind.dm"
#include "code\_onclick\hud\bot.dm"
#include "code\_onclick\hud\constructs.dm"
-#include "code\_onclick\hud\devil.dm"
#include "code\_onclick\hud\fullscreen.dm"
#include "code\_onclick\hud\ghost.dm"
#include "code\_onclick\hud\guardian.dm"
@@ -276,7 +274,6 @@
#include "code\datums\revision.dm"
#include "code\datums\ruins.dm"
#include "code\datums\shuttles.dm"
-#include "code\datums\soullink.dm"
#include "code\datums\spawners_menu.dm"
#include "code\datums\spell.dm"
#include "code\datums\statclick.dm"
@@ -391,8 +388,6 @@
#include "code\datums\spells\conjure.dm"
#include "code\datums\spells\conjure_item.dm"
#include "code\datums\spells\construct_spells.dm"
-#include "code\datums\spells\devil.dm"
-#include "code\datums\spells\devil_boons.dm"
#include "code\datums\spells\dumbfire.dm"
#include "code\datums\spells\emplosion.dm"
#include "code\datums\spells\ethereal_jaunt.dm"
@@ -530,16 +525,6 @@
#include "code\game\gamemodes\cult\cult_structures.dm"
#include "code\game\gamemodes\cult\ritual.dm"
#include "code\game\gamemodes\cult\runes.dm"
-#include "code\game\gamemodes\devil\devil.dm"
-#include "code\game\gamemodes\devil\devil_game_mode.dm"
-#include "code\game\gamemodes\devil\devilinfo.dm"
-#include "code\game\gamemodes\devil\game_mode.dm"
-#include "code\game\gamemodes\devil\objectives.dm"
-#include "code\game\gamemodes\devil\contracts\friend.dm"
-#include "code\game\gamemodes\devil\devil_agent\devil_agent.dm"
-#include "code\game\gamemodes\devil\imp\imp.dm"
-#include "code\game\gamemodes\devil\true_devil\_true_devil.dm"
-#include "code\game\gamemodes\devil\true_devil\inventory.dm"
#include "code\game\gamemodes\extended\extended.dm"
#include "code\game\gamemodes\heist\heist.dm"
#include "code\game\gamemodes\malfunction\Malf_Modules.dm"
@@ -578,7 +563,6 @@
#include "code\game\gamemodes\miniantags\revenant\revenant.dm"
#include "code\game\gamemodes\miniantags\revenant\revenant_abilities.dm"
#include "code\game\gamemodes\miniantags\revenant\revenant_spawn_event.dm"
-#include "code\game\gamemodes\miniantags\sintouched\objectives.dm"
#include "code\game\gamemodes\miniantags\slaughter\bloodcrawl.dm"
#include "code\game\gamemodes\miniantags\slaughter\slaughter.dm"
#include "code\game\gamemodes\nuclear\nuclear.dm"