diff --git a/baystation12.dme b/baystation12.dme
index fa9cd247153..1cc62f3e5e6 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -797,6 +797,7 @@
#include "code\modules\mob\living\say.dm"
#include "code\modules\mob\living\blob\blob.dm"
#include "code\modules\mob\living\carbon\carbon.dm"
+#include "code\modules\mob\living\carbon\shock.dm"
#include "code\modules\mob\living\carbon\alien\alien.dm"
#include "code\modules\mob\living\carbon\alien\say.dm"
#include "code\modules\mob\living\carbon\alien\humanoid\alien_powers.dm"
@@ -984,6 +985,7 @@
#include "code\WorkInProgress\mapload\reader.dm"
#include "code\WorkInProgress\Mini\customitems.dm"
#include "code\WorkInProgress\SkyMarshal\coatrack.dm"
+#include "code\WorkInProgress\SkyMarshal\eraser.dm"
#include "code\WorkInProgress\SkyMarshal\policetape.dm"
#include "code\WorkInProgress\Tastyfish\Eliza.dm"
#include "code\WorkInProgress\Tastyfish\Eliza_Data.dm"
diff --git a/code/WorkInProgress/SkyMarshal/eraser.dm b/code/WorkInProgress/SkyMarshal/eraser.dm
new file mode 100644
index 00000000000..f15384f3f14
--- /dev/null
+++ b/code/WorkInProgress/SkyMarshal/eraser.dm
@@ -0,0 +1,9 @@
+/obj/item/weapon/stamperaser
+ name = "Eraser"
+ desc = "Some type of eraser, you guess."
+ flags = FPRINT | TABLEPASS
+ icon = 'items.dmi'
+ icon_state = "zippo"
+ item_state = "zippo"
+ w_class = 1.0
+ m_amt = 80
\ No newline at end of file
diff --git a/code/WorkInProgress/virus2/base.dm b/code/WorkInProgress/virus2/base.dm
index 789bbddfdaa..598ee2d4f84 100644
--- a/code/WorkInProgress/virus2/base.dm
+++ b/code/WorkInProgress/virus2/base.dm
@@ -441,12 +441,6 @@
activate(var/mob/living/carbon/mob,var/multiplier)
mob.brainloss = 20
-/datum/disease2/effect/lesser/drowsy
- name = "Bedroom Syndrome"
- stage = 2
- activate(var/mob/living/carbon/mob,var/multiplier)
- mob.drowsyness = 5
-
/datum/disease2/effect/lesser/deaf
name = "Hard of hearing syndrome"
stage = 3
diff --git a/code/WorkInProgress/virus2/curer.dm b/code/WorkInProgress/virus2/curer.dm
index f4f53cff1b3..e5e0bc7f8d6 100644
--- a/code/WorkInProgress/virus2/curer.dm
+++ b/code/WorkInProgress/virus2/curer.dm
@@ -68,6 +68,9 @@
if(B)
dat = "Blood sample inserted."
+ var/code = ""
+ for(var/V in ANTIGENS) if(text2num(V) & B.data["antibodies"]) code += ANTIGENS[V]
+ dat += "
Antibodies: [code]"
dat += "
Begin antibody production"
else
dat += "
Please check container contents."
diff --git a/code/datums/diseases/alien_embryo.dm b/code/datums/diseases/alien_embryo.dm
index 1008c7f54b4..29890cd6dc2 100644
--- a/code/datums/diseases/alien_embryo.dm
+++ b/code/datums/diseases/alien_embryo.dm
@@ -11,6 +11,7 @@
max_stages = 5
spread = "None"
spread_type = SPECIAL
+ stage_prob = 2
cure = "Unknown"
cure_id = list("lexorin","toxin","gargleblaster")
cure_chance = 20
diff --git a/code/defines/mob/living/carbon/carbon.dm b/code/defines/mob/living/carbon/carbon.dm
index b34ef524275..3e8250b4b33 100644
--- a/code/defines/mob/living/carbon/carbon.dm
+++ b/code/defines/mob/living/carbon/carbon.dm
@@ -5,6 +5,7 @@
var/brain_op_stage = 0.0
var/eye_op_stage = 0.0
var/appendix_op_stage = 0.0
+ var/embryo_op_stage = 0.0
var/datum/disease2/disease/virus2 = null
var/list/datum/disease2/disease/resistances2 = list()
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 6d829e5e35d..bdea8513101 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -824,6 +824,7 @@
icon = 'paper.dmi'
icon_state = "paper"
var/info = null
+ var/infoold = null
throwforce = 0
w_class = 1.0
throw_speed = 3
@@ -1458,6 +1459,11 @@
icon_state = "stamp-hos"
color = "hosred"
+/obj/item/weapon/stamp/detective
+ name = "detective's rubber stamp"
+ icon_state = "stamp-hos"
+ color = "hosred"
+
/obj/item/weapon/stamp/ce
name = "chief engineer's rubber stamp"
icon_state = "stamp-ce"
@@ -1516,7 +1522,7 @@
name = "d4"
desc = "A dice with four sides."
sides = 4
- icon_state = "d20"
+ icon_state = "dice"
item_state = "dice"
/obj/item/weapon/dice // -- TLE
@@ -1708,4 +1714,4 @@
desc = "A container for hold compressed matter awaiting re-construction."
origin_tech = "materials=5"
rating = 3
- m_amt = 80
+ m_amt = 80
\ No newline at end of file
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index 1272ba40ff9..ac15717c1c6 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -12,7 +12,7 @@
icon_state = "pod_0"
req_access = list(access_medlab) //For premature unlocking.
var/mob/living/occupant
- var/heal_level = 90 //The clone is released once its health reaches this level.
+ var/heal_level = 10 //The clone is released once its health reaches this level.
var/locked = 0
var/obj/machinery/computer/cloning/connected = null //So we remember the connected clone machine.
var/mess = 0 //Need to clean out it if it's full of exploded clone.
diff --git a/code/game/objects/devices/PDA/uplink.dm b/code/game/objects/devices/PDA/uplink.dm
index 31e4943d1bc..6c77009d990 100644
--- a/code/game/objects/devices/PDA/uplink.dm
+++ b/code/game/objects/devices/PDA/uplink.dm
@@ -41,6 +41,7 @@
menu_message += "Syndicate Card (3)
"
menu_message += "Voice-Changer (4)
"
menu_message += "Thermal Glasses (4)
"
+ menu_message += "Stamp Remover (1)
" //Allows doccuments to be de-stamped
menu_message += "
"
menu_message += "Freedom Implant (with injector) (3)
"
menu_message += "Uplink Implant (5 crystals inside) (10)
"
@@ -212,6 +213,10 @@
if(uses >= 10)
uses -= 10
new /obj/item/weapon/storage/box/syndicate(get_turf(hostpda))
+ if("eraser")
+ if(uses >= 1)
+ uses -= 1
+ new /obj/item/weapon/stamperaser(get_turf(hostpda))
generate_menu()
print_to_host(menu_message)
diff --git a/code/game/objects/items/weapons/papers_bins.dm b/code/game/objects/items/weapons/papers_bins.dm
index 1a5d3501f74..46247b0257a 100644
--- a/code/game/objects/items/weapons/papers_bins.dm
+++ b/code/game/objects/items/weapons/papers_bins.dm
@@ -124,6 +124,7 @@ CLIPBOARDS
if(istype(P, /obj/item/weapon/stamp))
if ((!in_range(src, usr) && src.loc != user && !( istype(src.loc, /obj/item/weapon/clipboard) ) && src.loc.loc != user && user.equipped() != P))
return
+ src.infoold = src.info
src.info += text("
This paper has been stamped with the [].
", P.name)
switch(P.type)
if(/obj/item/weapon/stamp/captain)
@@ -141,11 +142,7 @@ CLIPBOARDS
if(/obj/item/weapon/stamp/denied)
src.overlays += "paper_stamped_denied"
if(/obj/item/weapon/stamp/clown)
- if (!clown)
- usr << "\red You are totally unable to use the stamp. HONK!"
- return
- else
- src.overlays += "paper_stamped_clown"
+ src.overlays += "paper_stamped_clown"
else
src.overlays += "paper_stamped"
if(!stamped)
@@ -153,6 +150,35 @@ CLIPBOARDS
stamped += P.type
user << "\blue You stamp the paper with your rubber stamp."
+
+ else if(istype(P, /obj/item/weapon/stamperaser))
+ if ((!in_range(src, usr) && src.loc != user && !( istype(src.loc, /obj/item/weapon/clipboard) ) && src.loc.loc != user && user.equipped() != P))
+ return
+ src.info = src.infoold
+ for(var/i, i <= stamped.len, i++)
+ switch(stamped[i])
+ if(/obj/item/weapon/stamp/captain)
+ src.overlays -= "paper_stamped_cap"
+ if(/obj/item/weapon/stamp/hop)
+ src.overlays -= "paper_stamped_hop"
+ if(/obj/item/weapon/stamp/hos)
+ src.overlays -= "paper_stamped_hos"
+ if(/obj/item/weapon/stamp/ce)
+ src.overlays -= "paper_stamped_ce"
+ if(/obj/item/weapon/stamp/rd)
+ src.overlays -= "paper_stamped_rd"
+ if(/obj/item/weapon/stamp/cmo)
+ src.overlays -= "paper_stamped_cmo"
+ if(/obj/item/weapon/stamp/denied)
+ src.overlays -= "paper_stamped_denied"
+ if(/obj/item/weapon/stamp/clown)
+ src.overlays -= "paper_stamped_clown"
+ else
+ src.overlays -= "paper_stamped"
+ stamped = new list()
+
+ user << "\blue You sucessfully remove those pesky stamps."
+
/*
else
if (istype(P, /obj/item/weapon/weldingtool))
diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm
index 4180f9e34ab..c9a40160741 100644
--- a/code/game/objects/items/weapons/surgery_tools.dm
+++ b/code/game/objects/items/weapons/surgery_tools.dm
@@ -19,6 +19,32 @@ CIRCULAR SAW
if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/table/, M.loc) && (M.lying || M.weakened || M.stunned || M.paralysis || M.sleeping || M.stat) && prob(50))))
return ..()
+ if(user.zone_sel.selecting == "chest")
+ if(istype(M, /mob/living/carbon/human))
+ switch(M:embryo_op_stage)
+ if(2.0)
+ if(M != user)
+ for(var/mob/O in (viewers(M) - user - M))
+ O.show_message("\red [user] retracts the flap in [M]'s cut open torso with [src].", 1)
+ M << "\red [user] begins to retracts the flap in your chest with [src]!"
+ user << "\red You clamp retracts the flap in [M]'s torso with [src]!"
+ M:embryo_op_stage = 3.0
+ return
+ if(4.0)
+ if(M != user)
+ for(var/mob/O in (viewers(M) - user - M))
+ O.show_message("\red [user] rips the larva out of [M]'s torso!", 1)
+ M << "\red [user] begins to rip the larva out of [M]'s torso!"
+ user << "\red You rip the larva out of [M]'s torso!"
+ var/mob/living/carbon/alien/larva/stupid = new(M.loc)
+ stupid.death(0)
+ //Make a larva and kill it. -- SkyMarshal
+ M:embryo_op_stage = 5.0
+ for(var/datum/disease/alien_embryo in M.viruses)
+ alien_embryo.cure()
+ return
+ return
+
if(user.zone_sel.selecting == "groin")
if(istype(M, /mob/living/carbon/human))
switch(M:appendix_op_stage)
@@ -92,6 +118,26 @@ CIRCULAR SAW
if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/table/, M.loc) && M.lying && prob(50))))
return ..()
+ if(user.zone_sel.selecting == "chest")
+ if(istype(M, /mob/living/carbon/human))
+ switch(M:embryo_op_stage)
+ if(1.0)
+ if(M != user)
+ for(var/mob/O in (viewers(M) - user - M))
+ O.show_message("\red [user] is beginning to clamp bleeders in [M]'s cut open torso with [src].", 1)
+ M << "\red [user] begins to torso bleeders in your chest with [src]!"
+ user << "\red You clamp bleeders in [M]'s torso with [src]!"
+ M:embryo_op_stage = 2.0
+ return
+ if(5.0)
+ if(M != user)
+ for(var/mob/O in (viewers(M) - user - M))
+ O.show_message("\red [user] cleans out the debris from [M]'s cut open torso with [src].", 1)
+ M << "\red [user] begins to clean out the debris in your torso with [src]!"
+ user << "\red You clean out the debris from in [M]'s torso with [src]!"
+ M:embryo_op_stage = 6.0
+ return
+
if(user.zone_sel.selecting == "groin")
if(istype(M, /mob/living/carbon/human))
switch(M:appendix_op_stage)
@@ -177,6 +223,18 @@ CIRCULAR SAW
if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/table/, M.loc) && M.lying && prob(50))))
return ..()
+ if(user.zone_sel.selecting == "chest")
+ if(istype(M, /mob/living/carbon/human))
+ switch(M:embryo_op_stage)
+ if(6.0)
+ if(M != user)
+ for(var/mob/O in (viewers(M) - user - M))
+ O.show_message("\red [user] is beginning to cauterize the incision in [M]'s torso with [src].", 1)
+ M << "\red [user] begins to cauterize the incision in your torso with [src]!"
+ user << "\red You cauterize the incision in [M]'s torso with [src]!"
+ M:embryo_op_stage = 7.0
+ return
+
if(user.zone_sel.selecting == "groin")
if(istype(M, /mob/living/carbon/human))
switch(M:appendix_op_stage)
@@ -264,6 +322,28 @@ CIRCULAR SAW
src.add_fingerprint(user)
+ if(user.zone_sel.selecting == "chest")
+ if(istype(M, /mob/living/carbon/human))
+ switch(M:embryo_op_stage)
+ if(0.0)
+ if(M != user)
+ for(var/mob/O in (viewers(M) - user - M))
+ O.show_message("\red [M] is beginning to have his torso cut open with [src] by [user].", 1)
+ M << "\red [user] begins to cut open your torso with [src]!"
+ user << "\red You cut [M]'s torso open with [src]!"
+ M:embryo_op_stage = 1.0
+ if(3.0)
+ if(M != user)
+ for(var/mob/O in (viewers(M) - user - M))
+ O.show_message("\red [M] is beginning to have his stomach cut open with [src] by [user].", 1)
+ M << "\red [user] begins to cut open your stomach with [src]!"
+ user << "\red You cut [M]'s stomach open with [src]!"
+ for(var/datum/disease/D in M.viruses)
+ if(istype(D, /datum/disease/alien_embryo))
+ user << "\red There's something wiggling in there!"
+ M:embryo_op_stage = 4.0
+ return
+
if(user.zone_sel.selecting == "groin")
if(istype(M, /mob/living/carbon/human))
switch(M:appendix_op_stage)
diff --git a/code/game/objects/items/weapons/uplinks.dm b/code/game/objects/items/weapons/uplinks.dm
index 39d0d1a9fe6..cc9c8b9d1ab 100644
--- a/code/game/objects/items/weapons/uplinks.dm
+++ b/code/game/objects/items/weapons/uplinks.dm
@@ -44,9 +44,10 @@ SYNDICATE UPLINK
dat += "Syndicate Card (3)
"
dat += "Voice-Changer (4)
"
dat += "Thermal Glasses (4)
"
+ dat += "Stamp Remover (1)
"
dat += "
"
dat += "Freedom Implant (with injector) (3)
"
- dat += "Paralysis Pen (3)
" //Note that this goes to the updated sleepypen now.
+// dat += "Paralysis Pen (3)
" //Note that this goes to the updated sleepypen now.
dat += "Sleepy Pen (4)
" //Terrible -Pete. //Reinstated -Skymarshal
dat += "
"
dat += "Detomatix Cartridge (3)
"
@@ -196,6 +197,10 @@ SYNDICATE UPLINK
if (src.uses >= 10)
uses -= 10
new /obj/item/toy/syndicateballoon(get_turf(src))
+ if("eraser")
+ if(uses)
+ uses --
+ new /obj/item/weapon/stamperaser(get_turf(hostpda))
else if (href_list["lock"] && src.origradio)
// presto chango, a regular radio again! (reset the freq too...)
shutdown_uplink()
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index e67bc80f549..093e3b113cd 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -181,6 +181,8 @@
if (bodytemperature < 283.222)
tally += (283.222 - bodytemperature) / 10 * 1.75
+ if (shock_stage >= 10) tally += 3
+
return tally
/mob/living/carbon/human/Stat()
@@ -2328,4 +2330,4 @@ It can still be worn/put on as normal.
/mob/living/carbon/human/Paralyse(amount)
if(mutations & HULK)
return
- ..()
+ ..()
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 15adc1d1cae..59127f887c5 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -21,6 +21,9 @@
var/datum/gas_mixture/environment = loc.return_air()
+ // clean all symptoms, they must be set again in this cycle
+ src.disease_symptoms = 0
+
if (stat != 2) //still breathing
//First, resolve location and get a breath
@@ -34,6 +37,8 @@
var/obj/location_as_object = loc
location_as_object.handle_internal_lifeform(src, 0)
+ src.handle_shock()
+
//Apparently, the person who wrote this code designed it so that
//blinded get reset each cycle and then get activated later in the
//code. Very ugly. I dont care. Moving this stuff here so its easy
@@ -992,9 +997,6 @@
for(var/datum/disease/D in viruses)
D.cure()
- // clean all the symptoms incurred by the virus
- src.disease_symptoms = 0
-
if(!virus2)
// the following is silly since it lets you infect people through glass
/*for(var/mob/living/carbon/M in oviewers(4,src))
@@ -1058,65 +1060,35 @@
if ((changeling.geneticdamage > 0))
changeling.geneticdamage = changeling.geneticdamage-1
-/*
- // Commented out so hunger system won't be such shock
- // Damage and effect from not eating
- if(nutrition <= 50)
- if (prob (0.1))
- src << "\red Your stomach rumbles."
- if (prob (10))
- bruteloss++
- if (prob (5))
- src << "You feel very weak."
- weakened += rand(2, 3)
-*/
-/*
-snippets
+ handle_shock()
+ ..()
- if (mach)
- if (machine)
- mach.icon_state = "mach1"
+ if(traumatic_shock >= 80)
+ shock_stage += 1
else
- mach.icon_state = null
+ shock_stage--
+ shock_stage = max(shock_stage, 0)
+ return
- if (!m_flag)
- moved_recently = 0
- m_flag = null
+ if (shock_stage > 60)
+ if(shock_stage == 61)
+ for(var/mob/O in viewers(src, null))
+ O.show_message("[src.name]'s body becomes limp.", 1)
+ Stun(20)
+ lying = 1
+ disease_symptoms |= DISEASE_WHISPER
-
-
- if ((istype(loc, /turf/space) && !( locate(/obj/movable, loc) )))
- var/layers = 20
- // ******* Check
- if (((istype(head, /obj/item/clothing/head) && head.flags & 4) || (istype(wear_mask, /obj/item/clothing/mask) && (!( wear_mask.flags & 4 ) && wear_mask.flags & 8))))
- layers -= 5
- if (istype(w_uniform, /obj/item/clothing/under))
- layers -= 5
- if ((istype(wear_suit, /obj/item/clothing/suit) && wear_suit.flags & 8))
- layers -= 10
- if (layers > oxcheck)
- oxcheck = layers
-
-
- if(bodytemperature < 282.591 && (!firemut))
- if(bodytemperature < 250)
- adjustFireLoss(4)
- updatehealth()
- if(paralysis <= 2) paralysis += 2
- else if(prob(1) && !paralysis)
- if(paralysis <= 5) paralysis += 5
- emote("collapse")
- src << "\red You collapse from the cold!"
- if(bodytemperature > 327.444 && (!firemut))
- if(bodytemperature > 345.444)
- if(!eye_blurry) src << "\red The heat blurs your vision!"
- eye_blurry = max(4, eye_blurry)
- if(prob(3)) adjustFireLoss(rand(1,2))
- else if(prob(3) && !paralysis)
- paralysis += 2
- emote("collapse")
- src << "\red You collapse from heat exaustion!"
- plcheck = t_plasma
- oxcheck = t_oxygen
- G.turf_add(T, G.total_moles())
-*/
\ No newline at end of file
+ if (shock_stage > 70) if(shock_stage % 30 == 0)
+ Paralyse(rand(15,28))
+ if(shock_stage >= 30)
+ if(shock_stage == 30) emote("me",1,"is having trouble keeping their eyes open.")
+ eye_blurry = max(2, eye_blurry)
+ stuttering = max(stuttering, 5)
+ bodytemperature = 313.15 // high fever
+ // pain messages
+ if(shock_stage == 10)
+ src << ""+pick("It hurts so much!", "You really need some painkillers..", "Dear god, the pain!")
+ else if(shock_stage == 40)
+ src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!")
+ else if(shock_stage == 80)
+ src << ""+pick("You see a light at the end of the tunnel!", "You feel like you could die any moment now.", "You're about to lose consciousness.")
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/shock.dm b/code/modules/mob/living/carbon/shock.dm
new file mode 100644
index 00000000000..c3539233692
--- /dev/null
+++ b/code/modules/mob/living/carbon/shock.dm
@@ -0,0 +1,18 @@
+/mob/living/carbon/var/traumatic_shock = 0
+/mob/living/carbon/var/shock_stage = 0
+
+// proc to find out in how much pain the mob is at the moment
+/mob/living/carbon/proc/updateshock()
+ src.traumatic_shock = src.getOxyLoss() + src.getToxLoss() + src.getFireLoss() + 1.2*src.getBruteLoss() + 2*src.getCloneLoss()
+ if(reagents.has_reagent("alkysine"))
+ src.traumatic_shock -= 10
+ if(reagents.has_reagent("inaprovaline"))
+ src.traumatic_shock -= 15
+ if(reagents.has_reagent("synaptizine"))
+ src.traumatic_shock -= 50
+
+ return src.traumatic_shock
+
+
+/mob/living/carbon/proc/handle_shock()
+ updateshock()