mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 12:07:27 +01:00
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>
This commit is contained in:
co-authored by
Henri215
DGamerL
Luc
Charlie
parent
e59f0e8aea
commit
aaad2a5aba
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user