Damns Devils Gamemode to Hell (#15672)

* Damns Devils Gamemode to Hell

* Update config.txt
This commit is contained in:
Fox McCloud
2021-03-07 12:00:02 +00:00
committed by GitHub
parent 8395ca99b2
commit fdc6ab2211
53 changed files with 28 additions and 2760 deletions
-31
View File
@@ -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()
-1
View File
@@ -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()\
))
-119
View File
@@ -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)
. += "<b>No devilinfo found! Yell at a coder!</b>"
else if(!devilinfo.ascendable)
. += "<b>DEVIL</b>|<a href='?src=[UID()];devil=ascendable_devil'>Ascendable Devil</a>|sintouched|<a href='?src=[UID()];devil=clear'>no</a>"
else
. += "<a href='?src=[UID()];devil=devil'>DEVIL</a>|<b>ASCENDABLE DEVIL</b>|sintouched|<a href='?src=[UID()];devil=clear'>no</a>"
else if(src in SSticker.mode.sintouched)
. += "devil|Ascendable Devil|<b>SINTOUCHED</b>|<a href='?src=[UID()];devil=clear'>no</a>"
else
. += "<a href='?src=[UID()];devil=devil'>devil</a>|<a href='?src=[UID()];devil=ascendable_devil'>Ascendable Devil</a>|<a href='?src=[UID()];devil=sintouched'>sintouched</a>|<b>NO</b>"
. += _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,"<span class='warning'>This cannot be used on true or arch-devils.</span>")
else
SSticker.mode.devils -= src
SSticker.mode.update_devil_icons_removed(src)
special_role = null
to_chat(current,"<span class='userdanger'>Your infernal link has been severed! You are no longer a devil!</span>")
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, "<span class='warning'>This only works on humans and cyborgs!</span>")
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, "<span class='warning'>This only works on humans and cyborgs!</span>")
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, "<span class='warning'><b>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.</b></span>")
to_chat(current, "<span class='warning'><b>This means you don't remember who you were working for or what you were doing.</b></span>")
/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)
-166
View File
@@ -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)
-248
View File
@@ -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 = "<span class='notice'>You prepare a detailed contract. Click on a target to summon the contract in his hands.</span>"
selection_deactivated_message = "<span class='notice'>You archive the contract for later use.</span>"
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,"<span class='notice'>[C] seems to not be sentient. You are unable to summon a contract for them.</span>")
/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,"<span class='warning'>You are now phasing in.</span>")
if(do_mob(user,user,150))
user.infernalphasein()
else
to_chat(user,"<span class='warning'>You can only re-appear near a potential signer or on a shuttle.</span>")
revert_cast()
return ..()
else
user.notransform = TRUE
user.fakefire()
to_chat(user,"<span class='warning'>You begin to phase back into sinful flames.</span>")
if(do_mob(user,user,150))
user.infernalphaseout()
else
to_chat(user,"<span class='warning'>You must remain still while exiting.</span>")
user.ExtinguishMob()
start_recharge()
return
revert_cast()
/mob/living/proc/infernalphaseout()
dust_animation()
visible_message("<span class='warning'>[src] disappears in a flashfire!</span>")
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,"<span class='warning'>You're too busy to jaunt in.</span>")
return 0
fakefire()
forceMove(get_turf(src))
visible_message("<span class='warning'><B>[src] appears in a firey blaze!</B></span>")
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, "<span class='warning'>You're too close to a wall.</span>")
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
*/
-73
View File
@@ -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, "<span class='userdanger'>Your master has deemed you a poor friend. Your durance in hell will now resume.</span>")
to_chat(user, "<span class='notice'>You banish your friend back to whence [friend.p_they()] came.</span>")
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