This commit is contained in:
izac112
2022-05-02 17:50:27 +02:00
11 changed files with 930 additions and 734 deletions
@@ -26,6 +26,13 @@
/obj/item/clothing/head/radiation = 3
)
/datum/supply_pack/eng/dosimeter
contains = list(/obj/item/weapon/storage/box/dosimeter = 6)
name = "Dosimeters"
cost = 10
containertype = /obj/structure/closet/crate
containername = "dosimeter crate"
/datum/supply_pack/eng/algae
contains = list(/obj/item/stack/material/algae/ten)
name = "Algae Sheets (10)"
+22 -9
View File
@@ -1,13 +1,6 @@
// Porting stack dragging/auto stacking from TG.
/obj/item/stack/proc/merge(obj/item/stack/S) //Merge src into S, as much as possible
if(uses_charge || S.uses_charge) // This should realistically never happen, but in case it does lets avoid breaking things.
return
if(S.stacktype != stacktype)
return
if(S.amount >= S.max_amount)
return
var/transfer = get_amount()
transfer = min(transfer, S.max_amount - S.amount)
if(pulledby)
@@ -18,7 +11,27 @@
use(transfer)
S.add(transfer)
/obj/item/stack/proc/can_merge(obj/item/stack/S)
if(uses_charge || S.uses_charge) // This should realistically never happen, but in case it does lets avoid breaking things.
return
if(S.stacktype != stacktype)
return
if(S.amount >= S.max_amount)
return
if(!isturf(loc) || !isturf(S.loc))
return FALSE
if(src == S)
return FALSE
if(ismob(S.loc) || ismob(loc))
return FALSE
if(S.throwing || throwing)
return FALSE
if(S.amount < 1 || amount < 1)
return FALSE
return TRUE
/obj/item/stack/Crossed(var/atom/movable/AM)
if(isturf(AM.loc) && AM != src && istype(AM, src.type) && !AM.throwing)
merge(AM)
if(istype(AM, src.type)) // Sanity so we don't try to merge non-stacks.
if(can_merge(AM))
merge(AM)
return ..()
@@ -117,6 +117,11 @@
..()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/accessory/dosimeter
display_name = "Dosimeter"
path = /obj/item/weapon/storage/box/dosimeter
description = "A small device that will display dangerous levels of radiation."
/*
Talon pin
*/
@@ -0,0 +1,132 @@
/obj/item/clothing/accessory/dosimeter
name = "dosimeter"
desc = "A small device used to measure body radiation and warning one after a certain threshold. \
Read manual before use! Can be held, attached to the uniform or worn around the neck."
w_class = ITEMSIZE_SMALL
icon = 'icons/inventory/accessory/item_vr.dmi'
icon_override = 'icons/inventory/accessory/item_vr.dmi'
icon_state = "dosimeter"
item_state = "dosimeter"
overlay_state = "dosimeter"
slot_flags = SLOT_TIE
var/obj/item/weapon/dosimeter_film/current_film = null
/obj/item/clothing/accessory/dosimeter/New()
..()
current_film = new /obj/item/weapon/dosimeter_film(src)
update_state(current_film.state)
START_PROCESSING(SSobj, src)
/obj/item/clothing/accessory/dosimeter/Destroy()
return ..()
/obj/item/clothing/accessory/dosimeter/process()
check_holder()
if(current_film.state > 1)
STOP_PROCESSING(SSobj, src)
/obj/item/clothing/accessory/dosimeter/attack_hand(mob/user as mob)
if(user.get_inactive_hand() == src)
if(current_film)
user.put_in_hands(current_film)
current_film = null
to_chat(user, "<span class='notice'>You pulled out the film out of \the [src].</span>")
desc = "This seems like a dosimeter, but there is no film inside."
STOP_PROCESSING(SSobj, src)
update_state(0)
return
..()
else
return ..()
/obj/item/clothing/accessory/dosimeter/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/weapon/dosimeter_film))
if(!current_film)
user.drop_item()
I.loc = src
current_film = I
update_state(current_film.state)
to_chat(user, "<span class='notice'>You inserted the film into \the [src].</span>")
desc = "This seems like a dosimeter. It has a film inside."
if(current_film.state < 2)
START_PROCESSING(SSobj, src)
else
to_chat(user, "<span class='notice'>\The [src] already has a film inside.</span>")
else
return ..()
/obj/item/clothing/accessory/dosimeter/proc/check_holder()
if(wearer)
if(current_film && (wearer.radiation >= 25) && (current_film.state == 0))
update_state(1)
visible_message("<span class='warning'>The film of \the [src] starts to darken.</span>")
desc = "This seems like a dosimeter, but the film has darkened."
sleep(30)
else if(current_film && (wearer.radiation >= 50) && (current_film.state == 1))
visible_message("<span class='warning'>The film of \the [src] has turned black!</span>")
update_state(2)
desc = "This seems like a dosimeter, but the film has turned black."
/obj/item/clothing/accessory/dosimeter/proc/update_state(var/tostate)
if(current_film)
current_film.state = tostate
icon_state = "[initial(icon_state)][tostate]"
current_film.icon_state = "dosimeter_film[tostate]"
else
icon_state = "[initial(icon_state)]-empty"
update_icon()
/obj/item/weapon/dosimeter_film
name = "dosimeter film"
desc = "These films can be inserted into dosimeters. It turns from white to black, depending on how much radiation it endured."
w_class = ITEMSIZE_SMALL
icon = 'icons/inventory/accessory/item_vr.dmi'
icon_override = 'icons/inventory/accessory/item_vr.dmi'
icon_state = "dosimeter_film0"
var/state = 0 //0 - White, 1 - Darker, 2 - Black (same as iconstates)
/obj/item/weapon/dosimeter_film/proc/update_state(var/tostate)
icon_state = tostate
update_icon()
/obj/item/weapon/paper/dosimeter_manual
name = "Dosimeter manual"
info = {"<h4>Dosimeter</h4>
<h5>Usage</h5>
<ol>
<li>Insert film into dosimeter.</li>
<li>Attach dosimeter to clothing or carry it.</li>
<li>Replace film if current film turned black.</li>
</ol>
<br />
<h5>Purpose</h5>
<p>This device will let you know about any dangerous radiation levels, that your body is exposed to.
A white film indicates that everything is alright. A darker film indicates, that the radiation level is starting to get dangerous for your body.
The body has absorbed too much radiation if the film turned black.</p>"}
/obj/item/weapon/storage/box/dosimeter
name = "dosimeter case"
desc = "This case can only hold the Dosimeter, a few films and a manual."
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
storage_slots = 5
can_hold = list(/obj/item/weapon/paper/dosimeter_manual, /obj/item/clothing/accessory/dosimeter, /obj/item/weapon/dosimeter_film)
max_storage_space = (ITEMSIZE_COST_SMALL * 2) + (ITEMSIZE_COST_TINY * 3)
w_class = ITEMSIZE_SMALL
/obj/item/weapon/storage/box/dosimeter/New()
..()
new /obj/item/weapon/paper/dosimeter_manual(src)
new /obj/item/clothing/accessory/dosimeter(src)
new /obj/item/weapon/dosimeter_film(src)
new /obj/item/weapon/dosimeter_film(src)
new /obj/item/weapon/dosimeter_film(src)
+6 -2
View File
@@ -80,11 +80,15 @@
/mob/living/verb/succumb()
set hidden = 1
if ((src.health < 0 && src.health > (5-src.getMaxHealth()))) // Health below Zero but above 5-away-from-death, as before, but variable
// if ((src.health < 0 && src.health > (5-src.getMaxHealth()))) // Health below Zero but above 5-away-from-death, as before, but variable
if (src.health < 0 && stat != DEAD)
src.death()
to_chat(src, "<font color='blue'>You have given up life and succumbed to death.</font>")
else
to_chat(src, "<font color='blue'>You are not injured enough to succumb to death!</font>")
if(stat == DEAD)
to_chat(src, "<font color='blue'>As much as you'd like, you can't die when already dead</font>")
else
to_chat(src, "<font color='blue'>You are not injured enough to succumb to death!</font>")
/mob/living/proc/updatehealth()
if(status_flags & GODMODE)
@@ -124,7 +124,19 @@ GLOBAL_LIST_INIT(digest_modes, list())
var/oldstat = L.stat
if(L.stat == DEAD)
return null // Can't heal the dead with healbelly
if(B.owner.nutrition > 90 && (L.health < L.maxHealth))
var/mob/living/carbon/human/H = L
if(B.owner.nutrition > 90 && H.isSynthetic())
for(var/obj/item/organ/external/E in H.organs) //Needed for healing prosthetics
var/obj/item/organ/external/O = E
if(O.brute_dam > 0 || O.burn_dam > 0) //Making sure healing continues until fixed.
O.heal_damage(0.5, 0.5, 0, 1) // Less effective healing as able to fix broken limbs
B.owner.adjust_nutrition(-5) // More costly for the pred, since metals and stuff
if(L.health < L.maxHealth)
L.adjustToxLoss(-2)
L.adjustOxyLoss(-2)
L.adjustCloneLoss(-1)
B.owner.adjust_nutrition(-1) // Normal cost per old functionality
if(B.owner.nutrition > 90 && (L.health < L.maxHealth) && !H.isSynthetic())
L.adjustBruteLoss(-2.5)
L.adjustFireLoss(-2.5)
L.adjustToxLoss(-5)
Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 13 KiB

+619 -686
View File
File diff suppressed because it is too large Load Diff
+124 -36
View File
@@ -1093,6 +1093,9 @@
/obj/structure/table/woodentable,
/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater,
/obj/item/weapon/nullrod,
/obj/structure/noticeboard{
pixel_y = 32
},
/turf/simulated/floor/lino,
/area/groundbase/civilian/chapel/office)
"dg" = (
@@ -1138,8 +1141,8 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 5
},
/obj/machinery/camera/network/medbay{
dir = 4
/obj/structure/noticeboard{
pixel_x = -32
},
/turf/simulated/floor/tiled/white,
/area/groundbase/medical/Chemistry)
@@ -1208,6 +1211,9 @@
/obj/item/device/multitool,
/obj/fiftyspawner/steel,
/obj/item/weapon/storage/belt/utility,
/obj/machinery/alarm{
dir = 4
},
/turf/simulated/floor/tiled,
/area/groundbase/cargo/office)
"dx" = (
@@ -3926,7 +3932,9 @@
/turf/simulated/floor/tiled/dark,
/area/groundbase/civilian/bar/upper)
"lv" = (
/obj/structure/closet/secure_closet/hydroponics,
/obj/structure/closet/secure_closet/hydroponics{
req_access = list(77)
},
/obj/machinery/light{
dir = 8
},
@@ -5174,6 +5182,24 @@
},
/turf/simulated/floor/tiled/dark,
/area/groundbase/command/meeting)
"po" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
},
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
/obj/structure/noticeboard{
pixel_y = -32
},
/turf/simulated/floor/tiled/white,
/area/groundbase/medical/triage)
"pp" = (
/obj/machinery/light,
/turf/simulated/floor/tiled/dark,
@@ -5721,6 +5747,9 @@
/area/groundbase/science/xenobot)
"qQ" = (
/obj/structure/table/standard,
/obj/structure/noticeboard{
pixel_y = -32
},
/turf/simulated/floor/tiled/eris/cafe,
/area/groundbase/civilian/kitchen)
"qS" = (
@@ -6189,6 +6218,12 @@
/obj/random/slimecore,
/turf/simulated/floor/reinforced,
/area/rnd/xenobiology)
"sh" = (
/obj/structure/table/glass,
/obj/item/weapon/storage/box/gloves,
/obj/item/weapon/storage/box/masks,
/turf/simulated/floor/tiled/white,
/area/groundbase/medical/triage)
"si" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 8
@@ -7065,6 +7100,9 @@
/obj/structure/closet/l3closet/scientist,
/obj/item/clothing/suit/bio_suit/scientist,
/obj/item/clothing/head/bio_hood/scientist,
/obj/structure/noticeboard{
pixel_x = 32
},
/turf/simulated/floor/tiled,
/area/rnd/xenobiology)
"uO" = (
@@ -7617,9 +7655,8 @@
/obj/machinery/door/firedoor/glass,
/obj/structure/table/reinforced,
/obj/machinery/door/window/brigdoor/westright{
name = "Research Desk";
req_access = list(47,55);
req_one_access = null
name = "Xenobotany Desk";
req_access = list(77)
},
/turf/simulated/floor/virgo3c{
edge_blending_priority = -1
@@ -7797,6 +7834,12 @@
},
/turf/simulated/floor/tiled/white,
/area/groundbase/medical/triage)
"xf" = (
/obj/structure/noticeboard{
pixel_y = -32
},
/turf/simulated/floor/tiled/white,
/area/medical/virology)
"xg" = (
/obj/structure/filingcabinet/medical,
/obj/machinery/alarm,
@@ -8016,10 +8059,12 @@
/obj/structure/cable/yellow{
icon_state = "4-8"
},
/obj/machinery/alarm,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
/obj/structure/noticeboard{
pixel_y = 32
},
/turf/simulated/floor/tiled,
/area/groundbase/cargo/office)
"xM" = (
@@ -8465,6 +8510,9 @@
/obj/machinery/chemical_dispenser/bar_soft/full{
dir = 8
},
/obj/structure/noticeboard{
pixel_y = -32
},
/turf/simulated/floor/lino{
edge_blending_priority = 0.1
},
@@ -9553,10 +9601,6 @@
},
/turf/simulated/floor/tiled/dark,
/area/groundbase/civilian/bar/upper)
"Ci" = (
/obj/structure/closet/secure_closet/hydroponics/sci,
/turf/simulated/floor/tiled,
/area/groundbase/science/xenobot)
"Cj" = (
/obj/structure/sign/directions/stairs_down{
pixel_y = 38
@@ -9910,6 +9954,9 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
/obj/structure/noticeboard{
pixel_x = 32
},
/turf/simulated/floor/tiled,
/area/groundbase/science/rnd)
"Dn" = (
@@ -13442,6 +13489,9 @@
dir = 8;
pixel_y = -4
},
/obj/structure/noticeboard{
pixel_x = 32
},
/turf/simulated/floor/tiled/dark,
/area/groundbase/command/bridge)
"Nb" = (
@@ -13879,6 +13929,12 @@
},
/turf/simulated/floor/wood,
/area/groundbase/cargo/qm)
"Ol" = (
/obj/structure/noticeboard{
pixel_y = -32
},
/turf/simulated/floor/wood,
/area/groundbase/civilian/library)
"Om" = (
/obj/machinery/alarm{
dir = 4
@@ -15215,6 +15271,12 @@
},
/turf/simulated/wall,
/area/groundbase/cargo/office)
"RY" = (
/obj/structure/noticeboard{
pixel_x = -32
},
/turf/simulated/floor/tiled,
/area/groundbase/science/xenobot)
"Sa" = (
/obj/machinery/embedded_controller/radio/airlock/access_controller{
dir = 8;
@@ -16070,6 +16132,12 @@
},
/turf/simulated/floor/wood,
/area/groundbase/dorms/room8)
"UA" = (
/obj/structure/table/glass,
/obj/machinery/recharger,
/obj/item/device/defib_kit/loaded,
/turf/simulated/floor/tiled/white,
/area/groundbase/medical/triage)
"UB" = (
/obj/machinery/hologram/holopad,
/turf/simulated/floor/tiled,
@@ -16440,6 +16508,18 @@
/obj/structure/cable/yellow{
icon_state = "0-8"
},
/obj/item/roller{
pixel_y = -6
},
/obj/item/roller{
pixel_y = -2
},
/obj/item/roller{
pixel_y = 2
},
/obj/item/roller{
pixel_y = 6
},
/turf/simulated/floor/tiled/white,
/area/groundbase/medical/lobby)
"VE" = (
@@ -17497,6 +17577,12 @@
},
/turf/simulated/floor/tiled/eris/cafe,
/area/groundbase/civilian/kitchen)
"YV" = (
/obj/structure/noticeboard{
pixel_x = 32
},
/turf/simulated/floor/tiled/dark,
/area/groundbase/command/meeting)
"YW" = (
/obj/structure/fence/corner{
dir = 5
@@ -17628,7 +17714,9 @@
/turf/simulated/floor/tiled/dark,
/area/groundbase/command/meeting)
"Zr" = (
/obj/structure/closet/secure_closet/hydroponics,
/obj/structure/closet/secure_closet/hydroponics{
req_access = list(77)
},
/turf/simulated/floor/tiled,
/area/groundbase/science/xenobot)
"Zs" = (
@@ -21083,13 +21171,13 @@ IE
BR
BR
nV
BR
RY
qP
IE
BR
BR
kq
Ci
yU
lv
eT
Zr
@@ -21234,7 +21322,7 @@ Qg
PX
PX
IJ
Ci
yU
lV
LE
DD
@@ -23142,7 +23230,7 @@ zi
WA
XR
MY
MY
Ol
rP
xE
xq
@@ -28135,8 +28223,8 @@ VR
VR
VR
to
VR
VR
OI
OI
to
to
to
@@ -29835,7 +29923,7 @@ wa
Xw
Du
Wx
GN
po
fy
pC
jI
@@ -30132,7 +30220,7 @@ to
to
to
to
oH
QD
oH
oH
oH
@@ -30274,7 +30362,7 @@ to
to
to
to
oH
QD
oH
oH
oH
@@ -30416,7 +30504,7 @@ to
to
to
to
oH
QD
oH
oH
oH
@@ -30558,7 +30646,7 @@ to
to
to
to
oH
QD
oH
oH
oH
@@ -30700,7 +30788,7 @@ to
iw
to
to
oH
QD
oH
oH
oH
@@ -30841,8 +30929,8 @@ to
iw
to
to
oH
oH
QD
QD
oH
oH
oH
@@ -30977,14 +31065,14 @@ xG
ID
ko
nR
nR
UA
cR
to
iw
to
to
oH
oH
QD
QD
oH
oH
oH
@@ -31119,14 +31207,14 @@ DM
ID
rs
nR
nR
sh
cR
to
iw
to
to
oH
oH
QD
QD
oH
oH
oH
@@ -31267,8 +31355,8 @@ to
iw
iw
to
oH
oH
QD
QD
oH
oH
oH
@@ -33281,7 +33369,7 @@ iX
gU
ds
zZ
gE
YV
Se
an
Bo
@@ -35821,7 +35909,7 @@ OH
cG
Qr
cG
cG
xf
pe
fk
UH
+1
View File
@@ -9,6 +9,7 @@
#include "..\tether\tether_jobs.dm"
#include "groundbase_poi_stuff.dm"
#include "gb-wilds.dm"
#include "..\~map_system\maps_vr.dm"
#if !AWAY_MISSION_TEST //Don't include these for just testing away missions
#include "gb-z1.dmm"
+1
View File
@@ -2158,6 +2158,7 @@
#include "code\modules\clothing\under\accessories\armband.dm"
#include "code\modules\clothing\under\accessories\armor.dm"
#include "code\modules\clothing\under\accessories\badges.dm"
#include "code\modules\clothing\under\accessories\badges_vr.dm"
#include "code\modules\clothing\under\accessories\clothing.dm"
#include "code\modules\clothing\under\accessories\holster.dm"
#include "code\modules\clothing\under\accessories\holster_vr.dm"