SmArtKar
2020-08-15 12:57:29 +03:00
43 changed files with 384 additions and 397 deletions
+15 -23
View File
@@ -9475,14 +9475,8 @@
/obj/structure/sign/warning/nosmoking{
pixel_y = 30
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
/turf/open/floor/plasteel/white,
/area/janitor)
/turf/open/floor/plasteel/dark,
/area/medical/sleeper)
"asN" = (
/obj/machinery/airalarm{
dir = 4;
@@ -9567,20 +9561,10 @@
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
"asY" = (
/obj/structure/table,
/obj/item/crowbar,
/obj/item/clothing/neck/stethoscope,
/obj/item/reagent_containers/spray/cleaner,
/obj/structure/sign/warning/nosmoking{
pixel_y = 30
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/effect/turf_decal/tile/yellow{
dir = 4
},
/turf/open/floor/plasteel/white,
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"ata" = (
/turf/open/floor/wood,
@@ -56039,6 +56023,10 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/theatre)
"kEm" = (
/mob/living/simple_animal/opossum/poppy,
/turf/open/floor/plating,
/area/maintenance/port/aft)
"kEY" = (
/obj/effect/landmark/stationroom/box/engine,
/turf/open/space/basic,
@@ -58166,6 +58154,10 @@
/obj/effect/decal/cleanable/blood/old,
/turf/open/floor/plating,
/area/maintenance/fore)
"rtU" = (
/mob/living/simple_animal/opossum,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"ruo" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -85350,7 +85342,7 @@ bVI
bTA
xgk
bHE
bHE
kEm
bHE
bHE
bHE
@@ -91231,7 +91223,7 @@ bqH
aJq
aJq
gnf
asM
bCv
bDJ
bCt
bGD
@@ -95597,7 +95589,7 @@ bEe
bhh
bBL
bvj
bAl
asM
bAl
bvh
bzS
@@ -104295,7 +104287,7 @@ anf
anf
alP
alP
anf
rtU
alP
alP
alP
+3 -3
View File
@@ -242,13 +242,13 @@
pixel_x = 22
},
/obj/structure/rack,
/obj/item/gun/energy{
/obj/item/gun/energy/e_gun{
pixel_y = -6
},
/obj/item/gun/energy{
/obj/item/gun/energy/e_gun{
pixel_y = -3
},
/obj/item/gun/energy,
/obj/item/gun/energy/e_gun,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/security/armory)
"aaI" = (
+13 -2
View File
@@ -126384,6 +126384,13 @@
},
/turf/open/space,
/area/engine/atmos)
"kqo" = (
/obj/structure/cable/white{
icon_state = "4-8"
},
/mob/living/simple_animal/opossum,
/turf/open/floor/plating,
/area/maintenance/port/fore)
"ktK" = (
/obj/effect/turf_decal/tile/neutral{
dir = 4
@@ -127042,6 +127049,10 @@
dir = 1
},
/area/science/circuit)
"pok" = (
/mob/living/simple_animal/opossum/poppy,
/turf/open/floor/plasteel/grimy,
/area/crew_quarters/theatre/abandoned)
"poI" = (
/obj/structure/bed,
/obj/item/tank/internals/anesthetic,
@@ -164027,7 +164038,7 @@ aof
aky
aky
aky
arD
kqo
asZ
aui
avF
@@ -178786,7 +178797,7 @@ dCX
dEj
dFq
dGJ
dGJ
pok
dJy
dGJ
dGJ
+7 -1
View File
@@ -78498,6 +78498,7 @@
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/mob/living/simple_animal/opossum/poppy,
/turf/open/floor/plating{
icon_state = "platingdmg3"
},
@@ -84902,6 +84903,11 @@
/obj/machinery/light,
/turf/open/floor/plating/airless,
/area/hallway/secondary/entry)
"jGN" = (
/obj/effect/decal/cleanable/dirt,
/mob/living/simple_animal/opossum,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
"jHJ" = (
/obj/machinery/atmospherics/pipe/simple/general/visible{
dir = 9
@@ -125028,7 +125034,7 @@ bAP
bCf
bhQ
bhQ
bAM
jGN
bGH
bOc
bHZ
+11 -2
View File
@@ -80285,6 +80285,11 @@
},
/turf/open/space/basic,
/area/engine/engineering)
"eCO" = (
/obj/effect/decal/cleanable/dirt,
/mob/living/simple_animal/opossum/poppy,
/turf/open/floor/plasteel/dark,
/area/maintenance/starboard/aft)
"eDP" = (
/obj/effect/turf_decal/trimline/blue/filled/corner{
dir = 8
@@ -82038,6 +82043,10 @@
},
/turf/open/floor/plasteel/cafeteria,
/area/crew_quarters/kitchen)
"vDO" = (
/mob/living/simple_animal/opossum,
/turf/open/floor/plating,
/area/maintenance/fore)
"vDW" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -107578,7 +107587,7 @@ aaA
abY
ayy
acw
acw
vDO
acw
acw
aeG
@@ -135197,7 +135206,7 @@ bPp
ccJ
clR
bQh
clN
eCO
bPp
bQh
bYx
+12 -1
View File
@@ -10324,6 +10324,7 @@
/turf/open/floor/carpet,
/area/crew_quarters/dorms)
"atd" = (
/mob/living/simple_animal/opossum,
/turf/open/floor/plating{
icon_state = "panelscorched"
},
@@ -82149,6 +82150,16 @@
/obj/structure/grille,
/turf/open/floor/plating,
/area/maintenance/port/aft)
"pbc" = (
/obj/structure/light_construct/small{
dir = 4
},
/obj/machinery/computer/security/telescreen/entertainment{
pixel_x = 30
},
/mob/living/simple_animal/opossum/poppy,
/turf/open/floor/wood,
/area/maintenance/port/aft)
"pbF" = (
/obj/machinery/portable_atmospherics/canister,
/obj/machinery/atmospherics/components/unary/portables_connector/visible{
@@ -100175,7 +100186,7 @@ csT
dux
cxQ
ckS
cmi
pbc
cnk
ckP
cmi
+16 -2
View File
@@ -41988,6 +41988,16 @@
},
/turf/open/floor/plasteel,
/area/hydroponics)
"saI" = (
/obj/structure/cable/white{
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/mob/living/simple_animal/opossum,
/turf/open/floor/plating,
/area/maintenance/starboard)
"scn" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -45205,6 +45215,10 @@
/obj/effect/landmark/carpspawn,
/turf/open/space,
/area/space/station_ruins)
"uXV" = (
/mob/living/simple_animal/opossum/poppy,
/turf/open/floor/wood,
/area/maintenance/port/aft)
"ver" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
dir = 10
@@ -79446,7 +79460,7 @@ aFM
aOH
aOT
aPV
aRm
uXV
aSI
aRC
aKm
@@ -92526,7 +92540,7 @@ aSD
aRz
aRz
aRz
sGY
saI
aRz
sIb
bsD
+20 -2
View File
@@ -54046,6 +54046,20 @@
},
/turf/open/floor/plasteel,
/area/construction/mining/aux_base)
"fgS" = (
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/mob/living/simple_animal/opossum/poppy,
/turf/open/floor/plasteel/dark,
/area/maintenance/department/engine)
"fhM" = (
/obj/item/storage/secure/safe{
pixel_x = -22
@@ -58645,6 +58659,10 @@
"pyw" = (
/turf/open/space/basic,
/area/hallway/secondary/entry)
"pzF" = (
/mob/living/simple_animal/opossum,
/turf/open/floor/wood,
/area/maintenance/department/crew_quarters/dorms)
"pBD" = (
/obj/structure/cable{
icon_state = "0-8"
@@ -83454,7 +83472,7 @@ bHP
bJb
bJb
bJb
bJb
fgS
bJb
bJb
bPp
@@ -99823,7 +99841,7 @@ akh
alc
alR
amF
alb
pzF
alb
anm
ajv
+10 -2
View File
@@ -18912,6 +18912,10 @@
},
/turf/open/floor/plasteel,
/area/storage/primary)
"ihL" = (
/mob/living/simple_animal/opossum,
/turf/open/floor/plating,
/area/maintenance/aft/secondary)
"ihX" = (
/obj/structure/cable{
icon_state = "0-2"
@@ -24053,6 +24057,10 @@
"luo" = (
/turf/open/floor/plasteel/white,
/area/science/misc_lab)
"lwl" = (
/mob/living/simple_animal/opossum/poppy,
/turf/open/floor/plating,
/area/engine/engineering)
"lwH" = (
/obj/structure/cable{
icon_state = "1-4"
@@ -83466,7 +83474,7 @@ tRe
tRe
tRe
bWf
bVa
ihL
kXG
sqx
owj
@@ -98024,7 +98032,7 @@ xUL
xUL
dKF
ijZ
ijZ
lwl
bnU
oJa
cNE
+59 -175
View File
@@ -12,9 +12,9 @@
density = FALSE
state_open = TRUE
circuit = /obj/item/circuitboard/machine/sleeper
req_access = list(ACCESS_CMO) //Used for reagent deletion and addition of non medicines
var/efficiency = 1
var/min_health = 30
var/min_health = -25
var/list/available_chems
var/controls_inside = FALSE
var/list/possible_chems = list(
@@ -31,32 +31,13 @@
/obj/machinery/sleeper/Initialize()
. = ..()
create_reagents(500, NO_REACT)
// if(mapload)
// component_parts -= circuit
// QDEL_NULL(circuit)
occupant_typecache = GLOB.typecache_living
update_icon()
reset_chem_buttons()
RefreshParts()
add_inital_chems()
new_occupant_dir = dir
/obj/machinery/sleeper/setDir(newdir)
. = ..()
new_occupant_dir = dir
/obj/machinery/sleeper/on_deconstruction()
var/obj/item/reagent_containers/sleeper_buffer/buffer = new (loc)
buffer.volume = reagents.maximum_volume
buffer.reagents.maximum_volume = reagents.maximum_volume
reagents.trans_to(buffer.reagents, reagents.total_volume)
/obj/machinery/sleeper/proc/add_inital_chems()
for(var/i in available_chems)
var/datum/reagent/R = reagents.has_reagent(i)
if(!R)
reagents.add_reagent(i, (20))
continue
if(R.volume < 20)
reagents.add_reagent(i, (20 - R.volume))
/obj/machinery/sleeper/RefreshParts()
var/E
@@ -73,15 +54,11 @@
available_chems |= possible_chems[i]
reset_chem_buttons()
//Total container size 500 - 2000u
if(reagents)
reagents.maximum_volume = (500*E)
/obj/machinery/sleeper/update_icon_state()
icon_state = initial(icon_state)
if(state_open)
icon_state += "-open"
icon_state = "[initial(icon_state)]-open"
else
icon_state = initial(icon_state)
/obj/machinery/sleeper/container_resist(mob/living/user)
visible_message("<span class='notice'>[occupant] emerges from [src]!</span>",
@@ -98,10 +75,12 @@
/obj/machinery/sleeper/open_machine()
if(!state_open && !panel_open)
// flick("[initial(icon_state)]-anim", src)
..()
/obj/machinery/sleeper/close_machine(mob/user)
if((isnull(user) || istype(user)) && state_open && !panel_open)
// flick("[initial(icon_state)]-anim", src)
..(user)
var/mob/living/mob_occupant = occupant
if(mob_occupant && mob_occupant.stat != DEAD)
@@ -112,46 +91,23 @@
if (. & EMP_PROTECT_SELF)
return
if(is_operational() && occupant)
var/datum/reagent/R = pick(reagents.reagent_list)
var/datum/reagent/R = pick(reagents.reagent_list) //cit specific
inject_chem(R.type, occupant)
open_machine()
//Is this too much?
//Is this too much? Cit specific
if(severity == EMP_HEAVY)
var/chem = pick(available_chems)
available_chems -= chem
available_chems += get_random_reagent_id()
reset_chem_buttons()
/obj/machinery/sleeper/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/reagent_containers/sleeper_buffer))
var/obj/item/reagent_containers/sleeper_buffer/SB = I
if((SB.reagents.total_volume + reagents.total_volume) < reagents.maximum_volume)
SB.reagents.trans_to(reagents, SB.reagents.total_volume)
visible_message("[user] places the [SB] into the [src].")
qdel(SB)
return
else
SB.reagents.trans_to(reagents, SB.reagents.total_volume)
visible_message("[user] adds as much as they can to the [src] from the [SB].")
return
if(istype(I, /obj/item/reagent_containers))
var/obj/item/reagent_containers/RC = I
if(RC.reagents.total_volume == 0)
to_chat(user, "<span class='notice'>The [I] is empty!</span>")
for(var/datum/reagent/R in RC.reagents.reagent_list)
if((obj_flags & EMAGGED) || (allowed(usr)))
break
if(!istype(R, /datum/reagent/medicine))
visible_message("The [src] gives out a hearty boop and rejects the [I]. The Sleeper's screen flashes with a pompous \"Medicines only, please.\"")
return
RC.reagents.trans_to(reagents, 1000)
visible_message("[user] adds as much as they can to the [src] from the [I].")
return
/obj/machinery/sleeper/MouseDrop_T(mob/target, mob/user)
if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser())
if(user.stat || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser())
return
if(isliving(user))
var/mob/living/L = user
if(!(L.mobility_flags & MOBILITY_STAND))
return
close_machine(target)
/obj/machinery/sleeper/screwdriver_act(mob/living/user, obj/item/I)
@@ -187,23 +143,9 @@
visible_message("<span class='notice'>[usr] pries open [src].</span>", "<span class='notice'>You pry open [src].</span>")
open_machine()
/obj/machinery/sleeper/AltClick(mob/user)
. = ..()
if(!user.canUseTopic(src, !hasSiliconAccessInArea(user)))
return
if(state_open)
close_machine()
else
open_machine()
return TRUE
/obj/machinery/sleeper/examine(mob/user)
. = ..()
. += "<span class='notice'>Alt-click [src] to [state_open ? "close" : "open"] it.</span>"
/obj/machinery/sleeper/ui_state(mob/user)
if(controls_inside)
return GLOB.notcontained_state
return GLOB.contained_state
return GLOB.default_state
/obj/machinery/sleeper/ui_interact(mob/user, datum/tgui/ui)
@@ -212,6 +154,18 @@
ui = new(user, src, "Sleeper", name)
ui.open()
/obj/machinery/sleeper/AltClick(mob/user)
if(!user.canUseTopic(src, !issilicon(user)))
return
if(state_open)
close_machine()
else
open_machine()
/obj/machinery/sleeper/examine(mob/user)
. = ..()
. += "<span class='notice'>Alt-click [src] to [state_open ? "close" : "open"] it.</span>"
/obj/machinery/sleeper/process()
..()
check_nap_violations()
@@ -221,22 +175,13 @@
/obj/machinery/sleeper/ui_data()
var/list/data = list()
var/chemical_list = list()
var/blood_percent = 0
data["occupied"] = occupant ? 1 : 0
data["open"] = state_open
data["blood_levels"] = blood_percent
data["blood_status"] = "Patient either has no blood, or does not require it to function."
data["chemical_list"] = chemical_list
data["chems"] = list()
for(var/chem in available_chems)
var/datum/reagent/R = reagents.has_reagent(chem)
R = GLOB.chemical_reagents_list[chem]
data["synthchems"] += list(list("name" = R.name, "id" = R.type, "synth_allowed" = synth_allowed(chem)))
for(var/datum/reagent/R in reagents.reagent_list)
data["chems"] += list(list("name" = R.name, "id" = R.type, "vol" = R.volume, "purity" = R.purity, "allowed" = chem_allowed(R.type)))
var/datum/reagent/R = GLOB.chemical_reagents_list[chem]
data["chems"] += list(list("name" = R.name, "id" = R.type, "allowed" = chem_allowed(chem)))
data["occupant"] = list()
var/mob/living/mob_occupant = occupant
@@ -264,40 +209,10 @@
data["occupant"]["fireLoss"] = mob_occupant.getFireLoss()
data["occupant"]["cloneLoss"] = mob_occupant.getCloneLoss()
data["occupant"]["brainLoss"] = mob_occupant.getOrganLoss(ORGAN_SLOT_BRAIN)
if(mob_occupant.reagents.reagent_list.len)
data["occupant"]["reagents"] = list()
if(mob_occupant.reagents && mob_occupant.reagents.reagent_list.len)
for(var/datum/reagent/R in mob_occupant.reagents.reagent_list)
chemical_list += list(list("name" = R.name, "volume" = R.volume))
else
chemical_list = "Patient has no reagents."
data["occupant"]["failing_organs"] = list()
var/mob/living/carbon/C = mob_occupant
if(C)
for(var/obj/item/organ/Or in C.getFailingOrgans())
if(istype(Or, /obj/item/organ/brain))
continue
data["occupant"]["failing_organs"] += list(list("name" = Or.name))
if(istype(C)) //Non-carbons shouldn't be able to enter sleepers, but this is to prevent runtimes if something ever breaks
if(mob_occupant.has_dna()) // Blood-stuff is mostly a copy-paste from the healthscanner.
blood_percent = round((C.blood_volume / BLOOD_VOLUME_NORMAL)*100)
var/blood_id = C.get_blood_id()
var/blood_warning = ""
if(blood_percent < 80)
blood_warning = "Patient has low blood levels."
if(blood_percent < 60)
blood_warning = "Patient has DANGEROUSLY low blood levels."
if(blood_id)
var/blood_type = C.dna.blood_type
if(!(blood_id in GLOB.blood_reagent_types)) // special blood substance
var/datum/reagent/R = GLOB.chemical_reagents_list[blood_id]
if(R)
blood_type = R.name
else
blood_type = blood_id
data["blood_status"] = "Patient has [blood_type] type blood. [blood_warning]"
data["blood_levels"] = blood_percent
data["occupant"]["reagents"] += list(list("name" = R.name, "volume" = R.volume))
return data
/obj/machinery/sleeper/ui_act(action, params)
@@ -314,37 +229,14 @@
. = TRUE
if("inject")
var/chem = text2path(params["chem"])
var/amount = text2num(params["volume"])
if(!is_operational() || !mob_occupant || isnull(chem))
return
if(mob_occupant.health < min_health && chem != /datum/reagent/medicine/epinephrine)
return
if(inject_chem(chem, usr, amount))
if(inject_chem(chem, usr))
. = TRUE
if(scrambled_chems && prob(5))
to_chat(usr, "<span class='warning'>Chemical system re-route detected, results may not be as expected!</span>")
if("synth")
var/chem = text2path(params["chem"])
if(!is_operational())
return
reagents.add_reagent(chem_buttons[chem], 10) //other_purity = 0.75 for when the mechanics are in
if("purge")
var/chem = text2path(params["chem"])
if(allowed(usr))
if(!is_operational())
return
reagents.remove_reagent(chem, 1000)
return
if(chem in available_chems)
if(!is_operational())
return
/*var/datum/reagent/R = reagents.has_reagent(chem) //For when purity effects are in
if(R.purity < 0.8)*/
reagents.remove_reagent(chem, 1000)
else
visible_message("<span class='warning'>Access Denied.</span>")
playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0)
/obj/machinery/sleeper/emag_act(mob/user)
. = ..()
@@ -353,10 +245,9 @@
to_chat(user, "<span class='warning'>You scramble the sleeper's user interface!</span>")
return TRUE
//trans to
/obj/machinery/sleeper/proc/inject_chem(chem, mob/user, volume = 10)
if(chem_allowed(chem))
reagents.trans_id_to(occupant, chem, volume)//emag effect kicks in here so that the "intended" chem is used for all checks, for extra FUUU
/obj/machinery/sleeper/proc/inject_chem(chem, mob/user)
if((chem in available_chems) && chem_allowed(chem))
occupant.reagents.add_reagent(chem_buttons[chem], 10) //emag effect kicks in here so that the "intended" chem is used for all checks, for extra FUUU
if(user)
log_combat(user, occupant, "injected [chem] into", addition = "via [src]")
return TRUE
@@ -369,14 +260,6 @@
var/occ_health = mob_occupant.health > min_health || chem == /datum/reagent/medicine/epinephrine
return amount && occ_health
/obj/machinery/sleeper/proc/synth_allowed(chem)
var/datum/reagent/R = reagents.has_reagent(chem)
if(!R)
return TRUE
if(R.volume < 50)
return TRUE
return FALSE
/obj/machinery/sleeper/proc/reset_chem_buttons()
scrambled_chems = FALSE
LAZYINITLIST(chem_buttons)
@@ -416,23 +299,6 @@
component_parts += new /obj/item/stack/cable_coil(null)
RefreshParts()
/obj/machinery/sleeper/clockwork
name = "soothing sleeper"
desc = "A large cryogenics unit built from brass. Its surface is pleasantly cool the touch."
icon_state = "sleeper_clockwork"
enter_message = "<span class='bold inathneq_small'>You hear the gentle hum and click of machinery, and are lulled into a sense of peace.</span>"
possible_chems = list(list(/datum/reagent/medicine/epinephrine, /datum/reagent/medicine/salbutamol, /datum/reagent/medicine/bicaridine,
/datum/reagent/medicine/kelotane, /datum/reagent/medicine/oculine, /datum/reagent/medicine/inacusiate, /datum/reagent/medicine/mannitol))
/obj/machinery/sleeper/clockwork/process()
if(occupant && isliving(occupant))
var/mob/living/L = occupant
if(GLOB.clockwork_vitality) //If there's Vitality, the sleeper has passive healing
GLOB.clockwork_vitality = max(0, GLOB.clockwork_vitality - 1)
L.adjustBruteLoss(-1)
L.adjustFireLoss(-1)
L.adjustOxyLoss(-5)
/obj/machinery/sleeper/old
icon_state = "oldpod"
@@ -443,8 +309,6 @@
idle_power_usage = 3000
circuit = /obj/item/circuitboard/machine/sleeper/party
var/leddit = FALSE //Get it like reddit and lead alright fine
ui_x = 310
ui_y = 400
controls_inside = TRUE
possible_chems = list(
@@ -477,3 +341,23 @@
/obj/machinery/sleeper/party/emag_act(mob/user)
..()
leddit = TRUE
/obj/machinery/sleeper/clockwork
name = "soothing sleeper"
desc = "A large cryogenics unit built from brass. Its surface is pleasantly cool the touch."
icon_state = "sleeper_clockwork"
enter_message = "<span class='bold inathneq_small'>You hear the gentle hum and click of machinery, and are lulled into a sense of peace.</span>"
possible_chems = list(
list(/datum/reagent/medicine/epinephrine, /datum/reagent/medicine/salbutamol, /datum/reagent/medicine/bicaridine, /datum/reagent/medicine/kelotane, /datum/reagent/medicine/oculine, /datum/reagent/medicine/inacusiate, /datum/reagent/medicine/mannitol)
) //everything is available at start
fair_market_price = 0 //it's free
/obj/machinery/sleeper/clockwork/process()
..()
if(occupant && isliving(occupant))
var/mob/living/L = occupant
if(GLOB.clockwork_vitality) //If there's Vitality, the sleeper has passive healing
GLOB.clockwork_vitality = max(0, GLOB.clockwork_vitality - 1)
L.adjustBruteLoss(-1)
L.adjustFireLoss(-1)
L.adjustOxyLoss(-5)
@@ -569,7 +569,6 @@
buildstacktype = /obj/item/stack/tile/brass
buildstackamount = 1
item_chair = null
var/turns = 0
/obj/structure/chair/brass/ComponentInitialize()
return //it spins with the power of ratvar, not components.
@@ -581,16 +580,12 @@
/obj/structure/chair/brass/process()
setDir(turn(dir,-90))
playsound(src, 'sound/effects/servostep.ogg', 50, FALSE)
turns++
if(turns >= 8)
STOP_PROCESSING(SSfastprocess, src)
/obj/structure/chair/brass/ratvar_act()
return
/obj/structure/chair/brass/AltClick(mob/living/user)
. = ..()
turns = 0
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
return
if(!(datum_flags & DF_ISPROCESSING))
@@ -37,14 +37,14 @@ GLOBAL_LIST_INIT(abductor_gear, subtypesof(/datum/abductor_gear))
description = "A dual-mode tool for retrieving specimens and scanning appearances. Scanning can be done through cameras."
id = "science_tool"
build_path = /obj/item/abductor/gizmo
/*
/datum/abductor_gear/advanced_baton
name = "Advanced Baton"
description = "A quad-mode baton used for incapacitation and restraining of specimens."
id = "advanced_baton"
cost = 2
build_path = /obj/item/melee/baton/abductor //does not exist?
*/
build_path = /obj/item/abductor/baton //does not exist?
/datum/abductor_gear/superlingual_matrix
name = "Superlingual Matrix"
description = "A mysterious structure that allows for instant communication between users. Pretty impressive until you need to eat something."
@@ -30,6 +30,22 @@
/// Possible gear to be dispensed
var/list/possible_gear
/obj/machinery/abductor/console/Initialize(mapload)
. = ..()
possible_gear = get_abductor_gear()
/**
* get_abductor_gear: Returns a list of a filtered abductor gear sorted by categories
*/
/obj/machinery/abductor/console/proc/get_abductor_gear()
var/list/filtered_modules = list()
for(var/path in GLOB.abductor_gear)
var/datum/abductor_gear/AG = new path
if(!filtered_modules[AG.category])
filtered_modules[AG.category] = list()
filtered_modules[AG.category][AG] = AG
return filtered_modules
/obj/machinery/abductor/console/on_attack_hand(mob/user, act_intent = user.a_intent, unarmed_attack_flags)
if(!HAS_TRAIT(user, TRAIT_ABDUCTOR_TRAINING) && !HAS_TRAIT(user.mind, TRAIT_ABDUCTOR_TRAINING))
to_chat(user, "<span class='warning'>You start mashing alien buttons at random!</span>")
@@ -28,6 +28,7 @@
throwforce = 0
blood_volume = 0
has_field_of_vision = FALSE //we are a spoopy ghost
rad_flags = RAD_NO_CONTAMINATE | RAD_PROTECT_CONTENTS
see_in_dark = 8
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
+2 -1
View File
@@ -543,6 +543,7 @@
cold_protection = HEAD
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
flags_inv = HIDEHAIR|HIDEEARS
rad_flags = RAD_NO_CONTAMINATE
/obj/item/clothing/suit/hooded/wintercoat/centcom
name = "centcom winter coat"
@@ -1062,4 +1063,4 @@
name = "Samurai outfit"
desc = "An outfit used by traditional japanese warriors."
icon_state = "samurai"
item_state = "samurai"
item_state = "samurai"
+5
View File
@@ -16,11 +16,16 @@
search = findtext(text, ":", pos + length(text[pos]))
if(search)
emoji = lowertext(copytext(text, pos + length(text[pos]), search))
var/isthisapath = (emoji[1] == "/") && text2path(emoji)
var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/goonchat)
var/tag = sheet.icon_tag("emoji-[emoji]")
if(tag)
parsed += "<i style='width:16px !important;height:16px !important;'>[tag]</i>" //evil way of enforcing 16x16
pos = search + length(text[pos])
else if(ispath(isthisapath, /atom)) //path
var/atom/thisisanatom = isthisapath
parsed += "[icon2html(initial(thisisanatom.icon), world, initial(thisisanatom.icon_state))]"
pos = search + length(text[pos])
else
parsed += copytext(text, pos, search)
pos = search
@@ -348,6 +348,12 @@
name = "Cowboy Shirt Shortsleeved Red"
icon_state = "cowboyshirt_reds"
/datum/sprite_accessory/underwear/top/bra_binder
name = "Bra (binder)"
icon_state = "bra_binder"
has_color = TRUE
/datum/sprite_accessory/underwear/top/bra_binder_strapless
name = "Bra (binder, strapless)"
icon_state = "bra_binder_strapless"
has_color = TRUE
@@ -14,7 +14,7 @@
brutemod = 1.25 //They're weak to punches
attack_type = BURN //burn bish
damage_overlay_type = "" //We are too cool for regular damage overlays
species_traits = list(MUTCOLORS, NO_UNDERWEAR, HAIR, HAS_FLESH, HAS_BONE) // i mean i guess they have blood so they can have wounds too
species_traits = list(MUTCOLORS, HAIR, HAS_FLESH, HAS_BONE) // i mean i guess they have blood so they can have wounds too
species_language_holder = /datum/language_holder/ethereal
inherent_traits = list(TRAIT_NOHUNGER)
sexes = FALSE
@@ -0,0 +1,37 @@
/mob/living/simple_animal/opossum
name = "opossum"
desc = "It's an opossum, a small scavenging marsupial."
icon_state = "possum"
icon_living = "possum"
icon_dead = "possum_dead"
speak = list("Hiss!","HISS!","Hissss?")
speak_emote = list("hisses")
emote_hear = list("hisses.")
emote_see = list("runs in a circle.", "shakes.")
speak_chance = 1
turns_per_move = 3
blood_volume = 250
see_in_dark = 5
maxHealth = 15
health = 15
butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 1)
response_help_continuous = "pets"
response_help_simple = "pet"
response_disarm_continuous = "gently pushes aside"
response_disarm_simple = "gently push aside"
response_harm_continuous = "stamps on"
response_harm_simple = "stamp"
density = FALSE
ventcrawler = VENTCRAWLER_ALWAYS
pass_flags = PASSTABLE | PASSMOB
mob_size = MOB_SIZE_TINY
mob_biotypes = MOB_ORGANIC|MOB_BEAST
gold_core_spawnable = FRIENDLY_SPAWN
/mob/living/simple_animal/opossum/poppy
name = "Poppy the Safety Possum"
desc = "Safety first!"
icon_state = "poppypossum"
icon_living = "poppypossum"
icon_dead = "poppypossum_dead"
butcher_results = list(/obj/item/clothing/head/hardhat = 1)
-2
View File
@@ -649,8 +649,6 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0)
continue
if(overrides.len && (A in overrides))
continue
if(A.IsObscured())
continue
statpanel(listed_turf.name, null, A)
if(mind)
add_spells_to_statpanel(mind.spell_list)
@@ -36,8 +36,9 @@
/obj/machinery/computer/nanite_cloud_controller/proc/eject(mob/living/user)
if(!disk)
return
if(!istype(user) || !Adjacent(user))// ||!user.put_in_active_hand(disk))
disk.forceMove(drop_location())
disk.forceMove(drop_location())
if(istype(user) && user.Adjacent(src))
user.put_in_active_hand(disk)
disk = null
/obj/machinery/computer/nanite_cloud_controller/proc/get_backup(cloud_id)
@@ -53,8 +53,9 @@
/obj/machinery/nanite_program_hub/proc/eject(mob/living/user)
if(!disk)
return
if(!istype(user) || !Adjacent(user))// || !user.put_in_active_hand(disk))
disk.forceMove(drop_location())
disk.forceMove(drop_location())
if(istype(user) && Adjacent(user))
user.put_in_active_hand(disk)
disk = null
/obj/machinery/nanite_program_hub/AltClick(mob/user)
@@ -39,8 +39,9 @@
/obj/machinery/nanite_programmer/proc/eject(mob/living/user)
if(!disk)
return
if(!istype(user) || !Adjacent(user))// || !user.put_in_active_hand(disk))
disk.forceMove(drop_location())
disk.forceMove(drop_location())
if(istype(user) && user.Adjacent(src))
user.put_in_active_hand(disk)
disk = null
program = null
+80 -51
View File
@@ -50,6 +50,86 @@
-->
<div class="commit sansserif">
<h2 class="date">15 August 2020</h2>
<h3 class="author">LetterN updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">missing anomaly core icons</li>
<li class="bugfix">wrong state. blame the tg vertion i copied</li>
</ul>
<h3 class="author">silicons updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">the 8 rotation limit from clockwork chairs has been removed. please don't abuse this.</li>
<li class="tweak">ethereals can now wear underwear</li>
</ul>
<h2 class="date">14 August 2020</h2>
<h3 class="author">silicons updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">abductors can buy things</li>
</ul>
<h2 class="date">13 August 2020</h2>
<h3 class="author">LetterN updated:</h3>
<ul class="changes bgimages16">
<li class="rscdel">Removes fermisleepers and reverts them to tg ones</li>
</ul>
<h2 class="date">12 August 2020</h2>
<h3 class="author">DeltaFire15 updated:</h3>
<ul class="changes bgimages16">
<li class="balance">hellgun single-pack classification: goodies -> armory</li>
</ul>
<h3 class="author">Detective-Google updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">hallway table hallway table</li>
</ul>
<h3 class="author">Hatterhat updated:</h3>
<ul class="changes bgimages16">
<li class="balance">The temporal katana is now slightly more worthy of the 2 spell point cost, with a smaller, antimagic respecting timestop, less force, and no random blockchance. Society has progressed past the need for blockchance.</li>
</ul>
<h3 class="author">LetterN updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Mafia Component</li>
<li class="bugfix">Fixed missing icons and handtele</li>
</ul>
<h3 class="author">Putnam3145 updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">a whole lot of jank regarding funny part sprite display.</li>
</ul>
<h3 class="author">Toriate updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Opossums have migrated into the maintenance tunnels! Seek them out at your own peril!</li>
</ul>
<h3 class="author">ancientpower updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Doors added to the west side of box medbay to make things a bit more manageable.</li>
</ul>
<h3 class="author">kappa-sama updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">smuggler satchel cost 2->1</li>
<li class="tweak">radio jammer cost 5->2</li>
<li class="bugfix">smuggler satchel uplink description now implies that persistence is disabled</li>
</ul>
<h3 class="author">lolman360 updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">renameable necklace (accessory, attaches to suit) and ring (glove slot.)</li>
<li class="tweak">custom rename is now 2048 characters? i think it's characters.</li>
</ul>
<h3 class="author">silicons updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">You can now use anything as an emoji by doing :/obj/item/path/to/item:. This works for any /atom or subtype.</li>
</ul>
<h3 class="author">timothyteakettle updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">syndicate agents now have access to mechanical aim enhancers which allow them to aim bullets to bounce off walls</li>
<li class="bugfix">ricochets work properly now for the bullets that support them</li>
</ul>
<h3 class="author">zeroisthebiggay updated:</h3>
<ul class="changes bgimages16">
<li class="imageadd">hair and some sechuds</li>
<li class="balance">ce hardsuit radproofing</li>
</ul>
<h2 class="date">11 August 2020</h2>
<h3 class="author">Hatterhat updated:</h3>
<ul class="changes bgimages16">
@@ -1361,57 +1441,6 @@
<li class="rscadd">Parrying has been added, keybound to F. Timing-based counterattacks, effect heavily dependent on the item, WIP.</li>
<li class="balance">Disks are now smaller.</li>
</ul>
<h2 class="date">12 June 2020</h2>
<h3 class="author">EmeraldSundisk updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">The Detective's Office has been commandeered in order to serve a Head of Security. Detectives will find their new office within starboard maintenance.</li>
<li class="rscadd">Adds the Head of Security's standard equipment to their new office.</li>
<li class="tweak">Slight adjustment/expansion to the main security department</li>
<li class="rscadd">Additional maintenance work</li>
</ul>
<h3 class="author">timothyteakettle updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Crabs, cockroaches, slimes and crabs are now small enough to fit in pet carriers</li>
</ul>
<h2 class="date">11 June 2020</h2>
<h3 class="author">Ghommie updated:</h3>
<ul class="changes bgimages16">
<li class="balance">Balanced vending machine prices to be generally more affordable, a minority has been priced up though.</li>
</ul>
<h2 class="date">10 June 2020</h2>
<h3 class="author">DeltaFire15 updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Golems / simillar now inherit the neutered antag datum if the creator is neutered.</li>
</ul>
<h3 class="author">Ghommie updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Fixing missing pill type buttons from the chem master UI.</li>
</ul>
<h3 class="author">Naksu updated:</h3>
<ul class="changes bgimages16">
<li class="code_imp">Lighting corner updates are ever so slightly faster.</li>
</ul>
<h3 class="author">Putnam for helping me code the contamination clearing on people updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Lab made Zeolites have been remade anew and more affective now that they refined the best possable way to mix and make a supper Zeolite capable of clearing contamination form not only people but items!</li>
</ul>
<h3 class="author">Trilbyspaceclone updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Tank Dispender has been moved into toxin storage from toxins</li>
</ul>
<h3 class="author">kevinz000 updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">traitor classes can now be poplocked. hijack/glorious death are now locked to 25/20 respectively.</li>
</ul>
<h3 class="author">timothyteakettle updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">adds a new fermichem, used for creating sentient plushies!</li>
<li class="rscadd">Mice can now breed using cheese wedges</li>
<li class="rscadd">Royal cheese can be crafted to convert a mouse into king rat</li>
</ul>
</div>
<b>GoonStation 13 Development Team</b>
+50
View File
@@ -26872,3 +26872,53 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- tweak: tracer no longer gives you full stamheals per use
zeroisthebiggay:
- rscadd: volaju two
2020-08-12:
DeltaFire15:
- balance: 'hellgun single-pack classification: goodies -> armory'
Detective-Google:
- bugfix: hallway table hallway table
Hatterhat:
- balance: The temporal katana is now slightly more worthy of the 2 spell point
cost, with a smaller, antimagic respecting timestop, less force, and no random
blockchance. Society has progressed past the need for blockchance.
LetterN:
- rscadd: Mafia Component
- bugfix: Fixed missing icons and handtele
Putnam3145:
- bugfix: a whole lot of jank regarding funny part sprite display.
Toriate:
- rscadd: Opossums have migrated into the maintenance tunnels! Seek them out at
your own peril!
ancientpower:
- tweak: Doors added to the west side of box medbay to make things a bit more manageable.
kappa-sama:
- tweak: smuggler satchel cost 2->1
- tweak: radio jammer cost 5->2
- bugfix: smuggler satchel uplink description now implies that persistence is disabled
lolman360:
- rscadd: renameable necklace (accessory, attaches to suit) and ring (glove slot.)
- tweak: custom rename is now 2048 characters? i think it's characters.
silicons:
- rscadd: You can now use anything as an emoji by doing :/obj/item/path/to/item:.
This works for any /atom or subtype.
timothyteakettle:
- rscadd: syndicate agents now have access to mechanical aim enhancers which allow
them to aim bullets to bounce off walls
- bugfix: ricochets work properly now for the bullets that support them
zeroisthebiggay:
- imageadd: hair and some sechuds
- balance: ce hardsuit radproofing
2020-08-13:
LetterN:
- rscdel: Removes fermisleepers and reverts them to tg ones
2020-08-14:
silicons:
- bugfix: abductors can buy things
2020-08-15:
LetterN:
- bugfix: missing anomaly core icons
- bugfix: wrong state. blame the tg vertion i copied
silicons:
- tweak: the 8 rotation limit from clockwork chairs has been removed. please don't
abuse this.
- tweak: ethereals can now wear underwear
@@ -1,5 +0,0 @@
author: "timothyteakettle"
delete-after: True
changes:
- rscadd: "syndicate agents now have access to mechanical aim enhancers which allow them to aim bullets to bounce off walls"
- bugfix: "ricochets work properly now for the bullets that support them"
@@ -1,6 +0,0 @@
author: "kappa-sama"
delete-after: True
changes:
- tweak: "smuggler satchel cost 2->1"
- tweak: "radio jammer cost 5->2"
- bugfix: "smuggler satchel uplink description now implies that persistence is disabled"
@@ -1,4 +0,0 @@
author: "ancientpower"
delete-after: True
changes:
- tweak: "Doors added to the west side of box medbay to make things a bit more manageable."
@@ -1,4 +0,0 @@
author: "Putnam3145"
delete-after: True
changes:
- bugfix: "a whole lot of jank regarding funny part sprite display."
@@ -1,5 +0,0 @@
author: "lolman360"
delete-after: True
changes:
- rscadd: "renameable necklace (accessory, attaches to suit) and ring (glove slot.)"
- tweak: "custom rename is now 2048 characters? i think it's characters."
@@ -1,4 +0,0 @@
author: "LetterN"
delete-after: True
changes:
- rscadd: "Mafia Component"
@@ -1,4 +0,0 @@
author: "Hatterhat"
delete-after: True
changes:
- balance: "The temporal katana is now slightly more worthy of the 2 spell point cost, with a smaller, antimagic respecting timestop, less force, and no random blockchance. Society has progressed past the need for blockchance."
@@ -1,4 +0,0 @@
author: "zeroisthebiggay"
delete-after: True
changes:
- balance: "ce hardsuit radproofing"
@@ -1,4 +0,0 @@
author: "DeltaFire15"
delete-after: True
changes:
- balance: "hellgun single-pack classification: goodies -> armory"
@@ -1,4 +0,0 @@
author: "zeroisthebiggay"
delete-after: True
changes:
- imageadd: "hair and some sechuds"
@@ -1,4 +0,0 @@
author: "LetterN"
delete-after: True
changes:
- bugfix: "Fixed missing icons and handtele"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 275 KiB

After

Width:  |  Height:  |  Size: 283 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 22 KiB

@@ -12,7 +12,7 @@
/obj/item/gun/energy/pumpaction/emp_act(severity) //makes it not rack itself when emp'd
cell.use(round(cell.charge / severity))
chambered = 0 //we empty the chamber
chambered = null //we empty the chamber
update_icon()
/obj/item/gun/energy/pumpaction/process() //makes it not rack itself when self-charging
@@ -20,7 +20,7 @@
charge_tick++
if(charge_tick < charge_delay)
return
charge_tick = 0
charge_tick = null
if(selfcharge == EGUN_SELFCHARGE_BORG)
var/atom/owner = loc
if(istype(owner, /obj/item/robot_module))
@@ -44,7 +44,7 @@
if(chambered && !chambered.BB) //if BB is null, i.e the shot has been fired...
var/obj/item/ammo_casing/energy/shot = chambered
cell.use(shot.e_cost)//... drain the cell cell
chambered = 0 //either way, released the prepared shot
chambered = null //either way, released the prepared shot
/obj/item/gun/energy/pumpaction/post_set_firemode()
var/has_shot = chambered
+1
View File
@@ -2622,6 +2622,7 @@
#include "code\modules\mob\living\simple_animal\friendly\penguin.dm"
#include "code\modules\mob\living\simple_animal\friendly\pet.dm"
#include "code\modules\mob\living\simple_animal\friendly\plushie.dm"
#include "code\modules\mob\living\simple_animal\friendly\possum.dm"
#include "code\modules\mob\living\simple_animal\friendly\sloth.dm"
#include "code\modules\mob\living\simple_animal\friendly\snake.dm"
#include "code\modules\mob\living\simple_animal\friendly\drone\_drone.dm"
+1 -61
View File
@@ -1,5 +1,5 @@
import { useBackend } from '../backend';
import { AnimatedNumber, Box, Section, LabeledList, Button, ProgressBar } from '../components';
import { Box, Section, LabeledList, Button, ProgressBar } from '../components';
import { Fragment } from 'inferno';
import { Window } from '../layouts';
@@ -41,18 +41,6 @@ export const Sleeper = (props, context) => {
}
return 0;
});
const preSortSynth = data.synthchems || [];
const synthchems = preSortSynth.sort((a, b) => {
const descA = a.name.toLowerCase();
const descB = b.name.toLowerCase();
if (descA < descB) {
return -1;
}
if (descA > descB) {
return 1;
}
return 0;
});
return (
<Window
width={310}
@@ -93,15 +81,6 @@ export const Sleeper = (props, context) => {
color="bad" />
</LabeledList.Item>
))}
<LabeledList.Item
label={'Blood'}>
<ProgressBar
value={data.blood_levels/100}
color="bad">
<AnimatedNumber value={data.blood_levels} />
</ProgressBar>
{data.blood_status}
</LabeledList.Item>
<LabeledList.Item
label="Cells"
color={occupant.cloneLoss ? 'bad' : 'good'}>
@@ -116,18 +95,6 @@ export const Sleeper = (props, context) => {
</Fragment>
)}
</Section>
<Section title="Chemical Analysis">
<LabeledList.Item label="Chemical Contents">
{data.chemical_list.map(specificChem => (
<Box
key={specificChem.id}
color="good" >
{specificChem.volume} units of {specificChem.name}
</Box>
),
)}
</LabeledList.Item>
</Section>
<Section
title="Medicines"
minHeight="205px"
@@ -149,33 +116,6 @@ export const Sleeper = (props, context) => {
})} />
))}
</Section>
<Section
title="Synthesize Chemicals">
{synthchems.map(chem => (
<Button
key={chem.name}
content={chem.name}
width="140px"
onClick={() => act('synth', {
chem: chem.id,
})}
/>
))}
</Section>
<Section
title="Purge Chemicals">
{chems.map(chem => (
<Button
key={chem.name}
content={chem.name}
disabled={!(chem.allowed)}
width="140px"
onClick={() => act('purge', {
chem: chem.id,
})}
/>
))}
</Section>
</Window.Content>
</Window>
);
File diff suppressed because one or more lines are too long