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()