diff --git a/README.md b/README.md index d7907987ec..d33438f606 100644 --- a/README.md +++ b/README.md @@ -25,13 +25,7 @@ There are a number of ways to download the source code. Some are described here, Option 1: Follow this: http://www.tgstation13.org/wiki/Setting_up_git -Option 2: -Install GitHub::windows from http://windows.github.com/ -It handles most of the setup and configuraton of Git for you. -Then you simply search for the tgstation repository and click the big clone -button. - -Option 3: Download the source code as a zip by clicking the ZIP button in the +Option 2: Download the source code as a zip by clicking the ZIP button in the code tab of https://github.com/tgstation/tgstation (note: this will use a lot of bandwidth if you wish to update and is a lot of hassle if you want to make any changes at all, so it's not recommended.) diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 16cd802a79..e8caec4ba3 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -72827,10 +72827,6 @@ }, /obj/structure/grille, /obj/structure/window/reinforced/fulltile, -/obj/machinery/door/poddoor/preopen{ - id = "xenosecure"; - name = "Secure Pen Shutters" - }, /obj/machinery/door/poddoor/preopen{ id = "xenosecure"; name = "Secure Pen Shutters" diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm index 47ad2d4c46..009c5e3be0 100644 --- a/_maps/map_files/Mining/Lavaland.dmm +++ b/_maps/map_files/Mining/Lavaland.dmm @@ -627,6 +627,7 @@ /area/mine/production) "bD" = ( /obj/structure/closet/crate, +/obj/item/weapon/dice/d4, /turf/open/floor/plasteel/brown{ baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface; dir = 1 diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index f732a4dc79..97ab7dce12 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -22584,14 +22584,12 @@ tag = "icon-4-8"; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - tag = "icon-manifold (EAST)"; - icon_state = "manifold"; - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, /turf/open/floor/plasteel, /area/engine/gravity_generator) "aKy" = ( @@ -22682,11 +22680,6 @@ tag = "icon-1-4"; icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - tag = "icon-intact (SOUTHEAST)"; - icon_state = "intact"; - dir = 6 - }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -22710,9 +22703,6 @@ tag = "icon-4-8"; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -22723,9 +22713,6 @@ tag = "icon-4-8"; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /turf/open/floor/plasteel/yellow/side{ dir = 8 }, @@ -22739,9 +22726,6 @@ tag = "icon-4-8"; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /turf/open/floor/plasteel/neutral, /area/engine/engineering) "aKK" = ( @@ -22750,9 +22734,11 @@ tag = "icon-4-8"; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/item/clothing/gloves/color/yellow, /obj/item/weapon/reagent_containers/food/drinks/soda_cans/thirteenloko, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, /turf/open/floor/plasteel/yellow, /area/engine/engineering) "aKL" = ( @@ -23066,14 +23052,10 @@ /turf/closed/wall, /area/crew_quarters/kitchen) "aLm" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - tag = "icon-manifold (WEST)"; - icon_state = "manifold"; - dir = 8 - }, /obj/structure/extinguisher_cabinet{ pixel_x = -24 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/neutral/corner{ dir = 1 }, @@ -23290,10 +23272,11 @@ /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/structure/cable/white, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + tag = "icon-manifold (NORTH)"; + icon_state = "manifold"; + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/engine/gravity_generator) "aLM" = ( @@ -23302,14 +23285,13 @@ icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - tag = "icon-manifold (EAST)"; - icon_state = "manifold"; - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9; + pixel_y = 0 + }, /turf/open/floor/plasteel, /area/engine/engineering) "aLN" = ( @@ -23393,7 +23375,6 @@ tag = "icon-1-2"; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -23831,7 +23812,7 @@ /turf/open/floor/plating, /area/tcommsat/server) "aMN" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/tcommsat/server) "aMO" = ( @@ -23843,7 +23824,6 @@ pixel_x = -32 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/camera{ c_tag = "Engineering Port"; dir = 4; @@ -24586,7 +24566,6 @@ pixel_x = -23; pixel_y = 0 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -24664,7 +24643,6 @@ }, /obj/structure/cable/white, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -24891,7 +24869,6 @@ icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -24974,7 +24951,6 @@ dir = 4; pixel_x = 24 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -25780,7 +25756,6 @@ pixel_x = -26 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -25825,19 +25800,17 @@ /obj/machinery/newscaster{ pixel_x = 32 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - tag = "icon-manifold (EAST)"; - icon_state = "manifold"; +/obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/open/floor/plasteel, /area/engine/engineering) "aPO" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 }, /turf/closed/wall/r_wall, /area/maintenance/port) @@ -26462,7 +26435,6 @@ /area/engine/engineering) "aQT" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -26814,12 +26786,12 @@ pixel_y = 0 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/engineering) "aRG" = ( @@ -26946,7 +26918,6 @@ pixel_x = 24 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/closet/secure_closet/engineering_personal, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -27435,9 +27406,6 @@ /area/tcommsat/server) "aSP" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/structure/closet/wardrobe/engineering_yellow, /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -27447,9 +27415,6 @@ "aSQ" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /turf/open/floor/plasteel/caution, /area/engine/engineering) "aSR" = ( @@ -27458,9 +27423,6 @@ /obj/structure/sign/nosmoking_2{ pixel_y = -32 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/engineering) @@ -27468,9 +27430,6 @@ /obj/item/clothing/gloves/color/black, /obj/item/clothing/glasses/meson/engine, /obj/structure/table/reinforced, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/engineering) @@ -27478,16 +27437,10 @@ /obj/structure/table/reinforced, /obj/item/weapon/storage/toolbox/mechanical, /obj/item/device/flashlight, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/engineering) "aSU" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -27507,9 +27460,6 @@ pixel_y = -32 }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -27521,9 +27471,6 @@ on = 1; target_temperature = 80 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -27536,9 +27483,6 @@ on = 1; target_temperature = 80 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -27555,9 +27499,6 @@ }, /obj/item/device/geiger_counter, /obj/item/device/geiger_counter, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/engineering) @@ -27566,19 +27507,11 @@ /obj/item/clothing/suit/radiation, /obj/item/clothing/head/radiation, /obj/item/clothing/glasses/meson, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/engineering) "aTa" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - tag = "icon-intact (NORTHWEST)"; - icon_state = "intact"; - dir = 9 - }, /obj/structure/closet/secure_closet/engineering_personal, /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -37645,7 +37578,6 @@ tag = "icon-1-2"; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ c_tag = "Engineering Starboard"; dir = 8; @@ -41248,6 +41180,22 @@ "bwU" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/transport) +"bwV" = ( +/obj/structure/cable/white{ + tag = "icon-1-2"; + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"bwW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/closed/wall/r_wall, +/area/tcommsat/server) (1,1,1) = {" aaa @@ -70928,11 +70876,11 @@ aMN aMN aMN aMN -aMN -aMN -aMN -aMN -aSO +bwW +aMJ +aMJ +aMJ +aMJ aMJ aMJ aMJ @@ -71184,7 +71132,7 @@ aMO aNY aOz aPI -aJp +bwV aRF aSP aEt @@ -86855,7 +86803,7 @@ bsz aDZ aIY aDZ -aGY +aDZ arj arj anl @@ -87112,7 +87060,7 @@ bsA aHY aIZ blm -aLn +ahZ aMy aHY aDc diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index aed8a82687..3cdd0c36fc 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -1516,9 +1516,6 @@ icon_state = "4-8"; pixel_y = 0 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/AIsatextAS) "adr" = ( @@ -3305,7 +3302,6 @@ name = "Prison Wing"; req_access_txt = "1" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -3326,7 +3322,6 @@ /area/security/prison) "ahf" = ( /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/airlock/glass_security{ name = "Prison Wing"; req_access_txt = "1" @@ -12775,9 +12770,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /turf/open/floor/plasteel/black, /area/crew_quarters/heads/hop) "aAk" = ( @@ -26849,7 +26841,6 @@ /obj/machinery/door/airlock/glass{ name = "Diner" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/hallway/primary/central) @@ -26865,7 +26856,6 @@ /obj/machinery/door/airlock/glass{ name = "Diner" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/hallway/primary/central) @@ -45842,7 +45832,6 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/engine/engineering) @@ -48897,7 +48886,7 @@ /area/hallway/primary/central) "bWU" = ( /obj/structure/table, -/obj/item/weapon/storage/fancy, +/obj/item/weapon/storage/fancy/donut_box, /turf/open/floor/plasteel/neutral/corner{ dir = 1 }, @@ -53230,7 +53219,6 @@ /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/hallway/secondary/exit/departure_lounge) "chp" = ( @@ -69752,7 +69740,7 @@ cdi cdz cdi ceb -cex +cdi ceO cdi ccZ @@ -74304,7 +74292,7 @@ aEz aEz aEz aEz -cht +chu chA chG chI @@ -74565,7 +74553,7 @@ chu chB chH chJ -chO +aNF chy chF aMT @@ -74807,10 +74795,10 @@ atX awA agv ayy -azF -azF -azF -azF +aCZ +aCZ +aCZ +aCZ aCZ aDB aEw @@ -85929,7 +85917,7 @@ bKT bLz bKT bMG -bNn +bNg bNI bOc bMb @@ -93114,7 +93102,7 @@ bLR bZp bBF bCP -bDI +bJl bCP bHI bCP diff --git a/code/__DEFINES/clockcult.dm b/code/__DEFINES/clockcult.dm index ded2c34ef8..7459ded715 100644 --- a/code/__DEFINES/clockcult.dm +++ b/code/__DEFINES/clockcult.dm @@ -104,3 +104,5 @@ GLOBAL_LIST_EMPTY(all_scripture) //a list containing scripture instances; not us #define OCULAR_WARDEN_EXCLUSION_RANGE 3 //the range at which ocular wardens cannot be placed near other ocular wardens #define RATVARIAN_SPEAR_DURATION 1800 //how long ratvarian spears last; defaults to 3 minutes + +#define PRISM_DELAY_DURATION 1200 //how long prolonging prisms delay the shuttle for; defaults to 2 minutes diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index 69936099b1..a6ea566113 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -15,9 +15,13 @@ #define ABOVE_NORMAL_TURF_LAYER 2.08 #define LATTICE_LAYER 2.2 #define DISPOSAL_PIPE_LAYER 2.3 -#define GAS_PIPE_LAYER 2.35 +#define GAS_PIPE_HIDDEN_LAYER 2.35 #define WIRE_LAYER 2.4 #define WIRE_TERMINAL_LAYER 2.45 +#define GAS_SCRUBBER_LAYER 2.46 +#define GAS_PIPE_VISIBLE_LAYER 2.47 +#define GAS_FILTER_LAYER 2.48 +#define GAS_PUMP_LAYER 2.49 #define LOW_OBJ_LAYER 2.5 #define LOW_SIGIL_LAYER 2.52 #define SIGIL_LAYER 2.54 diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 6a4ec3456e..0bd146dbd4 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -1,3 +1,6 @@ +//wrapper macro for sending images that makes grepping easy +#define SEND_IMAGE(target, image) target << image + /proc/random_blood_type() return pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index a5d4d2ce6f..441fe44740 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -47,7 +47,7 @@ SUBSYSTEM_DEF(shuttle) var/lockdown = FALSE //disallow transit after nuke goes off - var/auto_call = 72000 //time before in deciseconds in which the shuttle is auto called. Default is 2 hours. + var/auto_call = 99000 //time before in deciseconds in which the shuttle is auto called. Default is 2½ hours plus 15 for the shuttle. So total is 3. /datum/controller/subsystem/shuttle/Initialize(timeofday) if(!arrivals) diff --git a/code/datums/diseases/advance/symptoms/vomit.dm b/code/datums/diseases/advance/symptoms/vomit.dm index f214c0755a..20aab58acc 100644 --- a/code/datums/diseases/advance/symptoms/vomit.dm +++ b/code/datums/diseases/advance/symptoms/vomit.dm @@ -42,7 +42,7 @@ Bonus return /datum/symptom/vomit/proc/Vomit(mob/living/carbon/M) - M.vomit(20) + M.vomit(20) /* ////////////////////////////////////// @@ -75,7 +75,7 @@ Bonus severity = 5 /datum/symptom/vomit/blood/Vomit(mob/living/carbon/M) - M.vomit(0, 1) + M.vomit(0,TRUE) /* @@ -103,4 +103,4 @@ Bonus level = 4 /datum/symptom/vomit/projectile/Vomit(mob/living/carbon/M) - M.vomit(6,0,1,5,1) + M.vomit(6, distance = 5) diff --git a/code/datums/diseases/appendicitis.dm b/code/datums/diseases/appendicitis.dm index 051adfc3de..64cd95c747 100644 --- a/code/datums/diseases/appendicitis.dm +++ b/code/datums/diseases/appendicitis.dm @@ -31,4 +31,4 @@ affected_mob.adjustToxLoss(1) if(3) if(prob(1)) - affected_mob.vomit(95) + affected_mob.vomit(95) diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index 42ba4c7b47..473a17053a 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -79,7 +79,7 @@ details = ": '" + html_encode(testmerge[line]["title"]) + "' by " + html_encode(testmerge[line]["author"]) + " at commit " + html_encode(copytext(cm, 1, min(length(cm), 7))) else if(has_pr_details) //tgs2 support details = ": '" + html_encode(testmerge[line]["title"]) + "' by " + html_encode(testmerge[line]["user"]["login"]) - . += "#[line][details]
" + . += "#[line][details]
" /client/verb/showrevinfo() set category = "OOC" @@ -93,7 +93,7 @@ to_chat(src, GLOB.revdata.GetTestMergeInfo()) prefix = "Based off origin/master commit: " var/pc = GLOB.revdata.originmastercommit - to_chat(src, "[prefix][copytext(pc, 1, min(length(pc), 7))]") + to_chat(src, "[prefix][copytext(pc, 1, min(length(pc), 7))]") else to_chat(src, "Revision unknown") to_chat(src, "Current Infomational Settings:") diff --git a/code/datums/mind.dm b/code/datums/mind.dm index e1c6606400..cf7368a879 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -23,7 +23,7 @@ new_mob.key = key - The Login proc will handle making a new mob for that mobtype (including setting up stuff like mind.name). Simple! + The Login proc will handle making a new mind for that mobtype (including setting up stuff like mind.name). Simple! However if you want that mind to have any special properties like being a traitor etc you will have to do that yourself. diff --git a/code/datums/riding.dm b/code/datums/riding.dm index 0a1f8f9f5d..dc07b35b05 100644 --- a/code/datums/riding.dm +++ b/code/datums/riding.dm @@ -40,6 +40,8 @@ passindex++ var/mob/living/buckled_mob = m var/list/offsets = get_offsets(passindex) + var/rider_dir = get_rider_dir(passindex) + buckled_mob.setDir(rider_dir) dir_loop: for(var/offsetdir in offsets) if(offsetdir == ridden_dir) @@ -56,6 +58,11 @@ /datum/riding/proc/get_offsets(pass_index) // list(dir = x, y, layer) return list("[NORTH]" = list(0, 0), "[SOUTH]" = list(0, 0), "[EAST]" = list(0, 0), "[WEST]" = list(0, 0)) +//Override this to set the passengers/riders dir based on which passenger they are. +//ie: rider facing the vehicle's dir, but passenger 2 facing backwards, etc. +/datum/riding/proc/get_rider_dir(pass_index) + return ridden.dir + //KEYS /datum/riding/proc/keycheck(mob/user) if(keytype) diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index a0338f72b0..a2d486be3f 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -232,19 +232,20 @@ /datum/status_effect/cult_master id = "The Cult Master" duration = -1 - tick_interval = 100 alert_type = null + on_remove_on_mob_delete = TRUE var/alive = TRUE /datum/status_effect/cult_master/proc/deathrattle() + if(!QDELETED(GLOB.cult_narsie)) + return //if nar-sie is alive, don't even worry about it var/area/A = get_area(owner) for(var/datum/mind/B in SSticker.mode.cult) if(isliving(B.current)) var/mob/living/M = B.current M << 'sound/hallucinations/veryfar_noise.ogg' - to_chat(M, "The Cult's Master, [owner], has fallen in the [A]!") - - + to_chat(M, "The Cult's Master, [owner], has fallen in \the [A]!") + /datum/status_effect/cult_master/tick() if(owner.stat != DEAD && !alive) alive = TRUE diff --git a/code/game/gamemodes/changeling/powers/panacea.dm b/code/game/gamemodes/changeling/powers/panacea.dm index 08d51be262..5fe037042f 100644 --- a/code/game/gamemodes/changeling/powers/panacea.dm +++ b/code/game/gamemodes/changeling/powers/panacea.dm @@ -17,7 +17,7 @@ B.leave_victim() if(iscarbon(user)) var/mob/living/carbon/C = user - C.vomit(0) + C.vomit(0, toxic = TRUE) to_chat(user, "A parasite exits our form.") var/list/bad_organs = list( user.getorgan(/obj/item/organ/body_egg), @@ -31,7 +31,7 @@ O.Remove(user) if(iscarbon(user)) var/mob/living/carbon/C = user - C.vomit(0) + C.vomit(0, toxic = TRUE) O.forceMove(get_turf(user)) user.reagents.add_reagent("mutadone", 10) diff --git a/code/game/gamemodes/clock_cult/clock_helpers/scripture_checks.dm b/code/game/gamemodes/clock_cult/clock_helpers/scripture_checks.dm index 3862791f8c..5faf3ee832 100644 --- a/code/game/gamemodes/clock_cult/clock_helpers/scripture_checks.dm +++ b/code/game/gamemodes/clock_cult/clock_helpers/scripture_checks.dm @@ -64,5 +64,5 @@ /proc/change_construction_value(amount) GLOB.clockwork_construction_value += amount -/proc/can_recite_scripture(mob/living/L) - return (is_servant_of_ratvar(L) && L.stat == CONSCIOUS && L.can_speak_vocal() && (GLOB.ratvar_awakens || (ishuman(L) || issilicon(L)))) +/proc/can_recite_scripture(mob/living/L, can_potentially) + return (is_servant_of_ratvar(L) && (can_potentially || (L.stat == CONSCIOUS && L.can_speak_vocal())) && (GLOB.ratvar_awakens || (ishuman(L) || issilicon(L)))) diff --git a/code/game/gamemodes/clock_cult/clock_items/clock_components.dm b/code/game/gamemodes/clock_cult/clock_items/clock_components.dm index 7550aea74f..f30483a6af 100644 --- a/code/game/gamemodes/clock_cult/clock_items/clock_components.dm +++ b/code/game/gamemodes/clock_cult/clock_items/clock_components.dm @@ -69,7 +69,7 @@ /obj/item/clockwork/component/vanguard_cogwheel/onyx_prism name = "onyx prism" desc = "An onyx prism with a small aperture. It's very heavy." - clockwork_desc = "A broken prism from a mending motor. Serviceable as a substitute for a vanguard cogwheel." + clockwork_desc = "A broken prism from a prolonging prism. Serviceable as a substitute for a vanguard cogwheel." icon_state = "onyx_prism" cultist_message = "The prism grows painfully hot in your hands." servant_of_ratvar_messages = list("The prism isn't getting any lighter." = FALSE, "\"So... you haven't failed yet. Have hope, child.\"" = TRUE, \ diff --git a/code/game/gamemodes/clock_cult/clock_items/clockwork_armor.dm b/code/game/gamemodes/clock_cult/clock_items/clockwork_armor.dm index 3b0c220b87..13cb65f081 100644 --- a/code/game/gamemodes/clock_cult/clock_items/clockwork_armor.dm +++ b/code/game/gamemodes/clock_cult/clock_items/clockwork_armor.dm @@ -37,7 +37,7 @@ user.visible_message("As [user] puts [src] on, it flickers off their head!", "The helmet flickers off your head, leaving only nausea!") if(iscarbon(user)) var/mob/living/carbon/C = user - C.vomit(20, 1, 1, 0, 1) + C.vomit(20) else to_chat(user, "\"Do you have a hole in your head? You're about to.\"") to_chat(user, "The helmet tries to drive a spike through your head as you scramble to remove it!") @@ -98,7 +98,7 @@ user.visible_message("As [user] puts [src] on, it flickers off their body!", "The curiass flickers off your body, leaving only nausea!") if(iscarbon(user)) var/mob/living/carbon/C = user - C.vomit(20, 1, 1, 0, 1) + C.vomit(20) else to_chat(user, "\"I think this armor is too hot for you to handle.\"") to_chat(user, "The curiass emits a burst of flame as you scramble to get it off!") @@ -159,7 +159,7 @@ user.visible_message("As [user] puts [src] on, it flickers off their arms!", "The gauntlets flicker off your arms, leaving only nausea!") if(iscarbon(user)) var/mob/living/carbon/C = user - C.vomit(10, 1, 1, 0, 1) + C.vomit() else to_chat(user, "\"Did you like having arms?\"") to_chat(user, "The gauntlets suddenly squeeze tight, crushing your arms before you manage to get them off!") @@ -209,7 +209,7 @@ user.visible_message("As [user] puts [src] on, it flickers off their feet!", "The treads flicker off your feet, leaving only nausea!") if(iscarbon(user)) var/mob/living/carbon/C = user - C.vomit(10, 1, 1, 0, 1) + C.vomit() else to_chat(user, "\"Let's see if you can dance with these.\"") to_chat(user, "The treads turn searing hot as you scramble to get them off!") diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm index c3e40692c2..5844b69413 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_applications.dm @@ -214,6 +214,38 @@ quickbind_desc = "Creates an Interdiction Lens, which drains power into nearby Sigils of Transmission." +//Prolonging Prism: Creates a prism that will delay the shuttle at a power cost +/datum/clockwork_scripture/create_object/prolonging_prism + descname = "Powered Structure, Delay Emergency Shuttles" + name = "Prolonging Prism" + desc = "Creates a mechanized prism which will delay the arrival of an emergency shuttle by 2 minutes at a massive power cost." + invocations = list("May this prism...", "...grant us time to enact his will!") + channel_time = 80 + consumed_components = list(VANGUARD_COGWHEEL = 5, GEIS_CAPACITOR = 2, REPLICANT_ALLOY = 2) + object_path = /obj/structure/destructible/clockwork/powered/prolonging_prism + creator_message = "You form a prolonging prism, which will delay the arrival of an emergency shuttle at a massive power cost." + observer_message = "An onyx prism forms in midair and sprouts tendrils to support itself!" + invokers_required = 2 + multiple_invokers_used = TRUE + usage_tip = "The power cost to delay a shuttle increases based on CV and the number of times activated." + tier = SCRIPTURE_APPLICATION + one_per_tile = TRUE + primary_component = VANGUARD_COGWHEEL + sort_priority = 7 + quickbind = TRUE + quickbind_desc = "Creates a Prolonging Prism, which will delay the arrival of an emergency shuttle by 2 minutes at a massive power cost." + +/datum/clockwork_scripture/create_object/prolonging_prism/check_special_requirements() + if(SSshuttle.emergency.mode == SHUTTLE_DOCKED || SSshuttle.emergency.mode == SHUTTLE_IGNITING || SSshuttle.emergency.mode == SHUTTLE_STRANDED || SSshuttle.emergency.mode == SHUTTLE_ESCAPE) + to_chat(invoker, "\"It is too late to construct one of these, champion.\"") + return FALSE + var/turf/T = get_turf(invoker) + if(!T || T.z != ZLEVEL_STATION) + to_chat(invoker, "\"You must be on the station to construct one of these, champion.\"") + return FALSE + return ..() + + //Mania Motor: Creates a malevolent transmitter that will broadcast the whispers of Sevtug into the minds of nearby nonservants, causing a variety of mental effects at a power cost. /datum/clockwork_scripture/create_object/mania_motor descname = "Powered Structure, Area Denial" diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm index b49b0c5819..2560e36cd4 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm @@ -122,8 +122,8 @@ /datum/clockwork_scripture/ranged_ability/geis_prep/run_scripture() var/servants = 0 if(!GLOB.ratvar_awakens) - for(var/mob/living/M in GLOB.all_clockwork_mobs) - if(ishuman(M) || issilicon(M)) + for(var/mob/living/M in GLOB.living_mob_list) + if(can_recite_scripture(M, TRUE)) servants++ if(servants > SCRIPT_SERVANT_REQ) whispered = FALSE @@ -153,8 +153,8 @@ /datum/clockwork_scripture/geis/run_scripture() var/servants = 0 if(!GLOB.ratvar_awakens) - for(var/mob/living/M in GLOB.all_clockwork_mobs) - if(ishuman(M) || issilicon(M)) + for(var/mob/living/M in GLOB.living_mob_list) + if(can_recite_scripture(M, TRUE)) servants++ if(target.buckled) target.buckled.unbuckle_mob(target, TRUE) diff --git a/code/game/gamemodes/clock_cult/clock_structures/prolonging_prism.dm b/code/game/gamemodes/clock_cult/clock_structures/prolonging_prism.dm new file mode 100644 index 0000000000..28cc82ff2e --- /dev/null +++ b/code/game/gamemodes/clock_cult/clock_structures/prolonging_prism.dm @@ -0,0 +1,140 @@ +//Prolonging Prism: A prism that consumes power to delay the shuttle +/obj/structure/destructible/clockwork/powered/prolonging_prism + name = "prolonging prism" + desc = "A dark onyx prism, held in midair by spiraling tendrils of stone." + clockwork_desc = "A powerful prism that will delay the arrival of an emergency shuttle." + icon_state = "prolonging_prism_inactive" + active_icon = "prolonging_prism" + inactive_icon = "prolonging_prism_inactive" + unanchored_icon = "prolonging_prism_unwrenched" + construction_value = 20 + max_integrity = 125 + obj_integrity = 125 + break_message = "The prism falls to the ground with a heavy thud!" + debris = list(/obj/item/clockwork/alloy_shards/small = 3, \ + /obj/item/clockwork/alloy_shards/medium = 1, \ + /obj/item/clockwork/alloy_shards/large = 1, \ + /obj/item/clockwork/component/vanguard_cogwheel/onyx_prism = 1) + var/static/list/component_refund = list(VANGUARD_COGWHEEL = 2, GEIS_CAPACITOR = 1, REPLICANT_ALLOY = 1) + var/static/delay_cost = 2500 + var/static/delay_cost_increase = 750 + var/static/delay_remaining = 0 + +/obj/structure/destructible/clockwork/powered/prolonging_prism/examine(mob/user) + ..() + if(is_servant_of_ratvar(user) || isobserver(user)) + if(SSshuttle.emergency.mode == SHUTTLE_DOCKED || SSshuttle.emergency.mode == SHUTTLE_IGNITING || SSshuttle.emergency.mode == SHUTTLE_STRANDED || SSshuttle.emergency.mode == SHUTTLE_ESCAPE) + to_chat(user, "An emergency shuttle has arrived and this prism is no longer useful; attempt to activate it to gain a partial refund of components used.") + else + var/efficiency = get_efficiency_mod() + var/efficiency_time = get_efficiency_mod(TRUE) + to_chat(user, "It requires at least [get_delay_cost() * efficiency]W of power to attempt to delay the arrival of an emergency shuttle by \ + [2 * efficiency_time] minutes.") + to_chat(user, "This cost increases by [delay_cost_increase * 0.1]W for every 10 CV and [delay_cost_increase]W for every previous \ + activation.") + +/obj/structure/destructible/clockwork/powered/prolonging_prism/forced_disable(bad_effects) + if(active) + if(bad_effects) + try_use_power(MIN_CLOCKCULT_POWER*4) + visible_message("[src] emits an airy chuckling sound and falls dark!") + toggle() + return TRUE + +/obj/structure/destructible/clockwork/powered/prolonging_prism/attack_hand(mob/living/user) + if(user.canUseTopic(src, !issilicon(user), NO_DEXTERY) && is_servant_of_ratvar(user)) + if(SSshuttle.emergency.mode == SHUTTLE_DOCKED || SSshuttle.emergency.mode == SHUTTLE_IGNITING || SSshuttle.emergency.mode == SHUTTLE_STRANDED || SSshuttle.emergency.mode == SHUTTLE_ESCAPE) + to_chat(user, "You break [src] apart, refunding some of the components used.") + for(var/i in component_refund) + generate_cache_component(i, src) + take_damage(max_integrity) + return 0 + if(active) + return 0 + var/turf/T = get_turf(src) + if(!T || T.z != ZLEVEL_STATION) + to_chat(user, "[src] must be on the station to function!") + return 0 + if(SSshuttle.emergency.mode != SHUTTLE_CALL) + to_chat(user, "No emergency shuttles are attempting to arrive at the station!") + return 0 + var/efficiency = get_efficiency_mod() + if(!try_use_power(get_delay_cost() * efficiency)) + to_chat(user, "[src] needs more power to function!") + return 0 + delay_cost += delay_cost_increase + delay_remaining += PRISM_DELAY_DURATION + toggle(0, user) + +/obj/structure/destructible/clockwork/powered/prolonging_prism/process() + var/turf/own_turf = get_turf(src) + if(SSshuttle.emergency.mode != SHUTTLE_CALL || delay_remaining <= 0 || !own_turf || own_turf.z != ZLEVEL_STATION) + forced_disable(FALSE) + return + . = ..() + var/delay_amount = 40 + delay_remaining -= delay_amount + var/efficiency = get_efficiency_mod() + SSshuttle.emergency.setTimer(SSshuttle.emergency.timeLeft(1) + (delay_amount * efficiency)) + var/highest_y + var/highest_x + var/lowest_y + var/lowest_x + var/list/prism_turfs = list() + for(var/t in SSshuttle.emergency.ripple_area(SSshuttle.getDock("emergency_home"))) + prism_turfs[t] = TRUE + var/turf/T = t + if(!highest_y || T.y > highest_y) + highest_y = T.y + if(!highest_x || T.x > highest_x) + highest_x = T.x + if(!lowest_y || T.y < lowest_y) + lowest_y = T.y + if(!lowest_x || T.x < lowest_x) + lowest_x = T.x + var/mean_y = Lerp(lowest_y, highest_y) + var/mean_x = Lerp(lowest_x, highest_x) + if(prob(50)) + mean_y = Ceiling(mean_y) + else + mean_y = Floor(mean_y) + if(prob(50)) + mean_x = Ceiling(mean_x) + else + mean_x = Floor(mean_x) + var/turf/semi_random_center_turf = locate(mean_x, mean_y, ZLEVEL_STATION) + for(var/t in getline(src, semi_random_center_turf)) + prism_turfs[t] = TRUE + var/placement_style = prob(50) + for(var/t in prism_turfs) + var/turf/T = t + if(placement_style) + if(IsOdd(T.x + T.y)) + seven_random_hexes(T, efficiency) + else if(prob(50 * efficiency)) + new /obj/effect/temp_visual/ratvar/prolonging_prism(T) + else + if(IsEven(T.x + T.y)) + seven_random_hexes(T, efficiency) + else if(prob(50 * efficiency)) + new /obj/effect/temp_visual/ratvar/prolonging_prism(T) + CHECK_TICK //we may be going over a hell of a lot of turfs + +/obj/structure/destructible/clockwork/powered/prolonging_prism/proc/get_delay_cost() + return Floor((GLOB.clockwork_construction_value * delay_cost_increase * 0.01) + delay_cost, MIN_CLOCKCULT_POWER) + +/obj/structure/destructible/clockwork/powered/prolonging_prism/proc/seven_random_hexes(turf/T, efficiency) + var/static/list/hex_states = list("prismhex1", "prismhex2", "prismhex3", "prismhex4", "prismhex5", "prismhex6", "prismhex7") + var/mutable_appearance/hex_combo + for(var/n in hex_states) //BUILD ME A HEXAGON + if(prob(50 * efficiency)) + if(!hex_combo) + hex_combo = mutable_appearance('icons/effects/64x64.dmi', n, RIPPLE_LAYER) + else + hex_combo.overlays += mutable_appearance('icons/effects/64x64.dmi', n, RIPPLE_LAYER) + if(hex_combo) //YOU BUILT A HEXAGON + hex_combo.pixel_x = -16 + hex_combo.pixel_y = -16 + hex_combo.mouse_opacity = 0 + hex_combo.plane = GAME_PLANE + new /obj/effect/temp_visual/ratvar/prolonging_prism(T, hex_combo) diff --git a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm b/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm index 722ff99c25..c0f149cdef 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm @@ -49,7 +49,7 @@ /obj/structure/destructible/clockwork/massive/ratvar/Bump(atom/A) var/turf/T = get_turf(A) if(T == loc) - T = get_step(A, A.dir) //please don't run into a window like a bird, ratvar + T = get_step(T, dir) //please don't run into a window like a bird, ratvar forceMove(T) /obj/structure/destructible/clockwork/massive/ratvar/Process_Spacemove() diff --git a/code/game/gamemodes/cult/cult_comms.dm b/code/game/gamemodes/cult/cult_comms.dm index 9620d30063..61ad770968 100644 --- a/code/game/gamemodes/cult/cult_comms.dm +++ b/code/game/gamemodes/cult/cult_comms.dm @@ -81,17 +81,12 @@ popup.open() return 1 -/mob/living/proc/cult_master() - set category = "Cultist" - set name = "Assert Leadership" - pollCultists(src) // This proc handles the distribution of cult master actions - /datum/action/innate/cult/mastervote name = "Assert Leadership" button_icon_state = "cultvote" /datum/action/innate/cult/mastervote/IsAvailable() - if(GLOB.cult_vote_called) + if(GLOB.cult_vote_called || !ishuman(owner)) return FALSE return ..() diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index f90d100724..e39887fca4 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -523,7 +523,7 @@ to_chat(M, "An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit.") M.Stun(5) sleep(30) - M.vomit(50) + M.vomit(10, distance = 5) if(ORION_TRAIL_FLUX) if(prob(75)) M.Weaken(3) diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 2d3765a934..7da4eb0a1c 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -250,7 +250,7 @@ GLOBAL_LIST_INIT(pipeID2State, list( if(istype(user, /mob/living/carbon)) var/mob/living/carbon/C = user for(var/i=1 to 20) - C.vomit(0,1,0,4,0) + C.vomit(0, TRUE, FALSE, 4, FALSE) if(prob(20)) C.spew_organ() sleep(5) diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index af5e04b5bd..e2becf458e 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -17,10 +17,12 @@ var/obj/effect/countdown/transformer/countdown var/mob/living/silicon/ai/masterAI -/obj/machinery/transformer/New() +/obj/machinery/transformer/Initialize() // On us - ..() + . = ..() + new /obj/machinery/conveyor/auto(locate(x - 1, y, z), WEST) new /obj/machinery/conveyor/auto(loc, WEST) + new /obj/machinery/conveyor/auto(locate(x + 1, y, z), WEST) countdown = new(src) countdown.start() @@ -116,19 +118,3 @@ if(R) R.SetLockdown(0) R.notify_ai(NEW_BORG) - -/obj/machinery/transformer/conveyor/New() - ..() - var/turf/T = loc - if(T) - // Spawn Conveyor Belts - - //East - var/turf/east = locate(T.x + 1, T.y, T.z) - if(isfloorturf(east)) - new /obj/machinery/conveyor/auto(east, WEST) - - // West - var/turf/west = locate(T.x - 1, T.y, T.z) - if(isfloorturf(west)) - new /obj/machinery/conveyor/auto(west, WEST) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index ba1717485e..3fe719c9f2 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -960,7 +960,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C /obj/item/seeds/cabbage = 3,/obj/item/seeds/carrot = 3,/obj/item/seeds/cherry = 3,/obj/item/seeds/chanter = 3, /obj/item/seeds/chili = 3,/obj/item/seeds/cocoapod = 3,/obj/item/seeds/coffee = 3,/obj/item/seeds/corn = 3, /obj/item/seeds/eggplant = 3,/obj/item/seeds/grape = 3,/obj/item/seeds/grass = 3,/obj/item/seeds/lemon = 3, - /obj/item/seeds/lime = 3,/obj/item/seeds/orange = 3,/obj/item/seeds/potato = 3,/obj/item/seeds/poppy = 3, + /obj/item/seeds/lime = 3,/obj/item/seeds/onion = 3,/obj/item/seeds/orange = 3,/obj/item/seeds/potato = 3,/obj/item/seeds/poppy = 3, /obj/item/seeds/pumpkin = 3,/obj/item/seeds/replicapod = 3,/obj/item/seeds/wheat/rice = 3,/obj/item/seeds/soya = 3,/obj/item/seeds/sunflower = 3, /obj/item/seeds/tea = 3,/obj/item/seeds/tobacco = 3,/obj/item/seeds/tomato = 3, /obj/item/seeds/tower = 3,/obj/item/seeds/watermelon = 3,/obj/item/seeds/wheat = 3,/obj/item/seeds/whitebeet = 3) diff --git a/code/game/objects/effects/temporary_visuals/clockcult.dm b/code/game/objects/effects/temporary_visuals/clockcult.dm index 1eae2a3c64..2f591daf19 100644 --- a/code/game/objects/effects/temporary_visuals/clockcult.dm +++ b/code/game/objects/effects/temporary_visuals/clockcult.dm @@ -146,6 +146,20 @@ pixel_y = rand(-10, 10) animate(src, alpha = 0, time = 3, easing = EASE_OUT) +/obj/effect/temp_visual/ratvar/prolonging_prism + icon = 'icons/effects/64x64.dmi' + icon_state = "prismhex1" + layer = RIPPLE_LAYER + pixel_y = -16 + pixel_x = -16 + duration = 30 + +/obj/effect/temp_visual/ratvar/prolonging_prism/Initialize(mapload, set_appearance) + . = ..() + if(set_appearance) + appearance = set_appearance + animate(src, alpha = 0, time = duration, easing = BOUNCE_EASING) + /obj/effect/temp_visual/ratvar/spearbreak icon = 'icons/effects/64x64.dmi' icon_state = "ratvarspearbreak" diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 64af889af6..381b69b44f 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -269,13 +269,15 @@ return if(!in_range(src, user)) return + if(is_cyborg) + return else if(zero_amount()) return //get amount from user var/min = 0 var/max = src.get_amount() - var/stackmaterial = round(input(user,"How many sheets do you wish to take out of this stack? (Maximum [max]") as num) + var/stackmaterial = round(input(user,"How many sheets do you wish to take out of this stack? (Maximum [max])") as num) if(stackmaterial == null || stackmaterial <= min || stackmaterial >= src.get_amount()) return else diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index 1cbbf37846..58fc87a490 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -125,8 +125,8 @@ obj/item/weapon/construction var/canRturf = 0 var/ranged = FALSE var/airlock_type = /obj/machinery/door/airlock + var/airlock_glass = FALSE // So the floor's rcd_act knows how much ammo to use var/window_type = /obj/structure/window/fulltile - var/advanced_airlock_setting = 1 //Set to 1 if you want more paintjobs available var/list/conf_access = null var/use_one_access = 0 //If the airlock should require ALL or only ONE of the listed accesses. @@ -266,8 +266,10 @@ obj/item/weapon/construction airlock_type = /obj/machinery/door/airlock/external if("High Security") airlock_type = /obj/machinery/door/airlock/highsecurity + airlock_glass = FALSE else airlock_type = /obj/machinery/door/airlock + airlock_glass = FALSE if("Glass") if(advanced_airlock_setting == 1) @@ -289,10 +291,13 @@ obj/item/weapon/construction airlock_type = /obj/machinery/door/airlock/glass_research if("Mining") airlock_type = /obj/machinery/door/airlock/glass_mining + airlock_glass = TRUE else airlock_type = /obj/machinery/door/airlock/glass + airlock_glass = TRUE else airlock_type = /obj/machinery/door/airlock + airlock_glass = FALSE /obj/item/weapon/construction/rcd/proc/rcd_create(atom/A, mob/user) diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm old mode 100644 new mode 100755 index 3a04008a98..8ea4e7a5d1 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -23,7 +23,7 @@ //variables for prebuilt flamethrowers var/create_full = FALSE var/create_with_tank = FALSE - var/igniter_type = /obj/item/device/assembly/igniter + var/igniter_type = /obj/item/device/assembly/igniter /obj/item/weapon/flamethrower/Destroy() if(weldtool) @@ -145,7 +145,7 @@ if(!status) to_chat(user, "Secure the igniter first!") return - to_chat(user, "You ignite [src]!") + to_chat(user, "You [lit ? "extinguish" : "ignite"] [src]!") lit = !lit if(lit) START_PROCESSING(SSobj, src) @@ -238,4 +238,4 @@ return /obj/item/device/assembly/igniter/proc/ignite_turf(obj/item/weapon/flamethrower/F,turf/open/location,release_amount = 0.05) - F.default_ignite(location,release_amount) \ No newline at end of file + F.default_ignite(location,release_amount) diff --git a/code/game/objects/items/weapons/inducer.dm b/code/game/objects/items/weapons/inducer.dm index fdd44795ad..c2a35feabf 100644 --- a/code/game/objects/items/weapons/inducer.dm +++ b/code/game/objects/items/weapons/inducer.dm @@ -128,6 +128,7 @@ user.visible_message("[user] recharged \the [A]!","You recharged \the [A]!") recharging = FALSE return TRUE + recharging = FALSE /obj/item/weapon/inducer/attack(mob/M, mob/user) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 09a076a293..c42c4bb3a5 100755 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -58,8 +58,8 @@ origin_tech = "materials=5;engineering=5;abductor=3" /obj/item/weapon/wrench/power - name = "Hand Drill" - desc ="A simple powered drill with a bolt bit" + name = "hand drill" + desc = "A simple powered hand drill. It's fitted with a bolt bit." icon_state = "drill_bolt" item_state = "drill" usesound = 'sound/items/drill_use.ogg' @@ -182,8 +182,8 @@ toolspeed = 0.1 /obj/item/weapon/screwdriver/power - name = "Hand Drill" - desc = "A simple hand drill with a screwdriver bit attached." + name = "hand drill" + desc = "A simple powered hand drill. It's fitted with a screw bit." icon_state = "drill_screw" item_state = "drill" materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) @@ -283,8 +283,8 @@ toolspeed = 0.5 /obj/item/weapon/wirecutters/power - name = "Jaws of Life" - desc = "A set of jaws of life, the magic of science has managed to fit it down into a device small enough to fit in a tool belt. It's fitted with a cutting head." + name = "jaws of life" + desc = "A set of jaws of life, compressed through the magic of science. It's fitted with a cutting head." icon_state = "jaws_cutter" item_state = "jawsoflife" origin_tech = "materials=2;engineering=2" @@ -714,8 +714,8 @@ toolspeed = 0.5 /obj/item/weapon/crowbar/power - name = "Jaws of Life" - desc = "A set of jaws of life, the magic of science has managed to fit it down into a device small enough to fit in a tool belt. It's fitted with a prying head" + name = "jaws of life" + desc = "A set of jaws of life, compressed through the magic of science. It's fitted with a prying head." icon_state = "jaws_pry" item_state = "jawsoflife" materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index e1531b4ef7..7068f3c2f2 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -234,6 +234,7 @@ throw_range = 3 hitsound = 'sound/items/trayhit1.ogg' hit_reaction_chance = 50 + materials = list(MAT_METAL = 2000) var/break_chance = 5 //Likely hood of smashing the chair. var/obj/structure/chair/origin_type = /obj/structure/chair @@ -317,6 +318,7 @@ max_integrity = 70 hitsound = 'sound/weapons/genhit1.ogg' origin_type = /obj/structure/chair/wood + materials = null break_chance = 50 /obj/item/chair/wood/narsie_act() diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 4b912923a2..1f6426753b 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -23,7 +23,9 @@ if(RCD_DECONSTRUCT) return list("mode" = RCD_DECONSTRUCT, "delay" = 20, "cost" = 5) if(RCD_WINDOWGRILLE) - return list("mode" = RCD_WINDOWGRILLE, "delay" = 40, "cost" = 10) + if(the_rcd.window_type == /obj/structure/window/reinforced/fulltile) + return list("mode" = RCD_WINDOWGRILLE, "delay" = 40, "cost" = 12) + else return list("mode" = RCD_WINDOWGRILLE, "delay" = 20, "cost" = 8) return FALSE /obj/structure/grille/rcd_act(mob/user, var/obj/item/weapon/construction/rcd/the_rcd, passed_mode) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 62d0adfef7..67dacc7b44 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -190,7 +190,7 @@ GLOBAL_LIST_EMPTY(crematoriums) // Make sure we don't delete the actual morgue and its tray var/list/conts = GetAllContents() - src - connected - if(conts.len <= 1) + if(!conts.len) audible_message("You hear a hollow crackle.") return diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index c1993677f3..2fb5b03aca 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -206,11 +206,13 @@ if(RCD_FLOORWALL) return list("mode" = RCD_FLOORWALL, "delay" = 20, "cost" = 16) if(RCD_AIRLOCK) - return list("mode" = RCD_AIRLOCK, "delay" = 50, "cost" = 16) + if(the_rcd.airlock_glass) + return list("mode" = RCD_AIRLOCK, "delay" = 50, "cost" = 20) + else return list("mode" = RCD_AIRLOCK, "delay" = 50, "cost" = 16) if(RCD_DECONSTRUCT) return list("mode" = RCD_DECONSTRUCT, "delay" = 50, "cost" = 33) if(RCD_WINDOWGRILLE) - return list("mode" = RCD_WINDOWGRILLE, "delay" = 40, "cost" = 4) + return list("mode" = RCD_WINDOWGRILLE, "delay" = 10, "cost" = 4) return FALSE /turf/open/floor/rcd_act(mob/user, obj/item/weapon/construction/rcd/the_rcd, passed_mode) diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index bac25e68c0..e25ce336bb 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -173,7 +173,10 @@ switch(the_rcd.mode) if(RCD_FLOORWALL) - return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 2) + var/obj/structure/lattice/L = locate(/obj/structure/lattice, src) + if(L) + return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 1) + else return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 3) return FALSE /turf/open/space/rcd_act(mob/user, obj/item/weapon/construction/rcd/the_rcd, passed_mode) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index cdfee917c2..ae47fd8e85 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -66,7 +66,10 @@ GLOBAL_LIST_INIT(admin_verbs_admin, world.AVerbsAdmin()) /client/proc/toggle_AI_interact, /*toggle admin ability to interact with machines as an AI*/ /client/proc/customiseSNPC, /* Customise any interactive crewmembers in the world */ /client/proc/resetSNPC, /* Resets any interactive crewmembers in the world */ - /client/proc/open_shuttle_manipulator /* Opens shuttle manipulator UI */ + /client/proc/open_shuttle_manipulator, /* Opens shuttle manipulator UI */ + /client/proc/deadchat, + /client/proc/toggleprayers, + /client/proc/toggleadminhelpsound ) GLOBAL_PROTECT(admin_verbs_ban) GLOBAL_LIST_INIT(admin_verbs_ban, list(/client/proc/unban_panel,/client/proc/DB_ban_panel,/client/proc/stickybanpanel)) diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index dcdf1538fe..badca3ec43 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -506,7 +506,7 @@ for(var/datum/mind/N in SSticker.mode.cult) var/mob/M = N.current if(M) - dat += "[M.real_name][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" + dat += "[M.real_name][N.has_antag_datum(ANTAG_DATUM_CULT_MASTER) ? " \[Master\]" : ""][M.client ? "" : " (No Client)"][M.stat == 2 ? " (DEAD)" : ""]" dat += "PM" dat += "FLW" dat += "" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index aba21d69f8..2f089e793b 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -480,7 +480,8 @@ if(minutes > GLOB.CMinutes) mins = minutes - GLOB.CMinutes mins = input(usr,"How long (in minutes)? (Default: 1440)","Ban time",mins ? mins : 1440) as num|null - if(!mins) + if(mins <= 0) + to_chat(usr, "[mins] is not a valid duration.") return minutes = GLOB.CMinutes + mins duration = GetExp(minutes) @@ -914,7 +915,8 @@ switch(alert("Temporary Ban?",,"Yes","No", "Cancel")) if("Yes") var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null - if(!mins) + if(mins <= 0) + to_chat(usr, "[mins] is not a valid duration.") return var/reason = input(usr,"Please State Reason.","Reason") as message|null if(!reason) @@ -1109,7 +1111,8 @@ switch(alert("Temporary Ban?",,"Yes","No", "Cancel")) if("Yes") var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null - if(!mins) + if(mins <= 0) + to_chat(usr, "[mins] is not a valid duration.") return var/reason = input(usr,"Please State Reason.","Reason") as message|null if(!reason) diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index 18e883d7f2..6f19cf90ee 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -612,8 +612,8 @@ GLOBAL_PROTECT(VVpixelmovement) if (O.vv_edit_var(variable, var_new) == FALSE) to_chat(src, "Your edit was rejected by the object.") return - log_world("### VarEdit by [src]: [O.type] [variable]=[html_encode("[O.vars[variable]]")]") - log_admin("[key_name(src)] modified [original_name]'s [variable] to [O.vars[variable]]") - var/msg = "[key_name_admin(src)] modified [original_name]'s [variable] to [O.vars[variable]]" + log_world("### VarEdit by [src]: [O.type] [variable]=[html_encode("[var_new]")]") + log_admin("[key_name(src)] modified [original_name]'s [variable] to [var_new]") + var/msg = "[key_name_admin(src)] modified [original_name]'s [variable] to [var_new]" message_admins(msg) admin_ticket_log(O, msg) \ No newline at end of file diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 2a039cd5bf..36b3e95d10 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -9,13 +9,16 @@ Pipes -> Pipelines Pipelines + Other Objects -> Pipe network */ +#define PIPE_VISIBLE_LEVEL 2 +#define PIPE_HIDDEN_LEVEL 1 + /obj/machinery/atmospherics anchored = 1 idle_power_usage = 0 active_power_usage = 0 power_channel = ENVIRON on_blueprints = TRUE - layer = GAS_PIPE_LAYER //under wires + layer = GAS_PIPE_HIDDEN_LAYER //under wires resistance_flags = FIRE_PROOF obj_integrity = 200 max_integrity = 200 diff --git a/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm b/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm index 0e9ad562de..e2850984bd 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm @@ -4,6 +4,7 @@ initialize_directions = SOUTH|NORTH use_power = 1 device_type = BINARY + layer = GAS_PUMP_LAYER /obj/machinery/atmospherics/components/binary/SetInitDirections() switch(dir) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/trinary_devices.dm b/code/modules/atmospherics/machinery/components/trinary_devices/trinary_devices.dm index ad9d80efc4..12f22c47bc 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/trinary_devices.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/trinary_devices.dm @@ -4,6 +4,7 @@ initialize_directions = SOUTH|NORTH|WEST use_power = 1 device_type = TRINARY + layer = GAS_FILTER_LAYER var/flipped = 0 diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 51e97eb5a4..f9eedade4c 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -7,6 +7,7 @@ obj_integrity = 350 max_integrity = 350 armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 30, acid = 30) + layer = ABOVE_WINDOW_LAYER var/on = FALSE state_open = FALSE @@ -155,7 +156,7 @@ var/turf/T = get_turf(src) if(occupant) var/mob/living/mob_occupant = occupant - if(mob_occupant.health >= 100) // Don't bother with fully healed people. + if(mob_occupant.health >= mob_occupant.getMaxHealth()) // Don't bother with fully healed people. on = FALSE update_icon() playsound(T, 'sound/machines/cryo_warning.ogg', volume) // Bug the doctors. diff --git a/code/modules/atmospherics/machinery/components/unary_devices/generator_input.dm b/code/modules/atmospherics/machinery/components/unary_devices/generator_input.dm index 15ae3eb88f..d1caa8d44b 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/generator_input.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/generator_input.dm @@ -4,7 +4,8 @@ density = 1 name = "generator input" - desc = "Placeholder" + desc = "An input for a generator." + layer = LOW_OBJ_LAYER var/update_cycle diff --git a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm index f0079a5962..30ff1ebc30 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm @@ -7,6 +7,8 @@ can_unwrench = 1 + layer = LOW_OBJ_LAYER + var/obj/machinery/atmospherics/components/unary/heat_exchanger/partner = null var/update_cycle diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index a03a6952c4..326e4794b6 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -16,6 +16,7 @@ var/datum/radio_frequency/radio_connection level = 1 + layer = GAS_SCRUBBER_LAYER /obj/machinery/atmospherics/components/unary/outlet_injector/Destroy() if(SSradio) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/oxygen_generator.dm b/code/modules/atmospherics/machinery/components/unary_devices/oxygen_generator.dm index 27d6c2296f..7853e2c4b3 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/oxygen_generator.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/oxygen_generator.dm @@ -7,6 +7,7 @@ dir = SOUTH initialize_directions = SOUTH + layer = GAS_SCRUBBER_LAYER var/on = 0 diff --git a/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm index 4b4122c654..8dee9dc8e7 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm @@ -7,6 +7,7 @@ var/obj/machinery/portable_atmospherics/connected_device use_power = 0 level = 0 + layer = GAS_FILTER_LAYER /obj/machinery/atmospherics/components/unary/portables_connector/New() ..() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/tank.dm b/code/modules/atmospherics/machinery/components/unary_devices/tank.dm index af070c4091..4ed7387b69 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/tank.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/tank.dm @@ -9,6 +9,7 @@ var/volume = 10000 //in liters, 1 meters by 1 meters by 2 meters density = 1 var/gas_type = 0 + layer = ABOVE_WINDOW_LAYER /obj/machinery/atmospherics/components/unary/tank/New() ..() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 26f02a43ef..1f9b119ce7 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -1,7 +1,8 @@ /obj/machinery/atmospherics/components/unary/thermomachine name = "thermomachine" desc = "Heats or cools gas in connected pipes." - icon_state = "cold_map" + icon = 'icons/obj/Cryogenic2.dmi' + icon_state = "freezer" var/icon_state_on = "cold_on" var/icon_state_open = "cold_off" density = TRUE @@ -9,7 +10,8 @@ obj_integrity = 300 max_integrity = 300 armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 80, acid = 30) - + layer = OBJ_LAYER + var/on = FALSE var/min_temperature = 0 var/max_temperature = 0 diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index 8edf06fbdf..04beaf28d2 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -13,6 +13,7 @@ can_unwrench = 1 welded = 0 level = 1 + layer = GAS_SCRUBBER_LAYER var/id_tag = null var/on = 0 diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index 87800e0b37..906e586bdd 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -11,6 +11,7 @@ can_unwrench = 1 welded = 0 level = 1 + layer = GAS_SCRUBBER_LAYER var/id_tag = null var/on = 0 diff --git a/code/modules/atmospherics/machinery/pipes/manifold.dm b/code/modules/atmospherics/machinery/pipes/manifold.dm index 106d169339..66b831c477 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold.dm @@ -38,13 +38,13 @@ //Colored pipes, use these for mapping /obj/machinery/atmospherics/pipe/manifold/general - name="pipe" /obj/machinery/atmospherics/pipe/manifold/general/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/manifold/general/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/manifold/scrubbers name="scrubbers pipe" @@ -52,10 +52,11 @@ color=rgb(255,0,0) /obj/machinery/atmospherics/pipe/manifold/scrubbers/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/manifold/supply name="air supply pipe" @@ -63,10 +64,11 @@ color=rgb(0,0,255) /obj/machinery/atmospherics/pipe/manifold/supply/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/manifold/supply/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/manifold/supplymain name="main air supply pipe" @@ -74,47 +76,96 @@ color=rgb(130,43,272) /obj/machinery/atmospherics/pipe/manifold/supplymain/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/manifold/yellow pipe_color=rgb(255,198,0) color=rgb(255,198,0) /obj/machinery/atmospherics/pipe/manifold/yellow/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/manifold/yellow/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/manifold/cyan pipe_color=rgb(0,256,249) color=rgb(0,256,249) /obj/machinery/atmospherics/pipe/manifold/cyan/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/manifold/cyan/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/manifold/green pipe_color=rgb(30,256,0) color=rgb(30,256,0) /obj/machinery/atmospherics/pipe/manifold/green/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/manifold/green/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/manifold/orange - pipe_color=rgb(255,127,39) - color=rgb(255,127,39) + pipe_color=rgb(255,129,25) + color=rgb(255,129,25) /obj/machinery/atmospherics/pipe/manifold/orange/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/manifold/orange/hidden - level = 1 \ No newline at end of file + level = PIPE_HIDDEN_LEVEL + +/obj/machinery/atmospherics/pipe/manifold/purple + pipe_color=rgb(128,0,182) + color=rgb(128,0,182) + +/obj/machinery/atmospherics/pipe/manifold/purple/visible + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER + +/obj/machinery/atmospherics/pipe/manifold/purple/hidden + level = PIPE_HIDDEN_LEVEL + +/obj/machinery/atmospherics/pipe/manifold/dark + pipe_color=rgb(69,69,69) + color=rgb(69,69,69) + +/obj/machinery/atmospherics/pipe/manifold/dark/visible + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER + +/obj/machinery/atmospherics/pipe/manifold/dark/hidden + level = PIPE_HIDDEN_LEVEL + +/obj/machinery/atmospherics/pipe/manifold/violet + pipe_color=rgb(64,0,128) + color=rgb(64,0,128) + +/obj/machinery/atmospherics/pipe/manifold/violet/visible + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER + +/obj/machinery/atmospherics/pipe/manifold/violet/hidden + level = PIPE_HIDDEN_LEVEL + +/obj/machinery/atmospherics/pipe/manifold/brown + pipe_color=rgb(178,100,56) + color=rgb(178,100,56) + +/obj/machinery/atmospherics/pipe/manifold/brown/visible + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER + +/obj/machinery/atmospherics/pipe/manifold/brown/hidden + level = PIPE_HIDDEN_LEVEL \ No newline at end of file diff --git a/code/modules/atmospherics/machinery/pipes/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/manifold4w.dm index b9624e89cb..1c969caa28 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold4w.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold4w.dm @@ -29,13 +29,13 @@ //Colored pipes, use these for mapping /obj/machinery/atmospherics/pipe/manifold4w/general - name="pipe" /obj/machinery/atmospherics/pipe/manifold4w/general/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/manifold4w/general/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/manifold4w/scrubbers name="scrubbers pipe" @@ -43,10 +43,12 @@ color=rgb(255,0,0) /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER + /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/manifold4w/supply name="air supply pipe" @@ -54,10 +56,11 @@ color=rgb(0,0,255) /obj/machinery/atmospherics/pipe/manifold4w/supply/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/manifold4w/supplymain name="main air supply pipe" @@ -65,47 +68,96 @@ color=rgb(130,43,272) /obj/machinery/atmospherics/pipe/manifold4w/supplymain/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/manifold4w/supplymain/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/manifold4w/yellow pipe_color=rgb(255,198,0) color=rgb(255,198,0) /obj/machinery/atmospherics/pipe/manifold4w/yellow/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/manifold4w/yellow/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/manifold4w/cyan pipe_color=rgb(0,256,249) color=rgb(0,256,249) /obj/machinery/atmospherics/pipe/manifold4w/cyan/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/manifold4w/cyan/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/manifold4w/green pipe_color=rgb(30,256,0) color=rgb(30,256,0) /obj/machinery/atmospherics/pipe/manifold4w/green/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/manifold4w/green/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/manifold4w/orange - pipe_color=rgb(255,127,39) - color=rgb(255,127,39) + pipe_color=rgb(255,129,25) + color=rgb(255,129,25) /obj/machinery/atmospherics/pipe/manifold4w/orange/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/manifold4w/orange/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL + +/obj/machinery/atmospherics/pipe/manifold4w/purple + pipe_color=rgb(128,0,182) + color=rgb(128,0,182) + +/obj/machinery/atmospherics/pipe/manifold4w/purple/visible + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER + +/obj/machinery/atmospherics/pipe/manifold4w/purple/hidden + level = PIPE_HIDDEN_LEVEL + +/obj/machinery/atmospherics/pipe/manifold4w/dark + pipe_color=rgb(69,69,69) + color=rgb(69,69,69) + +/obj/machinery/atmospherics/pipe/manifold4w/dark/visible + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER + +/obj/machinery/atmospherics/pipe/manifold4w/dark/hidden + level = PIPE_HIDDEN_LEVEL + +/obj/machinery/atmospherics/pipe/manifold4w/violet + pipe_color=rgb(64,0,128) + color=rgb(64,0,128) + +/obj/machinery/atmospherics/pipe/manifold4w/violet/visible + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER + +/obj/machinery/atmospherics/pipe/manifold4w/violet/hidden + level = PIPE_HIDDEN_LEVEL + +/obj/machinery/atmospherics/pipe/manifold4w/brown + pipe_color=rgb(178,100,56) + color=rgb(178,100,56) + +/obj/machinery/atmospherics/pipe/manifold4w/brown/visible + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER + +/obj/machinery/atmospherics/pipe/manifold4w/brown/hidden + level = PIPE_HIDDEN_LEVEL \ No newline at end of file diff --git a/code/modules/atmospherics/machinery/pipes/simple.dm b/code/modules/atmospherics/machinery/pipes/simple.dm index 984c006b74..5ac9ac31e6 100644 --- a/code/modules/atmospherics/machinery/pipes/simple.dm +++ b/code/modules/atmospherics/machinery/pipes/simple.dm @@ -40,13 +40,13 @@ The regular pipe you see everywhere, including bent ones. //Colored pipes, use these for mapping /obj/machinery/atmospherics/pipe/simple/general - name="pipe" /obj/machinery/atmospherics/pipe/simple/general/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/simple/general/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/simple/scrubbers name="scrubbers pipe" @@ -54,10 +54,11 @@ The regular pipe you see everywhere, including bent ones. color=rgb(255,0,0) /obj/machinery/atmospherics/pipe/simple/scrubbers/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/simple/supply name="air supply pipe" @@ -65,10 +66,11 @@ The regular pipe you see everywhere, including bent ones. color=rgb(0,0,255) /obj/machinery/atmospherics/pipe/simple/supply/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/simple/supply/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/simple/supplymain name="main air supply pipe" @@ -76,47 +78,96 @@ The regular pipe you see everywhere, including bent ones. color=rgb(130,43,272) /obj/machinery/atmospherics/pipe/simple/supplymain/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/simple/supplymain/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/simple/yellow pipe_color=rgb(255,198,0) color=rgb(255,198,0) /obj/machinery/atmospherics/pipe/simple/yellow/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/simple/yellow/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/simple/cyan pipe_color=rgb(0,256,249) color=rgb(0,256,249) /obj/machinery/atmospherics/pipe/simple/cyan/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/simple/cyan/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/simple/green pipe_color=rgb(30,256,0) color=rgb(30,256,0) /obj/machinery/atmospherics/pipe/simple/green/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/simple/green/hidden - level = 1 + level = PIPE_HIDDEN_LEVEL /obj/machinery/atmospherics/pipe/simple/orange - pipe_color=rgb(255,127,39) - color=rgb(255,127,39) + pipe_color=rgb(255,129,25) + color=rgb(255,129,25) /obj/machinery/atmospherics/pipe/simple/orange/visible - level = 2 + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER /obj/machinery/atmospherics/pipe/simple/orange/hidden - level = 1 \ No newline at end of file + level = PIPE_HIDDEN_LEVEL + +/obj/machinery/atmospherics/pipe/simple/purple + pipe_color=rgb(128,0,182) + color=rgb(128,0,182) + +/obj/machinery/atmospherics/pipe/simple/purple/visible + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER + +/obj/machinery/atmospherics/pipe/simple/purple/hidden + level = PIPE_HIDDEN_LEVEL + +/obj/machinery/atmospherics/pipe/simple/dark + pipe_color=rgb(69,69,69) + color=rgb(69,69,69) + +/obj/machinery/atmospherics/pipe/simple/dark/visible + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER + +/obj/machinery/atmospherics/pipe/simple/dark/hidden + level = PIPE_HIDDEN_LEVEL + +/obj/machinery/atmospherics/pipe/simple/violet + pipe_color=rgb(64,0,128) + color=rgb(64,0,128) + +/obj/machinery/atmospherics/pipe/simple/violet/visible + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER + +/obj/machinery/atmospherics/pipe/simple/violet/hidden + level = PIPE_HIDDEN_LEVEL + +/obj/machinery/atmospherics/pipe/simple/brown + pipe_color=rgb(178,100,56) + color=rgb(178,100,56) + +/obj/machinery/atmospherics/pipe/simple/brown/visible + level = PIPE_VISIBLE_LEVEL + layer = GAS_PIPE_VISIBLE_LAYER + +/obj/machinery/atmospherics/pipe/simple/brown/hidden + level = PIPE_HIDDEN_LEVEL \ No newline at end of file diff --git a/code/modules/cargo/exports/sheets.dm b/code/modules/cargo/exports/sheets.dm index 06f2d6d019..395fd3c305 100644 --- a/code/modules/cargo/exports/sheets.dm +++ b/code/modules/cargo/exports/sheets.dm @@ -69,7 +69,7 @@ // Plasteel. Lightweight, strong and contains some plasma too. /datum/export/stack/plasteel - cost = 85 + cost = 305 // 2000u of plasma + 2000u of metal. message = "of plasteel" export_types = list(/obj/item/stack/sheet/plasteel) diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 6c09b82402..4c3c6572a2 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -1249,13 +1249,13 @@ /datum/supply_pack/materials/plasteel20 name = "20 Plasteel Sheets" - cost = 3000 + cost = 7500 contains = list(/obj/item/stack/sheet/plasteel/twenty) crate_name = "plasteel sheets crate" /datum/supply_pack/materials/plasteel50 name = "50 Plasteel Sheets" - cost = 5000 + cost = 16500 contains = list(/obj/item/stack/sheet/plasteel/fifty) crate_name = "plasteel sheets crate" diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index d7fcd8a148..ea7f24e211 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -490,7 +490,7 @@ GLOBAL_LIST(external_rsc_urls) return if(!account_join_date) account_join_date = "Error" - var/datum/DBQuery/query_log_connection = SSdbcore.NewQuery("INSERT INTO `[format_table_name("connection_log")]` (`id`,`datetime`,`server_ip`,`server_port`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),COALESCE(INET_ATON('[world.internet_address]'), 0),'[world.port]','[sql_ckey]',INET_ATON('[sql_ip]'),'[sql_computerid]')") + var/datum/DBQuery/query_log_connection = SSdbcore.NewQuery("INSERT INTO `[format_table_name("connection_log")]` (`id`,`datetime`,`server_ip`,`server_port`,`ckey`,`ip`,`computerid`) VALUES(null,Now(),INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')),'[world.port]','[sql_ckey]',INET_ATON('[sql_ip]'),'[sql_computerid]')") query_log_connection.Execute() if(new_player) player_age = -1 diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 50eae80877..430e91a356 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -625,7 +625,7 @@ Gunshots/explosions/opening doors/less rare audio (done) else if(src.dir == WEST) del src.currentimage src.currentimage = new /image(left,src) - to_chat(my_target, currentimage) + SEND_IMAGE(my_target, currentimage) /obj/effect/fake_attacker/proc/attack_loop() @@ -669,7 +669,7 @@ Gunshots/explosions/opening doors/less rare audio (done) var/obj/effect/overlay/O = new/obj/effect/overlay(target.loc) O.name = "blood" var/image/I = image('icons/effects/blood.dmi',O,"floor[rand(1,7)]",O.dir,1) - to_chat(target, I) + SEND_IMAGE(target, I) QDEL_IN(O, 300) @@ -786,7 +786,6 @@ Gunshots/explosions/opening doors/less rare audio (done) new /obj/effect/hallucination/items_other(src.loc,src) if("sounds") //Strange audio - //to_chat(src, "Strange Audio") switch(rand(1,20)) if(1) playsound_local(null,'sound/machines/airlock.ogg', 15, 1) if(2) diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 95d3a7993b..5ab7f62d65 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -182,7 +182,7 @@ /obj/item/weapon/reagent_containers/food/snacks/proc/slice(accuracy, obj/item/weapon/W, mob/user) if((slices_num <= 0 || !slices_num) || !slice_path) //is the food sliceable? - return 0 + return FALSE if ( \ !isturf(src.loc) || \ @@ -191,7 +191,7 @@ !(locate(/obj/item/weapon/storage/bag/tray) in src.loc) \ ) to_chat(user, "You cannot slice [src] here! You need a table or at least a tray.") - return 1 + return FALSE var/slices_lost = 0 if (accuracy >= IS_SHARP_ACCURATE) @@ -211,6 +211,7 @@ var/obj/item/weapon/reagent_containers/food/snacks/slice = new slice_path (loc) initialize_slice(slice, reagents_per_slice) qdel(src) + return TRUE /obj/item/weapon/reagent_containers/food/snacks/proc/initialize_slice(obj/item/weapon/reagent_containers/food/snacks/slice, reagents_per_slice) slice.create_reagents(slice.volume) diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm index 7cfce5419d..3cce0f46c9 100644 --- a/code/modules/food_and_drinks/food/snacks_other.dm +++ b/code/modules/food_and_drinks/food/snacks_other.dm @@ -475,4 +475,13 @@ icon_state = "butter" list_reagents = list("nutriment" = 5) filling_color = "#FFD700" - tastes = list("butter" = 1) \ No newline at end of file + tastes = list("butter" = 1) + +/obj/item/weapon/reagent_containers/food/snacks/onionrings + name = "onion rings" + desc = "Onion slices coated in batter." + icon_state = "onionrings" + list_reagents = list("nutriment" = 3) + filling_color = "#C0C9A0" + gender = PLURAL + tastes = list("batter" = 3, "onion" = 1) \ No newline at end of file diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm index aa60840cd0..168dc120e0 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm @@ -15,8 +15,7 @@ var/max_n_of_items = 10 // whatever fat fuck made this a global var needs to look at themselves in the mirror sometime var/efficiency = 0 - -// see code/modules/food/recipes_microwave.dm for recipes +//Microwaving doesn't use recipes, instead it calls the microwave_act of the objects. For food, this creates something based on the food's cooked_type /******************* * Initialising diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm index 4a2f0948d9..14486a867e 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm @@ -126,8 +126,6 @@ input = /obj/item/weapon/reagent_containers/food/snacks/grown/parsnip output = /obj/item/weapon/reagent_containers/food/snacks/roastparsnip - - /* mobs */ /datum/food_processor_process/mob/process_food(loc, what, processor) ..() diff --git a/code/modules/hydroponics/grown/onion.dm b/code/modules/hydroponics/grown/onion.dm new file mode 100644 index 0000000000..07b7deea38 --- /dev/null +++ b/code/modules/hydroponics/grown/onion.dm @@ -0,0 +1,72 @@ +/obj/item/seeds/onion + name = "pack of onion seeds" + desc = "These seeds grow into onions." + icon_state = "seed-onion" + species = "onion" + plantname = "Onion Sprouts" + product = /obj/item/weapon/reagent_containers/food/snacks/grown/onion + lifespan = 20 + maturation = 3 + production = 4 + yield = 6 + endurance = 25 + growthstages = 3 + weed_chance = 3 + growing_icon = 'icons/obj/hydroponics/growing_vegetables.dmi' + reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1) + mutatelist = list(/obj/item/seeds/onion/red) + +/obj/item/weapon/reagent_containers/food/snacks/grown/onion + seed = /obj/item/seeds/onion + name = "onion" + desc = "Nothing to cry over." + icon_state = "onion" + filling_color = "#C0C9A0" + bitesize_mod = 2 + tastes = list("onions" = 1) + slice_path = /obj/item/weapon/reagent_containers/food/snacks/onion_slice + slices_num = 2 + +/obj/item/seeds/onion/red + name = "pack of red onion seeds" + desc = "For growing exceptionally potent onions." + icon_state = "seed-onionred" + species = "onion_red" + plantname = "Red Onion Sprouts" + weed_chance = 1 + product = /obj/item/weapon/reagent_containers/food/snacks/grown/onion/red + reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1, "tearjuice" = 0.05) + +/obj/item/weapon/reagent_containers/food/snacks/grown/onion/red + seed = /obj/item/seeds/onion/red + name = "red onion" + desc = "Purple despite the name." + icon_state = "onion_red" + filling_color = "#C29ACF" + slice_path = /obj/item/weapon/reagent_containers/food/snacks/onion_slice/red + +/obj/item/weapon/reagent_containers/food/snacks/grown/onion/slice(accuracy, obj/item/weapon/W, mob/user) + var/datum/effect_system/smoke_spread/chem/S = new //Since the onion is destroyed when it's sliced, + var/splat_location = get_turf(src) //we need to set up the smoke beforehand + S.attach(splat_location) + S.set_up(reagents, 0, splat_location, 0) + if(..()) + S.start() + return TRUE + qdel(S) + +/obj/item/weapon/reagent_containers/food/snacks/onion_slice + name = "onion slices" + desc = "Rings, not for wearing." + icon_state = "onionslice" + list_reagents = list("nutriment" = 5, "vitamin" = 2) + filling_color = "#C0C9A0" + gender = PLURAL + cooked_type = /obj/item/weapon/reagent_containers/food/snacks/onionrings + +/obj/item/weapon/reagent_containers/food/snacks/onion_slice/red + name = "red onion slices" + desc = "They shine like exceptionally low quality amethyst." + icon_state = "onionslice_red" + filling_color = "#C29ACF" + list_reagents = list("nutriment" = 5, "vitamin" = 2, "tearjuice" = 2.5) \ No newline at end of file diff --git a/code/modules/lighting/lighting_source.dm b/code/modules/lighting/lighting_source.dm index 63457a1ce9..dd5cd53690 100644 --- a/code/modules/lighting/lighting_source.dm +++ b/code/modules/lighting/lighting_source.dm @@ -270,6 +270,8 @@ source_turf.luminosity = Ceiling(light_range) for(T in view(Ceiling(light_range), source_turf)) for (thing in T.get_corners(source_turf)) + if(!thing) + continue C = thing corners[C] = 0 turfs += T @@ -291,6 +293,8 @@ LAZYINITLIST(effect_str) if (needs_update == LIGHTING_VIS_UPDATE) for (thing in corners - effect_str) // New corners + if(!thing) + continue C = thing LAZYADD(C.affecting, src) if (!C.active) @@ -300,6 +304,8 @@ else L = corners - effect_str for (thing in L) // New corners + if(!thing) + continue C = thing LAZYADD(C.affecting, src) if (!C.active) @@ -308,6 +314,8 @@ APPLY_CORNER(C) for (thing in corners - L) // Existing corners + if(!thing) + continue C = thing if (!C.active) effect_str[C] = 0 @@ -316,6 +324,8 @@ L = effect_str - corners for (thing in L) // Old, now gone, corners. + if(!thing) + continue C = thing REMOVE_CORNER(C) LAZYREMOVE(C.affecting, src) diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index ca6866c48e..49e89685ee 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -24,6 +24,8 @@ var/datum/lighting_corner/C var/thing for (thing in corners) + if(!thing) + continue C = thing C.update_active() @@ -45,6 +47,8 @@ var/datum/lighting_corner/C var/datum/light_source/S for (thing in corners) + if(!thing) + continue C = thing if (!C.active) // We would activate the corner, calculate the lighting for it. for (thing in C.affecting) @@ -61,6 +65,8 @@ var/thing var/datum/lighting_corner/L for (thing in corners) + if(!thing) + continue L = thing totallums += L.lum_r + L.lum_b + L.lum_g diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index fb3bbbd032..9d8b5aa5dd 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -1,3 +1,8 @@ + +#define GIBTONITE_QUALITY_HIGH 3 +#define GIBTONITE_QUALITY_MEDIUM 2 +#define GIBTONITE_QUALITY_LOW 1 + /**********************Mineral ores**************************/ /obj/item/weapon/ore @@ -184,10 +189,11 @@ item_state = "Gibtonite ore" w_class = WEIGHT_CLASS_BULKY throw_range = 0 - var/primed = 0 + var/primed = FALSE var/det_time = 100 - var/quality = 1 //How pure this gibtonite is, determines the explosion produced by it and is derived from the det_time of the rock wall it was taken from, higher value = better + var/quality = GIBTONITE_QUALITY_LOW //How pure this gibtonite is, determines the explosion produced by it and is derived from the det_time of the rock wall it was taken from, higher value = better var/attacher = "UNKNOWN" + var/det_timer /obj/item/weapon/twohanded/required/gibtonite/Destroy() qdel(wires) @@ -213,10 +219,12 @@ return if(primed) if(istype(I, /obj/item/device/mining_scanner) || istype(I, /obj/item/device/t_scanner/adv_mining_scanner) || istype(I, /obj/item/device/multitool)) - primed = 0 + primed = FALSE + if(det_timer) + deltimer(det_timer) user.visible_message("The chain reaction was stopped! ...The ore's quality looks diminished.", "You stopped the chain reaction. ...The ore's quality looks diminished.") icon_state = "Gibtonite ore" - quality = 1 + quality = GIBTONITE_QUALITY_LOW return ..() @@ -237,8 +245,8 @@ /obj/item/weapon/twohanded/required/gibtonite/proc/GibtoniteReaction(mob/user, triggered_by = 0) if(!primed) + primed = TRUE playsound(src,'sound/effects/hit_on_shattered_glass.ogg',50,1) - primed = 1 icon_state = "Gibtonite active" var/turf/bombturf = get_turf(src) var/area/A = get_area(bombturf) @@ -260,14 +268,18 @@ else user.visible_message("[user] strikes \the [src], causing a chain reaction!", "You strike \the [src], causing a chain reaction.") log_game("[key_name(user)] has primed a [name] for detonation at [A][COORD(bombturf)]") - if(primed) - if(quality == 3) - explosion(src.loc,2,4,9,adminlog = notify_admins) - if(quality == 2) - explosion(src.loc,1,2,5,adminlog = notify_admins) - if(quality == 1) - explosion(src.loc,-1,1,3,adminlog = notify_admins) - qdel(src) + det_timer = addtimer(CALLBACK(src, .proc/detonate, notify_admins), det_time, TIMER_STOPPABLE) + +/obj/item/weapon/twohanded/required/gibtonite/proc/detonate(notify_admins) + if(primed) + switch(quality) + if(GIBTONITE_QUALITY_HIGH) + explosion(src,2,4,9,adminlog = notify_admins) + if(GIBTONITE_QUALITY_MEDIUM) + explosion(src,1,2,5,adminlog = notify_admins) + if(GIBTONITE_QUALITY_LOW) + explosion(src,0,1,3,adminlog = notify_admins) + qdel(src) /obj/item/weapon/ore/Initialize() ..() diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index 493f50c97c..ec61f4f7fb 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -28,6 +28,11 @@ else return ..() +/obj/structure/ore_box/examine(mob/living/user) + if(Adjacent(user) && istype(user)) + show_contents(user) + . = ..() + /obj/structure/ore_box/attack_hand(mob/user) if(Adjacent(user)) show_contents(user) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 06145235a0..e72c8a10a1 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -379,10 +379,6 @@ return return TRUE -/mob/living/carbon/proc/is_mouth_covered(head_only = 0, mask_only = 0) - if( (!mask_only && head && (head.flags_cover & HEADCOVERSMOUTH)) || (!head_only && wear_mask && (wear_mask.flags_cover & MASKCOVERSMOUTH)) ) - return 1 - /mob/living/carbon/get_standard_pixel_y_offset(lying = 0) if(lying) return -6 @@ -450,7 +446,7 @@ return 0 return ..() -/mob/living/carbon/proc/vomit(var/lost_nutrition = 10, var/blood = 0, var/stun = 1, var/distance = 0, var/message = 1, var/toxic = 0) +/mob/living/carbon/proc/vomit(lost_nutrition = 10, blood = FALSE, stun = TRUE, distance = 1, message = TRUE, toxic = FALSE) if(dna && dna.species && NOHUNGER in dna.species.species_traits) return 1 @@ -476,6 +472,9 @@ playsound(get_turf(src), 'sound/effects/splat.ogg', 50, 1) var/turf/T = get_turf(src) + if(!blood) + nutrition -= lost_nutrition + adjustToxLoss(-3) for(var/i=0 to distance) if(blood) if(T) @@ -485,8 +484,6 @@ else if(T) T.add_vomit_floor(src, toxic)//toxic barf looks different - nutrition -= lost_nutrition - adjustToxLoss(-3) T = get_step(T, dir) if (is_blocked_turf(T)) break diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 57caa35c42..91e75034b4 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -35,6 +35,18 @@ number += E.bang_protect return number +/mob/living/carbon/is_mouth_covered(head_only = 0, mask_only = 0) + if( (!mask_only && head && (head.flags_cover & HEADCOVERSMOUTH)) || (!head_only && wear_mask && (wear_mask.flags_cover & MASKCOVERSMOUTH)) ) + return TRUE + +/mob/living/carbon/is_eyes_covered(check_glasses = 1, check_head = 1, check_mask = 1) + if(check_glasses && glasses && (glasses.flags_cover & GLASSESCOVERSEYES)) + return TRUE + if(check_head && head && (head.flags_cover & HEADCOVERSEYES)) + return TRUE + if(check_mask && wear_mask && (wear_mask.flags_cover & MASKCOVERSMOUTH)) + return TRUE + /mob/living/carbon/check_projectile_dismemberment(obj/item/projectile/P, def_zone) var/obj/item/bodypart/affecting = get_bodypart(def_zone) if(affecting && affecting.dismemberable && affecting.get_damage() >= (affecting.max_damage - P.dismemberment)) @@ -305,8 +317,9 @@ Weaken(stun_pwr*effect_amount) if(istype(ears) && (deafen_pwr || damage_pwr)) - ears.ear_damage += damage_pwr * effect_amount - ears.deaf = max(ears.deaf, deafen_pwr * effect_amount) + var/ear_damage = damage_pwr * effect_amount + var/deaf = max(ears.deaf, deafen_pwr * effect_amount) + adjustEarDamage(ear_damage,deaf) if(ears.ear_damage >= 15) to_chat(src, "Your ears start to ring badly!") diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 0620ebd062..e7cfd666de 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -66,12 +66,21 @@ var/obj/item/weapon/storage/wallet/wallet = wear_id var/obj/item/device/pda/pda = wear_id var/obj/item/weapon/card/id/id = wear_id + var/obj/item/device/modular_computer/tablet/tablet = wear_id if(istype(wallet)) id = wallet.front_id if(istype(id)) . = id.registered_name else if(istype(pda)) . = pda.owner + else if(istype(tablet)) + var/obj/item/weapon/computer_hardware/card_slot/card_slot = tablet.all_components[MC_CARD] + if(card_slot && (card_slot.stored_card2 || card_slot.stored_card)) + if(card_slot.stored_card2) //The second card is the one used for authorization in the ID changing program, so we prioritize it here for consistency + . = card_slot.stored_card2.registered_name + else + if(card_slot.stored_card) + . = card_slot.stored_card.registered_name if(!.) . = if_no_id //to prevent null-names making the mob unclickable return diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 7324e156a4..18c0c9ca4b 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -282,9 +282,9 @@ //Puke if toxloss is too high if(!stat) if(getToxLoss() >= 45 && nutrition > 20) - lastpuke ++ - if(lastpuke >= 25) // about 25 second delay I guess - vomit(20, 0, 1, 0, 1, 1) + lastpuke += prob(50) + if(lastpuke >= 50) // about 25 second delay I guess + vomit(20, toxic = TRUE) lastpuke = 0 diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index cf92de53e1..c1d26bb677 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1509,19 +1509,24 @@ // +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt. if(H.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !(RESISTHOT in species_traits)) //Body temperature is too hot. + var/burn_damage switch(H.bodytemperature) if(360 to 400) H.throw_alert("temp", /obj/screen/alert/hot, 1) - H.apply_damage(HEAT_DAMAGE_LEVEL_1*heatmod, BURN) + burn_damage = HEAT_DAMAGE_LEVEL_1 if(400 to 460) H.throw_alert("temp", /obj/screen/alert/hot, 2) - H.apply_damage(HEAT_DAMAGE_LEVEL_2*heatmod, BURN) + burn_damage = HEAT_DAMAGE_LEVEL_2 if(460 to INFINITY) H.throw_alert("temp", /obj/screen/alert/hot, 3) if(H.on_fire) - H.apply_damage(HEAT_DAMAGE_LEVEL_3*heatmod, BURN) + burn_damage = HEAT_DAMAGE_LEVEL_3 else - H.apply_damage(HEAT_DAMAGE_LEVEL_2*heatmod, BURN) + burn_damage = HEAT_DAMAGE_LEVEL_2 + burn_damage *= heatmod + if((prob(burn_damage) * 10) / 4) //40% for level 3 damage on humans + H.emote("scream") + H.apply_damage(burn_damage, BURN) else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !(GLOB.mutations_list[COLDRES] in H.dna.mutations)) switch(H.bodytemperature) if(200 to 260) diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm index 5c56a34a20..0718a1bfdc 100644 --- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm @@ -17,7 +17,7 @@ var/datum/reagent/consumable/nutri_check = chem if(nutri_check.nutriment_factor > 0) var/turf/pos = get_turf(H) - H.vomit(0, 0, 0, 1, 1) + H.vomit(0, FALSE, FALSE, 2, TRUE) playsound(pos, 'sound/effects/splat.ogg', 50, 1) H.visible_message("[H] vomits on the floor!", \ "You throw up on the floor!") diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index 239d901e5c..fb581f0239 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -8,20 +8,26 @@ meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOBLOOD,RADIMMUNE,NOZOMBIE,EASYDISMEMBER,EASYLIMBATTACHMENT) mutant_organs = list(/obj/item/organ/tongue/zombie) + var/static/list/spooks = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg') /datum/species/zombie/infectious name = "Infectious Zombie" id = "memezombies" limbs_id = "zombie" mutanthands = /obj/item/zombie_hand - no_equip = list(slot_wear_mask, slot_head) armor = 20 // 120 damage to KO a zombie, which kills it speedmod = 2 mutanteyes = /obj/item/organ/eyes/night_vision/zombie +/datum/species/zombie/infectious/spec_stun(mob/living/carbon/human/H,amount) + . = min(2, amount) + /datum/species/zombie/infectious/spec_life(mob/living/carbon/C) . = ..() C.a_intent = INTENT_HARM // THE SUFFERING MUST FLOW + C.heal_overall_damage(4,4) + if(prob(4)) + playsound(C, pick(spooks), 50, TRUE, 10) if(C.InCritical()) C.death() // Zombies only move around when not in crit, they instantly diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 839535f6c7..a05eb7b9d3 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -25,7 +25,7 @@ /mob/living/proc/getarmor(def_zone, type) return 0 -//this returns the mob's protection against eye damage (number between -1 and 2) +//this returns the mob's protection against eye damage (number between -1 and 2) from bright lights /mob/living/proc/get_eye_protection() return 0 @@ -33,6 +33,12 @@ /mob/living/proc/get_ear_protection() return 0 +/mob/living/proc/is_mouth_covered(head_only = 0, mask_only = 0) + return FALSE + +/mob/living/proc/is_eyes_covered(check_glasses = 1, check_head = 1, check_mask = 1) + return FALSE + /mob/living/proc/on_hit(obj/item/projectile/P) return diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 1608098ce7..6610c09968 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -171,7 +171,7 @@ var/icon/small_img = icon(temp_img) //Icon() is needed or else temp_img will be rescaled too >.> var/icon/ic = icon('icons/obj/items.dmi',"photo") small_img.Scale(8, 8) - ic.Blend(small_img,ICON_OVERLAY, 10, 13) + ic.Blend(small_img,ICON_OVERLAY, 13, 13) p.icon = ic toner -= 5 busy = 1 diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index e2447d6e4a..c5e18ccd5a 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -533,7 +533,6 @@ cut_overlays() if(displayed) add_overlay(getFlatIcon(displayed)) - add_overlay("frame-overlay") /obj/item/wallframe/picture/after_attach(obj/O) ..() @@ -591,13 +590,12 @@ /obj/structure/sign/picture_frame/attack_hand(mob/user) if(framed) - framed.show() + framed.show(user) /obj/structure/sign/picture_frame/update_icon() cut_overlays() if(framed) add_overlay(getFlatIcon(framed)) - add_overlay("frame-overlay") /obj/structure/sign/picture_frame/deconstruct(disassembled = TRUE) if(!(flags & NODECONSTRUCT)) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 34bf7b7f2f..5b00261fcf 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -33,7 +33,7 @@ By design, d1 is the smallest direction and d2 is the highest icon_state = "0-1" var/d1 = 0 // cable direction 1 (see above) var/d2 = 1 // cable direction 2 (see above) - layer = WIRE_LAYER //Above pipes, which are at GAS_PIPE_LAYER + layer = WIRE_LAYER //Above hidden pipes, GAS_PIPE_HIDDEN_LAYER var/cable_color = "red" var/obj/item/stack/cable_coil/stored diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index f5d62ba611..c200f75488 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -1,6 +1,6 @@ /obj/machinery/power/emitter - name = "Emitter" - desc = "A heavy duty industrial laser.\nAlt-click to rotate it clockwise." + name = "emitter" + desc = "A heavy-duty industrial laser, often used in containment fields and power generation.\nAlt-click to rotate it clockwise." icon = 'icons/obj/singularity.dmi' icon_state = "emitter" var/icon_state_on = "emitter_+a" diff --git a/code/modules/procedural_mapping/mapGenerators/repair.dm b/code/modules/procedural_mapping/mapGenerators/repair.dm index d568b83e80..3a344ac94a 100644 --- a/code/modules/procedural_mapping/mapGenerators/repair.dm +++ b/code/modules/procedural_mapping/mapGenerators/repair.dm @@ -6,7 +6,7 @@ /datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel/place(turf/T) if(isclosedturf(T) && !ignore_wall) return FALSE - return TRUE + return ..() /datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel/flatten ignore_wall = TRUE diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 550b27cd11..f0db6e5dba 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -532,6 +532,44 @@ color = "#DFDFDF" taste_description = "mayonnaise" +/datum/reagent/consumable/tearjuice + name = "Tear Juice" + id = "tearjuice" + description = "A blinding substance extracted from certain onions." + color = "#c0c9a0" + taste_description = "bitterness" + +/datum/reagent/consumable/tearjuice/reaction_mob(mob/living/M, method=TOUCH, reac_volume) + if(!istype(M)) + return + var/unprotected = FALSE + switch(method) + if(INGEST) + unprotected = TRUE + if(INJECT) + unprotected = FALSE + else //Touch or vapor + if(!M.is_mouth_covered() && !M.is_eyes_covered()) + unprotected = TRUE + if(unprotected) + if(!M.getorganslot("eye_sight")) //can't blind somebody with no eyes + to_chat(M, "Your eye sockets feel wet.") + else + if(!M.eye_blurry) + to_chat(M, "Tears well up in your eyes!") + M.blind_eyes(2) + M.blur_eyes(5) + ..() + +/datum/reagent/consumable/tearjuice/on_mob_life(mob/living/M) + ..() + if(M.eye_blurry) //Don't worsen vision if it was otherwise fine + M.blur_eyes(4) + if(prob(10)) + to_chat(M, "Your eyes sting!") + M.blind_eyes(2) + + ////Lavaland Flora Reagents//// diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 11db7e8d68..4ac608e680 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -662,7 +662,7 @@ .=..() if(current_cycle >=11 && prob(min(50,current_cycle)) && ishuman(M)) var/mob/living/carbon/human/H = M - H.vomit(lost_nutrition = 10, blood = prob(10), stun = prob(50), distance = rand(0,4), message = TRUE, toxic = prob(30)) + H.vomit(10, prob(10), prob(50), rand(0,4), TRUE, prob(30)) for(var/datum/reagent/toxin/R in M.reagents.reagent_list) if(R != src) H.reagents.remove_reagent(R.id,1) @@ -672,7 +672,7 @@ if(current_cycle >=33 && prob(15) && ishuman(M)) var/mob/living/carbon/human/H = M H.spew_organ() - H.vomit(lost_nutrition = 0, blood = 1, stun = 1, distance = 4) + H.vomit(0, TRUE, TRUE, 4) to_chat(H, "You feel something lumpy come up as you vomit.") /datum/reagent/toxin/curare diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index be13516d3c..b7029ab3ad 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -55,7 +55,7 @@ /obj/structure/reagent_dispensers/watertank/high name = "high-capacity water tank" - desc = "A highly-pressurized water tank made to hold gargantuan amounts of water.." + desc = "A highly pressurized water tank made to hold gargantuan amounts of water." icon_state = "water_high" //I was gonna clean my room... tank_volume = 100000 @@ -107,7 +107,7 @@ reagents.trans_to(W, W.max_fuel) user.visible_message("[user] refills [user.p_their()] [W.name].", "You refill [W].") playsound(src, 'sound/effects/refill.ogg', 50, 1) - update_icon() + W.update_icon() else user.visible_message("[user] catastrophically fails at refilling [user.p_their()] [W.name]!", "That was stupid of you.") var/message_admins = "[key_name_admin(user)] triggered a fueltank explosion via welding tool." diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index a8527f035b..edccdbf0f9 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -763,7 +763,6 @@ name = "Flash" desc = "When a problem arises, SCIENCE is the solution." id = "sflash" - req_tech = list("magnets" = 3, "combat" = 2) build_type = MECHFAB materials = list(MAT_METAL = 750, MAT_GLASS = 750) construction_time = 100 diff --git a/code/modules/research/designs/smelting_designs.dm b/code/modules/research/designs/smelting_designs.dm index 9367b38da7..5c9c0f6831 100644 --- a/code/modules/research/designs/smelting_designs.dm +++ b/code/modules/research/designs/smelting_designs.dm @@ -4,7 +4,7 @@ name = "Plasma + Iron alloy" id = "plasteel" build_type = SMELTER - materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT / 2, MAT_PLASMA = MINERAL_MATERIAL_AMOUNT / 2) + materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT, MAT_PLASMA = MINERAL_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/plasteel category = list("initial") @@ -13,7 +13,7 @@ name = "Plasma + Titanium alloy" id = "plastitanium" build_type = SMELTER - materials = list(MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT / 2, MAT_PLASMA = MINERAL_MATERIAL_AMOUNT / 2) + materials = list(MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT, MAT_PLASMA = MINERAL_MATERIAL_AMOUNT) build_path = /obj/item/stack/sheet/mineral/plastitanium category = list("initial") diff --git a/code/modules/server_tools/server_tools.dm b/code/modules/server_tools/server_tools.dm index b14ba065eb..05c36930ad 100644 --- a/code/modules/server_tools/server_tools.dm +++ b/code/modules/server_tools/server_tools.dm @@ -5,7 +5,7 @@ GLOBAL_PROTECT(reboot_mode) return params[SERVICE_WORLD_PARAM] /world/proc/ExportService(command) - return shell("python code/modules/server_tools/nudge.py \"[command]\"") == 0 + return RunningService() && shell("python code/modules/server_tools/nudge.py \"[command]\"") == 0 /world/proc/IRCBroadcast(msg) ExportService("[SERVICE_REQUEST_IRC_BROADCAST] [msg]") diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index a166be04a4..37d4a72276 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -277,7 +277,7 @@ else if((findtext(message, vomit_words))) cooldown = COOLDOWN_STUN for(var/mob/living/carbon/C in listeners) - C.vomit(10 * power_multiplier) + C.vomit(10 * power_multiplier, distance = power_multiplier) //SILENCE else if((findtext(message, silence_words))) diff --git a/html/changelogs/AutoChangeLog-pr-1463.yml b/html/changelogs/AutoChangeLog-pr-1463.yml new file mode 100644 index 0000000000..4bd1dafa91 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1463.yml @@ -0,0 +1,4 @@ +author: "QualityVan" +delete-after: True +changes: + - rscdel: "Cyborgs can no longer alt-click their material stacks to split them" diff --git a/html/changelogs/AutoChangeLog-pr-1464.yml b/html/changelogs/AutoChangeLog-pr-1464.yml new file mode 100644 index 0000000000..eef63289ff --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1464.yml @@ -0,0 +1,4 @@ +author: "QualityVan" +delete-after: True +changes: + - bugfix: "Cremators now still work when there's only one thing in them" diff --git a/html/changelogs/AutoChangeLog-pr-1465.yml b/html/changelogs/AutoChangeLog-pr-1465.yml new file mode 100644 index 0000000000..148ba9dacd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1465.yml @@ -0,0 +1,4 @@ +author: "QualityVan" +delete-after: True +changes: + - bugfix: "The ORM now uses the intended amount of resources when making alloys" diff --git a/html/changelogs/AutoChangeLog-pr-1469.yml b/html/changelogs/AutoChangeLog-pr-1469.yml new file mode 100644 index 0000000000..40807e7224 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1469.yml @@ -0,0 +1,4 @@ +author: "oranges" +delete-after: True +changes: + - rscadd: "Added stungloves to the brain damage lines" diff --git a/html/changelogs/AutoChangeLog-pr-1472.yml b/html/changelogs/AutoChangeLog-pr-1472.yml new file mode 100644 index 0000000000..c86699c300 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1472.yml @@ -0,0 +1,5 @@ +author: "Joan" +delete-after: True +changes: + - rscadd: "Added Prolonging Prism as an application scripture. +balance: Prolonging Prism will delay the arrival of an emergency shuttle by 2 minutes at the cost of 2500W of power plus 75W for every 10 CV and 750W for every previous activation. In addition to the high cost, it very obviously affects the shuttle dock and leaves an obvious trail to the prism." diff --git a/html/changelogs/AutoChangeLog-pr-1579.yml b/html/changelogs/AutoChangeLog-pr-1579.yml new file mode 100644 index 0000000000..e4c9b97693 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1579.yml @@ -0,0 +1,4 @@ +author: "Tacolizard" +delete-after: True +changes: + - bugfix: "Flamethrowers no longer say they're being ignited when you extinguish them" diff --git a/html/changelogs/AutoChangeLog-pr-1619.yml b/html/changelogs/AutoChangeLog-pr-1619.yml new file mode 100644 index 0000000000..7ba55f1784 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1619.yml @@ -0,0 +1,4 @@ +author: "MrStonedOne and Lummox JR" +delete-after: True +changes: + - bugfix: "Fixed icon scaling and size preferences not loading (Technically size preferences were loading because byond saves that locally, but that's not reliable because ss13 shares a hub)" diff --git a/html/changelogs/AutoChangeLog-pr-1627.yml b/html/changelogs/AutoChangeLog-pr-1627.yml new file mode 100644 index 0000000000..83ff3839ef --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1627.yml @@ -0,0 +1,4 @@ +author: "Joan" +delete-after: True +changes: + - rscdel: "Cultists must be human to run for Cult Master status." diff --git a/html/changelogs/AutoChangeLog-pr-1629.yml b/html/changelogs/AutoChangeLog-pr-1629.yml new file mode 100644 index 0000000000..0e38b47fdf --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1629.yml @@ -0,0 +1,5 @@ +author: "Xhuis" +delete-after: True +changes: + - spellcheck: "The names of the hand drill, jaws of life, and emitter are now lowercase." + - spellcheck: "The descriptions of the hand drill, jaws of life, and emitter have been changed to be more descriptive and less lengthy." diff --git a/html/changelogs/AutoChangeLog-pr-1634.yml b/html/changelogs/AutoChangeLog-pr-1634.yml new file mode 100644 index 0000000000..a9aa70e1fc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1634.yml @@ -0,0 +1,4 @@ +author: "QualityVan" +delete-after: True +changes: + - rscadd: "The botany vending machine now has a stock of onion seeds" diff --git a/html/changelogs/AutoChangeLog-pr-1635.yml b/html/changelogs/AutoChangeLog-pr-1635.yml new file mode 100644 index 0000000000..babfac7849 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1635.yml @@ -0,0 +1,4 @@ +author: "Tacolizard" +delete-after: True +changes: + - rscdel: "Flashes no longer have a tech requirement" diff --git a/html/changelogs/AutoChangeLog-pr-1639.yml b/html/changelogs/AutoChangeLog-pr-1639.yml new file mode 100644 index 0000000000..b85743479e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1639.yml @@ -0,0 +1,4 @@ +author: "optional name here" +delete-after: True +changes: + - bugfix: "Cryo cells work properly on mobs with varying max health values." diff --git a/html/changelogs/AutoChangeLog-pr-1645.yml b/html/changelogs/AutoChangeLog-pr-1645.yml new file mode 100644 index 0000000000..c505c6e736 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1645.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - tweak: "NT now provides education on the proper response for experiencing the excrutiating pain of varying degree burns (You scream when burning)" diff --git a/html/changelogs/AutoChangeLog-pr-1646.yml b/html/changelogs/AutoChangeLog-pr-1646.yml new file mode 100644 index 0000000000..b25886e9ce --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1646.yml @@ -0,0 +1,8 @@ +author: "RandomMarine" +delete-after: True +changes: + - tweak: "RCDs now always use matter consistent with the material needed when building." + - tweak: "Floors now cost 3 or 1 matter to build, based on if a lattice exists on the tile." + - tweak: "Reinforced windows cost 12 matter. Normal windows cost 8 matter. (Both up/down from 10)" + - tweak: "Glass airlocks cost 20 matter." + - tweak: "RCDs are faster at building grilles and plain glass windows." diff --git a/html/changelogs/AutoChangeLog-pr-1650.yml b/html/changelogs/AutoChangeLog-pr-1650.yml new file mode 100644 index 0000000000..6200fd1c5b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1650.yml @@ -0,0 +1,4 @@ +author: "Xhuis" +delete-after: True +changes: + - rscadd: "Tablets with IDs in them now show the ID's name when examining someone with that tablet in their ID slot, similar to a PDA would." diff --git a/html/changelogs/AutoChangeLog-pr-1654.yml b/html/changelogs/AutoChangeLog-pr-1654.yml new file mode 100644 index 0000000000..4d2a21b60a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1654.yml @@ -0,0 +1,4 @@ +author: "optional name here" +delete-after: True +changes: + - bugfix: "Puny windows will no longer stop the progress of Ratvar." diff --git a/html/changelogs/AutoChangeLog-pr-1655.yml b/html/changelogs/AutoChangeLog-pr-1655.yml new file mode 100644 index 0000000000..e3ad6e3ca2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1655.yml @@ -0,0 +1,4 @@ +author: "Jay" +delete-after: True +changes: + - tweak: "Increases round time to a total of three hours. Two and a half before the call then another fifteen for the shuttle to arrive totaling at three." diff --git a/html/changelogs/AutoChangeLog-pr-1658.yml b/html/changelogs/AutoChangeLog-pr-1658.yml new file mode 100644 index 0000000000..24b5ee810a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-1658.yml @@ -0,0 +1,4 @@ +author: "optional name here" +delete-after: True +changes: + - rscadd: "1D4 into Lavaland Mining base crate." diff --git a/icons/effects/64x64.dmi b/icons/effects/64x64.dmi index 361cfff40c..d80b077988 100644 Binary files a/icons/effects/64x64.dmi and b/icons/effects/64x64.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index e7c0e8d263..863f447e93 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/icons/obj/hydroponics/growing_vegetables.dmi b/icons/obj/hydroponics/growing_vegetables.dmi index 070d3531a2..9fc1520175 100644 Binary files a/icons/obj/hydroponics/growing_vegetables.dmi and b/icons/obj/hydroponics/growing_vegetables.dmi differ diff --git a/icons/obj/hydroponics/harvest.dmi b/icons/obj/hydroponics/harvest.dmi index 55a06a36fa..0aff0a2cbd 100644 Binary files a/icons/obj/hydroponics/harvest.dmi and b/icons/obj/hydroponics/harvest.dmi differ diff --git a/icons/obj/hydroponics/seeds.dmi b/icons/obj/hydroponics/seeds.dmi index 34c2c270a8..18bd0cc4e9 100644 Binary files a/icons/obj/hydroponics/seeds.dmi and b/icons/obj/hydroponics/seeds.dmi differ diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index 3c39e386b2..3757957d9a 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ diff --git a/interface/menu.dm b/interface/menu.dm index b85af86fb4..c49067391e 100644 --- a/interface/menu.dm +++ b/interface/menu.dm @@ -68,10 +68,11 @@ GLOBAL_LIST_EMPTY(menulist) var/atom/verb/verbpath = Get_checked(C) if (!verbpath || !(verbpath in typesof("[type]/verb"))) return + if (copytext(verbpath.name,1,2) == "@") - winset(C, null, "command = [copytext(verbpath.name,2)]") + winset(C, null, list2params(list("command" = copytext(verbpath.name,2)))) else - winset(C, null, "command = [replacetext(verbpath.name, " ", "-")]") + winset(C, null, list2params(list("command" = replacetext(verbpath.name, " ", "-")))) /datum/verbs/menu/Icon/Size checkbox = CHECKBOX_GROUP diff --git a/strings/brain_damage_lines.json b/strings/brain_damage_lines.json index 8312ad3095..ce3e726dbc 100644 --- a/strings/brain_damage_lines.json +++ b/strings/brain_damage_lines.json @@ -111,7 +111,8 @@ "kamelien", "eksrey", "glowey skin", - "fungal tb" + "fungal tb", + "stun gloves" ], "george": [ diff --git a/tgstation.dme b/tgstation.dme index 11a60bddb3..c796ed4e6b 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -469,6 +469,7 @@ #include "code\game\gamemodes\clock_cult\clock_structures\interdiction_lens.dm" #include "code\game\gamemodes\clock_cult\clock_structures\mania_motor.dm" #include "code\game\gamemodes\clock_cult\clock_structures\ocular_warden.dm" +#include "code\game\gamemodes\clock_cult\clock_structures\prolonging_prism.dm" #include "code\game\gamemodes\clock_cult\clock_structures\ratvar_the_clockwork_justicar.dm" #include "code\game\gamemodes\clock_cult\clock_structures\taunting_trail.dm" #include "code\game\gamemodes\clock_cult\clock_structures\tinkerers_cache.dm" @@ -1423,6 +1424,7 @@ #include "code\modules\hydroponics\grown\misc.dm" #include "code\modules\hydroponics\grown\mushrooms.dm" #include "code\modules\hydroponics\grown\nettle.dm" +#include "code\modules\hydroponics\grown\onion.dm" #include "code\modules\hydroponics\grown\potato.dm" #include "code\modules\hydroponics\grown\pumpkin.dm" #include "code\modules\hydroponics\grown\random.dm" diff --git a/tools/github_webhook_processor.php b/tools/github_webhook_processor.php index c2f888603a..e9cd6af2fb 100644 --- a/tools/github_webhook_processor.php +++ b/tools/github_webhook_processor.php @@ -216,7 +216,7 @@ function handle_pr($payload) { return; } - $msg = 'Pull Request '.$action.' by '.htmlSpecialChars($payload['sender']['login']).': '.htmlSpecialChars('#'.$payload['pull_request']['number'].' '.$payload['pull_request']['user']['login'].' - '.$payload['pull_request']['title']).''; + $msg = '['.$payload['pull_request']['base']['repo']['full_name'].'] Pull Request '.$action.' by '.htmlSpecialChars($payload['sender']['login']).': '.htmlSpecialChars('#'.$payload['pull_request']['number'].' '.$payload['pull_request']['user']['login'].' - '.$payload['pull_request']['title']).''; sendtoallservers('?announce='.urlencode($msg), $payload); }