From 8c387f2158dd174c79a1a0c4e735d814257d16d7 Mon Sep 17 00:00:00 2001 From: "sieve32@gmail.com" Date: Thu, 4 Oct 2012 22:08:27 +0000 Subject: [PATCH] -Made all contructs children of /mob/living/simple_animal/construct and changed the type paths as needed -Now when examining someone you can tell if their brain is missing, and it doesn't give the 'catatonic' part (Because the player is in a different mob and it's kind of misleading) -Committed Lugar223's patch for the temperature gun, preventing the window from re-opening as it heats up/cools down Fixes Issue 900 -Fixed the issue where dead players could use pAI carts if they left the window open Fixes Issue 967 -Changed how the Destructive Analyzer handles sheets, now it will only deconstruct 1 sheet out of the stack at a time. Also found a bug where it would destroy its own components, so that is fixed as well. Fixes Issue 989 -Secborgs can no longer put their stun baton or energy gun in rechargers, added a check for /mob/living/silicon Fixes Issue 972 git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4807 316c924e-a436-60f5-8080-3fe189b3f50e --- code/datums/mind.dm | 6 +- code/game/gamemodes/wizard/soulstone.dm | 6 +- code/game/machinery/recharger.dm | 2 + code/game/objects/items/devices/paicard.dm | 3 + .../mob/living/carbon/human/examine.dm | 33 +- .../mob/living/simple_animal/behemoth.dm | 125 ----- .../mob/living/simple_animal/constructs.dm | 486 ++++++++---------- code/modules/mob/transform_procs.dm | 8 +- .../projectiles/guns/energy/temperature.dm | 10 +- code/modules/research/rdconsole.dm | 14 +- 10 files changed, 258 insertions(+), 435 deletions(-) delete mode 100644 code/modules/mob/living/simple_animal/behemoth.dm diff --git a/code/datums/mind.dm b/code/datums/mind.dm index f35cd17df6..c234ba358d 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -1151,17 +1151,17 @@ datum/mind ..() mind.assigned_role = "Shade" -/mob/living/simple_animal/constructbuilder/mind_initialize() +/mob/living/simple_animal/construct/builder/mind_initialize() ..() mind.assigned_role = "Artificer" mind.special_role = "Cultist" -/mob/living/simple_animal/constructwraith/mind_initialize() +/mob/living/simple_animal/construct/wraith/mind_initialize() ..() mind.assigned_role = "Wraith" mind.special_role = "Cultist" -/mob/living/simple_animal/constructarmoured/mind_initialize() +/mob/living/simple_animal/construct/armoured/mind_initialize() ..() mind.assigned_role = "Juggernaut" mind.special_role = "Cultist" diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 46df39582b..4fcfe38ba9 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -165,7 +165,7 @@ var/construct_class = alert(U, "Please choose which type of construct you wish to create.",,"Juggernaut","Wraith","Artificer") switch(construct_class) if("Juggernaut") - var/mob/living/simple_animal/constructarmoured/Z = new /mob/living/simple_animal/constructarmoured (get_turf(T.loc)) + var/mob/living/simple_animal/construct/armoured/Z = new /mob/living/simple_animal/construct/armoured (get_turf(T.loc)) Z.key = A.key if(iscultist(U)) if(ticker.mode.name == "cult") @@ -181,7 +181,7 @@ del(C) if("Wraith") - var/mob/living/simple_animal/constructwraith/Z = new /mob/living/simple_animal/constructwraith (get_turf(T.loc)) + var/mob/living/simple_animal/construct/wraith/Z = new /mob/living/simple_animal/construct/wraith (get_turf(T.loc)) Z.key = A.key if(iscultist(U)) if(ticker.mode.name == "cult") @@ -197,7 +197,7 @@ del(C) if("Artificer") - var/mob/living/simple_animal/constructbuilder/Z = new /mob/living/simple_animal/constructbuilder (get_turf(T.loc)) + var/mob/living/simple_animal/construct/builder/Z = new /mob/living/simple_animal/construct/builder (get_turf(T.loc)) Z.key = A.key if(iscultist(U)) if(ticker.mode.name == "cult") diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 190aef1ce9..664428d55a 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -11,6 +11,8 @@ obj/machinery/recharger var/obj/item/weapon/charging = null obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob) + if(istype(user,/mob/living/silicon)) + return if(istype(G, /obj/item/weapon/gun/energy) || istype(G, /obj/item/weapon/melee/baton)) if(charging) return diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 6425c138e7..47e97651be 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -58,6 +58,9 @@ /obj/item/device/paicard/Topic(href, href_list) + if(!usr || usr.stat) + return + if(href_list["setdna"]) if(pai.master_dna) return diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index cd6c09a20e..477846da44 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -194,22 +194,21 @@ msg += "[t_He] [t_has] bitten off [t_his] own tongue and [t_has] suffered major bloodloss!\n" if(stat == DEAD || (status_flags & FAKEDEATH)) - msg += "[t_He] [t_is] limp and unresponsive; there are no signs of life" + if(brain_op_stage != 4)//Only perform these checks if there is no brain + msg += "[t_He] [t_is] limp and unresponsive; there are no signs of life" - if(!key) - var/foundghost = 0 - if(mind) - for(var/mob/dead/observer/G in player_list) - if(G.mind == mind) - foundghost = 1 - break - if(!foundghost) - msg += " and [t_his] soul has departed" - msg += "...\n" - - else - - msg += "" + if(!key) + var/foundghost = 0 + if(mind) + for(var/mob/dead/observer/G in player_list) + if(G.mind == mind) + foundghost = 1 + break + if(!foundghost) + msg += " and [t_his] soul has departed" + msg += "...\n" + else//Brain is gone, doesn't matter if they are AFK or present + msg += "It appears that [t_his] brain is missing.\n" var/temp = getBruteLoss() //no need to calculate each of these twice if(temp) @@ -247,9 +246,9 @@ else if(getBrainLoss() >= 60) msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n" - if(!key) + if(!key && brain_op_stage != 4) msg += "[t_He] [t_is] totally catatonic. The stresses of life in deep-space must have been too much for [t_him]. Any recovery is unlikely\n" - else if(!client) + else if(!client && brain_op_stage != 4) msg += "[t_He] [t_has] a vacant, braindead stare...\n" if(digitalcamo) diff --git a/code/modules/mob/living/simple_animal/behemoth.dm b/code/modules/mob/living/simple_animal/behemoth.dm deleted file mode 100644 index 74b0a7f2e3..0000000000 --- a/code/modules/mob/living/simple_animal/behemoth.dm +++ /dev/null @@ -1,125 +0,0 @@ -/mob/living/simple_animal/constructbehemoth - name = "Behemoth" - real_name = "Behemoth" - desc = "The pinnacle of occult technology, Behemoths are the ultimate weapon in the Cult of Nar-Sie's arsenal." - icon = 'icons/mob/mob.dmi' - icon_state = "behemoth" - icon_living = "behemoth" - icon_dead = "shade_dead" - maxHealth = 750 - health = 750 - speak_emote = list("rumbles") - emote_hear = list("wails","screeches") - response_help = "thinks better of touching" - response_disarm = "flails at" - response_harm = "harmlessly punches the" - harm_intent_damage = 0 - melee_damage_lower = 50 - melee_damage_upper = 50 - attacktext = "brutally crushes" - minbodytemp = 0 - maxbodytemp = 4000 - min_oxy = 0 - max_co2 = 0 - max_tox = 0 - speed = 5 - wall_smash = 1 - nopush = 1 - a_intent = "harm" - stop_automated_movement = 1 - status_flags = CANPARALYSE - attack_sound = 'sound/weapons/punch4.ogg' - var/energy = 0 - var/max_energy = 1000 - - - Life() - ..() - if(stat == 2) - new /obj/item/weapon/ectoplasm (src.loc) - for(var/mob/M in viewers(src, null)) - if((M.client && !( M.blinded ))) - M.show_message("\red [src] collapses in a shattered heap ") - ghostize() - del src - return - -/mob/living/simple_animal/constructbehemoth/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(O.force) - if(O.force >= 11) - health -= O.force - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") - else - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red \b The [O] bounces harmlessly off of [src]. ") - else - usr << "\red This weapon is ineffective, it does no damage." - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red [user] gently taps [src] with the [O]. ") - - -/mob/living/simple_animal/constructbehemoth/Bump(atom/movable/AM as mob|obj, yes) - - spawn( 0 ) - if ((!( yes ) || now_pushing)) - return - now_pushing = 1 - if(ismob(AM)) - var/mob/tmob = AM - if(tmob.nopush) - now_pushing = 0 - return - - tmob.LAssailant = src - now_pushing = 0 - ..() - if (!( istype(AM, /atom/movable) )) - return - if (!( now_pushing )) - now_pushing = 1 - if (!( AM.anchored )) - var/t = get_dir(src, AM) - if (istype(AM, /obj/structure/window)) - if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) - for(var/obj/structure/window/win in get_step(AM,t)) - now_pushing = 0 - return - step(AM, t) - now_pushing = null - return - return - - -////////////////Powers////////////////// - - -/* -/client/proc/summon_cultist() - set category = "Behemoth" - set name = "Summon Cultist (300)" - set desc = "Teleport a cultist to your location" - if (istype(usr,/mob/living/simple_animal/constructbehemoth)) - - if(usr.energy<300) - usr << "\red You do not have enough power stored!" - return - - if(usr.stat) - return - - usr.energy -= 300 - var/list/mob/living/cultists = new - for(var/datum/mind/H in ticker.mode.cult) - if (istype(H.current,/mob/living)) - cultists+=H.current - var/mob/cultist = input("Choose the one who you want to summon", "Followers of Geometer") as null|anything in (cultists - usr) - if(!cultist) - return - if (cultist == usr) //just to be sure. - return - cultist.loc = usr.loc - usr.visible_message("/red [cultist] appears in a flash of red light as [usr] glows with power")*/ diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 255d5fa4a7..abc399a498 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -1,70 +1,49 @@ -/////////////////Juggernaut/////////////// - -/mob/living/simple_animal/constructarmoured - name = "Juggernaut" - real_name = "Juggernaut" - desc = "A possessed suit of armour driven by the will of the restless dead" - icon = 'icons/mob/mob.dmi' - icon_state = "behemoth" - icon_living = "behemoth" - icon_dead = "shade_dead" - maxHealth = 250 - health = 250 +/mob/living/simple_animal/construct + name = "Construct" + real_name = "Contruct" + desc = "" speak_emote = list("hisses") emote_hear = list("wails","screeches") response_help = "thinks better of touching" response_disarm = "flails at" - response_harm = "harmlessly punches the" - harm_intent_damage = 0 - melee_damage_lower = 30 - melee_damage_upper = 30 - attacktext = "smashes their armoured gauntlet into" - minbodytemp = 0 - maxbodytemp = 4000 - min_oxy = 0 - max_co2 = 0 - max_tox = 0 - speed = 3 - wall_smash = 1 - nopush = 1 + response_harm = "punches the" + icon_dead = "shade_dead" + speed = -1 a_intent = "harm" stop_automated_movement = 1 status_flags = CANPARALYSE - attack_sound = 'sound/weapons/punch3.ogg' + attack_sound = 'sound/weapons/punch1.ogg' - Life() - ..() - if(stat == 2) - new /obj/item/weapon/ectoplasm (src.loc) - for(var/mob/M in viewers(src, null)) - if((M.client && !( M.blinded ))) - M.show_message("\red [src] collapses in a shattered heap ") - ghostize() - del src - return - -/mob/living/simple_animal/constructarmoured/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(O.force) - if(O.force >= 11) - health -= O.force - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") - else - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red \b The [O] bounces harmlessly off of [src]. ") - else - usr << "\red This weapon is ineffective, it does no damage." +/mob/living/simple_animal/construct/Life() + ..() + if(stat == 2) + new /obj/item/weapon/ectoplasm (src.loc) for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red [user] gently taps [src] with the [O]. ") + if((M.client && !( M.blinded ))) + M.show_message("\red [src] collapses in a shattered heap ") + ghostize() + del src + return +/mob/living/simple_animal/construct/examine() + set src in oview() -/mob/living/simple_animal/constructarmoured/Bump(atom/movable/AM as mob|obj, yes) + var/msg = "*---------*\nThis is \icon[src] \a [src]!\n" + if (src.health < src.maxHealth) + msg += "" + if (src.health >= src.maxHealth/2) + msg += "It looks slightly dented.\n" + else + msg += "It looks severely dented!\n" + msg += "" + msg += "*---------*" + usr << msg + return + +/mob/living/simple_animal/construct/Bump(atom/movable/AM as mob|obj, yes) spawn( 0 ) if ((!( yes ) || now_pushing)) return @@ -100,218 +79,8 @@ return -/mob/living/simple_animal/constructarmoured/attack_animal(mob/living/simple_animal/M as mob) - if(istype(M, /mob/living/simple_animal/constructbuilder)) - health += 10 - M.emote("mends some of \the [src]'s wounds") - else - if(M.melee_damage_upper <= 0) - M.emote("[M.friendly] \the [src]") - else - if(M.attack_sound) - playsound(loc, M.attack_sound, 50, 1, 1) - for(var/mob/O in viewers(src, null)) - O.show_message("\The [M] [M.attacktext] \the [src]!", 1) - M.attack_log += text("\[[time_stamp()]\] attacked [src.name] ([src.ckey])") - src.attack_log += text("\[[time_stamp()]\] was attacked by [M.name] ([M.ckey])") - var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) - health -= damage - - -/mob/living/simple_animal/constructarmoured/examine() - set src in oview() - - var/msg = "*---------*\nThis is \icon[src] \a [src]!\n" - if (src.health < src.maxHealth) - msg += "" - if (src.health >= src.maxHealth/2) - msg += "It looks slightly dented.\n" - else - msg += "It looks severely dented!\n" - msg += "" - msg += "*---------*" - - usr << msg - return - - - -////////////////////////Wraith///////////////////////////////////////////// - - - -/mob/living/simple_animal/constructwraith - name = "Wraith" - real_name = "Wraith" - desc = "A wicked bladed shell contraption piloted by a bound spirit" - icon = 'icons/mob/mob.dmi' - icon_state = "floating" - icon_living = "floating" - icon_dead = "shade_dead" - maxHealth = 75 - health = 75 - speak_emote = list("hisses") - emote_hear = list("wails","screeches") - response_help = "thinks better of touching" - response_disarm = "flails at" - response_harm = "punches the" - melee_damage_lower = 25 - melee_damage_upper = 25 - attacktext = "slashes" - minbodytemp = 0 - maxbodytemp = 4000 - min_oxy = 0 - max_co2 = 0 - max_tox = 0 - speed = -1 - a_intent = "harm" - stop_automated_movement = 1 - status_flags = CANPARALYSE - see_in_dark = 7 - attack_sound = 'sound/weapons/bladeslice.ogg' - - Life() - ..() - if(stat == 2) - new /obj/item/weapon/ectoplasm (src.loc) - for(var/mob/M in viewers(src, null)) - if((M.client && !( M.blinded ))) - M.show_message("\red [src] collapses in a shattered heap ") - ghostize() - del src - return - - -/mob/living/simple_animal/constructwraith/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(O.force) - health -= O.force - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") - else - usr << "\red This weapon is ineffective, it does no damage." - for(var/mob/M in viewers(src, null)) - if ((M.client && !( M.blinded ))) - M.show_message("\red [user] gently taps [src] with the [O]. ") - -/mob/living/simple_animal/constructwraith/Bump(atom/movable/AM as mob|obj, yes) - - spawn( 0 ) - if ((!( yes ) || now_pushing)) - return - now_pushing = 1 - if(ismob(AM)) - var/mob/tmob = AM - if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations)) - if(prob(50)) - src << "\red You fail to push [tmob]'s fat ass out of the way." - now_pushing = 0 - return - if(tmob.nopush) - now_pushing = 0 - return - - tmob.LAssailant = src - now_pushing = 0 - ..() - if (!( istype(AM, /atom/movable) )) - return - if (!( now_pushing )) - now_pushing = 1 - if (!( AM.anchored )) - var/t = get_dir(src, AM) - if (istype(AM, /obj/structure/window)) - if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) - for(var/obj/structure/window/win in get_step(AM,t)) - now_pushing = 0 - return - step(AM, t) - now_pushing = null - return - return - -/mob/living/simple_animal/constructwraith/attack_animal(mob/living/simple_animal/M as mob) - if(istype(M, /mob/living/simple_animal/constructbuilder)) - health += 10 - M.emote("mends some of \the [src]'s wounds") - else - if(M.melee_damage_upper <= 0) - M.emote("[M.friendly] \the [src]") - else - if(M.attack_sound) - playsound(loc, M.attack_sound, 50, 1, 1) - for(var/mob/O in viewers(src, null)) - O.show_message("\The [M] [M.attacktext] \the [src]!", 1) - M.attack_log += text("\[[time_stamp()]\] attacked [src.name] ([src.ckey])") - src.attack_log += text("\[[time_stamp()]\] was attacked by [M.name] ([M.ckey])") - var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) - health -= damage - - - -/mob/living/simple_animal/constructwraith/examine() - set src in oview() - - var/msg = "*---------*\nThis is \icon[src] \a [src]!\n" - if (src.health < src.maxHealth) - msg += "" - if (src.health >= src.maxHealth/2) - msg += "It looks slightly dented.\n" - else - msg += "It looks severely dented!\n" - msg += "" - msg += "*---------*" - - usr << msg - return - -/////////////////////////////Artificer///////////////////////// - -/mob/living/simple_animal/constructbuilder - name = "Artificer" - real_name = "Artificer" - desc = "A bulbous construct dedicated to building and maintaining The Cult of Nar-Sie's armies" - icon = 'icons/mob/mob.dmi' - icon_state = "artificer" - icon_living = "artificer" - icon_dead = "shade_dead" - maxHealth = 50 - health = 50 - speak_emote = list("hisses") - emote_hear = list("wails","screeches") - response_help = "thinks better of touching" - response_disarm = "flails at" - response_harm = "viciously beats" - harm_intent_damage = 5 - melee_damage_lower = 5 - melee_damage_upper = 5 - attacktext = "rams" - minbodytemp = 0 - maxbodytemp = 4000 - min_oxy = 0 - max_co2 = 0 - max_tox = 0 - speed = 0 - wall_smash = 1 - nopush = 1 - a_intent = "harm" - stop_automated_movement = 1 - status_flags = CANPARALYSE - attack_sound = 'sound/weapons/punch2.ogg' - - Life() - ..() - if(stat == 2) - new /obj/item/weapon/ectoplasm (src.loc) - for(var/mob/M in viewers(src, null)) - if((M.client && !( M.blinded ))) - M.show_message("\red [src] collapses in a shattered heap ") - ghostize() - del src - return - -/mob/living/simple_animal/constructbuilder/attack_animal(mob/living/simple_animal/M as mob) - if(istype(M, /mob/living/simple_animal/constructbuilder)) +/mob/living/simple_animal/construct/attack_animal(mob/living/simple_animal/M as mob) + if(istype(M, /mob/living/simple_animal/construct/builder)) health += 5 M.emote("mends some of \the [src]'s wounds") else @@ -327,18 +96,181 @@ var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) health -= damage -/mob/living/simple_animal/constructbuilder/examine() - set src in oview() +/mob/living/simple_animal/construct/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(O.force) + health -= O.force + for(var/mob/M in viewers(src, null)) + if ((M.client && !( M.blinded ))) + M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") + else + usr << "\red This weapon is ineffective, it does no damage." + for(var/mob/M in viewers(src, null)) + if ((M.client && !( M.blinded ))) + M.show_message("\red [user] gently taps [src] with the [O]. ") - var/msg = "*---------*\nThis is \icon[src] \a [src]!\n" - if (src.health < src.maxHealth) - msg += "" - if (src.health >= src.maxHealth/2) - msg += "It looks slightly dented.\n" + + +/////////////////Juggernaut/////////////// + + + +/mob/living/simple_animal/construct/armoured + name = "Juggernaut" + real_name = "Juggernaut" + desc = "A possessed suit of armour driven by the will of the restless dead" + icon = 'icons/mob/mob.dmi' + icon_state = "behemoth" + icon_living = "behemoth" + maxHealth = 250 + health = 250 + response_harm = "harmlessly punches the" + harm_intent_damage = 0 + melee_damage_lower = 30 + melee_damage_upper = 30 + attacktext = "smashes their armoured gauntlet into" + speed = 3 + wall_smash = 1 + nopush = 1 + attack_sound = 'sound/weapons/punch3.ogg' + +/mob/living/simple_animal/construct/armoured/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(O.force) + if(O.force >= 11) + health -= O.force + for(var/mob/M in viewers(src, null)) + if ((M.client && !( M.blinded ))) + M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") else - msg += "It looks severely dented!\n" - msg += "" - msg += "*---------*" + for(var/mob/M in viewers(src, null)) + if ((M.client && !( M.blinded ))) + M.show_message("\red \b The [O] bounces harmlessly off of [src]. ") + else + usr << "\red This weapon is ineffective, it does no damage." + for(var/mob/M in viewers(src, null)) + if ((M.client && !( M.blinded ))) + M.show_message("\red [user] gently taps [src] with the [O]. ") - usr << msg - return \ No newline at end of file + + + + + +////////////////////////Wraith///////////////////////////////////////////// + + + +/mob/living/simple_animal/construct/wraith + name = "Wraith" + real_name = "Wraith" + desc = "A wicked bladed shell contraption piloted by a bound spirit" + icon = 'icons/mob/mob.dmi' + icon_state = "floating" + icon_living = "floating" + maxHealth = 75 + health = 75 + melee_damage_lower = 25 + melee_damage_upper = 25 + attacktext = "slashes" + speed = -1 + see_in_dark = 7 + attack_sound = 'sound/weapons/bladeslice.ogg' + + + +/////////////////////////////Artificer///////////////////////// + + + +/mob/living/simple_animal/construct/builder + name = "Artificer" + real_name = "Artificer" + desc = "A bulbous construct dedicated to building and maintaining The Cult of Nar-Sie's armies" + icon = 'icons/mob/mob.dmi' + icon_state = "artificer" + icon_living = "artificer" + maxHealth = 50 + health = 50 + response_harm = "viciously beats" + harm_intent_damage = 5 + melee_damage_lower = 5 + melee_damage_upper = 5 + attacktext = "rams" + speed = 0 + wall_smash = 1 + nopush = 1 + attack_sound = 'sound/weapons/punch2.ogg' + + +/////////////////////////////Behemoth///////////////////////// + + +/mob/living/simple_animal/construct/behemoth + name = "Behemoth" + real_name = "Behemoth" + desc = "The pinnacle of occult technology, Behemoths are the ultimate weapon in the Cult of Nar-Sie's arsenal." + icon = 'icons/mob/mob.dmi' + icon_state = "behemoth" + icon_living = "behemoth" + maxHealth = 750 + health = 750 + speak_emote = list("rumbles") + response_harm = "harmlessly punches the" + harm_intent_damage = 0 + melee_damage_lower = 50 + melee_damage_upper = 50 + attacktext = "brutally crushes" + speed = 5 + wall_smash = 1 + nopush = 1 + attack_sound = 'sound/weapons/punch4.ogg' + var/energy = 0 + var/max_energy = 1000 + +/mob/living/simple_animal/constructbehemoth/attackby(var/obj/item/O as obj, var/mob/user as mob) + if(O.force) + if(O.force >= 11) + health -= O.force + for(var/mob/M in viewers(src, null)) + if ((M.client && !( M.blinded ))) + M.show_message("\red \b [src] has been attacked with the [O] by [user]. ") + else + for(var/mob/M in viewers(src, null)) + if ((M.client && !( M.blinded ))) + M.show_message("\red \b The [O] bounces harmlessly off of [src]. ") + else + usr << "\red This weapon is ineffective, it does no damage." + for(var/mob/M in viewers(src, null)) + if ((M.client && !( M.blinded ))) + M.show_message("\red [user] gently taps [src] with the [O]. ") + + + +////////////////Powers////////////////// + + +/* +/client/proc/summon_cultist() + set category = "Behemoth" + set name = "Summon Cultist (300)" + set desc = "Teleport a cultist to your location" + if (istype(usr,/mob/living/simple_animal/constructbehemoth)) + + if(usr.energy<300) + usr << "\red You do not have enough power stored!" + return + + if(usr.stat) + return + + usr.energy -= 300 + var/list/mob/living/cultists = new + for(var/datum/mind/H in ticker.mode.cult) + if (istype(H.current,/mob/living)) + cultists+=H.current + var/mob/cultist = input("Choose the one who you want to summon", "Followers of Geometer") as null|anything in (cultists - usr) + if(!cultist) + return + if (cultist == usr) //just to be sure. + return + cultist.loc = usr.loc + usr.visible_message("/red [cultist] appears in a flash of red light as [usr] glows with power")*/ \ No newline at end of file diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index a9b3937e26..6ac7ac44a4 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -341,16 +341,16 @@ if(ispath(MP, /mob/living/simple_animal/space_worm)) return 0 //Unfinished. Very buggy, they seem to just spawn additional space worms everywhere and eating your own tail results in new worms spawning. - if(ispath(MP, /mob/living/simple_animal/constructbehemoth)) + if(ispath(MP, /mob/living/simple_animal/construct/behemoth)) return 0 //I think this may have been an unfinished WiP or something. These constructs should really have their own class simple_animal/construct/subtype - if(ispath(MP, /mob/living/simple_animal/constructarmoured)) + if(ispath(MP, /mob/living/simple_animal/construct/armoured)) return 0 //Verbs do not appear for players. These constructs should really have their own class simple_animal/construct/subtype - if(ispath(MP, /mob/living/simple_animal/constructwraith)) + if(ispath(MP, /mob/living/simple_animal/construct/wraith)) return 0 //Verbs do not appear for players. These constructs should really have their own class simple_animal/construct/subtype - if(ispath(MP, /mob/living/simple_animal/constructbuilder)) + if(ispath(MP, /mob/living/simple_animal/construct/builder)) return 0 //Verbs do not appear for players. These constructs should really have their own class simple_animal/construct/subtype //Good mobs! diff --git a/code/modules/projectiles/guns/energy/temperature.dm b/code/modules/projectiles/guns/energy/temperature.dm index 99d3c65eae..61f5f503e2 100644 --- a/code/modules/projectiles/guns/energy/temperature.dm +++ b/code/modules/projectiles/guns/energy/temperature.dm @@ -35,8 +35,9 @@ Target output temperature: - - - [current_temperature] + + +
"} - user << browse(dat, "window=freezegun;size=450x300") - onclose(user, "freezegun") + + user << browse(dat, "window=freezegun;size=450x300;can_resize=1;can_close=1;can_minimize=1") + onclose(user, "window=freezegun", src) Topic(href, href_list) @@ -44,6 +45,9 @@ return usr.machine = src src.add_fingerprint(usr) + + + if(href_list["temp"]) var/amount = text2num(href_list["temp"]) if(amount > 0) @@ -73,6 +77,4 @@ temperature += 10 else temperature = current_temperature - if(istype(src.loc, /mob)) - attack_self(src.loc) return diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index d8beb2dc16..94cc953820 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -292,9 +292,19 @@ won't update every console in existence) but it's more of a hassle to do. Also, for(var/obj/I in linked_destroy.contents) for(var/mob/M in I.contents) M.death() - del(I) + if(istype(I,/obj/item/stack/sheet))//Only deconsturcts one sheet at a time instead of the entire stack + var/obj/item/stack/sheet/S = I + if(S.amount > 1) + S.amount-- + linked_destroy.loaded_item = S + else + del(S) + linked_destroy.icon_state = "d_analyzer" + else + if(!(I in linked_destroy.component_parts)) + del(I) + linked_destroy.icon_state = "d_analyzer" use_power(250) - linked_destroy.icon_state = "d_analyzer" screen = 1.0 updateUsrDialog()