diff --git a/code/game/gamemodes/modes_gameplays/wizard/spellbook.dm b/code/game/gamemodes/modes_gameplays/wizard/spellbook.dm index 4ae645d06e7..068d5d56bfb 100644 --- a/code/game/gamemodes/modes_gameplays/wizard/spellbook.dm +++ b/code/game/gamemodes/modes_gameplays/wizard/spellbook.dm @@ -320,14 +320,12 @@ dat += "[surplus] осталось.
" return dat -/* Commented because admins ban everyone who uses this staff... Somebody should rebalance this thing /datum/spellbook_entry/item/staffchange name = "Staff of Change" desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself." item_path = /obj/item/weapon/gun/magic/change log_name = "ST" cost = 4 -*/ /datum/spellbook_entry/item/staffanimation name = "Посох анимации" diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm index 8e2703a565f..6176b3cc91b 100644 --- a/code/modules/mob/death.dm +++ b/code/modules/mob/death.dm @@ -26,7 +26,6 @@ /mob/proc/dust() new /obj/effect/decal/cleanable/ash(loc) dust_process() - /mob/proc/death(gibbed) SEND_SIGNAL(src, COMSIG_MOB_DIED, gibbed) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 2b6ee3feb23..4d66a271a3e 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1422,6 +1422,8 @@ /mob/living/death(gibbed) beauty.AddModifier("stat", additive=beauty_dead) update_health_hud() + if(wabbajacked) + unwabbajack() return ..() /mob/living/proc/update_beauty(datum/source, old_value) diff --git a/code/modules/mob/living/simple_animal/hulk.dm b/code/modules/mob/living/simple_animal/hulk.dm index d4dbe757076..3f7d24c8d32 100644 --- a/code/modules/mob/living/simple_animal/hulk.dm +++ b/code/modules/mob/living/simple_animal/hulk.dm @@ -37,7 +37,7 @@ max_n2 = 0 minbodytemp = 0 var/hulk_powers = list() - var/mob/living/original_body + var/mob/living/origin var/health_regen = 1.5 animalistic = FALSE @@ -186,8 +186,8 @@ if(mind && original_body) mind.transfer_to(original_body) - original_body.attack_log = attack_log - original_body.attack_log += "\[[time_stamp()]\] ======HUMAN LIFE======" + origin.attack_log = attack_log + origin.attack_log += "\[[time_stamp()]\] ======HUMAN LIFE======" qdel(src) /mob/living/simple_animal/hulk/MobBump(mob/M) diff --git a/code/modules/projectiles/guns/magic/staff.dm b/code/modules/projectiles/guns/magic/staff.dm index 50411ac174c..b95103c90cd 100644 --- a/code/modules/projectiles/guns/magic/staff.dm +++ b/code/modules/projectiles/guns/magic/staff.dm @@ -4,7 +4,7 @@ ammo_type = /obj/item/ammo_casing/magic/change icon_state = "staffofchange" item_state = "staffofchange" - fire_delay = 30 + fire_delay = 180 max_charges = 1 /obj/item/weapon/gun/magic/animate diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index b8344835af7..948835b915c 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -22,23 +22,44 @@ wabbajack(target) /obj/item/projectile/magic/proc/wabbajack(mob/living/M) - if(!istype(M) || M.stat == DEAD || M.notransform || (GODMODE & M.status_flags) || !M.client || isxenoqueen(M)) + if(!istype(M) || isAI(M) || isdrone(M) || isconstruct(M) || M.stat == DEAD || M.notransform || (GODMODE & M.status_flags) || isxenoqueen(M)) return - M.notransform = TRUE - M.canmove = 0 - M.icon = null - M.cut_overlays() - M.invisibility = 101 + if(!issilicon(M)) + for(var/obj/item/W in M) + M.drop_from_inventory(W) var/mob/living/new_mob - var/randomizer = pick("animal", "cyborg", "xeno") - if(isxeno(M)) - randomizer = "xeno" + var/randomizer = pick("animal", "cyborg", "carbon") switch(randomizer) if("animal") - var/beast = pick(/mob/living/simple_animal/hostile/carp, /mob/living/simple_animal/hostile/tomato/angry_tomato, /mob/living/simple_animal/hostile/retaliate/goat, /mob/living/simple_animal/pig/shadowpig) + var/beast = pick( + /mob/living/simple_animal/mouse, + /mob/living/simple_animal/cow, + /mob/living/simple_animal/chicken, + /mob/living/simple_animal/chick, + /mob/living/simple_animal/cat, + /mob/living/simple_animal/corgi, + /mob/living/simple_animal/corgi/Lisa, + /mob/living/simple_animal/corgi/borgi, + /mob/living/simple_animal/corgi/puppy, + /mob/living/simple_animal/parrot, + /mob/living/simple_animal/crab, + /mob/living/simple_animal/hostile/retaliate/goat, + /mob/living/simple_animal/pig/shadowpig, + /mob/living/simple_animal/pig, + /mob/living/simple_animal/turkey, + /mob/living/simple_animal/goose, + /mob/living/simple_animal/seal, + /mob/living/simple_animal/walrus, + /mob/living/simple_animal/fox, + /mob/living/simple_animal/lizard, + /mob/living/simple_animal/pug, + /mob/living/simple_animal/shiba, + /mob/living/simple_animal/mushroom, + /mob/living/simple_animal/yithian, + /mob/living/simple_animal/spiderbot) new_mob = new beast(M.loc) new_mob.universal_speak = TRUE if("cyborg") @@ -46,25 +67,74 @@ new_mob.gender = M.gender new_mob.invisibility = 0 new_mob.job = "Cyborg" - if("xeno") - new_mob = new /mob/living/carbon/xenomorph/humanoid/maid(M.loc) - new_mob.universal_speak = TRUE + if("carbon") + var/carbon = pick( + /mob/living/carbon/human, + /mob/living/carbon/monkey, + /mob/living/carbon/monkey/tajara, + /mob/living/carbon/monkey/skrell, + /mob/living/carbon/monkey/unathi, + /mob/living/carbon/monkey/diona/podman, + /mob/living/carbon/human/tajaran, + /mob/living/carbon/human/skrell, + /mob/living/carbon/human/unathi, + /mob/living/carbon/human/podman, + /mob/living/carbon/human/abductor, + /mob/living/carbon/human/golem, + /mob/living/carbon/human/vox) + new_mob = new carbon(M.loc) + new_mob.gender = M.gender + new_mob.languages = M.languages if(!new_mob) return new_mob.attack_log = M.attack_log M.attack_log += text("\[[time_stamp()]\] [M.real_name] ([M.ckey]) became [new_mob.real_name].") - new_mob.set_a_intent(INTENT_HARM) if(M.mind) M.mind.transfer_to(new_mob) else new_mob.key = M.key + if(!M.original_body) + new_mob.original_body = M + M.original_body = M + M.forceMove(new_mob) + + new_mob.original_body = M.original_body + + for(var/mob/living/H in M.contents) + H.forceMove(new_mob) + qdel(M) + + new_mob.wabbajacked = 1 + to_chat(new_mob, "Your body forms to something else!") - qdel(M) - return new_mob +/mob/living/proc/unwabbajack(mob/living/M) + if(!issilicon(M)) + for(var/obj/item/W in M) + M.drop_from_inventory(W) + + var/datum/effect/effect/system/smoke_spread/bad/smoke = new /datum/effect/effect/system/smoke_spread/bad() + smoke.set_up(10, 0, src.loc) + smoke.start() + playsound(src, 'sound/effects/bamf.ogg', VOL_EFFECTS_MASTER) + + var/obj/effect/decal/remains/human/RH = new /obj/effect/decal/remains/human(src.loc) + var/matrix/Mx = matrix() + RH.transform = Mx + + for(M in contents) + M.loc = src.loc + if(isliving(M)) + var/mob/living/L = M + L.Paralyse(15) + L.update_canmove() + if(mind && original_body) + mind.transfer_to(original_body) + + qdel(src) /obj/item/projectile/magic/animate name = "bolt of animation" @@ -82,7 +152,7 @@ C.ChangeOwner(firer) create_spawner(/datum/spawner/living/mimic, C) else if(isshade(change) || isxeno(change)) - var/mob/living/M = wabbajack(change) + var/mob/living/M = animate_atom_living(change) if(!M) return if(firer && iswizard(firer)) @@ -97,6 +167,50 @@ if(R) R.Deconvert() +/obj/item/projectile/magic/animate/proc/animate_atom_living(mob/living/M) + if(!istype(M) || M.stat == DEAD || M.notransform || (GODMODE & M.status_flags) || !M.client || isxenoqueen(M)) + return + + M.notransform = TRUE + M.canmove = 0 + M.icon = null + M.cut_overlays() + M.invisibility = 101 + + var/mob/living/new_mob + + var/randomizer = pick("animal", "cyborg", "xeno") + if(isxeno(M)) + randomizer = "xeno" + switch(randomizer) + if("animal") + var/beast = pick(/mob/living/simple_animal/hostile/carp, /mob/living/simple_animal/hostile/tomato/angry_tomato, /mob/living/simple_animal/hostile/retaliate/goat, /mob/living/simple_animal/pig/shadowpig) + new_mob = new beast(M.loc) + new_mob.universal_speak = TRUE + if("cyborg") + new_mob = new /mob/living/silicon/robot(M.loc, "Default", /datum/ai_laws/asimov_xenophile, FALSE, global.chaplain_religion) + new_mob.gender = M.gender + new_mob.invisibility = 0 + new_mob.job = "Cyborg" + if("xeno") + new_mob = new /mob/living/carbon/xenomorph/humanoid/maid(M.loc) + new_mob.universal_speak = TRUE + if(!new_mob) + return + + new_mob.attack_log = M.attack_log + M.attack_log += text("\[[time_stamp()]\] [M.real_name] ([M.ckey]) became [new_mob.real_name].") + + new_mob.set_a_intent(INTENT_HARM) + if(M.mind) + M.mind.transfer_to(new_mob) + else + new_mob.key = M.key + + to_chat(new_mob, "Your body forms to something else!") + + qdel(M) + return new_mob /obj/item/projectile/magic/resurrection name = "bolt of resurrection" diff --git a/code/modules/unarmed_combat/living_procs_defines.dm b/code/modules/unarmed_combat/living_procs_defines.dm index aa5a13ea9c8..847250c13b6 100644 --- a/code/modules/unarmed_combat/living_procs_defines.dm +++ b/code/modules/unarmed_combat/living_procs_defines.dm @@ -25,6 +25,9 @@ var/attack_push_vis_effect var/attack_disarm_vis_effect + var/original_body + var/wabbajacked = 0 + /mob/living/proc/read_possible_combos() set name = "Combos Cheat Sheet" set desc = "A list of all possible combos with rough descriptions." diff --git a/taucetistation.dme b/taucetistation.dme index 718b0ceab9d..ec9563fc953 100644 --- a/taucetistation.dme +++ b/taucetistation.dme @@ -202,14 +202,14 @@ #include "code\_onclick\hud\radial.dm" #include "code\_onclick\hud\robot.dm" #include "code\_onclick\hud\tooltip.dm" -#include "code\_onclick\hud\rendering\planes\_planes.dm" -#include "code\_onclick\hud\rendering\planes\effects_planes.dm" -#include "code\_onclick\hud\rendering\planes\lighting_planes.dm" -#include "code\_onclick\hud\rendering\planes\parallax_planes.dm" #include "code\_onclick\hud\rendering\map_view.dm" #include "code\_onclick\hud\rendering\plane_master.dm" #include "code\_onclick\hud\rendering\render_plane_relay.dm" #include "code\_onclick\hud\rendering\render_plate.dm" +#include "code\_onclick\hud\rendering\planes\_planes.dm" +#include "code\_onclick\hud\rendering\planes\effects_planes.dm" +#include "code\_onclick\hud\rendering\planes\lighting_planes.dm" +#include "code\_onclick\hud\rendering\planes\parallax_planes.dm" #include "code\_onclick\hud\ui_screens\alien.dm" #include "code\_onclick\hud\ui_screens\basic.dm" #include "code\_onclick\hud\ui_screens\complex.dm"