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."