diff --git a/_maps/RandomRuins/StationRuins/maint/10x10/10x10_fishinghole.dmm b/_maps/RandomRuins/StationRuins/maint/10x10/10x10_fishinghole.dmm new file mode 100644 index 000000000000..277d2d79154d --- /dev/null +++ b/_maps/RandomRuins/StationRuins/maint/10x10/10x10_fishinghole.dmm @@ -0,0 +1,648 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ag" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/stool/bamboo, +/turf/open/floor/plasteel/cafeteria, +/area/template_noop) +"ak" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/lootdrop/trashbin, +/obj/effect/turf_decal/pool, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/wood, +/area/template_noop) +"bv" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/pool{ + dir = 1 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/wood, +/area/template_noop) +"eW" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/pool{ + dir = 1 + }, +/turf/open/floor/wood, +/area/template_noop) +"hn" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/stool/bamboo, +/obj/structure/chair/stool/bamboo, +/turf/open/floor/plasteel/cafeteria, +/area/template_noop) +"kF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/green/filled/line, +/turf/open/floor/plasteel/white, +/area/template_noop) +"lf" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/pool{ + dir = 8 + }, +/obj/structure/railing/corner, +/turf/open/floor/wood, +/area/template_noop) +"li" = ( +/turf/open/water/safe, +/area/template_noop) +"nH" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/broken, +/obj/machinery/vending/dinnerware, +/turf/open/floor/plasteel/blackwhite, +/area/template_noop) +"of" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/lootdrop/trashbin, +/turf/open/floor/plasteel/blackwhite, +/area/template_noop) +"oW" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/wood, +/area/template_noop) +"pj" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/green/filled/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/template_noop) +"qR" = ( +/obj/effect/spawner/lootdrop/trashbin, +/turf/open/water/safe, +/area/template_noop) +"rS" = ( +/obj/effect/decal/cleanable/vomit/old, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/cafeteria, +/area/template_noop) +"sb" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/lootdrop/maintenance, +/obj/structure/railing, +/turf/open/floor/wood, +/area/template_noop) +"tg" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/twohanded/fishingrod, +/obj/structure/rack, +/obj/item/poster/random_contraband, +/obj/item/picket_sign, +/obj/item/picket_sign, +/obj/item/picket_sign, +/obj/item/picket_sign, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel/checker, +/area/template_noop) +"tw" = ( +/obj/machinery/griddle, +/obj/item/reagent_containers/food/snacks/deadmouse, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/blackwhite, +/area/template_noop) +"tO" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table/glass, +/turf/open/floor/plasteel/cafeteria, +/area/template_noop) +"uj" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/table/glass, +/turf/open/floor/plasteel/cafeteria, +/area/template_noop) +"vX" = ( +/obj/effect/decal/cleanable/vomit/old, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/template_noop) +"wk" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/template_noop) +"xi" = ( +/obj/item/reagent_containers/food/snacks/fish/goldfish{ + bitecount = 0; + length = 1; + weight = 2 + }, +/obj/effect/decal/cleanable/blood/footprints{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/pool{ + dir = 4 + }, +/turf/open/floor/wood, +/area/template_noop) +"xG" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/grill, +/turf/open/floor/plasteel/blackwhite, +/area/template_noop) +"yw" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/pool{ + dir = 4 + }, +/turf/open/floor/wood, +/area/template_noop) +"zC" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/turf/open/floor/plasteel/blackwhite, +/area/template_noop) +"AR" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/blackwhite, +/area/template_noop) +"BO" = ( +/obj/machinery/smartfridge/food, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/reagent_containers/food/snacks/carpmeat/fish, +/obj/item/reagent_containers/food/snacks/carpmeat/fish, +/obj/item/reagent_containers/food/snacks/carpmeat/fish, +/obj/item/reagent_containers/food/snacks/carpmeat/fish, +/turf/open/floor/plasteel/blackwhite, +/area/template_noop) +"Cj" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/cafeteria, +/area/template_noop) +"Ei" = ( +/obj/machinery/vending/fishing, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/broken{ + dir = 1 + }, +/turf/open/floor/plasteel/checker, +/area/template_noop) +"ED" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/pool/corner, +/obj/structure/railing/corner, +/turf/open/floor/wood, +/area/template_noop) +"EH" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/smartfridge/drying_rack, +/turf/open/floor/plasteel/checker, +/area/template_noop) +"EQ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/vending/cola/random{ + tilted = 1 + }, +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, +/turf/open/floor/plasteel/white, +/area/template_noop) +"FV" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/wood, +/area/template_noop) +"GH" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/turf/open/floor/plasteel/checker, +/area/template_noop) +"GJ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/pool/corner{ + dir = 4 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/wood, +/area/template_noop) +"GL" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/cafeteria, +/area/template_noop) +"He" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/turf/open/floor/plasteel/white, +/area/template_noop) +"Ig" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/pool{ + dir = 1 + }, +/obj/structure/railing/corner, +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/wood, +/area/template_noop) +"JM" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/blackwhite, +/area/template_noop) +"Ke" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/template_noop) +"KU" = ( +/obj/effect/landmark/blobstart, +/turf/open/water/safe, +/area/template_noop) +"LT" = ( +/obj/structure/rack, +/obj/item/radio, +/obj/item/relic, +/obj/item/twohanded/fishingrod, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/template_noop) +"Mq" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/blood/gibs/old, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/pool/corner{ + dir = 1 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/wood, +/area/template_noop) +"Mw" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/turf/open/floor/plasteel/white, +/area/template_noop) +"MA" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/turf_decal/pool, +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/railing/corner, +/turf/open/floor/wood, +/area/template_noop) +"MI" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/twohanded/fishingrod, +/obj/structure/rack, +/obj/item/pet_carrier, +/turf/open/floor/plasteel/checker, +/area/template_noop) +"Ng" = ( +/obj/machinery/smartfridge/drinks, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light{ + dir = 8 + }, +/obj/item/reagent_containers/food/drinks/beer/stout, +/obj/item/reagent_containers/food/drinks/beer/light, +/obj/item/reagent_containers/food/drinks/beer/light, +/obj/item/reagent_containers/food/drinks/beer/light, +/obj/item/reagent_containers/food/drinks/beer/light, +/obj/item/reagent_containers/food/drinks/beer/light, +/obj/item/reagent_containers/food/drinks/beer/light, +/obj/item/reagent_containers/food/drinks/beer/light, +/obj/item/reagent_containers/food/drinks/beer/light, +/obj/item/reagent_containers/food/drinks/beer/light, +/obj/item/reagent_containers/food/drinks/beer/light, +/obj/item/reagent_containers/food/drinks/beer/stout, +/turf/open/floor/plasteel/blackwhite, +/area/template_noop) +"Og" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/wood, +/area/template_noop) +"Ou" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/checker, +/area/template_noop) +"OV" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/pool{ + dir = 8 + }, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/wood, +/area/template_noop) +"Pj" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing, +/turf/open/floor/wood, +/area/template_noop) +"Qj" = ( +/obj/effect/landmark/xeno_spawn, +/turf/open/water/safe, +/area/template_noop) +"Rc" = ( +/obj/machinery/vending/fishing, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/cafeteria, +/area/template_noop) +"RS" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing, +/obj/effect/turf_decal/pool, +/turf/open/floor/wood, +/area/template_noop) +"SA" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/stool/bamboo, +/turf/open/floor/plasteel/cafeteria, +/area/template_noop) +"SM" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/lootdrop/trashbin, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/wood, +/area/template_noop) +"Tw" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/pool{ + dir = 8 + }, +/turf/open/floor/wood, +/area/template_noop) +"Uj" = ( +/obj/structure/rack, +/obj/item/soap/homemade, +/obj/item/soap/homemade, +/obj/item/twohanded/fishingrod, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/turf/open/floor/plasteel/white, +/area/template_noop) +"Wi" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table/glass, +/turf/open/floor/plasteel/cafeteria, +/area/template_noop) +"Xp" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/pool{ + dir = 4 + }, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/wood, +/area/template_noop) +"YR" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/pool/corner{ + dir = 8 + }, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/wood, +/area/template_noop) +"Ze" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/broken, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/turf/open/floor/plasteel/white, +/area/template_noop) +"ZB" = ( +/obj/effect/decal/cleanable/blood/footprints{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/pool{ + dir = 4 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/structure/railing/corner, +/turf/open/floor/wood, +/area/template_noop) +"ZO" = ( +/obj/effect/decal/cleanable/vomit/old, +/obj/effect/decal/cleanable/dirt/dust, +/mob/living/simple_animal/mouse, +/turf/open/floor/plasteel/checker, +/area/template_noop) + +(1,1,1) = {" +Wi +tO +tO +uj +FV +Pj +Ng +BO +of +xG +"} +(2,1,1) = {" +SA +SA +ag +hn +FV +sb +JM +of +of +tw +"} +(3,1,1) = {" +Cj +rS +ED +yw +Xp +ZB +xi +Mq +AR +zC +"} +(4,1,1) = {" +Rc +GL +RS +qR +li +li +li +eW +AR +nH +"} +(5,1,1) = {" +oW +oW +ak +li +Qj +li +li +bv +oW +oW +"} +(6,1,1) = {" +Og +Og +MA +li +li +KU +li +Ig +Og +Og +"} +(7,1,1) = {" +Ei +Ou +RS +li +li +li +qR +eW +Mw +Ze +"} +(8,1,1) = {" +EH +Ou +GJ +Tw +OV +lf +Tw +YR +vX +kF +"} +(9,1,1) = {" +EH +Ou +ZO +Ou +FV +Pj +He +Ke +pj +kF +"} +(10,1,1) = {" +GH +Ou +MI +tg +SM +Pj +Uj +LT +wk +EQ +"} diff --git a/_maps/RandomRuins/StationRuins/maint/3x3/3x3_vendoraccident.dmm b/_maps/RandomRuins/StationRuins/maint/3x3/3x3_vendoraccident.dmm new file mode 100644 index 000000000000..29ddea7b5a6e --- /dev/null +++ b/_maps/RandomRuins/StationRuins/maint/3x3/3x3_vendoraccident.dmm @@ -0,0 +1,76 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/machinery/vending/snack/random, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/template_noop) +"c" = ( +/obj/machinery/vending/autodrobe/all_access, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/template_noop) +"i" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/vomit/old, +/obj/effect/spawner/lootdrop/trashbin, +/turf/open/floor/plating, +/area/template_noop) +"p" = ( +/obj/machinery/vending/cola/random{ + tilted = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/template_noop) +"s" = ( +/obj/effect/decal/cleanable/ash, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/lootdrop/trashbin, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating, +/area/template_noop) +"B" = ( +/obj/item/holochip{ + credits = 50 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/template_noop) +"I" = ( +/obj/machinery/vending/cigarette, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/template_noop) +"P" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/lootdrop/glowstick, +/obj/effect/spawner/lootdrop/gloves, +/turf/open/floor/plating, +/area/template_noop) +"W" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/lootdrop/organ_spawner, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/blood/gibs/old, +/obj/effect/decal/remains/human, +/turf/open/floor/plating, +/area/template_noop) + +(1,1,1) = {" +I +s +a +"} +(2,1,1) = {" +P +B +i +"} +(3,1,1) = {" +p +W +c +"} diff --git a/_maps/RandomRuins/StationRuins/maint/3x5/3x5_dissection.dmm b/_maps/RandomRuins/StationRuins/maint/3x5/3x5_dissection.dmm index 3797c0030f8d..81fd0e4e5d64 100644 --- a/_maps/RandomRuins/StationRuins/maint/3x5/3x5_dissection.dmm +++ b/_maps/RandomRuins/StationRuins/maint/3x5/3x5_dissection.dmm @@ -79,7 +79,7 @@ /obj/effect/decal/cleanable/blood/old, /obj/item/organ/eyes, /obj/item/organ/eyes/moth, -/obj/item/organ/eyes/preternis, +/obj/item/organ/eyes/robotic/preternis, /obj/item/organ/eyes/snail, /turf/open/floor/plasteel/white, /area/template_noop) diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 9555f915f477..26555d3c074d 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -29646,27 +29646,6 @@ /obj/effect/landmark/start/roboticist, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) -"aZU" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/item/surgical_drapes, -/obj/item/retractor, -/obj/item/cautery, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1; - pixel_y = 1 - }, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) "aZV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -29867,28 +29846,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/science/robotics/lab) -"baj" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/item/circular_saw, -/obj/item/scalpel{ - pixel_y = 16 - }, -/obj/item/hemostat, -/obj/structure/window/reinforced{ - dir = 1; - pixel_y = 1 - }, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) "bak" = ( /obj/machinery/computer/operating{ dir = 1; @@ -95909,6 +95866,25 @@ icon_state = "panelscorched" }, /area/security/prison) +"pmX" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1; + pixel_y = 1 + }, +/obj/item/storage/backpack/duffelbag/med/surgery, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "pnQ" = ( /obj/structure/lattice, /obj/structure/girder/reinforced, @@ -98541,6 +98517,25 @@ }, /turf/open/floor/plasteel/dark, /area/medical/chemistry) +"saU" = ( +/obj/structure/table, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1; + pixel_y = 1 + }, +/obj/item/tank/internals/anesthetic, +/obj/item/clothing/mask/breath/medical, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "sbr" = ( /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -139712,7 +139707,7 @@ cHi waG bhC aCK -baj +saU bak aZS bOL @@ -140226,7 +140221,7 @@ azN aAo aBw aHM -aZU +pmX bgB bez aJV diff --git a/_maps/map_files/YogStation/YogStation.dmm b/_maps/map_files/YogStation/YogStation.dmm index 9e968be2484b..1a63f6e988f0 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -21633,6 +21633,36 @@ }, /turf/open/floor/plasteel, /area/security/checkpoint/engineering) +"bUA" = ( +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/airlock/medical{ + name = "Operating Theatre"; + req_access_txt = "45" + }, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/holosign/surgery, +/turf/open/floor/plasteel/white, +/area/medical/surgery) "bVa" = ( /obj/machinery/door/firedoor/border_only{ dir = 4 @@ -26746,6 +26776,26 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"dDo" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/obj/machinery/button/door{ + id = "surgery_shutters"; + name = "Surgery shutters"; + pixel_x = 26; + pixel_y = 6; + req_access_txt = "45"; + req_one_access_txt = null + }, +/obj/machinery/computer/operating, +/obj/machinery/button/holosign{ + id = "surgery"; + pixel_x = 26; + pixel_y = -4 + }, +/turf/open/floor/plasteel/white, +/area/medical/surgery) "dDp" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/portable_atmospherics/canister/water_vapor, @@ -32595,21 +32645,6 @@ /obj/item/pen/red, /turf/open/floor/wood, /area/vacant_room) -"gKi" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 5 - }, -/obj/machinery/button/door{ - id = "surgery_shutters"; - name = "Surgery shutters"; - pixel_x = 26; - pixel_y = 6; - req_access_txt = "45"; - req_one_access_txt = null - }, -/obj/machinery/computer/operating, -/turf/open/floor/plasteel/white, -/area/medical/surgery) "gKy" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -45552,6 +45587,26 @@ }, /turf/open/floor/plating, /area/hallway/secondary/exit) +"mYj" = ( +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/medical{ + name = "Operating Theatre"; + req_access_txt = "45" + }, +/obj/machinery/holosign/surgery{ + id = "surgery" + }, +/turf/open/floor/plasteel/white, +/area/medical/surgery) "mYS" = ( /obj/machinery/camera{ c_tag = "Atmospherics South West"; @@ -56967,26 +57022,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"sKm" = ( -/obj/machinery/door/airlock/medical{ - name = "Operating Theatre"; - req_access_txt = "45" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/white, -/area/medical/sleeper) "sKs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 @@ -58814,23 +58849,6 @@ }, /turf/open/floor/plasteel/dark, /area/storage/tech) -"tEa" = ( -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/airlock/medical{ - name = "Operating Theatre"; - req_access_txt = "45" - }, -/turf/open/floor/plasteel/white, -/area/medical/surgery) "tEk" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /obj/structure/disposalpipe/segment{ @@ -61908,35 +61926,6 @@ }, /turf/open/floor/plating, /area/crew_quarters/heads/chief) -"vhN" = ( -/obj/effect/turf_decal/trimline/blue/filled/line, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/airlock/medical{ - name = "Operating Theatre"; - req_access_txt = "45" - }, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/white, -/area/medical/surgery) "vhP" = ( /obj/structure/sign/poster/contraband/power{ pixel_y = 32 @@ -63806,6 +63795,29 @@ "wkN" = ( /turf/closed/wall, /area/science/nanite) +"wls" = ( +/obj/machinery/door/airlock/medical{ + name = "Operating Theatre"; + req_access_txt = "45" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/holosign/surgery{ + id = "surgery" + }, +/turf/open/floor/plasteel/white, +/area/medical/sleeper) "wlG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 6 @@ -106188,7 +106200,7 @@ bvj bvj bvj shz -sKm +wls bvj tDe tVV @@ -106961,7 +106973,7 @@ urv uMu vYV oQs -tEa +mYj tzM ulL oEY @@ -107470,7 +107482,7 @@ hoP kub hLI iYd -gKi +dDo gQe doF hnj @@ -107730,7 +107742,7 @@ adK adK adK adK -vhN +bUA adK adK jrP diff --git a/_maps/map_files/Yogsmeta/Yogsmeta.dmm b/_maps/map_files/Yogsmeta/Yogsmeta.dmm index 6b5b43774eae..c21e6e4d6875 100644 --- a/_maps/map_files/Yogsmeta/Yogsmeta.dmm +++ b/_maps/map_files/Yogsmeta/Yogsmeta.dmm @@ -12704,11 +12704,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/fore) -"aDU" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/tinted/fulltile, -/turf/open/floor/plating, -/area/security/courtroom) "aDV" = ( /obj/machinery/vending/cigarette, /turf/open/floor/plasteel/dark, @@ -112066,7 +112061,7 @@ aHD aHD aHD aHD -aDU +aTk aRX aTk aUF diff --git a/code/__DEFINES/ai.dm b/code/__DEFINES/ai.dm index ac50f313351c..a785a9580a8b 100644 --- a/code/__DEFINES/ai.dm +++ b/code/__DEFINES/ai.dm @@ -47,7 +47,7 @@ GLOBAL_LIST_INIT(ai_project_categories, list( #define AI_MAX_RAM_PER_RACK 4 ///How many AI research points does 1 THz generate? -#define AI_RESEARCH_PER_CPU 7.5 +#define AI_RESEARCH_PER_CPU 8.5 //How long between each data core being able to send a warning. Wouldn't want any spam if we had jittery temps would we? #define AI_DATA_CORE_WARNING_COOLDOWN (5 MINUTES) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index f0105efad5ae..bcfdfb97bfc0 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -259,6 +259,7 @@ #define TRAIT_ANOREXIC "anorexic" #define TRAIT_SHIFTY_EYES "shifty_eyes" #define TRAIT_ANXIOUS "anxious" +#define TRAIT_SEE_REAGENTS "see_reagents" // common trait sources #define TRAIT_GENERIC "generic" diff --git a/code/__DEFINES/{yogs_defines}/status_effects.dm b/code/__DEFINES/{yogs_defines}/status_effects.dm index be062a00a610..2c28115d2e1b 100644 --- a/code/__DEFINES/{yogs_defines}/status_effects.dm +++ b/code/__DEFINES/{yogs_defines}/status_effects.dm @@ -1 +1,3 @@ #define STATUS_EFFECT_VOIDED /datum/status_effect/voided //originally the void spell where you disappear and leave an invincible shadow guy but now it's a status effect + +#define STATUS_EFFECT_DODGING /datum/status_effect/dodging //granted by using the dodge roll, grants 1.5 seconds of godmode to replicate invincibility frames diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm index 2f4efd1b5734..06c8e6305975 100644 --- a/code/controllers/subsystem/research.dm +++ b/code/controllers/subsystem/research.dm @@ -73,6 +73,10 @@ SUBSYSTEM_DEF(research) science_tech.last_bitcoins = bitcoins // Doesn't take tick drift into account for(var/i in bitcoins) bitcoins[i] *= income_time_difference / 10 + if(science_tech.stored_research_points[i]) + var/boost_amt = clamp(0, bitcoins[i], science_tech.stored_research_points[i]) //up to 2x research speed when burning stored research + bitcoins[i] += boost_amt + science_tech.remove_stored_point_type(i, boost_amt) science_tech.add_point_list(bitcoins) last_income = world.time diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm index 670be33752ee..0fb6810f229d 100644 --- a/code/datums/mood_events/generic_positive_events.dm +++ b/code/datums/mood_events/generic_positive_events.dm @@ -62,7 +62,7 @@ special_screen_obj = "honked_nose" special_screen_replace = FALSE -/datum/mood_event/perform_cpr +/datum/mood_event/saved_life description = "It feels good to save a life.\n" mood_change = 6 timeout = 5 MINUTES diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index 53931fd84e3f..fd9d50c1d6f1 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -302,6 +302,11 @@ /obj/machinery/button/crematorium/indestructible resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF +/obj/machinery/button/holosign + name = "holosign button" + desc = "A remote control switch for a holosign." + device_type = /obj/item/assembly/control/holosign + /obj/item/wallframe/button name = "button frame" desc = "Used for building buttons." diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index f10a32b43ee3..b6d11deeb55e 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -126,8 +126,8 @@ GLOBAL_LIST_EMPTY(doppler_arrays) var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) if(D) D.adjust_money(point_gain) - linked_techweb.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, point_gain) - say("Explosion details and mixture analyzed and sold to the highest bidder for $[point_gain], with a reward of [point_gain] points.") + linked_techweb.add_stored_point_type(TECHWEB_POINT_TYPE_DEFAULT, point_gain) + say("Explosion details and mixture analyzed and sold to the highest bidder for $[point_gain], with a reward of [point_gain] points to be processed by research servers.") else //you've made smaller bombs say("Data already captured. Aborting.") diff --git a/code/game/machinery/holosign.dm b/code/game/machinery/holosign.dm new file mode 100644 index 000000000000..70b15d62e138 --- /dev/null +++ b/code/game/machinery/holosign.dm @@ -0,0 +1,35 @@ +////////////////////HOLOSIGN/////////////////////////////////////// +/obj/machinery/holosign + name = "holosign" + desc = "Small wall-mounted holographic projector" + icon = 'icons/obj/holosign.dmi' + icon_state = "sign_off" + layer = 4 + var/lit = FALSE + var/id = null + var/on_icon = "sign_on" + +/obj/machinery/holosign/proc/toggle() + if(!is_operational()) + lit = FALSE + else + lit = !lit + update_icon() + +/obj/machinery/holosign/update_icon() + if(!lit) + icon_state = initial(icon_state) + set_light(0) + else + icon_state = on_icon + set_light(1, 0.5, l_color = COLOR_BLUE_LIGHT) + +/obj/machinery/holosign/power_change() + if(!is_operational()) + lit = FALSE + update_icon() + +/obj/machinery/holosign/surgery + name = "surgery holosign" + desc = "Small wall-mounted holographic projector. This one reads SURGERY." + on_icon = "surgery" diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 3adaf0c62e96..4106eb536d0e 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -624,6 +624,7 @@ H.emote("gasp") H.Jitter(100) SEND_SIGNAL(H, COMSIG_LIVING_MINOR_SHOCK) + SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "saved_life", /datum/mood_event/saved_life) log_combat(user, H, "revived", defib) if(req_defib) defib.deductcharge(revivecost) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index ee311128efa2..391ffb580d49 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -228,7 +228,7 @@ desc = "Can hold security gear like handcuffs and flashes." icon_state = "securitybelt" item_state = "security"//Could likely use a better one. - w_class = WEIGHT_CLASS_NORMAL + w_class = WEIGHT_CLASS_BULKY content_overlays = TRUE /obj/item/storage/belt/security/ComponentInitialize() @@ -246,6 +246,10 @@ /obj/item/clothing/glasses, /obj/item/ammo_casing/shotgun, /obj/item/ammo_box, + /obj/item/storage/box/rubbershot, + /obj/item/storage/box/lethalshot, + /obj/item/storage/box/breacherslug, + /obj/item/storage/box/beanbag, /obj/item/reagent_containers/food/snacks/donut, /obj/item/kitchen/knife/combat, /obj/item/flashlight/seclite, @@ -254,6 +258,7 @@ /obj/item/clothing/gloves, /obj/item/restraints/legcuffs/bola, /obj/item/holosign_creator/security, + /obj/item/shield/riot/tele, /obj/item/barrier_taperoll/police )) @@ -272,6 +277,11 @@ icon_state = "securitybelt_hos" item_state = "security_hos" +/obj/item/storage/belt/security/chief/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_items = 7 + /obj/item/storage/belt/security/chief/full/PopulateContents() new /obj/item/reagent_containers/spray/pepper(src) new /obj/item/restraints/handcuffs(src) @@ -279,6 +289,7 @@ new /obj/item/assembly/flash/handheld(src) new /obj/item/melee/baton/loaded(src) new /obj/item/barrier_taperoll/police(src) + new /obj/item/shield/riot/tele(src) update_icon() /obj/item/storage/belt/security/webbing @@ -292,7 +303,7 @@ /obj/item/storage/belt/security/webbing/ComponentInitialize() . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 6 + STR.max_items = 7 /obj/item/storage/belt/mining name = "explorer's webbing" @@ -545,11 +556,6 @@ icon_state = "assaultbelt" item_state = "security" -/obj/item/storage/belt/military/assault/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 6 - /obj/item/storage/belt/grenade name = "grenadier belt" desc = "A belt for holding grenades." @@ -657,7 +663,7 @@ /obj/item/storage/belt/bandolier/ComponentInitialize() . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 18 + STR.max_items = 24 STR.display_numerical_stacking = TRUE STR.set_holdable(list( /obj/item/ammo_casing/shotgun @@ -668,6 +674,7 @@ desc = "A holster to carry a handgun and ammo. WARNING: Badasses only." icon_state = "holster" item_state = "holster" + w_class = WEIGHT_CLASS_NORMAL alternate_worn_layer = UNDER_SUIT_LAYER /obj/item/storage/belt/holster/ComponentInitialize() diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index c9d5eb16ddda..7ae8e84d389d 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -802,42 +802,66 @@ /obj/item/storage/box/rubbershot name = "box of rubber shots" - desc = "A box full of rubber shots, designed for riot shotguns." + desc = "A box full of rubber shots designed for shotguns. The box itself is designed for holding any kind of shotgun shell." icon_state = "rubbershot_box" illustration = null +/obj/item/storage/box/rubbershot/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_items = 7 + STR.set_holdable(list(/obj/item/ammo_casing/shotgun)) + /obj/item/storage/box/rubbershot/PopulateContents() for(var/i in 1 to 7) new /obj/item/ammo_casing/shotgun/rubbershot(src) /obj/item/storage/box/lethalshot name = "box of lethal shotgun shots" - desc = "A box full of lethal shots, designed for riot shotguns." + desc = "A box full of lethal shots designed for shotguns. The box itself is designed for holding any kind of shotgun shell." icon_state = "lethalshot_box" illustration = null +/obj/item/storage/box/lethalshot/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_items = 7 + STR.set_holdable(list(/obj/item/ammo_casing/shotgun)) + /obj/item/storage/box/lethalshot/PopulateContents() for(var/i in 1 to 7) new /obj/item/ammo_casing/shotgun/buckshot(src) /obj/item/storage/box/breacherslug name = "box of breaching shotgun shells" - desc = "A box full of breaching slugs, designed for rapid entry." + desc = "A box full of breaching slugs designed for rapid entry. The box itself is designed for holding any kind of shotgun shell." icon_state = "breachershot_box" illustration = null +/obj/item/storage/box/breacherslug/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_items = 7 + STR.set_holdable(list(/obj/item/ammo_casing/shotgun)) + /obj/item/storage/box/breacherslug/PopulateContents() for(var/i in 1 to 7) new /obj/item/ammo_casing/shotgun/breacher(src) /obj/item/storage/box/beanbag name = "box of beanbags" - desc = "A box full of beanbag shells." + desc = "A box full of beanbag shells designed for shotguns. The box itself is designed for holding any kind of shotgun shell." icon_state = "rubbershot_box" illustration = null +/obj/item/storage/box/beanbag/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_items = 7 + STR.set_holdable(list(/obj/item/ammo_casing/shotgun)) + /obj/item/storage/box/beanbag/PopulateContents() - for(var/i in 1 to 6) + for(var/i in 1 to 7) new /obj/item/ammo_casing/shotgun/beanbag(src) /obj/item/storage/box/actionfigure diff --git a/code/game/objects/items/syndicateReverseCard.dm b/code/game/objects/items/syndicateReverseCard.dm index 656582f7bb92..165642ef518b 100644 --- a/code/game/objects/items/syndicateReverseCard.dm +++ b/code/game/objects/items/syndicateReverseCard.dm @@ -4,7 +4,7 @@ name = "Red Reverse" icon = 'icons/obj/toy.dmi' icon_state = "sc_Red Reverse_uno" - desc = "a card." + desc = "A card." w_class = WEIGHT_CLASS_TINY var/used = FALSE //has this been used before? If not, give no hints about it's nature diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 0b611dc6cdce..ee04a896974b 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -944,7 +944,7 @@ /obj/item/toy/cards/singlecard name = "card" - desc = "a card" + desc = "A card." icon = 'icons/obj/toy.dmi' icon_state = "singlecard_down_nanotrasen" w_class = WEIGHT_CLASS_TINY diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 78ab39afe075..a028326a5442 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -231,14 +231,16 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /obj/item/katana/cursed/basalt name = "basalt katana" - desc = "a katana made out of hardened basalt. Deals more damage to lavaland mobs." + desc = "a katana made out of hardened basalt. Particularly damaging to lavaland fauna. (Activate this item in hand to dodge roll in the direction you're facing)" icon_state = "basalt_katana" item_state = "basalt_katana" - force = 25 + force = 18 block_chance = 20 - var/fauna_damage_bonus = 35 - var/fauna_damage_type = BURN + var/fauna_damage_bonus = 52 + var/fauna_damage_type = BRUTE + var/next_roll + var/roll_dist = 3 /obj/item/katana/cursed/basalt/afterattack(atom/target, mob/user, proximity) . = ..() @@ -250,6 +252,33 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 L.apply_damage(fauna_damage_bonus,fauna_damage_type) playsound(L, 'sound/weapons/sear.ogg', 100, 1) +/obj/item/katana/cursed/basalt/attack_self(mob/living/user) + if(world.time > next_roll) + var/stam_cost = 15 + var/turf/T = get_turf(user) + if(is_mining_level(T.z)) + stam_cost = 5 + var/turf/landing_turf = get_ranged_target_turf(user, user.dir, roll_dist) + var/spin_direction = FALSE + user.adjustStaminaLoss(stam_cost) + if (user.getStaminaLoss() >= 100) + user.throw_at(landing_turf, 2, 2) + user.Paralyze(4 SECONDS) + user.visible_message(span_warning("You're too tired tired to finish the roll!")) + else + playsound(user, 'yogstation/sound/items/dodgeroll.ogg', 50, TRUE) + user.apply_status_effect(STATUS_EFFECT_DODGING) + if(user.dir == EAST || user.dir == NORTH) + spin_direction = TRUE + passtable_on(user, src) + user.setMovetype(user.movement_type | FLYING) + user.safe_throw_at(landing_turf, 4, 1, spin = FALSE) + user.SpinAnimation(speed = 3, loops = 1, clockwise = spin_direction, segments = 3, parallel = TRUE) + passtable_off(user, src) + user.setMovetype(user.movement_type & ~FLYING) + next_roll = world.time + 1 SECONDS + else + to_chat(user, span_notice("You need to catch your breath before you can roll again!")) /obj/item/katana/suicide_act(mob/user) diff --git a/code/game/objects/structures/crates_lockers/closets/bluespace_locker.dm b/code/game/objects/structures/crates_lockers/closets/bluespace_locker.dm index 9e2fadc69dd4..ef96e171cc75 100644 --- a/code/game/objects/structures/crates_lockers/closets/bluespace_locker.dm +++ b/code/game/objects/structures/crates_lockers/closets/bluespace_locker.dm @@ -151,7 +151,7 @@ /obj/structure/closet/bluespace/external/Destroy() SSbluespace_locker.external_locker = null - SSbluespace_locker.bluespaceify_random_locker() + SSbluespace_locker.redistribute_locker() return ..() /obj/structure/closet/bluespace/external/can_open() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index e4731c22be69..bd1c9d023d0e 100755 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -63,8 +63,9 @@ new /obj/item/storage/lockbox/loyalty(src) new /obj/item/clothing/mask/gas/sechailer/swat(src) new /obj/item/storage/box/flashbangs(src) - new /obj/item/shield/riot/tele(src) - new /obj/item/storage/belt/security/chief/full(src) + new /obj/item/restraints/handcuffs(src) + new /obj/item/assembly/flash/handheld(src) + new /obj/item/melee/baton/loaded(src) new /obj/item/gun/energy/e_gun/hos(src) new /obj/item/flashlight/seclite(src) new /obj/item/pinpointer/nuke(src) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index cd6d81b8c3b6..772dd90c3456 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -531,7 +531,7 @@ GLOBAL_LIST_EMPTY(station_turfs) /turf/AllowDrop() return TRUE -/turf/proc/add_vomit_floor(mob/living/M, toxvomit = NONE) +/turf/proc/add_vomit_floor(mob/living/M, toxvomit = NONE, purge_ratio = 0.1) var/obj/effect/decal/cleanable/vomit/V = new /obj/effect/decal/cleanable/vomit(src, M.get_static_viruses()) @@ -540,19 +540,21 @@ GLOBAL_LIST_EMPTY(station_turfs) V = locate() in src if(!V) return - // Make toxins and blazaam vomit look different + // Apply the proper icon set based on vomit type if(toxvomit == VOMIT_PURPLE) V.icon_state = "vomitpurp_[pick(1,4)]" else if (toxvomit == VOMIT_TOXIC) V.icon_state = "vomittox_[pick(1,4)]" - if (iscarbon(M)) - var/mob/living/carbon/C = M - if(C.reagents) - clear_reagents_to_vomit_pool(C,V) + if (purge_ratio && iscarbon(M)) + clear_reagents_to_vomit_pool(M, V, purge_ratio) -/proc/clear_reagents_to_vomit_pool(mob/living/carbon/M, obj/effect/decal/cleanable/vomit/V) - M.reagents.trans_to(V, M.reagents.total_volume / 10, transfered_by = M) - for(var/datum/reagent/R in M.reagents.reagent_list) //clears the stomach of anything that might be digested as food +/proc/clear_reagents_to_vomit_pool(mob/living/carbon/M, obj/effect/decal/cleanable/vomit/V, purge_ratio = 0.1) + var/chemicals_lost = M.reagents.total_volume * purge_ratio + if(V.reagents.total_volume + chemicals_lost > V.reagents.maximum_volume) + V.reagents.total_volume -= chemicals_lost + M.reagents.trans_to(V, chemicals_lost, transfered_by = M) + //clear the stomach of anything even not food + for(var/datum/reagent/R in M.reagents.reagent_list) if(istype(R, /datum/reagent/consumable)) var/datum/reagent/consumable/nutri_check = R if(nutri_check.nutriment_factor >0) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index ec7263b903e2..7f69fe3267ab 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -200,6 +200,8 @@ //omg this is dumb, just fill in both their tickets // yogs start - Yog Tickets admin_ticket_log(src, msg, FALSE) + if(!recipient.current_ticket) // creates a ticket if there is no ticket of this user + new /datum/admin_help(msg, recipient, TRUE) // yogs - Yog Tickets if(recipient.current_ticket && !recipient.current_ticket.handling_admin) recipient.current_ticket.Administer() // yogs end - Yog Tickets diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_daylight.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_daylight.dm index 5960ff7569ba..ca02ccc0c14f 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_daylight.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_daylight.dm @@ -106,15 +106,15 @@ if(bloodsucker_minds.current) switch(danger_level) if(1) - bloodsucker_minds.current.playsound_local(null, 'sound/effects/griffin_3.ogg', 50 + danger_level, 1) + bloodsucker_minds.current.playsound_local(null, 'sound/effects/griffin_3.ogg', 50 + danger_level, TRUE) if(2) - bloodsucker_minds.current.playsound_local(null, 'sound/effects/griffin_5.ogg', 50 + danger_level, 1) + bloodsucker_minds.current.playsound_local(null, 'sound/effects/griffin_5.ogg', 50 + danger_level, TRUE) if(3) - bloodsucker_minds.current.playsound_local(null, 'sound/effects/alert.ogg', 75, 1) + bloodsucker_minds.current.playsound_local(null, 'sound/effects/alert.ogg', 75, TRUE) if(4) - bloodsucker_minds.current.playsound_local(null, 'sound/ambience/ambimystery.ogg', 100, 1) + bloodsucker_minds.current.playsound_local(null, 'sound/ambience/ambimystery.ogg', 100, TRUE) if(5) - bloodsucker_minds.current.playsound_local(null, 'sound/spookoween/ghosty_wind.ogg', 90, 1) + bloodsucker_minds.current.playsound_local(null, 'sound/spookoween/ghosty_wind.ogg', 90, TRUE) if(vassalwarn != "") for(var/datum/mind/vassal_minds as anything in get_antag_minds(/datum/antagonist/vassal)) if(!istype(vassal_minds)) @@ -136,7 +136,7 @@ var/datum/antagonist/bloodsucker/bloodsuckerdatum = bloodsucker_minds.has_antag_datum(/datum/antagonist/bloodsucker) if(!istype(bloodsuckerdatum)) continue - if(istype(bloodsucker_minds.current.loc, /obj/structure)) + if(isstructure(bloodsucker_minds.current.loc)) if(istype(bloodsucker_minds.current.loc, /obj/structure/closet/crate/coffin)) // Coffins offer the BEST protection SEND_SIGNAL(bloodsucker_minds.current, COMSIG_ADD_MOOD_EVENT, "vampsleep", /datum/mood_event/coffinsleep) continue diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_frenzy.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_frenzy.dm index dead5c58c35d..0df490c1760c 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_frenzy.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_frenzy.dm @@ -59,6 +59,7 @@ // Give the other Frenzy effects ADD_TRAIT(owner, TRAIT_MUTE, FRENZY_TRAIT) ADD_TRAIT(owner, TRAIT_DEAF, FRENZY_TRAIT) + ADD_TRAIT(owner, TRAIT_REDUCED_DAMAGE_SLOWDOWN, FRENZY_TRAIT) if(user.IsAdvancedToolUser()) was_tooluser = TRUE ADD_TRAIT(owner, TRAIT_MONKEYLIKE, SPECIES_TRAIT) @@ -80,6 +81,7 @@ to_chat(owner, span_warning("You come back to your senses.")) REMOVE_TRAIT(owner, TRAIT_MUTE, FRENZY_TRAIT) REMOVE_TRAIT(owner, TRAIT_DEAF, FRENZY_TRAIT) + REMOVE_TRAIT(owner, TRAIT_REDUCED_DAMAGE_SLOWDOWN, FRENZY_TRAIT) if(was_tooluser) REMOVE_TRAIT(owner, TRAIT_MONKEYLIKE, SPECIES_TRAIT) was_tooluser = FALSE diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_integration.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_integration.dm index 041cc91e9a9c..52426c6fae00 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_integration.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_integration.dm @@ -37,8 +37,8 @@ var/datum/antagonist/bloodsucker/bloodsuckerdatum = mind.has_antag_datum(/datum/antagonist/bloodsucker) if(bloodsuckerdatum) . += "" - . += "Current Frenzy Enter: [FRENZY_THRESHOLD_ENTER + (bloodsuckerdatum.humanity_lost * 10)]" - . += "Current Frenzy Leave: [FRENZY_THRESHOLD_EXIT + (bloodsuckerdatum.humanity_lost * 10)]" + . += "Current Frenzy Enter: [FRENZY_THRESHOLD_ENTER + bloodsuckerdatum.humanity_lost * 10]" + . += "Current Frenzy Leave: [FRENZY_THRESHOLD_EXIT + bloodsuckerdatum.humanity_lost * 10]" . += "Blood Drank: [bloodsuckerdatum.total_blood_drank]" if(bloodsuckerdatum.current_task) . += "Task Blood Drank: [bloodsuckerdatum.task_blood_drank]" diff --git a/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm b/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm index 30c76e233163..0e32b2da38ec 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_mobs.dm @@ -196,7 +196,8 @@ if(bloodsucker) if(ishuman(bloodsucker)) var/mob/living/carbon/human/user = bloodsucker - if(user.blood_volume < 560) + var/datum/antagonist/bloodsucker/bloodsuckerdatum = src.mind.has_antag_datum(/datum/antagonist/bloodsucker) + if(user.blood_volume < FRENZY_THRESHOLD_EXIT + bloodsuckerdatum.humanity_lost * 10) user.blood_volume += 10 adjustFireLoss(2.5) updatehealth() //3 minutes to die diff --git a/code/modules/antagonists/bloodsuckers/bloodsuckers.dm b/code/modules/antagonists/bloodsuckers/bloodsuckers.dm index e7137503c513..4210c1dfadb5 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsuckers.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsuckers.dm @@ -24,8 +24,6 @@ var/humanity_lost = 0 ///Have we been broken the Masquerade? var/broke_masquerade = FALSE - ///Blood required to enter Frenzy - var/frenzy_threshold = FRENZY_THRESHOLD_ENTER ///If we are currently in a Frenzy var/frenzied = FALSE ///If we have a task assigned diff --git a/code/modules/antagonists/bloodsuckers/powers/gangrel.dm b/code/modules/antagonists/bloodsuckers/powers/gangrel.dm index 4a3cdca1cc1a..94a40f379e7e 100644 --- a/code/modules/antagonists/bloodsuckers/powers/gangrel.dm +++ b/code/modules/antagonists/bloodsuckers/powers/gangrel.dm @@ -42,9 +42,9 @@ if(DIGITIGRADE in user_species.species_traits) user_species.species_traits -= DIGITIGRADE minortransformdone = TRUE - user_species.punchdamagelow += 5.0 - user_species.punchdamagehigh += 5.0 //stronk - user_species.armor += 30 + user.dna.species.punchdamagelow += 5.0 + user.dna.species.punchdamagehigh += 5.0 //stronk + user.dna.species.armor += 30 to_chat(user, span_notice("You aren't strong enough to morph into something stronger! But you do certainly feel more feral and stronger than before.")) else to_chat(user, span_notice("You still haven't evolved your ability yet.")) @@ -56,9 +56,9 @@ if(DIGITIGRADE in user_species.species_traits) user_species.species_traits -= DIGITIGRADE mediumtransformdone = TRUE - user_species.punchdamagelow += 7.5 - user_species.punchdamagehigh += 7.5 //very stronk - user_species.armor += 35 + user.dna.species.punchdamagelow += 7.5 + user.dna.species.punchdamagehigh += 7.5 //very stronk + user.dna.species.armor += 35 to_chat(owner, span_notice("You transform into a gorrila-ey beast, you feel stronger!")) else to_chat(owner, span_notice("You still haven't evolved your ability yet.")) diff --git a/code/modules/antagonists/bloodsuckers/powers/gohome.dm b/code/modules/antagonists/bloodsuckers/powers/gohome.dm index e82d4475b61b..d0b86fa0d0eb 100644 --- a/code/modules/antagonists/bloodsuckers/powers/gohome.dm +++ b/code/modules/antagonists/bloodsuckers/powers/gohome.dm @@ -57,6 +57,7 @@ if(GOHOME_FLICKER_TWO) INVOKE_ASYNC(src, .proc/flicker_lights, 4, 60) if(GOHOME_TELEPORT) + do_mob(user, user, 1 SECONDS, TRUE) INVOKE_ASYNC(src, .proc/teleport_to_coffin, user) teleporting_stage++ @@ -64,24 +65,24 @@ . = ..() if(!.) return FALSE - if(!isturf(owner.loc)) + if(!isturf(user.loc)) return FALSE if(!bloodsuckerdatum_power.coffin) - to_chat(owner, span_warning("Your coffin has been destroyed! You no longer have a destination.")) + to_chat(user, span_warning("Your coffin has been destroyed! You no longer have a destination.")) return FALSE return TRUE /datum/action/bloodsucker/gohome/proc/flicker_lights(flicker_range, beat_volume) for(var/obj/machinery/light/nearby_lights in view(flicker_range, get_turf(owner))) nearby_lights.flicker(5) - playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', beat_volume, 1) + playsound(get_turf(owner), 'sound/effects/singlebeat.ogg', beat_volume, TRUE) /datum/action/bloodsucker/gohome/proc/teleport_to_coffin(mob/living/carbon/user) var/drop_item = FALSE - var/turf/current_turf = get_turf(owner) + var/turf/current_turf = get_turf(user) // If we aren't in the dark, anyone watching us will cause us to drop out stuff if(current_turf && current_turf.lighting_object && current_turf.get_lumcount() >= 0.2) - for(var/mob/living/watchers in viewers(world.view, get_turf(owner)) - owner) + for(var/mob/living/watchers in viewers(world.view, get_turf(user)) - user) if(!watchers.client) continue if(watchers.has_unlimited_silicon_privilege) @@ -99,10 +100,10 @@ var/obj/item/legcuffs = user.legcuffed user.dropItemToGround(legcuffs) if(drop_item) - for(var/obj/item/literally_everything in owner) - owner.dropItemToGround(literally_everything, TRUE) + for(var/obj/item/literally_everything in user) + user.dropItemToGround(literally_everything, TRUE) - playsound(current_turf, 'sound/magic/summon_karp.ogg', 60, 1) + playsound(current_turf, 'sound/magic/summon_karp.ogg', 60, TRUE) var/datum/effect_system/steam_spread/bloodsucker/puff = new /datum/effect_system/steam_spread/bloodsucker() puff.set_up(3, 0, current_turf) puff.start() @@ -112,13 +113,13 @@ new new_mob(current_turf) /// TELEPORT: Move to Coffin & Close it! user.set_resting(TRUE, TRUE, FALSE) - do_teleport(owner, bloodsuckerdatum_power.coffin, no_effects = TRUE, forced = TRUE, channel = TELEPORT_CHANNEL_QUANTUM) + do_teleport(user, bloodsuckerdatum_power.coffin, no_effects = TRUE, forced = TRUE, channel = TELEPORT_CHANNEL_QUANTUM) user.Stun(3 SECONDS, TRUE) // Puts me inside. - if(!bloodsuckerdatum_power.coffin.insert(owner)) + if(!bloodsuckerdatum_power.coffin.close(user)) // CLOSE LID: If fail, force me in. - bloodsuckerdatum_power.coffin.close(owner) - playsound(bloodsuckerdatum_power.coffin.loc, bloodsuckerdatum_power.coffin.close_sound, 15, 1, -3) + bloodsuckerdatum_power.coffin.insert(user) + playsound(bloodsuckerdatum_power.coffin.loc, bloodsuckerdatum_power.coffin.close_sound, 15, TRUE, -3) DeactivatePower() diff --git a/code/modules/antagonists/bloodsuckers/powers/targeted/brawn.dm b/code/modules/antagonists/bloodsuckers/powers/targeted/brawn.dm index fb7331e8c56c..fcb5dc33d384 100644 --- a/code/modules/antagonists/bloodsuckers/powers/targeted/brawn.dm +++ b/code/modules/antagonists/bloodsuckers/powers/targeted/brawn.dm @@ -45,8 +45,8 @@ if(!istype(closet)) return FALSE closet.visible_message( - span_warning("closet] tears apart as [user] bashes it open from within!"), - span_warning("closet] tears apart as you bash it open from within!"), + span_warning("[closet] tears apart as [user] bashes it open from within!"), + span_warning("[closet] tears apart as you bash it open from within!"), ) to_chat(user, span_warning("We bash [closet] wide open!")) addtimer(CALLBACK(src, .proc/break_closet, user, closet), 1) @@ -80,7 +80,7 @@ // Did we end up using our ability? If so, play the sound effect and return TRUE if(used) - playsound(get_turf(user), 'sound/effects/grillehit.ogg', 80, 1, -1) + playsound(get_turf(user), 'sound/effects/grillehit.ogg', 80, TRUE, -1) return used // This is its own proc because its done twice, to repeat code copypaste. @@ -96,7 +96,7 @@ return FALSE var/mob/pulled_mob = owner.pulledby var/pull_power = pulled_mob.grab_state - playsound(get_turf(pulled_mob), 'sound/effects/woodhit.ogg', 75, 1, -1) + playsound(get_turf(pulled_mob), 'sound/effects/woodhit.ogg', 75, TRUE, -1) // Knock Down (if Living) if(isliving(pulled_mob)) var/mob/living/hit_target = pulled_mob @@ -133,7 +133,7 @@ target.Knockdown(min(5, rand(10, 10 * powerlevel))) // Attack! to_chat(owner, span_warning("You punch [target]!")) - playsound(get_turf(target), 'sound/weapons/punch4.ogg', 60, 1, -1) + playsound(get_turf(target), 'sound/weapons/punch4.ogg', 60, TRUE, -1) user.do_attack_animation(target, ATTACK_EFFECT_SMASH) var/obj/item/bodypart/affecting = target.get_bodypart(ran_zone(target.zone_selected)) target.apply_damage(hitStrength, BRUTE, affecting) @@ -153,11 +153,11 @@ return FALSE target_closet.visible_message(span_danger("[target_closet] breaks open as [user] bashes it!")) addtimer(CALLBACK(src, .proc/break_closet, user, target_closet), 1) - playsound(get_turf(user), 'sound/effects/grillehit.ogg', 80, 1, -1) + playsound(get_turf(user), 'sound/effects/grillehit.ogg', 80, TRUE, -1) // Target Type: Door else if(istype(target_atom, /obj/machinery/door) && level_current >= 4) var/obj/machinery/door/target_airlock = target_atom - playsound(get_turf(user), 'sound/machines/airlock_alien_prying.ogg', 40, 1, -1) + playsound(get_turf(user), 'sound/machines/airlock_alien_prying.ogg', 40, TRUE, -1) to_chat(owner, span_warning("You prepare to tear open [target_airlock]...")) if(!do_mob(user, target_airlock, 2.5 SECONDS)) return FALSE @@ -165,7 +165,7 @@ target_airlock.visible_message(span_danger("[target_airlock] breaks open as [user] bashes it!")) user.Stun(10) user.do_attack_animation(target_airlock, ATTACK_EFFECT_SMASH) - playsound(get_turf(target_airlock), 'sound/effects/bang.ogg', 30, 1, -1) + playsound(get_turf(target_airlock), 'sound/effects/bang.ogg', 30, TRUE, -1) target_airlock.open(2) // open(2) is like a crowbar or jaws of life. /datum/action/bloodsucker/targeted/brawn/CheckValidTarget(atom/target_atom) diff --git a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm index 7f99c1fb1208..4a94505bec52 100644 --- a/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm +++ b/code/modules/antagonists/bloodsuckers/structures/bloodsucker_life.dm @@ -36,7 +36,7 @@ to_chat(owner.current, span_warning("You hit the maximum amount of lost Humanity, you are far from Human.")) return humanity_lost += value - to_chat(owner.current, span_warning("You feel as if you lost some of your humanity, you will now enter Frenzy at [FRENZY_THRESHOLD_ENTER + (humanity_lost * 10)] Blood.")) + to_chat(owner.current, span_warning("You feel as if you lost some of your humanity, you will now enter Frenzy at [FRENZY_THRESHOLD_ENTER + humanity_lost * 10] Blood.")) /// mult: SILENT feed is 1/3 the amount /datum/antagonist/bloodsucker/proc/HandleFeeding(mob/living/carbon/target, mult=1, power_level) @@ -236,7 +236,7 @@ // BLOOD_VOLUME_GOOD: [336] - Pale // handled in bloodsucker_integration.dm // BLOOD_VOLUME_EXIT: [560] - Exit Frenzy (If in one) This is high because we want enough to kill the poor soul they feed off of. - if(owner.current.blood_volume >= FRENZY_THRESHOLD_EXIT && frenzied) + if(owner.current.blood_volume >= (FRENZY_THRESHOLD_EXIT + humanity_lost * 10) && frenzied) owner.current.remove_status_effect(STATUS_EFFECT_FRENZY) // BLOOD_VOLUME_BAD: [224] - Jitter if(owner.current.blood_volume < BLOOD_VOLUME_BAD(owner.current) && prob(0.5) && !HAS_TRAIT(owner.current, TRAIT_NODEATH) && !HAS_TRAIT(owner.current, TRAIT_MASQUERADE)) @@ -246,7 +246,7 @@ owner.current.blur_eyes(8 - 8 * (owner.current.blood_volume / BLOOD_VOLUME_BAD(owner.current))) // The more blood, the better the Regeneration, get too low blood, and you enter Frenzy. - if(owner.current.blood_volume < (FRENZY_THRESHOLD_ENTER + (humanity_lost * 10)) && !frenzied) + if(owner.current.blood_volume < (FRENZY_THRESHOLD_ENTER + humanity_lost * 10) && !frenzied) if(!iscarbon(owner.current)) return if(owner.current.stat == DEAD) @@ -276,18 +276,18 @@ owner.current.apply_status_effect(STATUS_EFFECT_FRENZY) return if(2 to INFINITY) - AddBloodVolume(560 - user.blood_volume) //so it doesn't happen multiple times and refills your blood when you get out again + AddBloodVolume(FRENZY_THRESHOLD_EXIT + humanity_lost * 10 - user.blood_volume) //so it doesn't happen multiple times and refills your blood when you get out again if(!do_mob(user, user, 2 SECONDS, TRUE)) return - playsound(user.loc, 'sound/weapons/slash.ogg', 25, 1) + playsound(user.loc, 'sound/weapons/slash.ogg', 25, TRUE) to_chat(user, span_warning("You skin rips and tears.")) if(!do_mob(user, user, 1 SECONDS, TRUE)) return - playsound(user.loc, 'sound/weapons/slashmiss.ogg', 25, 1) + playsound(user.loc, 'sound/weapons/slashmiss.ogg', 25, TRUE) to_chat(user, span_warning("You heart pumps blackened blood into your veins as your skin turns into fur.")) if(!do_mob(user, user, 1 SECONDS, TRUE)) return - playsound(user.loc, 'sound/weapons/slice.ogg', 25, 1) + playsound(user.loc, 'sound/weapons/slice.ogg', 25, TRUE) to_chat(user, span_boldnotice("YOU HAVE AWOKEN.")) var/mob/living/simple_animal/hostile/bloodsucker/werewolf/ww if(!ww || ww.stat == DEAD) diff --git a/code/modules/antagonists/changeling/powers/augmented_eyesight.dm b/code/modules/antagonists/changeling/powers/augmented_eyesight.dm index f3b95767f025..813a3dd1d0fe 100644 --- a/code/modules/antagonists/changeling/powers/augmented_eyesight.dm +++ b/code/modules/antagonists/changeling/powers/augmented_eyesight.dm @@ -15,7 +15,7 @@ var/obj/item/organ/eyes/E = user.getorganslot(ORGAN_SLOT_EYES) if (E) E.flash_protect = 2 //Adjust the user's eyes' flash protection - if(istype(E, /obj/item/organ/eyes/preternis)) + if(istype(E, /obj/item/organ/eyes/robotic/preternis)) E.Remove(user, 1) var/obj/item/organ/eyes/neweyes = new(user) neweyes.Insert(user, 1) @@ -54,4 +54,4 @@ else E.flash_protect = 0 user.update_sight() - ..() \ No newline at end of file + ..() diff --git a/code/modules/antagonists/changeling/powers/panacea.dm b/code/modules/antagonists/changeling/powers/panacea.dm index 234b195b24d2..8eeb9b14795b 100644 --- a/code/modules/antagonists/changeling/powers/panacea.dm +++ b/code/modules/antagonists/changeling/powers/panacea.dm @@ -15,7 +15,7 @@ H.leave_victim() if(iscarbon(user)) var/mob/living/carbon/C = user - C.vomit(0, toxic = TRUE) + C.vomit(0) to_chat(user, span_notice("A parasite exits our form.")) ..() var/list/bad_organs = list( @@ -30,7 +30,7 @@ O.Remove(user) if(iscarbon(user)) var/mob/living/carbon/C = user - C.vomit(0, toxic = TRUE) + C.vomit(0) O.forceMove(get_turf(user)) user.reagents.add_reagent(/datum/reagent/medicine/mutadone, 10) diff --git a/code/modules/assembly/doorcontrol.dm b/code/modules/assembly/doorcontrol.dm index e578faa77e43..908c91926919 100644 --- a/code/modules/assembly/doorcontrol.dm +++ b/code/modules/assembly/doorcontrol.dm @@ -145,3 +145,18 @@ C.cremate(usr) addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 50) + + +/obj/item/assembly/control/holosign + name = "holosign controller" + desc = "A remote controller for a holosign." + +/obj/item/assembly/control/holosign/activate() + if(cooldown) + return + cooldown = TRUE + for(var/obj/machinery/holosign/H in GLOB.machines) + if(H.id == id) + H.toggle() + + addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 50) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 619c6fa3c982..7447108793e6 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -95,7 +95,7 @@ /obj/item/clothing/gloves/bracer/cuffs name = "rabid cuffs" - desc = "Chainless manacles fashioned after one of the hungriest slaughter demons. Wearing these invokes a hunger in the wearer that can only be sated by bloodshed." + desc = "Wristbands fashioned after one of the hungriest slaughter demons. Wearing these invokes a hunger in the wearer that can only be sated by bloodshed." icon_state = "cuff" item_state = "cuff" var/obj/effect/proc_holder/swipe/swipe_ability @@ -116,7 +116,7 @@ obj/effect/proc_holder/swipe name = "Swipe" - desc = "Swipe at a target area, dealing damage and consuming dead entities to heal yourself. Creatures take 30 damage while people and cyborgs take 10 damage. Consumed creatures explode into gibs and give the most healing, and people and cyborgs heal for the least. People and cyborgs who have been thoroughly burned and bruised heal you for slightly more! People are ineligible for total consumption." + desc = "Swipe at a target area, dealing damage to heal yourself. Creatures take 60 damage while people and cyborgs take 20 damage. Living creatures hit with this ability will heal the user for 13 brute/burn/poison while dead ones heal for 20 and get butchered, while killing a creature with a swipe will heal the user for 33. People and cyborgs hit will heal for 5." action_background_icon_state = "bg_demon" action_icon = 'icons/mob/actions/actions_items.dmi' action_icon_state = "cuff" @@ -154,32 +154,33 @@ obj/effect/proc_holder/swipe return if(!istype(T)) return + if(!(T in range(9, caller))) + to_chat(caller, warning("The target is too far!")) + return new /obj/effect/temp_visual/bubblegum_hands/rightpaw(T) new /obj/effect/temp_visual/bubblegum_hands/rightthumb(T) - to_chat(L, span_userdanger("A claw swipes at you!")) + to_chat(L, span_userdanger("Claws reach out from the floor and maul you!")) to_chat(ranged_ability_user, "You summon claws at [L]'s location!") + L.visible_message(span_warning("[caller] rends [L]!")) for(L in range(0,T)) playsound(T, 'sound/magic/demon_attack1.ogg', 80, 5, -1) if(isanimal(L)) - L.adjustBruteLoss(30) + L.adjustBruteLoss(60) + if(L.stat != DEAD) + caller.adjustBruteLoss(-13) + caller.adjustFireLoss(-13) + caller.adjustToxLoss(-13) if(L.stat == DEAD) L.gib() + to_chat(caller, span_notice("You're able to consume the body entirely!")) caller.adjustBruteLoss(-20) caller.adjustFireLoss(-20) caller.adjustToxLoss(-20) - caller.blood_volume = BLOOD_VOLUME_NORMAL(caller)*1.10 - L.adjustBruteLoss(10) - if(L.getBruteLoss()+L.getFireLoss() >= 299) - to_chat(caller, span_notice("You're able to consume a bit more of the body, as it was previously softened up!")) - caller.adjustBruteLoss(-15) - caller.adjustFireLoss(-15) - caller.adjustToxLoss(-15) - caller.blood_volume = BLOOD_VOLUME_NORMAL(caller)*1.05 - if(L.stat == DEAD) + if(iscarbon(L)) + L.adjustBruteLoss(20) caller.adjustBruteLoss(-5) caller.adjustFireLoss(-5) caller.adjustToxLoss(-5) - caller.blood_volume = BLOOD_VOLUME_NORMAL(caller)*1.01 COOLDOWN_START(src, scan_cooldown, cooldown) addtimer(CALLBACK(src, .proc/cooldown_over, ranged_ability_user), cooldown) remove_ranged_ability() diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index 0fea05dee27f..d355c8e00a57 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -469,6 +469,18 @@ list_reagents = list(/datum/reagent/consumable/space_cola = 30) foodtype = SUGAR +/obj/item/reagent_containers/food/drinks/soda_cans/rootbeer + name = "Root Beer" + desc = "A soft drink made from roots. Non-Alcoholic." + custom_price = 10 + icon_state = "Rootbeer_Mug" + list_reagents = list(/datum/reagent/consumable/rootbeer = 30) + foodtype = SUGAR + +/obj/item/reagent_containers/food/drinks/soda_cans/rootbeer/Initialize() + icon_state = pick("Rootbeer_Mug","Rootbeer_AW","Rootbeer_Barq") + . = ..() + /obj/item/reagent_containers/food/drinks/soda_cans/tonic name = "T-Borg's tonic water" desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm index 65675db9e43c..2902ce96937e 100644 --- a/code/modules/hydroponics/grown/replicapod.dm +++ b/code/modules/hydroponics/grown/replicapod.dm @@ -118,6 +118,7 @@ new V(podman) podman.hardset_dna(null,null,null,podman.real_name,blood_type, new /datum/species/pod,features)//Discard SE's and UI's, podman cloning is inaccurate, and always make them a podman podman.set_cloned_appearance() + podman.dna.species.exotic_blood = max(reagents_add) || /datum/reagent/water log_cloning("[key_name(mind)] cloned as a podman via [src] in [parent] at [AREACOORD(parent)].") to_chat(podman, span_notice("You do not remember your death, how you died, or who killed you. See rule 1.6.")) //yogs diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm index dfebb5973bd2..509b5150224c 100644 --- a/code/modules/jobs/job_types/head_of_security.dm +++ b/code/modules/jobs/job_types/head_of_security.dm @@ -46,6 +46,7 @@ id_type = /obj/item/card/id/silver pda_type = /obj/item/pda/heads/hos + belt = /obj/item/storage/belt/security/chief/full ears = /obj/item/radio/headset/heads/hos/alt uniform = /obj/item/clothing/under/rank/head_of_security uniform_skirt = /obj/item/clothing/under/rank/head_of_security/skirt @@ -56,9 +57,7 @@ head = /obj/item/clothing/head/HoS/beret glasses = /obj/item/clothing/glasses/hud/security/sunglasses suit_store = /obj/item/gun/energy/e_gun - r_pocket = /obj/item/assembly/flash/handheld - l_pocket = /obj/item/restraints/handcuffs - backpack_contents = list(/obj/item/melee/baton/loaded=1, /obj/item/modular_computer/tablet/phone/preset/advanced/command=1) //yogs - removed departmental budget ID //come here often? + backpack_contents = list(/obj/item/modular_computer/tablet/phone/preset/advanced/command=1) //yogs - removed departmental budget ID //come here often? backpack = /obj/item/storage/backpack/security satchel = /obj/item/storage/backpack/satchel/sec diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm index 700e715620d0..f392bd1ae875 100644 --- a/code/modules/jobs/job_types/shaft_miner.dm +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -35,6 +35,7 @@ /datum/outfit/job/miner name = "Shaft Miner" + var/static/gps_number = 1 jobtype = /datum/job/mining pda_type = /obj/item/pda/shaftminer @@ -59,6 +60,16 @@ chameleon_extras = /obj/item/gun/energy/kinetic_accelerator +/datum/outfit/job/miner/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + if(visualsOnly) + return + if(H.stat == DEAD) + return + for(var/obj/item/gps/G in H.contents) + G.gpstag = "MINE[gps_number]" + gps_number ++ + /datum/outfit/job/miner/equipped name = "Shaft Miner (Equipment)" suit = /obj/item/clothing/suit/hooded/explorer diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index b2151549626f..92144faa1626 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -1136,9 +1136,10 @@ GLOBAL_LIST_EMPTY(bloodmen_list) #define COOLDOWN 150 #define COOLDOWN_HUMAN 100 #define COOLDOWN_ANIMAL 60 +#define COOLDOWN_SPLASH 100 /obj/item/melee/knuckles name = "bloody knuckles" - desc = "Knuckles born of a desire for violence. Made to ensure their victims stay in the fight until there's a winner." + desc = "Knuckles born of a desire for violence. Made to ensure their victims stay in the fight until there's a winner. Activating these knuckles covers several meters ahead of the user with blood." icon = 'icons/obj/lavaland/artefacts.dmi' icon_state = "bloodyknuckle" lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' @@ -1148,7 +1149,9 @@ GLOBAL_LIST_EMPTY(bloodmen_list) force = 18 var/next_reach = 0 var/next_grip = 0 + var/next_splash = 0 var/next_knuckle = 0 + var/splash_range = 9 attack_verb = list("thrashed", "pummeled", "walloped") actions_types = list(/datum/action/item_action/reach, /datum/action/item_action/visegrip) @@ -1168,6 +1171,19 @@ GLOBAL_LIST_EMPTY(bloodmen_list) return next_knuckle = world.time + COOLDOWN_ANIMAL +/obj/item/melee/knuckles/attack_self(mob/living/user) + var/turf/T = get_turf(user) + if(next_splash > world.time) + to_chat(user, span_warning("You can't do that yet!")) + return + user.visible_message(span_warning("[user] splashes blood from their knuckles!")) + playsound(T, 'sound/effects/splat.ogg', 80, 5, -1) + for(var/i = 0 to splash_range) + if(T) + user.add_splatter_floor(T) + T = get_step(T,user.dir) + next_splash = world.time + COOLDOWN + /obj/item/melee/knuckles/ui_action_click(mob/living/user, action) var/mob/living/U = user if(istype(action, /datum/action/item_action/reach)) @@ -1575,15 +1591,15 @@ GLOBAL_LIST_EMPTY(bloodmen_list) /obj/item/organ/grandcore/Remove(mob/living/carbon/H, special = 0) H.faction -= "blooded" - H.RemoveSpell (/obj/effect/proc_holder/spell/targeted/touch/raise, /obj/effect/proc_holder/spell/aoe_turf/horde) - H.RemoveSpell (new /obj/effect/proc_holder/spell/aoe_turf/horde) + H.RemoveSpell (/obj/effect/proc_holder/spell/targeted/touch/raise) + H.RemoveSpell (/obj/effect/proc_holder/spell/aoe_turf/horde) ..() /datum/action/item_action/organ_action/threebloodlings name = "Summon bloodlings" - desc = "Summon a conjure a few bloodlings at the cost of 13% blood (8 brain damage for those without blood)." + desc = "Summon a conjure a few bloodlings at the cost of 6% blood or 8 brain damage for races without blood." var/next_expulsion = 0 - var/cooldown = 10 //wheres the risk if it has a reasonable cooldown? + var/cooldown = 10 /datum/action/item_action/organ_action/threebloodlings/Trigger() var/mob/living/carbon/H = owner @@ -1596,6 +1612,6 @@ GLOBAL_LIST_EMPTY(bloodmen_list) to_chat(H, "Your head pounds as you produce bloodlings!") else to_chat(H, "You spill your blood, and it comes to life as bloodlings!") - H.blood_volume -= 70 //like 13% of your blood taken + H.blood_volume -= 35 spawn_atom_to_turf(/mob/living/simple_animal/hostile/asteroid/hivelordbrood/bloodling, owner, 3, TRUE) //think 1 in 4 is a good chance of not being targeted by fauna next_expulsion = world.time + cooldown diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 10d3a3f44183..94b3d3eba86a 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -498,8 +498,8 @@ return 0 return ..() -/mob/living/carbon/proc/vomit(lost_nutrition = 10, blood = FALSE, stun = TRUE, distance = 1, message = TRUE, toxic = FALSE) - if(HAS_TRAIT(src, TRAIT_NOHUNGER)) +/mob/living/carbon/proc/vomit(lost_nutrition = 10, blood = FALSE, stun = TRUE, distance = 1, message = TRUE, vomit_type = VOMIT_TOXIC, harm = TRUE, force = FALSE, purge_ratio = 0.1) + if((HAS_TRAIT(src, TRAIT_NOHUNGER) || HAS_TRAIT(src, TRAIT_TOXINLOVER)) && !force) return TRUE if(istype(src.loc, /obj/effect/dummy)) //cannot vomit while phasing/vomitcrawling @@ -539,12 +539,9 @@ add_splatter_floor(T) if(stun) adjustBruteLoss(3) - else if(src.reagents.has_reagent(/datum/reagent/consumable/ethanol/blazaam, needs_metabolizing = TRUE)) - if(T) - T.add_vomit_floor(src, VOMIT_PURPLE) else if(T) - T.add_vomit_floor(src, VOMIT_TOXIC)//toxic barf looks different + T.add_vomit_floor(src, vomit_type, purge_ratio) //toxic barf looks different || call purge when doing detoxicfication to pump more chems out of the stomach. T = get_step(T, dir) if (is_blocked_turf(T)) break diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 5bb356837e3e..85fc9056735c 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -627,7 +627,7 @@ return src.visible_message("[src] performs CPR on [C.name]!", span_notice("You perform CPR on [C.name].")) - SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "perform_cpr", /datum/mood_event/perform_cpr) + SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "saved_life", /datum/mood_event/saved_life) C.cpr_time = world.time log_combat(src, C, "CPRed") SSachievements.unlock_achievement(/datum/achievement/cpr, client) @@ -869,8 +869,8 @@ override = dna.species.override_float ..() -/mob/living/carbon/human/vomit(lost_nutrition = 10, blood = 0, stun = 1, distance = 0, message = 1, toxic = 0) - if(blood && (NOBLOOD in dna.species.species_traits)) +/mob/living/carbon/human/vomit(lost_nutrition = 10, blood = FALSE, stun = TRUE, distance = 1, message = TRUE, vomit_type = VOMIT_TOXIC, harm = TRUE, force = FALSE, purge_ratio = 0.1) + if(blood && (NOBLOOD in dna.species.species_traits) && !HAS_TRAIT(src, TRAIT_TOXINLOVER)) if(message) visible_message(span_warning("[src] dry heaves!"), \ span_userdanger("You try to throw up, but there's nothing in your stomach!")) diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index b329ff9fcfcd..4dbb0d58a909 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -178,6 +178,8 @@ return TRUE if(isclothing(wear_mask) && (wear_mask.clothing_flags & SCAN_REAGENTS)) return TRUE + if(HAS_TRAIT(src, TRAIT_SEE_REAGENTS)) + return TRUE /// When we're joining the game in [/mob/dead/new_player/proc/create_character], we increment our scar slot then store the slot in our mind datum. /mob/living/carbon/human/proc/increment_scar_slot() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index a685a17423ce..3eca7a5c4d9a 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -286,7 +286,7 @@ if(getToxLoss() >= 45 && nutrition > 20) lastpuke += prob(50) if(lastpuke >= 50) // about 25 second delay I guess - vomit(20, toxic = TRUE) + vomit(20) lastpuke = 0 diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index 4267667cac86..e069593fe10b 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -21,6 +21,7 @@ DISREGUARD THIS FILE IF YOU'RE INTENDING TO CHANGE ASPECTS OF PLAYER CONTROLLED punchstunthreshold = 9 //TF2 no-crits special payday_modifier = 0.7 //Neutrally viewed by NT meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/plant + exotic_blood = /datum/reagent/water disliked_food = MEAT | DAIRY | SEAFOOD | MICE liked_food = VEGETABLES | FRUIT | GRAIN changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT diff --git a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm index 4f834751d05c..1a962ddd48e2 100644 --- a/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm +++ b/code/modules/mob/living/silicon/ai/decentralized/ai_data_core.dm @@ -13,6 +13,8 @@ GLOBAL_VAR_INIT(primary_data_core, null) idle_power_usage = 1000 use_power = IDLE_POWER_USE + critical_machine = TRUE + var/primary = FALSE var/valid_ticks = MAX_AI_DATA_CORE_TICKS //Limited to MAX_AI_DATA_CORE_TICKS. Decrement by 1 every time we have an invalid tick, opposite when valid diff --git a/code/modules/projectiles/boxes_magazines/external/smg.dm b/code/modules/projectiles/boxes_magazines/external/smg.dm index ae0322de805b..83dd669e488c 100644 --- a/code/modules/projectiles/boxes_magazines/external/smg.dm +++ b/code/modules/projectiles/boxes_magazines/external/smg.dm @@ -3,7 +3,7 @@ icon_state = "46x30mmt-20" ammo_type = /obj/item/ammo_casing/c46x30mm caliber = "4.6x30mm" - max_ammo = 20 + max_ammo = 22 /obj/item/ammo_box/magazine/wt550m9/update_icon() ..() diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index ee3e270b34d8..633418ed4441 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -83,12 +83,13 @@ /obj/item/gun/ballistic/automatic/wt550 name = "security auto rifle" - desc = "An outdated personal defence weapon. Uses 4.6x30mm rounds and is designated the WT-550 Automatic Rifle. Has a single fire burst mode, but you still can't figure out what advantage that has over semi automatic." + desc = "An outdated personal defence weapon. Uses 4.6x30mm rounds and is designated the WT-550 Automatic Rifle. Has a two-round burst or a semi-automatic firing mode." icon_state = "wt550" item_state = "arg" mag_type = /obj/item/ammo_box/magazine/wt550m9 fire_delay = 2 - burst_size = 1 + burst_size = 2 + weapon_weight = WEAPON_MEDIUM can_suppress = FALSE can_bayonet = TRUE knife_x_offset = 25 diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 1590376f3916..ca2cd87abf4c 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -579,6 +579,8 @@ else var/mob/living/L = target if(!direct_target) + if(!CHECK_BITFIELD(L.mobility_flags, MOBILITY_STAND) && (L in range(2, starting))) //if we're shooting over someone who's prone and nearby bc formations are cool and not going to be unbalanced + return FALSE if(!CHECK_BITFIELD(L.mobility_flags, MOBILITY_USE | MOBILITY_STAND | MOBILITY_MOVE) || !(L.stat == CONSCIOUS)) //If they're able to 1. stand or 2. use items or 3. move, AND they are not softcrit, they are not stunned enough to dodge projectiles passing over. return FALSE return TRUE diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm index 7b3a39fadc73..46253574cc8a 100644 --- a/code/modules/projectiles/projectile/bullets/shotgun.dm +++ b/code/modules/projectiles/projectile/bullets/shotgun.dm @@ -63,7 +63,7 @@ /obj/item/projectile/bullet/pellet var/tile_dropoff = 0.45 - var/tile_dropoff_s = 0.5 + var/tile_dropoff_s = 0.35 /obj/item/projectile/bullet/pellet/shotgun_buckshot name = "buckshot pellet" @@ -80,7 +80,7 @@ /obj/item/projectile/bullet/pellet/shotgun_rubbershot name = "rubbershot pellet" damage = 3 - stamina = 11 + stamina = 13 sharpness = SHARP_NONE /obj/item/projectile/bullet/pellet/shotgun_cryoshot diff --git a/code/modules/projectiles/projectile/bullets/smg.dm b/code/modules/projectiles/projectile/bullets/smg.dm index ba380e30df28..b0d45465a4ab 100644 --- a/code/modules/projectiles/projectile/bullets/smg.dm +++ b/code/modules/projectiles/projectile/bullets/smg.dm @@ -10,22 +10,22 @@ /obj/item/projectile/bullet/c46x30mm name = "4.6x30mm bullet" - damage = 20 + damage = 13 wound_bonus = -5 bare_wound_bonus = 5 armour_penetration = 20 /obj/item/projectile/bullet/c46x30mm_ap name = "4.6x30mm armor-piercing bullet" - damage = 15 + damage = 10 armour_penetration = 50 /obj/item/projectile/bullet/incendiary/c46x30mm name = "4.6x30mm incendiary bullet" - damage = 10 + damage = 7 fire_stacks = 1 /obj/item/projectile/bullet/c46x30mm_rubber name = "4.6x30mm rubber bullet" - damage = 5 - stamina = 20 //slightly more effective than the detective's revolver when fired in bursts + damage = 4 + stamina = 21 //slightly more effective than the detective's revolver when fired in bursts diff --git a/code/modules/projectiles/projectile/reusable/arrow.dm b/code/modules/projectiles/projectile/reusable/arrow.dm index cd6313b206de..7ee6be11f570 100644 --- a/code/modules/projectiles/projectile/reusable/arrow.dm +++ b/code/modules/projectiles/projectile/reusable/arrow.dm @@ -5,7 +5,7 @@ flag = MELEE icon_state = "arrow" ammo_type = /obj/item/ammo_casing/caseless/arrow - var/embed_chance = 0.5 + var/embed_chance = 0.4 var/break_chance = 10 var/fauna_damage_bonus = 20 @@ -40,7 +40,7 @@ name = "Ashen arrow" desc = "Fire Hardened arrow." damage = 25 - embed_chance = 0.3 + embed_chance = 0.25 break_chance = 0 ammo_type = /obj/item/ammo_casing/caseless/arrow/ash @@ -49,7 +49,7 @@ desc = "An arrow made from bone, wood, and sinew." damage = 30 armour_penetration = 20 - embed_chance = 0.4 + embed_chance = 0.33 break_chance = 0 ammo_type = /obj/item/ammo_casing/caseless/arrow/bone_tipped @@ -68,7 +68,7 @@ damage = 25 fauna_damage_bonus = 40 armour_penetration = 35 - embed_chance = 0.5 + embed_chance = 0.4 break_chance = 0 ammo_type = /obj/item/ammo_casing/caseless/arrow/chitin @@ -76,8 +76,8 @@ name = "Bamboo arrow" desc = "An arrow made from bamboo." damage = 10 - embed_chance = 0.7 - break_chance = 67 + embed_chance = 0.5 + break_chance = 50 ammo_type = /obj/item/ammo_casing/caseless/arrow/bamboo /obj/item/projectile/bullet/reusable/arrow/bronze //Inferior metal. Slightly better than ashen @@ -93,16 +93,16 @@ name = "Glass arrow" desc = "Glass tipped arrow" damage = 15 - embed_chance = 0.5 - break_chance = 33 + embed_chance = 0.3 + break_chance = 25 ammo_type = /obj/item/ammo_casing/caseless/arrow/glass /obj/item/projectile/bullet/reusable/arrow/glass/plasma //Immensely capable of puncturing through materials; plasma is a robust material, more capable of slicing through protection name = "Plasma Glass arrow" desc = "Plasma Glass tipped arrow" - damage = 15 - armour_penetration = 50 - embed_chance = 0.5 + damage = 18 + armour_penetration = 60 + embed_chance = 0.4 break_chance = 0 ammo_type = /obj/item/ammo_casing/caseless/arrow/glass/plasma @@ -139,7 +139,7 @@ . = ..() if(iscarbon(target)) var/mob/living/carbon/M = target - M.apply_damage(10, BURN) + M.apply_damage(8, BURN) M.adjust_fire_stacks(1) M.IgniteMob() @@ -148,7 +148,7 @@ icon_state = "arrow_energy" damage = 25 damage_type = BURN - var/embed_chance = 0.5 + var/embed_chance = 0.4 var/obj/item/embed_type = /obj/item/ammo_casing/caseless/arrow/energy /obj/item/projectile/energy/arrow/on_hit(atom/target, blocked = FALSE) @@ -163,7 +163,7 @@ name = "disabler bolt" icon_state = "arrow_disable" light_color = LIGHT_COLOR_BLUE - damage = 20 + damage = 40 damage_type = STAMINA embed_type = /obj/item/ammo_casing/caseless/arrow/energy/disabler diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 1102ebcd142b..80cc308cf2d3 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -469,6 +469,7 @@ /datum/reagent/consumable/tea, /datum/reagent/consumable/icetea, /datum/reagent/consumable/space_cola, + /datum/reagent/consumable/rootbeer, /datum/reagent/consumable/spacemountainwind, /datum/reagent/consumable/dr_gibb, /datum/reagent/consumable/space_up, diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index c555556bbb9c..86bdbf870cdb 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -479,6 +479,20 @@ M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) ..() +/datum/reagent/consumable/rootbeer + name = "Root Beer" + description = "Beer, but not." + color = "#251505" // rgb: 16, 8, 0 + taste_description = "root and beer" + glass_icon_state = "glass_brown" + glass_name = "glass of root beer" + glass_desc = "A glass of refreshing fizzing root beer." + +/datum/reagent/consumable/rootbeer/on_mob_life(mob/living/carbon/M) + M.drowsyness = max(0,M.drowsyness-5) + M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) + ..() + /datum/reagent/consumable/nuka_cola name = "Nuka Cola" description = "Cola, cola never changes." diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 349eacbf9eb1..f1f338b611ce 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -343,6 +343,17 @@ category = list("Implants", "Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL +/datum/design/cyberimp_science_analyzer + name = "Chemical Analyzer Implant" + desc = "These cybernetic eye implants will allow rapid identification of reagents. Wiggle eyes to control." + id = "ci-scihud" + build_type = PROTOLATHE | MECHFAB + construction_time = 50 + materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/silver = 600, /datum/material/gold = 600, /datum/material/plastic = 150) + build_path = /obj/item/organ/cyberimp/eyes/hud/science + category = list("Implants", "Medical Designs") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + /datum/design/cyberimp_xray name = "X-ray Eyes" desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile." diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 7028911e967e..567ba415525f 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -310,7 +310,7 @@ /datum/design/mag_oldsmg name = "WT-550 Auto Gun Magazine (4.6x30mm)" - desc = "A 20 round magazine for the out of date security WT-550 Auto Rifle." + desc = "A 22 round magazine for the out of date security WT-550 Auto Rifle." id = "mag_oldsmg" build_type = PROTOLATHE materials = list(/datum/material/iron = 4000) @@ -320,7 +320,7 @@ /datum/design/mag_oldsmg/ap_mag name = "WT-550 Auto Gun Armour Piercing Magazine (4.6x30mm AP)" - desc = "A 20 round armour piercing magazine for the out of date security WT-550 Auto Rifle." + desc = "A 22 round armour piercing magazine for the out of date security WT-550 Auto Rifle." id = "mag_oldsmg_ap" materials = list(/datum/material/iron = 6000, /datum/material/silver = 600) build_path = /obj/item/ammo_box/magazine/wt550m9/wtap @@ -328,7 +328,7 @@ /datum/design/mag_oldsmg/ic_mag name = "WT-550 Auto Gun Incendiary Magazine (4.6x30mm IC)" - desc = "A 20 round armour piercing magazine for the out of date security WT-550 Auto Rifle." + desc = "A 22 round armour piercing magazine for the out of date security WT-550 Auto Rifle." id = "mag_oldsmg_ic" materials = list(/datum/material/iron = 6000, /datum/material/silver = 600, /datum/material/glass = 1000) build_path = /obj/item/ammo_box/magazine/wt550m9/wtic @@ -336,7 +336,7 @@ /datum/design/mag_oldsmg/rubber_mag name = "WT-550 Auto Gun Rubber Bullet Magazine (4.6x30mm Rubber)" - desc = "A 20 round rubber bullet magazine for the out of date security WT-550 Auto Rifle." + desc = "A 22 round rubber bullet magazine for the out of date security WT-550 Auto Rifle." id = "mag_oldsmg_rubber" materials = list(/datum/material/iron = 4000) build_path = /obj/item/ammo_box/magazine/wt550m9/wtr diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm index 0c1a0ce2515b..c4c7b8417602 100644 --- a/code/modules/research/techweb/_techweb.dm +++ b/code/modules/research/techweb/_techweb.dm @@ -14,6 +14,7 @@ var/list/hidden_nodes = list() //Hidden nodes. id = TRUE. Used for unhiding nodes when requirements are met by removing the entry of the node. var/list/deconstructed_items = list() //items already deconstructed for a generic point boost. path = list(point_type = points) var/list/research_points = list() //Available research points. type = number + var/list/stored_research_points = list() //Stored research, up to doubles server mining when present. type = number var/list/obj/machinery/computer/rdconsole/consoles_accessing = list() var/id = "generic" var/list/research_logs = list() //IC logs. @@ -142,6 +143,7 @@ /datum/techweb/proc/get_researched_nodes() return researched_nodes - hidden_nodes +/// procs for modifying a specific point type amount /datum/techweb/proc/add_point_type(type, amount) if(!SSresearch.point_types[type] || (amount <= 0)) return FALSE @@ -160,6 +162,25 @@ research_points[type] = max(0, research_points[type] - amount) return TRUE +/// procs for modifying a specific point type's stored research amount +/datum/techweb/proc/add_stored_point_type(type, amount) + if(!SSresearch.point_types[type] || (amount <= 0)) + return FALSE + stored_research_points[type] = max(0, stored_research_points[type] + amount) + return TRUE + +/datum/techweb/proc/modify_stored_point_type(type, amount) + if(!SSresearch.point_types[type]) + return FALSE + stored_research_points[type] = max(0, stored_research_points[type] + amount) + return TRUE + +/datum/techweb/proc/remove_stored_point_type(type, amount) + if(!SSresearch.point_types[type] || (amount <= 0)) + return FALSE + stored_research_points[type] = max(0, stored_research_points[type] - amount) + return TRUE + /datum/techweb/proc/add_design_by_id(id, custom = FALSE) return add_design(SSresearch.techweb_design_by_id(id), custom) diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 5b2e00bd62af..00887016893e 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -547,7 +547,7 @@ display_name = "Cybernetic Implants" description = "Electronic implants that improve humans." prereq_ids = list("adv_biotech", "datatheory") - design_ids = list("ci-nutriment", "ci-breather", "ci-gloweyes", "ci-welding", "ci-medhud", "ci-sechud", "ci-diaghud") + design_ids = list("ci-nutriment", "ci-breather", "ci-gloweyes", "ci-welding", "ci-medhud", "ci-sechud", "ci-scihud", "ci-diaghud") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 diff --git a/code/modules/research/techweb/layout.dm b/code/modules/research/techweb/layout.dm index 80c986c9ebef..3f2a0c33c30a 100644 --- a/code/modules/research/techweb/layout.dm +++ b/code/modules/research/techweb/layout.dm @@ -75,10 +75,6 @@ ui_x = 288 ui_y = -96 -/datum/techweb_node/xenoorgan_biotech - ui_x = 256 - ui_y = -64 - /datum/techweb_node/bio_process ui_x = 224 ui_y = -224 @@ -219,6 +215,10 @@ ui_x = 32 ui_y = -832 +/datum/techweb_node/xenoorgan_biotech + ui_x = 256 + ui_y = -64 + /datum/techweb_node/cyborg_upg_med ui_x = 352 ui_y = -160 @@ -287,6 +287,14 @@ ui_x = 480 ui_y = -32 +/datum/techweb_node/ai_cpu_advanced + ui_x = 992 + ui_y = 64 + +/datum/techweb_node/ai_ram_high_cap + ui_x = 544 + ui_y = 64 + /datum/techweb_node/spacepod_storage ui_x = 96 ui_y = -832 @@ -327,10 +335,6 @@ ui_x = 96 ui_y = -448 -/datum/techweb_node/magmite_mining - ui_x = 160 - ui_y = -512 - /datum/techweb_node/janitor ui_x = -320 ui_y = -160 @@ -371,6 +375,18 @@ ui_x = -256 ui_y = -224 +/datum/techweb_node/ai_cpu_bluespace + ui_x = 992 + ui_y = 192 + +/datum/techweb_node/ai_ram_bluespace + ui_x = 544 + ui_y = 192 + +/datum/techweb_node/ai_architecture_bluespace + ui_x = 768 + ui_y = 160 + /datum/techweb_node/adv_plasma ui_x = 32 ui_y = -384 @@ -395,6 +411,14 @@ ui_x = -576 ui_y = -96 +/datum/techweb_node/ai_cpu_1 + ui_x = 896 + ui_y = 64 + +/datum/techweb_node/ai_ram_1 + ui_x = 640 + ui_y = 64 + /datum/techweb_node/emp_super ui_x = -224 ui_y = -128 @@ -435,6 +459,18 @@ ui_x = -416 ui_y = -256 +/datum/techweb_node/ai_cpu_experimental + ui_x = 992 + ui_y = 128 + +/datum/techweb_node/ai_ram_hyper + ui_x = 544 + ui_y = 128 + +/datum/techweb_node/magmite_mining + ui_x = 160 + ui_y = -512 + /datum/techweb_node/mech_diamond_drill ui_x = 96 ui_y = -512 @@ -479,6 +515,14 @@ ui_x = -416 ui_y = -320 +/datum/techweb_node/ai_cpu_3 + ui_x = 896 + ui_y = 192 + +/datum/techweb_node/ai_ram_3 + ui_x = 640 + ui_y = 192 + /datum/techweb_node/spacepod_advplasmacutter ui_x = 160 ui_y = -640 @@ -499,6 +543,18 @@ ui_x = -576 ui_y = -32 +/datum/techweb_node/ai_architecture_256 + ui_x = 768 + ui_y = 96 + +/datum/techweb_node/ai_cpu_2 + ui_x = 896 + ui_y = 128 + +/datum/techweb_node/ai_ram_2 + ui_x = 640 + ui_y = 128 + /datum/techweb_node/xenology ui_x = 480 ui_y = -96 diff --git a/code/modules/spells/spell_types/conjure.dm b/code/modules/spells/spell_types/conjure.dm index 4cf19ca5dd0b..756ce49e4d13 100644 --- a/code/modules/spells/spell_types/conjure.dm +++ b/code/modules/spells/spell_types/conjure.dm @@ -101,7 +101,7 @@ /obj/effect/proc_holder/spell/aoe_turf/horde name = "Horde" - desc = "Bring all your existing bloodmen to you at the cost of 18% blood (15 brain damage for those without blood)." + desc = "Bring all your existing bloodmen to you at the cost of 3% blood per bloodman or 5 brain damage per bloodman if you're a bloodless race." action_icon = 'icons/mob/actions/actions_cult.dmi' action_icon_state = "horde" var/list/summon_type = list("/mob/living/simple_animal/hostile/asteroid/hivelord/legion/bloodman") @@ -123,7 +123,7 @@ user.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5) to_chat(usr, span_notice("You can almost feel your brain writhing as you call your bloodmen to you.")) else - user.blood_volume -= 30 + user.blood_volume -= 15 to_chat(usr, span_notice("You feel yourself becoming paler with every minion called.")) if(T) bloodman.forceMove(T) diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm index 724248192792..0f18c664b5a2 100644 --- a/code/modules/spells/spell_types/godhand.dm +++ b/code/modules/spells/spell_types/godhand.dm @@ -141,18 +141,19 @@ /obj/item/melee/touch_attack/raisehand name = "\improper raise bloodman" - desc = "Blood covers your hand like a glove as it waits for a new host." + desc = "Prepare to raise a bloodman for about 5% of your blood or 5 brain damage if you're a bloodless race." on_use_sound = 'sound/magic/wandodeath.ogg' icon_state = "flagellation" item_state = "hivehand" color = "#FF0000" + /obj/item/melee/touch_attack/raisehand/afterattack(atom/target, mob/living/carbon/user, proximity) var/mob/living/carbon/human/M = target if(!ishuman(M) || M.stat != DEAD) - to_chat(M, span_notice("You must be targeting a dead humanoid!")) + to_chat(user, span_notice("You must be targeting a dead humanoid!")) return if(GLOB.bloodmen_list.len > 2) - to_chat(M, span_notice("You can't control that many minions!")) + to_chat(user, span_notice("You can't control that many minions!")) return if(NOBLOOD in M.dna.species.species_traits) M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5) @@ -163,9 +164,8 @@ L.stored_mob = M M.forceMove(L) qdel(src) - user.blood_volume -= 50 // 9% blood cost, cheaper than the other spell because its not like you can stop near a corpse or find one near you in a fight - to_chat(user, "You curse the body with your blood, leaving you feeling a bit light-headed.") - + user.blood_volume -= 25 + to_chat(user, span_notice("You curse the body with your blood, leaving you feeling a bit light-headed.")) /obj/item/melee/touch_attack/pacifism name = "\improper pacifism touch" diff --git a/code/modules/spells/spell_types/touch_attacks.dm b/code/modules/spells/spell_types/touch_attacks.dm index a4fb116a2b7f..3b06f41a4882 100644 --- a/code/modules/spells/spell_types/touch_attacks.dm +++ b/code/modules/spells/spell_types/touch_attacks.dm @@ -104,9 +104,9 @@ hand_path = /obj/item/melee/touch_attack/pacifism school = "evocation" - charge_max = 600 + charge_max = 1 MINUTES clothes_req = FALSE - cooldown_min = 2 MINUTES + cooldown_min = 20 SECONDS action_icon ='icons/mob/gondolas.dmi' action_icon_state = "gondola" diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index 1289ddc587e1..7115f32f923c 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -45,3 +45,15 @@ name = "Contraband Security HUD Implant" desc = "A Cybersun Industries brand Security HUD Implant. These illicit cybernetic eye implants will display a security HUD over everything you see." syndicate_implant = TRUE + +/obj/item/organ/cyberimp/eyes/hud/science + name = "Chemical Analyzer implant" + desc = "These cybernetic eye implants will allow rapid identification of reagents." + +/obj/item/organ/cyberimp/eyes/hud/science/Insert(var/mob/living/carbon/M, var/special = 0, drop_if_replaced = FALSE) + ..() + ADD_TRAIT(owner, TRAIT_SEE_REAGENTS, src) + +/obj/item/organ/cyberimp/eyes/hud/science/Remove(var/mob/living/carbon/M, var/special = 0) + REMOVE_TRAIT(owner, TRAIT_SEE_REAGENTS, src) + ..() diff --git a/code/modules/surgery/stomachpump.dm b/code/modules/surgery/stomachpump.dm new file mode 100644 index 000000000000..45b57042b1ed --- /dev/null +++ b/code/modules/surgery/stomachpump.dm @@ -0,0 +1,53 @@ +/datum/surgery/stomach_pump + name = "Stomach Pump" + steps = list( + /datum/surgery_step/incise, + /datum/surgery_step/retract_skin, + /datum/surgery_step/incise, + /datum/surgery_step/clamp_bleeders, + /datum/surgery_step/stomach_pump, + /datum/surgery_step/close) + + target_mobtypes = list(/mob/living/carbon/human) + possible_locs = list(BODY_ZONE_CHEST) + requires_bodypart_type = TRUE + ignore_clothes = FALSE + +/datum/surgery/stomach_pump/can_start(mob/user, mob/living/carbon/target) + var/obj/item/organ/stomach/target_stomach = target.getorganslot(ORGAN_SLOT_STOMACH) + if(HAS_TRAIT(target, TRAIT_HUSK)) + return FALSE + if(!target_stomach) + return FALSE + return ..() + +//Working the stomach by hand in such a way that you induce vomiting. +/datum/surgery_step/stomach_pump + name = "Pump Stomach" + accept_hand = TRUE + repeatable = TRUE + time = 2 SECONDS + +/datum/surgery_step/stomach_pump/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, span_notice("You begin pumping [target]'s stomach..."), + span_notice("[user] begins to pump [target]'s stomach."), + span_notice("[user] begins to press on [target]'s chest.")) + display_pain(target, "You feel a horrible sloshing feeling in your gut! You're going to be sick!") + +/datum/surgery_step/stomach_pump/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) + if(ishuman(target)) + var/mob/living/carbon/human/target_human = target + display_results(user, target, span_notice("[user] forces [target_human] to vomit, cleansing their stomach of some chemicals!"), + span_notice("[user] forces [target_human] to vomit, cleansing their stomach of some chemicals!"), + "[user] forces [target_human] to vomit!") + target_human.vomit(20, FALSE, TRUE, 1, TRUE, FALSE, purge_ratio = 0.67) //higher purge ratio than regular vomiting + return ..() + +/datum/surgery_step/stomach_pump/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(ishuman(target)) + var/mob/living/carbon/human/target_human = target + display_results(user, target, span_warning("You screw up, brusing [target_human]'s chest!"), + span_warning("[user] screws up, brusing [target_human]'s abdomen!"), + span_warning("[user] screws up!")) + target_human.adjustOrganLoss(ORGAN_SLOT_STOMACH, 10) + target_human.adjustBruteLoss(5) diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index 0274b588e0cd..92714731a597 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -104,6 +104,8 @@ if(IS_MEDICAL(user)) user_speed_mod = 0.8 + var/previous_loc = user.loc + if(do_after(user, time * tool_speed_mod * user_speed_mod, target)) var/prob_chance = 100 @@ -129,7 +131,9 @@ surgery.status++ if(surgery.status > surgery.steps.len) surgery.complete() - + else + if(!(previous_loc == user.loc)) + move_ouchie(user, target, target_zone, tool, advance) surgery.step_in_progress = FALSE return advance @@ -248,8 +252,27 @@ var/final_ouchie_chance = SURGERY_FUCKUP_CHANCE * ouchie_mod if(!prob(final_ouchie_chance)) return - user.visible_message(span_boldwarning("[target] flinches, bumping [user]'s [tool ? tool.name : "hand"] into something important!"), span_boldwarning("[target] flinches, bumping your [tool ? tool.name : "hand"] into something important!")) + user.visible_message(span_boldwarning("[target] flinches, bumping [user]'s [tool ? tool.name : "hand"] into something important!"), span_boldwarning("[target] flinches, bumping your [tool ? tool.name : "hand"] into something important!")) target.apply_damage(fuckup_damage, fuckup_damage_type, target_zone) //if(ishuman(target) &&fuckup_damage_type == BRUTE && prob(final_ouchie_chance/2)) //var/mob/living/carbon/human/H = target //H.bleed_rate += min(fuckup_damage/4, 10) + +///Deal damage if the user moved during the op +/datum/surgery_step/proc/move_ouchie(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, success) + user.visible_message(span_boldwarning("[user] bumps [p_their(FALSE, user)] [tool ? tool.name : "hand"] into something important!"), span_boldwarning("You move, bumping your [tool ? tool.name : "hand"] into something important!")) + target.apply_damage(fuckup_damage, fuckup_damage_type, target_zone) + +/** + * Sends a pain message to the target, including a chance of screaming. + * + * Arguments: + * * target - Who the message will be sent to + * * pain_message - The message to be displayed + * * mechanical_surgery - Boolean flag that represents if a surgery step is done on a mechanical limb (therefore does not force scream) + */ +/datum/surgery_step/proc/display_pain(mob/living/target, pain_message, mechanical_surgery = FALSE) + if(!HAS_TRAIT(target, TRAIT_SURGERY_PREPARED)) + to_chat(target, span_userdanger(pain_message)) + if(prob(30) && !mechanical_surgery) + target.emote("scream") diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index 82b77793eeda..4298c723052e 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -465,6 +465,9 @@ GLOBAL_LIST_EMPTY(vending_products) break /obj/machinery/vending/proc/tilt(mob/fatty, crit=FALSE) + var/no_tipper = FALSE + if(!fatty) + no_tipper = TRUE visible_message("[src] tips over!") tilted = TRUE layer = ABOVE_MOB_LAYER @@ -476,7 +479,7 @@ GLOBAL_LIST_EMPTY(vending_products) if(forcecrit) crit_case = forcecrit - if(in_range(fatty, src)) + if(no_tipper || in_range(fatty, src)) for(var/mob/living/L in get_turf(fatty)) var/mob/living/carbon/C = L @@ -544,7 +547,7 @@ GLOBAL_LIST_EMPTY(vending_products) M.Turn(pick(90, 270)) transform = M - if(get_turf(fatty) != get_turf(src)) + if(fatty && get_turf(fatty) != get_turf(src)) throw_at(get_turf(fatty), 1, 1, spin=FALSE) /obj/machinery/vending/proc/untilt(mob/user) diff --git a/code/modules/vending/cola.dm b/code/modules/vending/cola.dm index b8410e719044..4e430624691a 100644 --- a/code/modules/vending/cola.dm +++ b/code/modules/vending/cola.dm @@ -13,6 +13,7 @@ /obj/item/reagent_containers/food/drinks/soda_cans/pwr_game = 10, /obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime = 10, /obj/item/reagent_containers/food/drinks/soda_cans/sol_dry = 10, + /obj/item/reagent_containers/food/drinks/soda_cans/rootbeer=10, /obj/item/reagent_containers/glass/beaker/waterbottle = 10) contraband = list(/obj/item/reagent_containers/food/drinks/soda_cans/thirteenloko = 6, /obj/item/reagent_containers/food/drinks/soda_cans/shamblers = 6, diff --git a/config/game_options.txt b/config/game_options.txt index 896c6fc3c00d..17241a984872 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -20,7 +20,7 @@ REVIVAL_BRAIN_LIFE -1 JOB_SPECIES_WHITELIST /datum/job/captain human JOB_SPECIES_WHITELIST /datum/job/hop human JOB_SPECIES_WHITELIST /datum/job/hos human,lizard -JOB_SPECIES_WHITELIST /datum/job/chief_engineer human,plasmaman,moth,ethereal,preternis, polysmorph +JOB_SPECIES_WHITELIST /datum/job/chief_engineer human,plasmaman,moth,ethereal,preternis,polysmorph JOB_SPECIES_WHITELIST /datum/job/rd human,pod,plasmaman,ethereal,preternis,polysmorph JOB_SPECIES_WHITELIST /datum/job/cmo human,lizard,pod,moth diff --git a/html/changelog.html b/html/changelog.html index 5f9e21ac3598..6f0c1a81a0b5 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -58,6 +58,156 @@ -->
+

19 June 2022

+

@LazennG, @ToasterBiome, Chubbygummibear updated:

+ +

Galacticruler, @Chubbygummibear, @Hopekz updated:

+ +

comma, orelbon updated:

+ +

00ze-cyclone updated:

+ +

@ToasterBiome @Chubbygummibear @LazennG updated:

+ +

Chubbygummibear updated:

+ +

GalacticRuler updated:

+ +

Skrem7 updated:

+ +

SomeguyManperson updated:

+ +

TheBonded, ported to YogStation by SuperSlayer updated:

+ +

TheGamerdk updated:

+ +

ToasterBiome updated:

+ +

TymurShatillo updated:

+ +

jachlompsky updated:

+ +

nmajask updated:

+ +

ynot01 updated:

+ + +

18 June 2022

+

Mothblocks, ported to YogStation by SuperSlayer updated:

+ +

Skrem7 updated:

+ +

tattax updated:

+ +

ynot01 updated:

+ + +

17 June 2022

+

AlvCyktor updated:

+ +

JamieD1 updated:

+ +

nmajask updated:

+ + +

16 June 2022

+

GalacticRuler updated:

+ +

ToasterBiome updated:

+ + +

15 June 2022

+

SomeguyManperson updated:

+ +

14 June 2022

@GalacticRuler, Chubbygummibear updated:

GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 8b3d1bfab3eb..275d5410486a 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -32080,3 +32080,121 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. ynot01: - tweak: Internal Affairs Agents are now equipped with dusting implants instead of cyanide capsules +2022-06-15: + SomeguyManperson: + - bugfix: no more ruin spawned corpses with gpses because people with gpses dont + get not recovered (this is canon shut up) + - tweak: gpses on miners now properly iterate numbers i.e. MINE1 2 3 4 rather than + just all being MINE0. The mining medic isn't included because they suck + - tweak: mining medic no longer gets 2 gpses +2022-06-16: + GalacticRuler: + - rscadd: Added one new 3x3 maint ruin themed around vending machines + - bugfix: Corrected missing spaces in station.dm + ToasterBiome: + - bugfix: tinted window in metastation courtroom is now a proper window spawner +2022-06-17: + AlvCyktor: + - rscadd: Barq is good apparently + JamieD1: + - rscdel: Removes ALL button from investigate. + nmajask: + - bugfix: fixed wigs using a different sprite than it should +2022-06-18: + Mothblocks, ported to YogStation by SuperSlayer: + - rscadd: Defibing people now gives positive mood + Skrem7: + - tweak: Rubber shot more damage and less damage falloff + tattax: + - bugfix: vanishing act now works, frenzy exit is now setup properly + ynot01: + - spellcheck: fixed fish descriptions + - spellcheck: fixed card descriptions +2022-06-19: + ' @LazennG, @ToasterBiome, Chubbygummibear': + - rscadd: Basalt Katana gets an activatable dodge roll mechanic + - rscadd: Dodge roll costs 5 stamina on lavaland and 15 on station but gives you + .5 seconds of iframes and flying. Dodge rolling into a wall or another person + will bonk and stun you, same with stam-critting yourself. i-frames only block + straight up damage numbers, explosions still throw and deafen you, cc effects + like a bola will still stick + - tweak: Basalt katana force down to 18 to avoid miner ninjas tearing up the crew + - tweak: Basalt katana damage on lavaland fauna up to 70, including megafauna + - soundadd: dodge roll sound effect + - imageadd: evasion icon to go with the popup letting you know you're in i-frames + ' Galacticruler, @Chubbygummibear, @Hopekz': + - rscadd: Added new eye implant for reagent scanning, the chemical analyzer implant + - tweak: added new implant to the tech node with the other HUD implants + - tweak: added third mob-level check to allow for the new implant to work + ' comma, orelbon': + - rscadd: Added holosigns from Baystation + 00ze-cyclone: + - rscdel: Removed a space in the species whitelisting + - bugfix: maybe fixed polys not being able to be CE (I hope it's not actually something + as stupid as a singular space that broke everything though it would be nice + because it would mean that it's easy to fix) + '@ToasterBiome @Chubbygummibear @LazennG': + - rscadd: Added inhand ability for bloody knuckles + - tweak: tweaked some recent loot to hopefully be less useless + Chubbygummibear: + - tweak: Preternis eyes no longer delete themselves when in a non preternis host + - tweak: Preternis eyes use their organ health as a charge meter. They drain (take + damage at .5 eye damage per tick) in a non-preternis and recharge quickly (.5 + eye healing per tick) in an actual preternis. + - tweak: Preternis eyes depend on being high organ health to use their night vision + rather than preternis charge meter. + - tweak: Preternis eyes are naturally cybernetic, so they don't decay outside of + a body and you get flashed if emp'd. although your eyes are probably the least + of your worries if emp'd as a preternis + - rscadd: Stomach Pumping surgery. A quick way to deal with someone, living or dead + who has way too many reagents in their system. + - tweak: I updated our vomit code and i don't want to talk about it. players won't + notice a difference + GalacticRuler: + - rscadd: Adds new Fishing themed 10x10 maint ruin. + - tweak: Adds new ruin to station.dmm + Skrem7: + - tweak: WT has 2-rnd burst back, bullets do less individual damage, magazine size + increased + - tweak: Arrows are now slightly more sensible considering they can be produced + and used by just about anyone as a ranged weapon that does more damage than + most station weaponry such as the welder or saw. + - tweak: Secbelt + variants can hold shotgun shell boxes and teleshields, bulky + now. + - tweak: Shotgun shell boxes can now only carry shotgun shells. + - tweak: Beanbag boxes spawn with 7 beanbags, rather than 6. + - tweak: Security webbing and HoS belt storage buffed. + - tweak: HoS now spawns with their belt and teleshield from the locker, extra baton/flash/cuffs + moved to locker. + - tweak: Assault belt now identical to tactical webbing. + - tweak: Shoulder holster normal-sized again. + - tweak: Bandolier holds more shells. + SomeguyManperson: + - tweak: toxins bombs no longer give direct research, instead doubling research + speed for the amount of points they are worth + - tweak: bloodsucker frenzy now provides reduced damage slowdown for its duration + - tweak: adds line battles, you can now shoot over people who are both prone and + within 2 tiles of you + - tweak: this also means you can combat flop to matrix bullets at close range + TheBonded, ported to YogStation by SuperSlayer: + - rscadd: podpeople from replica pods now have water blood by default, and inherit + their blood chemical from the most abundant chemical trait in their seeds if + applicable. + TheGamerdk: + - tweak: AI gets 1 more research point per CPU + - rscadd: AI techs are no longer hiding in the techweb + - tweak: AI cores should no longer turn off due to grid failure events + ToasterBiome: + - rscadd: Adds collapsable fishing rod + - bugfix: fixes fishing rod right inhand + - bugfix: eating fish now works + - tweak: make fishing loot datums make a bit more sense + TymurShatillo: + - bugfix: Fixes pacifism touch cooldown + jachlompsky: + - bugfix: gangrel transform now gives the user armor and increased punch damage + nmajask: + - tweak: moving while doing a surgery now hurts the patient + ynot01: + - tweak: Destroying the bluespace locker now teleports everything inside to the + station diff --git a/icons/mob/inhands/equipment/fishing_lefthand.dmi b/icons/mob/inhands/equipment/fishing_lefthand.dmi deleted file mode 100644 index 0571e36445c3..000000000000 Binary files a/icons/mob/inhands/equipment/fishing_lefthand.dmi and /dev/null differ diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index ca7fcbf7782d..1f80e7fc0f27 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 760dd88e7a4f..1b1ca6b3d3d7 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index dcd91f7bf928..d5071fefda9f 100644 Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ diff --git a/icons/obj/holosign.dmi b/icons/obj/holosign.dmi new file mode 100644 index 000000000000..16236419a38d Binary files /dev/null and b/icons/obj/holosign.dmi differ diff --git a/yogstation.dme b/yogstation.dme index 9a22e57bc678..2fd81b7bf4da 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -746,6 +746,7 @@ #include "code\game\machinery\gulag_teleporter.dm" #include "code\game\machinery\harvester.dm" #include "code\game\machinery\hologram.dm" +#include "code\game\machinery\holosign.dm" #include "code\game\machinery\igniter.dm" #include "code\game\machinery\iv_drip.dm" #include "code\game\machinery\launch_pad.dm" @@ -3164,6 +3165,7 @@ #include "code\modules\surgery\prosthetic_replacement.dm" #include "code\modules\surgery\remove_embedded_object.dm" #include "code\modules\surgery\repair_puncture.dm" +#include "code\modules\surgery\stomachpump.dm" #include "code\modules\surgery\surgery.dm" #include "code\modules\surgery\surgery_step.dm" #include "code\modules\surgery\tools.dm" @@ -3350,6 +3352,7 @@ #include "yogstation\code\datums\mutations\extendoarm.dm" #include "yogstation\code\datums\ruins\free_miners.dm" #include "yogstation\code\datums\ruins\station.dm" +#include "yogstation\code\datums\status_effects\buffs.dm" #include "yogstation\code\datums\status_effects\neutral.dm" #include "yogstation\code\datums\traits\negative.dm" #include "yogstation\code\datums\wires\disposals.dm" diff --git a/yogstation/code/controllers/subsystem/bluespace_locker.dm b/yogstation/code/controllers/subsystem/bluespace_locker.dm index fc97e2545728..9ac6ef56e347 100644 --- a/yogstation/code/controllers/subsystem/bluespace_locker.dm +++ b/yogstation/code/controllers/subsystem/bluespace_locker.dm @@ -67,3 +67,15 @@ SUBSYSTEM_DEF(bluespace_locker) internal_locker.dump_contents() internal_locker.update_icon() external_locker.update_icon() + +/datum/controller/subsystem/bluespace_locker/proc/redistribute_locker() + if(!internal_locker) + return + var/area/A = get_area(internal_locker) + for(var/atom/movable/M in A) + if(M == internal_locker) + continue + if(istype(M, /obj/machinery/light)) + continue + M.forceMove(find_safe_turf()) + bluespaceify_random_locker() diff --git a/yogstation/code/datums/components/fishable.dm b/yogstation/code/datums/components/fishable.dm index 49c2f0c7b07b..274d5214dd8d 100644 --- a/yogstation/code/datums/components/fishable.dm +++ b/yogstation/code/datums/components/fishable.dm @@ -1,28 +1,67 @@ +#define FISHING_LOOT_NOTHING "nothing" +#define FISHING_LOOT_JUNK "junk" +#define FISHING_LOOT_COMMON "common" +#define FISHING_LOOT_UNCOMMON "uncommon" +#define FISHING_LOOT_RARE "rare" + /datum/component/fishable dupe_mode = COMPONENT_DUPE_UNIQUE - var/datum/fishing_loot/common_loot = new /datum/fishing_loot/water/common + var/datum/fishing_loot/loot = new /datum/fishing_loot/water -/datum/component/fishable/proc/getCommonLoot() - return pick(common_loot.rewards) /datum/component/fishable/Initialize() if(!istype(parent, /turf)) return COMPONENT_INCOMPATIBLE +/datum/component/fishable/proc/get_reward(var/fishing_power = 0) + var/chance = list( + FISHING_LOOT_NOTHING = min(max(0,100 - fishing_power),50), + FISHING_LOOT_JUNK = min(max(0,50 - fishing_power),25), + FISHING_LOOT_COMMON = min(fishing_power / 5,50), + FISHING_LOOT_UNCOMMON = min(fishing_power / 10,33), + FISHING_LOOT_RARE = min(fishing_power / 20,25) + ) + + var/chosen_rank = pickweight(chance) + switch(chosen_rank) + if(FISHING_LOOT_JUNK) + return pick(loot.junk_loot) + if(FISHING_LOOT_COMMON) + return pick(loot.common_loot) + if(FISHING_LOOT_UNCOMMON) + return pick(loot.uncommon_loot) + if(FISHING_LOOT_RARE) + return pick(loot.rare_loot) + return FISHING_LOOT_NOTHING + + //LOOT TABLES /datum/fishing_loot - var/list/rewards = list() + var/list/junk_loot + var/list/common_loot + var/list/uncommon_loot + var/list/rare_loot -/datum/fishing_loot/water/common - rewards = list( +/datum/fishing_loot/water + junk_loot = list( + /obj/item/trash/plate, + /obj/item/reagent_containers/food/drinks/soda_cans/cola, + /obj/item/shard + ) + common_loot = list( /obj/item/reagent_containers/food/snacks/fish/goldfish, - /obj/item/reagent_containers/food/snacks/fish/goldfish/giant, /obj/item/reagent_containers/food/snacks/fish/salmon, /obj/item/reagent_containers/food/snacks/fish/bass, - /obj/item/reagent_containers/food/snacks/fish/tuna, - /obj/item/reagent_containers/food/snacks/fish/shrimp, - /obj/item/reagent_containers/food/snacks/fish/squid, - /obj/item/reagent_containers/food/snacks/fish/puffer, /obj/item/reagent_containers/food/snacks/bait/leech ) + uncommon_loot = list( + /obj/item/reagent_containers/food/snacks/fish/goldfish/giant, + /obj/item/reagent_containers/food/snacks/fish/shrimp, + /obj/item/reagent_containers/food/snacks/fish/puffer, + /obj/item/reagent_containers/food/snacks/fish/tuna + ) + rare_loot = list( + /obj/item/reagent_containers/food/snacks/fish/squid, + /obj/item/stack/sheet/bluespace_crystal + ) diff --git a/yogstation/code/datums/ruins/station.dm b/yogstation/code/datums/ruins/station.dm index 9f8e72772738..fac5693c49ab 100644 --- a/yogstation/code/datums/ruins/station.dm +++ b/yogstation/code/datums/ruins/station.dm @@ -313,365 +313,371 @@ prefix = "_maps/RandomRuins/StationRuins/maint/3x3/" /datum/map_template/ruin/station/maint/threexthree/twostorage - id= "2storage" + id = "2storage" suffix = "3x3_2storage.dmm" name = "Maint 2storage" /datum/map_template/ruin/station/maint/threexthree/ninestorage - id= "9storage" + id = "9storage" suffix = "3x3_9storage.dmm" name = "Maint 9storage" /datum/map_template/ruin/station/maint/threexthree/airstation - id= "airstation" + id = "airstation" suffix = "3x3_airstation.dmm" name = "Maint airstation" /datum/map_template/ruin/station/maint/threexthree/biohazard - id= "biohazard" + id = "biohazard" suffix = "3x3_biohazard.dmm" name = "Maint biohazard" /datum/map_template/ruin/station/maint/threexthree/boxbedroom - id= "boxbedroom" + id = "boxbedroom" suffix = "3x3_boxbedroom.dmm" name = "Maint boxbedroom" /datum/map_template/ruin/station/maint/threexthree/boxchemcloset - id= "boxchemcloset" + id = "boxchemcloset" suffix = "3x3_boxchemcloset.dmm" name = "Maint boxchemcloset" /datum/map_template/ruin/station/maint/threexthree/boxclutter2 - id= "boxclutter2" + id = "boxclutter2" suffix = "3x3_boxclutter2.dmm" name = "Maint boxclutter2" /datum/map_template/ruin/station/maint/threexthree/boxclutter3 - id= "boxclutter3" + id = "boxclutter3" suffix = "3x3_boxclutter3.dmm" name = "Maint boxclutter3" /datum/map_template/ruin/station/maint/threexthree/boxclutter4 - id= "boxclutter4" + id = "boxclutter4" suffix = "3x3_boxclutter4.dmm" name = "Maint boxclutter4" /datum/map_template/ruin/station/maint/threexthree/boxclutter5 - id= "boxclutter5" + id = "boxclutter5" suffix = "3x3_boxclutter5.dmm" name = "Maint boxclutter5" /datum/map_template/ruin/station/maint/threexthree/boxclutter6 - id= "boxclutter6" + id = "boxclutter6" suffix = "3x3_boxclutter6.dmm" name = "Maint boxclutter6" /datum/map_template/ruin/station/maint/threexthree/boxclutter8 - id= "boxclutter8" + id = "boxclutter8" suffix = "3x3_boxclutter8.dmm" name = "Maint boxclutter8" /datum/map_template/ruin/station/maint/threexthree/boxwindow - id= "boxwindow" + id = "boxwindow" suffix = "3x3_boxwindow.dmm" name = "Maint boxwindow" /datum/map_template/ruin/station/maint/threexthree/bubblegumaltar - id= "bubblegumaltar" + id = "bubblegumaltar" suffix = "3x3_bubblegumaltar.dmm" name = "Maint bubblegumaltar" /datum/map_template/ruin/station/maint/threexthree/deltajanniecloset - id= "deltajanniecloset" + id = "deltajanniecloset" suffix = "3x3_deltajanniecloset.dmm" name = "Maint deltajanniecloset" /datum/map_template/ruin/station/maint/threexthree/deltaorgantrade - id= "deltaorgantrade" + id = "deltaorgantrade" suffix = "3x3_deltaorgantrade.dmm" name = "Maint deltaorgantrade" /datum/map_template/ruin/station/maint/threexthree/donutcapgun - id= "donutcapgun" + id = "donutcapgun" suffix = "3x3_donutcapgun.dmm" name = "Maint donutcapgun" /datum/map_template/ruin/station/maint/threexthree/gibs - id= "gibs" + id = "gibs" suffix = "3x3_gibs.dmm" name = "Maint gibs" /datum/map_template/ruin/station/maint/threexthree/hazmat - id= "hazmat" + id = "hazmat" suffix = "3x3_hazmat.dmm" name = "Maint hazmat" /datum/map_template/ruin/station/maint/threexthree/hobohut - id= "hobohut" + id = "hobohut" suffix = "3x3_hobohut.dmm" name = "Maint hobohut" /datum/map_template/ruin/station/maint/threexthree/hullbreach - id= "hullbreach" + id = "hullbreach" suffix = "3x3_hullbreach.dmm" name = "Maint hullbreach" /datum/map_template/ruin/station/maint/threexthree/kilolustymaid - id= "kilolustymaid" + id = "kilolustymaid" suffix = "3x3_kilolustymaid.dmm" name = "Maint kilolustymaid" /datum/map_template/ruin/station/maint/threexthree/kilomechcharger - id= "kilomechcharger" + id = "kilomechcharger" suffix = "3x3_kilomechcharger.dmm" name = "Maint kilomechcharger" /datum/map_template/ruin/station/maint/threexthree/kilotheatre - id= "kilotheatre" + id = "kilotheatre" suffix = "3x3_kilotheatre.dmm" name = "Maint kilotheatre" /datum/map_template/ruin/station/maint/threexthree/medicloset - id= "medicloset" + id = "medicloset" suffix = "3x3_medicloset.dmm" name = "Maint medicloset" ///Memorial- a memorial to those who died when constructing ss13. Author: Jcat /datum/map_template/ruin/station/maint/threexthree/memorial - id= "memorial" + id = "memorial" suffix = "3x3_memorial.dmm" name = "Maint memorial" /datum/map_template/ruin/station/maint/threexthree/metaclutter2 - id= "metaclutter2" + id = "metaclutter2" suffix = "3x3_metaclutter2.dmm" name = "Maint metaclutter2" /datum/map_template/ruin/station/maint/threexthree/metaclutter4 - id= "metaclutter4" + id = "metaclutter4" suffix = "3x3_metaclutter4.dmm" name = "Maint metaclutter4" /datum/map_template/ruin/station/maint/threexthree/metagamergear - id= "metagamergear" + id = "metagamergear" suffix = "3x3_metagamergear.dmm" name = "Maint metagamergear" /datum/map_template/ruin/station/maint/threexthree/owloffice - id= "owloffice" + id = "owloffice" suffix = "3x3_owloffice.dmm" name = "Maint owloffice" /datum/map_template/ruin/station/maint/threexthree/plasma - id= "plasma" + id = "plasma" suffix = "3x3_plasma.dmm" name = "Maint plasma" /datum/map_template/ruin/station/maint/threexthree/pubbyartism - id= "pubbyartism" + id = "pubbyartism" suffix = "3x3_pubbyartism.dmm" name = "Maint pubbyartism" /datum/map_template/ruin/station/maint/threexthree/pubbyclutter1 - id= "pubbyclutter1" + id = "pubbyclutter1" suffix = "3x3_pubbyclutter1.dmm" name = "Maint pubbyclutter1" /datum/map_template/ruin/station/maint/threexthree/pubbyclutter2 - id= "pubbyclutter2" + id = "pubbyclutter2" suffix = "3x3_pubbyclutter2.dmm" name = "Maint pubbyclutter2" /datum/map_template/ruin/station/maint/threexthree/pubbyclutter3 - id= "pubbyclutter3" + id = "pubbyclutter3" suffix = "3x3_pubbyclutter3.dmm" name = "Maint pubbyclutter3" /datum/map_template/ruin/station/maint/threexthree/radspill - id= "radspill" + id = "radspill" suffix = "3x3_radspill.dmm" name = "Maint radspill" /datum/map_template/ruin/station/maint/threexthree/shrine - id= "shrine" + id = "shrine" suffix = "3x3_shrine.dmm" name = "Maint shrine" ///Singularity- A fake singularity surrounded by space tiles and some sing-themed equipment. Author: Jcat /datum/map_template/ruin/station/maint/threexthree/singularity - id= "singularity" + id = "singularity" suffix = "3x3_singularity.dmm" name = "Maint singularity" /datum/map_template/ruin/station/maint/threexthree/tanning - id= "tanning" + id = "tanning" suffix = "3x3_tanning.dmm" name = "Maint tanning" /datum/map_template/ruin/station/maint/threexthree/tranquility - id= "tranquility" + id = "tranquility" suffix = "3x3_tranquility.dmm" name = "Maint tranquility" /datum/map_template/ruin/station/maint/threexthree/wash - id= "wash" + id = "wash" suffix = "3x3_wash.dmm" name = "Maint wash" /datum/map_template/ruin/station/maint/threexthree/dronehole - id= "dronehole" + id = "dronehole" suffix = "3x3_dronehole.dmm" name = "Maint dronehole" ///Author: SergeyMeyer /datum/map_template/ruin/station/maint/threexthree/command - id= "command" + id = "command" suffix = "3x3_command.dmm" name = "Maint command" ///Author: SergeyMeyer /datum/map_template/ruin/station/maint/threexthree/dummy - id= "dummy" + id = "dummy" suffix = "3x3_dummy.dmm" name = "Maint dummy" ///Author: SergeyMeyer /datum/map_template/ruin/station/maint/threexthree/spaceart - id= "spaceart" + id = "spaceart" suffix = "3x3_spaceart.dmm" name = "Maint spaceart" /datum/map_template/ruin/station/maint/threexthree/containmentcell - id= "containmentcell" + id = "containmentcell" suffix = "3x3_containmentcell.dmm" name = "Maint containmentcell" /datum/map_template/ruin/station/maint/threexthree/naughtyroom - id= "naughtyroom" + id = "naughtyroom" suffix = "3x3_naughtyroom.dmm" name = "Maint naughtyroom" +///Author: Vaelophis +/datum/map_template/ruin/station/maint/threexthree/vendoraccident + id = "vendoraccident" + suffix = "3x3_vendoraccident.dmm" + name = "Maint vendoraccident" + ///The base for the 3x5 rooms. /datum/map_template/ruin/station/maint/threexfive prefix = "_maps/RandomRuins/StationRuins/maint/3x5/" ///Airlockstorage- A room that stores a few airlock assemblies and related equipment. Author: Jcat /datum/map_template/ruin/station/maint/threexfive/airlockstorage - id= "airlockstorage" + id = "airlockstorage" suffix = "3x5_airlockstorage.dmm" name = "Maint airlockstorage" /datum/map_template/ruin/station/maint/threexfive/boxclutter7 - id= "boxclutter7" + id = "boxclutter7" suffix = "3x5_boxclutter7.dmm" name = "Maint boxclutter7" /datum/map_template/ruin/station/maint/threexfive/boxkitchen - id= "boxkitchen" + id = "boxkitchen" suffix = "3x5_boxkitchen.dmm" name = "Maint boxkitchen" /datum/map_template/ruin/station/maint/threexfive/canisterroom - id= "canisterroom" + id = "canisterroom" suffix = "3x5_canisterroom.dmm" name = "Maint canisterroom" ///Checkpoint- A security checkpoint. Glory to NT! Author: Jcat /datum/map_template/ruin/station/maint/threexfive/checkpoint - id= "checkpoint" + id = "checkpoint" suffix = "3x5_checkpoint.dmm" name = "Maint checkpoint" /datum/map_template/ruin/station/maint/threexfive/hank - id= "hank" + id = "hank" suffix = "3x5_hank.dmm" name = "Maint hank" /datum/map_template/ruin/station/maint/threexfive/junkcloset - id= "junkcloset" + id = "junkcloset" suffix = "3x5_junkcloset.dmm" name = "Maint junkcloset" /datum/map_template/ruin/station/maint/threexfive/kilomobden - id= "kilomobden" + id = "kilomobden" suffix = "3x5_kilomobden.dmm" name = "Maint kilomobden" /datum/map_template/ruin/station/maint/threexfive/laststand - id= "laststand" + id = "laststand" suffix = "3x5_laststand.dmm" name = "Maint laststand" /datum/map_template/ruin/station/maint/threexfive/monky - id= "monky" + id = "monky" suffix = "3x5_monky.dmm" name = "Maint monky" ///Onioncult- Fake clock cult walls, and an onion. Author: Ezhan /datum/map_template/ruin/station/maint/threexfive/onioncult - id= "onioncult" + id = "onioncult" suffix = "3x5_onioncult.dmm" name = "Maint onioncult" /datum/map_template/ruin/station/maint/threexfive/pubbyclutter5 - id= "pubbyclutter5" + id = "pubbyclutter5" suffix = "3x5_pubbyclutter5.dmm" name = "Maint pubbyclutter5" /datum/map_template/ruin/station/maint/threexfive/pubbyclutter6 - id= "pubbyclutter6" + id = "pubbyclutter6" suffix = "3x5_pubbyclutter6.dmm" name = "Maint pubbyclutter6" /datum/map_template/ruin/station/maint/threexfive/pubbyrobotics - id= "pubbyrobotics" + id = "pubbyrobotics" suffix = "3x5_pubbyrobotics.dmm" name = "Maint pubbyrobotics" /datum/map_template/ruin/station/maint/threexfive/ripleywreck - id= "ripleywreck" + id = "ripleywreck" suffix = "3x5_ripleywreck.dmm" name = "Maint ripleywreck" /datum/map_template/ruin/station/maint/threexfive/boxmaintfreezers - id= "boxmaintfreezers" + id = "boxmaintfreezers" suffix = "3x5_boxmaintfreezers.dmm" name = "Maint boxmaintfreezers" ///Author: SergeyMeyer /datum/map_template/ruin/station/maint/threexfive/churchroach - id= "churchroach" + id = "churchroach" suffix = "3x5_churchroach.dmm" name = "Maint churchroach" ///Author: SergeyMeyer /datum/map_template/ruin/station/maint/threexfive/mirror - id= "mirror" + id = "mirror" suffix = "3x5_mirror.dmm" name = "Maint mirror" /datum/map_template/ruin/station/maint/threexfive/chromosomes - id= "chromosomes" + id = "chromosomes" suffix = "3x5_chromosomes.dmm" name = "Maint chromosomes" /datum/map_template/ruin/station/maint/threexfive/clutter - id= "clutter" + id = "clutter" suffix = "3x5_clutter.dmm" name = "Maint clutter" /datum/map_template/ruin/station/maint/threexfive/dissection - id= "dissection" + id = "dissection" suffix = "3x5_dissection.dmm" name = "Maint dissection" /datum/map_template/ruin/station/maint/threexfive/emergencyoxy - id= "emergencyoxy" + id = "emergencyoxy" suffix = "3x5_emergencyoxy.dmm" name = "Maint emergencyoxy" /datum/map_template/ruin/station/maint/threexfive/oreboxes - id= "oreboxes" + id = "oreboxes" suffix = "3x5_oreboxes.dmm" name = "Maint oreboxes" @@ -680,136 +686,136 @@ prefix = "_maps/RandomRuins/StationRuins/maint/5x3/" /datum/map_template/ruin/station/maint/fivexthree/boxclutter1 - id= "boxclutter1" + id = "boxclutter1" suffix = "5x3_boxclutter1.dmm" name = "Maint boxclutter1" ///Breach- a room with metal foam floors and walls. Author: Jcat /datum/map_template/ruin/station/maint/fivexthree/breach - id= "breach" + id = "breach" suffix = "5x3_breach.dmm" name = "Maint breach" /datum/map_template/ruin/station/maint/fivexthree/cloner - id= "cloner" + id = "cloner" suffix = "5x3_cloner.dmm" name = "Maint cloner" /datum/map_template/ruin/station/maint/fivexthree/deltaclutter2 - id= "deltaclutter2" + id = "deltaclutter2" suffix = "5x3_deltaclutter2.dmm" name = "Maint deltaclutter2" /datum/map_template/ruin/station/maint/fivexthree/deltaclutter3 - id= "deltaclutter3" + id = "deltaclutter3" suffix = "5x3_deltaclutter3.dmm" name = "Maint deltaclutter3" /datum/map_template/ruin/station/maint/fivexthree/incompletefloor - id= "incompletefloor" + id = "incompletefloor" suffix = "5x3_incompletefloor.dmm" name = "Maint incompletefloor" /datum/map_template/ruin/station/maint/fivexthree/kiloclutter1 - id= "kiloclutter1" + id = "kiloclutter1" suffix = "5x3_kiloclutter1.dmm" name = "Maint kiloclutter1" /datum/map_template/ruin/station/maint/fivexthree/metaclutter1 - id= "metaclutter1" + id = "metaclutter1" suffix = "5x3_metaclutter1.dmm" name = "Maint metaclutter1" /datum/map_template/ruin/station/maint/fivexthree/metaclutter3 - id= "metaclutter3" + id = "metaclutter3" suffix = "5x3_metaclutter3.dmm" name = "Maint metaclutter3" /datum/map_template/ruin/station/maint/fivexthree/minibreakroom - id= "minibreakroom" + id = "minibreakroom" suffix = "5x3_minibreakroom.dmm" name = "Maint minibreakroom" /datum/map_template/ruin/station/maint/fivexthree/nastytrap - id= "nastytrap" + id = "nastytrap" suffix = "5x3_nastytrap.dmm" name = "Maint nastytrap" /datum/map_template/ruin/station/maint/fivexthree/pills - id= "pills" + id = "pills" suffix = "5x3_pills.dmm" name = "Maint pills" /datum/map_template/ruin/station/maint/fivexthree/pubbybedroom - id= "pubbybedroom" + id = "pubbybedroom" suffix = "5x3_pubbybedroom.dmm" name = "Maint pubbybedroom" /datum/map_template/ruin/station/maint/fivexthree/pubbyclutter4 - id= "pubbyclutter4" + id = "pubbyclutter4" suffix = "5x3_pubbyclutter4.dmm" name = "Maint pubbyclutter4" /datum/map_template/ruin/station/maint/fivexthree/pubbyclutter7 - id= "pubbyclutter7" + id = "pubbyclutter7" suffix = "5x3_pubbyclutter7.dmm" name = "Maint pubbyclutter7" /datum/map_template/ruin/station/maint/fivexthree/pubbykitchen - id= "pubbykitchen" + id = "pubbykitchen" suffix = "5x3_pubbykitchen.dmm" name = "Maint pubbykitchen" /datum/map_template/ruin/station/maint/fivexthree/storeroom - id= "storeroom" + id = "storeroom" suffix = "5x3_storeroom.dmm" name = "Maint storeroom" /datum/map_template/ruin/station/maint/fivexthree/yogsmaintdet - id= "yogsmaintdet" + id = "yogsmaintdet" suffix = "5x3_yogsmaintdet.dmm" name = "Maint yogsmaintdet" /datum/map_template/ruin/station/maint/fivexthree/yogsmaintrpg - id= "yogsmaintrpg" + id = "yogsmaintrpg" suffix = "5x3_yogsmaintrpg.dmm" name = "Maint yogsmaintrpg" ///Author: Veeblefetzer /datum/map_template/ruin/station/maint/fivexthree/podmin - id= "podmin" + id = "podmin" suffix = "5x3_podmin.dmm" name = "Maint podmin" ///Author: Veeblefetzer /datum/map_template/ruin/station/maint/fivexthree/waitingroom - id= "waitingroom" + id = "waitingroom" suffix = "5x3_waitingroom.dmm" name = "Maint waitingroom" ///Author: SergeyMeyer /datum/map_template/ruin/station/maint/fivexthree/highqualitysurgery - id= "highqualitysurgery" + id = "highqualitysurgery" suffix = "5x3_highqualitysurgery.dmm" name = "Maint highqualitysurgery" /datum/map_template/ruin/station/maint/fivexthree/chestburst - id= "chestburst" + id = "chestburst" suffix = "5x3_chestburst.dmm" name = "Maint chestburst" /datum/map_template/ruin/station/maint/fivexthree/gloveroom - id= "gloveroom" + id = "gloveroom" suffix = "5x3_gloveroom.dmm" name = "Maint gloveroom" /datum/map_template/ruin/station/maint/fivexthree/magicroom - id= "magicroom" + id = "magicroom" suffix = "5x3_magicroom.dmm" name = "Maint magicroom" /datum/map_template/ruin/station/maint/fivexthree/spareparts - id= "spareparts" + id = "spareparts" suffix = "5x3_spareparts.dmm" name = "Maint spareparts" @@ -819,158 +825,158 @@ ///Blasted-the aftermath of smoking gone wrong. Author: Jcat /datum/map_template/ruin/station/maint/fivexfour/blasted - id= "blasted" + id = "blasted" suffix = "5x4_blasted.dmm" name = "Maint blasted" /datum/map_template/ruin/station/maint/fivexfour/boxbar - id= "boxbar" + id = "boxbar" suffix = "5x4_boxbar.dmm" name = "Maint boxbar" /datum/map_template/ruin/station/maint/fivexfour/boxdinner - id= "boxdinner" + id = "boxdinner" suffix = "5x4_boxdinner.dmm" name = "Maint boxdinner" /datum/map_template/ruin/station/maint/fivexfour/boxsurgery - id= "boxsurgery" + id = "boxsurgery" suffix = "5x4_boxsurgery.dmm" name = "Maint boxsurgery" /datum/map_template/ruin/station/maint/fivexfour/comproom - id= "comproom" + id = "comproom" suffix = "5x4_comproom.dmm" name = "Maint comproom" /datum/map_template/ruin/station/maint/fivexfour/deltabar - id= "deltabar" + id = "deltabar" suffix = "5x4_deltabar.dmm" name = "Maint deltabar" /datum/map_template/ruin/station/maint/fivexfour/deltadetective - id= "deltadetective" + id = "deltadetective" suffix = "5x4_deltadetective.dmm" name = "Maint deltadetective" /datum/map_template/ruin/station/maint/fivexfour/deltadressing - id= "deltadressing" + id = "deltadressing" suffix = "5x4_deltadressing.dmm" name = "Maint deltadressing" /datum/map_template/ruin/station/maint/fivexfour/deltaeva - id= "deltaeva" + id = "deltaeva" suffix = "5x4_deltaEVA.dmm" name = "Maint deltaEVA" /datum/map_template/ruin/station/maint/fivexfour/deltagamble - id= "deltagamble" + id = "deltagamble" suffix = "5x4_deltagamble.dmm" name = "Maint deltagamble" /datum/map_template/ruin/station/maint/fivexfour/deltalounge - id= "deltalounge" + id = "deltalounge" suffix = "5x4_deltalounge.dmm" name = "Maint deltalounge" /datum/map_template/ruin/station/maint/fivexfour/deltasurgery - id= "deltasurgery" + id = "deltasurgery" suffix = "5x4_deltasurgery.dmm" name = "Maint deltasurgery" /datum/map_template/ruin/station/maint/fivexfour/firemanroom - id= "firemanroom" + id = "firemanroom" suffix = "5x4_firemanroom.dmm" name = "Maint firemanroom" ///Author: Veeblefetzer /datum/map_template/ruin/station/maint/fivexfour/pass - id= "pass" + id = "pass" suffix = "5x4_pass.dmm" name = "Maint pass" ///Author: Veeblefetzer /datum/map_template/ruin/station/maint/fivexfour/laundromat - id= "laundromat" + id = "laundromat" suffix = "5x4_laundromat.dmm" name = "Maint laundromat" ///Icicle-brrr its cold! Author: Jcat /datum/map_template/ruin/station/maint/fivexfour/icicle - id= "icicle" + id = "icicle" suffix = "5x4_icicle.dmm" name = "Maint icicle" /datum/map_template/ruin/station/maint/fivexfour/kilohauntedlibrary - id= "kilohauntedlibrary" + id = "kilohauntedlibrary" suffix = "5x4_kilohauntedlibrary.dmm" name = "Maint kilohauntedlibrary" /datum/map_template/ruin/station/maint/fivexfour/kilosurgery - id= "kilosurgery" + id = "kilosurgery" suffix = "5x4_kilosurgery.dmm" name = "Maint kilosurgery" ///Medusa- some nerds got turned to stone. Or is it just an artpiece? Author: Jcat /datum/map_template/ruin/station/maint/fivexfour/medusa - id= "medusa" + id = "medusa" suffix = "5x4_medusa.dmm" name = "Maint medusa" /datum/map_template/ruin/station/maint/fivexfour/metakitchen - id= "metakitchen" + id = "metakitchen" suffix = "5x4_metakitchen.dmm" name = "Maint metakitchen" /datum/map_template/ruin/station/maint/fivexfour/metamedical - id= "metamedical" + id = "metamedical" suffix = "5x4_metamedical.dmm" name = "Maint metamedical" /datum/map_template/ruin/station/maint/fivexfour/metarobotics - id= "metarobotics" + id = "metarobotics" suffix = "5x4_metarobotics.dmm" name = "Maint metarobotics" /datum/map_template/ruin/station/maint/fivexfour/metatheatre - id= "metatheatre" + id = "metatheatre" suffix = "5x4_metatheatre.dmm" name = "Maint metatheatre" /datum/map_template/ruin/station/maint/fivexfour/pubbysurgery - id= "pubbysurgery" + id = "pubbysurgery" suffix = "5x4_pubbysurgery.dmm" name = "Maint pubbysurgery" /datum/map_template/ruin/station/maint/fivexfour/tinybarbershop - id= "tinybarbershop" + id = "tinybarbershop" suffix = "5x4_tinybarbershop.dmm" name = "Maint tinybarbershop" ///Author: VeebleFetzer /datum/map_template/ruin/station/maint/fivexfour/boxclutter - id= "boxclutter" + id = "boxclutter" suffix = "5x4_boxclutter.dmm" name = "Maint boxclutter" ///Author: VeebleFetzer /datum/map_template/ruin/station/maint/fivexfour/posterstore - id= "posterstore" + id = "posterstore" suffix = "5x4_posterstore.dmm" name = "Maint posterstore" ///Author: SergeyMeyer /datum/map_template/ruin/station/maint/fivexfour/shoestore - id= "shoestore" + id = "shoestore" suffix = "5x4_shoestore.dmm" name = "Maint shoestore" /datum/map_template/ruin/station/maint/fivexfour/nanitechamber - id= "nanitechamber" + id = "nanitechamber" suffix = "5x4_nanitechamber.dmm" name = "Maint nanitechamber" /datum/map_template/ruin/station/maint/fivexfour/oldcryoroom - id= "oldcryoroom" + id = "oldcryoroom" suffix = "5x4_oldcryoroom.dmm" name = "Maint oldcryoroom" @@ -979,124 +985,124 @@ prefix = "_maps/RandomRuins/StationRuins/maint/10x5/" /datum/map_template/ruin/station/maint/tenxfive/barbershop - id= "barbershop" + id = "barbershop" suffix = "10x5_barbershop.dmm" name = "Maint barbershop" /datum/map_template/ruin/station/maint/tenxfive/deltaarcade - id= "deltaarcade" + id = "deltaarcade" suffix = "10x5_deltaarcade.dmm" name = "Maint deltaarcade" /datum/map_template/ruin/station/maint/tenxfive/deltabotnis - id= "deltabotnis" + id = "deltabotnis" suffix = "10x5_deltabotnis.dmm" name = "Maint deltabotnis" /datum/map_template/ruin/station/maint/tenxfive/deltacafeteria - id= "deltacafeteria" + id = "deltacafeteria" suffix = "10x5_deltacafeteria.dmm" name = "Maint deltacafeteria" /datum/map_template/ruin/station/maint/tenxfive/deltaclutter1 - id= "deltaclutter1" + id = "deltaclutter1" suffix = "10x5_deltaclutter1.dmm" name = "Maint deltaclutter1" /datum/map_template/ruin/station/maint/tenxfive/deltarobotics - id= "deltarobotics" + id = "deltarobotics" suffix = "10x5_deltarobotics.dmm" name = "Maint deltarobotics" ///Factory-this is how they made crowbars before autolathes. Author: Jcat /datum/map_template/ruin/station/maint/tenxfive/factory - id= "factory" + id = "factory" suffix = "10x5_factory.dmm" name = "Maint factory" ///Insomina-The den of an NTnet conspiracy theorist. He's right, you know. Author: Jcat /datum/map_template/ruin/station/maint/tenxfive/insomnia - id= "insomnia" + id = "insomnia" suffix = "10x5_insomnia.dmm" name = "Maint insomnia" /datum/map_template/ruin/station/maint/tenxfive/maintmedical - id= "maintmedical" + id = "maintmedical" suffix = "10x5_maintmedical.dmm" name = "Maint maintmedical" /datum/map_template/ruin/station/maint/tenxfive/meetingroom - id= "meetingroom" + id = "meetingroom" suffix = "10x5_meetingroom.dmm" name = "Maint meetingroom" /datum/map_template/ruin/station/maint/tenxfive/phage - id= "phage" + id = "phage" suffix = "10x5_phage.dmm" name = "Maint phage" /datum/map_template/ruin/station/maint/tenxfive/skidrow - id= "skidrow" + id = "skidrow" suffix = "10x5_skidrow.dmm" name = "Maint skidrow" ///Transit: a super pointless transit tube journey. Everyone loves waiting! Author: Jcat /datum/map_template/ruin/station/maint/tenxfive/transit - id= "transit" + id = "transit" suffix = "10x5_transit.dmm" name = "Maint transit" ///Author: Veeblefetzer /datum/map_template/ruin/station/maint/tenxfive/ballpit - id= "ballpit" + id = "ballpit" suffix = "10x5_ballpit.dmm" name = "Maint ballpit" ///Author: Veeblefetzer /datum/map_template/ruin/station/maint/tenxfive/commie - id= "commie" + id = "commie" suffix = "10x5_commie.dmm" name = "Maint commie" ///Author: Veeblefetzer /datum/map_template/ruin/station/maint/tenxfive/firingrange - id= "firingrange" + id = "firingrange" suffix = "10x5_firingrange.dmm" name = "Maint firingrange" ///Author: Veeblefetzer /datum/map_template/ruin/station/maint/tenxfive/clothingstore - id= "clothingstore" + id = "clothingstore" suffix = "10x5_clothingstore.dmm" name = "Maint clothingstore" /datum/map_template/ruin/station/maint/tenxfive/butchersden - id= "butchersden" + id = "butchersden" suffix = "10x5_butchersden.dmm" name = "Maint butchersden" /datum/map_template/ruin/station/maint/tenxfive/courtroom - id= "courtroom" + id = "courtroom" suffix = "10x5_courtroom.dmm" name = "Maint courtroom" /datum/map_template/ruin/station/maint/tenxfive/gaschamber - id= "gaschamber" + id = "gaschamber" suffix = "10x5_gaschamber.dmm" name = "Maint gaschamber" /datum/map_template/ruin/station/maint/tenxfive/oldaichamber - id= "oldaichamber" + id = "oldaichamber" suffix = "10x5_oldaichamber.dmm" name = "Maint oldaichamber" /datum/map_template/ruin/station/maint/tenxfive/radiationtherapy - id= "radiationtherapy" + id = "radiationtherapy" suffix = "10x5_radiationtherapy.dmm" name = "Maint radiationtherapy" /datum/map_template/ruin/station/maint/tenxfive/ratburger - id= "ratburger" + id = "ratburger" suffix = "10x5_ratburger.dmm" name = "Maint ratburger" @@ -1106,145 +1112,151 @@ ///Aquarium-NT scientists study space marine life. Author: Jcat /datum/map_template/ruin/station/maint/tenxten/aquarium - id= "aquarium" + id = "aquarium" suffix = "10x10_aquarium.dmm" name = "Maint aquarium" /datum/map_template/ruin/station/maint/tenxten/bigconstruction - id= "bigconstruction" + id = "bigconstruction" suffix = "10x10_bigconstruction.dmm" name = "Maint bigconstruction" /datum/map_template/ruin/station/maint/tenxten/bigtheatre - id= "bigtheatre" + id = "bigtheatre" suffix = "10x10_bigtheatre.dmm" name = "Maint bigtheatre" /datum/map_template/ruin/station/maint/tenxten/deltalibrary - id= "deltalibrary" + id = "deltalibrary" suffix = "10x10_deltalibrary.dmm" name = "Maint deltalibrary" /datum/map_template/ruin/station/maint/tenxten/graffitiroom - id= "graffitiroom" + id = "graffitiroom" suffix = "10x10_graffitiroom.dmm" name = "Maint graffitiroom" ///Junction- sometimes in life, you can only go forward. Author: Jcat /datum/map_template/ruin/station/maint/tenxten/junction - id= "junction" + id = "junction" suffix = "10x10_junction.dmm" name = "Maint junction" ///Lasertag-Author: Jcat /datum/map_template/ruin/station/maint/tenxten/lasertag - id= "lasertag" + id = "lasertag" suffix = "10x10_lasertag.dmm" name = "Maint lasertag" /datum/map_template/ruin/station/maint/tenxten/podrepairbay - id= "podrepairbay" + id = "podrepairbay" suffix = "10x10_podrepairbay.dmm" name = "Maint podrepairbay" /datum/map_template/ruin/station/maint/tenxten/pubbybar - id= "pubbybar" + id = "pubbybar" suffix = "10x10_pubbybar.dmm" name = "Maint pubbybar" /datum/map_template/ruin/station/maint/tenxten/roosterdome - id= "roosterdome" + id = "roosterdome" suffix = "10x10_roosterdome.dmm" name = "Maint roosterdome" /datum/map_template/ruin/station/maint/tenxten/sanitarium - id= "sanitarium" + id = "sanitarium" suffix = "10x10_sanitarium.dmm" name = "Maint sanitarium" /datum/map_template/ruin/station/maint/tenxten/snakefighter - id= "snakefighter" + id = "snakefighter" suffix = "10x10_snakefighter.dmm" name = "Maint snakefighter" ///Vault- A 'heavily guarded' vault. Author: Jcat /datum/map_template/ruin/station/maint/tenxten/vault - id= "vault" + id = "vault" suffix = "10x10_vault.dmm" name = "Maint vault" ///Ward-outbreak gone wrong. Author: Jcat /datum/map_template/ruin/station/maint/tenxten/ward - id= "ward" + id = "ward" suffix = "10x10_ward.dmm" name = "Maint ward" ///Author: Veeblefetzer /datum/map_template/ruin/station/maint/tenxten/assaultpod - id= "assaultpod" + id = "assaultpod" suffix = "10x10_assaultpod.dmm" name = "Maint assaultpod" ///Author: Veeblefetzer /datum/map_template/ruin/station/maint/tenxten/maze - id= "maze" + id = "maze" suffix = "10x10_maze.dmm" name = "Maint maze" ///Author: Veeblefetzer /datum/map_template/ruin/station/maint/tenxten/maze2 - id= "maze2" + id = "maze2" suffix = "10x10_maze2.dmm" name = "Maint maze2" ///Author: Veeblefetzer /datum/map_template/ruin/station/maint/tenxten/boxfactory - id= "boxfactory" + id = "boxfactory" suffix = "10x10_boxfactory.dmm" name = "Maint boxfactory" /datum/map_template/ruin/station/maint/tenxten/sixsectorsdown - id= "sixsectorsdown" + id = "sixsectorsdown" suffix = "10x10_sixsectorsdown.dmm" name = "Maint sixsectorsdown" /datum/map_template/ruin/station/maint/tenxten/advbotany - id= "advbotany" + id = "advbotany" suffix = "10x10_advbotany.dmm" name = "Maint advbotany" /datum/map_template/ruin/station/maint/tenxten/beach - id= "beach" + id = "beach" suffix = "10x10_beach.dmm" name = "Maint beach" /datum/map_template/ruin/station/maint/tenxten/botany_apiary - id= "botany_apiary" + id = "botany_apiary" suffix = "10x10_botany_apiary.dmm" name = "Maint botany_apiary" /datum/map_template/ruin/station/maint/tenxten/gamercave - id= "gamercave" + id = "gamercave" suffix = "10x10_gamercave.dmm" name = "Maint gamercave" /datum/map_template/ruin/station/maint/tenxten/ladytesla_altar - id= "ladytesla_altar" + id = "ladytesla_altar" suffix = "10x10_ladytesla_altar.dmm" name = "Maint ladytesla_altar" /datum/map_template/ruin/station/maint/tenxten/olddiner - id= "olddiner" + id = "olddiner" suffix = "10x10_olddiner.dmm" name = "Maint olddiner" /datum/map_template/ruin/station/maint/tenxten/smallmagician - id= "smallmagician" + id = "smallmagician" suffix = "10x10_smallmagician.dmm" name = "Maint smallmagician" ///Author: Veeblefetzer /datum/map_template/ruin/station/maint/tenxten/fourshops - id= "fourshops" + id = "fourshops" suffix = "10x10_fourshops.dmm" name = "Maint fourshops" + +///Author: Vaelophis +/datum/map_template/ruin/station/maint/tenxten/fishinghole + id= "fishinghole" + suffix = "10x10_fishinghole.dmm" + name = "Maint fishinghole" diff --git a/yogstation/code/datums/status_effects/buffs.dm b/yogstation/code/datums/status_effects/buffs.dm new file mode 100644 index 000000000000..5e0fad82ea0b --- /dev/null +++ b/yogstation/code/datums/status_effects/buffs.dm @@ -0,0 +1,19 @@ +/datum/status_effect/dodging + id = "dodging" + duration = 0.5 SECONDS + examine_text = span_notice("They're deftly dodging all incoming attacks!") + alert_type = /obj/screen/alert/status_effect/dodging + +/datum/status_effect/dodging/on_apply() + owner.visible_message(span_notice("[owner] dodges!")) + owner.status_flags |= GODMODE + return ..() + +/datum/status_effect/dodging/on_remove() + owner.status_flags &= ~GODMODE + owner.visible_message(span_warning("[owner] returns to a neutral stance.")) + +/obj/screen/alert/status_effect/dodging + name = "Dodging" + desc = "You're sure to win because your speed is superior!" + icon_state = "evading" diff --git a/yogstation/code/game/objects/items/fishing/fish.dm b/yogstation/code/game/objects/items/fishing/fish.dm index 7b80d56ae097..a0ef55f35c84 100644 --- a/yogstation/code/game/objects/items/fishing/fish.dm +++ b/yogstation/code/game/objects/items/fishing/fish.dm @@ -1,6 +1,6 @@ /obj/item/reagent_containers/food/snacks/fish - name = "development fish" - desc = "if you see this, get help" + name = "debug fish" + desc = "If you see this, get help!" icon = 'yogstation/icons/obj/fishing/fishing.dmi' icon_state = "bass" @@ -23,17 +23,17 @@ var/mutable_appearance/showoff_overlay /obj/item/reagent_containers/food/snacks/fish/Initialize(mapload) - . = ..() length = rand(min_length,max_length) weight = rand(min_weight,max_weight) list_reagents = list(/datum/reagent/consumable/nutriment = (3 * slices_num), /datum/reagent/consumable/nutriment/vitamin = (2 * slices_num)) + . = ..() /obj/item/reagent_containers/food/snacks/fish/proc/GetChumValue() return //not used yet /obj/item/reagent_containers/food/snacks/fish/examine(mob/user) . = ..() - . += "It's [length] inches and [weight] ounces!" + . += "It's [length] inch[length > 1 ? "es" : ""] and [weight] ounce[weight > 1 ? "s" : ""]!" /obj/item/reagent_containers/food/snacks/fish/attack_self(mob/M) if(showoff_overlay) @@ -44,8 +44,8 @@ showoff_overlay = mutable_appearance(icon,icon_state) M.add_overlay(showoff_overlay) showoffer = M - M.visible_message("[M] shows off [src]. It's [length] inches long and weighs [weight] ounces!", \ - span_notice("You show off [src]. It's [length] inches long and weighs [weight] ounces!")) + M.visible_message("[M] shows off [src]. It's [length] inch[length > 1 ? "es" : ""] long and weighs [weight] ounce[weight > 1 ? "s" : ""]!", \ + span_notice("You show off [src]. It's [length] inch[length > 1 ? "es" : ""] long and weighs [weight] ounce[weight > 1 ? "s" : ""]!")) RegisterSignal(M,COMSIG_ATOM_DIR_CHANGE,.proc/stop_overlay,TRUE) /obj/item/reagent_containers/food/snacks/fish/proc/stop_overlay() @@ -57,7 +57,7 @@ /obj/item/reagent_containers/food/snacks/fish/goldfish name = "galactic goldfish" - desc = "it's so... small!" + desc = "It's so... small!" icon_state = "fish_goldfish" min_length = 1 max_length = 2 @@ -67,7 +67,7 @@ /obj/item/reagent_containers/food/snacks/fish/goldfish/giant name = "giant galactic goldfish" - desc = "it's so... big!" + desc = "It's so... big!" icon_state = "fish_goldfish_big" min_length = 6 max_length = 19 @@ -77,7 +77,7 @@ /obj/item/reagent_containers/food/snacks/fish/salmon name = "space salmon" - desc = "i thought they were supposed to be red" + desc = "I thought they were supposed to be red..." icon_state = "fish_salmon" min_length = 28 max_length = 32 @@ -87,7 +87,7 @@ /obj/item/reagent_containers/food/snacks/fish/bass name = "big bang bass" - desc = "how am I supposed to play this thing?" + desc = "How am I supposed to play this thing?" icon_state = "fish_bass" min_length = 12 max_length = 32 @@ -97,7 +97,7 @@ /obj/item/reagent_containers/food/snacks/fish/tuna name = "temporal tuna" - desc = "you can tune a piano but you can't tuna fish" + desc = "You can tune a piano but you can't tuna fish!" icon_state = "fish_tuna" min_length = 15 max_length = 79 @@ -107,7 +107,7 @@ /obj/item/reagent_containers/food/snacks/fish/shrimp name = "space shrimp" - desc = "he looks a little shrimpy" + desc = "He looks a little shrimpy." icon_state = "fish_shrimp" min_length = 1 max_length = 6 @@ -117,7 +117,7 @@ /obj/item/reagent_containers/food/snacks/fish/squid name = "space squid" - desc = "like the game?" + desc = "Like the game?" icon_state = "fish_squid" min_length = 18 max_length = 24 @@ -127,7 +127,7 @@ /obj/item/reagent_containers/food/snacks/fish/puffer name = "plasma pufferfish" - desc = "it doesn't look like it's made of plasma..." + desc = "It doesn't look like it's made of plasma..." icon_state = "fish_puffer" min_length = 1 max_length = 1.4 diff --git a/yogstation/code/game/objects/items/fishing/rods.dm b/yogstation/code/game/objects/items/fishing/rods.dm index 953479b95eab..73783df8aee9 100644 --- a/yogstation/code/game/objects/items/fishing/rods.dm +++ b/yogstation/code/game/objects/items/fishing/rods.dm @@ -3,13 +3,13 @@ desc = "A rod used for fishing. Despite ordinary appearances, fishing has evolved to suit the cosmos with various features, like auto-reeling." icon = 'yogstation/icons/obj/fishing/fishing.dmi' icon_state = "fishing_rod" - lefthand_file = 'icons/mob/inhands/equipment/fishing_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' + lefthand_file = 'yogstation/icons/mob/inhands/equipment/fishing_lefthand.dmi' + righthand_file = 'yogstation/icons/mob/inhands/equipment/fishing_righthand.dmi' usesound = 'sound/items/crowbar.ogg' slot_flags = ITEM_SLOT_BACK force = 2 throwforce = 5 - w_class = WEIGHT_CLASS_NORMAL + w_class = WEIGHT_CLASS_BULKY materials = list(/datum/material/iron=50) var/fishing_power = 10 @@ -78,7 +78,11 @@ /obj/item/twohanded/fishingrod/proc/reel_in(var/forced = FALSE) if(!forced && bite) // we got something!!! playsound(fishing_component, 'sound/effects/water_emerge.ogg', 50, FALSE, -5) - spawn_reward() + var/power = 0 + if(iscarbon(fisher)) //sorry, non-carbons don't get to wear cool fishing outfits + var/mob/living/carbon/carbonfisher = fisher + power = carbonfisher.fishing_power + spawn_reward(fishing_power + power) if(bait && prob(max(50 - bait.fishing_power,0))) //50 - bait.fishing_power% chance to lose your bait to_chat(fisher, span_notice("Your [bait] is lost!")) cut_overlays() @@ -112,15 +116,18 @@ I.alpha = 0 animate(I, pixel_z = 32, alpha = 255, time = 2, easing = ELASTIC_EASING) -/obj/item/twohanded/fishingrod/proc/spawn_reward() - var/obj/picked_reward = fishing_component.getCommonLoot() +/obj/item/twohanded/fishingrod/proc/spawn_reward(var/fishing_power = 0) + var/picked_reward = fishing_component.get_reward(fishing_power) + if(!picked_reward || picked_reward == FISHING_LOOT_NOTHING) //nothing or something messed up + fisher.visible_message(span_notice("[fisher] reels in ... nothing!"), span_notice("You reel in... nothing! Better luck next time!")) + return var/obj/reward_item = new picked_reward(fishing_component.parent) reward_item.alpha = 0 reward_item.pixel_y = -12 animate(reward_item,time = 0.25 SECONDS,pixel_y = 0,alpha = 255,easing = SINE_EASING) if(!fisher) //uh oh return - fisher.visible_message(span_notice("[fisher] reels in a [reward_item]!"), span_notice("You reel in a [reward_item]!")) + fisher.visible_message(span_notice("[fisher] reels in [reward_item]!"), span_notice("You reel in [reward_item]!")) if(fisher.Adjacent(fishing_component.parent)) unwield(fisher,show_message = FALSE) if(fisher.put_in_hands(reward_item)) @@ -147,6 +154,7 @@ if(bait) user.put_in_hands(bait) to_chat(user, span_notice("You take the [bait] off the fishing rod.")) + cut_overlays() bait = null recalculate_power() @@ -154,3 +162,52 @@ fishing_power = initial(fishing_power) if(bait) fishing_power += bait.fishing_power + +/obj/item/twohanded/fishingrod/collapsable + name = "collapsable fishing rod" + icon_state = "fishing_rod_collapse_c" + desc = "A collapsable fishing rod! This one can fit into your backpack for space hikes and the like." + var/opened = FALSE + fishing_power = 15 + +/obj/item/twohanded/fishingrod/collapsable/attackby(obj/item/B, mob/user, params) + if(!istype(B,/obj/item/reagent_containers/food/snacks/bait)) + return + if(!opened) + to_chat(user,"You can't put bait on a collapsed rod!") + return + ..() + +/obj/item/twohanded/fishingrod/collapsable/AltClick(mob/living/user) + if(bait) + return ..() + toggle(user) + +/obj/item/twohanded/fishingrod/collapsable/proc/toggle(mob/user) + if(wielded) + to_chat(user,"You can't collapse the rod if you are holding it with both hands") + return + if(fishing) + to_chat(user,"You can't collapse the fishing rod if you are currently using it!") + return + if(!user.is_holding(src)) //no uncollapsing in your backpack or pockets + return + opened = !opened + w_class = opened ? WEIGHT_CLASS_BULKY : WEIGHT_CLASS_SMALL + playsound(src.loc, 'sound/machines/click.ogg', 50, TRUE) + update_icon() + +/obj/item/twohanded/fishingrod/collapsable/update_icon() + icon_state = "fishing_rod_collapse[opened ? "" : "_c"]" + +/obj/item/twohanded/fishingrod/collapsable/attack_self(mob/user) + if(!opened) + toggle(user) + return + ..() + +/obj/item/twohanded/fishingrod/collapsable/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + if(!opened) + to_chat(user,"The collapsable rod has to be open before you can do anything!") + return + ..() diff --git a/yogstation/code/modules/admin/sql_message_system.dm b/yogstation/code/modules/admin/sql_message_system.dm index 5a18efd89812..95deb5944e76 100644 --- a/yogstation/code/modules/admin/sql_message_system.dm +++ b/yogstation/code/modules/admin/sql_message_system.dm @@ -274,7 +274,7 @@ return var/list/output = list() var/ruler = "
" - var/list/navbar = list("\[All\]|\[#\]") + var/list/navbar = list("\[#\]") for(var/letter in GLOB.alphabet) navbar += "|\[[letter]\]" navbar += "|\[Memos\]|\[Watchlist\]" diff --git a/yogstation/code/modules/clothing/fishing.dm b/yogstation/code/modules/clothing/fishing.dm index 6f67c4ce613a..7db4e23128a9 100644 --- a/yogstation/code/modules/clothing/fishing.dm +++ b/yogstation/code/modules/clothing/fishing.dm @@ -6,7 +6,7 @@ alternate_worn_icon = 'yogstation/icons/mob/head.dmi' icon = 'yogstation/icons/obj/clothing/hats.dmi' -/obj/item/clothing/head/fishingcap/Initialize() +/obj/item/clothing/head/fishing/Initialize() . = ..() AddComponent(/datum/component/fishingbonus,5) diff --git a/yogstation/code/modules/jobs/job_types/mining_medic.dm b/yogstation/code/modules/jobs/job_types/mining_medic.dm index f8d2058ad126..822e1e3a03b9 100644 --- a/yogstation/code/modules/jobs/job_types/mining_medic.dm +++ b/yogstation/code/modules/jobs/job_types/mining_medic.dm @@ -34,8 +34,7 @@ pda_type = /obj/item/pda/miningmed backpack_contents = list(/obj/item/roller = 1,\ - /obj/item/kitchen/knife/combat/survival = 1,\ - /obj/item/gps/mining = 1) + /obj/item/kitchen/knife/combat/survival = 1) belt = /obj/item/storage/belt/medical/mining ears = /obj/item/radio/headset/headset_medcargo glasses = /obj/item/clothing/glasses/hud/health/meson diff --git a/yogstation/code/modules/mob/living/carbon/human/species_types/preternis/organs.dm b/yogstation/code/modules/mob/living/carbon/human/species_types/preternis/organs.dm index f6f34d779396..67877048407e 100644 --- a/yogstation/code/modules/mob/living/carbon/human/species_types/preternis/organs.dm +++ b/yogstation/code/modules/mob/living/carbon/human/species_types/preternis/organs.dm @@ -1,14 +1,24 @@ -/obj/item/organ/eyes/preternis +/obj/item/organ/eyes/robotic/preternis name = "preternis eyes" - desc = "An experimental upgraded version of eyes that can see in the dark.They are designed to fit preternis" + desc = "An experimental upgraded version of eyes that can see in the dark. They are designed to fit preternis" see_in_dark = PRETERNIS_NV_ON lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE + //preternis eyes need to be powered by a preternis to function, in a non preternis they slowly power down to blindness + organ_flags = ORGAN_SYNTHETIC + + low_threshold_passed = span_info("Your Preternis eyes switch to battery saver mode.") + high_threshold_passed = span_info("Your Preternis eyes only show a sliver of battery life left!") + now_failing = span_warning("An empty battery icon is all you can see as your eyes shut off!") + now_fixed = span_info("Lines of text scroll in your vision as your eyes begin rebooting.") + high_threshold_cleared = span_info("Your Preternis eyes have recharged enough to re-enable most functionality.") + low_threshold_cleared = span_info("Your Preternis eyes have almost fully recharged.") + var/powered = TRUE actions_types = list(/datum/action/item_action/organ_action/use) var/night_vision = TRUE -/obj/item/organ/eyes/preternis/ui_action_click() - var/datum/species/preternis/S = owner.dna.species - if(S.charge < PRETERNIS_LEVEL_FED) +/obj/item/organ/eyes/robotic/preternis/ui_action_click() + if(damage > low_threshold) + //no nightvision if your eyes are hurt return sight_flags = initial(sight_flags) switch(lighting_alpha) @@ -23,17 +33,29 @@ sight_flags &= ~SEE_BLACKNESS owner.update_sight() -/obj/item/organ/eyes/preternis/on_life() +/obj/item/organ/eyes/robotic/preternis/on_life() . = ..() - if(!ispreternis(owner)) - qdel(src) //these eyes depend on being inside a preternis + if(!owner) return - var/datum/species/preternis/S = owner.dna.species - if(S.charge >= PRETERNIS_LEVEL_FED) + if(ispreternis(owner) && !powered) + powered = TRUE + to_chat(owner, span_notice("A battery icon disappears from your vision as your [src] switch to external power.")) + if(!ispreternis(owner) && powered) //these eyes depend on being inside a preternis for power + powered = FALSE + to_chat(owner, span_boldwarning("Your [src] flash warnings that they've lost their power source, and are running on emergency power!")) + if(powered) + //when powered, they recharge by healing + owner.adjustOrganLoss(ORGAN_SLOT_EYES,-0.5) + else + //to simulate running out of power, they take damage + owner.adjustOrganLoss(ORGAN_SLOT_EYES,0.5) + + if(damage < low_threshold) if(see_in_dark == PRETERNIS_NV_OFF) see_in_dark = PRETERNIS_NV_ON owner.update_sight() else + //if your eyes start getting hurt no more nightvision if(see_in_dark == PRETERNIS_NV_ON) see_in_dark = PRETERNIS_NV_OFF owner.update_sight() @@ -42,6 +64,17 @@ sight_flags &= ~SEE_BLACKNESS owner.update_sight() +/obj/item/organ/eyes/robotic/preternis/examine(mob/user) + . = ..() + if(status == ORGAN_ROBOTIC && (organ_flags & ORGAN_FAILING)) + . += span_warning("[src] appears to be completely out of charge. However, that's nothing popping them back in a Preternis wouldn't fix.") + + else if(organ_flags & ORGAN_FAILING) + . += span_warning("[src] appears to be completely out of charge. If they were put back in a Preternis they would surely recharge in time.") + + else if(damage > high_threshold) + . += span_warning("[src] seem to flicker on and off. They must be pretty low on charge without being in a Preternis") + /obj/item/organ/lungs/preternis name = "preternis lungs" desc = "An experimental set of lungs.Due to the cybernetic nature of these lungs,they are less resistant to heat and cold but are more efficent at filtering oxygen." diff --git a/yogstation/code/modules/mob/living/carbon/human/species_types/preternis/preternis.dm b/yogstation/code/modules/mob/living/carbon/human/species_types/preternis/preternis.dm index 3752967b4080..46a8cb8dcd5d 100644 --- a/yogstation/code/modules/mob/living/carbon/human/species_types/preternis/preternis.dm +++ b/yogstation/code/modules/mob/living/carbon/human/species_types/preternis/preternis.dm @@ -25,7 +25,7 @@ adjust_charge - take a positive or negative value to adjust the charge level siemens_coeff = 1.75 //Computers REALLY don't like being shorted out payday_modifier = 0.8 //Useful to NT for engineering + very close to Human yogs_draw_robot_hair = TRUE - mutanteyes = /obj/item/organ/eyes/preternis + mutanteyes = /obj/item/organ/eyes/robotic/preternis mutantlungs = /obj/item/organ/lungs/preternis yogs_virus_infect_chance = 20 virus_resistance_boost = 10 //YEOUTCH,good luck getting it out diff --git a/yogstation/icons/mob/inhands/equipment/fishing_lefthand.dmi b/yogstation/icons/mob/inhands/equipment/fishing_lefthand.dmi new file mode 100644 index 000000000000..eecb088c76d0 Binary files /dev/null and b/yogstation/icons/mob/inhands/equipment/fishing_lefthand.dmi differ diff --git a/yogstation/icons/mob/inhands/equipment/fishing_righthand.dmi b/yogstation/icons/mob/inhands/equipment/fishing_righthand.dmi new file mode 100644 index 000000000000..083467251b9f Binary files /dev/null and b/yogstation/icons/mob/inhands/equipment/fishing_righthand.dmi differ diff --git a/yogstation/icons/obj/fishing/fishing.dmi b/yogstation/icons/obj/fishing/fishing.dmi index 2db5d8259da5..ca4cf1a936dd 100644 Binary files a/yogstation/icons/obj/fishing/fishing.dmi and b/yogstation/icons/obj/fishing/fishing.dmi differ diff --git a/yogstation/sound/items/dodgeroll.ogg b/yogstation/sound/items/dodgeroll.ogg new file mode 100644 index 000000000000..7a450778c6fb Binary files /dev/null and b/yogstation/sound/items/dodgeroll.ogg differ