diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 5d5307cd50d..cfe37505e1c 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -884,3 +884,9 @@ proc/sort_atoms_by_layer(var/list/atoms) icon = J return J return 0 + +//Hook, override to run code on- wait this is images +//Images have dir without being an atom, so they get their own definition. +//Lame. +/image/proc/setDir(newdir) + dir = newdir diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 0df047cdca3..e843fcf6a3c 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -81,6 +81,10 @@ reagents = null invisibility = 101 return ..() + +//Hook for running code when a dir change occurs +/atom/proc/setDir(newdir) + dir = newdir /atom/proc/CheckParts(list/parts_list) for(var/A in parts_list) diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 6e1fe9126fd..f3dc1cf4775 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -232,6 +232,10 @@ to_chat(src, "Become a BYOND member to access member-perks and features, as well as support the engine that makes this game possible. Click here to find out more.") return 0 return 1 + +//Like for /atoms, but clients are their own snowflake FUCK +/client/proc/setDir(newdir) + dir = newdir /client/proc/handle_spam_prevention(var/message, var/mute_type, var/throttle = 0) if(throttle) diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index 757c8dfc1d4..8657a2529f2 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -195,7 +195,7 @@ to_chat(user, "You return the wisp to the lantern.") if(wisp.orbiting) - var/atom/A = wisp.orbiting.orbiting + var/atom/A = wisp.orbiting if(isliving(A)) var/mob/living/M = A M.sight &= ~SEE_MOBS @@ -253,9 +253,9 @@ user.forceMove(get_turf(linked)) feedback_add_details("warp_cube","[src.type]") - var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread() - smoke.set_up(1, 0, user.loc) - smoke.start() + var/datum/effect/system/harmless_smoke_spread/smoke2 = new /datum/effect/system/harmless_smoke_spread() + smoke2.set_up(1, 0, user.loc) + smoke2.start() /obj/item/device/warp_cube/red name = "red cube" @@ -317,4 +317,63 @@ /obj/item/projectile/hook/Destroy() qdel(chain) - return ..() \ No newline at end of file + return ..() + +//Immortality Talisman + +/obj/item/device/immortality_talisman + name = "Immortality Talisman" + desc = "A dread talisman that can render you completely invulnerable." + icon = 'icons/obj/lavaland/artefacts.dmi' + icon_state = "talisman" + actions_types = list(/datum/action/item_action/immortality) + var/cooldown = 0 + +/datum/action/item_action/immortality + name = "Immortality" + +/obj/item/device/immortality_talisman/Destroy(force) + if(force) + . = ..() + else + return QDEL_HINT_LETMELIVE + +/obj/item/device/immortality_talisman/attack_self(mob/user) + if(cooldown < world.time) + feedback_add_details("immortality_talisman","U") // usage + cooldown = world.time + 600 + user.visible_message("[user] vanishes from reality, leaving a a hole in their place!") + var/obj/effect/immortality_talisman/Z = new(get_turf(src.loc)) + Z.name = "hole in reality" + Z.desc = "It's shaped an awful lot like [user.name]." + Z.setDir(user.dir) + user.forceMove(Z) + user.notransform = 1 + user.status_flags |= GODMODE + spawn(100) + user.status_flags &= ~GODMODE + user.notransform = 0 + user.forceMove(get_turf(Z)) + user.visible_message("[user] pops back into reality!") + Z.can_destroy = TRUE + qdel(Z) + +/obj/effect/immortality_talisman + icon_state = "blank" + icon = 'icons/effects/effects.dmi' + var/can_destroy = FALSE + +/obj/effect/immortality_talisman/attackby() + return + +/obj/effect/immortality_talisman/ex_act() + return + +/obj/effect/immortality_talisman/singularity_pull() + return 0 + +/obj/effect/immortality_talisman/Destroy(force) + if(!can_destroy && !force) + return QDEL_HINT_LETMELIVE + else + . = ..() \ No newline at end of file diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 61da8dc4d46..801b93d094f 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -52,7 +52,7 @@ if(15) new /obj/item/weapon/guardiancreator(src) if(16) - new /obj/item/borg/upgrade/modkit/aoe/turfs/andmobs(src)/* + new /obj/item/borg/upgrade/modkit/aoe/turfs/andmobs(src) if(17) new /obj/item/device/warp_cube/red(src) if(18) @@ -70,4 +70,4 @@ new /obj/item/clothing/head/helmet/space/rig/ert/paranormal/inquisitor(src) new /obj/item/clothing/suit/space/rig/ert/paranormal/inquisitor(src) if(24) - new /obj/item/weapon/spellbook/oneuse/summonitem(src)*/ \ No newline at end of file + new /obj/item/weapon/spellbook/oneuse/summonitem(src) \ No newline at end of file diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 93a175f3efc..a7962c37ec1 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ