Adds the Oblivion Enforcer wizard loadout (#21920)
* initial addition * adds wall/airlock obliteration this definitely needs to be tuned a bit numbers-wise * adds TRAIT_SUPERMATTER_IMMUNE & gloves * adds more checks for the supermatter immune trait * removes SM tongs logic from the halberd Realistically, you would never actually have the halberd and tongs * makes slivers bulky * dusting downed people also removing a useless assigned variable i missed * adds the (incomplete) loadout * halberd buff * adds robes + sprites * oops * halberd icons * knockdown * stuff * timer shortening * species sprites part 2 * animation for dusting walls * Apply suggestions from code review Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> * early return * parry numbers! * Update code/modules/power/engines/supermatter/supermatter.dm Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> * dgamer review * dgamer review + no more pulling * reverts early return thingamajig * Update code/modules/power/engines/supermatter/supermatter.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> * removes `get_turf` * hal review pt 1 * hal review pt. 2 * Update code/game/objects/items/theft_items.dm Co-authored-by: Charlie <69320440+hal9000PR@users.noreply.github.com> * `carve_sliver` proc * unfucks icons * Apply suggestions from code review Co-authored-by: Charlie <69320440+hal9000PR@users.noreply.github.com> --------- Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com> Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com> Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Co-authored-by: Charlie <69320440+hal9000PR@users.noreply.github.com>
@@ -213,6 +213,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
//***** ITEM AND MOB TRAITS *****//
|
||||
/// Show what machine/door wires do when held.
|
||||
#define TRAIT_SHOW_WIRE_INFO "show_wire_info"
|
||||
///Immune to the SM / makes you immune to it when worn
|
||||
#define TRAIT_SUPERMATTER_IMMUNE "supermatter_immune"
|
||||
|
||||
//***** ITEM TRAITS *****//
|
||||
#define TRAIT_BUTCHERS_HUMANS "butchers_humans"
|
||||
@@ -270,6 +272,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
#define TRAIT_WAS_BATONNED "batonged"
|
||||
#define CLOWN_EMAG "clown_emag"
|
||||
#define MODSUIT_TRAIT "modsuit_trait"
|
||||
#define ENFORCER_GLOVES "enforcer_gloves"
|
||||
|
||||
//quirk traits
|
||||
#define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance"
|
||||
|
||||
@@ -80,10 +80,12 @@ GLOBAL_LIST_INIT(traits_by_type, list(
|
||||
"TRAIT_CONTORTED_BODY" = TRAIT_CONTORTED_BODY,
|
||||
"TRAIT_DEFLECTS_PROJECTILES" = TRAIT_DEFLECTS_PROJECTILES,
|
||||
"TRAIT_TABLE_LEAP" = TRAIT_TABLE_LEAP,
|
||||
"TRAIT_DODGE_ALL_THROWN_OBJECTS" = TRAIT_DODGE_ALL_OBJECTS
|
||||
"TRAIT_DODGE_ALL_THROWN_OBJECTS" = TRAIT_DODGE_ALL_OBJECTS,
|
||||
"TRAIT_SUPERMATTER_IMMUNE" = TRAIT_SUPERMATTER_IMMUNE
|
||||
),
|
||||
/obj/item = list(
|
||||
"TRAIT_SHOW_WIRE_INFO" = TRAIT_SHOW_WIRE_INFO,
|
||||
"TRAIT_SUPERMATTER_IMMUNE" = TRAIT_SUPERMATTER_IMMUNE,
|
||||
"TRAIT_BUTCHER_HUMANS" = TRAIT_BUTCHERS_HUMANS,
|
||||
"TRAIT_CMAGGED" = TRAIT_CMAGGED,
|
||||
"TRAIT_FORCES_OPEN_DOORS" = TRAIT_FORCES_OPEN_DOORS_ITEM,
|
||||
|
||||
@@ -856,3 +856,67 @@ GLOBAL_LIST_EMPTY(multiverse)
|
||||
/obj/item/reagent_containers/food/drinks/everfull/proc/magic_fill(reagent_choice)
|
||||
reagents.clear_reagents()
|
||||
reagents.add_reagent(reagent_choice, volume)
|
||||
|
||||
//Oblivion Enforcer clothing (the halberd and gloves are defined elsewhere)
|
||||
|
||||
/obj/item/clothing/head/hooded/oblivion
|
||||
name = "Oblivion Enforcer's hood"
|
||||
desc = "A hood worn by an Oblivion Enforcer."
|
||||
icon_state = "oblivionhood"
|
||||
flags = BLOCKHAIR
|
||||
flags_inv = HIDEFACE
|
||||
flags_cover = HEADCOVERSEYES
|
||||
armor = list(MELEE = 20, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 0, RAD = INFINITY, FIRE = 5, ACID = 5)
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
|
||||
magical = TRUE
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/clothing/species/vox/head.dmi',
|
||||
"Kidan" = 'icons/mob/clothing/species/kidan/head.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/head.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/head.dmi',
|
||||
"Tajaran" = 'icons/mob/clothing/species/tajaran/head.dmi',
|
||||
"Unathi" = 'icons/mob/clothing/species/unathi/head.dmi',
|
||||
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/suit/hooded/oblivion
|
||||
name = "Oblivion Enforcer's robes"
|
||||
desc = "A set of armored, radiation-proof robes worn by Oblivion Enforcers."
|
||||
icon_state = "oblivionarmor"
|
||||
item_state = "oblivionarmor"
|
||||
body_parts_covered = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
|
||||
hoodtype = /obj/item/clothing/head/hooded/oblivion
|
||||
allowed = list(/obj/item/supermatter_halberd, /obj/item/nuke_core/supermatter_sliver)
|
||||
armor = list(MELEE = 35, BULLET = 20, LASER = 35, ENERGY = 10, BOMB = 15, RAD = INFINITY, FIRE = 5, ACID = 5)
|
||||
flags_inv = HIDEJUMPSUIT | HIDESHOES | HIDETAIL | HIDESHOES
|
||||
flags = THICKMATERIAL
|
||||
magical = TRUE
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi',
|
||||
"Kidan" = 'icons/mob/clothing/species/kidan/suit.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/suit.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/suit.dmi',
|
||||
"Tajaran" = 'icons/mob/clothing/species/tajaran/suit.dmi',
|
||||
"Unathi" = 'icons/mob/clothing/species/unathi/suit.dmi',
|
||||
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/suit.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/suit/hooded/oblivion/Initialize(mapload)
|
||||
. = ..()
|
||||
ADD_TRAIT(src, TRAIT_SUPERMATTER_IMMUNE, ROUNDSTART_TRAIT)
|
||||
|
||||
/obj/item/clothing/mask/gas/voice_modulator/oblivion
|
||||
name = "Oblivion Enforcer's mask"
|
||||
desc = "The mask of an Oblivion Enforcer. Don't forget to turn it on before giving your one-liners!"
|
||||
icon_state = "oblivionmask"
|
||||
item_state = "oblivionmask"
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/clothing/species/vox/mask.dmi',
|
||||
"Kidan" = 'icons/mob/clothing/species/kidan/mask.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/mask.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/clothing/species/tajaran/mask.dmi',
|
||||
"Unathi" = 'icons/mob/clothing/species/unathi/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/mask.dmi'
|
||||
)
|
||||
|
||||
@@ -99,3 +99,23 @@
|
||||
wizid.SetOwnerInfo(user)
|
||||
wizid.UpdateName()
|
||||
wizid.RebuildHTML()
|
||||
|
||||
/datum/spellbook_entry/loadout/oblivion
|
||||
name = "Oblivion Enforcer"
|
||||
desc = "The Oblivion Order is an isolated clique of monks that revere supermatter. \
|
||||
Oblivion Enforcers are how the Order imposes their will on the universe as a whole. By taking this loadout, \
|
||||
you give up your identity and become a faceless hand of the Order. <br>\
|
||||
You will be completely protected from the effects of supermatter by the items granted here, so far as to \
|
||||
allow you to pick up and throw supermatter slivers, which your halberd can cut from the engine. <br>\
|
||||
</i>Provides a Supermatter Halberd, Oblivion Enforcer robes, and an air tank, as well as Instant Summons, Lightning Bolt, Ethereal Jaunt, and Summon Supermatter Crystal.<i>"
|
||||
items_path = list(/obj/item/supermatter_halberd, /obj/item/clothing/gloves/color/white/supermatter_immune, \
|
||||
/obj/item/clothing/suit/hooded/oblivion, /obj/item/clothing/mask/gas/voice_modulator/oblivion, /obj/item/tank/internals/emergency_oxygen/double)
|
||||
spells_path = list(/obj/effect/proc_holder/spell/ethereal_jaunt, /obj/effect/proc_holder/spell/summonitem, \
|
||||
/obj/effect/proc_holder/spell/charge_up/bounce/lightning, /obj/effect/proc_holder/spell/aoe/conjure/summon_supermatter)
|
||||
category = "Unique"
|
||||
destroy_spellbook = TRUE
|
||||
|
||||
/datum/spellbook_entry/loadout/oblivion/OnBuy(mob/living/carbon/human/user, obj/item/spellbook/book)
|
||||
if(!user)
|
||||
return
|
||||
ADD_TRAIT(user, SM_HALLUCINATION_IMMUNE, MAGIC_TRAIT)
|
||||
|
||||
@@ -398,3 +398,32 @@
|
||||
/obj/effect/temp_visual/rcd_effect/reverse_short
|
||||
icon_state = "rcd_short_reverse"
|
||||
duration = 3.1 SECONDS
|
||||
|
||||
/obj/effect/temp_visual/obliteration
|
||||
duration = 2 SECONDS
|
||||
|
||||
/obj/effect/temp_visual/obliteration/Initialize(mapload, atom/target)
|
||||
. = ..()
|
||||
if(isobj(target))
|
||||
loc = target.loc
|
||||
icon = target.icon
|
||||
icon_state = target.icon_state
|
||||
alpha = target.alpha
|
||||
dir = target.dir
|
||||
update_icon()
|
||||
var/obj/effect/dusting_anim/dust_effect = new(loc, UID())
|
||||
filters += filter(type = "displace", size = 256, render_source = "*snap[UID()]")
|
||||
animate(src, alpha = 0, time = 2 SECONDS, easing = (EASE_IN | SINE_EASING))
|
||||
QDEL_IN(dust_effect, 20)
|
||||
return TRUE
|
||||
|
||||
/obj/effect/temp_visual/obliteration_rays
|
||||
duration = 1.25 SECONDS
|
||||
|
||||
/obj/effect/temp_visual/obliteration_rays/Initialize(mapload)
|
||||
. = ..()
|
||||
var/new_filter = isnull(get_filter("ray"))
|
||||
ray_filter_helper(1, 40, "#ffd04f", 6, 20)
|
||||
if(new_filter)
|
||||
animate(get_filter("ray"), offset = 10, time = 10 SECONDS, loop = -1)
|
||||
animate(offset = 0, time = 10 SECONDS)
|
||||
|
||||
@@ -157,6 +157,7 @@
|
||||
desc = "A tiny, highly volatile sliver of a supermatter crystal. Do not handle without protection!"
|
||||
icon_state = "supermatter_sliver"
|
||||
pulseicon = "supermatter_sliver_pulse"
|
||||
w_class = WEIGHT_CLASS_BULKY //can't put it into bags
|
||||
layer = ABOVE_MOB_LAYER + 0.02
|
||||
|
||||
/obj/item/nuke_core/supermatter_sliver/process()
|
||||
@@ -170,7 +171,9 @@
|
||||
/obj/item/nuke_core/supermatter_sliver/attack_tk(mob/user) // no TK dusting memes
|
||||
return
|
||||
|
||||
/obj/item/nuke_core/supermatter_sliver/can_be_pulled(user) // no drag memes
|
||||
/obj/item/nuke_core/supermatter_sliver/can_be_pulled(mob/user) // no drag memes
|
||||
if(HAS_TRAIT(user, TRAIT_SUPERMATTER_IMMUNE))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/nuke_core/supermatter_sliver/attackby(obj/item/I, mob/living/user, params)
|
||||
@@ -224,6 +227,8 @@
|
||||
|
||||
/obj/item/nuke_core/supermatter_sliver/pickup(mob/living/user)
|
||||
..()
|
||||
if(HAS_TRAIT(user, TRAIT_SUPERMATTER_IMMUNE))
|
||||
return TRUE //yay sliver throwing memes!
|
||||
if(!isliving(user) || user.status_flags & GODMODE) //try to keep this in sync with supermatter's consume fail conditions
|
||||
return FALSE
|
||||
user.visible_message("<span class='danger'>[user] reaches out and tries to pick up [src]. [user.p_their()] body starts to glow and bursts into flames before flashing into dust!</span>",
|
||||
|
||||
@@ -984,3 +984,99 @@
|
||||
return ..()
|
||||
|
||||
#undef BROOM_PUSH_LIMIT
|
||||
|
||||
/obj/item/supermatter_halberd //Supermatter Halberd, used by Oblivion Enforcers
|
||||
name = "supermatter halberd"
|
||||
desc = "The revered weapon of Oblivion Enforcers, used to enforce the Order's will."
|
||||
icon_state = "smhalberd0"
|
||||
base_icon_state = "smhalberd"
|
||||
force = 5
|
||||
sharp = TRUE
|
||||
damtype = BURN
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
slot_flags = SLOT_BACK
|
||||
throwforce = 15
|
||||
toolspeed = 0.25
|
||||
attack_verb = list("enlightened", "enforced", "cleaved", "stabbed", "whacked")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
resistance_flags = FIRE_PROOF
|
||||
var/static/list/obliteration_targets = list(/turf/simulated/wall, /obj/machinery/door/airlock)
|
||||
/// Whether we'll knockdown on hit
|
||||
var/charged = TRUE
|
||||
|
||||
/obj/item/supermatter_halberd/Initialize(mapload)
|
||||
. = ..()
|
||||
ADD_TRAIT(src, TRAIT_FORCES_OPEN_DOORS_ITEM, ROUNDSTART_TRAIT)
|
||||
ADD_TRAIT(src, TRAIT_SUPERMATTER_IMMUNE, ROUNDSTART_TRAIT) //so it can't be dusted by the SM
|
||||
AddComponent(/datum/component/parry, _stamina_constant = 0, _stamina_coefficient = 0.25, _parryable_attack_types = ALL_ATTACK_TYPES)
|
||||
AddComponent(/datum/component/two_handed, force_wielded = 40, force_unwielded = force, icon_wielded = "[base_icon_state]1")
|
||||
|
||||
/obj/item/supermatter_halberd/update_icon_state()
|
||||
icon_state = "[base_icon_state]0"
|
||||
return ..()
|
||||
|
||||
/obj/item/supermatter_halberd/afterattack(atom/A, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
if(!HAS_TRAIT(src, TRAIT_WIELDED))
|
||||
return
|
||||
|
||||
if(istype(A, /obj/structure/window) || istype(A, /obj/structure/grille)) //same behavior as a fireaxe for windows
|
||||
var/obj/structure/W = A
|
||||
W.obj_destruction("fireaxe")
|
||||
|
||||
//dusting dead people + knocking down people
|
||||
if(isliving(A))
|
||||
var/mob/living/target = A
|
||||
if(target.stat == DEAD)
|
||||
visible_message("<span class='danger'>[user] raises [src] high, ready to bring it down on [target]!</span>")
|
||||
if(do_after(user, 1 SECONDS, TRUE, target))
|
||||
visible_message("<span class='danger'>[user] brings down [src], obliterating [target] with a heavy blow!</span>")
|
||||
playsound(loc, 'sound/effects/supermatter.ogg', 50, TRUE)
|
||||
target.dust()
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You lower [src]. There'll be time to obliterate them later...</span>")
|
||||
return
|
||||
|
||||
if(charged)
|
||||
playsound(loc, 'sound/magic/lightningbolt.ogg', 5, TRUE)
|
||||
target.visible_message("<span class='danger'>[src] flares with energy and shocks [target]!</span>", \
|
||||
"<span class='userdanger'>You're shocked by [src]!</span>", \
|
||||
"<span class='warning'>You hear shocking.</span>")
|
||||
target.KnockDown(4 SECONDS)
|
||||
do_sparks(3, FALSE, src)
|
||||
charged = FALSE
|
||||
addtimer(CALLBACK(src, PROC_REF(recharge)), 4 SECONDS)
|
||||
|
||||
//walls and airlock obliteration logic
|
||||
if(!is_type_in_list(A, obliteration_targets))
|
||||
return
|
||||
|
||||
if(istype(A, /turf/simulated/wall/indestructible))
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>You start to obliterate [A].</span>")
|
||||
playsound(loc, hitsound, 50, TRUE)
|
||||
|
||||
var/obj/effect/temp_visual/obliteration_rays/rays = new(get_turf(A))
|
||||
|
||||
if(do_after(user, 5 SECONDS * toolspeed, target = A))
|
||||
new /obj/effect/temp_visual/obliteration(A, A)
|
||||
playsound(loc, 'sound/effects/supermatter.ogg', 25, TRUE)
|
||||
|
||||
if(iswallturf(A))
|
||||
var/turf/AT = A
|
||||
AT.ChangeTurf(/turf/simulated/floor/plating)
|
||||
return
|
||||
|
||||
if(istype(A, /obj/machinery/door/airlock))
|
||||
qdel(A)
|
||||
return
|
||||
|
||||
qdel(rays)
|
||||
return
|
||||
|
||||
/obj/item/supermatter_halberd/proc/recharge()
|
||||
charged = TRUE
|
||||
playsound(loc, 'sound/machines/sm/accent/normal/1.ogg', 25, TRUE)
|
||||
|
||||
@@ -204,3 +204,28 @@
|
||||
name = "gloves of headpats"
|
||||
desc = "You feel the irresistable urge to give headpats by merely glimpsing these."
|
||||
accepted_intents = list(INTENT_HELP)
|
||||
|
||||
/obj/item/clothing/gloves/color/white/supermatter_immune
|
||||
name = "hypernobilium weave gloves"
|
||||
desc = "Sleek, white gloves woven from fabric doused in hypernobilium using a process known only to the Oblivion Order."
|
||||
siemens_coefficient = 0
|
||||
icon_state = "obliviongauntlets"
|
||||
item_state = "obliviongauntlets"
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/clothing/species/vox/gloves.dmi',
|
||||
"Kidan" = 'icons/mob/clothing/species/kidan/gloves.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/gloves.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/gloves.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/gloves/color/white/supermatter_immune/Initialize(mapload)
|
||||
. = ..()
|
||||
ADD_TRAIT(src, TRAIT_SUPERMATTER_IMMUNE, ROUNDSTART_TRAIT)
|
||||
|
||||
/obj/item/clothing/gloves/color/white/supermatter_immune/equipped(mob/user, slot, initial)
|
||||
. = ..()
|
||||
ADD_TRAIT(user, TRAIT_SUPERMATTER_IMMUNE, ENFORCER_GLOVES)
|
||||
|
||||
/obj/item/clothing/gloves/color/white/supermatter_immune/dropped(mob/user, silent)
|
||||
. = ..()
|
||||
REMOVE_TRAIT(user, TRAIT_SUPERMATTER_IMMUNE, ENFORCER_GLOVES)
|
||||
|
||||
@@ -749,6 +749,9 @@
|
||||
|
||||
/obj/machinery/atmospherics/supermatter_crystal/attack_hand(mob/living/user)
|
||||
..()
|
||||
if(HAS_TRAIT(user, TRAIT_SUPERMATTER_IMMUNE))
|
||||
user.visible_message("<span class='notice'>[user] reaches out and pokes [src] harmlessly...somehow.</span>", "<span class='notice'>You poke [src].</span>")
|
||||
return
|
||||
dust_mob(user, cause = "hand")
|
||||
|
||||
/obj/machinery/atmospherics/supermatter_crystal/proc/dust_mob(mob/living/nom, vis_msg, mob_msg, cause)
|
||||
@@ -770,32 +773,39 @@
|
||||
return
|
||||
if(moveable && default_unfasten_wrench(user, I, time = 20))
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/scalpel/supermatter))
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/M = user
|
||||
var/obj/item/scalpel/supermatter/scalpel = I
|
||||
to_chat(M, "<span class='notice'>You carefully begin to scrape [src] with [I]...</span>")
|
||||
if(I.use_tool(src, M, 10 SECONDS, volume = 100))
|
||||
if(scalpel.uses_left)
|
||||
to_chat(M, "<span class='danger'>You extract a sliver from [src], and it begins to react violently!</span>")
|
||||
matter_power += 800
|
||||
scalpel.uses_left--
|
||||
if(!scalpel.uses_left)
|
||||
to_chat(M, "<span class='boldwarning'>A tiny piece of [I] falls off, rendering it useless!</span>")
|
||||
if(!ishuman(user))
|
||||
return
|
||||
|
||||
var/obj/item/nuke_core/supermatter_sliver/S = new /obj/item/nuke_core/supermatter_sliver(drop_location())
|
||||
var/mob/living/carbon/human/H = user
|
||||
var/obj/item/scalpel/supermatter/scalpel = I
|
||||
|
||||
var/obj/item/retractor/supermatter/tongs = M.is_in_hands(/obj/item/retractor/supermatter)
|
||||
if(!scalpel.uses_left)
|
||||
to_chat(H, "<span class='warning'>[scalpel] isn't sharp enough to carve a sliver off of [src]!</span>")
|
||||
return
|
||||
|
||||
var/obj/item/nuke_core/supermatter_sliver/sliver = carve_sliver(scalpel, H)
|
||||
if(sliver)
|
||||
scalpel.uses_left--
|
||||
if(!scalpel.uses_left)
|
||||
to_chat(H, "<span class='boldwarning'>A tiny piece falls off of [scalpel]'s blade, rendering it useless!</span>")
|
||||
|
||||
var/obj/item/retractor/supermatter/tongs = H.is_in_hands(/obj/item/retractor/supermatter)
|
||||
|
||||
if(tongs && !tongs.sliver)
|
||||
tongs.sliver = sliver
|
||||
sliver.forceMove(tongs)
|
||||
tongs.icon_state = "supermatter_tongs_loaded"
|
||||
tongs.item_state = "supermatter_tongs_loaded"
|
||||
to_chat(H, "<span class='notice'>You pick up [sliver] with [tongs]!</span>")
|
||||
|
||||
if(tongs && !tongs.sliver)
|
||||
tongs.sliver = S
|
||||
S.forceMove(tongs)
|
||||
tongs.icon_state = "supermatter_tongs_loaded"
|
||||
tongs.item_state = "supermatter_tongs_loaded"
|
||||
to_chat(M, "<span class='notice'>You pick up [S] with [tongs]!</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You fail to extract a sliver from [src]! [I] isn't sharp enough anymore.</span>")
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/supermatter_halberd))
|
||||
carve_sliver(I, user)
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/retractor/supermatter))
|
||||
to_chat(user, "<span class='notice'>[I] bounces off [src], you need to cut a sliver off first!</span>")
|
||||
else if(user.drop_item())
|
||||
@@ -809,6 +819,10 @@
|
||||
radiation_pulse(src, 150, 4)
|
||||
|
||||
/obj/machinery/atmospherics/supermatter_crystal/Bumped(atom/movable/AM)
|
||||
|
||||
if(HAS_TRAIT(AM, TRAIT_SUPERMATTER_IMMUNE))
|
||||
return
|
||||
|
||||
if(isliving(AM))
|
||||
AM.visible_message("<span class='danger'>[AM] slams into [src] inducing a resonance... [AM.p_their()] body starts to glow and burst into flames before flashing into dust!</span>",\
|
||||
"<span class='userdanger'>You slam into [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"</span>",\
|
||||
@@ -917,7 +931,14 @@
|
||||
remove_filter("outline")
|
||||
QDEL_NULL(warp)
|
||||
|
||||
/obj/machinery/atmospherics/supermatter_crystal/proc/carve_sliver(obj/item/tool, mob/living/user)
|
||||
to_chat(user, "<span class='notice'>You begin carving a sliver off of [src]...</span>")
|
||||
if(tool.use_tool(src, user, 10 SECONDS, volume = 100))
|
||||
to_chat(user, "<span class='danger'>You carve a sliver off of [src], and it begins to react violently!</span>")
|
||||
matter_power += 800
|
||||
|
||||
var/obj/item/nuke_core/supermatter_sliver/S = new /obj/item/nuke_core/supermatter_sliver(drop_location())
|
||||
return S
|
||||
|
||||
// Change how bright the rock is
|
||||
/obj/machinery/atmospherics/supermatter_crystal/proc/lights()
|
||||
@@ -1018,6 +1039,8 @@
|
||||
var/mob/M = P
|
||||
if(M.mob_negates_gravity())
|
||||
continue //You can't pull someone nailed to the deck
|
||||
if(HAS_TRAIT(M, TRAIT_SUPERMATTER_IMMUNE))
|
||||
continue
|
||||
else if(M.buckled)
|
||||
var/atom/movable/buckler = M.buckled
|
||||
if(buckler.unbuckle_mob(M, TRUE))
|
||||
|
||||
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 242 KiB After Width: | Height: | Size: 263 KiB |
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 147 KiB |
|
Before Width: | Height: | Size: 829 B After Width: | Height: | Size: 974 B |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 980 B |
|
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 574 B After Width: | Height: | Size: 676 B |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 118 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.7 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 115 KiB After Width: | Height: | Size: 115 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 313 KiB After Width: | Height: | Size: 362 KiB |
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 486 KiB After Width: | Height: | Size: 550 KiB |
|
Before Width: | Height: | Size: 183 KiB After Width: | Height: | Size: 185 KiB |
|
Before Width: | Height: | Size: 181 KiB After Width: | Height: | Size: 183 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 114 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 145 KiB After Width: | Height: | Size: 163 KiB |
|
Before Width: | Height: | Size: 128 KiB After Width: | Height: | Size: 136 KiB |