diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index 87077b68db0..34e89ac6fd0 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -103,13 +103,6 @@
R.adjustFireLoss(-wire_rate)
else if(ishuman(occupant))
var/mob/living/carbon/human/H = occupant
- if(!isnull(H.internal_organs_by_name["cell"]) && H.nutrition < 450)
- H.nutrition = min(H.nutrition+10, 450)
- cell.use(7000/450*10)
-
- else if(istype(occupant, /mob/living/carbon/human))
-
- var/mob/living/carbon/human/H = occupant
// In case they somehow end up with positive values for otherwise unobtainable damage...
if(H.getToxLoss()>0) H.adjustToxLoss(-(rand(1,3)))
@@ -153,9 +146,21 @@
return
if(default_part_replacement(user, O))
return
+ if (istype(O, /obj/item/weapon/grab) && get_dist(src,user)<2)
+ var/obj/item/weapon/grab/G = O
+ if(istype(G.affecting,/mob/living))
+ var/mob/living/M = G.affecting
+ qdel(O)
+ go_in(M)
..()
+/obj/machinery/recharge_station/MouseDrop_T(var/mob/target, var/mob/user)
+ if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user))
+ return
+
+ go_in(target)
+
/obj/machinery/recharge_station/RefreshParts()
..()
var/man_rating = 0
@@ -214,15 +219,16 @@
if(icon_update_tick == 0)
build_overlays()
-/obj/machinery/recharge_station/Bumped(var/mob/living/silicon/robot/R)
- go_in(R)
+/obj/machinery/recharge_station/Bumped(var/mob/living/L)
+ go_in(L)
-/obj/machinery/recharge_station/proc/go_in(var/mob/living/silicon/robot/R)
+/obj/machinery/recharge_station/proc/go_in(var/mob/living/L)
if(occupant)
return
- if(istype(R, /mob/living/silicon/robot))
+ if(istype(L, /mob/living/silicon/robot))
+ var/mob/living/silicon/robot/R = L
if(R.incapacitated())
return
@@ -237,8 +243,8 @@
update_icon()
return 1
- else if(istype(R, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = R
+ else if(istype(L, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = L
if(!isnull(H.internal_organs_by_name["cell"]))
add_fingerprint(H)
H.reset_view(src)
diff --git a/code/game/objects/items/devices/defib.dm b/code/game/objects/items/devices/defib.dm
index 0bbda3efd59..847ce58560a 100644
--- a/code/game/objects/items/devices/defib.dm
+++ b/code/game/objects/items/devices/defib.dm
@@ -284,7 +284,12 @@
return "buzzes, \"Resuscitation failed - Excessive neural degeneration. Further attempts futile.\""
H.updatehealth()
- if(H.health + H.getOxyLoss() <= config.health_threshold_dead || (HUSK in H.mutations) || (!H.isSynthetic() && !H.can_defib))
+
+ if(H.isSynthetic())
+ if(H.health + H.getOxyLoss() + H.getToxLoss() <= config.health_threshold_dead)
+ return "buzzes, \"Resuscitation failed - Severe damage detected. Begin manual repair before further attempts futile.\""
+
+ else if(H.health + H.getOxyLoss() <= config.health_threshold_dead || (HUSK in H.mutations) || !H.can_defib)
return "buzzes, \"Resuscitation failed - Severe tissue damage makes recovery of patient impossible via defibrillator. Further attempts futile.\""
var/bad_vital_organ = check_vital_organs(H)
@@ -423,6 +428,9 @@
var/adjust_health = barely_in_crit - H.health //need to increase health by this much
H.adjustOxyLoss(-adjust_health)
+ if(H.isSynthetic())
+ H.adjustToxLoss(-H.getToxLoss())
+
make_announcement("pings, \"Resuscitation successful.\"", "notice")
playsound(get_turf(src), 'sound/machines/defib_success.ogg', 50, 0)
@@ -645,7 +653,8 @@
name = "jumper cable kit"
desc = "A device that delivers powerful shocks to detachable jumper cables that are capable of reviving full body prosthetics."
icon_state = "jumperunit"
- item_state = "jumperunit"
+ item_state = "defibunit"
+// item_state = "jumperunit"
paddles = /obj/item/weapon/shockpaddles/linked/jumper
/obj/item/device/defib_kit/jumper_kit/loaded
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index 28bf5300cc2..45532aa1d48 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -283,19 +283,19 @@
..()
/mob/living/carbon/human/getToxLoss()
- if((species.flags & NO_POISON) || isSynthetic())
+ if(species.flags & NO_POISON)
toxloss = 0
return ..()
/mob/living/carbon/human/adjustToxLoss(var/amount)
- if((species.flags & NO_POISON) || isSynthetic())
+ if(species.flags & NO_POISON)
toxloss = 0
else
amount = amount*species.toxins_mod
..(amount)
/mob/living/carbon/human/setToxLoss(var/amount)
- if((species.flags & NO_POISON) || isSynthetic())
+ if(species.flags & NO_POISON)
toxloss = 0
else
..()
diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm
index 93ed52f24cf..a187436af89 100644
--- a/code/modules/mob/living/carbon/human/human_powers.dm
+++ b/code/modules/mob/living/carbon/human/human_powers.dm
@@ -165,6 +165,12 @@
output += "Current Battery Charge: [nutrition]\n"
+ var/toxDam = getToxLoss()
+ if(toxDam)
+ output += "System Instability: [toxDam > 25 ? "Severe" : "Moderate"]\n"
+ else
+ output += "System Instability: OK\n"
+
for(var/obj/item/organ/external/EO in organs)
if(EO.brute_dam || EO.burn_dam)
output += "[EO.name] - [EO.burn_dam + EO.brute_dam > ROBOLIMB_REPAIR_CAP ? "Heavy Damage" : "Light Damage"]\n"
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 737a6ec7ed5..684978e07de 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -226,7 +226,7 @@
if(gene.is_active(src))
gene.OnMobLife(src)
- radiation = Clamp(radiation,0,100)
+ radiation = Clamp(radiation,0,250)
if(!radiation)
if(species.appearance_flags & RADIATION_GLOWS)
@@ -285,8 +285,12 @@
adjustCloneLoss(5 * RADIATION_SPEED_COEFFICIENT)
emote("gasp")
+ if (radiation > 150)
+ damage = 6
+ radiation -= 4 * RADIATION_SPEED_COEFFICIENT
+
if(damage)
- damage *= isSynthetic() ? 0.5 : species.radiation_mod
+ damage *= species.radiation_mod
adjustToxLoss(damage * RADIATION_SPEED_COEFFICIENT)
updatehealth()
if(!isSynthetic() && organs.len)
@@ -1375,9 +1379,15 @@
// Puke if toxloss is too high
if(!stat)
+ if (getToxLoss() >= 30 && isSynthetic())
+ if(!confused)
+ if(prob(5))
+ to_chat(src, "You lose directional control!")
+ Confuse(10)
if (getToxLoss() >= 45)
spawn vomit()
+
//0.1% chance of playing a scary sound to someone who's in complete darkness
if(isturf(loc) && rand(1,1000) == 1)
var/turf/T = loc
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 9c224d0610d..0a149f0d994 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -58,12 +58,12 @@ default behaviour is:
for(var/mob/living/M in range(tmob, 1))
if(tmob.pinned.len || ((M.pulling == tmob && ( tmob.restrained() && !( M.restrained() ) && M.stat == 0)) || locate(/obj/item/weapon/grab, tmob.grabbed_by.len)) )
if ( !(world.time % 5) )
- src << "[tmob] is restrained, you cannot push past"
+ to_chat(src, "[tmob] is restrained, you cannot push past")
now_pushing = 0
return
if( tmob.pulling == M && ( M.restrained() && !( tmob.restrained() ) && tmob.stat == 0) )
if ( !(world.time % 5) )
- src << "[tmob] is restraining [M], you cannot push past"
+ to_chat(src, "[tmob] is restraining [M], you cannot push past")
now_pushing = 0
return
@@ -103,7 +103,7 @@ default behaviour is:
return
if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations))
if(prob(40) && !(FAT in src.mutations))
- src << "You fail to push [tmob]'s fat ass out of the way."
+ to_chat(src, "You fail to push [tmob]'s fat ass out of the way.")
now_pushing = 0
return
if(tmob.r_hand && istype(tmob.r_hand, /obj/item/weapon/shield/riot))
@@ -129,7 +129,7 @@ default behaviour is:
playsound(loc, "punch", 25, 1, -1)
visible_message("[src] [pick("ran", "slammed")] into \the [AM]!")
src.apply_damage(5, BRUTE)
- src << ("You just [pick("ran", "slammed")] into \the [AM]!")
+ to_chat(src, "You just [pick("ran", "slammed")] into \the [AM]!")
return
if (!now_pushing)
if(isobj(AM))
@@ -157,7 +157,7 @@ default behaviour is:
if ((src.health < 0 && src.health > (5-src.getMaxHealth()))) // Health below Zero but above 5-away-from-death, as before, but variable
src.adjustOxyLoss(src.health + src.getMaxHealth() * 2) // Deal 2x health in OxyLoss damage, as before but variable.
src.health = src.getMaxHealth() - src.getOxyLoss() - src.getToxLoss() - src.getFireLoss() - src.getBruteLoss()
- src << "You have given up life and succumbed to death."
+ to_chat(src, "You have given up life and succumbed to death.")
/mob/living/proc/updatehealth()
@@ -644,11 +644,11 @@ default behaviour is:
if(config.allow_Metadata)
if(client)
- usr << "[src]'s Metainfo:
[client.prefs.metadata]"
+ to_chat(usr, "[src]'s Metainfo:
[client.prefs.metadata]")
else
- usr << "[src] does not have any stored infomation!"
+ to_chat(usr, "[src] does not have any stored infomation!")
else
- usr << "OOC Metadata is not supported by this server!"
+ to_chat(usr, "OOC Metadata is not supported by this server!")
return
@@ -795,8 +795,8 @@ default behaviour is:
if(istype(M))
M.drop_from_inventory(H)
- M << "\The [H] wriggles out of your grip!"
- src << "You wriggle out of \the [M]'s grip!"
+ to_chat(M, "\The [H] wriggles out of your grip!")
+ to_chat(src, "You wriggle out of \the [M]'s grip!")
// Update whether or not this mob needs to pass emotes to contents.
for(var/atom/A in M.contents)
@@ -808,10 +808,10 @@ default behaviour is:
var/obj/item/clothing/accessory/holster/holster = H.loc
if(holster.holstered == H)
holster.clear_holster()
- src << "You extricate yourself from \the [holster]."
+ to_chat(src, "You extricate yourself from \the [holster].")
H.forceMove(get_turf(H))
else if(istype(H.loc,/obj/item))
- src << "You struggle free of \the [H.loc]."
+ to_chat(src, "You struggle free of \the [H.loc].")
H.forceMove(get_turf(H))
/mob/living/proc/escape_buckle()
@@ -831,7 +831,7 @@ default behaviour is:
set category = "IC"
resting = !resting
- src << "You are now [resting ? "resting" : "getting up"]"
+ to_chat(src, "You are now [resting ? "resting" : "getting up"]")
/mob/living/proc/cannot_use_vents()
if(mob_size > MOB_SMALL)
@@ -867,7 +867,7 @@ default behaviour is:
inertia_dir = 1
else if(y >= world.maxy -TRANSITIONEDGE)
inertia_dir = 2
- src << "Something you are carrying is preventing you from leaving."
+ to_chat(src, "Something you are carrying is preventing you from leaving.")
return
..()
@@ -885,54 +885,52 @@ default behaviour is:
ear_deaf = deaf
/mob/living/proc/vomit(var/skip_wait, var/blood_vomit)
-
- if(isSynthetic())
- src << "A sudden, dizzying wave of internal feedback rushes over you!"
- src.Weaken(5)
- return
-
if(!check_has_mouth())
return
if(!lastpuke)
lastpuke = 1
- if (nutrition <= 100)
- src << "You gag as you want to throw up, but there's nothing in your stomach!"
- src.Weaken(10)
+ if(isSynthetic())
+ to_chat(src, "A sudden, dizzying wave of internal feedback rushes over you!")
+ src.Weaken(5)
else
- src << "You feel nauseous..."
-
- if(!skip_wait)
- sleep(150) //15 seconds until second warning
- src << "You feel like you are about to throw up!"
- sleep(100) //and you have 10 more for mad dash to the bucket
-
- //Damaged livers cause you to vomit blood.
- if(!blood_vomit)
- if(ishuman(src))
- var/mob/living/carbon/human/H = src
- if(!H.isSynthetic())
- var/obj/item/organ/internal/liver/L = H.internal_organs_by_name["liver"]
- if(L.is_broken())
- blood_vomit = 1
-
- Stun(5)
- src.visible_message("[src] throws up!","You throw up!")
- playsound(loc, 'sound/effects/splat.ogg', 50, 1)
-
- var/turf/simulated/T = get_turf(src) //TODO: Make add_blood_floor remove blood from human mobs
- if(istype(T))
- if(blood_vomit)
- T.add_blood_floor(src)
- else
- T.add_vomit_floor(src, 1)
-
- if(blood_vomit)
- if(getBruteLoss() < 50)
- adjustBruteLoss(3)
+ if (nutrition <= 100)
+ to_chat(src, "You gag as you want to throw up, but there's nothing in your stomach!")
+ src.Weaken(10)
else
- nutrition -= 40
- adjustToxLoss(-3)
+ to_chat(src, "You feel nauseous...")
+
+ if(!skip_wait)
+ sleep(150) //15 seconds until second warning
+ to_chat(src, "You feel like you are about to throw up!")
+ sleep(100) //and you have 10 more for mad dash to the bucket
+
+ //Damaged livers cause you to vomit blood.
+ if(!blood_vomit)
+ if(ishuman(src))
+ var/mob/living/carbon/human/H = src
+ if(!H.isSynthetic())
+ var/obj/item/organ/internal/liver/L = H.internal_organs_by_name["liver"]
+ if(L.is_broken())
+ blood_vomit = 1
+
+ Stun(5)
+ src.visible_message("[src] throws up!","You throw up!")
+ playsound(loc, 'sound/effects/splat.ogg', 50, 1)
+
+ var/turf/simulated/T = get_turf(src) //TODO: Make add_blood_floor remove blood from human mobs
+ if(istype(T))
+ if(blood_vomit)
+ T.add_blood_floor(src)
+ else
+ T.add_vomit_floor(src, 1)
+
+ if(blood_vomit)
+ if(getBruteLoss() < 50)
+ adjustBruteLoss(3)
+ else
+ nutrition -= 40
+ adjustToxLoss(-3)
sleep(350)
lastpuke = 0
diff --git a/html/changelogs/Anewbe-Radiation.yml b/html/changelogs/Anewbe-Radiation.yml
new file mode 100644
index 00000000000..40144af4e54
--- /dev/null
+++ b/html/changelogs/Anewbe-Radiation.yml
@@ -0,0 +1,38 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Anewbe
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "FBPs are now affected by Radiation, it gives them ToxLoss. Wear your PPE."
+ - rscadd: "FBPs can have ToxLoss decreased by going into a charger."
+ - rscadd: "It is now possible to move FBPs and robots into chargers, via click+drag or grabs."