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:
JimKil3
2023-09-10 22:15:12 +01:00
committed by GitHub
co-authored by Henri215 DGamerL Luc Charlie
parent e59f0e8aea
commit aaad2a5aba
45 changed files with 290 additions and 23 deletions
+6 -1
View File
@@ -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)