mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 20:48:56 +01:00
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:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user