Fully removes devil and affiliated shitcode (#53612)

Its all over the place, messy, and overall a bad enough gamemode to be removed from rotation.
A rework would have to tear out everything as is so there is no reason to allow the shitcode to live beyond tripping up everything.
This commit is contained in:
TiviPlus
2020-09-23 00:46:21 +01:00
committed by GitHub
parent ea53c48813
commit ff1631b7b9
83 changed files with 126 additions and 2963 deletions
-258
View File
@@ -1,258 +0,0 @@
/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork
name = "Summon Pitchfork"
desc = "A devil's weapon of choice. Use this to summon/unsummon your pitchfork."
invocation_type = "none"
include_user = TRUE
range = -1
clothes_req = FALSE
item_type = /obj/item/pitchfork/demonic
school = "conjuration"
charge_max = 150
cooldown_min = 10
action_icon = 'icons/mob/actions/actions_minor_antag.dmi'
action_icon_state = "pitchfork"
action_background_icon_state = "bg_demon"
/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/greater
item_type = /obj/item/pitchfork/demonic/greater
/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/ascended
item_type = /obj/item/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 = INVOCATION_WHISPER
invocation = "I ain't had this much fun since Georgia."
action_icon_state = "golden_violin"
name = "Summon golden violin"
action_icon = 'icons/mob/actions/actions_minor_antag.dmi'
action_background_icon_state = "bg_demon"
/obj/effect/proc_holder/spell/targeted/summon_contract
name = "Summon infernal contract"
desc = "Skip making a contract by hand, just do it by magic."
invocation_type = INVOCATION_WHISPER
invocation = "Just sign on the dotted line."
include_user = FALSE
range = 5
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/summon_contract/cast(list/targets, mob/user = usr)
for(var/mob/living/carbon/C in targets)
if(C.mind && user.mind)
if(C.stat == DEAD)
if(user.dropItemToGround(user.get_active_held_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 // = new(user.loc, C.mind, contractType, user.mind)
var/contractTypeName = input(user, "What type of contract?") in sortList(list("Power", "Wealth", "Prestige", "Magic", "Knowledge", "Friendship"))
switch(contractTypeName)
if("Power")
contract = new /obj/item/paper/contract/infernal/power(C.loc, C.mind, user.mind)
if("Wealth")
contract = new /obj/item/paper/contract/infernal/wealth(C.loc, C.mind, user.mind)
if("Prestige")
contract = new /obj/item/paper/contract/infernal/prestige(C.loc, C.mind, user.mind)
if("Magic")
contract = new /obj/item/paper/contract/infernal/magic(C.loc, C.mind, user.mind)
if("Knowledge")
contract = new /obj/item/paper/contract/infernal/knowledge(C.loc, C.mind, user.mind)
if("Friendship")
contract = new /obj/item/paper/contract/infernal/friend(C.loc, C.mind, user.mind)
C.put_in_hands(contract)
else
to_chat(user, "<span class='warning'>[C] seems to not be sentient. You cannot summon a contract for [C.p_them()].</span>")
/obj/effect/proc_holder/spell/aimed/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 = INVOCATION_SHOUT
range = 2
projectile_type = /obj/projectile/magic/aoe/fireball/infernal
action_background_icon_state = "bg_demon"
/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"
phase_allowed = TRUE
/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/phased_mob/slaughter/))
if(valid_location(user))
to_chat(user, "<span class='warning'>You are now phasing in.</span>")
if(do_mob(user,user,150))
if(valid_location(user))
user.infernalphasein()
else
to_chat(user, "<span class='warning'>You are no longer near a potential signer.</span>")
else
to_chat(user, "<span class='warning'>You can only re-appear near a potential signer.</span>")
revert_cast()
return ..()
else
user.notransform = TRUE
user.fakefire()
to_chat(src, "<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.notransform = FALSE
user.fakefireextinguish()
start_recharge()
return
revert_cast()
/obj/effect/proc_holder/spell/targeted/infernal_jaunt/proc/valid_location(mob/living/user = usr)
if(istype(get_area(user), /area/shuttle/)) // Can always phase in in a shuttle.
return TRUE
else
for(var/mob/living/C in orange(2, get_turf(user))) //Can also phase in when nearby a potential buyer.
if (C.owns_soul())
return TRUE
return FALSE
/mob/living/proc/infernalphaseout()
dust_animation()
spawn_dust()
visible_message("<span class='warning'>[src] disappears in a flashfire!</span>")
playsound(get_turf(src), 'sound/magic/enter_blood.ogg', 100, TRUE, -1)
var/obj/effect/dummy/phased_mob/slaughter/holder = new /obj/effect/dummy/phased_mob/slaughter(loc)
extinguish_mob()
forceMove(holder)
holder = 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 FALSE
fakefire()
forceMove(drop_location())
client.eye = src
visible_message("<span class='warning'><B>[src] appears in a fiery blaze!</B></span>")
playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, TRUE, -1)
addtimer(CALLBACK(src, .proc/fakefireextinguish), 15, TIMER_UNIQUE)
/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 = 'icons/mob/actions/actions_cult.dmi'
action_icon_state = "sintouch"
action_background_icon_state = "bg_demon"
phase_allowed = FALSE
random_target = TRUE
random_target_priority = TARGET_RANDOM
max_targets = 3
invocation = "TASTE SIN AND INDULGE!!"
invocation_type = INVOCATION_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
if(H.mind.has_antag_datum(/datum/antagonist/sintouched))
continue
if(H.anti_magic_check(FALSE, TRUE))
continue
H.mind.add_antag_datum(/datum/antagonist/sintouched)
H.Paralyze(400)
/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 = 'icons/mob/actions/actions_minor_antag.dmi'
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], flags = CHANGETURF_INHERIT_AIR)
else
var/list/funky_turfs = RANGE_TURFS(1, user)
for(var/turf/closed/solid in funky_turfs)
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/open/floor/light/colour_cycle/dancefloor_a : /turf/open/floor/light/colour_cycle/dancefloor_b, flags = CHANGETURF_INHERIT_AIR)
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
@@ -1,76 +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 = TRUE
range = -1
clothes_req = FALSE
school = "conjuration"
charge_max = 100
cooldown_min = 10
action_icon = 'icons/mob/actions/actions_minor_antag.dmi'
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.dropItemToGround(user.get_active_held_item()))
var/obj/item = pick(
new /obj/item/coin/gold(user.drop_location()),
new /obj/item/coin/diamond(user.drop_location()),
new /obj/item/coin/silver(user.drop_location()),
new /obj/item/clothing/accessory/medal/gold(user.drop_location()),
new /obj/item/stack/sheet/mineral/gold(user.drop_location()),
new /obj/item/stack/sheet/mineral/silver(user.drop_location()),
new /obj/item/stack/sheet/mineral/diamond(user.drop_location()),
new /obj/item/holochip(user.drop_location(), 1000))
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 = TRUE
range = -1
clothes_req = FALSE
charge_max = 50
cooldown_min = 10
action_icon = 'icons/mob/actions/actions_silicon.dmi'
action_icon_state = "camera_jump"
var/ranges = list(7,8,9,10)
/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_size.setTo((input("Select view range:", "Range", 4) in ranges) - 7)
/obj/effect/proc_holder/spell/targeted/summon_friend
name = "Summon Friend"
desc = "The reward for selling your soul."
invocation_type = "none"
include_user = TRUE
range = -1
clothes_req = FALSE
charge_max = 50
cooldown_min = 10
action_icon = 'icons/mob/actions/actions_spells.dmi'
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>")
friend.dust(TRUE)
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
@@ -28,9 +28,6 @@
if(!hand_items.len)
to_chat(M, "<span class='warning'>You must hold an item you wish to make your phylactery!</span>")
return
if(!M.mind.hasSoul)
to_chat(user, "<span class='warning'>You do not possess a soul!</span>")
return
var/obj/item/marked_item
@@ -60,7 +57,6 @@
new /obj/item/phylactery(marked_item, M.mind)
to_chat(M, "<span class='userdanger'>With a hideous feeling of emptiness you watch in horrified fascination as skin sloughs off bone! Blood boils, nerves disintegrate, eyes boil in their sockets! As your organs crumble to dust in your fleshless chest you come to terms with your choice. You're a lich!</span>")
M.mind.hasSoul = FALSE
M.set_species(/datum/species/skeleton)
if(ishuman(M))
var/mob/living/carbon/human/H = M
+11 -21
View File
@@ -130,12 +130,11 @@
var/mob/living/stored
var/mob/living/shape
var/restoring = FALSE
var/datum/soullink/shapeshift/slink
var/obj/effect/proc_holder/spell/targeted/shapeshift/source
/obj/shapeshift_holder/Initialize(mapload,obj/effect/proc_holder/spell/targeted/shapeshift/source,mob/living/caster)
/obj/shapeshift_holder/Initialize(mapload,obj/effect/proc_holder/spell/targeted/shapeshift/_source, mob/living/caster)
. = ..()
src.source = source
source = _source
shape = loc
if(!istype(shape))
CRASH("shapeshift holder created outside mob/living")
@@ -151,15 +150,16 @@
shape.apply_damage(damapply, source.convert_damage_type, forced = TRUE, wound_bonus=CANT_WOUND);
shape.blood_volume = stored.blood_volume;
slink = soullink(/datum/soullink/shapeshift, stored , shape)
slink.source = src
stored.RegisterSignal(src, COMSIG_PARENT_QDELETING, .proc/shape_death)
stored.RegisterSignal(shape, list(COMSIG_PARENT_QDELETING, COMSIG_MOB_DEATH), .proc/shape_death)
shape.RegisterSignal(stored, list(COMSIG_PARENT_QDELETING, COMSIG_MOB_DEATH), .proc/shape_death)
/obj/shapeshift_holder/Destroy()
if(!restoring)
restore()
stored = null
shape = null
. = ..()
return ..()
/obj/shapeshift_holder/Moved()
. = ..()
@@ -174,14 +174,16 @@
if(AM == stored && !restoring)
restore()
/obj/shapeshift_holder/proc/casterDeath()
/obj/shapeshift_holder/proc/caster_death()
SIGNAL_HANDLER
//Something kills the stored caster through direct damage.
if(source.revert_on_death)
restore(death=TRUE)
else
shape.death()
/obj/shapeshift_holder/proc/shapeDeath()
/obj/shapeshift_holder/proc/shape_death()
SIGNAL_HANDLER
//Shape dies.
if(source.die_with_shapeshifted_form)
if(source.revert_on_death)
@@ -191,7 +193,6 @@
/obj/shapeshift_holder/proc/restore(death=FALSE)
restoring = TRUE
qdel(slink)
stored.forceMove(shape.loc)
stored.notransform = FALSE
if(shape.mind)
@@ -207,16 +208,5 @@
stored.apply_damage(damapply, source.convert_damage_type, forced = TRUE, wound_bonus=CANT_WOUND)
if(source.convert_damage)
stored.blood_volume = shape.blood_volume;
qdel(shape)
QDEL_NULL(shape)
qdel(src)
/datum/soullink/shapeshift
var/obj/shapeshift_holder/source
/datum/soullink/shapeshift/ownerDies(gibbed, mob/living/owner)
if(source)
source.casterDeath(gibbed)
/datum/soullink/shapeshift/sharerDies(gibbed, mob/living/sharer)
if(source)
source.shapeDeath(gibbed)
+1 -4
View File
@@ -18,15 +18,12 @@
action_icon_state = "soultap"
/obj/effect/proc_holder/spell/self/tap/cast(list/targets, mob/living/user = usr)
if(!user.mind.hasSoul)
to_chat(user, "<span class='warning'>You do not possess a soul to tap into!</span>")
return
to_chat(user, "<span class='danger'>Your body feels drained and there is a burning pain in your chest.</span>")
user.maxHealth -= HEALTH_LOST_PER_SOUL_TAP
user.health = min(user.health, user.maxHealth)
if(user.maxHealth <= 0)
to_chat(user, "<span class='userdanger'>Your weakened soul is completely consumed by the tap!</span>")
user.mind.hasSoul = FALSE
return
for(var/obj/effect/proc_holder/spell/spell in user.mind.spell_list)
spell.charge_counter = spell.charge_max
spell.recharging = FALSE