diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 8f47c8079670..cd4a7fa1b717 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -4,6 +4,7 @@ "platymuus.dm-langclient", "EditorConfig.EditorConfig", "arcanis.vscode-zipfs", - "dbaeumer.vscode-eslint" + "dbaeumer.vscode-eslint", + "anturk.dmi-editor" ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index fb9cb43db606..a8212eb45c10 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,9 +7,8 @@ "tgui/.yarn": true, "tgui/.pnp.*": true }, - "workbench.editorAssociations": { - "*.dmi": "imagePreview.previewEditor" - }, "files.eol": "\n", - "gitlens.advanced.blame.customArguments": ["-w"] -} \ No newline at end of file + "gitlens.advanced.blame.customArguments": [ + "-w" + ] +} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_chemistry.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_chemistry.dmm index c31248a7d141..b02d03abef79 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_chemistry.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_chemistry.dmm @@ -350,7 +350,7 @@ /turf/open/floor/plating, /area/ruin/powered) "Q" = ( -/obj/machinery/chem_dispenser, +/obj/machinery/chem_dispenser/fullupgrade, /obj/structure/cable/yellow{ icon_state = "0-4" }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_clownfacility.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_clownfacility.dmm index 223363bbb595..c6ca0c00762e 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_clownfacility.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_clownfacility.dmm @@ -59,7 +59,7 @@ /area/ruin/unpowered) "an" = ( /obj/structure/closet/malf, -/obj/item/clothing/gloves/color/rainbow/clown, +/obj/item/clothing/gloves/color/rainbow, /obj/item/clothing/mask/gas/clown_hat, /obj/item/clothing/shoes/clown_shoes, /obj/item/clothing/under/rank/clown, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_cugganscove.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_cugganscove.dmm index 3ec9b7089de2..2993e9dd9cc5 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_cugganscove.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_cugganscove.dmm @@ -380,8 +380,8 @@ /obj/item/clothing/shoes/jackboots, /obj/item/clothing/glasses/eyepatch, /obj/item/clothing/glasses/eyepatch, -/obj/item/clothing/head/bandana, -/obj/item/clothing/head/bandana, +/obj/item/clothing/head/pirate/bandana, +/obj/item/clothing/head/pirate/bandana, /turf/open/floor/wood, /area/ruin/unpowered) "bC" = ( @@ -407,8 +407,8 @@ /obj/item/clothing/shoes/jackboots, /obj/item/clothing/glasses/eyepatch, /obj/item/clothing/glasses/eyepatch, -/obj/item/clothing/head/bandana, -/obj/item/clothing/head/bandana, +/obj/item/clothing/head/pirate/bandana, +/obj/item/clothing/head/pirate/bandana, /obj/item/toy/katana, /turf/open/floor/wood, /area/ruin/unpowered) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_cursedtoyshop.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_cursedtoyshop.dmm index 83b65f24781b..ef4d9f183223 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_cursedtoyshop.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_cursedtoyshop.dmm @@ -56,7 +56,7 @@ /obj/item/clothing/shoes/clown_shoes, /obj/item/clothing/under/rank/clown, /obj/item/storage/backpack/clown, -/obj/item/clothing/gloves/color/rainbow/clown, +/obj/item/clothing/gloves/color/rainbow, /turf/open/floor/wood, /area/ruin/powered) "ak" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm index d587d19b9760..03c072743a08 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm @@ -12,7 +12,7 @@ /turf/open/lava/smooth, /area/ruin/powered/gluttony) "f" = ( -/obj/item/reagent_containers/syringe/gluttony, +/obj/item/organ/stomach/cursed, /turf/open/floor/plasteel/freezer, /area/ruin/powered/gluttony) "g" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_medical.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_medical.dmm index 903d986f0a71..15d0418eb6c0 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_medical.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_medical.dmm @@ -148,7 +148,7 @@ /turf/open/floor/plasteel/white, /area/ruin/powered) "aw" = ( -/obj/machinery/chem_dispenser, +/obj/machinery/chem_dispenser/fullupgrade, /turf/open/floor/plasteel/white, /area/ruin/powered) "ax" = ( diff --git a/_maps/RandomRuins/SpaceRuins/spacebar.dmm b/_maps/RandomRuins/SpaceRuins/spacebar.dmm index 25c3b6efaa6b..649b3ccf2bdb 100644 --- a/_maps/RandomRuins/SpaceRuins/spacebar.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacebar.dmm @@ -95,7 +95,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/machinery/chem_dispenser, +/obj/machinery/chem_dispenser/fullupgrade, /turf/open/floor/plasteel, /area/ruin/space/has_grav/powered/spacebar) "eC" = ( 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/RandomRuins/StationRuins/maint/5x4/5x4_shoestore.dmm b/_maps/RandomRuins/StationRuins/maint/5x4/5x4_shoestore.dmm index fa324992ab7c..e9ee8acafb4f 100644 --- a/_maps/RandomRuins/StationRuins/maint/5x4/5x4_shoestore.dmm +++ b/_maps/RandomRuins/StationRuins/maint/5x4/5x4_shoestore.dmm @@ -38,7 +38,7 @@ pixel_x = 12; pixel_y = 7 }, -/obj/item/clothing/shoes/yogs/fire_crocs{ +/obj/item/clothing/shoes/fire_crocs{ pixel_x = 30; pixel_y = 13 }, diff --git a/_maps/RandomZLevels/VR/syndicate_trainer.dmm b/_maps/RandomZLevels/VR/syndicate_trainer.dmm index a4dc1b041e2c..1fc1b4328a38 100644 --- a/_maps/RandomZLevels/VR/syndicate_trainer.dmm +++ b/_maps/RandomZLevels/VR/syndicate_trainer.dmm @@ -2060,7 +2060,7 @@ /turf/open/indestructible, /area/awaymission/centcomAway/thunderdome) "lX" = ( -/obj/machinery/chem_dispenser, +/obj/machinery/chem_dispenser/fullupgrade, /obj/item/storage/box/beakers, /turf/open/indestructible, /area/awaymission/centcomAway/cafe) diff --git a/_maps/RandomZLevels/VR/vrhub.dmm b/_maps/RandomZLevels/VR/vrhub.dmm index 628973427ab0..e8fa6f2478ac 100644 --- a/_maps/RandomZLevels/VR/vrhub.dmm +++ b/_maps/RandomZLevels/VR/vrhub.dmm @@ -642,7 +642,7 @@ /turf/open/indestructible, /area/awaymission/vr/syndicate) "eI" = ( -/obj/machinery/chem_dispenser, +/obj/machinery/chem_dispenser/fullupgrade, /obj/item/storage/box/beakers, /turf/open/indestructible, /area/awaymission/vr/syndicate) diff --git a/_maps/map_files/GaxStation/GaxStation.dmm b/_maps/map_files/GaxStation/GaxStation.dmm index a1f19e981cdb..cad1c1025762 100644 --- a/_maps/map_files/GaxStation/GaxStation.dmm +++ b/_maps/map_files/GaxStation/GaxStation.dmm @@ -16777,7 +16777,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/fitness) "iYZ" = ( -/obj/effect/landmark/stationroom/gax/ai_whale, +/obj/effect/landmark/stationroom/limited_spawn/gax/ai_whale, /turf/open/space/basic, /area/space) "iZa" = ( 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..d9df52bd83e6 100644 --- a/_maps/map_files/YogStation/YogStation.dmm +++ b/_maps/map_files/YogStation/YogStation.dmm @@ -183,10 +183,6 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) -"abd" = ( -/obj/machinery/bounty_board, -/turf/closed/wall, -/area/science/lab) "abe" = ( /obj/machinery/airalarm{ pixel_y = 24 @@ -13731,9 +13727,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) -"bgc" = ( -/turf/closed/wall/r_wall, -/area/science/lab) "bgh" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -14039,34 +14032,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white, /area/science/research) -"bhC" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "rnd"; - name = "research lab shutters" - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/plating, -/area/science/lab) -"bhD" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/southright{ - name = "Research and Development Desk"; - req_access_txt = "7" - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "rnd"; - name = "research lab shutters" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/plating, -/area/science/lab) "bhE" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty{ @@ -14338,19 +14303,6 @@ }, /turf/open/floor/plasteel/white, /area/science/research) -"biS" = ( -/obj/machinery/camera{ - c_tag = "Research Division Access" - }, -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/plasteel/white, -/area/science/research) "biT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -14407,15 +14359,6 @@ }, /turf/open/floor/plasteel/white, /area/science/lab) -"biY" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/plating, -/area/maintenance/starboard) "bja" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -15288,12 +15231,6 @@ "bnp" = ( /turf/open/floor/plasteel, /area/science/lab) -"bnr" = ( -/obj/structure/plasticflaps{ - opacity = 1 - }, -/turf/open/floor/plating, -/area/science/lab) "bnu" = ( /obj/machinery/door/firedoor/border_only{ dir = 8 @@ -15629,9 +15566,6 @@ }, /turf/open/floor/plasteel/white, /area/science/lab) -"boB" = ( -/turf/closed/wall, -/area/science/lab) "boC" = ( /obj/machinery/door/airlock/mining/glass{ name = "Quartermaster"; @@ -15869,17 +15803,6 @@ }, /turf/open/floor/plasteel/white, /area/science/lab) -"bpp" = ( -/obj/machinery/door/window/eastright{ - base_state = "left"; - dir = 8; - icon_state = "left"; - name = "Research Division Delivery"; - req_access_txt = "47" - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/science/lab) "bpq" = ( /obj/machinery/light_switch{ pixel_y = -23 @@ -16084,17 +16007,6 @@ "bqe" = ( /turf/closed/wall/r_wall, /area/science/explab) -"bqf" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "rnd2"; - name = "research lab shutters" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/plasteel/white, -/area/science/lab) "bqi" = ( /obj/effect/turf_decal/stripes/corner, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -16103,25 +16015,6 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /turf/open/floor/plasteel, /area/hallway/secondary/entry) -"bqk" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "rnd2"; - name = "research lab shutters" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/white, -/area/science/lab) "bqo" = ( /obj/machinery/computer/cargo{ dir = 1 @@ -16229,11 +16122,6 @@ /obj/structure/chair/stool, /turf/open/floor/plating, /area/maintenance/fore) -"bro" = ( -/turf/open/floor/plasteel/white/side{ - dir = 10 - }, -/area/science/research) "brp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -16256,13 +16144,6 @@ }, /turf/open/floor/plasteel, /area/science/robotics/lab) -"brr" = ( -/obj/effect/spawner/structure/window, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating, -/area/science/explab) "brs" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/eastright{ @@ -16316,14 +16197,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard) -"brx" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "rnd2"; - name = "research lab shutters" - }, -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/science/lab) "brz" = ( /obj/item/flashlight/flare/signal, /turf/open/floor/plating, @@ -20516,10 +20389,6 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet) -"bMr" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/science/xenobiology) "bMs" = ( /obj/effect/spawner/structure/window/reinforced/shutter, /turf/open/floor/plating, @@ -21103,10 +20972,6 @@ /obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/space/basic, /area/engine/atmos_distro) -"bPK" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/science/misc_lab) "bPN" = ( /turf/closed/wall, /area/science/misc_lab) @@ -21633,6 +21498,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 @@ -23918,14 +23813,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"ctu" = ( -/obj/effect/spawner/structure/window, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/plating, -/area/medical/sleeper) "ctv" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -25351,18 +25238,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/quartermaster/office) -"cQe" = ( -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "surgery_shutters"; - name = "Surgery Shutters" - }, -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/medical/surgery) "cQr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -26746,6 +26621,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, @@ -29408,23 +29303,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"eYp" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/turf/open/floor/plasteel, -/area/engine/foyer) "eYt" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ @@ -30646,6 +30524,15 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) +"fJH" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/closed/indestructible/riveted, +/area/maintenance/starboard) "fJS" = ( /obj/machinery/button/door{ id = "bridge blast"; @@ -31471,6 +31358,17 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"giP" = ( +/obj/machinery/door/window/eastright{ + base_state = "left"; + dir = 8; + icon_state = "left"; + name = "Research Division Delivery"; + req_access_txt = "7" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/science/lab) "gjl" = ( /turf/closed/wall, /area/quartermaster/warehouse) @@ -31815,23 +31713,6 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai_upload_foyer) -"gsF" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel, -/area/engine/engineering) "gsH" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -32595,21 +32476,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 @@ -32626,21 +32492,6 @@ "gLo" = ( /turf/open/floor/circuit/telecomms, /area/science/xenobiology) -"gNd" = ( -/obj/machinery/light, -/obj/structure/table, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/metal/fifty, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/structure/noticeboard{ - dir = 8; - pixel_x = 27 - }, -/turf/open/floor/plasteel, -/area/engine/foyer) "gNS" = ( /obj/effect/turf_decal/loading_area{ dir = 4 @@ -33252,6 +33103,18 @@ }, /turf/open/floor/plasteel, /area/quartermaster/warehouse) +"hcZ" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "surgery_shutters"; + name = "Surgery Shutters" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/medical/surgery) "hdd" = ( /obj/machinery/door/airlock/public/glass{ name = "Library" @@ -34871,16 +34734,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"hNl" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/machinery/computer/rdconsole/production{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/engine/foyer) "hNs" = ( /obj/effect/landmark/stationroom/maint/fivexthree, /turf/template_noop, @@ -36300,14 +36153,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) -"iuo" = ( -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/medical/sleeper) "iuR" = ( /obj/machinery/door/window/southleft{ base_state = "right"; @@ -37685,18 +37530,6 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) -"iYd" = ( -/obj/effect/spawner/structure/window, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "surgery_shutters"; - name = "Surgery Shutters" - }, -/turf/open/floor/plating, -/area/medical/surgery) "iYj" = ( /obj/machinery/meter{ target_layer = 4 @@ -38575,6 +38408,18 @@ }, /turf/open/floor/plasteel, /area/engine/atmos_distro) +"jte" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "surgery_shutters"; + name = "Surgery Shutters" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/medical/surgery) "jtq" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/effect/turf_decal/stripes/line{ @@ -39032,27 +38877,6 @@ }, /turf/open/floor/plating, /area/maintenance/fore) -"jHV" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/turf/open/floor/plasteel, -/area/engine/foyer) "jHY" = ( /obj/machinery/camera{ c_tag = "Central Hallway East"; @@ -39178,6 +39002,23 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /turf/open/floor/plating, /area/storage/tech) +"jOc" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel, +/area/engine/foyer) "jOV" = ( /obj/machinery/atmospherics/components/unary/vent_pump/layer2{ dir = 8 @@ -41621,6 +41462,16 @@ /obj/structure/closet/l3closet, /turf/open/floor/plating, /area/maintenance/aft) +"kZP" = ( +/obj/structure/table, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/metal/fifty, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/foyer) "kZX" = ( /obj/structure/window/reinforced{ dir = 8 @@ -42826,6 +42677,14 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) +"lEQ" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "robotics2"; + name = "robotics lab shutters" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/science/robotics/lab) "lFb" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 4 @@ -45199,6 +45058,22 @@ /obj/structure/rack, /turf/open/floor/plating, /area/maintenance/port/aft) +"mQz" = ( +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/item/twohanded/required/kirbyplants/random, +/obj/machinery/light, +/obj/structure/noticeboard{ + dir = 8; + pixel_x = 27 + }, +/turf/open/floor/plasteel, +/area/engine/foyer) "mQB" = ( /obj/machinery/light{ dir = 1 @@ -45552,6 +45427,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"; @@ -47693,6 +47588,18 @@ }, /turf/open/floor/plasteel/white, /area/science/mixing/chamber) +"oao" = ( +/obj/item/folder/white, +/obj/structure/table, +/obj/item/disk/tech_disk, +/obj/item/disk/tech_disk, +/obj/item/disk/design_disk, +/obj/item/disk/design_disk, +/obj/item/paicard{ + pixel_x = 4 + }, +/turf/closed/indestructible/riveted, +/area/science/lab) "oaF" = ( /obj/machinery/door/firedoor/border_only{ dir = 4 @@ -47728,6 +47635,14 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"obM" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/medical/medbay/lobby) "ocq" = ( /obj/machinery/door/poddoor{ id = "trash"; @@ -48313,14 +48228,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) -"orq" = ( -/obj/effect/spawner/structure/window, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/plating, -/area/medical/medbay/lobby) "orC" = ( /obj/structure/grille, /obj/structure/lattice, @@ -48429,6 +48336,27 @@ }, /turf/open/floor/plasteel/dark, /area/engine/atmos) +"osQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel, +/area/engine/foyer) "ota" = ( /obj/structure/toilet{ dir = 1 @@ -49523,18 +49451,6 @@ /obj/item/stock_parts/subspace/analyzer, /turf/open/floor/plasteel/white, /area/storage/tech) -"oRC" = ( -/obj/item/folder/white, -/obj/structure/table, -/obj/item/disk/tech_disk, -/obj/item/disk/tech_disk, -/obj/item/disk/design_disk, -/obj/item/disk/design_disk, -/obj/item/paicard{ - pixel_x = 4 - }, -/turf/open/floor/plasteel/white, -/area/science/lab) "oRG" = ( /obj/structure/table, /obj/machinery/cell_charger, @@ -49942,6 +49858,14 @@ /obj/effect/turf_decal/box, /turf/open/floor/engine, /area/maintenance/disposal/incinerator) +"piL" = ( +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/medical/sleeper) "piV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 1 @@ -51189,6 +51113,9 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) +"pTz" = ( +/turf/closed/indestructible/riveted, +/area/science/research) "pTL" = ( /obj/structure/sign/departments/minsky/engineering/telecommmunications{ pixel_y = 32 @@ -52400,18 +52327,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plating, /area/engine/engineering) -"qzJ" = ( -/obj/effect/spawner/structure/window, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "surgery_shutters"; - name = "Surgery Shutters" - }, -/turf/open/floor/plating, -/area/medical/surgery) "qAb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -53303,14 +53218,6 @@ /obj/effect/turf_decal/trimline/white, /turf/open/floor/plasteel/dark, /area/engine/atmos) -"qYz" = ( -/obj/effect/spawner/structure/window, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "robotics2"; - name = "robotics lab shutters" - }, -/turf/open/floor/plating, -/area/science/robotics/lab) "qZu" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 @@ -54185,10 +54092,6 @@ /obj/machinery/door/firedoor/border_only, /turf/open/floor/plating, /area/maintenance/aft) -"ryf" = ( -/obj/structure/sign/departments/minsky/research/research, -/turf/closed/wall/r_wall, -/area/science/lab) "rym" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 @@ -56967,26 +56870,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 @@ -57278,6 +57161,21 @@ }, /turf/open/floor/plasteel, /area/quartermaster/qm) +"sTv" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/turf/closed/indestructible/riveted, +/area/maintenance/starboard) "sTw" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4; @@ -58814,23 +58712,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{ @@ -58838,6 +58719,19 @@ }, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) +"tEo" = ( +/obj/machinery/camera{ + c_tag = "Research Division Access" + }, +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/closed/indestructible/riveted, +/area/science/research) "tEp" = ( /obj/structure/cable{ icon_state = "1-2" @@ -61908,35 +61802,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 @@ -63154,6 +63019,14 @@ }, /turf/open/floor/plasteel/white, /area/medical/genetics) +"vPZ" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/medical/medbay/lobby) "vQq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -63564,14 +63437,6 @@ }, /turf/open/floor/plating, /area/science/xenobiology) -"wci" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "robotics2"; - name = "robotics lab shutters" - }, -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/science/robotics/lab) "wcw" = ( /obj/effect/turf_decal/tile/red{ dir = 1 @@ -63806,6 +63671,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 @@ -64637,17 +64525,6 @@ }, /turf/open/floor/circuit/green/telecomms/mainframe, /area/tcommsat/server) -"wIL" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/item/twohanded/required/kirbyplants/random, -/turf/open/floor/plasteel, -/area/engine/foyer) "wIS" = ( /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -64828,6 +64705,13 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"wMP" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/science/explab) "wNo" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -64936,6 +64820,9 @@ /obj/structure/window/reinforced, /turf/open/floor/plasteel, /area/security/prison) +"wQS" = ( +/turf/closed/indestructible/riveted, +/area/space) "wRg" = ( /obj/machinery/flasher{ id = "AI"; @@ -65387,6 +65274,20 @@ /obj/structure/closet/radiation, /turf/open/floor/plasteel/dark, /area/engine/atmos_distro) +"xgv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "xgD" = ( /obj/structure/table, /obj/item/hand_labeler, @@ -67155,6 +67056,17 @@ /obj/item/twohanded/rcl/pre_loaded, /turf/open/floor/plasteel, /area/engine/engineering) +"xYI" = ( +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/computer/rdconsole/production{ + dir = 8; + req_access = list(32) + }, +/turf/open/floor/plasteel, +/area/engine/foyer) "xYW" = ( /obj/structure/table, /obj/item/clothing/glasses/meson, @@ -98506,7 +98418,7 @@ aiv aiv xaW aAq -jHV +osQ kbN ixa nQZ @@ -99020,7 +98932,7 @@ jxp lFb jxp jxp -eYp +jOc hOf cfF rhn @@ -99030,7 +98942,7 @@ kfj naG clM qpB -gsF +xgv mhO qQV qQV @@ -100046,11 +99958,11 @@ ahi ajs uxH akB -hNl +xYI cMv uQS -gNd -wIL +kZP +mQz cbp ykH dWR @@ -103614,7 +103526,7 @@ bfF ocA opn wiA -ctu +piL kJb oCO bZg @@ -104128,7 +104040,7 @@ cfu uYq ogm pZK -ctu +piL mtT lvO bDR @@ -104381,7 +104293,7 @@ aco dIW rJo hIu -mgH +vPZ oQi aBB vle @@ -104642,7 +104554,7 @@ gtC mKN kub tva -ctu +piL tzC rUG bDR @@ -104899,7 +104811,7 @@ gtC sxa kub tva -iuo +piL iTR vXI gaU @@ -105923,11 +105835,11 @@ fCh dlx vMp wtY -orq +obM sxa kub hLI -ctu +piL sTb mxh sgE @@ -106188,7 +106100,7 @@ bvj bvj bvj shz -sKm +wls bvj tDe tVV @@ -106441,7 +106353,7 @@ orY hHy pjc hLI -qzJ +hcZ qmI xOh shN @@ -106698,7 +106610,7 @@ gtC iBZ kub tva -cQe +jte jbq vvK vvK @@ -106955,13 +106867,13 @@ bEi mvC cXg tva -iYd +jte bdw urv uMu vYV oQs -tEa +mYj tzM ulL oEY @@ -107212,7 +107124,7 @@ luE uSW rTC tva -iYd +jte jbq lMh uuV @@ -107469,8 +107381,8 @@ bEi hoP kub hLI -iYd -gKi +jte +dDo gQe doF hnj @@ -107730,7 +107642,7 @@ adK adK adK adK -vhN +bUA adK adK jrP @@ -112866,7 +112778,7 @@ sUL jna cIb hlz -wci +lEQ bgp sRl byf @@ -113123,7 +113035,7 @@ dEU bTv cIb rOz -wci +lEQ bgp pYr lcM @@ -113380,7 +113292,7 @@ bkr cHW cId hkd -wci +lEQ nlD bnH byf @@ -114408,7 +114320,7 @@ biN cHX buj buj -wci +lEQ sGm uCv byj @@ -114922,7 +114834,7 @@ bov bpU brq bsW -wci +lEQ bgp bnx byk @@ -115176,7 +115088,7 @@ bfV bfV bfV box -qYz +lEQ brs box box @@ -115193,9 +115105,9 @@ bsn bDc bDc bLe -bMr +piv uBi -bMr +piv bDb bDb bDb @@ -115453,7 +115365,7 @@ bHK bzE bID bHI -bPK +bZZ bQO bSb bOu @@ -115942,13 +115854,13 @@ aYV vLR bfZ bhA -biS +tEo aMK dcg bvx boz bnJ -bBD +pTz bBD aNr bBD @@ -115967,7 +115879,7 @@ bHL aPO bBD bJo -bPK +bZZ bWr bWr aiW @@ -116198,14 +116110,14 @@ aYV jKG mYV bga -bgc -bgc -bgc -bgc -bgc -boB -boB -boB +wQS +wQS +wQS +wQS +wQS +wQS +wQS +wQS btb bmU bvJ @@ -116455,15 +116367,15 @@ aYV aYV vLR bfX -bhC +wQS biU bks blI bnn boA -oRC -abd -bgp +oao +wQS +pTz bmU bvJ bCk @@ -116712,15 +116624,15 @@ aYV aYV vLR bfX -bhD +wQS biV biW blK bnp boA boQ -brx -bro +wQS +pTz bmU bvJ bxj @@ -116969,15 +116881,15 @@ aYV bdv vLR bgb -bhC +wQS biU biW blJ bno bkt biW -bqf -bgp +wQS +pTz bmU bvK bxi @@ -117225,15 +117137,15 @@ bbF aYV aYV vLR -ryf -bgc +wQS +wQS biX bhV bka bka aCl bpo -bqk +wQS brp bmW bvK @@ -117482,7 +117394,7 @@ aCR bcy bdx beG -bgc +wQS bhE biW bkv @@ -117490,7 +117402,7 @@ blL biW bnh biW -brx +wQS bte bmX bvK @@ -117739,7 +117651,7 @@ aMZ nhP wmI beI -bgc +wQS bhF dEY bib @@ -117747,7 +117659,7 @@ bki bmJ bnl bpq -boB +wQS bta bmY bvK @@ -117996,16 +117908,16 @@ aZd aTk aPq beH -bgc -bgc -bgc -bgc -bgc -bgc -bgc -bpp -bgc -brr +wQS +wQS +wQS +wQS +wQS +wQS +wQS +giP +wQS +wMP bmZ bvK bvK @@ -118255,13 +118167,13 @@ bdz beJ xtQ bhH -biY -biY -biY -bjS -bnr +fJH +fJH +fJH +sTv +wQS bpr -bgc +wQS blx bna bvM @@ -118516,9 +118428,9 @@ hoc hoc hoc bjT -boB -bgc -bgc +wQS +wQS +wQS bsk bsF aCN diff --git a/_maps/map_files/YogsDelta/YogsDelta.dmm b/_maps/map_files/YogsDelta/YogsDelta.dmm index 6c9958be27ea..6dbf3e028609 100644 --- a/_maps/map_files/YogsDelta/YogsDelta.dmm +++ b/_maps/map_files/YogsDelta/YogsDelta.dmm @@ -124207,6 +124207,11 @@ }, /turf/open/floor/plating, /area/engine/engineering) +"pJO" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/power/grounding_rod, +/turf/open/floor/plating/airless, +/area/space/nearstation) "pKo" = ( /turf/closed/wall, /area/aisat) @@ -124740,6 +124745,16 @@ }, /turf/open/floor/plasteel, /area/medical/patients_rooms/room_c) +"qPI" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/power/grounding_rod, +/turf/open/floor/plating/airless, +/area/space/nearstation) "qQT" = ( /obj/machinery/status_display/evac{ pixel_x = -32 @@ -128510,6 +128525,13 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"wVk" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/power/grounding_rod, +/turf/open/floor/plating/airless, +/area/space/nearstation) "wWk" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -128598,6 +128620,13 @@ /obj/item/instrument/harmonica, /turf/open/floor/plasteel, /area/security/prison) +"wZE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/power/grounding_rod, +/turf/open/floor/plating/airless, +/area/space/nearstation) "xaG" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -149740,11 +149769,11 @@ cja ckv clR cnB -clR +wZE clR crI clR -clR +wZE cnB clR czo @@ -150508,7 +150537,7 @@ cdE cfA aaa cja -ckw +wVk aad aaa abj @@ -150518,7 +150547,7 @@ abj abj aaa aad -ctn +pJO cja aaa cDT @@ -151536,7 +151565,7 @@ cdF cfA aaa cja -ckw +wVk aad aaa abj @@ -151546,7 +151575,7 @@ abj abj aaa aad -ctn +pJO cja aaa cDT @@ -152310,11 +152339,11 @@ cjc ckz clU clU -clU +qPI clU crL clU -clU +qPI clU clU czr 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/_maps/shuttles/ruin_pirate_cutter.dmm b/_maps/shuttles/ruin_pirate_cutter.dmm index 9c4d62590d2e..07266625458e 100644 --- a/_maps/shuttles/ruin_pirate_cutter.dmm +++ b/_maps/shuttles/ruin_pirate_cutter.dmm @@ -171,7 +171,7 @@ /obj/item/clothing/suit/pirate, /obj/item/clothing/under/pirate, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/head/bandana, +/obj/item/clothing/head/pirate/bandana, /turf/open/floor/plasteel/dark/side{ dir = 5 }, @@ -458,7 +458,7 @@ /obj/item/clothing/suit/pirate, /obj/item/clothing/under/pirate, /obj/item/clothing/shoes/jackboots, -/obj/item/clothing/head/bandana, +/obj/item/clothing/head/pirate/bandana, /obj/effect/turf_decal/tile/red{ dir = 1 }, diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 885ba74810e7..2a3f8f4e6dc2 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -57,6 +57,7 @@ #define ADMIN_LOOKUP(user) "[key_name_admin(user)][ADMIN_QUE(user)]" #define ADMIN_LOOKUPFLW(user) "[key_name_admin(user)][ADMIN_QUE(user)] [ADMIN_FLW(user)]" #define ADMIN_SET_SD_CODE "(SETCODE)" +#define ADMIN_SET_BC_CODE "(SETBEER)" #define ADMIN_FULLMONTY_NONAME(user) "[ADMIN_QUE(user)] [ADMIN_PP(user)] [ADMIN_VV(user)] [ADMIN_SM(user)] [ADMIN_FLW(user)] [ADMIN_TP(user)] [ADMIN_INDIVIDUALLOG(user)] [ADMIN_SMITE(user)]" #define ADMIN_FULLMONTY(user) "[key_name_admin(user)] [ADMIN_FULLMONTY_NONAME(user)]" #define ADMIN_JMP(src) "(JMP)" 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/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 812ff5d9503d..317c0c52051d 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -494,3 +494,5 @@ GLOBAL_LIST_INIT(pipe_paint_colors, list( #define MIASMA_CORPSE_MOLES 0.02 #define MIASMA_GIBS_MOLES 0.005 + +#define TURF_SHARES(T) (LAZYLEN(T.atmos_adjacent_turfs)) diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index 9d0ca1711f5f..af625445a55d 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -155,6 +155,7 @@ #define COMSIG_MOVABLE_IMPACT_ZONE "item_impact_zone" //from base of mob/living/hitby(): (mob/living/target, hit_zone) #define COMSIG_MOVABLE_BUCKLE "buckle" //from base of atom/movable/buckle_mob(): (mob, force) #define COMSIG_MOVABLE_UNBUCKLE "unbuckle" //from base of atom/movable/unbuckle_mob(): (mob, force) +#define COMSIG_MOVABLE_PRE_DROPTHROW "movable_pre_dropthrow" //from base of atom/movable/throw_at(): Triggers when throwing, before the item is dropped and before COMSIG_MOVABLE_PRE_THROW #define COMSIG_MOVABLE_PRE_THROW "movable_pre_throw" //from base of atom/movable/throw_at(): (list/args) #define COMPONENT_CANCEL_THROW 1 #define COMSIG_MOVABLE_POST_THROW "movable_post_throw" //from base of atom/movable/throw_at(): (datum/thrownthing, spin) diff --git a/code/__DEFINES/dye_keys.dm b/code/__DEFINES/dye_keys.dm new file mode 100644 index 000000000000..133f9c47d340 --- /dev/null +++ b/code/__DEFINES/dye_keys.dm @@ -0,0 +1,28 @@ +#define DYE_REGISTRY_UNDER "under" +#define DYE_REGISTRY_JUMPSKIRT "jumpskirt" +#define DYE_REGISTRY_GLOVES "gloves" +#define DYE_REGISTRY_SNEAKERS "sneakers" +#define DYE_REGISTRY_FANNYPACK "fannypack" +#define DYE_REGISTRY_BEDSHEET "bedsheet" + +#define DYE_RED "red" +#define DYE_ORANGE "orange" +#define DYE_YELLOW "yellow" +#define DYE_GREEN "green" +#define DYE_BLUE "blue" +#define DYE_PURPLE "purple" +#define DYE_BLACK "black" +#define DYE_WHITE "white" +#define DYE_RAINBOW "rainbow" +#define DYE_MIME "mime" +#define DYE_COSMIC "cosmic" +#define DYE_QM "qm" +#define DYE_LAW "law" +#define DYE_CAPTAIN "captain" +#define DYE_HOP "hop" +#define DYE_HOS "hos" +#define DYE_CE "ce" +#define DYE_RD "rd" +#define DYE_CMO "cmo" +#define DYE_REDCOAT "redcoat" +#define DYE_CLOWN "clown" 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/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 8c4dd2731dfd..647a92e08a0f 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -106,9 +106,9 @@ #define ui_mood "EAST-1:28,CENTER-3:10" //living -#define ui_living_pull "EAST-1:28,CENTER-2:15" +#define ui_living_pull "EAST-1:28,CENTER-3:15" #define ui_living_health "EAST-1:28,CENTER:15" -#define ui_living_healthdoll "EAST-1:28,CENTER-2:13" +#define ui_living_healthdoll "EAST-1:28,CENTER-1:15" //borgs #define ui_borg_health "EAST-1:28,CENTER-1:15" //borgs have the health display where humans have the pressure damage indicator. @@ -125,6 +125,9 @@ //slimes #define ui_slime_health "EAST,CENTER:15" //same as humans and constructs +//Blobbernauts +#define ui_blobbernaut_overmind_health "EAST-1:28,CENTER+0:19" + // AI #define ui_ai_core "CENTER-6:-32,SOUTH:6" diff --git a/code/_onclick/hud/blobbernauthud.dm b/code/_onclick/hud/blobbernauthud.dm index 17d3b11a7287..1df7bf87d340 100644 --- a/code/_onclick/hud/blobbernauthud.dm +++ b/code/_onclick/hud/blobbernauthud.dm @@ -1,9 +1,6 @@ +/datum/hud/living/blobbernaut/New(mob/living/owner) + . = ..() -/datum/hud/blobbernaut/New(mob/owner) - ..() - - blobpwrdisplay = new /obj/screen/healths/blob/naut/core() - infodisplay += blobpwrdisplay - - healths = new /obj/screen/healths/blob/naut() - infodisplay += healths + blobpwrdisplay = new /obj/screen/healths/blob/overmind() + blobpwrdisplay.hud = src + infodisplay += blobpwrdisplay \ No newline at end of file diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index c38ca3ae2165..85e3914b8513 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -19,7 +19,7 @@ GLOBAL_LIST_EMPTY(radial_menus) . = ..() icon_state = "radial_slice_focus" if(tooltips) - openToolTip(usr, src, params, title = name) + openToolTip(usr, src, params, title = name, content = desc) /obj/screen/radial/slice/MouseExited(location, control, params) . = ..() @@ -51,10 +51,16 @@ GLOBAL_LIST_EMPTY(radial_menus) parent.finished = TRUE /datum/radial_menu - var/list/choices = list() //List of choice id's - var/list/choices_icons = list() //choice_id -> icon - var/list/choices_values = list() //choice_id -> choice - var/list/page_data = list() //list of choices per page + /// List of choice IDs + var/list/choices = list() + /// choice_id -> icon + var/list/choices_icons = list() + /// choice_id -> choice + var/list/choices_values = list() + /// choice_id -> /datum/radial_menu_choice + var/list/choice_datums = list() + ///list of choices per page + var/list/page_data = list() var/selected_choice @@ -164,6 +170,7 @@ GLOBAL_LIST_EMPTY(radial_menus) E.cut_overlays() E.alpha = 0 E.name = "None" + E.desc = null E.maptext = null E.mouse_opacity = MOUSE_OPACITY_TRANSPARENT E.choice = null @@ -188,21 +195,32 @@ GLOBAL_LIST_EMPTY(radial_menus) E.alpha = 255 E.mouse_opacity = MOUSE_OPACITY_ICON E.cut_overlays() + E.vis_contents.Cut() if(choice_id == NEXT_PAGE_ID) E.name = "Next Page" + E.desc = null E.next_page = TRUE E.add_overlay("radial_next") else if(istext(choices_values[choice_id])) E.name = choices_values[choice_id] + else if(ispath(choices_values[choice_id],/atom)) + var/atom/A = choices_values[choice_id] + E.name = initial(A.name) else var/atom/movable/AM = choices_values[choice_id] //Movables only E.name = AM.name + + if(choices_icons[choice_id]) + E.add_overlay(choices_icons[choice_id]) + + var/datum/radial_menu_choice/choice_datum = choice_datums[choice_id] + if(choice_datum && istext(choice_datum.info)) + E.desc = choice_datum.info + E.choice = choice_id E.maptext = null E.next_page = FALSE - if(choices_icons[choice_id]) - E.add_overlay(choices_icons[choice_id]) /datum/radial_menu/New() close_button = new @@ -231,11 +249,18 @@ GLOBAL_LIST_EMPTY(radial_menus) var/I = extract_image(new_choices[E]) if(I) choices_icons[id] = I + + if (istype(new_choices[E], /datum/radial_menu_choice)) + choice_datums[id] = new_choices[E] setup_menu(use_tooltips) -/datum/radial_menu/proc/extract_image(E) - var/mutable_appearance/MA = new /mutable_appearance(E) +/datum/radial_menu/proc/extract_image(to_extract_from) + if (istype(to_extract_from, /datum/radial_menu_choice)) + var/datum/radial_menu_choice/choice = to_extract_from + to_extract_from = choice.image + + var/mutable_appearance/MA = new /mutable_appearance(to_extract_from) if(MA) MA.layer = ABOVE_HUD_LAYER MA.appearance_flags |= RESET_TRANSFORM @@ -315,3 +340,15 @@ GLOBAL_LIST_EMPTY(radial_menus) if(!menu.custom_check_callback.Invoke()) return return answer + +/// Can be provided to choices in radial menus if you want to provide more information +/datum/radial_menu_choice + /// Required -- what to display for this button + var/image + + /// If provided, will display an info button that will put this text in your chat + var/info + +/datum/radial_menu_choice/Destroy(force, ...) + . = ..() + QDEL_NULL(image) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 26af2be2459c..0c1db1bd3dcc 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -607,14 +607,10 @@ screen_loc = ui_internal mouse_opacity = MOUSE_OPACITY_TRANSPARENT -/obj/screen/healths/blob/naut - name = "health" - icon = 'icons/mob/blob.dmi' - icon_state = "nauthealth" - -/obj/screen/healths/blob/naut/core +/obj/screen/healths/blob/overmind name = "overmind health" - screen_loc = ui_health + icon = 'icons/mob/blob.dmi' + screen_loc = ui_blobbernaut_overmind_health icon_state = "corehealth" /obj/screen/healths/guardian diff --git a/code/_onclick/hud/swarmer.dm b/code/_onclick/hud/swarmer.dm index 382e11b2e5b0..5dd4267d9bc8 100644 --- a/code/_onclick/hud/swarmer.dm +++ b/code/_onclick/hud/swarmer.dm @@ -1,68 +1,75 @@ /obj/screen/swarmer icon = 'icons/mob/swarmer.dmi' +/obj/screen/swarmer/MouseEntered(location, control, params) + . = ..() + openToolTip(usr, src, params, title = name, content = desc) + +/obj/screen/swarmer/MouseExited(location, control, params) + closeToolTip(usr) + /obj/screen/swarmer/fabricate_trap icon_state = "ui_trap" - name = "Create trap (Costs 4 Resources)" - desc = "Creates a trap that will nonlethally shock any non-swarmer that attempts to cross it. (Costs 4 resources)" + name = "Create Trap (Costs 4 Resources)" + desc = "Creates a trap that will nonlethally shock any non-swarmer that attempts to cross it." /obj/screen/swarmer/fabricate_trap/Click() if(isswarmer(usr)) - var/mob/living/simple_animal/hostile/swarmer/S = usr - S.create_trap() + var/mob/living/simple_animal/hostile/swarmer/our_swarmer = usr + our_swarmer.create_trap() /obj/screen/swarmer/barricade icon_state = "ui_barricade" - name = "Create barricade (Costs 4 Resources)" - desc = "Creates a destructible barricade that will stop any non swarmer from passing it. Also allows disabler beams to pass through. (Costs 4 resources)" + name = "Create Barricade (Costs 4 Resources)" + desc = "Creates a destructible barricade that will stop any non-swarmer from passing it. Also allows disabler beams to pass through." /obj/screen/swarmer/barricade/Click() if(isswarmer(usr)) - var/mob/living/simple_animal/hostile/swarmer/S = usr - S.create_barricade() + var/mob/living/simple_animal/hostile/swarmer/our_swarmer = usr + our_swarmer.create_barricade() /obj/screen/swarmer/replicate icon_state = "ui_replicate" name = "Replicate (Costs 20 Resources)" - desc = "Creates a drone." + desc = "Creates an autonomous melee drone that will follow you and attack all non-swamers entities in sight. They can be ordered to move to a target location by a middle-click." /obj/screen/swarmer/replicate/Click() if(isswarmer(usr)) - var/mob/living/simple_animal/hostile/swarmer/S = usr - S.create_swarmer() + var/mob/living/simple_animal/hostile/swarmer/our_swarmer = usr + our_swarmer.create_swarmer() /obj/screen/swarmer/repair_self icon_state = "ui_self_repair" - name = "Repair self" - desc = "Repairs damage to our body." + name = "Repair Self" + desc = "Fully repairs damage done to our body after a moderate delay." /obj/screen/swarmer/repair_self/Click() if(isswarmer(usr)) - var/mob/living/simple_animal/hostile/swarmer/S = usr - S.repair_self() + var/mob/living/simple_animal/hostile/swarmer/our_swarmer = usr + our_swarmer.repair_self() /obj/screen/swarmer/toggle_light icon_state = "ui_light" - name = "Toggle light" - desc = "Toggles our inbuilt light on or off." + name = "Toggle Light" + desc = "Toggles our inbuilt light on or off. Follower drones will also synchronize their lights with a master unit." /obj/screen/swarmer/toggle_light/Click() if(isswarmer(usr)) - var/mob/living/simple_animal/hostile/swarmer/S = usr - S.toggle_light() + var/mob/living/simple_animal/hostile/swarmer/our_swarmer = usr + our_swarmer.toggle_light() /obj/screen/swarmer/contact_swarmers icon_state = "ui_contact_swarmers" - name = "Contact swarmers" + name = "Contact Swarmers" desc = "Sends a message to all other swarmers, should they exist." /obj/screen/swarmer/contact_swarmers/Click() if(isswarmer(usr)) - var/mob/living/simple_animal/hostile/swarmer/S = usr - S.contact_swarmers() + var/mob/living/simple_animal/hostile/swarmer/our_swarmer = usr + our_swarmer.contact_swarmers() -/datum/hud/swarmer/New(mob/owner) - ..() +/datum/hud/living/swarmer/New(mob/owner) + . = ..() var/obj/screen/using using = new /obj/screen/swarmer/fabricate_trap() diff --git a/code/controllers/subsystem/minor_mapping.dm b/code/controllers/subsystem/minor_mapping.dm index d9e137bf2299..2c50afeb811f 100644 --- a/code/controllers/subsystem/minor_mapping.dm +++ b/code/controllers/subsystem/minor_mapping.dm @@ -1,4 +1,4 @@ -#define REGAL_RAT_CHANCE 2 +#define REGAL_RAT_CHANCE 0 #define PLAGUE_RAT_CHANCE 0 SUBSYSTEM_DEF(minor_mapping) name = "Minor Mapping" 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/components/bakeable.dm b/code/datums/components/bakeable.dm index afaca2860d30..754a3996aacd 100644 --- a/code/datums/components/bakeable.dm +++ b/code/datums/components/bakeable.dm @@ -80,6 +80,7 @@ if(positive_result) used_oven.visible_message(span_warning("You smell something great coming from [used_oven]")) + playsound(parent, 'sound/machines/microwave/microwave-end.ogg', 50, 1) else used_oven.visible_message(span_warning("You smell a burnt smell coming from [used_oven]")) SEND_SIGNAL(parent, COMSIG_BAKE_COMPLETED, baked_result) diff --git a/code/datums/components/crafting/weapons.dm b/code/datums/components/crafting/weapons.dm index bac8dbfd518a..c2fc8e5c01cb 100644 --- a/code/datums/components/crafting/weapons.dm +++ b/code/datums/components/crafting/weapons.dm @@ -420,7 +420,7 @@ name = "Depleted Uranium Slug Shell" result = /obj/item/ammo_casing/shotgun/uraniumpenetrator reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, - /obj/item/stack/sheet/mineral/uranium = 3, + /obj/item/stack/sheet/mineral/uranium = 2, /obj/item/stack/rods = 2, /datum/reagent/thermite = 5) tools = list(TOOL_SCREWDRIVER) diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm index 370960ef7071..9e9c111f502b 100644 --- a/code/datums/martial/cqc.dm +++ b/code/datums/martial/cqc.dm @@ -318,7 +318,6 @@ var/hand = user.get_inactive_hand_index() if(!user.put_in_hand(I, hand)) I.forceMove(get_turf(attacker)) - attacker.Paralyze(20) attacker.Knockdown(60) user.adjustStaminaLoss(10) //Can't block forever. Really, if this becomes a problem you're already screwed. diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 8b16f029f822..f73c5c0ca87a 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -102,7 +102,7 @@ span_userdanger("[A] slams your chest! You can't breathe!")) playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1) if(D.losebreath <= 10) - D.losebreath = clamp(D.losebreath + 5, 0, 10) + D.losebreath = clamp(D.losebreath + 3, 0, 6) D.adjustOxyLoss(10) log_combat(A, D, "quickchoked") return 1 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/datums/traits/negative.dm b/code/datums/traits/negative.dm index 08398c1d5414..4ee8b3217a30 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -768,3 +768,20 @@ gain_text = span_danger("You feel like your blood is thin.") lose_text = span_notice("You feel like your blood is of normal thickness once more.") medical_record_text = "Patient appears unable to naturally form blood clots." + +/datum/quirk/brain_damage + name = "Brain Damage" + desc = "The shuttle ride was a bit bumpy to the station." + value = -7 + gain_text = span_danger("Your head hurts.") + lose_text = span_notice("Your head feels good again.") + medical_record_text = "Patient appears to have brain damage." + +/datum/quirk/brain_damage/add() + var/mob/living/carbon/human/H = quirk_holder + var/datum/brain_trauma/badtimes = list(BRAIN_TRAUMA_MILD, BRAIN_TRAUMA_SEVERE) + var/amount = 0 // Pray you dont get fucked + amount = rand(1, 4) + + for(var/i = 0 to amount) + H.gain_trauma_type(pick(badtimes), TRAUMA_RESILIENCE_ABSOLUTE) // Mr bones wild rides takes no breaks diff --git a/code/datums/wounds/bones.dm b/code/datums/wounds/bones.dm index 1ffb866efdc8..653d910e54cb 100644 --- a/code/datums/wounds/bones.dm +++ b/code/datums/wounds/bones.dm @@ -241,6 +241,7 @@ if(!do_after(user, time, victim, extra_checks = CALLBACK(src, .proc/still_exists))) return + playsound(victim, 'sound/effects/wounds/crack1.ogg', 25) if(prob(65)) user.visible_message(span_danger("[user] snaps [victim]'s dislocated [limb.name] back into place!"), span_notice("You snap [victim]'s dislocated [limb.name] back into place!"), ignored_mobs=victim) to_chat(victim, span_userdanger("[user] snaps your dislocated [limb.name] back into place!")) @@ -260,6 +261,7 @@ if(!do_after(user, time, victim, extra_checks = CALLBACK(src, .proc/still_exists))) return + playsound(victim, 'sound/effects/wounds/crack1.ogg', 25) if(prob(65)) user.visible_message(span_danger("[user] snaps [victim]'s dislocated [limb.name] with a sickening crack!"), span_danger("You snap [victim]'s dislocated [limb.name] with a sickening crack!"), ignored_mobs=victim) to_chat(victim, span_userdanger("[user] snaps your dislocated [limb.name] with a sickening crack!")) @@ -280,7 +282,8 @@ if(!do_after(user, base_treat_time * (user == victim ? 1.5 : 1), victim, extra_checks=CALLBACK(src, .proc/still_exists))) return - + + playsound(I, 'sound/effects/wounds/crack1.ogg', 25) if(victim == user) limb.receive_damage(brute=15, wound_bonus=CANT_WOUND) victim.visible_message(span_danger("[user] finishes resetting [victim.p_their()] [limb.name]!"), span_userdanger("You reset your [limb.name]!")) diff --git a/code/datums/wounds/burns.dm b/code/datums/wounds/burns.dm index cab96d81f1ce..4414b9e521a2 100644 --- a/code/datums/wounds/burns.dm +++ b/code/datums/wounds/burns.dm @@ -190,6 +190,7 @@ /// if someone is using ointment on our burns /datum/wound/burn/proc/ointment(obj/item/stack/medical/ointment/I, mob/user) user.visible_message(span_notice("[user] begins applying [I] to [victim]'s [limb.name]..."), span_notice("You begin applying [I] to [user == victim ? "your" : "[victim]'s"] [limb.name]...")) + playsound(I, pick(I.apply_sounds), 25) if(!do_after(user, (user == victim ? I.self_delay : I.other_delay), extra_checks = CALLBACK(src, .proc/still_exists))) return @@ -210,6 +211,7 @@ to_chat(user, span_warning("You need to open [I] first.")) return user.visible_message(span_notice("[user] begins wrapping [victim]'s [limb.name] with [I]..."), span_notice("You begin wrapping [user == victim ? "your" : "[victim]'s"] [limb.name] with [I]...")) + playsound(I, pick(I.apply_sounds), 25) if(!do_after(user, (user == victim ? I.self_delay : I.other_delay), victim, extra_checks = CALLBACK(src, .proc/still_exists))) return diff --git a/code/datums/wounds/pierce.dm b/code/datums/wounds/pierce.dm index 95b2dd3d18e7..2fd461b8a889 100644 --- a/code/datums/wounds/pierce.dm +++ b/code/datums/wounds/pierce.dm @@ -101,8 +101,11 @@ /datum/wound/pierce/proc/suture(obj/item/stack/medical/suture/I, mob/user) var/self_penalty_mult = (user == victim ? 1.4 : 1) user.visible_message(span_notice("[user] begins stitching [victim]'s [limb.name] with [I]..."), span_notice("You begin stitching [user == victim ? "your" : "[victim]'s"] [limb.name] with [I]...")) + playsound(I, pick(I.apply_sounds), 25) + if(!do_after(user, base_treat_time * self_penalty_mult * I.treatment_speed, victim, extra_checks = CALLBACK(src, .proc/still_exists))) return + user.visible_message(span_green("[user] stitches up some of the bleeding on [victim]."), span_green("You stitch up some of the bleeding on [user == victim ? "yourself" : "[victim]"].")) var/blood_sutured = I.stop_bleeding / self_penalty_mult blood_flow -= blood_sutured @@ -120,9 +123,12 @@ var/self_penalty_mult = (user == victim ? 1.5 : 1) // 50% longer and less effective if you do it to yourself user.visible_message(span_danger("[user] begins cauterizing [victim]'s [limb.name] with [I]..."), span_warning("You begin cauterizing [user == victim ? "your" : "[victim]'s"] [limb.name] with [I]...")) + playsound(I, 'sound/surgery/cautery1.ogg', 75, TRUE, falloff = 1) + if(!do_after(user, base_treat_time * self_penalty_mult * improv_penalty_mult, victim, extra_checks = CALLBACK(src, .proc/still_exists))) return - + + playsound(I, 'sound/surgery/cautery2.ogg', 75, TRUE, falloff = 1) user.visible_message(span_green("[user] cauterizes some of the bleeding on [victim]."), span_green("You cauterize some of the bleeding on [victim].")) limb.receive_damage(burn = 2 + severity, wound_bonus = CANT_WOUND) if(prob(30)) diff --git a/code/datums/wounds/slash.dm b/code/datums/wounds/slash.dm index fa06fe035266..95bdbdda51d7 100644 --- a/code/datums/wounds/slash.dm +++ b/code/datums/wounds/slash.dm @@ -195,8 +195,12 @@ /datum/wound/slash/proc/las_cauterize(obj/item/gun/energy/laser/lasgun, mob/user) var/self_penalty_mult = (user == victim ? 1.25 : 1) user.visible_message(span_warning("[user] begins aiming [lasgun] directly at [victim]'s [limb.name]..."), span_userdanger("You begin aiming [lasgun] directly at [user == victim ? "your" : "[victim]'s"] [limb.name]...")) + playsound(lasgun, 'sound/surgery/cautery1.ogg', 75, TRUE, falloff = 1) + if(!do_after(user, base_treat_time * self_penalty_mult, victim, extra_checks = CALLBACK(src, .proc/still_exists))) return + + playsound(lasgun, 'sound/surgery/cautery2.ogg', 75, TRUE, falloff = 1) var/damage = lasgun.chambered.BB.damage lasgun.chambered.BB.bare_wound_bonus = 0 lasgun.chambered.BB.wound_bonus -= 30 @@ -211,11 +215,13 @@ /datum/wound/slash/proc/tool_cauterize(obj/item/I, mob/user) var/improv_penalty_mult = (I.tool_behaviour == TOOL_CAUTERY ? 1 : 1.25) // 25% longer and less effective if you don't use a real cautery var/self_penalty_mult = (user == victim ? 1.5 : 1) // 50% longer and less effective if you do it to yourself - user.visible_message(span_danger("[user] begins cauterizing [victim]'s [limb.name] with [I]..."), span_warning("You begin cauterizing [user == victim ? "your" : "[victim]'s"] [limb.name] with [I]...")) + playsound(I, 'sound/surgery/cautery1.ogg', 75, TRUE, falloff = 1) + if(!do_after(user, base_treat_time * self_penalty_mult * improv_penalty_mult, victim, extra_checks = CALLBACK(src, .proc/still_exists))) return + playsound(I, 'sound/surgery/cautery2.ogg', 75, TRUE, falloff = 1) user.visible_message(span_green("[user] cauterizes some of the bleeding on [victim]."), span_green("You cauterize some of the bleeding on [victim].")) limb.receive_damage(burn = 2 + severity, wound_bonus = CANT_WOUND) if(prob(30)) @@ -232,9 +238,11 @@ /datum/wound/slash/proc/suture(obj/item/stack/medical/suture/I, mob/user) var/self_penalty_mult = (user == victim ? 1.4 : 1) user.visible_message(span_notice("[user] begins stitching [victim]'s [limb.name] with [I]..."), span_notice("You begin stitching [user == victim ? "your" : "[victim]'s"] [limb.name] with [I]...")) + playsound(I, pick(I.apply_sounds), 25) if(!do_after(user, base_treat_time * self_penalty_mult * I.treatment_speed, victim, extra_checks = CALLBACK(src, .proc/still_exists))) return + user.visible_message(span_green("[user] stitches up some of the bleeding on [victim]."), span_green("You stitch up some of the bleeding on [user == victim ? "yourself" : "[victim]"].")) var/blood_sutured = I.stop_bleeding / self_penalty_mult blood_flow -= blood_sutured diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 69929b66c9d1..c31bd20e18c1 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -146,7 +146,6 @@ GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our th C.appearance = chosen_prof.appearance_list[slot] C.name = chosen_prof.name_list[slot] C.flags_cover = chosen_prof.flags_cover_list[slot] - C.item_color = chosen_prof.item_color_list[slot] C.item_state = chosen_prof.item_state_list[slot] if(equip) user.equip_to_slot_or_del(C, GLOB.slot2slot[slot]) @@ -172,4 +171,4 @@ GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our th round_credits += "
" round_credits += ..() - return round_credits \ No newline at end of file + return round_credits diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm index a2cd924fa114..5e806bcc4beb 100644 --- a/code/game/gamemodes/clown_ops/clown_weapons.dm +++ b/code/game/gamemodes/clown_ops/clown_weapons.dm @@ -65,7 +65,7 @@ attack_verb_on = list("slipped") clumsy_check = FALSE sharpness = SHARP_NONE - item_color = "yellow" + saber_color = "yellow" heat = 0 light_color = "#ffff00" var/next_trombone_allowed = 0 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/cryopod.dm b/code/game/machinery/cryopod.dm index 731e13eb6886..5de9280cc0a4 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -378,7 +378,9 @@ GLOBAL_VAR_INIT(cryopods_enabled, FALSE) R.contents -= R.mmi qdel(R.mmi) - mob_occupant.ghostize(FALSE) + var/mob/dead/observer/ghost = mob_occupant.ghostize(FALSE) + if(ghost) + ghost.mind = null handle_objectives() QDEL_NULL(occupant) for(var/obj/item/I in get_turf(src)) diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index 86d8e41a9d61..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.") @@ -136,4 +136,4 @@ GLOBAL_LIST_EMPTY(doppler_arrays) /obj/machinery/doppler_array/research/science/Initialize() . = ..() - linked_techweb = SSresearch.science_tech \ No newline at end of file + linked_techweb = SSresearch.science_tech diff --git a/code/game/machinery/harvester.dm b/code/game/machinery/harvester.dm index 78111c409f8e..2b0a10a0bc17 100644 --- a/code/game/machinery/harvester.dm +++ b/code/game/machinery/harvester.dm @@ -99,17 +99,7 @@ if(!LAZYLEN(operation_order)) //The list is empty, so we're done here end_harvesting() return - var/turf/target - for(var/adir in list(EAST,NORTH,SOUTH,WEST)) - var/turf/T = get_step(src,adir) - if(!T) - continue - if(istype(T, /turf/closed)) - continue - target = T - break - if(!target) - target = get_turf(src) + var/turf/target = get_turf(src) for(var/obj/item/bodypart/BP in operation_order) //first we do non-essential limbs BP.drop_limb() C.emote("scream") @@ -144,6 +134,11 @@ return return FALSE +/obj/machinery/harvester/wrench_act(mob/living/user, obj/item/I) + . = ..() + if(default_change_direction_wrench(user, I)) + return TRUE + /obj/machinery/harvester/crowbar_act(mob/living/user, obj/item/I) if(default_pry_open(I)) return TRUE 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/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 030f98a503f1..f5be6a2e1645 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -1,3 +1,110 @@ +//dye registry, add dye colors and their resulting output here if you want the sprite to change instead of just the color. +GLOBAL_LIST_INIT(dye_registry, list( + DYE_REGISTRY_UNDER = list( + DYE_RED = /obj/item/clothing/under/color/red, + DYE_ORANGE = /obj/item/clothing/under/color/orange, + DYE_YELLOW = /obj/item/clothing/under/color/yellow, + DYE_GREEN = /obj/item/clothing/under/color/green, + DYE_BLUE = /obj/item/clothing/under/color/blue, + DYE_PURPLE = /obj/item/clothing/under/color/lightpurple, + DYE_BLACK = /obj/item/clothing/under/color/black, + DYE_WHITE = /obj/item/clothing/under/color/white, + DYE_RAINBOW = /obj/item/clothing/under/color/rainbow, + DYE_MIME = /obj/item/clothing/under/rank/mime, + DYE_CLOWN = /obj/item/clothing/under/rank/clown, + DYE_QM = /obj/item/clothing/under/rank/chief_medical_officer, + DYE_LAW = /obj/item/clothing/under/lawyer/blacksuit, + DYE_CAPTAIN = /obj/item/clothing/under/rank/captain, + DYE_HOP = /obj/item/clothing/under/rank/head_of_personnel, + DYE_HOS = /obj/item/clothing/under/rank/head_of_security, + DYE_CE = /obj/item/clothing/under/rank/chief_engineer, + DYE_RD = /obj/item/clothing/under/rank/research_director, + DYE_CMO = /obj/item/clothing/under/rank/chief_medical_officer, + DYE_REDCOAT = /obj/item/clothing/under/redcoat + ), + DYE_REGISTRY_JUMPSKIRT = list( + DYE_RED = /obj/item/clothing/under/skirt/color/red, + DYE_ORANGE = /obj/item/clothing/under/skirt/color/orange, + DYE_YELLOW = /obj/item/clothing/under/skirt/color/yellow, + DYE_GREEN = /obj/item/clothing/under/skirt/color/green, + DYE_BLUE = /obj/item/clothing/under/skirt/color/blue, + DYE_PURPLE = /obj/item/clothing/under/skirt/color/lightpurple, + DYE_BLACK = /obj/item/clothing/under/skirt/color/black, + DYE_WHITE = /obj/item/clothing/under/skirt/color/white + ), + DYE_REGISTRY_GLOVES = list( + DYE_RED = /obj/item/clothing/gloves/color/red, + DYE_ORANGE = /obj/item/clothing/gloves/color/orange, + DYE_YELLOW = /obj/item/clothing/gloves/color/yellow, + DYE_GREEN = /obj/item/clothing/gloves/color/green, + DYE_BLUE = /obj/item/clothing/gloves/color/blue, + DYE_PURPLE = /obj/item/clothing/gloves/color/purple, + DYE_BLACK = /obj/item/clothing/gloves/color/black, + DYE_WHITE = /obj/item/clothing/gloves/color/white, + DYE_RAINBOW = /obj/item/clothing/gloves/color/rainbow, + DYE_MIME = /obj/item/clothing/gloves/color/white, + DYE_CLOWN = /obj/item/clothing/gloves/color/rainbow, + DYE_QM = /obj/item/clothing/gloves/color/brown, + DYE_CAPTAIN = /obj/item/clothing/gloves/color/captain, + DYE_HOP = /obj/item/clothing/gloves/color/grey, + DYE_HOS = /obj/item/clothing/gloves/color/black, + DYE_CE = /obj/item/clothing/gloves/color/black, + DYE_RD = /obj/item/clothing/gloves/color/grey, + DYE_CMO = /obj/item/clothing/gloves/color/latex/nitrile, + DYE_REDCOAT = /obj/item/clothing/gloves/color/white + ), + DYE_REGISTRY_SNEAKERS = list( + DYE_RED = /obj/item/clothing/shoes/sneakers/red, + DYE_ORANGE = /obj/item/clothing/shoes/sneakers/orange, + DYE_YELLOW = /obj/item/clothing/shoes/sneakers/yellow, + DYE_GREEN = /obj/item/clothing/shoes/sneakers/green, + DYE_BLUE = /obj/item/clothing/shoes/sneakers/blue, + DYE_PURPLE = /obj/item/clothing/shoes/sneakers/purple, + DYE_BLACK = /obj/item/clothing/shoes/sneakers/black, + DYE_WHITE = /obj/item/clothing/shoes/sneakers/white, + DYE_RAINBOW = /obj/item/clothing/shoes/sneakers/rainbow, + DYE_MIME = /obj/item/clothing/shoes/sneakers/black, + DYE_QM = /obj/item/clothing/shoes/sneakers/brown, + DYE_CAPTAIN = /obj/item/clothing/shoes/sneakers/brown, + DYE_HOP = /obj/item/clothing/shoes/sneakers/brown, + DYE_CE = /obj/item/clothing/shoes/sneakers/brown, + DYE_RD = /obj/item/clothing/shoes/sneakers/brown, + DYE_CMO = /obj/item/clothing/shoes/sneakers/brown + ), + DYE_REGISTRY_FANNYPACK = list( + DYE_RED = /obj/item/storage/belt/fannypack/red, + DYE_ORANGE = /obj/item/storage/belt/fannypack/orange, + DYE_YELLOW = /obj/item/storage/belt/fannypack/yellow, + DYE_GREEN = /obj/item/storage/belt/fannypack/green, + DYE_BLUE = /obj/item/storage/belt/fannypack/blue, + DYE_PURPLE = /obj/item/storage/belt/fannypack/purple, + DYE_BLACK = /obj/item/storage/belt/fannypack/black, + DYE_WHITE = /obj/item/storage/belt/fannypack/white + ), + DYE_REGISTRY_BEDSHEET = list( + DYE_RED = /obj/item/bedsheet/red, + DYE_ORANGE = /obj/item/bedsheet/orange, + DYE_YELLOW = /obj/item/bedsheet/yellow, + DYE_GREEN = /obj/item/bedsheet/green, + DYE_BLUE = /obj/item/bedsheet/blue, + DYE_PURPLE = /obj/item/bedsheet/purple, + DYE_BLACK = /obj/item/bedsheet/black, + DYE_WHITE = /obj/item/bedsheet, + DYE_RAINBOW = /obj/item/bedsheet/rainbow, + DYE_MIME = /obj/item/bedsheet/mime, + DYE_CLOWN = /obj/item/bedsheet/clown, + DYE_QM = /obj/item/bedsheet/qm, + DYE_LAW = /obj/item/bedsheet/black, + DYE_CAPTAIN = /obj/item/bedsheet/captain, + DYE_HOP = /obj/item/bedsheet/hop, + DYE_HOS = /obj/item/bedsheet/hos, + DYE_CE = /obj/item/bedsheet/ce, + DYE_RD = /obj/item/bedsheet/rd, + DYE_CMO = /obj/item/bedsheet/cmo, + DYE_COSMIC = /obj/item/bedsheet/cosmos + ) +)) + /obj/machinery/washing_machine name = "washing machine" desc = "Gets rid of those pesky bloodstains, or your money back!" @@ -12,23 +119,18 @@ /obj/machinery/washing_machine/examine(mob/user) . = ..() - . += span_notice("Alt-click it to start a wash cycle.") + if(!busy) + . += span_notice("Alt-click it to start a wash cycle.") /obj/machinery/washing_machine/AltClick(mob/user) - if(!user.canUseTopic(src, !issilicon(user))) - return - - if(busy) + if(!user.canUseTopic(src, !issilicon(user)) || busy) return - if(state_open) to_chat(user, span_notice("Close the door first")) return - if(bloody_mess) to_chat(user, span_warning("[src] must be cleaned up first.")) return - busy = TRUE update_icon() addtimer(CALLBACK(src, .proc/wash_cycle), 200) @@ -71,6 +173,29 @@ color_source = null update_icon() +/obj/item/proc/dye_item(dye_color) + if(undyeable) + return FALSE + if(dying_key) + if(!GLOB.dye_registry[dying_key]) + log_runtime("Item just tried to be dyed with an invalid registry key: [dying_key]") + return FALSE + var/obj/item/target_type = GLOB.dye_registry[dying_key][dye_color] + if(target_type) + icon = initial(target_type.icon) + icon_state = initial(target_type.icon_state) + lefthand_file = initial(target_type.lefthand_file) + righthand_file = initial(target_type.righthand_file) + item_state = initial(target_type.item_state) + mob_overlay_icon = initial(target_type.mob_overlay_icon) + inhand_x_dimension = initial(target_type.inhand_x_dimension) + inhand_y_dimension = initial(target_type.inhand_y_dimension) + name = initial(target_type.name) + desc = "[initial(target_type.desc)] The colors look a little dodgy." + return target_type //successfully "appearance copy" dyed something; returns the target type as a hacky way of extending + add_atom_colour(dye_color, FIXED_COLOUR_PRIORITY) + return FALSE + //what happens to this object when washed inside a washing machine /atom/movable/proc/machine_wash(obj/machinery/washing_machine/WM) return @@ -83,137 +208,33 @@ new /obj/item/reagent_containers/food/snacks/meat/slab/corgi(loc) qdel(src) -/obj/item/paper/machine_wash(obj/machinery/washing_machine/WM) - if(WM.color_source) - if(istype(WM.color_source, /obj/item/toy/crayon)) - var/obj/item/toy/crayon/CR = WM.color_source - add_atom_colour(CR.paint_color, WASHABLE_COLOUR_PRIORITY) - else - if(istype(WM.color_source, /obj/item/reagent_containers/food/snacks/grown/rainbow_flower/)) - var/obj/item/reagent_containers/food/snacks/grown/rainbow_flower/RF = WM.color_source - add_atom_colour(RF.color, WASHABLE_COLOUR_PRIORITY) - /mob/living/simple_animal/pet/dog/corgi/machine_wash(obj/machinery/washing_machine/WM) WM.bloody_mess = TRUE gib() +/obj/item/machine_wash(obj/machinery/washing_machine/WM) + if(WM.color_source) + dye_item(WM.color_source.dye_color) + +/obj/item/clothing/under/dye_item(dye_color, dye_key) + . = ..() + if(.) + var/obj/item/clothing/under/U = . + can_adjust = initial(U.can_adjust) + if(!can_adjust && adjusted) //we deadjust the uniform if it's now unadjustable + toggle_jumpsuit_adjust() + /obj/item/clothing/under/machine_wash(obj/machinery/washing_machine/WM) freshly_laundered = TRUE addtimer(VARSET_CALLBACK(src, freshly_laundered, FALSE), 5 MINUTES, TIMER_UNIQUE | TIMER_OVERRIDE) - -/obj/item/clothing/under/color/machine_wash(obj/machinery/washing_machine/WM) - ..() - jumpsuit_wash(WM) - -/obj/item/clothing/under/rank/machine_wash(obj/machinery/washing_machine/WM) ..() - jumpsuit_wash(WM) - -/obj/item/clothing/under/proc/jumpsuit_wash(obj/machinery/washing_machine/WM) - - if(WM.color_source) - var/wash_color = WM.color_source.item_color - var/obj/item/clothing/under/U - for(var/T in typesof(/obj/item/clothing/under/color)) - var/obj/item/clothing/under/color/J = T - if(wash_color == initial(J.item_color)) - U = J - break - if(!U) - for(var/T in typesof(/obj/item/clothing/under/rank)) - var/obj/item/clothing/under/rank/R = T - if(wash_color == initial(R.item_color)) - U = R - break - if(U) - item_state = initial(U.item_state) - icon_state = initial(U.icon_state) - item_color = wash_color - name = initial(U.name) - dodgy_colours = TRUE - can_adjust = initial(U.can_adjust) - if(!can_adjust && adjusted) //we deadjust the uniform if it's now unadjustable - toggle_jumpsuit_adjust() - -//dyed clothing results// - -/obj/item/storage/belt/fannypack/machine_wash(obj/machinery/washing_machine/WM) - if(WM.color_source) - var/wash_color = WM.color_source.item_color - for(var/T in typesof(/obj/item/storage/belt/fannypack)) - var/obj/item/storage/belt/fannypack/FP = T - if(wash_color == initial(FP.item_color)) - item_state = initial(FP.item_state) - icon_state = initial(FP.icon_state) - item_color = wash_color - name = initial(FP.name) - desc = "The colors are a bit dodgy." - break - -/obj/item/clothing/gloves/color/machine_wash(obj/machinery/washing_machine/WM) - if(WM.color_source) - var/wash_color = WM.color_source.item_color - for(var/T in typesof(/obj/item/clothing/gloves/color)) - var/obj/item/clothing/gloves/color/G = T - if(wash_color == initial(G.item_color)) - item_state = initial(G.item_state) - icon_state = initial(G.icon_state) - item_color = wash_color - name = initial(G.name) - desc = "The colors are a bit dodgy." /obj/item/clothing/shoes/sneakers/machine_wash(obj/machinery/washing_machine/WM) if(chained) chained = 0 slowdown = SHOES_SLOWDOWN new /obj/item/restraints/handcuffs(loc) - if(WM.color_source) - var/wash_color = WM.color_source.item_color - for(var/T in typesof(/obj/item/clothing/shoes/sneakers)) - var/obj/item/clothing/shoes/sneakers/S = T - if(wash_color == initial(S.item_color)) - icon_state = initial(S.icon_state) - item_color = wash_color - name = initial(S.name) - desc = "The colors are a bit dodgy." - break - -/obj/item/bedsheet/machine_wash(obj/machinery/washing_machine/WM) - if(WM.color_source) - var/wash_color = WM.color_source.item_color - for(var/T in typesof(/obj/item/bedsheet)) - var/obj/item/bedsheet/B = T - if(wash_color == initial(B.item_color)) - icon_state = initial(B.icon_state) - item_color = wash_color - name = initial(B.name) - desc = "The colors are a bit dodgy." - break - -/obj/item/clothing/neck/scarf/machine_wash(obj/machinery/washing_machine/WM) - if(WM.color_source) - if(istype(WM.color_source, /obj/item/toy/crayon)) - var/obj/item/toy/crayon/CR = WM.color_source - add_atom_colour(CR.paint_color, WASHABLE_COLOUR_PRIORITY) - else - if(istype(WM.color_source, /obj/item/reagent_containers/food/snacks/grown/rainbow_flower/)) - var/obj/item/reagent_containers/food/snacks/grown/rainbow_flower/RF = WM.color_source - add_atom_colour(RF.color, WASHABLE_COLOUR_PRIORITY) - name = "dyed scarf" - desc = "The colors are a bit dodgy." - -/obj/item/clothing/head/beanie/machine_wash(obj/machinery/washing_machine/WM) - if(WM.color_source) - if(istype(WM.color_source, /obj/item/toy/crayon)) - var/obj/item/toy/crayon/CR = WM.color_source - add_atom_colour(CR.paint_color, WASHABLE_COLOUR_PRIORITY) - else - if(istype(WM.color_source, /obj/item/reagent_containers/food/snacks/grown/rainbow_flower/)) - var/obj/item/reagent_containers/food/snacks/grown/rainbow_flower/RF = WM.color_source - add_atom_colour(RF.color, WASHABLE_COLOUR_PRIORITY) - name = "dyed beanie" - desc = "The colors are a bit dodgy." - + ..() /obj/machinery/washing_machine/relaymove(mob/user) container_resist(user) @@ -223,8 +244,6 @@ add_fingerprint(user) open_machine() - - /obj/machinery/washing_machine/update_icon() cut_overlays() if(busy) @@ -249,21 +268,21 @@ if (!state_open) to_chat(user, span_warning("Open the door first!")) - return 1 + return TRUE if(bloody_mess) to_chat(user, span_warning("[src] must be cleaned up first.")) - return 1 + return TRUE if(contents.len >= max_wash_capacity) to_chat(user, span_warning("The washing machine is full!")) - return 1 + return TRUE if(!user.transferItemToLoc(W, src)) to_chat(user, span_warning("\The [W] is stuck to your hand, you cannot put it in the washing machine!")) - return 1 + return TRUE - if(istype(W, /obj/item/toy/crayon) || istype(W, /obj/item/stamp) || istype(W, /obj/item/reagent_containers/food/snacks/grown/rainbow_flower) || istype(W, /obj/item/stack/ore/bluespace_crystal)) + if(W.dye_color) color_source = W update_icon() diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index e9f151fc1748..c1e5fbb34288 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -1,20 +1,42 @@ -//separate dm since hydro is getting bloated already + +#define GLOWSHROOM_SPREAD_BASE_DIMINISH_FACTOR 10 +#define GLOWSHROOM_SPREAD_DIMINISH_FACTOR_PER_GLOWSHROOM 0.2 +#define GLOWSHROOM_BASE_INTEGRITY 60 + +GLOBAL_VAR_INIT(glowshrooms, 0) /obj/structure/glowshroom name = "glowshroom" desc = "Mycena Bregprox, a species of mushroom that glows in the dark." anchored = TRUE - opacity = 0 + opacity = FALSE density = FALSE icon = 'icons/obj/lighting.dmi' icon_state = "glowshroom" //replaced in New layer = ABOVE_NORMAL_TURF_LAYER - max_integrity = 30 - var/delay = 1200 + max_integrity = GLOWSHROOM_BASE_INTEGRITY + ///Cooldown for when next to try to spread. + COOLDOWN_DECLARE(spread_cooldown) + /// Min time interval between glowshroom "spreads" + var/min_delay_spread = 20 SECONDS + /// Max time interval between glowshroom "spreads" + var/max_delay_spread = 30 SECONDS + /// Boolean to indicate if the shroom is on the floor/wall var/floor = 0 + /// Mushroom generation number var/generation = 1 - var/spreadIntoAdjacentChance = 60 + /// Chance to spread into adjacent tiles (0-100) + var/spread_into_adjacent_chance = 75 + ///Amount of decay when decay happens on process. + var/idle_decay_min = 1 + ///Amount of decay when decay happens on process + var/idle_decay_max = 2 + ///Amount of percentage decay affects endurance.max_integrity = + var/endurance_decay_rate = 0.1 + /// Internal seed of the glowshroom, stats are stored here var/obj/item/seeds/myseed = /obj/item/seeds/glowshroom + + /// Turfs where the glowshroom cannot spread to var/static/list/blacklisted_glowshroom_turfs = typecacheof(list( /turf/open/lava, /turf/open/floor/plating/beach/water)) @@ -38,33 +60,33 @@ . = ..() . += "This is a [generation]\th generation [name]!" -/obj/structure/glowshroom/Destroy() - if(myseed) - QDEL_NULL(myseed) - return ..() +/** + * Creates a new glowshroom structure. + * + * Arguments: + * * newseed - Seed of the shroom + */ + -/obj/structure/glowshroom/New(loc, obj/item/seeds/newseed, mutate_stats) - ..() + +/obj/structure/glowshroom/Initialize(mapload, obj/item/seeds/newseed) + . = ..() + GLOB.glowshrooms++ if(newseed) - myseed = newseed.Copy() + myseed = newseed myseed.forceMove(src) else myseed = new myseed(src) - if(mutate_stats) //baby mushrooms have different stats :3 - myseed.adjust_potency(rand(-3,6)) - myseed.adjust_yield(rand(-1,2)) - myseed.adjust_production(rand(-3,6)) - myseed.adjust_endurance(rand(-3,6)) - delay = delay - myseed.production * 100 //So the delay goes DOWN with better stats instead of up. :I - obj_integrity = myseed.endurance - max_integrity = myseed.endurance + + modify_max_integrity(GLOWSHROOM_BASE_INTEGRITY + ((100 - GLOWSHROOM_BASE_INTEGRITY) / 100 * myseed.endurance)) //goes up to 100 with peak endurance + var/datum/plant_gene/trait/glow/G = myseed.get_gene(/datum/plant_gene/trait/glow) if(ispath(G)) // Seeds were ported to initialize so their genes are still typepaths here, luckily their initializer is smart enough to handle us doing this myseed.genes -= G G = new G myseed.genes += G set_light(G.glow_range(myseed), G.glow_power(myseed), G.glow_color) - setDir(CalcDir()) + setDir(calc_dir()) var/base_icon_state = initial(icon_state) if(!floor) switch(dir) //offset to make it be on the wall rather than on the floor @@ -80,62 +102,92 @@ else //if on the floor, glowshroom on-floor sprite icon_state = base_icon_state - addtimer(CALLBACK(src, .proc/Spread), delay) + COOLDOWN_START(src, spread_cooldown, rand(min_delay_spread, max_delay_spread)) + + START_PROCESSING(SSobj, src) + +/obj/structure/glowshroom/Destroy() + . = ..() + GLOB.glowshrooms-- + STOP_PROCESSING(SSobj, src) + +/** + * Causes glowshroom spreading across the floor/walls. + */ + +/obj/structure/glowshroom/process(delta_time) + if(COOLDOWN_FINISHED(src, spread_cooldown)) + COOLDOWN_START(src, spread_cooldown, rand(min_delay_spread, max_delay_spread)) + Spread() + + Decay(rand(idle_decay_min, idle_decay_max) * delta_time) + + /obj/structure/glowshroom/proc/Spread() var/turf/ownturf = get_turf(src) - var/shrooms_planted = 0 + if(!TURF_SHARES(ownturf)) //If we are in a 1x1 room + return //Deal with it not now + + var/list/possible_locs = list() + //Lets collect a list of possible viewable turfs BEFORE we iterate for yield so we don't call view multiple + //times when there's no real chance of the viewable range changing, really you could do this once on item + //spawn and most people probably would not notice. + for(var/turf/open/floor/earth in oview(2,src)) + if(is_type_in_typecache(earth, blacklisted_glowshroom_turfs)) + continue + if(!TURF_SHARES(earth)) + continue + possible_locs += earth + + //Lets not even try to spawn again if somehow we have ZERO possible locations + if(!possible_locs.len) + return + + var/chance_generation = 100 * (NUM_E ** -((GLOWSHROOM_SPREAD_BASE_DIMINISH_FACTOR + GLOWSHROOM_SPREAD_DIMINISH_FACTOR_PER_GLOWSHROOM * GLOB.glowshrooms) / myseed.potency * (generation - 1))) //https://www.desmos.com/calculator/istvjvcelz + for(var/i in 1 to myseed.yield) - if(prob(1/(generation * generation) * 100))//This formula gives you diminishing returns based on generation. 100% with 1st gen, decreasing to 25%, 11%, 6, 4, 2... - var/list/possibleLocs = list() - var/spreadsIntoAdjacent = FALSE - - if(prob(spreadIntoAdjacentChance)) - spreadsIntoAdjacent = TRUE - - for(var/turf/open/floor/earth in view(3,src)) - if(is_type_in_typecache(earth, blacklisted_glowshroom_turfs)) - continue - if(!ownturf.CanAtmosPass(earth)) - continue - if(spreadsIntoAdjacent || !locate(/obj/structure/glowshroom) in view(1,earth)) - possibleLocs += earth - CHECK_TICK - - if(!possibleLocs.len) + if(!prob(chance_generation)) + continue + var/spreads_into_adjacent = prob(spread_into_adjacent_chance) + var/turf/new_loc = null + + //Try three random locations to spawn before giving up tradeoff + //between running view(1, earth) on every single collected possibleLoc + //and failing to spread if we get 3 bad picks, which should only be a problem + //if there's a lot of glow shroom clustered about + for(var/iterator in 1 to 3) + var/turf/possibleLoc = pick(possible_locs) + if(spreads_into_adjacent || !locate(/obj/structure/glowshroom) in view(1,possibleLoc)) + new_loc = possibleLoc break - var/turf/newLoc = pick(possibleLocs) + //We failed to find any location, skip trying to yield + if(new_loc == null) + break - var/shroomCount = 0 //hacky - var/placeCount = 1 - for(var/obj/structure/glowshroom/shroom in newLoc) - shroomCount++ - for(var/wallDir in GLOB.cardinals) - var/turf/isWall = get_step(newLoc,wallDir) - if(isWall.density) - placeCount++ - if(shroomCount >= placeCount) - continue - var/obj/structure/glowshroom/child = new type(newLoc, myseed, TRUE) - child.generation = generation + 1 - shrooms_planted++ + var/shroom_count = 0 + var/place_count = 1 + for(var/obj/structure/glowshroom/shroom in new_loc) + shroom_count++ + for(var/wall_dir in GLOB.cardinals) + var/turf/potential_wall = get_step(new_loc,wall_dir) + if(potential_wall.density) + place_count++ + if(shroom_count >= place_count) + continue - CHECK_TICK - else - shrooms_planted++ //if we failed due to generation, don't try to plant one later - if(shrooms_planted < myseed.yield) //if we didn't get all possible shrooms planted, try again later - myseed.yield -= shrooms_planted - addtimer(CALLBACK(src, .proc/Spread), delay) + var/obj/structure/glowshroom/child = new type(new_loc, myseed.Copy()) + child.generation = generation + 1 -/obj/structure/glowshroom/proc/CalcDir(turf/location = loc) +/obj/structure/glowshroom/proc/calc_dir(turf/location = loc) var/direction = 16 - for(var/wallDir in GLOB.cardinals) - var/turf/newTurf = get_step(location,wallDir) - if(newTurf.density) - direction |= wallDir + for(var/wall_dir in GLOB.cardinals) + var/turf/new_turf = get_step(location,wall_dir) + if(new_turf.density) + direction |= wall_dir for(var/obj/structure/glowshroom/shroom in location) if(shroom == src) @@ -145,33 +197,60 @@ else direction &= ~shroom.dir - var/list/dirList = list() + var/list/dir_list = list() for(var/i=1,i<=16,i <<= 1) if(direction & i) - dirList += i + dir_list += i - if(dirList.len) - var/newDir = pick(dirList) - if(newDir == 16) + if(dir_list.len) + var/new_dir = pick(dir_list) + if(new_dir == 16) floor = 1 - newDir = 1 - return newDir + new_dir = 1 + return new_dir floor = 1 return 1 +/** + * Causes the glowshroom to decay by decreasing its endurance, destroying it when it gets too low. + * + * Arguments: + * * amount - Amount of endurance to be reduced due to spread decay. + */ +/obj/structure/glowshroom/proc/Decay(amount) + myseed.adjust_endurance(-amount * endurance_decay_rate) + take_damage(amount) + if (myseed.endurance <= 10) // Plant is gone + qdel(src) + /obj/structure/glowshroom/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) if(damage_type == BURN && damage_amount) - playsound(src.loc, 'sound/items/welder.ogg', 100, 1) + playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) -/obj/structure/glowshroom/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > 300) - take_damage(5, BURN, 0, 0) /obj/structure/glowshroom/acid_act(acidpwr, acid_volume) - . = 1 visible_message(span_danger("[src] melts away!")) var/obj/effect/decal/cleanable/molten_object/I = new (get_turf(src)) I.desc = "Looks like this was \an [src] some time ago." qdel(src) + return TRUE + +/obj/structure/glowshroom/extreme/Initialize(mapload, obj/item/seeds/newseed) + . = ..() + if(generation == 1) + myseed.potency = 100 + myseed.endurance = 100 + myseed.yield = 10 + +/obj/structure/glowshroom/medium/Initialize(mapload, obj/item/seeds/newseed) + . = ..() + if(generation == 1) + myseed.potency = 50 + myseed.endurance = 50 + myseed.yield = 5 + +#undef GLOWSHROOM_SPREAD_BASE_DIMINISH_FACTOR +#undef GLOWSHROOM_SPREAD_DIMINISH_FACTOR_PER_GLOWSHROOM +#undef GLOWSHROOM_BASE_INTEGRITY diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index da14f1ca0d32..0a17ec74325a 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -224,7 +224,7 @@ name = "pirate hat or bandana spawner" loot = list( /obj/item/clothing/head/pirate = 1, - /obj/item/clothing/head/bandana = 1) + /obj/item/clothing/head/pirate/bandana = 1) /obj/effect/spawner/lootdrop/minor/twentyfive_percent_cyborg_mask name = "25% cyborg mask spawner" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 00a77dccffd0..da76aef280f6 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -8,10 +8,19 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) name = "item" icon = 'icons/obj/misc.dmi' blocks_emissive = EMISSIVE_BLOCK_GENERIC + ///icon state name for inhand overlays var/item_state = null + ///Icon file for left hand inhand overlays var/lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + ///Icon file for right inhand overlays var/righthand_file = 'icons/mob/inhands/items_righthand.dmi' + ///Icon file for mob worn overlays. + ///no var for state because it should *always* be the same as icon_state + var/icon/mob_overlay_icon + //Forced mob worn layer instead of the standard preferred ssize. + var/alternate_worn_layer + //Dimensions of the icon file used when this item is worn, eg: hats.dmi //eg: 32x32 sprite, 64x64 sprite, etc. //allows inhands/worn sprites to be of any size, but still centered on a mob properly @@ -21,10 +30,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) var/inhand_x_dimension = 32 var/inhand_y_dimension = 32 - //Not on /clothing because for some reason any /obj/item can technically be "worn" with enough fuckery. - var/icon/alternate_worn_icon = null//If this is set, update_icons() will find on mob (WORN, NOT INHANDS) states in this file instead, primary use: badminnery/events - var/alternate_worn_layer = null//If this is set, update_icons() will force the on mob state (WORN, NOT INHANDS) onto this layer, instead of it's default - max_integrity = 200 obj_flags = NONE @@ -62,8 +67,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) var/interaction_flags_item = INTERACT_ITEM_ATTACK_HAND_PICKUP - var/item_color = null //this needs deprecating, soonish - var/body_parts_covered = 0 //see setup.dm for appropriate bit flags var/gas_transfer_coefficient = 1 // for leaking gas from turf to mask and vice-versa (for masks right now, but at some point, i'd like to include space helmets) var/permeability_coefficient = 1 // for chemicals/diseases @@ -116,6 +119,13 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) var/trigger_guard = TRIGGER_GUARD_NONE + ///Used as the dye color source in the washing machine only (at the moment). Can be a hex color or a key corresponding to a registry entry, see washing_machine.dm + var/dye_color + ///Whether the item is unaffected by standard dying. + var/undyeable = FALSE + ///What dye registry should be looked at when dying this item; see washing_machine.dm + var/dying_key + //Grinder vars var/list/grind_results //A reagent list containing the reagents this item produces when ground up in a grinder - this can be an empty list to allow for reagent transferring only var/list/juice_results //A reagent list containing blah blah... but when JUICED in a grinder! @@ -878,6 +888,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) if(ismob(loc)) var/mob/mob_loc = loc mob_loc.regenerate_icons() + /** * Called when this object is first embedded into a carbon */ diff --git a/code/game/objects/items/RCL.dm b/code/game/objects/items/RCL.dm index 458fd4f5f981..da0e1b9891fb 100644 --- a/code/game/objects/items/RCL.dm +++ b/code/game/objects/items/RCL.dm @@ -190,7 +190,7 @@ return //If we've run out, display message and exit else last = null - loaded.item_color = colors[current_color_index] + loaded.color = colors[current_color_index] last = loaded.place_turf(get_turf(src), user, turn(user.dir, 180)) is_empty(user) //If we've run out, display message update_icon() @@ -266,7 +266,7 @@ if(T.intact || !T.can_have_cabling()) return - loaded.item_color = colors[current_color_index] + loaded.color = colors[current_color_index] var/obj/structure/cable/linkingCable = findLinkingCable(user) if(linkingCable) @@ -300,7 +300,7 @@ var/cwname = colors[current_color_index] to_chat(user, "Color changed to [cwname]!") if(loaded) - loaded.item_color= colors[current_color_index] + loaded.color = colors[current_color_index] if(wiring_gui_menu) wiringGuiUpdate(user) else if(istype(action, /datum/action/item_action/rcl_gui)) diff --git a/code/game/objects/items/RSF.dm b/code/game/objects/items/RSF.dm index f7972e3aeb15..54083c27b8f4 100644 --- a/code/game/objects/items/RSF.dm +++ b/code/game/objects/items/RSF.dm @@ -29,6 +29,7 @@ RSF /obj/item/storage/pill_bottle/dice = 200, /obj/item/pen = 50, /obj/item/clothing/mask/cigarette = 10, + /obj/item/plate = 25, ) var/list/allowed_surfaces = list(/obj/structure/table) ///A list of surfaces that we are allowed to place things on. var/action_type = "Dispensing" ///The verb that describes what we're doing, for use in text diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index bf9e6ab616d7..32ee802d8443 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -352,6 +352,8 @@ /obj/item/circuitboard/computer/rdconsole/attackby(obj/item/I, mob/user, params) if(I.tool_behaviour == TOOL_SCREWDRIVER) + if(build_path == /obj/machinery/computer/rdconsole/production) + return if(build_path == /obj/machinery/computer/rdconsole/core) name = "R&D Console - Robotics (Computer Board)" build_path = /obj/machinery/computer/rdconsole/robotics diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index f69e5f72c2aa..13fff3cb5fd8 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -26,7 +26,7 @@ var/icon_uncapped var/use_overlays = FALSE - item_color = "red" + var/crayon_color = "red" w_class = WEIGHT_CLASS_TINY attack_verb = list("attacked", "coloured") grind_results = list() @@ -80,7 +80,9 @@ . = ..() // Makes crayons identifiable in things like grinders if(name == "crayon") - name = "[item_color] crayon" + name = "[crayon_color] crayon" + + dye_color = crayon_color drawtype = pick(all_drawables) @@ -262,12 +264,8 @@ var/mob/living/carbon/human/H = user if (HAS_TRAIT(H, TRAIT_TAGGER)) cost *= 0.5 - /* yogs start -- moved to the end of the proc, after the crayon is actually used. - var/charges_used = use_charges(user, cost) - if(!charges_used) + if(check_empty(user, cost)) return - . = charges_used - yogs end */ if(istype(target, /obj/effect/decal/cleanable)) target = target.loc @@ -352,6 +350,11 @@ if(!instant) if(!do_after(user, 5 SECONDS, target)) return + + var/charges_used = use_charges(user, cost) + if(!charges_used) + return + . = charges_used if(length(text_buffer)) drawing = text_buffer[1] @@ -397,12 +400,6 @@ if(post_noise) audible_message(span_notice("You hear spraying.")) playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5) - // yogs start -- using changes moved to the end of the proc, so it won't use charges if the spraying fails for any reason. - var/charges_used = use_charges(user, cost) - if(!charges_used) - return - . = charges_used - // yogs end var/fraction = min(1, . / reagents.maximum_volume) if(affected_turfs.len) fraction /= affected_turfs.len @@ -427,67 +424,77 @@ /obj/item/toy/crayon/red icon_state = "crayonred" paint_color = "#DA0000" - item_color = "red" + crayon_color = "red" reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/red = 1) + dye_color = DYE_RED /obj/item/toy/crayon/orange icon_state = "crayonorange" paint_color = "#FF9300" - item_color = "orange" + crayon_color = "orange" reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/orange = 1) + dye_color = DYE_ORANGE /obj/item/toy/crayon/yellow icon_state = "crayonyellow" paint_color = "#FFF200" - item_color = "yellow" + crayon_color = "yellow" reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/yellow = 1) + dye_color = DYE_YELLOW /obj/item/toy/crayon/green icon_state = "crayongreen" paint_color = "#A8E61D" - item_color = "green" + crayon_color = "green" reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/green = 1) + dye_color = DYE_GREEN /obj/item/toy/crayon/blue icon_state = "crayonblue" paint_color = "#00B7EF" - item_color = "blue" + crayon_color = "blue" reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/blue = 1) + dye_color = DYE_BLUE /obj/item/toy/crayon/purple icon_state = "crayonpurple" paint_color = "#DA00FF" - item_color = "purple" + crayon_color = "purple" reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/purple = 1) + dye_color = DYE_PURPLE /obj/item/toy/crayon/black icon_state = "crayonblack" paint_color = "#1C1C1C" //Not completely black because total black looks bad. So Mostly Black. - item_color = "black" + crayon_color = "black" reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/black = 1) + dye_color = DYE_BLACK /obj/item/toy/crayon/white icon_state = "crayonwhite" paint_color = "#FFFFFF" - item_color = "white" + crayon_color = "white" reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/white = 1) + dye_color = DYE_WHITE /obj/item/toy/crayon/mime icon_state = "crayonmime" desc = "A very sad-looking crayon." paint_color = "#FFFFFF" - item_color = "mime" + crayon_color = "mime" reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/invisible = 1) charges = -1 + dye_color = DYE_MIME /obj/item/toy/crayon/rainbow icon_state = "crayonrainbow" paint_color = "#FFF000" - item_color = "rainbow" + crayon_color = "rainbow" reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent = 1) drawtype = RANDOM_ANY // just the default starter. charges = -1 + dye_color = DYE_RAINBOW /obj/item/toy/crayon/rainbow/afterattack(atom/target, mob/user, proximity, params) paint_color = rgb(rand(0,255), rand(0,255), rand(0,255)) @@ -523,12 +530,12 @@ /obj/item/storage/crayons/update_icon() cut_overlays() for(var/obj/item/toy/crayon/crayon in contents) - add_overlay(mutable_appearance('icons/obj/crayons.dmi', crayon.item_color)) + add_overlay(mutable_appearance('icons/obj/crayons.dmi', crayon.crayon_color)) /obj/item/storage/crayons/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/toy/crayon)) var/obj/item/toy/crayon/C = W - switch(C.item_color) + switch(C.crayon_color) if("mime") to_chat(usr, "This crayon is too sad to be contained in this box.") return 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/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index df8189300b4b..0bd89342e677 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -91,6 +91,7 @@ GLOBAL_LIST_EMPTY(PDAs) var/overlays_x_offset = 0 //x offset to use for certain overlays var/underline_flag = TRUE //flag for underline + var/beep_cooldown = 0 /obj/item/pda/suicide_act(mob/living/carbon/user) var/deathMessage = msg_input(user) @@ -1025,6 +1026,9 @@ GLOBAL_LIST_EMPTY(PDAs) switch(scanmode) if(PDA_SCANNER_MEDICAL) + if(beep_cooldown < world.time) + playsound(src, 'sound/effects/fastbeep.ogg', 20) + beep_cooldown = world.time + 40 C.visible_message(span_alert("[user] has analyzed [C]'s vitals!")) healthscan(user, C, 1) add_fingerprint(user) diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 24f20ceda78c..48b372487724 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -82,6 +82,9 @@ effective or pretty fucking useless. if(!irradiate || !is_syndicate(user)) // only syndicates are aware of this being a rad laser and know how to use it. return if(!used) + if(beep_cooldown < world.time) + playsound(src, 'sound/effects/fastbeep.ogg', 20) + beep_cooldown = world.time + 40 log_combat(user, M, "irradiated", src) var/cooldown = get_cooldown() used = TRUE diff --git a/code/game/objects/items/documents.dm b/code/game/objects/items/documents.dm index ccf94f34b4b7..d39186f4e327 100644 --- a/code/game/objects/items/documents.dm +++ b/code/game/objects/items/documents.dm @@ -51,8 +51,8 @@ to_chat(user, span_warning("You have already forged a seal on [src]!")) else var/obj/item/toy/crayon/C = O - name = "[C.item_color] secret documents" - icon_state = "docs_[C.item_color]" - forgedseal = C.item_color - to_chat(user, span_notice("You forge the official seal with a [C.item_color] crayon. No one will notice... right?")) - update_icon() \ No newline at end of file + name = "[C.crayon_color] secret documents" + icon_state = "docs_[C.crayon_color]" + forgedseal = C.crayon_color + to_chat(user, span_notice("You forge the official seal with a [C.crayon_color] crayon. No one will notice... right?")) + update_icon() diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index 69fa372d66cf..498fe1ae8d01 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -1,6 +1,7 @@ /obj/item/restraints icon = 'icons/obj/handcuffs.dmi' breakouttime = 600 + mob_overlay_icon = 'icons/mob/restraints.dmi' var/break_strength = 2 // Minimum strength required for a holopara to break it /obj/item/restraints/suicide_act(mob/living/carbon/user) @@ -27,6 +28,7 @@ desc = "Use this to keep prisoners in line." gender = PLURAL icon_state = "handcuff" + item_state = "handcuff" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' flags_1 = CONDUCT_1 @@ -104,18 +106,14 @@ desc = "A pair of restraints fashioned from long strands of flesh." icon = 'icons/obj/mining.dmi' icon_state = "sinewcuff" - item_state = "sinewcuff" materials = null - item_color = "white" - color = "#000000" + color = null /obj/item/restraints/handcuffs/cable name = "cable restraints" desc = "Looks like some cables tied together. Could be used to tie something up." - icon_state = "cuff" - item_state = "coil" - item_color = "red" - color = "#ff0000" + icon_state = "zipties" + item_state = "zipties" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' materials = list(/datum/material/iron=150, /datum/material/glass=75) @@ -123,49 +121,29 @@ break_strength = 2 cuffsound = 'sound/weapons/cablecuff.ogg' -/obj/item/restraints/handcuffs/cable/Initialize(mapload, param_color) - . = ..() - - var/list/cable_colors = GLOB.cable_colors - item_color = param_color || item_color || pick(cable_colors) - if(cable_colors[item_color]) - item_color = cable_colors[item_color] - update_icon() - -/obj/item/restraints/handcuffs/cable/update_icon() - color = null - add_atom_colour(item_color, FIXED_COLOUR_PRIORITY) - /obj/item/restraints/handcuffs/cable/red - item_color = "red" color = "#ff0000" /obj/item/restraints/handcuffs/cable/yellow - item_color = "yellow" color = "#ffff00" /obj/item/restraints/handcuffs/cable/blue - item_color = "blue" color = "#1919c8" /obj/item/restraints/handcuffs/cable/green - item_color = "green" color = "#00aa00" /obj/item/restraints/handcuffs/cable/pink - item_color = "pink" color = "#ff3ccd" /obj/item/restraints/handcuffs/cable/orange - item_color = "orange" color = "#ff8000" /obj/item/restraints/handcuffs/cable/cyan - item_color = "cyan" color = "#00ffff" /obj/item/restraints/handcuffs/cable/white - item_color = "white" + color = null /obj/item/restraints/handcuffs/alien icon_state = "handcuffAlien" @@ -210,19 +188,17 @@ /obj/item/restraints/handcuffs/cable/zipties name = "zipties" desc = "Plastic, disposable zipties that can be used to restrain temporarily but are destroyed after use." - icon_state = "cuff" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' materials = list() breakouttime = 450 //Deciseconds = 45s trashtype = /obj/item/restraints/handcuffs/cable/zipties/used - item_color = "white" + color = null break_strength = 3 /obj/item/restraints/handcuffs/cable/zipties/used desc = "A pair of broken zipties." - icon_state = "cuff_used" - item_state = "cuff" + icon_state = "zipties_used" /obj/item/restraints/handcuffs/cable/zipties/used/attack() return @@ -234,6 +210,7 @@ desc = "Use this to keep prisoners in line." gender = PLURAL icon_state = "handcuff" + item_state = "legcuff" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' flags_1 = CONDUCT_1 diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm index 7f36c23ab028..f729e0a393ff 100644 --- a/code/game/objects/items/holy_weapons.dm +++ b/code/game/objects/items/holy_weapons.dm @@ -134,7 +134,7 @@ /obj/item/clothing/head/helmet/chaplain/cage name = "cage" desc = "A cage that restrains the will of the self, allowing one to see the profane world for what it is." - alternate_worn_icon = 'icons/mob/large-worn-icons/64x64/head.dmi' + mob_overlay_icon = 'icons/mob/large-worn-icons/64x64/head.dmi' icon_state = "cage" item_state = "cage" worn_x_dimension = 64 diff --git a/code/game/objects/items/implants/implant.dm b/code/game/objects/items/implants/implant.dm index 182a674bcce5..fd79c112c9b1 100644 --- a/code/game/objects/items/implants/implant.dm +++ b/code/game/objects/items/implants/implant.dm @@ -5,7 +5,7 @@ actions_types = list(/datum/action/item_action/hands_free/activate) var/activated = TRUE //1 for implant types that can be activated, 0 for ones that are "always on" like mindshield implants var/mob/living/imp_in = null - item_color = "b" + var/implant_color = "b" var/allow_multiple = FALSE var/uses = -1 item_flags = DROPDEL diff --git a/code/game/objects/items/implants/implant_freedom.dm b/code/game/objects/items/implants/implant_freedom.dm index f3e66d2c08b7..280fbb7cd33a 100644 --- a/code/game/objects/items/implants/implant_freedom.dm +++ b/code/game/objects/items/implants/implant_freedom.dm @@ -2,7 +2,7 @@ name = "freedom implant" desc = "Use this to escape from those evil Red Shirts." icon_state = "freedom" - item_color = "r" + implant_color = "r" uses = 4 diff --git a/code/game/objects/items/implants/implant_storage.dm b/code/game/objects/items/implants/implant_storage.dm index 84c23f875f30..c0f1a7af7540 100644 --- a/code/game/objects/items/implants/implant_storage.dm +++ b/code/game/objects/items/implants/implant_storage.dm @@ -2,7 +2,7 @@ name = "storage implant" desc = "Stores up to two big items in a bluespace pocket." icon_state = "storage" - item_color = "r" + implant_color = "r" var/max_slot_stacking = 4 /obj/item/implant/storage/activate() diff --git a/code/game/objects/items/implants/implantcase.dm b/code/game/objects/items/implants/implantcase.dm index 25c3a12cda61..17db84ab385e 100644 --- a/code/game/objects/items/implants/implantcase.dm +++ b/code/game/objects/items/implants/implantcase.dm @@ -16,7 +16,7 @@ /obj/item/implantcase/update_icon() if(imp) - icon_state = "implantcase-[imp.item_color]" + icon_state = "implantcase-[imp.implant_color]" reagents = imp.reagents else icon_state = "implantcase-0" diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index f9dbc90fef4f..dd54d5b450d1 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -106,7 +106,9 @@ AddComponent(/datum/component/butchering, 80 - force, 100, force - 10) //bonus chance increases depending on force /obj/item/kitchen/knife/attack(mob/living/carbon/M, mob/living/carbon/user) - if(user.zone_selected == BODY_ZONE_PRECISE_EYES) + if(!user.a_intent == INTENT_HARM && attempt_initiate_surgery(src, M, user)) + return + else if(user.zone_selected == BODY_ZONE_PRECISE_EYES) if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50)) M = user return eyestab(M,user) diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index ab91c4d90f4c..4d4c49230a00 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -6,6 +6,7 @@ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30) resistance_flags = FIRE_PROOF var/brightness_on = 3 + var/saber_color = null /obj/item/melee/transforming/energy/Initialize() . = ..() @@ -36,8 +37,8 @@ . = ..() if(.) if(active) - if(item_color) - icon_state = "sword[item_color]" + if(saber_color) + icon_state = "sword[saber_color]" START_PROCESSING(SSobj, src) set_light(brightness_on) else @@ -101,11 +102,12 @@ embedding = list("embed_chance" = 75, "embedded_impact_pain_multiplier" = 10) armour_penetration = 35 block_chance = 50 + saber_color = "green" /obj/item/melee/transforming/energy/sword/transform_weapon(mob/living/user, supress_message_text) . = ..() - if(. && active && item_color) - icon_state = "sword[item_color]" + if(. && active && saber_color) + icon_state = "sword[saber_color]" /obj/item/melee/transforming/energy/sword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) if(active) @@ -113,7 +115,7 @@ return 0 /obj/item/melee/transforming/energy/sword/cyborg - item_color = "red" + saber_color = "red" var/hitcost = 50 /obj/item/melee/transforming/energy/sword/cyborg/attack(mob/M, var/mob/living/silicon/robot/R) @@ -134,7 +136,7 @@ icon = 'icons/obj/surgery.dmi' icon_state = "esaw_0" icon_state_on = "esaw_1" - item_color = null //stops icon from breaking when turned on. + saber_color = null //stops icon from breaking when turned on. hitcost = 75 //Costs more than a standard cyborg esword w_class = WEIGHT_CLASS_NORMAL sharpness = SHARP_EDGED @@ -157,7 +159,7 @@ . = ..() if(LAZYLEN(possible_colors)) var/set_color = pick(possible_colors) - item_color = set_color + saber_color = set_color light_color = possible_colors[set_color] /obj/item/melee/transforming/energy/sword/saber/process() @@ -183,7 +185,7 @@ if(W.tool_behaviour == TOOL_MULTITOOL) if(!hacked) hacked = TRUE - item_color = "rainbow" + saber_color = "rainbow" to_chat(user, span_warning("RNBW_ENGAGE")) if(active) diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 15835611af2f..fbadae796073 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -64,15 +64,18 @@ /obj/item/melee/cutlass name = "cutlass" - desc = "A true pirates weapon, seems somewhat dull though" + desc = "YAAAAAR! A fine weapon for a pirate, fit for slicing land-lubbers." //All pirate weapons must have pirate quips from now on it is non-negotiable icon = 'icons/obj/weapons/swords.dmi' icon_state = "metalcutlass" item_state = "metalcutlass" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - force = 16 - throwforce = 5 - w_class = WEIGHT_CLASS_BULKY + slot_flags = ITEM_SLOT_BELT + force = 18 + throwforce = 10 + w_class = WEIGHT_CLASS_HUGE + block_chance = 30 + sharpness = SHARP_EDGED attack_verb = list("slashed", "cut") hitsound = 'sound/weapons/rapierhit.ogg' materials = list(/datum/material/iron = 1000) diff --git a/code/game/objects/items/paint.dm b/code/game/objects/items/paint.dm index 8f79ec14bd66..b1b5124b2827 100644 --- a/code/game/objects/items/paint.dm +++ b/code/game/objects/items/paint.dm @@ -7,7 +7,7 @@ desc = "Used to recolor floors and walls. Can be removed by the janitor." icon = 'icons/obj/artstuff.dmi' icon_state = "paint_neutral" - item_color = "FFFFFF" + var/paint_color = "FFFFFF" item_state = "paintcan" w_class = WEIGHT_CLASS_NORMAL resistance_flags = FLAMMABLE @@ -16,37 +16,37 @@ /obj/item/paint/red name = "red paint" - item_color = "C73232" //"FF0000" + paint_color = "C73232" //"FF0000" icon_state = "paint_red" /obj/item/paint/green name = "green paint" - item_color = "2A9C3B" //"00FF00" + paint_color = "2A9C3B" //"00FF00" icon_state = "paint_green" /obj/item/paint/blue name = "blue paint" - item_color = "5998FF" //"0000FF" + paint_color = "5998FF" //"0000FF" icon_state = "paint_blue" /obj/item/paint/yellow name = "yellow paint" - item_color = "CFB52B" //"FFFF00" + paint_color = "CFB52B" //"FFFF00" icon_state = "paint_yellow" /obj/item/paint/violet name = "violet paint" - item_color = "AE4CCD" //"FF00FF" + paint_color = "AE4CCD" //"FF00FF" icon_state = "paint_violet" /obj/item/paint/black name = "black paint" - item_color = "333333" + paint_color = "333333" icon_state = "paint_black" /obj/item/paint/white name = "white paint" - item_color = "FFFFFF" + paint_color = "FFFFFF" icon_state = "paint_white" @@ -61,19 +61,19 @@ return switch(t1) if("red") - item_color = "C73232" + paint_color = "C73232" if("blue") - item_color = "5998FF" + paint_color = "5998FF" if("green") - item_color = "2A9C3B" + paint_color = "2A9C3B" if("yellow") - item_color = "CFB52B" + paint_color = "CFB52B" if("violet") - item_color = "AE4CCD" + paint_color = "AE4CCD" if("white") - item_color = "FFFFFF" + paint_color = "FFFFFF" if("black") - item_color = "333333" + paint_color = "333333" icon_state = "paint_[t1]" add_fingerprint(user) @@ -87,7 +87,7 @@ return if(!isturf(target) || isspaceturf(target)) return - var/newcolor = "#" + item_color + var/newcolor = "#" + paint_color target.add_atom_colour(newcolor, WASHABLE_COLOUR_PRIORITY) /obj/item/paint/paint_remover diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm index 46ad5ae11cd8..6a5c616cbc9e 100644 --- a/code/game/objects/items/religion.dm +++ b/code/game/objects/items/religion.dm @@ -280,7 +280,7 @@ /obj/item/clothing/head/helmet/plate/crusader/prophet name = "Prophet's Hat" desc = "A religious-looking hat." - alternate_worn_icon = 'icons/mob/large-worn-icons/64x64/head.dmi' + mob_overlay_icon = 'icons/mob/large-worn-icons/64x64/head.dmi' flags_1 = 0 armor = list(MELEE = 60, BULLET = 60, LASER = 60, ENERGY = 50, BOMB = 70, BIO = 50, RAD = 50, FIRE = 60, ACID = 60) //religion protects you from disease and radiation, honk. worn_x_dimension = 64 diff --git a/code/game/objects/items/stacks/bscrystal.dm b/code/game/objects/items/stacks/bscrystal.dm index 05c043b9a2eb..bf942bb8e7e7 100644 --- a/code/game/objects/items/stacks/bscrystal.dm +++ b/code/game/objects/items/stacks/bscrystal.dm @@ -4,8 +4,8 @@ desc = "A glowing bluespace crystal, not much is known about how they work. It looks very delicate." icon = 'icons/obj/telescience.dmi' icon_state = "bluespace_crystal" - item_color = "cosmos" singular_name = "bluespace crystal" + dye_color = DYE_COSMIC w_class = WEIGHT_CLASS_TINY materials = list(/datum/material/bluespace=MINERAL_MATERIAL_AMOUNT) points = 75 @@ -31,6 +31,10 @@ new /obj/effect/particle_effect/sparks(loc) playsound(loc, "sparks", 50, 1) blink_mob(user) + if(iscarbon(user)) + var/mob/living/carbon/C = user + C.adjust_disgust(30) //Won't immediately make you vomit, just dont use more than one or two at a time + C.confused += 7 use(1) /obj/item/stack/ore/bluespace_crystal/proc/blink_mob(mob/living/L) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 668528d0587c..c3da29b197dd 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -170,9 +170,13 @@ user.visible_message(span_warning("[user] begins wrapping the wounds on [M]'s [limb.name] with [src]..."), span_warning("You begin wrapping the wounds on [user == M ? "your" : "[M]'s"] [limb.name] with [src]...")) + playsound(src, 'sound/effects/rip2.ogg', 25) + if(!do_after(user, (user == M ? self_delay : other_delay), M)) return + playsound(src, 'sound/effects/rip1.ogg', 25) + user.visible_message(span_green("[user] applies [src] to [M]'s [limb.name]."), span_green("You bandage the wounds on [user == M ? "yourself" : "[M]'s"] [limb.name].")) limb.apply_gauze(src) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index f64389e32490..a7d30ed70cd2 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -218,7 +218,7 @@ else if(istype(O, /obj/item/restraints/handcuffs/cable)) var/obj/item/cuffs = O - cuffs.item_color = item_color + cuffs.color = color cuffs.update_icon() if (QDELETED(O)) diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 8b37fef12dae..cd919ab581b1 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -651,6 +651,7 @@ new /obj/item/clothing/suit/armor/vest/rurmcoat(src) new /obj/item/clothing/suit/armor/vest/sovietcoat(src) new /obj/item/clothing/under/yogs/hopcasual(src) + new /obj/item/clothing/suit/hooded/wintercoat/hop(src) /obj/item/storage/backpack/duffelbag/clothing/rd name = "Research Directors clothing duffelbag" @@ -666,6 +667,7 @@ new /obj/item/clothing/under/rank/research_director/alt/skirt(src) new /obj/item/clothing/under/rank/research_director/turtleneck(src) new /obj/item/clothing/under/rank/research_director/turtleneck/skirt(src) + new /obj/item/clothing/suit/hooded/wintercoat/science/rd(src) new /obj/item/clothing/shoes/sneakers/brown(src) new /obj/item/clothing/under/yogs/rdema(src) @@ -688,6 +690,7 @@ new /obj/item/clothing/under/yogs/cecasual(src) new /obj/item/clothing/head/beret/ce(src) new /obj/item/clothing/suit/hazardvest(src) + new /obj/item/clothing/suit/hooded/wintercoat/engineering/ce(src) new /obj/item/clothing/mask/gas(src) new /obj/item/clothing/glasses/meson/engine(src) @@ -759,6 +762,7 @@ new /obj/item/clothing/under/yogs/hoslatenight(src) new /obj/item/clothing/under/yogs/hoscasual(src) new /obj/item/clothing/suit/armor/vest/hosjacket(src) + new /obj/item/clothing/suit/hooded/wintercoat/security/hos(src) /obj/item/storage/backpack/duffelbag/clothing/med/chief name = "Chief Medical Officer's clothing duffelbag" @@ -774,3 +778,4 @@ new /obj/item/clothing/under/rank/chief_medical_officer/skirt(src) new /obj/item/clothing/shoes/sneakers/brown(src) new /obj/item/clothing/head/beret/cmo(src) + new /obj/item/clothing/suit/hooded/wintercoat/medical/cmo(src) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index ee311128efa2..ffe980727038 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -228,13 +228,14 @@ 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() . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 6 + STR.max_combined_w_class = 18 STR.max_w_class = WEIGHT_CLASS_NORMAL STR.set_holdable(list( /obj/item/melee/baton, @@ -246,6 +247,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 +259,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 +278,12 @@ 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 + STR.max_combined_w_class = 21 + /obj/item/storage/belt/security/chief/full/PopulateContents() new /obj/item/reagent_containers/spray/pepper(src) new /obj/item/restraints/handcuffs(src) @@ -279,6 +291,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 @@ -287,12 +300,13 @@ icon_state = "securitywebbing" item_state = "securitywebbing" w_class = WEIGHT_CLASS_BULKY - custom_premium_price = 800 + custom_premium_price = 200 /obj/item/storage/belt/security/webbing/ComponentInitialize() . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 6 + STR.max_items = 7 + STR.max_combined_w_class = 21 /obj/item/storage/belt/mining name = "explorer's webbing" @@ -303,9 +317,9 @@ /obj/item/storage/belt/mining/ComponentInitialize() . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 6 + STR.max_items = 8 STR.max_w_class = WEIGHT_CLASS_BULKY - STR.max_combined_w_class = 20 + STR.max_combined_w_class = 24 STR.set_holdable(list( /obj/item/crowbar, /obj/item/screwdriver, @@ -332,12 +346,14 @@ /obj/item/stack/medical, /obj/item/kitchen/knife, /obj/item/reagent_containers/hypospray, + /obj/item/lazarus_injector, /obj/item/gps, /obj/item/storage/bag/ore, /obj/item/survivalcapsule, /obj/item/t_scanner/adv_mining_scanner, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, + /obj/item/reagent_containers/food/drinks/bottle/whiskey, /obj/item/stack/ore, /obj/item/reagent_containers/food/drinks, /obj/item/hivelordstabilizer, @@ -347,8 +363,7 @@ /obj/item/stack/marker_beacon, /obj/item/handdrill, /obj/item/jawsoflife, - /obj/item/restraints/legcuffs/bola/watcher, - /obj/item/claymore/bone + /obj/item/restraints/legcuffs/bola/watcher )) @@ -368,7 +383,7 @@ /obj/item/storage/belt/mining/primitive/ComponentInitialize() . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 5 + STR.max_items = 6 /obj/item/storage/belt/soulstone name = "soul stone belt" @@ -545,11 +560,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 +667,8 @@ /obj/item/storage/belt/bandolier/ComponentInitialize() . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 18 + STR.max_items = 24 + STR.max_combined_w_class = 24 STR.display_numerical_stacking = TRUE STR.set_holdable(list( /obj/item/ammo_casing/shotgun @@ -668,6 +679,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() @@ -730,7 +742,7 @@ desc = "A dorky fannypack for keeping small items in." icon_state = "fannypack_leather" item_state = "fannypack_leather" - item_color = "fannypackleather" + dying_key = DYE_REGISTRY_FANNYPACK custom_price = 15 /obj/item/storage/belt/fannypack/ComponentInitialize() @@ -743,61 +755,51 @@ name = "black fannypack" icon_state = "fannypack_black" item_state = "fannypack_black" - item_color = "black" /obj/item/storage/belt/fannypack/red name = "red fannypack" icon_state = "fannypack_red" item_state = "fannypack_red" - item_color = "red" /obj/item/storage/belt/fannypack/purple name = "purple fannypack" icon_state = "fannypack_purple" item_state = "fannypack_purple" - item_color = "purple" /obj/item/storage/belt/fannypack/blue name = "blue fannypack" icon_state = "fannypack_blue" item_state = "fannypack_blue" - item_color = "blue" /obj/item/storage/belt/fannypack/orange name = "orange fannypack" icon_state = "fannypack_orange" item_state = "fannypack_orange" - item_color = "orange" /obj/item/storage/belt/fannypack/white name = "white fannypack" icon_state = "fannypack_white" item_state = "fannypack_white" - item_color = "white" /obj/item/storage/belt/fannypack/green name = "green fannypack" icon_state = "fannypack_green" item_state = "fannypack_green" - item_color = "green" /obj/item/storage/belt/fannypack/pink name = "pink fannypack" icon_state = "fannypack_pink" item_state = "fannypack_pink" - item_color = "pink" /obj/item/storage/belt/fannypack/cyan name = "cyan fannypack" icon_state = "fannypack_cyan" item_state = "fannypack_cyan" - item_color = "cyan" /obj/item/storage/belt/fannypack/yellow name = "yellow fannypack" icon_state = "fannypack_yellow" item_state = "fannypack_yellow" - item_color = "yellow" /obj/item/storage/belt/sabre name = "sabre sheath" 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/stunbaton.dm b/code/game/objects/items/stunbaton.dm index b51c7ee06dab..76f50774436b 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/stunbaton.dm @@ -15,7 +15,8 @@ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 0, RAD = 0, FIRE = 80, ACID = 80) var/cooldown_check = 0 - + /// if the baton is on cooldown from being dropped + var/dropcheck = FALSE ///how long we can't use this baton for after slapping someone with it. Does not account for melee attack cooldown (default of 0.8 seconds). var/cooldown = 1.2 SECONDS ///how long a clown stuns themself for, or someone is stunned for if they are hit to >90 stamina damage @@ -23,7 +24,7 @@ ///how much stamina damage we deal per hit, this is combatted by energy armor var/stamina_damage = 70 ///are we turned on - var/status = TRUE + var/status = FALSE ///the cell used by the baton var/obj/item/stock_parts/cell/cell ///how much charge is deducted from the cell when we slap someone while on @@ -34,6 +35,10 @@ var/preload_cell_type ///used for passive discharge var/cell_last_used = 0 + var/makeshift = FALSE + var/obj/item/firing_pin/pin = /obj/item/firing_pin + var/obj/item/batonupgrade/upgrade + var/thrown = FALSE /obj/item/melee/baton/get_cell() return cell @@ -44,13 +49,31 @@ /obj/item/melee/baton/Initialize() . = ..() + status = FALSE if(preload_cell_type) if(!ispath(preload_cell_type,/obj/item/stock_parts/cell)) log_mapping("[src] at [AREACOORD(src)] had an invalid preload_cell_type: [preload_cell_type].") else cell = new preload_cell_type(src) + if(pin) + pin = new pin(src) + RegisterSignal(src, COMSIG_MOVABLE_PRE_DROPTHROW, .proc/throwbaton) update_icon() +/obj/item/melee/baton/Destroy() + . = ..() + if(isobj(pin)) //Can still be the initial path, then we skip + QDEL_NULL(pin) + if(isobj(upgrade)) //Can still be the initial path, then we skip + QDEL_NULL(upgrade) + +/obj/item/melee/baton/handle_atom_del(atom/A) + . = ..() + if(A == pin) + pin = null + if(A == upgrade) + upgrade = null + /obj/item/melee/baton/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(..()) return @@ -58,6 +81,22 @@ if(status && prob(throw_hit_chance) && iscarbon(hit_atom)) baton_stun(hit_atom) +/obj/item/melee/baton/proc/throwbaton() + thrown = TRUE + +/obj/item/melee/baton/dropped(mob/user, silent) + if(loc != user.loc) + return + . = ..() + if(!thrown) + dropcheck = TRUE + status = FALSE + visible_message(span_warning("The safety strap on [src] is pulled as it is dropped, triggering its emergency shutoff!")) + addtimer(VARSET_CALLBACK(src, dropcheck, FALSE), 8 SECONDS) + update_icon() + else + thrown = FALSE + /obj/item/melee/baton/loaded //this one starts with a cell pre-installed. preload_cell_type = /obj/item/stock_parts/cell/high @@ -110,7 +149,45 @@ cell = W to_chat(user, span_notice("You install a cell in [src].")) update_icon() - + else if(istype(W, /obj/item/firing_pin)) + if(makeshift) + return + if(upgrade) + if(W.type != /obj/item/firing_pin) + to_chat("You are unable to add a non default firing pin whilst [src] has an upgrade. Remove the upgrade first with a crowbar.") + return + if(pin) + to_chat(user, span_notice("[src] already has a firing pin. You can remove it with crowbar.")) + else + W.forceMove(src) + pin = W + else if(istype(W, /obj/item/batonupgrade)) + if(makeshift) + return + if(pin) + if(pin.type != /obj/item/firing_pin) + to_chat("You are unable to upgrade the baton whilst it has a non default firing pin.") + return + if(upgrade) + to_chat(user, span_notice("[src] already has an upgrade installed. You can remove it with crowbar")) + else + to_chat(user, span_notice("You apply the [W.name] to the [src]")) + W.forceMove(src) + upgrade = W + else if(W.tool_behaviour == TOOL_CROWBAR) + if(makeshift) + return + if(pin) + pin.forceMove(get_turf(src)) + pin = null + status = FALSE + to_chat(user, span_notice("You remove the firing pin from [src].")) + if(upgrade) + upgrade.forceMove(get_turf(src)) + upgrade = null + status = FALSE + to_chat(user, span_notice("You remove the upgrade from [src].")) + update_icon() else if(W.tool_behaviour == TOOL_SCREWDRIVER) if(cell) cell.update_icon() @@ -118,12 +195,17 @@ cell = null to_chat(user, span_notice("You remove the cell from [src].")) status = FALSE - update_icon() STOP_PROCESSING(SSobj, src) // no cell, no charge; stop processing for on because it cant be on + update_icon() else return ..() /obj/item/melee/baton/attack_self(mob/user) + if(!handle_pins(user)) + return FALSE + if(dropcheck) + to_chat(user, "[src]'s emergency shutoff is still active!") + return if(cell && cell.charge > hitcost) status = !status to_chat(user, span_notice("[src] is now [status ? "on" : "off"].")) @@ -164,7 +246,6 @@ ..() return - if(ishuman(M)) var/mob/living/carbon/human/L = M var/datum/martial_art/A = L.check_block() @@ -191,6 +272,13 @@ /obj/item/melee/baton/proc/baton_stun(mob/living/L, mob/user) + if(!handle_pins(user)) + return FALSE + if(upgrade) + stamina_damage = initial(stamina_damage)*2 + hitcost = initial(hitcost)*1.5 + else + stamina_damage = initial(stamina_damage) if(ishuman(L)) var/mob/living/carbon/human/H = L if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) //No message; check_shields() handles that @@ -209,6 +297,8 @@ var/obj/item/bodypart/affecting = L.get_bodypart(user? user.zone_selected : BODY_ZONE_CHEST) var/armor_block = L.run_armor_check(affecting, ENERGY) //check armor on the limb because that's where we are slapping... L.apply_damage(stamina_damage, STAMINA, BODY_ZONE_CHEST, armor_block) //...then deal damage to chest so we can't do the old hit-a-disabled-limb-200-times thing, batons are electrical not directed. + + SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK) var/current_stamina_damage = L.getStaminaLoss() @@ -276,6 +366,7 @@ hitcost = 2000 throw_hit_chance = 10 slot_flags = ITEM_SLOT_BACK + makeshift = TRUE var/obj/item/assembly/igniter/sparkler = 0 /obj/item/melee/baton/cattleprod/Initialize() @@ -291,3 +382,20 @@ desc = "A cost-effective, mass-produced, tactical stun prod." preload_cell_type = /obj/item/stock_parts/cell/high/plus // comes with a cell color = "#aeb08c" // super tactical + +/obj/item/melee/baton/proc/handle_pins(mob/living/user) + if(pin) + if(pin.pin_auth(user) || (pin.obj_flags & EMAGGED)) + return TRUE + else + pin.auth_fail(user) + return FALSE + else + to_chat(user, span_warning("[src]'s trigger is locked. This weapon doesn't have a firing pin installed!")) + return FALSE + +/obj/item/batonupgrade + name = "baton power upgrade" + desc = "A new power management circuit which enables stun batons to instantly stun, at the cost of double power usage." + icon = 'icons/obj/module.dmi' + icon_state = "cyborg_upgrade3" 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/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm index c4e0c4483489..bbb6ccbf7112 100644 --- a/code/game/objects/items/tools/crowbar.dm +++ b/code/game/objects/items/tools/crowbar.dm @@ -20,6 +20,10 @@ toolspeed = 1 armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30) +/obj/item/crowbar/attack(mob/living/M, mob/user) + if(user.a_intent == INTENT_HARM || !attempt_initiate_surgery(src, M, user)) + ..() + /obj/item/crowbar/suicide_act(mob/user) user.visible_message(span_suicide("[user] is beating [user.p_them()]self to death with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) playsound(loc, 'sound/weapons/genhit.ogg', 50, 1, -1) diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index 52e90d6bece8..f3fecffcfc4a 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -74,6 +74,8 @@ return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', icon_state) /obj/item/screwdriver/attack(mob/living/carbon/M, mob/living/carbon/user) + if(!user.a_intent == INTENT_HARM && attempt_initiate_surgery(src, M, user)) + return if(!istype(M)) return ..() if(user.zone_selected != BODY_ZONE_PRECISE_EYES && user.zone_selected != BODY_ZONE_HEAD) diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index 3bd3fa8f26fe..c1102c83554c 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -95,6 +95,10 @@ dyn_explosion(T, plasmaAmount/5)//20 plasma in a standard welder has a 4 power explosion. no breaches, but enough to kill/dismember holder qdel(src) +/obj/item/weldingtool/attack(mob/living/M, mob/user) + if(!isOn() || user.a_intent == INTENT_HARM || !attempt_initiate_surgery(src, M, user)) + ..() + /obj/item/weldingtool/afterattack(atom/O, mob/user, proximity) . = ..() if(!proximity) diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm index 52e9fd2f2a3c..3dc2a749b2da 100644 --- a/code/game/objects/items/tools/wirecutters.dm +++ b/code/game/objects/items/tools/wirecutters.dm @@ -60,6 +60,8 @@ if(do_after(user, 1.5 SECONDS, C)) to_chat(C, span_notice("You succesfuly remove the durathread strand.")) C.remove_status_effect(STATUS_EFFECT_CHOKINGSTRAND) + else if(!user.a_intent == INTENT_HARM && attempt_initiate_surgery(src, C, user)) + return else ..() diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm index 08585cf4ef53..77d1584505ba 100644 --- a/code/game/objects/items/tools/wrench.dm +++ b/code/game/objects/items/tools/wrench.dm @@ -20,6 +20,10 @@ toolspeed = 1 armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30) +/obj/item/wrench/attack(mob/living/M, mob/user) + if(user.a_intent == INTENT_HARM || !attempt_initiate_surgery(src, M, user)) + ..() + /obj/item/wrench/suicide_act(mob/user) user.visible_message(span_suicide("[user] is beating [user.p_them()]self to death with [src]! It looks like [user.p_theyre()] trying to commit suicide!")) playsound(loc, 'sound/weapons/genhit.ogg', 50, 1, -1) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 0b611dc6cdce..2de7ac154b19 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -260,18 +260,15 @@ w_class = WEIGHT_CLASS_SMALL attack_verb = list("attacked", "struck", "hit") var/hacked = FALSE + var/saber_color = "blue" /obj/item/toy/sword/attack_self(mob/user) active = !( active ) if (active) to_chat(user, span_notice("You extend the plastic blade with a quick flick of your wrist.")) playsound(user, 'sound/weapons/saberon.ogg', 20, 1) - if(hacked) - icon_state = "swordrainbow" - item_state = "swordrainbow" - else - icon_state = "swordblue" - item_state = "swordblue" + icon_state = "sword[saber_color]" + item_state = "sword[saber_color]" w_class = WEIGHT_CLASS_BULKY else to_chat(user, span_notice("You push the plastic blade back down into the handle.")) @@ -292,13 +289,13 @@ var/obj/item/twohanded/dualsaber/toy/newSaber = new /obj/item/twohanded/dualsaber/toy(user.loc) if(hacked) // That's right, we'll only check the "original" "sword". newSaber.hacked = TRUE - newSaber.item_color = "rainbow" + newSaber.saber_color = "rainbow" qdel(W) qdel(src) else if(W.tool_behaviour == TOOL_MULTITOOL) if(!hacked) hacked = TRUE - item_color = "rainbow" + saber_color = "rainbow" to_chat(user, span_warning("RNBW_ENGAGE")) if(active) @@ -944,7 +941,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/twohanded.dm b/code/game/objects/items/twohanded.dm index c955ff525274..91984b0bf09d 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -308,7 +308,7 @@ unwieldsound = 'sound/weapons/saberoff.ogg' hitsound = "swing_hit" armour_penetration = 35 - item_color = "green" + var/saber_color = "green" light_color = "#00ff00"//green attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") block_chance = 75 @@ -349,8 +349,8 @@ /obj/item/twohanded/dualsaber/Initialize() . = ..() if(LAZYLEN(possible_colors)) - item_color = pick(possible_colors) - switch(item_color) + saber_color = pick(possible_colors) + switch(saber_color) if("red") light_color = LIGHT_COLOR_RED if("green") @@ -366,7 +366,7 @@ /obj/item/twohanded/dualsaber/update_icon() if(wielded) - icon_state = "dualsaber[item_color][wielded]" + icon_state = "dualsaber[saber_color][wielded]" else icon_state = "dualsaber0" SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_TYPE_BLOOD) @@ -473,7 +473,7 @@ if(!hacked) hacked = TRUE to_chat(user, span_warning("2XRNBW_ENGAGE")) - item_color = "rainbow" + saber_color = "rainbow" update_icon() else to_chat(user, span_warning("It's starting to look like a triple rainbow - no, nevermind.")) @@ -543,7 +543,7 @@ force += 1 throwforce += 1 righthand_file = 'yogstation/icons/mob/inhands/weapons/polearms_righthand.dmi' //yogs - alternate_worn_icon = 'yogstation/icons/mob/back.dmi' //yogs + mob_overlay_icon = 'yogstation/icons/mob/clothing/back.dmi' //yogs icon_prefix = "spearplasma" update_icon() qdel(tip) 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/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index df88298597f9..b4210e5ea00d 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -10,6 +10,7 @@ LINEN BINS icon = 'icons/obj/bedsheets.dmi' lefthand_file = 'icons/mob/inhands/misc/bedsheet_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/bedsheet_righthand.dmi' + mob_overlay_icon = 'icons/mob/clothing/neck/sheets.dmi' icon_state = "sheetwhite" item_state = "sheetwhite" slot_flags = ITEM_SLOT_NECK @@ -18,8 +19,8 @@ LINEN BINS throw_speed = 1 throw_range = 2 w_class = WEIGHT_CLASS_TINY - item_color = "white" resistance_flags = FLAMMABLE + dying_key = DYE_REGISTRY_BEDSHEET var/newbedpath = null dog_fashion = /datum/dog_fashion/head/ghost @@ -36,7 +37,6 @@ LINEN BINS sheet.name = name sheet.icon_state = icon_state sheet.item_state = item_state - sheet.item_color = item_color sheet.dream_messages = dream_messages qdel(src) user.put_in_active_hand(sheet) @@ -76,34 +76,29 @@ LINEN BINS /obj/item/bedsheet/blue icon_state = "sheetblue" item_state = "sheetblue" - item_color = "blue" dream_messages = list("blue") newbedpath = /obj/item/bedsheet/adjusted/blue /obj/item/bedsheet/green icon_state = "sheetgreen" item_state = "sheetgreen" - item_color = "green" dream_messages = list("green") newbedpath = /obj/item/bedsheet/adjusted/green /obj/item/bedsheet/grey icon_state = "sheetgrey" item_state = "sheetgrey" - item_color = "grey" dream_messages = list("grey") /obj/item/bedsheet/orange icon_state = "sheetorange" item_state = "sheetorange" - item_color = "orange" dream_messages = list("orange") newbedpath = /obj/item/bedsheet/adjusted/orange /obj/item/bedsheet/purple icon_state = "sheetpurple" item_state = "sheetpurple" - item_color = "purple" dream_messages = list("purple") newbedpath = /obj/item/bedsheet/adjusted/purple @@ -112,7 +107,6 @@ LINEN BINS desc = "You've never felt more free than when sleeping on this." icon_state = "sheetUSA" item_state = "sheetUSA" - item_color = "sheetUSA" dream_messages = list("America", "freedom", "fireworks", "bald eagles") /obj/item/bedsheet/rainbow @@ -120,21 +114,18 @@ LINEN BINS desc = "A multicolored blanket. It's actually several different sheets cut up and sewn together." icon_state = "sheetrainbow" item_state = "sheetrainbow" - item_color = "rainbow" dream_messages = list("red", "orange", "yellow", "green", "blue", "purple", "a rainbow") newbedpath = /obj/item/bedsheet/adjusted/rainbow /obj/item/bedsheet/red icon_state = "sheetred" item_state = "sheetred" - item_color = "red" dream_messages = list("red") newbedpath = /obj/item/bedsheet/adjusted/red /obj/item/bedsheet/yellow icon_state = "sheetyellow" item_state = "sheetyellow" - item_color = "yellow" dream_messages = list("yellow") newbedpath = /obj/item/bedsheet/adjusted/yellow @@ -143,7 +134,6 @@ LINEN BINS desc = "A very soothing striped blanket. All the noise just seems to fade out when you're under the covers in this." icon_state = "sheetmime" item_state = "sheetmime" - item_color = "mime" dream_messages = list("silence", "gestures", "a pale face", "a gaping mouth", "the mime") newbedpath = /obj/item/bedsheet/adjusted/mime @@ -152,7 +142,6 @@ LINEN BINS desc = "A rainbow blanket with a clown mask woven in. It smells faintly of bananas." icon_state = "sheetclown" item_state = "sheetrainbow" - item_color = "clown" dream_messages = list("honk", "laughter", "a prank", "a joke", "a smiling face", "the clown") newbedpath = /obj/item/bedsheet/adjusted/clown @@ -161,7 +150,6 @@ LINEN BINS desc = "It has a Nanotrasen symbol on it, and was woven with a revolutionary new kind of thread guaranteed to have 0.01% permeability for most non-chemical substances, popular among most modern captains." icon_state = "sheetcaptain" item_state = "sheetcaptain" - item_color = "captain" dream_messages = list("authority", "a golden ID", "sunglasses", "a green disc", "an antique gun", "the captain") newbedpath = /obj/item/bedsheet/adjusted/captain @@ -170,7 +158,6 @@ LINEN BINS desc = "It appears to have a beaker emblem, and is made out of fire-resistant material, although it probably won't protect you in the event of fires you're familiar with every day." icon_state = "sheetrd" item_state = "sheetrd" - item_color = "director" dream_messages = list("authority", "a silvery ID", "a bomb", "a mech", "a facehugger", "maniacal laughter", "the research director") newbedpath = /obj/item/bedsheet/adjusted/rd @@ -185,7 +172,6 @@ LINEN BINS desc = "It's a sterilized* blanket commonly used in the Medbay. *Sterilization is voided if a virologist is present onboard the station." icon_state = "sheetmedical" item_state = "sheetmedical" - item_color = "medical" dream_messages = list("healing", "life", "surgery", "a doctor") newbedpath = /obj/item/bedsheet/adjusted/medical @@ -194,7 +180,6 @@ LINEN BINS desc = "It's a sterilized blanket that has a cross emblem. There's some cat fur on it, likely from Runtime." icon_state = "sheetcmo" item_state = "sheetcmo" - item_color = "cmo" dream_messages = list("authority", "a silvery ID", "healing", "life", "surgery", "a cat", "the chief medical officer") /obj/item/bedsheet/hos @@ -202,7 +187,6 @@ LINEN BINS desc = "It is decorated with a shield emblem. While crime doesn't sleep, you do, but you are still THE LAW!" icon_state = "sheethos" item_state = "sheethos" - item_color = "hosred" dream_messages = list("authority", "a silvery ID", "handcuffs", "a baton", "a flashbang", "sunglasses", "the head of security") newbedpath = /obj/item/bedsheet/adjusted/hos @@ -211,7 +195,6 @@ LINEN BINS desc = "It is decorated with a key emblem. For those rare moments when you can rest and cuddle with Ian without someone screaming for you over the radio." icon_state = "sheethop" item_state = "sheethop" - item_color = "hop" dream_messages = list("authority", "a silvery ID", "obligation", "a computer", "an ID", "a corgi", "the head of personnel") newbedpath = /obj/item/bedsheet/adjusted/hop @@ -220,7 +203,6 @@ LINEN BINS desc = "It is decorated with a wrench emblem. It's highly reflective and stain resistant, so you don't need to worry about ruining it with oil." icon_state = "sheetce" item_state = "sheetce" - item_color = "chief" dream_messages = list("authority", "a silvery ID", "the engine", "power tools", "an APC", "a parrot", "the chief engineer") newbedpath = /obj/item/bedsheet/adjusted/ce @@ -229,20 +211,17 @@ LINEN BINS desc = "It is decorated with a crate emblem in silver lining. It's rather tough, and just the thing to lie on after a hard day of pushing paper." icon_state = "sheetqm" item_state = "sheetqm" - item_color = "qm" dream_messages = list("a grey ID", "a shuttle", "a crate", "a sloth", "the quartermaster") /obj/item/bedsheet/brown icon_state = "sheetbrown" item_state = "sheetbrown" - item_color = "cargo" dream_messages = list("brown") newbedpath = /obj/item/bedsheet/adjusted/brown /obj/item/bedsheet/black icon_state = "sheetblack" item_state = "sheetblack" - item_color = "black" dream_messages = list("black") /obj/item/bedsheet/centcom @@ -250,7 +229,6 @@ LINEN BINS desc = "Woven with advanced nanothread for warmth as well as being very decorated, essential for all officials." icon_state = "sheetcentcom" item_state = "sheetcentcom" - item_color = "centcom" dream_messages = list("a unique ID", "authority", "artillery", "an ending") /obj/item/bedsheet/syndie @@ -258,7 +236,6 @@ LINEN BINS desc = "It has a syndicate emblem and it has an aura of evil." icon_state = "sheetsyndie" item_state = "sheetsyndie" - item_color = "syndie" dream_messages = list("a green disc", "a red crystal", "a glowing blade", "a wire-covered ID") /obj/item/bedsheet/cult @@ -266,7 +243,6 @@ LINEN BINS desc = "You might dream of Nar'Sie if you sleep with this. It seems rather tattered and glows of an eldritch presence." icon_state = "sheetcult" item_state = "sheetcult" - item_color = "cult" dream_messages = list("a tome", "a floating red crystal", "a glowing sword", "a bloody symbol", "a massive humanoid figure") /obj/item/bedsheet/wiz @@ -274,7 +250,6 @@ LINEN BINS desc = "A special fabric enchanted with magic so you can have an enchanted night. It even glows!" icon_state = "sheetwiz" item_state = "sheetwiz" - item_color = "wiz" dream_messages = list("a book", "an explosion", "lightning", "a staff", "a skeleton", "a robe", "magic") /obj/item/bedsheet/nanotrasen @@ -282,13 +257,11 @@ LINEN BINS desc = "It has the Nanotrasen logo on it and has an aura of duty." icon_state = "sheetNT" item_state = "sheetNT" - item_color = "nanotrasen" dream_messages = list("authority", "an ending") /obj/item/bedsheet/ian icon_state = "sheetian" item_state = "sheetian" - item_color = "ian" dream_messages = list("a dog", "a corgi", "woof", "bark", "arf") /obj/item/bedsheet/cosmos @@ -296,14 +269,12 @@ LINEN BINS desc = "Made from the dreams of those who wonder at the stars." icon_state = "sheetcosmos" item_state = "sheetcosmos" - item_color = "cosmos" dream_messages = list("the infinite cosmos", "Hans Zimmer music", "a flight through space", "the galaxy", "being fabulous", "shooting stars") light_power = 2 light_range = 1.4 /obj/item/bedsheet/random icon_state = "random_bedsheet" - item_color = "rainbow" name = "random bedsheet" desc = "If you're reading this description ingame, something has gone wrong! Honk!" @@ -315,7 +286,6 @@ LINEN BINS /obj/item/bedsheet/dorms icon_state = "random_bedsheet" - item_color = "rainbow" name = "random dorms bedsheet" desc = "If you're reading this description ingame, something has gone wrong! Honk!" 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 9884994003bd..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/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/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index 51cdaebed9fa..ea1884677873 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -171,5 +171,5 @@ /obj/structure/closet/ammunitionlocker/PopulateContents() ..() - for(var/i in 1 to 8) - new /obj/item/ammo_casing/shotgun/beanbag(src) + for(var/i in 1 to 3) + new /obj/item/storage/box/beanbag(src) diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index 01034c9dd052..dbac46894c5f 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -179,7 +179,7 @@ notify_ghosts("\A [initial(species.prefix)] golem shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACKORBIT, flashwindow = FALSE, ignore_key = POLL_IGNORE_GOLEM) if(has_owner && creator) short_desc = "You are a Golem." - flavour_text = "You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. \ + flavour_text = "You move slowly and are unable to wear clothes, but can still use most tools. Depending on the material you were made of, you will have different strengths and weaknesses \ Serve [creator], and assist [creator.p_them()] in completing [creator.p_their()] goals at any cost." owner = creator @@ -638,6 +638,7 @@ /obj/effect/mob_spawn/human/pirate/gunner rank = "Gunner" + outfit = /datum/outfit/pirate/space/gunner //The Innkeeper, a iceplanet ghostrole for peacefully operating a rest stop complete with food and drinks. /obj/effect/mob_spawn/human/innkeeper diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 3276d2be9ee4..b54880c5725e 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -516,7 +516,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()) @@ -525,19 +525,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) - -/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 + 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, 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/fun_balloon.dm b/code/modules/admin/fun_balloon.dm index c3e2ba6810f6..73435f41c8d4 100644 --- a/code/modules/admin/fun_balloon.dm +++ b/code/modules/admin/fun_balloon.dm @@ -166,3 +166,6 @@ name = "The Arena" has_gravity = STANDARD_GRAVITY requires_power = FALSE + hidden = TRUE + mood_bonus = 25 + mood_message = span_nicegreen("NO TIME TO THINK, JUST RIP AND TEAR!!/n") diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 09cb56932745..781db60b883d 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1984,7 +1984,14 @@ SD.r_code = code message_admins("[key_name_admin(usr)] has set the self-destruct \ code to \"[code]\".") - + else if(href_list["set_beer_code"]) + if(!check_rights(R_ADMIN)) + return + var/code = random_nukecode() + for(var/obj/machinery/nuclearbomb/beer/BN in GLOB.nuke_list) + BN.r_code = code + message_admins("[key_name_admin(usr)] has set the beer nuke \ + code to \"[code]\".") else if(href_list["add_station_goal"]) if(!check_rights(R_ADMIN)) return diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index ec7263b903e2..a7b6a915de2f 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 && !current_ticket) // creates a ticket if there is no ticket of either 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/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index 0c3803da7d49..073d2e666950 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -72,7 +72,7 @@ /// Used by communications consoles to request the nuclear launch codes /proc/nuke_request(text, mob/sender) var/msg = copytext_char(sanitize(text), 1, MAX_MESSAGE_LEN) - msg = span_adminnotice("NUKE CODE REQUEST:[ADMIN_FULLMONTY(sender)] [ADMIN_CENTCOM_REPLY(sender)] [ADMIN_SET_SD_CODE]: [msg]") + msg = span_adminnotice("NUKE CODE REQUEST:[ADMIN_FULLMONTY(sender)] [ADMIN_CENTCOM_REPLY(sender)] [ADMIN_SET_SD_CODE] [ADMIN_SET_BC_CODE]: [msg]") to_chat(GLOB.admins, msg, confidential = TRUE) for(var/obj/machinery/computer/communications/console in GLOB.machines) console.override_cooldown() diff --git a/code/modules/antagonists/blob/blob_mobs.dm b/code/modules/antagonists/blob/blob_mobs.dm index fd46dd784e39..0f1f4e0bc40b 100644 --- a/code/modules/antagonists/blob/blob_mobs.dm +++ b/code/modules/antagonists/blob/blob_mobs.dm @@ -249,7 +249,7 @@ force_threshold = 10 pressure_resistance = 50 mob_size = MOB_SIZE_LARGE - hud_type = /datum/hud/blobbernaut + hud_type = /datum/hud/living/blobbernaut /mob/living/simple_animal/hostile/blob/blobbernaut/Life() if(..()) @@ -285,15 +285,6 @@ I.color = overmind.blobstrain.complementary_color flick_overlay_view(I, src, 8) -/mob/living/simple_animal/hostile/blob/blobbernaut/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - . = ..() - if(updating_health) - update_health_hud() - -/mob/living/simple_animal/hostile/blob/blobbernaut/update_health_hud() - if(hud_used) - hud_used.healths.maptext = "
[round((health / maxHealth) * 100, 0.5)]%
" - /mob/living/simple_animal/hostile/blob/blobbernaut/AttackingTarget() . = ..() if(. && isliving(target) && overmind) diff --git a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm index 09a0abce24eb..fdc0451b99e9 100644 --- a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm +++ b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm @@ -14,7 +14,7 @@ reagent = /datum/reagent/blob/blazing_oil /datum/blobstrain/reagent/blazing_oil/extinguish_reaction(obj/structure/blob/B) - B.take_damage(1.5, BURN, ENERGY) + B.take_damage(1, BURN, ENERGY) /datum/blobstrain/reagent/blazing_oil/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) if(damage_type == BURN && damage_flag != ENERGY) @@ -38,4 +38,4 @@ if(M) M.apply_damage(0.8*reac_volume, BURN, wound_bonus=CANT_WOUND) if(iscarbon(M)) - M.emote("scream") \ No newline at end of file + M.emote("scream") diff --git a/code/modules/antagonists/blob/overmind.dm b/code/modules/antagonists/blob/overmind.dm index 4be0c9c35df1..9cc0c8df26a9 100644 --- a/code/modules/antagonists/blob/overmind.dm +++ b/code/modules/antagonists/blob/overmind.dm @@ -116,6 +116,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) set_security_level("delta") max_blob_points = INFINITY blob_points = INFINITY + blob_core.max_integrity = 999999 addtimer(CALLBACK(src, .proc/victory), 450) else if(!free_strain_rerolls && (last_reroll_time + BLOB_REROLL_TIMEYou have gained another free strain re-roll.") @@ -205,14 +206,15 @@ GLOBAL_LIST_EMPTY(blob_nodes) /mob/camera/blob/update_health_hud() if(blob_core) - hud_used.healths.maptext = "
[round(blob_core.obj_integrity)]
" + var/current_health = round((blob_core.obj_integrity / blob_core.max_integrity) * 100) + hud_used.healths.maptext = "
[current_health]%
" for(var/mob/living/simple_animal/hostile/blob/blobbernaut/B in blob_mobs) if(B.hud_used && B.hud_used.blobpwrdisplay) - B.hud_used.blobpwrdisplay.maptext = "
[round(blob_core.obj_integrity)]
" + B.hud_used.blobpwrdisplay.maptext = "
[current_health]%
" /mob/camera/blob/proc/add_points(points) blob_points = clamp(blob_points + points, 0, max_blob_points) - hud_used.blobpwrdisplay.maptext = "
[round(blob_points)]
" + hud_used.blobpwrdisplay.maptext = "
[round(blob_points)]
" /mob/camera/blob/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) if (!message) 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..007580846cd5 100644 --- a/code/modules/antagonists/bloodsuckers/bloodsucker_frenzy.dm +++ b/code/modules/antagonists/bloodsuckers/bloodsucker_frenzy.dm @@ -59,6 +59,8 @@ // 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) + ADD_TRAIT(owner, TRAIT_STUNIMMUNE, FRENZY_TRAIT) if(user.IsAdvancedToolUser()) was_tooluser = TRUE ADD_TRAIT(owner, TRAIT_MONKEYLIKE, SPECIES_TRAIT) @@ -80,6 +82,8 @@ 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) + REMOVE_TRAIT(owner, TRAIT_STUNIMMUNE, 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/cloak.dm b/code/modules/antagonists/bloodsuckers/powers/cloak.dm index 7d119a9a9bf6..409a133e23a4 100644 --- a/code/modules/antagonists/bloodsuckers/powers/cloak.dm +++ b/code/modules/antagonists/bloodsuckers/powers/cloak.dm @@ -88,7 +88,7 @@ name = "cloak of shadows" desc = "Fancy stuff." icon = 'icons/obj/vamp_obj.dmi' - alternate_worn_icon = 'icons/obj/vamp_obj.dmi' + mob_overlay_icon = 'icons/obj/vamp_obj.dmi' icon_state = "cloak" item_state = "cloak" armor = list("melee" = 0, "bullet" = 0, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 10, "acid" = 100) //good if you haven nothing @@ -118,4 +118,4 @@ . = ..() var/obj/item/I = owner.get_item_by_slot(SLOT_NECK) if(istype(I, /obj/item/clothing/neck/yogs/sith_cloak/cloak)) - qdel(I) \ No newline at end of file + qdel(I) diff --git a/code/modules/antagonists/bloodsuckers/powers/fortitude.dm b/code/modules/antagonists/bloodsuckers/powers/fortitude.dm index a95d92a3114b..e3a881831f13 100644 --- a/code/modules/antagonists/bloodsuckers/powers/fortitude.dm +++ b/code/modules/antagonists/bloodsuckers/powers/fortitude.dm @@ -24,7 +24,7 @@ ADD_TRAIT(owner, TRAIT_PIERCEIMMUNE, BLOODSUCKER_TRAIT) ADD_TRAIT(owner, TRAIT_NODISMEMBER, BLOODSUCKER_TRAIT) ADD_TRAIT(owner, TRAIT_PUSHIMMUNE, BLOODSUCKER_TRAIT) - if(level_current >= 4) + if(level_current >= 2) ADD_TRAIT(owner, TRAIT_STUNIMMUNE, BLOODSUCKER_TRAIT) // They'll get stun resistance + this, who cares. var/mob/living/carbon/human/bloodsucker_user = owner if(IS_BLOODSUCKER(owner) || IS_VASSAL(owner)) diff --git a/code/modules/antagonists/bloodsuckers/powers/gangrel.dm b/code/modules/antagonists/bloodsuckers/powers/gangrel.dm index 4a3cdca1cc1a..9d3850ac4bc4 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.")) @@ -540,7 +540,7 @@ icon_state = "collar" item_state = "collar" icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' - alternate_worn_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + mob_overlay_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' armor = list("melee" = 0, "bullet" = 0, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 10, "acid" = 100) body_parts_covered = NECK @@ -550,7 +550,7 @@ icon_state = "ears" item_state = "ears" icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' - alternate_worn_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + mob_overlay_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' armor = list("melee" = 0, "bullet" = 0, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 10, "acid" = 100) flags_inv = HIDEHAIR|HIDEFACE alternate_worn_layer = ABOVE_BODY_FRONT_LAYER @@ -561,7 +561,7 @@ icon_state = "claws" item_state = "claws" icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' - alternate_worn_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + mob_overlay_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' body_parts_covered = ARMS|HANDS flags_inv = HIDEJUMPSUIT var/datum/action/bloodsucker/targeted/tear/tearaction = new @@ -572,7 +572,7 @@ icon_state = "legs" item_state = "legs" icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' - alternate_worn_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + mob_overlay_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' slowdown = SHOES_SLOWDOWN - 0.5 body_parts_covered = GROIN|LEGS|FEET @@ -582,7 +582,7 @@ icon_state = "digilegs" item_state = "digilegs" icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' - alternate_worn_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' + mob_overlay_icon = 'icons/mob/actions/actions_gangrel_bloodsucker.dmi' slowdown = SHOES_SLOWDOWN - 0.5 xenoshoe = YES_DIGIT body_parts_covered = GROIN|LEGS|FEET 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/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index db5c4a6e474b..2646459bd0c3 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -310,7 +310,6 @@ prof.name_list[slot] = I.name prof.appearance_list[slot] = I.appearance prof.flags_cover_list[slot] = I.flags_cover - prof.item_color_list[slot] = I.item_color prof.item_state_list[slot] = I.item_state prof.exists_list[slot] = 1 else 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/antagonists/clockcult/clock_helpers/slab_abilities.dm b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm index 8c4e1b3a2f1c..5a5afc1d9088 100644 --- a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm +++ b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm @@ -72,6 +72,7 @@ name = "replicant manacles" desc = "Heavy manacles made out of freezing-cold metal. It looks like brass, but feels much more solid." icon_state = "brass_manacles" + item_state = "brass_manacles" item_flags = DROPDEL /obj/item/restraints/handcuffs/clockwork/dropped(mob/user) diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm index 96a2abb6aa27..4836613e3e6c 100644 --- a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm +++ b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm @@ -125,7 +125,6 @@ icon = 'icons/obj/clothing/clockwork_garb.dmi' icon_state = "clockwork_gauntlets" item_state = "clockwork_gauntlets" - item_color = null //So they don't wash. strip_delay = 50 equip_delay_other = 30 body_parts_covered = ARMS diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 27309d78240e..4467f2edd586 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -177,7 +177,7 @@ /datum/action/innate/cult/blood_spell/construction name = "Twisted Construction" - desc = "Empowers your hand to corrupt certain metalic objects.
Converts:
Plasteel into runed metal
50 metal into a construct shell
Living cyborgs into constructs after a delay
Cyborg shells into construct shells
Airlocks into brittle runed airlocks after a delay (harm intent)" + desc = "Empowers your hand to corrupt certain metalic objects.
Converts:
Plasteel into runed metal
50 metal into a construct shell
Airlocks into brittle runed airlocks after a delay (harm intent)" button_icon_state = "transmute" magic_path = "/obj/item/melee/blood_magic/construction" health_cost = 12 @@ -600,8 +600,6 @@ . += {"A sinister spell used to convert:\n Plasteel into runed metal\n [METAL_TO_CONSTRUCT_SHELL_CONVERSION] metal into a construct shell\n - Living cyborgs into constructs after a delay\n - Cyborg shells into construct shells\n Airlocks into brittle runed airlocks after a delay (harm intent)"} /obj/item/melee/blood_magic/construction/afterattack(atom/target, mob/user, proximity_flag, click_parameters) diff --git a/code/modules/antagonists/devil/true_devil/inventory.dm b/code/modules/antagonists/devil/true_devil/inventory.dm index 33e2777d8c1b..a3d0dbdf582b 100644 --- a/code/modules/antagonists/devil/true_devil/inventory.dm +++ b/code/modules/antagonists/devil/true_devil/inventory.dm @@ -12,12 +12,7 @@ var/obj/item/r_hand = get_item_for_held_index(2) if(r_hand) - - var/r_state = r_hand.item_state - if(!r_state) - r_state = r_hand.icon_state - - var/mutable_appearance/r_hand_overlay = r_hand.build_worn_icon(state = r_state, default_layer = DEVIL_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) + var/mutable_appearance/r_hand_overlay = r_hand.build_worn_icon(default_layer = DEVIL_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) hands_overlays += r_hand_overlay @@ -28,12 +23,7 @@ client.screen |= r_hand if(l_hand) - - var/l_state = l_hand.item_state - if(!l_state) - l_state = l_hand.icon_state - - var/mutable_appearance/l_hand_overlay = l_hand.build_worn_icon(state = l_state, default_layer = DEVIL_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) + var/mutable_appearance/l_hand_overlay = l_hand.build_worn_icon(default_layer = DEVIL_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) hands_overlays += l_hand_overlay diff --git a/code/modules/antagonists/horror/horror_datums.dm b/code/modules/antagonists/horror/horror_datums.dm index d309fe1c9dc7..cf0e836a1d4e 100644 --- a/code/modules/antagonists/horror/horror_datums.dm +++ b/code/modules/antagonists/horror/horror_datums.dm @@ -14,6 +14,15 @@ var/mob/living/simple_animal/horror/H = owner.current H.update_horror_hud() +/datum/antagonist/horror/antag_listing_name() + . = ..() + var/mob/living/simple_animal/horror/H = owner.current + if(!istype(H) || !H.victim) + return + if(H.host_brain) + return ..() + ", controlling [H.host_brain.real_name]" + return ..() + ", inside [H.victim.real_name]" + /datum/antagonist/horror/proc/give_objectives() if(summoner) var/datum/objective/newobjective = new diff --git a/code/modules/antagonists/traitor/IAA/internal_affairs.dm b/code/modules/antagonists/traitor/IAA/internal_affairs.dm index 8315f1d32043..e5ecfd125797 100644 --- a/code/modules/antagonists/traitor/IAA/internal_affairs.dm +++ b/code/modules/antagonists/traitor/IAA/internal_affairs.dm @@ -32,13 +32,9 @@ START_PROCESSING(SSprocessing, src) if(ishuman(owner.current)) - //Gives Cyanide/death pill dental implant - var/obj/item/reagent_containers/pill/iaa/death = new - owner.current.transferItemToLoc(death, owner, TRUE) - var/datum/action/item_action/hands_free/activate_pill/P = new(death) - P.button.name = "Activate [death.name]" - P.target = death - P.Grant(owner.current)//The pill never actually goes in an inventory slot, so the owner doesn't inherit actions from it + var/mob/living/carbon/human/H = owner.current + var/obj/item/implant/dusting/E = new/obj/item/implant/dusting(H) + E.implant(H) company = /datum/corporation/mi13 diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm index 659ca975daed..6c51aa62314d 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook.dm @@ -332,12 +332,6 @@ item_path = /obj/item/gun/magic/staff/locker category = "Defensive" -/datum/spellbook_entry/item/scryingorb - name = "Scrying Orb" - desc = "An incandescent orb of crackling energy. Using it will allow you to release your ghost while alive, allowing you to spy upon the station and talk to the deceased. In addition, buying it will permanently grant you X-ray vision." - item_path = /obj/item/scrying - category = "Defensive" - /datum/spellbook_entry/item/soulstones name = "Six Soul Stone Shards and the spell Artificer" desc = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying. The spell Artificer allows you to create arcane machines for the captured souls to pilot." 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/chameleon.dm b/code/modules/clothing/chameleon.dm index 5c4d2ad7e2ee..66ce4ad7cc74 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -219,8 +219,7 @@ if(isitem(target)) var/obj/item/I = target I.item_state = initial(picked_item.item_state) - I.item_color = initial(picked_item.item_color) - I.alternate_worn_icon = initial(picked_item.alternate_worn_icon) + I.mob_overlay_icon = initial(picked_item.mob_overlay_icon) if(istype(I, /obj/item/clothing) && istype(initial(picked_item), /obj/item/clothing)) var/obj/item/clothing/CL = I var/obj/item/clothing/PCL = picked_item @@ -263,7 +262,6 @@ name = "black jumpsuit" icon_state = "black" item_state = "bl_suit" - item_color = "black" desc = "It's a plain jumpsuit. It has a small dial on the wrist." sensor_mode = SENSOR_OFF //Hey who's this guy on the Syndicate Shuttle?? random_sensor = FALSE @@ -281,7 +279,6 @@ desc = "A tough jumpsuit woven from alloy threads. It can take on the appearance of other jumpsuits." icon_state = "engine" item_state = "engi_suit" - item_color = "engine" /obj/item/clothing/under/chameleon/Initialize() . = ..() @@ -408,7 +405,6 @@ name = "grey cap" desc = "It's a baseball hat in a tasteful grey colour." icon_state = "greysoft" - item_color = "grey" resistance_flags = NONE armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) @@ -519,7 +515,6 @@ /obj/item/clothing/shoes/chameleon name = "black shoes" icon_state = "black" - item_color = "black" desc = "A pair of black shoes." permeability_coefficient = 0.05 resistance_flags = NONE @@ -550,7 +545,6 @@ /obj/item/clothing/shoes/chameleon/noslip name = "black shoes" icon_state = "black" - item_color = "black" desc = "A pair of black shoes." clothing_flags = NOSLIP can_be_bloody = FALSE diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 4391e3621f34..129f457954ea 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -293,13 +293,13 @@ BLIND // can't see anything /proc/generate_female_clothing(index,t_color,icon,type) //In a shellnut, blends the uniform sprite with a pre-made sprite in uniform.dmi that's mostly white pixels with a few empty ones to trim off the pixels in the empty spots var/icon/female_clothing_icon = icon(icon, t_color) // and make the uniform the "female" shape. female_s is either the top-only one (for jumpskirts and the like) or the full one (for jumpsuits) - var/icon/female_s = icon('icons/mob/uniform.dmi', "[(type == FEMALE_UNIFORM_FULL) ? "female_full" : "female_top"]") + var/icon/female_s = icon('icons/effects/clothing.dmi', "[(type == FEMALE_UNIFORM_FULL) ? "female_full" : "female_top"]") female_clothing_icon.Blend(female_s, ICON_MULTIPLY) GLOB.female_clothing_icons[index] = fcopy_rsc(female_clothing_icon) //Then it saves the icon in a global list so it doesn't have to make it again /proc/generate_skinny_clothing(index,t_color,icon,type) //Works the exact same as above but for skinny people var/icon/skinny_clothing_icon = icon(icon, t_color) - var/icon/skinny_s = icon('icons/mob/uniform.dmi', "[(type == FEMALE_UNIFORM_FULL) ? "skinny_full" : "skinny_top"]") //Hooks into same check to see if it's eligible + var/icon/skinny_s = icon('icons/effects/clothing.dmi', "[(type == FEMALE_UNIFORM_FULL) ? "skinny_full" : "skinny_top"]") //Hooks into same check to see if it's eligible skinny_clothing_icon.Blend(skinny_s, ICON_MULTIPLY) GLOB.skinny_clothing_icons[index] = fcopy_rsc(skinny_clothing_icon) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index f2be9aff8c6e..a3f273bbcc09 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -322,7 +322,7 @@ . = list() if(!isinhands && ishuman(loc) && !colored_before) var/mob/living/carbon/human/H = loc - var/mutable_appearance/M = mutable_appearance('icons/mob/eyes.dmi', "blindfoldwhite") + var/mutable_appearance/M = mutable_appearance('icons/mob/clothing/eyes/eyes.dmi', "blindfoldwhite") M.appearance_flags |= RESET_COLOR M.color = "#[H.eye_color]" . += M diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 891d72d95e61..ed9be54ef292 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -1,3 +1,7 @@ +/obj/item/clothing/gloves/color + dying_key = DYE_REGISTRY_GLOVES + +/obj/item/clothing/gloves/color/yellow /obj/item/clothing/gloves/color/yellow desc = "These gloves will protect the wearer from electric shock." name = "insulated gloves" @@ -5,7 +9,6 @@ item_state = "ygloves" siemens_coefficient = 0 permeability_coefficient = 0.05 - item_color="yellow" resistance_flags = NONE /obj/item/clothing/gloves/color/fyellow //Cheap Chinese Crap @@ -15,7 +18,6 @@ item_state = "ygloves" siemens_coefficient = 0 permeability_coefficient = 0.05 - item_color = "yellow" resistance_flags = NONE var/damaged = FALSE @@ -37,7 +39,6 @@ name = "black gloves" icon_state = "black" item_state = "blackgloves" - item_color="black" cold_protection = HANDS min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT heat_protection = HANDS @@ -51,12 +52,6 @@ icon_state = "forensic" can_be_cut = 0 -/obj/item/clothing/gloves/color/black/hos - item_color = "hosred" //Exists for washing machines. Is not different from black gloves in any way. - -/obj/item/clothing/gloves/color/black/ce - item_color = "chief" //Exists for washing machines. Is not different from black gloves in any way. - /obj/item/clothing/gloves/color/black/attackby(obj/item/I, mob/user, params) if(I.tool_behaviour == TOOL_WIRECUTTER) if(can_be_cut && icon_state == initial(icon_state))//only if not dyed @@ -86,14 +81,12 @@ desc = "A pair of gloves, they don't look special in any way." icon_state = "orange" item_state = "orangegloves" - item_color="orange" /obj/item/clothing/gloves/color/red name = "red gloves" desc = "A pair of gloves, they don't look special in any way." icon_state = "red" item_state = "redgloves" - item_color = "red" /obj/item/clothing/gloves/color/red/insulated @@ -108,68 +101,48 @@ desc = "A pair of gloves, they don't look special in any way." icon_state = "rainbow" item_state = "rainbowgloves" - item_color = "rainbow" - -/obj/item/clothing/gloves/color/rainbow/clown - item_color = "clown" /obj/item/clothing/gloves/color/blue name = "blue gloves" desc = "A pair of gloves, they don't look special in any way." icon_state = "blue" item_state = "bluegloves" - item_color="blue" /obj/item/clothing/gloves/color/purple name = "purple gloves" desc = "A pair of gloves, they don't look special in any way." icon_state = "purple" item_state = "purplegloves" - item_color="purple" /obj/item/clothing/gloves/color/green name = "green gloves" desc = "A pair of gloves, they don't look special in any way." icon_state = "green" item_state = "greengloves" - item_color="green" /obj/item/clothing/gloves/color/grey name = "grey gloves" desc = "A pair of gloves, they don't look special in any way." icon_state = "gray" item_state = "graygloves" - item_color="grey" - -/obj/item/clothing/gloves/color/grey/rd - item_color = "director" //Exists for washing machines. Is not different from gray gloves in any way. - -/obj/item/clothing/gloves/color/grey/hop - item_color = "hop" //Exists for washing machines. Is not different from gray gloves in any way. /obj/item/clothing/gloves/color/light_brown name = "light brown gloves" desc = "A pair of gloves, they don't look special in any way." icon_state = "lightbrown" item_state = "lightbrowngloves" - item_color="light brown" /obj/item/clothing/gloves/color/brown name = "brown gloves" desc = "A pair of gloves, they don't look special in any way." icon_state = "brown" item_state = "browngloves" - item_color="brown" - -/obj/item/clothing/gloves/color/brown/cargo - item_color = "cargo" //Exists for washing machines. Is not different from brown gloves in any way. /obj/item/clothing/gloves/color/captain desc = "Regal blue gloves, with a nice gold trim, a diamond anti-shock coating, and an integrated thermal barrier. Swanky." name = "captain's gloves" icon_state = "captain" item_state = "egloves" - item_color = "captain" siemens_coefficient = 0 permeability_coefficient = 0.05 cold_protection = HANDS @@ -198,7 +171,6 @@ item_state = "lgloves" siemens_coefficient = 0.3 permeability_coefficient = 0.01 - item_color="mime" transfer_prints = TRUE resistance_flags = NONE var/carrytrait = TRAIT_QUICK_CARRY @@ -208,7 +180,6 @@ desc = "Pricey sterile gloves that are stronger than latex. Transfers intimate paramedic knowledge into the user via nanochips." icon_state = "nitrile" item_state = "nitrilegloves" - item_color = "cmo" transfer_prints = FALSE carrytrait = TRAIT_QUICKER_CARRY @@ -226,10 +197,6 @@ desc = "These look pretty fancy." icon_state = "white" item_state = "wgloves" - item_color="white" - -/obj/item/clothing/gloves/color/white/redcoat - item_color = "redcoat" //Exists for washing machines. Is not different from white gloves in any way. /obj/effect/spawner/lootdrop/gloves name = "random gloves" diff --git a/code/modules/clothing/gloves/knifeboxing.dm b/code/modules/clothing/gloves/knifeboxing.dm index 938e322bdae0..c42616477c44 100644 --- a/code/modules/clothing/gloves/knifeboxing.dm +++ b/code/modules/clothing/gloves/knifeboxing.dm @@ -2,6 +2,6 @@ name = "knife gloves" desc = "I'm here to punch people in the face with knives." icon = 'icons/obj/clothing/gloves.dmi' - alternate_worn_icon = 'icons/mob/hands.dmi' + mob_overlay_icon = 'icons/mob/clothing/hands/hands.dmi' icon_state = "knife_boxing" item_state = "knife_boxing" diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 619c6fa3c982..45552336cccd 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -4,13 +4,13 @@ desc = "Plain black gloves without fingertips for the hard working." icon_state = "fingerless" item_state = "fingerless" - item_color = null //So they don't wash. transfer_prints = TRUE strip_delay = 40 equip_delay_other = 20 cold_protection = HANDS min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT custom_price = 10 + undyeable = TRUE /obj/item/clothing/gloves/botanic_leather name = "botanist's leather gloves" @@ -45,7 +45,6 @@ desc = "For when you're expecting to get slapped on the wrist. Offers modest protection to your arms." icon_state = "bracers" item_state = "bracers" - item_color = null //So they don't wash. transfer_prints = TRUE strip_delay = 40 equip_delay_other = 20 @@ -95,7 +94,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 +115,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 +153,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/clothing/head/beanie.dm b/code/modules/clothing/head/beanie.dm index da676d9d763f..ed06e0202670 100644 --- a/code/modules/clothing/head/beanie.dm +++ b/code/modules/clothing/head/beanie.dm @@ -7,7 +7,6 @@ name = "white beanie" desc = "A stylish beanie. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their heads." icon_state = "beanie" //Default white - item_color = "beanie" custom_price = 10 /obj/item/clothing/head/beanie/black @@ -55,39 +54,32 @@ /obj/item/clothing/head/beanie/christmas name = "christmas beanie" icon_state = "beaniechristmas" - item_color = "beaniechristmas" /obj/item/clothing/head/beanie/striped name = "striped beanie" icon_state = "beaniestriped" - item_color = "beaniestriped" /obj/item/clothing/head/beanie/stripedred name = "red striped beanie" icon_state = "beaniestripedred" - item_color = "beaniestripedred" /obj/item/clothing/head/beanie/stripedblue name = "blue striped beanie" icon_state = "beaniestripedblue" - item_color = "beaniestripedblue" /obj/item/clothing/head/beanie/stripedgreen name = "green striped beanie" icon_state = "beaniestripedgreen" - item_color = "beaniestripedgreen" /obj/item/clothing/head/beanie/durathread name = "durathread beanie" desc = "A beanie made from durathread, its resilient fibres provide some protection to the wearer." icon_state = "beaniedurathread" - item_color = null armor = list(MELEE = 15, BULLET = 5, LASER = 15, ENERGY = 5, BOMB = 10, BIO = 0, RAD = 0, FIRE = 30, ACID = 5) /obj/item/clothing/head/beanie/waldo name = "red striped bobble hat" desc = "If you're going on a worldwide hike, you'll need some cold protection." icon_state = "waldo_hat" - item_color = "waldo_hat" //No dog fashion sprites yet :( poor Ian can't be dope like the rest of us yet diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index bc4f6bebb8cb..ef8239f0dfc8 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -3,9 +3,11 @@ desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight." icon_state = "hardhat0_yellow" item_state = "hardhat0_yellow" + mob_overlay_icon = 'icons/mob/clothing/head/head.dmi' var/brightness_on = 4 //luminosity when on var/on = FALSE - item_color = "yellow" //Determines used sprites: hardhat[on]_[item_color] and hardhat[on]_[item_color]2 (lying down sprite) + //Determines used sprites: hardhat[on]_[hat_type] + var/hat_type = "yellow" armor = list(MELEE = 15, BULLET = 5, LASER = 20, ENERGY = 10, BOMB = 20, BIO = 10, RAD = 20, FIRE = 100, ACID = 50, WOUND = 10) flags_inv = 0 actions_types = list(/datum/action/item_action/toggle_helmet_light) @@ -26,8 +28,8 @@ update_icon() /obj/item/clothing/head/hardhat/update_icon() - icon_state = "hardhat[on]_[item_color]" - item_state = "hardhat[on]_[item_color]" + icon_state = "hardhat[on]_[hat_type]" + item_state = "hardhat[on]_[hat_type]" if(ishuman(loc)) var/mob/living/carbon/human/H = loc H.update_inv_head() @@ -45,13 +47,13 @@ /obj/item/clothing/head/hardhat/orange icon_state = "hardhat0_orange" item_state = "hardhat0_orange" - item_color = "orange" + hat_type = "orange" dog_fashion = null /obj/item/clothing/head/hardhat/red icon_state = "hardhat0_red" item_state = "hardhat0_red" - item_color = "red" + hat_type = "red" dog_fashion = null name = "firefighter helmet" clothing_flags = STOPSPRESSUREDAMAGE @@ -63,7 +65,7 @@ /obj/item/clothing/head/hardhat/white icon_state = "hardhat0_white" item_state = "hardhat0_white" - item_color = "white" + hat_type = "white" clothing_flags = STOPSPRESSUREDAMAGE heat_protection = HEAD max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT @@ -74,13 +76,13 @@ /obj/item/clothing/head/hardhat/dblue icon_state = "hardhat0_dblue" item_state = "hardhat0_dblue" - item_color = "dblue" + hat_type = "dblue" dog_fashion = null /obj/item/clothing/head/hardhat/atmos icon_state = "hardhat0_atmos" item_state = "hardhat0_atmos" - item_color = "atmos" + hat_type = "atmos" dog_fashion = null name = "atmospheric technician's firefighting helmet" desc = "A firefighter's helmet, able to keep the user cool in any situation." @@ -124,9 +126,9 @@ /obj/item/clothing/head/hardhat/weldhat/worn_overlays(isinhands) . = ..() if(!isinhands) - . += mutable_appearance('icons/mob/head.dmi', "weldhelmet") + . += mutable_appearance(mob_overlay_icon, "weldhelmet") if(!up) - . += mutable_appearance('icons/mob/head.dmi', "weldvisor") + . += mutable_appearance(mob_overlay_icon, "weldvisor") /obj/item/clothing/head/hardhat/weldhat/update_icon() cut_overlays() @@ -137,14 +139,14 @@ /obj/item/clothing/head/hardhat/weldhat/orange icon_state = "hardhat0_orange" item_state = "hardhat0_orange" - item_color = "orange" + hat_type = "orange" /obj/item/clothing/head/hardhat/weldhat/white desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight AND welding shield!" //This bulb is not smaller icon_state = "hardhat0_white" item_state = "hardhat0_white" brightness_on = 4 //Boss always takes the best stuff - item_color = "white" + hat_type = "white" clothing_flags = STOPSPRESSUREDAMAGE heat_protection = HEAD max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT @@ -154,4 +156,4 @@ /obj/item/clothing/head/hardhat/weldhat/dblue icon_state = "hardhat0_dblue" item_state = "hardhat0_dblue" - item_color = "dblue" \ No newline at end of file + hat_type = "dblue" diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index e6cdf9b9dfac..1aceaaae6ceb 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -173,7 +173,6 @@ name = "durathread beret" desc = "A beret made from durathread, its resilient fibres provide some protection to the wearer." icon_state = "beretdurathread" - item_color = null armor = list(MELEE = 15, BULLET = 5, LASER = 15, ENERGY = 5, BOMB = 10, BIO = 0, RAD = 0, FIRE = 30, ACID = 5, WOUND = 5) //Security diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 34709a41f34f..b1677b6c1980 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -135,7 +135,7 @@ /obj/item/clothing/head/pirate name = "pirate hat" - desc = "Yarr." + desc = "Ahoy! This hat inspires you to take arms to scourge the several seas." icon_state = "pirate" item_state = "pirate" dog_fashion = /datum/dog_fashion/head/pirate @@ -161,13 +161,14 @@ to_chat(user, "You can no longer speak like a pirate.") /obj/item/clothing/head/pirate/captain - name = "pirate captain" + name = "pirate captain hat" + desc = "Ahoy! A hat befit only for the greatest pirates. May your exploits be legendary and your treasure hoard safe!" icon_state = "hgpiratecap" item_state = "hgpiratecap" -/obj/item/clothing/head/bandana +/obj/item/clothing/head/pirate/bandana name = "pirate bandana" - desc = "Yarr." + desc = "Ahoy! A colorful wrap to collect and wipe up sweat after long days at sea." icon_state = "bandana" item_state = "bandana" dynamic_hair_suffix = "" diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 0ca986a8f82f..db7a591f4b45 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -41,7 +41,7 @@ desc = "You put the cake on your head. Brilliant." icon_state = "hardhat0_cakehat" item_state = "hardhat0_cakehat" - item_color = "cakehat" + hat_type = "cakehat" hitsound = 'sound/weapons/tap.ogg' flags_inv = HIDEEARS|HIDEHAIR armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) @@ -112,7 +112,7 @@ desc = "A jack o' lantern! Believed to ward off evil spirits." icon_state = "hardhat0_pumpkin" item_state = "hardhat0_pumpkin" - item_color = "pumpkin" + hat_type = "pumpkin" flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) brightness_on = 2 //luminosity when on @@ -161,7 +161,7 @@ desc = "Some fake antlers and a very fake red nose." icon_state = "hardhat0_reindeer" item_state = "hardhat0_reindeer" - item_color = "reindeer" + hat_type = "reindeer" flags_inv = 0 armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) brightness_on = 1 //luminosity when on @@ -361,3 +361,9 @@ icon_state = "halo" item_state = "halo" layer = EARS_LAYER + +/obj/item/clothing/head/rainbow_flower + name = "Rainbow Flower" + desc = "A cute, multicoloured flower. Makes you feel all warm and fuzzy inside." + icon_state = "rflower" + item_state = "rflower" diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index e6bb71b023f8..e4f808741a00 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -3,15 +3,16 @@ desc = "It's a baseball hat in a tasteless yellow colour." icon_state = "cargosoft" item_state = "helmet" - item_color = "cargo" + //Determines used sprites: [soft_type]soft + var/soft_type = "cargo" dog_fashion = /datum/dog_fashion/head/cargo_tech - var/flipped = 0 + var/flipped = FALSE /obj/item/clothing/head/soft/dropped() - src.icon_state = "[item_color]soft" - src.flipped=0 + icon_state = "[soft_type]soft" + flipped = FALSE ..() /obj/item/clothing/head/soft/verb/flipcap() @@ -31,12 +32,12 @@ /obj/item/clothing/head/soft/proc/flip(mob/user) if(!user.incapacitated()) - src.flipped = !src.flipped - if(src.flipped) - icon_state = "[item_color]soft_flipped" + flipped = !flipped + if(flipped) + icon_state = "[soft_type]soft_flipped" to_chat(user, span_notice("You flip the hat backwards.")) else - icon_state = "[item_color]soft" + icon_state = "[soft_type]soft" to_chat(user, span_notice("You flip the hat back in normal position.")) usr.update_inv_head() //so our mob-overlays update @@ -48,77 +49,77 @@ name = "red cap" desc = "It's a baseball hat in a tasteless red colour." icon_state = "redsoft" - item_color = "red" + soft_type = "red" dog_fashion = null /obj/item/clothing/head/soft/blue name = "blue cap" desc = "It's a baseball hat in a tasteless blue colour." icon_state = "bluesoft" - item_color = "blue" + soft_type = "blue" dog_fashion = null /obj/item/clothing/head/soft/green name = "green cap" desc = "It's a baseball hat in a tasteless green colour." icon_state = "greensoft" - item_color = "green" + soft_type = "green" dog_fashion = null /obj/item/clothing/head/soft/yellow name = "yellow cap" desc = "It's a baseball hat in a tasteless yellow colour." icon_state = "yellowsoft" - item_color = "yellow" + soft_type = "yellow" dog_fashion = null /obj/item/clothing/head/soft/grey name = "grey cap" desc = "It's a baseball hat in a tasteful grey colour." icon_state = "greysoft" - item_color = "grey" + soft_type = "grey" dog_fashion = null /obj/item/clothing/head/soft/orange name = "orange cap" desc = "It's a baseball hat in a tasteless orange colour." icon_state = "orangesoft" - item_color = "orange" + soft_type = "orange" dog_fashion = null /obj/item/clothing/head/soft/mime name = "white cap" desc = "It's a baseball hat in a tasteless white colour." icon_state = "mimesoft" - item_color = "mime" + soft_type = "mime" dog_fashion = null /obj/item/clothing/head/soft/purple name = "purple cap" desc = "It's a baseball hat in a tasteless purple colour." icon_state = "purplesoft" - item_color = "purple" + soft_type = "purple" dog_fashion = null /obj/item/clothing/head/soft/black name = "black cap" desc = "It's a baseball hat in a tasteless black colour." icon_state = "blacksoft" - item_color = "black" + soft_type = "black" dog_fashion = null /obj/item/clothing/head/soft/rainbow name = "rainbow cap" desc = "It's a baseball hat in a bright rainbow of colors." icon_state = "rainbowsoft" - item_color = "rainbow" + soft_type = "rainbow" dog_fashion = null /obj/item/clothing/head/soft/sec name = "security cap" desc = "It's a robust baseball hat in tasteful red colour." icon_state = "secsoft" - item_color = "sec" + soft_type = "sec" armor = list(MELEE = 30, BULLET = 25, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 20, ACID = 50) strip_delay = 60 dog_fashion = null @@ -127,12 +128,12 @@ name = "EMT cap" desc = "It's a baseball hat with a dark turquoise color and a reflective cross on the top." icon_state = "emtsoft" - item_color = "emt" + soft_type = "emt" dog_fashion = null /obj/item/clothing/head/soft/emt/green name = "green EMT cap" desc = "It's a baseball hat with a green color and a reflective cross on the top." icon_state = "emtgrsoft" - item_color = "emtgr" + soft_type = "emtgr" dog_fashion = null diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index e1cf59877f98..3b6f7a655cfd 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -54,6 +54,7 @@ clothing_flags = MASKINTERNALS icon_state = "clown" item_state = "clown_hat" + dye_color = "clown" flags_cover = MASKCOVERSEYES resistance_flags = FLAMMABLE actions_types = list(/datum/action/item_action/adjust) diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 9579b29d7426..4a1a60dc047f 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -137,7 +137,7 @@ /obj/item/clothing/mask/cowmask name = "cow mask" - icon = 'icons/mob/mask.dmi' + icon = 'icons/mob/clothing/mask/mask.dmi' icon_state = "cowmask" item_state = "cowmask" clothing_flags = VOICEBOX_TOGGLABLE diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index f4deb64f030c..c3e2087faafb 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -21,42 +21,35 @@ icon = 'icons/obj/clothing/neck.dmi' icon_state = "bluetie" item_state = "" //no inhands - item_color = "bluetie" w_class = WEIGHT_CLASS_SMALL custom_price = 15 /obj/item/clothing/neck/tie/blue name = "blue tie" icon_state = "bluetie" - item_color = "bluetie" /obj/item/clothing/neck/tie/red name = "red tie" icon_state = "redtie" - item_color = "redtie" /obj/item/clothing/neck/tie/black name = "black tie" icon_state = "blacktie" - item_color = "blacktie" /obj/item/clothing/neck/tie/horrible name = "horrible tie" desc = "A neosilk clip-on tie. This one is disgusting." icon_state = "horribletie" - item_color = "horribletie" /obj/item/clothing/neck/tie/detective name = "loose tie" desc = "A loosely tied necktie, a perfect accessory for the over-worked detective." icon_state = "detective" - item_color = "detective" /obj/item/clothing/neck/stethoscope name = "stethoscope" desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing." icon_state = "stethoscope" - item_color = "stethoscope" /obj/item/clothing/neck/stethoscope/suicide_act(mob/living/carbon/user) user.visible_message(span_suicide("[user] puts \the [src] to [user.p_their()] chest! It looks like [user.p_they()] wont hear much!")) @@ -99,61 +92,51 @@ name = "white scarf" icon_state = "scarf" desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks." - item_color = "white" dog_fashion = /datum/dog_fashion/head custom_price = 10 /obj/item/clothing/neck/scarf/black name = "black scarf" - item_color = "black" icon_state = "scarf" color = "#4A4A4B" //Grey but it looks black /obj/item/clothing/neck/scarf/pink name = "pink scarf" - item_color = "pink" icon_state = "scarf" color = "#F699CD" //Pink /obj/item/clothing/neck/scarf/red name = "red scarf" - item_color = "red" icon_state = "scarf" color = "#D91414" //Red /obj/item/clothing/neck/scarf/green name = "green scarf" - item_color = "green" icon_state = "scarf" color = "#5C9E54" //Green /obj/item/clothing/neck/scarf/darkblue name = "dark blue scarf" - item_color = "blue" icon_state = "scarf" color = "#1E85BC" //Blue /obj/item/clothing/neck/scarf/purple name = "purple scarf" - item_color = "purple" icon_state = "scarf" color = "#9557C5" //Purple /obj/item/clothing/neck/scarf/yellow name = "yellow scarf" - item_color = "yellow" icon_state = "scarf" color = "#E0C14F" //Yellow /obj/item/clothing/neck/scarf/orange name = "orange scarf" - item_color = "orange" icon_state = "scarf" color = "#C67A4B" //Orange /obj/item/clothing/neck/scarf/cyan name = "cyan scarf" - item_color = "cyan" icon_state = "scarf" color = "#54A3CE" //Cyan @@ -163,12 +146,10 @@ /obj/item/clothing/neck/scarf/zebra name = "zebra scarf" icon_state = "zebrascarf" - item_color = "zebrascarf" /obj/item/clothing/neck/scarf/christmas name = "christmas scarf" icon_state = "christmasscarf" - item_color = "christmasscarf" //The three following scarves don't have the scarf subtype //This is because Ian can equip anything from that subtype @@ -176,26 +157,22 @@ /obj/item/clothing/neck/stripedredscarf name = "striped red scarf" icon_state = "stripedredscarf" - item_color = "stripedredscarf" custom_price = 10 /obj/item/clothing/neck/stripedgreenscarf name = "striped green scarf" icon_state = "stripedgreenscarf" - item_color = "stripedgreenscarf" custom_price = 10 /obj/item/clothing/neck/stripedbluescarf name = "striped blue scarf" icon_state = "stripedbluescarf" - item_color = "stripedbluescarf" custom_price = 10 /obj/item/clothing/neck/petcollar name = "pet collar" desc = "It has a little bell!" icon_state = "petcollar" - item_color = "petcollar" var/tagname = null /obj/item/clothing/neck/petcollar/Initialize() @@ -215,7 +192,6 @@ /obj/item/clothing/neck/artist name = "post-modern scarf" icon_state = "artist" - item_color = "artist" custom_price = 10 ////////////// @@ -227,7 +203,6 @@ desc = "Damn, it feels good to be a gangster." icon = 'icons/obj/clothing/neck.dmi' icon_state = "bling" - item_color = "bling" /obj/item/clothing/neck/neckerchief icon = 'icons/obj/clothing/masks.dmi' //In order to reuse the bandana sprite @@ -237,7 +212,7 @@ /obj/item/clothing/neck/neckerchief/worn_overlays(isinhands) . = ..() if(!isinhands) - var/mutable_appearance/realOverlay = mutable_appearance('icons/mob/mask.dmi', icon_state) + var/mutable_appearance/realOverlay = mutable_appearance(mob_overlay_icon, icon_state) realOverlay.pixel_y = -3 . += realOverlay diff --git a/code/modules/clothing/neck/skillcapes/skillcapes.dm b/code/modules/clothing/neck/skillcapes/skillcapes.dm index cca75227deb8..d7db45e67750 100644 --- a/code/modules/clothing/neck/skillcapes/skillcapes.dm +++ b/code/modules/clothing/neck/skillcapes/skillcapes.dm @@ -4,6 +4,7 @@ icon = 'icons/obj/clothing/skillcapes.dmi' icon_state = "ghost-skillcape" item_state = "ghost-skillcape" + mob_overlay_icon = 'icons/mob/clothing/neck/skillcapes.dmi' w_class = WEIGHT_CLASS_SMALL body_parts_covered = CHEST|GROIN|LEGS|ARMS flags_inv = HIDESUITSTORAGE diff --git a/code/modules/clothing/outfits/amber.dm b/code/modules/clothing/outfits/amber.dm index 581dbc90be04..d5e2a63d128e 100644 --- a/code/modules/clothing/outfits/amber.dm +++ b/code/modules/clothing/outfits/amber.dm @@ -6,7 +6,7 @@ name = "amber medic beret" desc = "A white beret for the mundane life of an amber task force medic." icon = 'yogstation/icons/obj/clothing/hats.dmi' - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon_state = "beret_ce" diff --git a/code/modules/clothing/outfits/plasmaman.dm b/code/modules/clothing/outfits/plasmaman.dm index 7669d1c86b02..36804d866293 100644 --- a/code/modules/clothing/outfits/plasmaman.dm +++ b/code/modules/clothing/outfits/plasmaman.dm @@ -629,7 +629,7 @@ uniform = /obj/item/clothing/under/plasmaman/chief_engineer shoes = /obj/item/clothing/shoes/sneakers/brown ears = /obj/item/radio/headset/heads/ce - gloves = /obj/item/clothing/gloves/color/black/ce + gloves = /obj/item/clothing/gloves/color/black belt = /obj/item/storage/belt/utility/chief/full backpack = /obj/item/storage/backpack/industrial satchel = /obj/item/storage/backpack/satchel/eng diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index 9c4b7ddf951c..70feb1afced8 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -83,10 +83,11 @@ uniform = /obj/item/clothing/under/pirate shoes = /obj/item/clothing/shoes/sneakers/brown suit = /obj/item/clothing/suit/pirate - head = /obj/item/clothing/head/bandana + head = /obj/item/clothing/head/pirate/bandana glasses = /obj/item/clothing/glasses/eyepatch /datum/outfit/pirate/space + uniform = /obj/item/clothing/under/pirate/space suit = /obj/item/clothing/suit/space/pirate head = /obj/item/clothing/head/helmet/space/pirate/bandana mask = /obj/item/clothing/mask/breath @@ -94,9 +95,13 @@ ears = /obj/item/radio/headset/syndicate id = /obj/item/card/id -/datum/outfit/pirate/space/captain +/datum/outfit/pirate/space/gunner head = /obj/item/clothing/head/helmet/space/pirate +/datum/outfit/pirate/space/captain + suit = /obj/item/clothing/suit/space/pirate/captain + head = /obj/item/clothing/head/helmet/space/pirate/captain + /datum/outfit/pirate/post_equip(mob/living/carbon/human/H) H.faction |= "pirate" diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm index 6437a42b751e..ba87098095a6 100644 --- a/code/modules/clothing/shoes/colour.dm +++ b/code/modules/clothing/shoes/colour.dm @@ -1,9 +1,9 @@ /obj/item/clothing/shoes/sneakers + dying_key = DYE_REGISTRY_SNEAKERS /obj/item/clothing/shoes/sneakers/black name = "black shoes" icon_state = "black" - item_color = "black" desc = "A pair of black shoes." custom_price = 20 @@ -12,80 +12,49 @@ heat_protection = FEET max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT -/obj/item/clothing/shoes/sneakers/black/redcoat - item_color = "redcoat" //Exists for washing machines. Is not different from black shoes in any way. - /obj/item/clothing/shoes/sneakers/brown name = "brown shoes" desc = "A pair of brown shoes." icon_state = "brown" - item_color = "brown" - -/obj/item/clothing/shoes/sneakers/brown/captain - item_color = "captain" //Exists for washing machines. Is not different from brown shoes in any way. - -/obj/item/clothing/shoes/sneakers/brown/hop - item_color = "hop" //Exists for washing machines. Is not different from brown shoes in any way. - -/obj/item/clothing/shoes/sneakers/brown/ce - item_color = "chief" //Exists for washing machines. Is not different from brown shoes in any way. - -/obj/item/clothing/shoes/sneakers/brown/rd - item_color = "director" //Exists for washing machines. Is not different from brown shoes in any way. - -/obj/item/clothing/shoes/sneakers/brown/cmo - item_color = "medical" //Exists for washing machines. Is not different from brown shoes in any way. - -/obj/item/clothing/shoes/sneakers/brown/qm - item_color = "cargo" //Exists for washing machines. Is not different from brown shoes in any way. /obj/item/clothing/shoes/sneakers/blue name = "blue shoes" icon_state = "blue" - item_color = "blue" /obj/item/clothing/shoes/sneakers/green name = "green shoes" icon_state = "green" - item_color = "green" /obj/item/clothing/shoes/sneakers/yellow name = "yellow shoes" icon_state = "yellow" - item_color = "yellow" /obj/item/clothing/shoes/sneakers/purple name = "purple shoes" icon_state = "purple" - item_color = "purple" /obj/item/clothing/shoes/sneakers/brown name = "brown shoes" icon_state = "brown" - item_color = "brown" /obj/item/clothing/shoes/sneakers/red name = "red shoes" desc = "Stylish red shoes." icon_state = "red" - item_color = "red" /obj/item/clothing/shoes/sneakers/white name = "white shoes" icon_state = "white" permeability_coefficient = 0.01 - item_color = "white" /obj/item/clothing/shoes/sneakers/rainbow name = "rainbow shoes" desc = "Very colorful shoes." icon_state = "rain_bow" - item_color = "rainbow" /obj/item/clothing/shoes/sneakers/orange name = "orange shoes" icon_state = "orange" - item_color = "orange" /obj/item/clothing/shoes/sneakers/orange/attack_self(mob/user) if (src.chained) diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 33f26ea16013..be968d49111e 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -4,7 +4,6 @@ /obj/item/clothing/shoes/sneakers/mime name = "mime shoes" icon_state = "mime" - item_color = "mime" /obj/item/clothing/shoes/combat //basic syndicate combat boots for nuke ops and mob corpses name = "combat boots" @@ -78,7 +77,6 @@ icon_state = "clown" item_state = "clown_shoes" slowdown = SHOES_SLOWDOWN+1 - item_color = "clown" pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes/clown var/datum/component/waddle var/enabled_waddle = TRUE @@ -132,7 +130,6 @@ item_state = "jackboots" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - item_color = "hosred" strip_delay = 50 equip_delay_other = 50 resistance_flags = NONE @@ -195,7 +192,6 @@ desc = "A pair of boots worn by the followers of Nar'Sie." icon_state = "cult" item_state = "cult" - item_color = "cult" cold_protection = FEET min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT heat_protection = FEET @@ -244,7 +240,6 @@ desc = "A specialized pair of combat boots with a built-in propulsion system for rapid foward movement." icon_state = "jetboots" item_state = "jetboots" - item_color = "hosred" resistance_flags = FIRE_PROOF pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes actions_types = list(/datum/action/item_action/bhop) diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 5c428394d912..0fa42b442ba8 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -10,7 +10,8 @@ var/brightness_on = 4 //luminosity when on var/on = FALSE var/obj/item/clothing/suit/space/hardsuit/suit - item_color = "engineering" //Determines used sprites: hardsuit[on]-[color] and hardsuit[on]-[color]2 (lying down sprite) + //Determines used sprites: hardsuit[on]-[hardsuit_type] + var/hardsuit_type = "engineering" actions_types = list(/datum/action/item_action/toggle_helmet_light) var/rad_count = 0 var/rad_record = 0 @@ -29,7 +30,7 @@ /obj/item/clothing/head/helmet/space/hardsuit/attack_self(mob/user) on = !on - icon_state = "[basestate][on]-[item_color]" + icon_state = "[basestate][on]-[hardsuit_type]" user.update_inv_head() //so our mob-overlays update if(on) @@ -102,6 +103,7 @@ actions_types = list(/datum/action/item_action/toggle_helmet) var/helmettype = /obj/item/clothing/head/helmet/space/hardsuit var/obj/item/tank/jetpack/suit/jetpack = null + var/hardsuit_type /obj/item/clothing/suit/space/hardsuit/Initialize() if(jetpack && ispath(jetpack)) @@ -166,8 +168,8 @@ desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding." icon_state = "hardsuit0-engineering" item_state = "eng_helm" + hardsuit_type = "engineering" armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 75, FIRE = 100, ACID = 75, WOUND = 10) - item_color = "engineering" resistance_flags = FIRE_PROOF /obj/item/clothing/suit/space/hardsuit/engine @@ -185,7 +187,7 @@ desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has thermal shielding." icon_state = "hardsuit0-atmospherics" item_state = "atmo_helm" - item_color = "atmospherics" + hardsuit_type = "atmospherics" armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 25, FIRE = 100, ACID = 75, WOUND = 10) heat_protection = HEAD //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT @@ -207,7 +209,7 @@ desc = "An advanced helmet designed for work in a hazardous, low pressure environment. Shines with a high polish." icon_state = "hardsuit0-white" item_state = "ce_helm" - item_color = "white" + hardsuit_type = "white" armor = list(MELEE = 40, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 90, WOUND = 10) heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT @@ -217,7 +219,7 @@ name = "advanced hardsuit" desc = "An advanced suit that protects against hazardous, low pressure environments. Shines with a high polish." item_state = "ce_hardsuit" - armor = list(MELEE = 40, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 50, BIO = 100, RAD = 90, FIRE = 100, ACID = 90, WOUND = 10) + armor = list(MELEE = 40, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 90, WOUND = 10) heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/elite @@ -229,7 +231,7 @@ desc = "A special helmet designed for work in a hazardous, low pressure environment. Has reinforced plating for wildlife encounters and dual floodlights." icon_state = "hardsuit0-mining" item_state = "mining_helm" - item_color = "mining" + hardsuit_type = "mining" max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF heat_protection = HEAD @@ -264,7 +266,7 @@ alt_desc = "A dual-mode advanced helmet designed for work in special operations. It is in combat mode. Property of Gorlex Marauders." icon_state = "hardsuit1-syndi" item_state = "syndie_helm" - item_color = "syndi" + hardsuit_type = "syndi" armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 35, BIO = 100, RAD = 50, FIRE = 50, ACID = 90, WOUND = 25) on = TRUE var/obj/item/clothing/suit/space/hardsuit/syndi/linkedsuit = null @@ -273,7 +275,7 @@ visor_flags = STOPSPRESSUREDAMAGE /obj/item/clothing/head/helmet/space/hardsuit/syndi/update_icon() - icon_state = "hardsuit[on]-[item_color]" + icon_state = "hardsuit[on]-[hardsuit_type]" /obj/item/clothing/head/helmet/space/hardsuit/syndi/Initialize() . = ..() @@ -329,7 +331,7 @@ linkedsuit.clothing_flags &= ~STOPSPRESSUREDAMAGE linkedsuit.cold_protection &= ~(CHEST | GROIN | LEGS | FEET | ARMS | HANDS) - linkedsuit.icon_state = "hardsuit[on]-[item_color]" + linkedsuit.icon_state = "hardsuit[on]-[hardsuit_type]" linkedsuit.update_icon() user.update_inv_wear_suit() user.update_inv_w_uniform() @@ -341,7 +343,7 @@ alt_desc = "A dual-mode advanced hardsuit designed for work in special operations. It is in combat mode. Property of Gorlex Marauders." icon_state = "hardsuit1-syndi" item_state = "syndie_hardsuit" - item_color = "syndi" + hardsuit_type = "syndi" w_class = WEIGHT_CLASS_NORMAL armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 35, BIO = 100, RAD = 50, FIRE = 50, ACID = 90, WOUND = 25) allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals) @@ -354,7 +356,7 @@ desc = "An elite version of the syndicate helmet, with improved armour and fireproofing. It is in EVA mode. Property of Gorlex Marauders." alt_desc = "An elite version of the syndicate helmet, with improved armour and fireproofing. It is in combat mode. Property of Gorlex Marauders." icon_state = "hardsuit0-syndielite" - item_color = "syndielite" + hardsuit_type = "syndielite" armor = list(MELEE = 60, BULLET = 60, LASER = 50, ENERGY = 25, BOMB = 55, BIO = 100, RAD = 70, FIRE = 100, ACID = 100, WOUND = 25) heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT @@ -365,7 +367,7 @@ desc = "An elite version of the syndicate hardsuit, with improved armour and fireproofing. It is in travel mode." alt_desc = "An elite version of the syndicate hardsuit, with improved armour and fireproofing. It is in combat mode." icon_state = "hardsuit0-syndielite" - item_color = "syndielite" + hardsuit_type = "syndielite" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite armor = list(MELEE = 60, BULLET = 60, LASER = 50, ENERGY = 25, BOMB = 55, BIO = 100, RAD = 70, FIRE = 100, ACID = 100, WOUND = 25) heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -379,7 +381,7 @@ alt_desc = "A dual-mode advanced helmet designed for any crime-fighting situation. It is in combat mode." icon_state = "hardsuit1-owl" item_state = "s_helmet" - item_color = "owl" + hardsuit_type = "owl" visor_flags_inv = 0 visor_flags = 0 on = FALSE @@ -390,7 +392,7 @@ alt_desc = "A dual-mode advanced hardsuit designed for any crime-fighting situation. It is in combat mode." icon_state = "hardsuit1-owl" item_state = "s_suit" - item_color = "owl" + hardsuit_type = "owl" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/owl //Carp hardsuit @@ -455,7 +457,7 @@ desc = "A bizarre gem-encrusted helmet that radiates magical energies." icon_state = "hardsuit0-wiz" item_state = "wiz_helm" - item_color = "wiz" + hardsuit_type = "wiz" resistance_flags = FIRE_PROOF | ACID_PROOF //No longer shall our kind be foiled by lone chemists with spray bottles! armor = list(MELEE = 20, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 25, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, WOUND = 30) heat_protection = HEAD //Uncomment to enable firesuit protection @@ -486,7 +488,7 @@ desc = "A special helmet designed for work in a hazardous, low pressure environment. Built with lightweight materials for extra comfort, but does not protect the eyes from intense light." icon_state = "hardsuit0-medical" item_state = "medical_helm" - item_color = "medical" + hardsuit_type = "medical" flash_protect = 0 armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 60, FIRE = 60, ACID = 75, WOUND = 10) clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | SCAN_REAGENTS @@ -506,7 +508,7 @@ name = "prototype hardsuit helmet" desc = "A prototype helmet designed for research in a hazardous, low pressure environment. Scientific data flashes across the visor." icon_state = "hardsuit0-rd" - item_color = "rd" + hardsuit_type = "rd" resistance_flags = ACID_PROOF | FIRE_PROOF max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 100, BIO = 100, RAD = 60, FIRE = 60, ACID = 80, WOUND = 15) @@ -559,7 +561,7 @@ desc = "A special helmet designed for work in a hazardous, low pressure environment. Has an additional layer of armor." icon_state = "hardsuit0-sec" item_state = "sec_helm" - item_color = "sec" + hardsuit_type = "sec" armor = list(MELEE = 35, BULLET = 25, LASER = 30,ENERGY = 10, BOMB = 10, BIO = 100, RAD = 50, FIRE = 75, ACID = 75, WOUND = 20) @@ -580,7 +582,7 @@ name = "head of security's hardsuit helmet" desc = "A special bulky helmet designed for work in a hazardous, low pressure environment. Has an additional layer of armor." icon_state = "hardsuit0-hos" - item_color = "hos" + hardsuit_type = "hos" armor = list(MELEE = 45, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 50, FIRE = 95, ACID = 95, WOUND = 25) @@ -642,8 +644,8 @@ desc = "A special helmet designed for work in a hazardous, low-humor environment. Has radiation shielding." icon_state = "hardsuit0-clown" item_state = "hardsuit0-clown" + hardsuit_type = "clown" armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 75, FIRE = 60, ACID = 30) - item_color = "clown" /obj/item/clothing/suit/space/hardsuit/clown name = "cosmohonk hardsuit" @@ -669,7 +671,7 @@ desc = "The integrated helmet of an ERT hardsuit, this one has blue highlights." icon_state = "hardsuit0-ert_commander" item_state = "hardsuit0-ert_commander" - item_color = "ert_commander" + hardsuit_type = "ert_commander" armor = list(MELEE = 65, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 80) strip_delay = 130 brightness_on = 7 @@ -699,7 +701,7 @@ desc = "The integrated helmet of an ERT hardsuit, this one has red highlights." icon_state = "hardsuit0-ert_security" item_state = "hardsuit0-ert_security" - item_color = "ert_security" + hardsuit_type = "ert_security" /obj/item/clothing/suit/space/hardsuit/ert/sec name = "emergency response team security hardsuit" @@ -714,7 +716,7 @@ desc = "The integrated helmet of an ERT hardsuit, this one has orange highlights." icon_state = "hardsuit0-ert_engineer" item_state = "hardsuit0-ert_engineer" - item_color = "ert_engineer" + hardsuit_type = "ert_engineer" /obj/item/clothing/suit/space/hardsuit/ert/engi name = "emergency response team engineering hardsuit" @@ -729,7 +731,7 @@ desc = "The integrated helmet of an ERT hardsuit, this one has white highlights." icon_state = "hardsuit0-ert_medical" item_state = "hardsuit0-ert_medical" - item_color = "ert_medical" + hardsuit_type = "ert_medical" /obj/item/clothing/suit/space/hardsuit/ert/med name = "emergency response team medical hardsuit" @@ -744,7 +746,7 @@ desc = "The integrated helmet of an ERT hardsuit, this one has purple highlights." icon_state = "hardsuit0-ert_janitor" item_state = "hardsuit0-ert_janitor" - item_color = "ert_janitor" + hardsuit_type = "ert_janitor" /obj/item/clothing/suit/space/hardsuit/ert/jani name = "emergency response team janitorial hardsuit" @@ -760,7 +762,7 @@ desc = "A helmet worn by those who deal with paranormal threats for a living." icon_state = "hardsuit0-prt" item_state = "hardsuit0-prt" - item_color = "knight_grey" + hardsuit_type = "knight_grey" max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT actions_types = list() resistance_flags = FIRE_PROOF @@ -813,8 +815,8 @@ desc = "Early prototype RIG hardsuit helmet, designed to quickly shift over a user's head. Design constraints of the helmet mean it has no inbuilt cameras, thus it restricts the users visability." icon_state = "hardsuit0-ancient" item_state = "anc_helm" + hardsuit_type = "ancient" armor = list(MELEE = 30, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 75) - item_color = "ancient" resistance_flags = FIRE_PROOF /obj/item/clothing/suit/space/hardsuit/ancient @@ -933,7 +935,7 @@ desc = "Standard issue hardsuit for playing capture the flag." icon_state = "ctf-white" item_state = null - item_color = "ctf-white" + hardsuit_type = "ctf-white" // Adding TRAIT_NODROP is done when the CTF spawner equips people helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf armor = list(MELEE = 0, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 50, BIO = 100, RAD = 100, FIRE = 95, ACID = 95) @@ -944,7 +946,7 @@ name = "red team armor" icon_state = "ctf-red" item_state = null - item_color = "ert_security" + hardsuit_type = "ert_security" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/red shield_state = "shield-red" shield_on = "shield-red" @@ -962,7 +964,7 @@ desc = "Standard issue hardsuit helmet for playing capture the flag." icon_state = "hardsuit0-ctf_white" item_state = null - item_color = "ert_medical" + hardsuit_type = "ert_medical" armor = list(MELEE = 0, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 50, BIO = 100, RAD = 100, FIRE = 95, ACID = 95) @@ -970,14 +972,14 @@ name = "red team helmet" icon_state = "hardsuit0-ctf_red" item_state = null - item_color = "ert_security" + hardsuit_type = "ert_security" /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/blue name = "blue team helmet" desc = "Standard issue hardsuit helmet for playing capture the flag." icon_state = "hardsuit0-ctf_blue" item_state = null - item_color = "ert_commander" + hardsuit_type = "ert_commander" @@ -990,7 +992,7 @@ desc = "An advanced hardsuit with built in energy shielding." icon_state = "hardsuit1-syndi" item_state = "syndie_hardsuit" - item_color = "syndi" + hardsuit_type = "syndi" armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 35, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, WOUND = 30) allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi @@ -1006,7 +1008,7 @@ desc = "An advanced hardsuit helmet with built in energy shielding." icon_state = "hardsuit1-syndi" item_state = "syndie_helm" - item_color = "syndi" + hardsuit_type = "syndi" armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 35, BIO = 100, RAD = 50, FIRE = 100, ACID = 100, WOUND = 30) ///Deathsquad version @@ -1044,7 +1046,7 @@ desc = "An advanced hardsuit favored by commandos for use in special operations." icon_state = "deathsquad" item_state = "swat_suit" - item_color = "syndi" + hardsuit_type = "syndi" max_charges = 4 current_charges = 4 recharge_delay = 15 @@ -1059,7 +1061,7 @@ desc = "A tactical helmet with built in energy shielding." icon_state = "deathsquad" item_state = "deathsquad" - item_color = "syndi" + hardsuit_type = "syndi" armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT @@ -1070,7 +1072,7 @@ desc = "A hilarious hardsuit favored by HONK squad troopers for use in special pranks." icon_state = "hardsuit-clown" item_state = "clown_hardsuit" - item_color = "clown" + hardsuit_type = "clown" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/swat/honk /obj/item/clothing/head/helmet/space/hardsuit/shielded/swat/honk @@ -1078,7 +1080,7 @@ desc = "A hilarious helmet with built-in anti-mime propaganda shielding." icon_state = "hardsuit0-clown" item_state = "hardsuit0-clown" - item_color = "clown" + hardsuit_type = "clown" //POWERARMORS //Currently are no different from normal hardsuits, except maybe for the higher armor ratings. @@ -1088,8 +1090,8 @@ desc = "It's some barely-functional power armor helmet from a by-gone age." icon_state = "hardsuit0-t45b" item_state = "t45b_helm" + hardsuit_type = "t45b" armor = list(MELEE = 50, BULLET = 48, LASER = 25, ENERGY = 25, BOMB = 48, BIO = 100, RAD = 50, FIRE = 50, ACID = 25) - item_color = "t45b" /obj/item/clothing/suit/space/hardsuit/powerarmor_t45b name = "Salvaged T-45b power armor" @@ -1098,15 +1100,15 @@ item_state = "t45b_hardsuit" armor = list(MELEE = 50, BULLET = 48, LASER = 25, ENERGY = 25, BOMB = 48, BIO = 0, RAD = 0, FIRE = 0, ACID = 25) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/powerarmor_t45b - item_color = "t45b" + hardsuit_type = "t45b" /obj/item/clothing/head/helmet/space/hardsuit/powerarmor_advanced name = "Advanced power helmet" desc = "It's an advanced power armor Mk I helmet. It looks somewhat threatening." icon_state = "hardsuit0-advpa1" item_state = "advpa1_helm" + hardsuit_type = "advpa1" armor = list(MELEE = 50, BULLET = 48, LASER = 25, ENERGY = 25, BOMB = 48, BIO = 0, RAD = 0, FIRE = 0, ACID = 25) - item_color = "advpa1" /obj/item/clothing/suit/space/hardsuit/powerarmor_advanced name = "Advanced power armor" @@ -1115,14 +1117,14 @@ item_state = "advpa1_hardsuit" armor = list(MELEE = 50, BULLET = 48, LASER = 25, ENERGY = 25, BOMB = 48, BIO = 0, RAD = 0, FIRE = 0, ACID = 25) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/powerarmor_advanced - item_color = "advancedpa1" + hardsuit_type = "advancedpa1" /obj/item/clothing/head/helmet/space/hardsuit/syndi/debug // reused code so I dont have to make new procs name = "debug hardsuit helmet" desc = "A debug hardsuit helmet. It is in EVA mode." alt_desc = "A debug hardsuit helmet. It is in combat mode." icon_state = "hardsuit0-syndielite" - item_color = "syndielite" + hardsuit_type = "syndielite" armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100) heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT @@ -1133,7 +1135,7 @@ desc = "A debug hardsuit. It is in travel mode." alt_desc = "A debug hardsuit. It is in combat mode." icon_state = "hardsuit0-syndielite" - item_color = "syndielite" + hardsuit_type = "syndielite" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/debug armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100) heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 46d9d14f7ed1..0e978e4eb681 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -107,34 +107,51 @@ Contains: //Space pirate outfit /obj/item/clothing/head/helmet/space/pirate - name = "pirate hat" - desc = "Yarr." + name = "syndicate pirate hat" + desc = "Ahoy! A reinforced hat worn by space privateers who thrill in stealing fine booty." icon_state = "pirate" item_state = "pirate" - armor = list(MELEE = 30, BULLET = 50, LASER = 30,ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75) + armor = list(MELEE = 30, BULLET = 50, LASER = 30, ENERGY = 25, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75) flags_inv = HIDEHAIR strip_delay = 40 equip_delay_other = 20 flags_cover = HEADCOVERSEYES /obj/item/clothing/head/helmet/space/pirate/bandana - name = "pirate bandana" + name = "syndicate pirate bandana" + desc = "Ahoy! Worn by typical maties who sail out to terrorize ships and stations alike. The bandana is reinforced." icon_state = "bandana" item_state = "bandana" +/obj/item/clothing/head/helmet/space/pirate/captain + name = "syndicate pirate captain hat" + desc = "Ahoy! The pinnacle of terror of hardened Syndicate captains who lead violent crews to plunder and glory. Reinforced to keep your skull on your skeleton." + armor = list(MELEE = 40, BULLET = 60, LASER = 40, ENERGY = 25, BOMB = 50, BIO = 30, RAD = 30, FIRE = 100, ACID = 100, WOUND = 10) + resistance_flags = FIRE_PROOF | ACID_PROOF + icon_state = "hgpiratecap" + item_state = "hgpiratecap" + /obj/item/clothing/suit/space/pirate - name = "pirate coat" - desc = "Yarr." + name = "syndicate pirate coat" + desc = "Argh! The standard armor of freelance forces contracted by the Syndicate to terrorize and disrupt commercial operations." icon_state = "pirate" item_state = "pirate" w_class = WEIGHT_CLASS_NORMAL flags_inv = 0 - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/melee/transforming/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/reagent_containers/food/drinks/bottle/rum) + allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/melee/transforming/energy/sword/pirate, /obj/item/melee/cutlass, /obj/item/reagent_containers/food/drinks/bottle/rum) slowdown = 0 - armor = list(MELEE = 30, BULLET = 50, LASER = 30,ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75) + armor = list(MELEE = 30, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75) strip_delay = 40 equip_delay_other = 20 +/obj/item/clothing/suit/space/pirate/captain + name = "syndicate pirate captain coat" + desc = "Argh! Adorned with immeasurable protection, this coat serves the most fearsome Syndicate pirates in their neverending quest of loot." + armor = list(MELEE = 40, BULLET = 60, LASER = 40, ENERGY = 25, BOMB = 50, BIO = 30, RAD = 30, FIRE = 100, ACID = 100, WOUND = 10) + resistance_flags = FIRE_PROOF | ACID_PROOF + icon_state = "hgpirate" + item_state = "hgpirate" + /obj/item/clothing/suit/space/paramedic name = "medical space suit" desc = "A suit that protects against low pressure environments. Has a big cross on the back." diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 48b456ae3dd8..444450905f98 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -161,7 +161,7 @@ /obj/item/clothing/suit/armor/pathfinder name = "pathfinder cloak" desc = "A thick cloak woven from sinew and hides meant to protect its wearer from hazardous weather." - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/twohanded/spear, /obj/item/twohanded/bonespear, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat/bone, /obj/item/kitchen/knife/combat/survival) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/twohanded/spear, /obj/item/twohanded/bonespear, /obj/item/claymore/bone, /obj/item/gun/ballistic/bow, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat) icon_state = "pathcloak" item_state = "pathcloak" armor = list(MELEE = 35, BULLET = 25, LASER = 25, ENERGY = 10, BOMB = 50, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, WOUND = 15) @@ -331,7 +331,7 @@ name = "goliath cloak" icon_state = "goliath_cloak" desc = "A staunch, practical cape made out of numerous monster materials, it is coveted amongst exiles & hermits." - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/twohanded/spear, /obj/item/twohanded/bonespear, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat/bone, /obj/item/kitchen/knife/combat/survival) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/twohanded/spear, /obj/item/twohanded/bonespear, /obj/item/claymore/bone, /obj/item/gun/ballistic/bow, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat) armor = list(MELEE = 35, BULLET = 25, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, WOUND = 10) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot resistance_flags = FIRE_PROOF hoodtype = /obj/item/clothing/head/hooded/cloakhood/goliath @@ -367,7 +367,7 @@ name = "drake armour" icon_state = "dragon" desc = "A suit of armour fashioned from the remains of an ash drake." - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/twohanded/spear) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/twohanded/spear, /obj/item/twohanded/bonespear, /obj/item/claymore/bone, /obj/item/gun/ballistic/bow, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat) armor = list(MELEE = 70, BULLET = 30, LASER = 50, ENERGY = 40, BOMB = 70, BIO = 60, RAD = 50, FIRE = 100, ACID = 100) hoodtype = /obj/item/clothing/head/hooded/cloakhood/drake heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index e8e8b09a6bd9..1fb1ba641237 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -1,7 +1,6 @@ /obj/item/clothing/suit/toggle/labcoat name = "labcoat" desc = "A suit that protects against minor chemical spills." - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' //yogs - labcoat sprite tweaks icon_state = "labcoat" item_state = "labcoat" blood_overlay_type = "coat" @@ -26,14 +25,12 @@ /obj/item/clothing/suit/toggle/labcoat/emt name = "\improper EMT's jacket" desc = "A dark blue jacket with reflective strips for emergency medical technicians." - alternate_worn_icon = 'icons/mob/suit.dmi' //yogs - subtype of labcoat, retains worn sprite icon_state = "labcoat_emt" item_state = "labcoat_cmo" /obj/item/clothing/suit/toggle/labcoat/emt/green name = "\improper green EMT's jacket" desc = "A green jacket with reflective strips for emergency medical technicians." - alternate_worn_icon = 'icons/mob/suit.dmi' //yogs - subtype of labcoat, retains worn sprite icon_state = "labcoat_emtgr" item_state = "labcoat_cmo" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 22345cb8829e..51fa084733ad 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -51,14 +51,14 @@ /obj/item/clothing/suit/pirate name = "pirate coat" - desc = "Yarr." + desc = "Arrrgh! A bulky coat worn by the terrors of the seas." icon_state = "pirate" item_state = "pirate" - allowed = list(/obj/item/melee/transforming/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/reagent_containers/food/drinks/bottle/rum) + allowed = list(/obj/item/melee/transforming/energy/sword/pirate, /obj/item/melee/cutlass, /obj/item/reagent_containers/food/drinks/bottle/rum, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) /obj/item/clothing/suit/pirate/captain name = "pirate captain coat" - desc = "Yarr." + desc = "Arrrgh! This treacherous garb of a seaworthy captain instills great fear in those who gaze upon it." icon_state = "hgpirate" item_state = "hgpirate" @@ -561,6 +561,20 @@ /obj/item/clothing/head/hooded/winterhood/captain icon_state = "winterhood_captain" +/obj/item/clothing/suit/hooded/wintercoat/hop + name = "head of personnel's winter coat" + desc = "A cozy winter coat, covered in thick fur. The breast features a proud yellow chevron, reminding everyone that you're the second banana." + icon_state = "coathop" + item_state = "coathop" + armor = list(MELEE = 10, BULLET = 15, LASER = 15, ENERGY = 25, BOMB = 10, BIO = 0, RAD = 0, FIRE = 0, ACID = 35) + allowed = list( + /obj/item/melee/classic_baton, + ) + hoodtype = /obj/item/clothing/head/hooded/winterhood/hop + +/obj/item/clothing/head/hooded/winterhood/hop + icon_state = "winterhood_hop" + /obj/item/clothing/suit/hooded/wintercoat/security name = "security winter coat" icon_state = "coatsecurity" @@ -575,6 +589,19 @@ /obj/item/clothing/head/hooded/winterhood/security icon_state = "winterhood_security" +/obj/item/clothing/suit/hooded/wintercoat/security/hos + name = "head of security's winter coat" + desc = "A red, armour-padded winter coat, lovingly woven with a Kevlar interweave and reinforced with semi-ablative polymers and a silver azide fill material. The zipper tab looks like a tiny replica of Beepsky." + icon_state = "coathos" + item_state = "coathos" + armor = list(MELEE = 35, BULLET = 25, LASER = 40, ENERGY = 20, BOMB = 35, BIO = 0, RAD = 0, FIRE = 0, ACID = 55) + hoodtype = /obj/item/clothing/head/hooded/winterhood/security/hos + +/obj/item/clothing/head/hooded/winterhood/security/hos + desc = "A red, armour-padded winter hood, lovingly woven with a Kevlar interweave. Definitely not bulletproof, especially not the part where your face goes." + icon_state = "winterhood_hos" + armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 5, BIO = 0, RAD = 0, FIRE = 0, ACID = 55) + /obj/item/clothing/suit/hooded/wintercoat/medical name = "medical winter coat" icon_state = "coatmedical" @@ -586,6 +613,25 @@ /obj/item/clothing/head/hooded/winterhood/medical icon_state = "winterhood_medical" +/obj/item/clothing/suit/hooded/wintercoat/medical/cmo + name = "chief medical officer's winter coat" + desc = "A winter coat in a vibrant shade of blue with a small silver caduceus instead of a plastic zipper tab. The normal liner is replaced with an exceptionally thick, soft layer of fur." + icon_state = "coatcmo" + item_state = "coatcmo" + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 50, RAD = 0, FIRE = 20, ACID = 30) + hoodtype = /obj/item/clothing/head/hooded/winterhood/medical/cmo + +/obj/item/clothing/suit/hooded/wintercoat/medical/cmo/Initialize(mapload) + . = ..() + allowed += list( + /obj/item/melee/classic_baton, + ) + +/obj/item/clothing/head/hooded/winterhood/medical/cmo + desc = "A blue winter coat hood." + icon_state = "winterhood_cmo" + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 50, RAD = 0, FIRE = 20, ACID = 30) + /obj/item/clothing/suit/hooded/wintercoat/science name = "science winter coat" icon_state = "coatscience" @@ -597,6 +643,25 @@ /obj/item/clothing/head/hooded/winterhood/science icon_state = "winterhood_science" +/obj/item/clothing/suit/hooded/wintercoat/science/rd + name = "research director's advanced thermal insulator" + desc = "A thick arctic winter coat with an outdated atomic model instead of a plastic zipper tab. Most in the know are heavily aware that Bohr's model of the atom was outdated by the time of the 1930s when the Heisenbergian and Schrodinger models were generally accepted for true. Nevertheless, we still see its use in anachronism, roleplaying, and, in this case, as a zipper tab. At least it should keep you warm on your ivory pillar." + icon_state = "coatrd" + item_state = "coatrd" + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 20, BIO = 0, RAD = 0, FIRE = 30, ACID = 0) + hoodtype = /obj/item/clothing/head/hooded/winterhood/science/rd + +/obj/item/clothing/suit/hooded/wintercoat/science/rd/Initialize(mapload) + . = ..() + allowed += list( + /obj/item/melee/classic_baton, + ) + +/obj/item/clothing/head/hooded/winterhood/science/rd + desc = "A white winter coat hood. It smells faintly of hair gel." + icon_state = "winterhood_rd" + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 20, BIO = 0, RAD = 0, FIRE = 30, ACID = 0) + /obj/item/clothing/suit/hooded/wintercoat/engineering name = "engineering winter coat" icon_state = "coatengineer" @@ -607,6 +672,26 @@ /obj/item/clothing/head/hooded/winterhood/engineering icon_state = "winterhood_engineer" + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 20, ACID = 10) + +/obj/item/clothing/suit/hooded/wintercoat/engineering/ce + name = "chief engineer's winter coat" + desc = "A white winter coat with reflective green and yellow stripes made for the truly insane. Stuffed with asbestos, treated with fire retardant PBDE, lined with a micro thin sheet of lead foil and snugly fitted to your body's measurements. This baby's ready to save you from anything except the thyroid cancer and systemic fibrosis you'll get from wearing it. The zipper tab is a tiny golden wrench." + icon_state = "coatce" + item_state = "coatce" + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 30, FIRE = 40, ACID = 10) + hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering/ce + +/obj/item/clothing/suit/hooded/wintercoat/engineering/ce/Initialize(mapload) + . = ..() + allowed += list( + /obj/item/melee/classic_baton, + ) + +/obj/item/clothing/head/hooded/winterhood/engineering/ce + desc = "A white winter coat hood. Feels surprisingly heavy. The tag says that it's not child safe." + icon_state = "winterhood_ce" + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 15, FIRE = 30, ACID = 10) /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos name = "atmospherics winter coat" diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index fab3abb651e1..55d79f0841c4 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -20,7 +20,6 @@ var/mutable_appearance/accessory_overlay var/mutantrace_variation = NO_MUTANTRACE_VARIATION //Are there special sprites for specific situations? Don't use this unless you need to. var/freshly_laundered = FALSE - var/dodgy_colours = FALSE tearable = TRUE //all jumpsuits can be torn down and used for cloth in an emergency | yogs /obj/item/clothing/under/worn_overlays(isinhands = FALSE) @@ -137,10 +136,8 @@ if(user && notifyAttach) to_chat(user, span_notice("You attach [I] to [src].")) - var/accessory_color = attached_accessory.item_color - if(!accessory_color) - accessory_color = attached_accessory.icon_state - accessory_overlay = mutable_appearance('icons/mob/accessories.dmi', "[accessory_color]") + var/accessory_color = attached_accessory.icon_state + accessory_overlay = mutable_appearance(attached_accessory.mob_overlay_icon, "[accessory_color]") accessory_overlay.alpha = attached_accessory.alpha accessory_overlay.color = attached_accessory.color @@ -178,8 +175,6 @@ /obj/item/clothing/under/examine(mob/user) . = ..() - if(dodgy_colours) - . += "The colours are a bit dodgy." if(freshly_laundered) . += "It looks fresh and clean." if(can_adjust) @@ -201,3 +196,6 @@ . += "Its vital tracker and tracking beacon appear to be enabled." if(attached_accessory) . += "\A [attached_accessory] is attached to it." + +/obj/item/clothing/under/rank + dying_key = DYE_REGISTRY_UNDER diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index 01057516b5ea..9446af1c47b9 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/clothing/accessories.dmi' icon_state = "plasma" item_state = "" //no inhands - item_color = "plasma" //On accessories, this controls the worn sprite. That's a bit weird. + mob_overlay_icon = 'icons/mob/clothing/accessories.dmi' slot_flags = 0 w_class = WEIGHT_CLASS_SMALL var/above_suit = FALSE @@ -91,7 +91,6 @@ desc = "For some classy, murderous fun." icon_state = "waistcoat" item_state = "waistcoat" - item_color = "waistcoat" minimize_when_attached = FALSE attachment_slot = null @@ -100,10 +99,10 @@ desc = "The best part of a maid costume." icon_state = "maidapron" item_state = "maidapron" - item_color = "maidapron" minimize_when_attached = FALSE attachment_slot = null + ////////// //Medals// ////////// @@ -112,7 +111,6 @@ name = "bronze medal" desc = "A bronze medal." icon_state = "bronze" - item_color = "bronze" materials = list(/datum/material/iron=1000) resistance_flags = FIRE_PROOF var/medaltype = "medal" //Sprite used for medalbox @@ -173,7 +171,6 @@ name = "ribbon" desc = "A ribbon" icon_state = "cargo" - item_color = "cargo" /obj/item/clothing/accessory/medal/ribbon/cargo name = "\"cargo tech of the shift\" award" @@ -183,7 +180,6 @@ name = "silver medal" desc = "A silver medal." icon_state = "silver" - item_color = "silver" medaltype = "medal-silver" materials = list(/datum/material/silver=1000) @@ -211,7 +207,6 @@ name = "gold medal" desc = "A prestigious golden medal." icon_state = "gold" - item_color = "gold" medaltype = "medal-gold" materials = list(/datum/material/gold=1000) @@ -228,7 +223,6 @@ name = "plasma medal" desc = "An eccentric medal made of plasma." icon_state = "plasma" - item_color = "plasma" medaltype = "medal-plasma" armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = -10, ACID = 0) //It's made of plasma. Of course it's flammable. materials = list(/datum/material/plasma=1000) @@ -243,6 +237,7 @@ name = "nobel sciences award" desc = "A plasma medal which represents significant contributions to the field of science or robotics." + //////////// //Armbands// //////////// @@ -251,7 +246,6 @@ name = "red armband" desc = "An fancy red armband!" icon_state = "redband" - item_color = "redband" attachment_slot = null above_suit = TRUE above_suit_adjustable = TRUE @@ -264,43 +258,37 @@ name = "cargo bay guard armband" desc = "An armband, worn by engineers and security members to display which department they're assigned to. This one is brown." icon_state = "cargoband" - item_color = "cargoband" /obj/item/clothing/accessory/armband/engine name = "engineering guard armband" desc = "An armband, worn by security members to display which department they're assigned to. This one is orange with a reflective strip!" icon_state = "engieband" - item_color = "engieband" /obj/item/clothing/accessory/armband/science name = "science guard armband" desc = "An armband, worn by engineers and security members to display which department they're assigned to. This one is purple." icon_state = "rndband" - item_color = "rndband" /obj/item/clothing/accessory/armband/service name = "service guard armband" desc = "An armband, worn by engineers and security members to display which department they're assigned to. This one is green." icon_state = "serviceband" - item_color = "serviceband" /obj/item/clothing/accessory/armband/hydro name = "hydroponics guard armband" desc = "An armband, worn by engineers and security members to display which department they're assigned to. This one is green and blue." icon_state = "hydroband" - item_color = "hydroband" /obj/item/clothing/accessory/armband/med name = "medical guard armband" desc = "An armband, worn by engineers and security members to display which department they're assigned to. This one is white." icon_state = "medband" - item_color = "medband" /obj/item/clothing/accessory/armband/medblue name = "medical guard armband" desc = "An armband, worn by engineers and security members to display which department they're assigned to. This one is white and blue." icon_state = "medblueband" - item_color = "medblueband" + ////////////// //OBJECTION!// @@ -310,7 +298,6 @@ name = "attorney's badge" desc = "Fills you with the conviction of JUSTICE. Lawyers tend to want to show it to everyone they meet." icon_state = "lawyerbadge" - item_color = "lawyerbadge" /obj/item/clothing/accessory/lawyers_badge/attack_self(mob/user) if(prob(1)) @@ -327,14 +314,15 @@ if(L) L.bubble_icon = initial(L.bubble_icon) + //////////////// //HA HA! NERD!// //////////////// + /obj/item/clothing/accessory/pocketprotector name = "pocket protector" desc = "Can protect your clothing from ink stains, but you'll look like a nerd if you're using one." icon_state = "pocketprotector" - item_color = "pocketprotector" pocket_storage_component_path = /datum/component/storage/concrete/pockets/pocketprotector /obj/item/clothing/accessory/pocketprotector/full/Initialize() @@ -348,6 +336,7 @@ for(var/i in 1 to 3) new /obj/item/lipstick/random(src) + //////////////// //OONGA BOONGA// //////////////// @@ -356,7 +345,6 @@ name = "bone talisman" desc = "A hunter's talisman, some say the old gods smile on those who wear it." icon_state = "talisman" - item_color = "talisman" armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 20, BIO = 20, RAD = 5, FIRE = 0, ACID = 25) attachment_slot = null above_suit = TRUE @@ -366,7 +354,6 @@ name = "skull codpiece" desc = "A skull shaped ornament, intended to protect the important things in life." icon_state = "skull" - item_color = "skull" above_suit = TRUE above_suit_adjustable = TRUE armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 20, BIO = 20, RAD = 5, FIRE = 0, ACID = 25) @@ -376,7 +363,6 @@ name = "Sinew Skirt" desc = "For the last time. IT'S A KILT not a skirt." icon_state = "skilt" - item_color = "skilt" above_suit_adjustable = TRUE minimize_when_attached = FALSE armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 20, BIO = 20, RAD = 5, FIRE = 0, ACID = 25) @@ -386,13 +372,13 @@ name = "resin armband" desc = "A smooth amber colored armband made of solid resin, generally worn by tribal aristocracy." icon_state = "resinband" - item_color = "resinband" armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 20, BIO = 20, RAD = 5, FIRE = 0, ACID = 25) attachment_slot = null above_suit = TRUE above_suit_adjustable = TRUE + ///////////// //Poppy Pin// ///////////// @@ -401,7 +387,6 @@ name = "Poppy pins" desc = "A poppy pin that is meant to commemorate the fallen soldiers in wars. It symbolizes the gunshot that killed the soldiers." icon_state = "poppy" - item_color = "poppy" ////////////// @@ -412,7 +397,6 @@ name = "singularity shard necklace" desc = "The gem mounted inside seems to glow with an unearthly, pulsing light. It is bitter cold to the touch." icon_state = "sing_necklace" - item_color = "sing_necklace" above_suit = TRUE above_suit_adjustable = TRUE armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = -5, FIRE = 0, ACID = 0) //It IS radioactive after all. Watch me get yelled at for powergaming because I'm making this my """donator""" item - Mqiib diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 481a9b15513b..6222b76adf91 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -1,5 +1,6 @@ /obj/item/clothing/under/color desc = "A standard issue colored jumpsuit. Variety is the spice of life!" + dying_key = DYE_REGISTRY_UNDER mutantrace_variation = MUTANTRACE_VARIATION /obj/item/clothing/under/skirt/color @@ -37,14 +38,12 @@ name = "black jumpsuit" icon_state = "black" item_state = "bl_suit" - item_color = "black" resistance_flags = NONE /obj/item/clothing/under/skirt/color/black name = "black jumpskirt" icon_state = "black_skirt" item_state = "bl_suit" - item_color = "black_skirt" /obj/item/clothing/under/color/black/ghost item_flags = DROPDEL @@ -58,14 +57,12 @@ desc = "A tasteful grey jumpsuit that reminds you of the good old days." icon_state = "grey" item_state = "gy_suit" - item_color = "grey" /obj/item/clothing/under/skirt/color/grey name = "grey jumpskirt" desc = "A tasteful grey jumpskirt that reminds you of the good old days." icon_state = "grey_skirt" item_state = "gy_suit" - item_color = "grey_skirt" /obj/item/clothing/under/color/grey/glorf name = "ancient jumpsuit" @@ -79,177 +76,148 @@ name = "blue jumpsuit" icon_state = "blue" item_state = "b_suit" - item_color = "blue" /obj/item/clothing/under/skirt/color/blue name = "blue jumpskirt" icon_state = "blue_skirt" item_state = "b_suit" - item_color = "blue_skirt" /obj/item/clothing/under/color/green name = "green jumpsuit" icon_state = "green" item_state = "g_suit" - item_color = "green" /obj/item/clothing/under/skirt/color/green name = "green jumpskirt" icon_state = "green_skirt" item_state = "g_suit" - item_color = "green_skirt" /obj/item/clothing/under/color/orange name = "orange jumpsuit" desc = "Don't wear this near paranoid security officers." icon_state = "orange" item_state = "o_suit" - item_color = "orange" /obj/item/clothing/under/skirt/color/orange name = "orange jumpskirt" icon_state = "orange_skirt" item_state = "o_suit" - item_color = "orange_skirt" /obj/item/clothing/under/color/pink name = "pink jumpsuit" icon_state = "pink" desc = "Just looking at this makes you feel fabulous." item_state = "p_suit" - item_color = "pink" /obj/item/clothing/under/skirt/color/pink name = "pink jumpskirt" icon_state = "pink_skirt" item_state = "p_suit" - item_color = "pink_skirt" /obj/item/clothing/under/color/red name = "red jumpsuit" icon_state = "red" item_state = "r_suit" - item_color = "red" /obj/item/clothing/under/skirt/color/red name = "red jumpskirt" icon_state = "red_skirt" item_state = "r_suit" - item_color = "red_skirt" /obj/item/clothing/under/color/white name = "white jumpsuit" icon_state = "white" item_state = "w_suit" - item_color = "white" /obj/item/clothing/under/skirt/color/white name = "white jumpskirt" icon_state = "white_skirt" item_state = "w_suit" - item_color = "white_skirt" /obj/item/clothing/under/color/yellow name = "yellow jumpsuit" icon_state = "yellow" item_state = "y_suit" - item_color = "yellow" /obj/item/clothing/under/skirt/color/yellow name = "yellow jumpskirt" icon_state = "yellow_skirt" item_state = "y_suit" - item_color = "yellow_skirt" /obj/item/clothing/under/color/darkblue name = "darkblue jumpsuit" icon_state = "darkblue" item_state = "b_suit" - item_color = "darkblue" /obj/item/clothing/under/skirt/color/darkblue name = "darkblue jumpskirt" icon_state = "darkblue_skirt" item_state = "b_suit" - item_color = "darkblue_skirt" /obj/item/clothing/under/color/teal name = "teal jumpsuit" icon_state = "teal" item_state = "b_suit" - item_color = "teal" /obj/item/clothing/under/skirt/color/teal name = "teal jumpskirt" icon_state = "teal_skirt" item_state = "b_suit" - item_color = "teal_skirt" /obj/item/clothing/under/color/lightpurple name = "purple jumpsuit" icon_state = "lightpurple" item_state = "p_suit" - item_color = "lightpurple" /obj/item/clothing/under/skirt/color/lightpurple name = "lightpurple jumpskirt" icon_state = "lightpurple_skirt" item_state = "p_suit" - item_color = "lightpurple_skirt" /obj/item/clothing/under/color/darkgreen name = "darkgreen jumpsuit" icon_state = "darkgreen" item_state = "g_suit" - item_color = "darkgreen" /obj/item/clothing/under/skirt/color/darkgreen name = "darkgreen jumpskirt" icon_state = "darkgreen_skirt" item_state = "g_suit" - item_color = "darkgreen_skirt" /obj/item/clothing/under/color/lightbrown name = "lightbrown jumpsuit" icon_state = "lightbrown" item_state = "lb_suit" - item_color = "lightbrown" /obj/item/clothing/under/skirt/color/lightbrown name = "lightbrown jumpskirt" icon_state = "lightbrown_skirt" item_state = "lb_suit" - item_color = "lightbrown_skirt" /obj/item/clothing/under/color/brown name = "brown jumpsuit" icon_state = "brown" item_state = "lb_suit" - item_color = "brown" /obj/item/clothing/under/skirt/color/brown name = "brown jumpskirt" icon_state = "brown_skirt" item_state = "lb_suit" - item_color = "brown_skirt" /obj/item/clothing/under/color/maroon name = "maroon jumpsuit" icon_state = "maroon" item_state = "r_suit" - item_color = "maroon" /obj/item/clothing/under/skirt/color/maroon name = "maroon jumpskirt" icon_state = "maroon_skirt" item_state = "r_suit" - item_color = "maroon_skirt" /obj/item/clothing/under/color/rainbow name = "rainbow jumpsuit" desc = "A multi-colored jumpsuit!" icon_state = "rainbow" item_state = "rainbow" - item_color = "rainbow" can_adjust = FALSE diff --git a/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm b/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm index 68d49875632a..f21dee003f5d 100644 --- a/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm +++ b/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm @@ -3,21 +3,18 @@ desc = "A joint envirosuit used by plasmamen cargo techs, due to the logistical problems of differenciating the two with the length of their pant legs." icon_state = "cargo_envirosuit" item_state = "cargo_envirosuit" - item_color = "cargo_envirosuit" /obj/item/clothing/under/plasmaman/qm name = "quartermaster's envirosuit" desc = "A joint envirosuit used by plasmamen quartermasters due to the logistical problems of differenciating the two with the length of their pant legs." icon_state = "qm_envirosuit" item_state = "qm_envirosuit" - item_color = "qm_envirosuit" /obj/item/clothing/under/plasmaman/mining name = "mining envirosuit" desc = "An air-tight grey suit designed for operations on lavaland by plasmamen." icon_state = "explorer_envirosuit" item_state = "explorer_envirosuit" - item_color = "explorer_envirosuit" /obj/item/clothing/under/plasmaman/chef @@ -25,42 +22,36 @@ desc = "A white plasmaman envirosuit designed for cullinary practices. One might question why a member of a species that doesn't need to eat would become a chef." icon_state = "chef_envirosuit" item_state = "chef_envirosuit" - item_color = "chef_envirosuit" /obj/item/clothing/under/plasmaman/enviroslacks name = "enviroslacks" desc = "The pet project of a particularly posh plasmaman, this custom suit was quickly appropriated by Nano-Trasen for it's detectives, lawyers, and bar-tenders alike." icon_state = "enviroslacks" item_state = "enviroslacks" - item_color = "enviroslacks" /obj/item/clothing/under/plasmaman/chaplain name = "chaplain's envirosuit" desc = "An envirosuit specially designed for only the most pious of plasmamen." icon_state = "chap_envirosuit" item_state = "chap_envirosuit" - item_color = "chap_envirosuit" /obj/item/clothing/under/plasmaman/curator name = "prototype envirosuit" desc = "Made out of a modified voidsuit, this suit was Nano-Trasen's first solution to the *logistical problems* that come with employing plasmamen. Due to the modifications, the suit is no longer space-worthy. Despite their limitations, these suits are still in used by historian and old-styled plasmamen alike." icon_state = "plasmaman_OLD" item_state = "plasmaman_OLD" - item_color = "plasmaman_OLD" /obj/item/clothing/under/plasmaman/janitor name = "janitorial envirosuit" desc = "A purple envirosuit designated for plasmamen janitors." icon_state = "janitor_envirosuit" item_state = "janitor_envirosuit" - item_color = "janitor_envirosuit" /obj/item/clothing/under/plasmaman/botany name = "botanical envirosuit" desc = "A green envirosuit designed to protect plasmamen from minor plant-related injuries." icon_state = "botany_envirosuit" item_state = "botany_envirosuit" - item_color = "botany_envirosuit" /obj/item/clothing/under/plasmaman/mime @@ -68,14 +59,12 @@ desc = "It's not very colourful." icon_state = "mime_envirosuit" item_state = "mime_envirosuit" - item_color = "mime_envirosuit" /obj/item/clothing/under/plasmaman/clown name = "clown's envirosuit" desc = "'HONK!'" icon_state = "clown_envirosuit" item_state = "clown_envirosuit" - item_color = "clown_envirosuit" /obj/item/clothing/under/plasmaman/clown/Extinguish(mob/living/carbon/human/H) if(!istype(H)) @@ -90,4 +79,4 @@ H.visible_message(span_warning("[H]'s suit spews out a tonne of space lube!"),span_warning("Your suit spews out a tonne of space lube!")) H.ExtinguishMob() new /obj/effect/particle_effect/foam(loc) //Truely terrifying. - return 0 \ No newline at end of file + return 0 diff --git a/code/modules/clothing/under/jobs/Plasmaman/engineering.dm b/code/modules/clothing/under/jobs/Plasmaman/engineering.dm index 7fccfb17772a..6d18682507dd 100644 --- a/code/modules/clothing/under/jobs/Plasmaman/engineering.dm +++ b/code/modules/clothing/under/jobs/Plasmaman/engineering.dm @@ -3,7 +3,6 @@ desc = "An air-tight suit given to plasmamen insane enough to achieve the rank of \"Chief Engineer\". It protects the user from fire and acid damage." icon_state = "ce_envirosuit" item_state = "ce_envirosuit" - item_color = "ce_envirosuit" armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 10, "fire" = 95, "acid" = 95) /obj/item/clothing/under/plasmaman/engineering @@ -11,7 +10,6 @@ desc = "An air-tight suit designed to be used by plasmamen employed as engineers, the usual purple stripes being replaced by engineer's orange. It protects the user from fire and acid damage." icon_state = "engineer_envirosuit" item_state = "engineer_envirosuit" - item_color = "engineer_envirosuit" armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 10, FIRE = 95, ACID = 95) /obj/item/clothing/under/plasmaman/atmospherics @@ -19,5 +17,4 @@ desc = "An air-tight suit designed to be used by plasmamen exployed as atmos technicians, the usual purple stripes being replaced by atmos's blue." icon_state = "atmos_envirosuit" item_state = "atmos_envirosuit" - item_color = "atmos_envirosuit" diff --git a/code/modules/clothing/under/jobs/Plasmaman/medsci.dm b/code/modules/clothing/under/jobs/Plasmaman/medsci.dm index 3058e7e1fc57..9f3c257482ee 100644 --- a/code/modules/clothing/under/jobs/Plasmaman/medsci.dm +++ b/code/modules/clothing/under/jobs/Plasmaman/medsci.dm @@ -3,7 +3,6 @@ desc = "A plasmaman envirosuit worn by those with the know-how to achieve the position of \"Research Director\"." icon_state = "rd_envirosuit" item_state = "rd_envirosuit" - item_color = "rd_envirosuit" armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 35) /obj/item/clothing/under/plasmaman/medical @@ -11,39 +10,33 @@ desc = "A suit designed for the station's more plasma-based doctors." icon_state = "doctor_envirosuit" item_state = "doctor_envirosuit" - item_color = "doctor_envirosuit" /obj/item/clothing/under/plasmaman/science name = "scientific envirosuit" desc = "A plasmaman envirosuit designed for scientists." icon_state = "scientist_envirosuit" item_state = "scientist_envirosuit" - item_color = "scientist_envirosuit" /obj/item/clothing/under/plasmaman/robotics name = "robotics envirosuit" desc = "A plasmaman envirosuit designed for roboticists." icon_state = "roboticist_envirosuit" item_state = "roboticist_envirosuit" - item_color = "roboticist_envirosuit" /obj/item/clothing/under/plasmaman/viro name = "virology envirosuit" desc = "The suit worn by the safest people on the station, those who are almost completely immune to the monstrosities they create." icon_state = "virologist_envirosuit" item_state = "virologist_envirosuit" - item_color = "virologist_envirosuit" /obj/item/clothing/under/plasmaman/genetics name = "genetics envirosuit" desc = "A plasmaman envirosuit designed for geneticists." icon_state = "geneticist_envirosuit" item_state = "geneticist_envirosuit" - item_color = "geneticist_envirosuit" /obj/item/clothing/under/plasmaman/chemist name = "chemistry envirosuit" desc = "A plasmaman envirosuit designed for chemists." icon_state = "chemist_envirosuit" item_state = "chemist_envirosuit" - item_color = "chemist_envirosuit" diff --git a/code/modules/clothing/under/jobs/Plasmaman/security.dm b/code/modules/clothing/under/jobs/Plasmaman/security.dm index 070a30e3c5b1..848084c55679 100644 --- a/code/modules/clothing/under/jobs/Plasmaman/security.dm +++ b/code/modules/clothing/under/jobs/Plasmaman/security.dm @@ -3,7 +3,6 @@ desc = "A plasmaman containment suit designed for security officers, offering a limited amount of protection." icon_state = "deathcurity_envirosuit" item_state = "deathcurity_envirosuit" - item_color = "deathcurity_envirosuit" armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 95, ACID = 95) /obj/item/clothing/under/plasmaman/security/warden @@ -11,4 +10,3 @@ desc = "A plasmaman containment suit designed for the warden, white stripes being added to differeciate them from other members of security." icon_state = "warden_envirosuit" item_state = "warden_envirosuit" - item_color = "warden_envirosuit" diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index 7ff11cf15cbd..ac1ba98b267e 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -5,7 +5,6 @@ name = "bartender's uniform" icon_state = "barman" item_state = "bar_suit" - item_color = "barman" alt_covers_chest = TRUE mutantrace_variation = MUTANTRACE_VARIATION @@ -14,7 +13,6 @@ name = "purple bartender's uniform" icon_state = "purplebartender" item_state = "purplebartender" - item_color = "purplebartender" can_adjust = FALSE /obj/item/clothing/under/rank/bartender/skirt @@ -22,7 +20,6 @@ desc = "It looks like it could use some more flair." icon_state = "barman_skirt" item_state = "bar_suit" - item_color = "barman_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -33,7 +30,6 @@ name = "captain's jumpsuit" icon_state = "captain" item_state = "b_suit" - item_color = "captain" sensor_mode = SENSOR_COORDS random_sensor = FALSE armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0, WOUND = 15) @@ -44,7 +40,6 @@ desc = "It's a blue jumpskirt with some gold markings denoting the rank of \"Captain\"." icon_state = "captain_skirt" item_state = "b_suit" - item_color = "captain_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -55,7 +50,6 @@ desc = "It's a jumpsuit worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper." icon_state = "qm" item_state = "lb_suit" - item_color = "qm" mutantrace_variation = MUTANTRACE_VARIATION /obj/item/clothing/under/rank/cargo/skirt @@ -63,7 +57,6 @@ desc = "It's a jumpskirt worn by the quartermaster. It's specially designed to prevent back injuries caused by pushing paper." icon_state = "qm_skirt" item_state = "lb_suit" - item_color = "qm_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -74,7 +67,6 @@ desc = "Shooooorts! They're comfy and easy to wear!" icon_state = "cargotech" item_state = "lb_suit" - item_color = "cargo" body_parts_covered = CHEST|GROIN|ARMS mutantrace_variation = MUTANTRACE_VARIATION alt_covers_chest = TRUE @@ -85,7 +77,6 @@ desc = "Skiiiiirts! They're comfy and easy to wear!" icon_state = "cargo_skirt" item_state = "lb_suit" - item_color = "cargo_skirt" body_parts_covered = CHEST|GROIN|ARMS mutantrace_variation = NO_MUTANTRACE_VARIATION can_adjust = FALSE @@ -97,7 +88,6 @@ name = "chaplain's jumpsuit" icon_state = "chaplain" item_state = "bl_suit" - item_color = "chapblack" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -106,7 +96,6 @@ desc = "It's a black jumpskirt, often worn by religious folk." icon_state = "chapblack_skirt" item_state = "bl_suit" - item_color = "chapblack_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -116,7 +105,6 @@ name = "cook's suit" desc = "A suit which is given only to the most hardcore cooks in space." icon_state = "chef" - item_color = "chef" alt_covers_chest = TRUE mutantrace_variation = MUTANTRACE_VARIATION @@ -124,7 +112,6 @@ name = "cook's skirt" desc = "A skirt which is given only to the most hardcore cooks in space." icon_state = "chef_skirt" - item_color = "chef_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -134,7 +121,6 @@ desc = "'HONK!'" icon_state = "clown" item_state = "clown" - item_color = "clown" fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -144,7 +130,6 @@ desc = "'BLUE HONK!'" icon_state = "blueclown" item_state = "blueclown" - item_color = "blueclown" fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE mutantrace_variation = NO_MUTANTRACE_VARIATION @@ -154,7 +139,6 @@ desc = "'GREEN HONK!'" icon_state = "greenclown" item_state = "greenclown" - item_color = "greenclown" fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE mutantrace_variation = NO_MUTANTRACE_VARIATION @@ -164,7 +148,6 @@ desc = "'YELLOW HONK!'" icon_state = "yellowclown" item_state = "yellowclown" - item_color = "yellowclown" fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE mutantrace_variation = NO_MUTANTRACE_VARIATION @@ -174,7 +157,6 @@ desc = "'PURPLE HONK!'" icon_state = "purpleclown" item_state = "purpleclown" - item_color = "purpleclown" fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE mutantrace_variation = NO_MUTANTRACE_VARIATION @@ -184,7 +166,6 @@ desc = "'ORANGE HONK!'" icon_state = "orangeclown" item_state = "orangeclown" - item_color = "orangeclown" fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE mutantrace_variation = NO_MUTANTRACE_VARIATION @@ -194,7 +175,6 @@ desc = "'R A I N B O W HONK!'" icon_state = "rainbowclown" item_state = "rainbowclown" - item_color = "rainbowclown" fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE mutantrace_variation = NO_MUTANTRACE_VARIATION @@ -208,7 +188,6 @@ name = "head of personnel's jumpsuit" icon_state = "hop" item_state = "b_suit" - item_color = "hop" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -217,7 +196,6 @@ desc = "It's a jumpskirt worn by someone who works in the position of \"Head of Personnel\"." icon_state = "hop_skirt" item_state = "b_suit" - item_color = "hop_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -228,7 +206,6 @@ name = "botanist's jumpsuit" icon_state = "hydroponics" item_state = "g_suit" - item_color = "hydroponics" permeability_coefficient = 0.5 mutantrace_variation = MUTANTRACE_VARIATION @@ -237,7 +214,6 @@ desc = "It's a jumpskirt designed to protect against minor plant-related hazards." icon_state = "hydroponics_skirt" item_state = "g_suit" - item_color = "hydroponics_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -247,7 +223,6 @@ desc = "It's the official uniform of the station's janitor. It has minor protection from biohazards." name = "janitor's jumpsuit" icon_state = "janitor" - item_color = "janitor" armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) mutantrace_variation = MUTANTRACE_VARIATION @@ -255,7 +230,6 @@ name = "janitor's jumpskirt" desc = "It's the official skirt of the station's janitor. It has minor protection from biohazards." icon_state = "janitor_skirt" - item_color = "janitor_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -269,48 +243,41 @@ /obj/item/clothing/under/lawyer/black icon_state = "lawyer_black" item_state = "lawyer_black" - item_color = "lawyer_black" mutantrace_variation = MUTANTRACE_VARIATION /obj/item/clothing/under/lawyer/black/skirt name = "Lawyer black suitskirt" icon_state = "lawyer_black_skirt" item_state = "lawyer_black" - item_color = "lawyer_black_skirt" fitted = FEMALE_UNIFORM_TOP mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/lawyer/female icon_state = "black_suit_fem" item_state = "black_suit_fem" - item_color = "black_suit_fem" mutantrace_variation = MUTANTRACE_VARIATION /obj/item/clothing/under/lawyer/red icon_state = "lawyer_red" item_state = "lawyer_red" - item_color = "lawyer_red" mutantrace_variation = MUTANTRACE_VARIATION /obj/item/clothing/under/lawyer/red/skirt name = "Lawyer red suitskirt" icon_state = "lawyer_red_skirt" item_state = "lawyer_red" - item_color = "lawyer_red_skirt" fitted = FEMALE_UNIFORM_TOP mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/lawyer/blue icon_state = "lawyer_blue" item_state = "lawyer_blue" - item_color = "lawyer_blue" mutantrace_variation = MUTANTRACE_VARIATION /obj/item/clothing/under/lawyer/blue/skirt name = "Lawyer blue suitskirt" icon_state = "lawyer_blue_skirt" item_state = "lawyer_blue" - item_color = "lawyer_blue_skirt" fitted = FEMALE_UNIFORM_TOP mutantrace_variation = NO_MUTANTRACE_VARIATION @@ -319,7 +286,6 @@ desc = "A classy suit and tie." icon_state = "bluesuit" item_state = "bluesuit" - item_color = "bluesuit" can_adjust = TRUE alt_covers_chest = TRUE mutantrace_variation = MUTANTRACE_VARIATION @@ -329,7 +295,6 @@ desc = "A classy suitskirt and tie." icon_state = "bluesuit_skirt" item_state = "bluesuit" - item_color = "bluesuit_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -339,7 +304,6 @@ name = "purple suit" icon_state = "lawyer_purp" item_state = "lawyer_purp" - item_color = "lawyer_purp" fitted = NO_FEMALE_UNIFORM can_adjust = TRUE alt_covers_chest = TRUE @@ -349,7 +313,6 @@ name = "purple suitskirt" icon_state = "lawyer_purp_skirt" item_state = "lawyer_purp" - item_color = "lawyer_purp_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -360,7 +323,6 @@ desc = "A professional black suit. Nanotrasen Investigation Bureau approved!" icon_state = "blacksuit" item_state = "bar_suit" - item_color = "blacksuit" can_adjust = TRUE alt_covers_chest = TRUE mutantrace_variation = MUTANTRACE_VARIATION @@ -370,7 +332,6 @@ desc = "A professional black suitskirt. Nanotrasen Investigation Bureau approved!" icon_state = "reallyblack_suit_skirt" item_state = "bar_suit" - item_color = "reallyblack_suit_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -381,7 +342,6 @@ desc = "It's very... sensible." icon_state = "red_suit" item_state = "red_suit" - item_color = "red_suit" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -390,7 +350,6 @@ desc = "It's very... sensible." icon_state = "red_suit_skirt" item_state = "red_suit" - item_color = "red_suit_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -401,14 +360,12 @@ desc = "A rugged uniform suitable for treasure hunting." icon_state = "curator" item_state = "curator" - item_color = "curator" /obj/item/clothing/under/rank/mime name = "mime's outfit" desc = "It's not very colourful." icon_state = "mime" item_state = "mime" - item_color = "mime" mutantrace_variation = MUTANTRACE_VARIATION /obj/item/clothing/under/rank/mime/skirt @@ -416,7 +373,6 @@ desc = "It's not very colourful." icon_state = "mime_skirt" item_state = "mime" - item_color = "mime_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -427,7 +383,6 @@ desc = "Only the most modern of folk have the right to wear this suit." icon_state = "artist" item_state = "artist" - item_color = "artist" can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP mutantrace_variation = MUTANTRACE_VARIATION @@ -437,7 +392,6 @@ desc = "Only the most modern of folk have the right to wear this suit." icon_state = "artist_skirt" item_state = "artist" - item_color = "artist_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -449,7 +403,6 @@ name = "shaft miner's jumpsuit" icon_state = "miner" item_state = "miner" - item_color = "miner" armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 0, WOUND = 10) mutantrace_variation = MUTANTRACE_VARIATION @@ -458,5 +411,4 @@ name = "shaft miner's jumpsuit" icon_state = "explorer" item_state = "explorer" - item_color = "explorer" can_adjust = FALSE diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm index ca53682f9c9c..28b004872720 100644 --- a/code/modules/clothing/under/jobs/engineering.dm +++ b/code/modules/clothing/under/jobs/engineering.dm @@ -4,7 +4,6 @@ name = "chief engineer's jumpsuit" icon_state = "chiefengineer" item_state = "gy_suit" - item_color = "chief" armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 80, ACID = 40) resistance_flags = NONE mutantrace_variation = MUTANTRACE_VARIATION @@ -14,7 +13,6 @@ desc = "It's a high visibility jumpskirt given to those engineers insane enough to achieve the rank of \"Chief Engineer\". It has minor radiation shielding." icon_state = "chief_skirt" item_state = "gy_suit" - item_color = "chief_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -25,7 +23,6 @@ name = "atmospheric technician's jumpsuit" icon_state = "atmos" item_state = "atmos_suit" - item_color = "atmos" resistance_flags = NONE mutantrace_variation = MUTANTRACE_VARIATION @@ -34,7 +31,6 @@ desc = "It's a jumpskirt worn by atmospheric technicians." icon_state = "atmos_skirt" item_state = "atmos_suit" - item_color = "atmos_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -45,7 +41,6 @@ name = "engineer's jumpsuit" icon_state = "engine" item_state = "engi_suit" - item_color = "engine" armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 60, ACID = 20) resistance_flags = NONE mutantrace_variation = MUTANTRACE_VARIATION @@ -55,7 +50,6 @@ desc = "A high visibility jumpsuit made from heat and radiation resistant materials." icon_state = "hazard" item_state = "suit-orange" - item_color = "hazard" alt_covers_chest = TRUE mutantrace_variation = NO_MUTANTRACE_VARIATION @@ -64,7 +58,6 @@ desc = "It's an orange high visibility jumpskirt worn by engineers." icon_state = "engine_skirt" item_state = "engi_suit" - item_color = "engine_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -75,7 +68,6 @@ name = "roboticist's jumpsuit" icon_state = "robotics" item_state = "robotics" - item_color = "robotics" resistance_flags = NONE mutantrace_variation = MUTANTRACE_VARIATION @@ -84,7 +76,6 @@ desc = "It's a slimming black with reinforced seams; great for industrial work." icon_state = "robotics_skirt" item_state = "robotics" - item_color = "robotics_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm index 925612e052ae..ad4671d90671 100644 --- a/code/modules/clothing/under/jobs/medsci.dm +++ b/code/modules/clothing/under/jobs/medsci.dm @@ -6,7 +6,6 @@ name = "research director's vest suit" icon_state = "director" item_state = "lb_suit" - item_color = "director" armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 10, BIO = 10, RAD = 0, FIRE = 0, ACID = 35) can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -16,7 +15,6 @@ desc = "It's a suitskirt worn by those with the know-how to achieve the position of \"Research Director\". Its fabric provides minor protection from biological contaminants." icon_state = "director_skirt" item_state = "lb_suit" - item_color = "director_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -27,7 +25,6 @@ name = "research director's tan suit" icon_state = "rdwhimsy" item_state = "rdwhimsy" - item_color = "rdwhimsy" armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) can_adjust = TRUE alt_covers_chest = TRUE @@ -37,7 +34,6 @@ desc = "Maybe you'll engineer your own half-man, half-pig creature some day. Its fabric provides minor protection from biological contaminants." icon_state = "rdwhimsy_skirt" item_state = "rdwhimsy" - item_color = "rdwhimsy_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -48,7 +44,6 @@ name = "research director's turtleneck" icon_state = "rdturtle" item_state = "p_suit" - item_color = "rdturtle" armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) can_adjust = TRUE alt_covers_chest = TRUE @@ -58,7 +53,6 @@ desc = "A dark purple turtleneck and tan khaki skirt, for a director with a superior sense of style." icon_state = "rdturtle_skirt" item_state = "p_suit" - item_color = "rdturtle_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -69,7 +63,6 @@ name = "scientist's jumpsuit" icon_state = "toxins" item_state = "w_suit" - item_color = "toxinswhite" permeability_coefficient = 0.5 armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) mutantrace_variation = MUTANTRACE_VARIATION @@ -79,7 +72,6 @@ desc = "It's made of a special fiber that provides minor protection against explosives. It has markings that denote the wearer as a scientist." icon_state = "toxinswhite_skirt" item_state = "w_suit" - item_color = "toxinswhite_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -90,7 +82,6 @@ name = "chemist's jumpsuit" icon_state = "chemistry" item_state = "w_suit" - item_color = "chemistrywhite" permeability_coefficient = 0.5 armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 50, ACID = 65) mutantrace_variation = MUTANTRACE_VARIATION @@ -100,7 +91,6 @@ desc = "It's made of a special fiber that gives special protection against biohazards. It has a chemist rank stripe on it." icon_state = "chemistrywhite_skirt" item_state = "w_suit" - item_color = "chemistrywhite_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -114,7 +104,6 @@ name = "chief medical officer's jumpsuit" icon_state = "cmo" item_state = "w_suit" - item_color = "cmo" permeability_coefficient = 0.5 armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) mutantrace_variation = MUTANTRACE_VARIATION @@ -124,7 +113,6 @@ desc = "It's a jumpskirt worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection." icon_state = "cmo_skirt" item_state = "w_suit" - item_color = "cmo_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -135,7 +123,6 @@ name = "geneticist's jumpsuit" icon_state = "genetics" item_state = "w_suit" - item_color = "geneticswhite" permeability_coefficient = 0.5 armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) mutantrace_variation = MUTANTRACE_VARIATION @@ -145,7 +132,6 @@ desc = "It's made of a special fiber that gives special protection against biohazards. It has a genetics rank stripe on it." icon_state = "geneticswhite_skirt" item_state = "w_suit" - item_color = "geneticswhite_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -156,7 +142,6 @@ name = "virologist's jumpsuit" icon_state = "virology" item_state = "w_suit" - item_color = "virologywhite" permeability_coefficient = 0.5 armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) mutantrace_variation = MUTANTRACE_VARIATION @@ -166,7 +151,6 @@ desc = "It's made of a special fiber that gives special protection against biohazards. It has a virologist rank stripe on it." icon_state = "virologywhite_skirt" item_state = "w_suit" - item_color = "virologywhite_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -177,7 +161,6 @@ name = "nurse's suit" icon_state = "nursesuit" item_state = "w_suit" - item_color = "nursesuit" permeability_coefficient = 0.5 armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) body_parts_covered = CHEST|GROIN|ARMS @@ -189,7 +172,6 @@ name = "medical doctor's jumpsuit" icon_state = "medical" item_state = "w_suit" - item_color = "medical" permeability_coefficient = 0.5 armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) mutantrace_variation = MUTANTRACE_VARIATION @@ -198,21 +180,18 @@ name = "medical scrubs" desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue." icon_state = "scrubsblue" - item_color = "scrubsblue" can_adjust = FALSE /obj/item/clothing/under/rank/medical/green name = "medical scrubs" desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in dark green." icon_state = "scrubsgreen" - item_color = "scrubsgreen" can_adjust = FALSE /obj/item/clothing/under/rank/medical/purple name = "medical scrubs" desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in deep purple." icon_state = "scrubspurple" - item_color = "scrubspurple" can_adjust = FALSE /obj/item/clothing/under/rank/medical/skirt @@ -220,7 +199,6 @@ desc = "It's made of a special fiber that provides minor protection against biohazards. It has a cross on the chest denoting that the wearer is trained medical personnel." icon_state = "medical_skirt" item_state = "w_suit" - item_color = "medical_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 0c0b093951e4..4906f2377ca9 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -14,7 +14,6 @@ desc = "A tactical security jumpsuit for officers. Complete with Nanotrasen belt buckle." icon_state = "rsecurity" item_state = "r_suit" - item_color = "rsecurity" armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30, WOUND = 10) strip_delay = 50 alt_covers_chest = TRUE @@ -27,14 +26,12 @@ desc = "A tactical relic of years past before Nanotrasen decided it was cheaper to dye the suits red instead of washing out the blood." icon_state = "security" item_state = "gy_suit" - item_color = "security" /obj/item/clothing/under/rank/security/skirt name = "security jumpskirt" desc = "A \"tactical\" security jumpsuit with the legs replaced by a skirt." icon_state = "secskirt" item_state = "r_suit" - item_color = "secskirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE //you know now that i think of it if you adjust the skirt and the sprite disappears isn't that just like flashing everyone fitted = FEMALE_UNIFORM_TOP @@ -46,7 +43,6 @@ desc = "A formal security suit for officers. Complete with Nanotrasen belt buckle." icon_state = "rwarden" item_state = "r_suit" - item_color = "rwarden" armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30, WOUND = 10) strip_delay = 50 alt_covers_chest = TRUE @@ -59,14 +55,12 @@ desc = "A formal relic of years past before Nanotrasen decided it was cheaper to dye the suits red instead of washing out the blood." icon_state = "warden" item_state = "gy_suit" - item_color = "warden" /obj/item/clothing/under/rank/warden/skirt name = "warden's suitskirt" desc = "A formal security suitskirt for officers. Complete with Nanotrasen belt buckle." icon_state = "rwarden_skirt" item_state = "r_suit" - item_color = "rwarden_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -80,7 +74,6 @@ desc = "Someone who wears this means business." icon_state = "detective" item_state = "det" - item_color = "detective" armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30, WOUND = 10) strip_delay = 50 alt_covers_chest = TRUE @@ -93,7 +86,6 @@ desc = "Someone who wears this means business." icon_state = "detective_skirt" item_state = "det" - item_color = "detective_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -104,7 +96,6 @@ desc = "A hard-boiled private investigator's grey suit, complete with tie clip." icon_state = "greydet" item_state = "greydet" - item_color = "greydet" alt_covers_chest = TRUE /obj/item/clothing/under/rank/det/grey/skirt @@ -112,7 +103,6 @@ desc = "A hard-boiled private investigator's grey suitskirt, complete with tie clip." icon_state = "greydet_skirt" item_state = "greydet" - item_color = "greydet_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -126,7 +116,6 @@ desc = "A security jumpsuit decorated for those few with the dedication to achieve the position of Head of Security." icon_state = "rhos" item_state = "r_suit" - item_color = "rhos" armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50, WOUND = 10) strip_delay = 60 alt_covers_chest = TRUE @@ -139,7 +128,6 @@ desc = "A security jumpskirt decorated for those few with the dedication to achieve the position of Head of Security." icon_state = "rhos_skirt" item_state = "r_suit" - item_color = "rhos_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -150,21 +138,18 @@ desc = "There are old men, and there are bold men, but there are very few old, bold men." icon_state = "hos" item_state = "gy_suit" - item_color = "hos" /obj/item/clothing/under/rank/head_of_security/alt name = "head of security's turtleneck" desc = "A stylish alternative to the normal head of security jumpsuit, complete with tactical pants." icon_state = "hosalt" item_state = "bl_suit" - item_color = "hosalt" /obj/item/clothing/under/rank/head_of_security/alt/skirt name = "head of security's turtleneck skirt" desc = "A stylish alternative to the normal head of security jumpsuit, complete with a tactical skirt." icon_state = "hosalt_skirt" item_state = "bl_suit" - item_color = "hosalt_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -179,7 +164,6 @@ desc = "The latest in fashionable security outfits." icon_state = "officerblueclothes" item_state = "officerblueclothes" - item_color = "officerblueclothes" alt_covers_chest = TRUE /obj/item/clothing/under/rank/head_of_security/navyblue @@ -187,7 +171,6 @@ name = "head of security's formal uniform" icon_state = "hosblueclothes" item_state = "hosblueclothes" - item_color = "hosblueclothes" alt_covers_chest = TRUE /obj/item/clothing/under/rank/warden/navyblue @@ -195,7 +178,6 @@ name = "warden's formal uniform" icon_state = "wardenblueclothes" item_state = "wardenblueclothes" - item_color = "wardenblueclothes" alt_covers_chest = TRUE /* @@ -207,7 +189,6 @@ desc = "I'm a little busy right now, Calhoun." icon_state = "blueshift" item_state = "blueshift" - item_color = "blueshift" can_adjust = FALSE /* @@ -219,5 +200,4 @@ desc = "Space not controlled by megacorporations, planets, or pirates is under the jurisdiction of Spacepol." icon_state = "spacepol" item_state = "spacepol" - item_color = "spacepol" can_adjust = FALSE diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 51a317cfc8d7..99a47ccdc42d 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -2,7 +2,6 @@ name = "red pj's" desc = "Sleepwear." icon_state = "red_pyjamas" - item_color = "red_pyjamas" item_state = "w_suit" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -11,7 +10,6 @@ name = "blue pj's" desc = "Sleepwear." icon_state = "blue_pyjamas" - item_color = "blue_pyjamas" item_state = "w_suit" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -21,7 +19,6 @@ desc = "Motorcycle not included." icon_state = "ek" item_state = "ek" - item_color = "ek" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -30,7 +27,6 @@ desc = "A white suit, suitable for an excellent host." icon_state = "scratch" item_state = "scratch" - item_color = "scratch" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -39,7 +35,6 @@ desc = "A white suitskirt, suitable for an excellent host." icon_state = "white_suit_skirt" item_state = "scratch" - item_color = "white_suit_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -49,7 +44,6 @@ desc = "It's a very amish looking suit." name = "amish suit" icon_state = "sl_suit" - item_color = "sl_suit" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -57,7 +51,6 @@ name = "\improper Roman armor" desc = "Ancient Roman armor. Made of metallic and leather straps." icon_state = "roman" - item_color = "roman" item_state = "armor" can_adjust = FALSE strip_delay = 100 @@ -68,7 +61,6 @@ desc = "It's a very smart uniform with a special pocket for tips." icon_state = "waiter" item_state = "waiter" - item_color = "waiter" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -77,7 +69,6 @@ desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position." icon_state = "prisoner" item_state = "o_suit" - item_color = "prisoner" has_sensor = LOCKED_SENSORS sensor_mode = SENSOR_COORDS random_sensor = FALSE @@ -88,7 +79,6 @@ desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position." icon_state = "prisoner_skirt" item_state = "o_suit" - item_color = "prisoner_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -99,23 +89,22 @@ desc = "'Special delivery!'" icon_state = "mailman" item_state = "b_suit" - item_color = "mailman" mutantrace_variation = MUTANTRACE_VARIATION + /* Commented out in favor of yogstation custom content /obj/item/clothing/under/rank/psyche name = "psychedelic jumpsuit" desc = "Groovy!" icon_state = "psyche" item_state = "p_suit" - item_color = "psyche" mutantrace_variation = MUTANTRACE_VARIATION */ + /obj/item/clothing/under/rank/clown/sexy name = "sexy-clown suit" desc = "It makes you look HONKable!" icon_state = "sexyclown" item_state = "sexyclown" - item_color = "sexyclown" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -124,7 +113,6 @@ desc = "The leather club is two sectors down." icon_state = "darkholme" item_state = "darkholme" - item_color = "darkholme" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -133,7 +121,6 @@ desc = "It's the standard issue pretty-boy outfit, as seen on Holo-Vision." icon_state = "vice" item_state = "gy_suit" - item_color = "vice" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -142,7 +129,6 @@ name = "\improper CentCom officer's jumpsuit" icon_state = "officer" item_state = "g_suit" - item_color = "officer" alt_covers_chest = TRUE /obj/item/clothing/under/rank/centcom_commander @@ -150,7 +136,6 @@ name = "\improper CentCom officer's jumpsuit" icon_state = "centcom" item_state = "dg_suit" - item_color = "centcom" alt_covers_chest = TRUE mutantrace_variation = MUTANTRACE_VARIATION can_adjust = TRUE //too important to look unimportant. @@ -173,7 +158,6 @@ desc = "It has a NASA logo on it and is made of space-proofed materials." icon_state = "black" item_state = "bl_suit" - item_color = "black" w_class = WEIGHT_CLASS_BULKY gas_transfer_coefficient = 0.01 permeability_coefficient = 0.02 @@ -190,7 +174,6 @@ name = "administrative cybernetic jumpsuit" icon_state = "syndicate" item_state = "bl_suit" - item_color = "syndicate" desc = "A cybernetically enhanced jumpsuit used for administrative duties." gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 @@ -208,7 +191,6 @@ name = "owl uniform" desc = "A soft brown jumpsuit made of synthetic feathers and strong conviction." icon_state = "owl" - item_color = "owl" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -216,7 +198,6 @@ name = "griffon uniform" desc = "A soft brown jumpsuit with a white feather collar made of synthetic feathers and a lust for mayhem." icon_state = "griffin" - item_color = "griffin" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -224,7 +205,6 @@ name = "cloud" desc = "cloud" icon_state = "cloud" - item_color = "cloud" can_adjust = FALSE /obj/item/clothing/under/gimmick/rank/captain/suit @@ -232,7 +212,6 @@ desc = "A green suit and yellow necktie. Exemplifies authority." icon_state = "green_suit" item_state = "dg_suit" - item_color = "green_suit" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -241,7 +220,6 @@ desc = "A green suitskirt and yellow necktie. Exemplifies authority." icon_state = "green_suit_skirt" item_state = "dg_suit" - item_color = "green_suit_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -252,7 +230,6 @@ desc = "A teal suit and yellow necktie. An authoritative yet tacky ensemble." icon_state = "teal_suit" item_state = "g_suit" - item_color = "teal_suit" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -261,7 +238,6 @@ desc = "A teal suitskirt and yellow necktie. An authoritative yet tacky ensemble." icon_state = "teal_suit_skirt" item_state = "g_suit" - item_color = "teal_suit_skirt" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -272,7 +248,6 @@ desc = "A black suit and red tie. Very formal." icon_state = "black_suit" item_state = "bl_suit" - item_color = "black_suit" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -281,21 +256,18 @@ desc = "A formal black suit and red tie, intended for the station's finest." icon_state = "really_black_suit" item_state = "bl_suit" - item_color = "really_black_suit" /obj/item/clothing/under/suit_jacket/female name = "executive suit" desc = "A formal trouser suit for women, intended for the station's finest." icon_state = "black_suit_fem" item_state = "black_suit_fem" - item_color = "black_suit_fem" /obj/item/clothing/under/suit_jacket/green name = "green suit" desc = "A green suit and yellow necktie. Baller." icon_state = "green_suit" item_state = "dg_suit" - item_color = "green_suit" can_adjust = FALSE /obj/item/clothing/under/suit_jacket/red @@ -303,56 +275,48 @@ desc = "A red suit and blue tie. Somewhat formal." icon_state = "red_suit" item_state = "r_suit" - item_color = "red_suit" /obj/item/clothing/under/suit_jacket/charcoal name = "charcoal suit" desc = "A charcoal suit and red tie. Very professional." icon_state = "charcoal_suit" item_state = "charcoal_suit" - item_color = "charcoal_suit" /obj/item/clothing/under/suit_jacket/navy name = "navy suit" desc = "A navy suit and red tie, intended for the station's finest." icon_state = "navy_suit" item_state = "navy_suit" - item_color = "navy_suit" /obj/item/clothing/under/suit_jacket/burgundy name = "burgundy suit" desc = "A burgundy suit and black tie. Somewhat formal." icon_state = "burgundy_suit" item_state = "burgundy_suit" - item_color = "burgundy_suit" /obj/item/clothing/under/suit_jacket/checkered name = "checkered suit" desc = "That's a very nice suit you have there. Shame if something were to happen to it, eh?" icon_state = "checkered_suit" item_state = "checkered_suit" - item_color = "checkered_suit" /obj/item/clothing/under/suit_jacket/tan name = "tan suit" desc = "A tan suit with a yellow tie. Smart, but casual." icon_state = "tan_suit" item_state = "tan_suit" - item_color = "tan_suit" /obj/item/clothing/under/suit_jacket/white name = "white suit" desc = "A white suit and jacket with a blue shirt. You wanna play rough? OKAY!" icon_state = "white_suit" item_state = "white_suit" - item_color = "white_suit" /obj/item/clothing/under/burial name = "burial garments" desc = "Traditional burial garments from the early 22nd century." icon_state = "burial" item_state = "burial" - item_color = "burial" has_sensor = NO_SENSORS mutantrace_variation = MUTANTRACE_VARIATION @@ -360,7 +324,6 @@ name = "black skirt" desc = "A black skirt, very fancy!" icon_state = "blackskirt" - item_color = "blackskirt" body_parts_covered = CHEST|GROIN|ARMS fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE @@ -369,7 +332,6 @@ name = "blue skirt" desc = "A blue, casual skirt." icon_state = "blueskirt" - item_color = "blueskirt" item_state = "b_suit" body_parts_covered = CHEST|GROIN|ARMS fitted = FEMALE_UNIFORM_TOP @@ -380,7 +342,6 @@ name = "red skirt" desc = "A red, casual skirt." icon_state = "redskirt" - item_color = "redskirt" item_state = "r_suit" body_parts_covered = CHEST|GROIN|ARMS fitted = FEMALE_UNIFORM_TOP @@ -391,7 +352,6 @@ name = "purple skirt" desc = "A purple, casual skirt." icon_state = "purpleskirt" - item_color = "purpleskirt" item_state = "p_suit" body_parts_covered = CHEST|GROIN|ARMS fitted = FEMALE_UNIFORM_TOP @@ -404,7 +364,6 @@ desc = "It's just like one of my Japanese animes!" icon_state = "schoolgirl" item_state = "schoolgirl" - item_color = "schoolgirl" body_parts_covered = CHEST|GROIN|ARMS fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE @@ -413,45 +372,45 @@ name = "red schoolgirl uniform" icon_state = "schoolgirlred" item_state = "schoolgirlred" - item_color = "schoolgirlred" /obj/item/clothing/under/schoolgirl/green name = "green schoolgirl uniform" icon_state = "schoolgirlgreen" item_state = "schoolgirlgreen" - item_color = "schoolgirlgreen" /obj/item/clothing/under/schoolgirl/orange name = "orange schoolgirl uniform" icon_state = "schoolgirlorange" item_state = "schoolgirlorange" - item_color = "schoolgirlorange" /obj/item/clothing/under/overalls name = "laborer's overalls" desc = "A set of durable overalls for getting the job done." icon_state = "overalls" item_state = "lb_suit" - item_color = "overalls" can_adjust = FALSE custom_price = 20 mutantrace_variation = MUTANTRACE_VARIATION /obj/item/clothing/under/pirate name = "pirate outfit" - desc = "Yarr." + desc = "Yarr! A fine shirt and pants for the enterprising corsair." icon_state = "pirate" item_state = "pirate" - item_color = "pirate" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION +/obj/item/clothing/under/pirate/space + name = "syndicate pirate outfit" + desc = "Yarr! A set of reinforced pirate clothing worn by boney Syndicate privateers." + has_sensor = NO_SENSORS + armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 40) + /obj/item/clothing/under/soviet name = "soviet uniform" desc = "For the Motherland!" icon_state = "soviet" item_state = "soviet" - item_color = "soviet" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -460,7 +419,6 @@ desc = "Looks old." icon_state = "redcoat" item_state = "redcoat" - item_color = "redcoat" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -469,7 +427,6 @@ desc = "Includes shoes and plaid." icon_state = "kilt" item_state = "kilt" - item_color = "kilt" body_parts_covered = CHEST|GROIN|LEGS|FEET fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE @@ -487,7 +444,6 @@ desc = "The only time when you DON'T enjoy looking at someone's rack." icon_state = "sexymime" item_state = "sexymime" - item_color = "sexymime" body_parts_covered = CHEST|GROIN|LEGS fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE @@ -498,7 +454,6 @@ desc = "Are you not entertained? Is that not why you are here?" icon_state = "gladiator" item_state = "gladiator" - item_color = "gladiator" body_parts_covered = CHEST|GROIN|ARMS fitted = NO_FEMALE_UNIFORM can_adjust = FALSE @@ -513,7 +468,6 @@ desc = "Makes you want to frolic in a field of daisies." icon_state = "sundress" item_state = "sundress" - item_color = "sundress" body_parts_covered = CHEST|GROIN fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE @@ -523,7 +477,6 @@ desc = "A captain's luxury-wear, for special occasions." icon_state = "captain_parade" item_state = "by_suit" - item_color = "captain_parade" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -532,7 +485,6 @@ desc = "A male head of security's luxury-wear, for special occasions." icon_state = "hos_parade_male" item_state = "r_suit" - item_color = "hos_parade_male" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -541,7 +493,6 @@ desc = "A female head of security's luxury-wear, for special occasions." icon_state = "hos_parade_fem" item_state = "r_suit" - item_color = "hos_parade_fem" fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -551,7 +502,6 @@ desc = "An assistant's formal-wear. Why an assistant needs formal-wear is still unknown." icon_state = "assistant_formal" item_state = "gy_suit" - item_color = "assistant_formal" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -560,7 +510,6 @@ desc = "Filled with Latin fire." icon_state = "black_tango" item_state = "wcoat" - item_color = "black_tango" fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE @@ -569,7 +518,6 @@ desc = "Fashion in space." icon_state = "striped_dress" item_state = "stripeddress" - item_color = "striped_dress" body_parts_covered = CHEST|GROIN|ARMS fitted = FEMALE_UNIFORM_FULL can_adjust = FALSE @@ -579,7 +527,6 @@ desc = "Formal wear for a leading lady." icon_state = "sailor_dress" item_state = "sailordress" - item_color = "sailor_dress" body_parts_covered = CHEST|GROIN|ARMS fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE @@ -589,7 +536,6 @@ desc = "Fancy dress for space bar singers." icon_state = "red_evening_gown" item_state = "redeveninggown" - item_color = "red_evening_gown" fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE @@ -598,7 +544,6 @@ desc = "Maid in China." icon_state = "maid" item_state = "maid" - item_color = "maid" body_parts_covered = CHEST|GROIN fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE @@ -613,7 +558,6 @@ desc = "A simple maid uniform for housekeeping." icon_state = "janimaid" item_state = "janimaid" - item_color = "janimaid" body_parts_covered = CHEST|GROIN|FEET|LEGS fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE @@ -623,7 +567,6 @@ desc = "A preppy red skirt with a white blouse." icon_state = "plaid_red" item_state = "plaid_red" - item_color = "plaid_red" fitted = FEMALE_UNIFORM_TOP can_adjust = TRUE alt_covers_chest = TRUE @@ -634,7 +577,6 @@ desc = "A preppy blue skirt with a white blouse." icon_state = "plaid_blue" item_state = "plaid_blue" - item_color = "plaid_blue" fitted = FEMALE_UNIFORM_TOP can_adjust = TRUE alt_covers_chest = TRUE @@ -644,7 +586,6 @@ desc = "A preppy purple skirt with a white blouse." icon_state = "plaid_purple" item_state = "plaid_purple" - item_color = "plaid_purple" fitted = FEMALE_UNIFORM_TOP can_adjust = TRUE alt_covers_chest = TRUE @@ -654,7 +595,6 @@ desc = "Just looking at this makes you want to sing." icon_state = "ysing" item_state = "ysing" - item_color = "ysing" body_parts_covered = CHEST|GROIN|ARMS fitted = NO_FEMALE_UNIFORM alternate_worn_layer = ABOVE_SHOES_LAYER @@ -666,7 +606,6 @@ desc = "Just looking at this makes you want to sing." icon_state = "bsing" item_state = "bsing" - item_color = "bsing" body_parts_covered = CHEST|GROIN|ARMS alternate_worn_layer = ABOVE_SHOES_LAYER fitted = FEMALE_UNIFORM_TOP @@ -678,7 +617,6 @@ desc = "A preppy green skirt with a white blouse." icon_state = "plaid_green" item_state = "plaid_green" - item_color = "plaid_green" fitted = FEMALE_UNIFORM_TOP can_adjust = TRUE alt_covers_chest = TRUE @@ -687,14 +625,12 @@ name = "jester suit" desc = "A jolly dress, well suited to entertain your master, nuncle." icon_state = "jester" - item_color = "jester" can_adjust = FALSE /obj/item/clothing/under/geisha name = "geisha suit" desc = "Cute space ninja senpai not included." icon_state = "geisha" - item_color = "geisha" body_parts_covered = CHEST|GROIN|ARMS can_adjust = FALSE @@ -702,7 +638,6 @@ name = "villain suit" desc = "A change of wardrobe is necessary if you ever want to catch a real superhero." icon_state = "villain" - item_color = "villain" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -711,7 +646,6 @@ desc = "Skipper's in the wardroom drinkin' gin." icon_state = "sailor" item_state = "b_suit" - item_color = "sailor" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -720,7 +654,6 @@ desc = "A special containment suit that allows plasma-based lifeforms to exist safely in an oxygenated environment, and automatically extinguishes them in a crisis. Despite being airtight, it's not spaceworthy." icon_state = "plasmaman" item_state = "plasmaman" - item_color = "plasmaman" armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 95, ACID = 95) body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS can_adjust = FALSE @@ -770,7 +703,6 @@ desc = "The latest in fashionable Russian outfits." icon_state = "hostanclothes" item_state = "hostanclothes" - item_color = "hostanclothes" mutantrace_variation = MUTANTRACE_VARIATION /obj/item/clothing/under/mummy @@ -778,7 +710,6 @@ desc = "Return the slab or suffer my stale references." icon_state = "mummy" item_state = "mummy" - item_color = "mummy" body_parts_covered = CHEST|GROIN|ARMS|LEGS fitted = NO_FEMALE_UNIFORM can_adjust = FALSE @@ -790,7 +721,6 @@ desc = "Perfect camouflage for hiding in botany." icon_state = "scarecrow" item_state = "scarecrow" - item_color = "scarecrow" body_parts_covered = CHEST|GROIN|ARMS|LEGS fitted = NO_FEMALE_UNIFORM can_adjust = FALSE @@ -802,7 +732,6 @@ desc = "A dress inspired by the ancient \"Victorian\" era." icon_state = "draculass" item_state = "draculass" - item_color = "draculass" body_parts_covered = CHEST|GROIN|ARMS fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE @@ -812,7 +741,6 @@ desc = "A modified scientist jumpsuit to look extra cool." icon_state = "drfreeze" item_state = "drfreeze" - item_color = "drfreeze" can_adjust = FALSE /obj/item/clothing/under/lobster @@ -820,7 +748,6 @@ desc = "Who beheaded the college mascot?" icon_state = "lobster" item_state = "lobster" - item_color = "lobster" fitted = NO_FEMALE_UNIFORM can_adjust = FALSE @@ -829,7 +756,6 @@ desc = "Now you're cooking." icon_state = "gondola" item_state = "lb_suit" - item_color = "gondola" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -838,7 +764,6 @@ desc = "A black jumpsuit with a white bone pattern printed on it. Spooky!" icon_state = "skeleton" item_state = "skeleton" - item_color = "skeleton" body_parts_covered = CHEST|GROIN|ARMS|LEGS fitted = NO_FEMALE_UNIFORM can_adjust = FALSE @@ -850,7 +775,6 @@ desc = "A jumpsuit made from durathread, its resilient fibres provide some protection to the wearer." icon_state = "durathread" item_state = "durathread" - item_color = "durathread" can_adjust = FALSE armor = list(MELEE = 10, LASER = 10, FIRE = 40, ACID = 10, BOMB = 5) mutantrace_variation = MUTANTRACE_VARIATION @@ -885,7 +809,6 @@ desc = "A peculier garment woven in silk; under the lower dress appears to be a lamp and a switch." icon_state = "lampskirt_male" item_state = "lampskirt_male" - item_color = "lampskirt_male" body_parts_covered = CHEST|GROIN|LEGS|FEET can_adjust = FALSE var/brightness_on = 1 //luminosity when the light is on @@ -911,7 +834,6 @@ /obj/item/clothing/under/lampskirt/female icon_state = "lampskirt_female" item_state = "lampskirt_female" - item_color = "lampskirt_female" body_parts_covered = CHEST|GROIN|LEGS|FEET can_adjust = FALSE fitted = FEMALE_UNIFORM_TOP @@ -921,7 +843,6 @@ desc = "The meat part of a hot dog costume. People may think you're trying to compensate for something." icon_state = "weiner" item_state = "weiner" - item_color = "weiner" can_adjust = FALSE // Ashwalker Clothes @@ -937,7 +858,6 @@ desc = "A porly made outfit made of scrapped materials." icon_state = "raider_leather" item_state = "raider_leather" - item_color = "raider_leather" armor = list(MELEE = 5, FIRE = 5) has_sensor = NO_SENSORS can_adjust = FALSE @@ -948,7 +868,6 @@ desc = "Thin metal bolted over poorly tanned leather." icon_state = "tribal" item_state = "tribal" - item_color = "tribal" body_parts_covered = CHEST|GROIN|ARMS armor = list(MELEE = 5) has_sensor = NO_SENSORS @@ -959,49 +878,43 @@ desc = "A robe from the ashlands. This one seems to be for common tribespeople." icon_state = "robe_liz" item_state = "robe_liz" - item_color = "robe_liz" + fitted = NO_FEMALE_UNIFORM body_parts_covered = CHEST|GROIN has_sensor = NO_SENSORS can_adjust = FALSE + fitted = NO_FEMALE_UNIFORM /obj/item/clothing/under/ash_robe/young name = "tribal rags" desc = "Rags from Lavaland, coated with light ash. This one seems to be for the juniors of a tribe." icon_state = "tribalrags" - item_state = "tribalrags" - item_color = "tribalrags" /obj/item/clothing/under/ash_robe/hunter name = "hunter tribal rags" desc = "A robe from the ashlands. This one seems to be for hunters." icon_state = "hhunterrags" item_state = "hhunterrags" - item_color = "hhunterrags" /obj/item/clothing/under/ash_robe/chief name = "chief tribal rags" desc = "Rags from Lavaland, coated with heavy ash. This one seems to be for the elders of a tribe." icon_state = "chiefrags" item_state = "chiefrags" - item_color = "chiefrags" /obj/item/clothing/under/ash_robe/shaman name = "shaman tribal rags" desc = "Rags from Lavaland, drenched with ash, it has fine jewel coated bones sewn around the neck. This one seems to be for the shaman of a tribe." icon_state = "shamanrags" item_state = "shamanrags" - item_color = "shamanrags" /obj/item/clothing/under/ash_robe/tunic name = "tribal tunic" desc = "A tattered red tunic of reddened fabric." icon_state = "caesar_clothes" item_state = "caesar_clothes" - item_color = "caesar_clothes" /obj/item/clothing/under/ash_robe/dress name = "tribal dress" desc = "A tattered dress of white fabric." icon_state = "cheongsam_s" item_state = "cheongsam_s" - item_color = "cheongsam_s" diff --git a/code/modules/clothing/under/pants.dm b/code/modules/clothing/under/pants.dm index de07b1761c86..8b2befafdc95 100644 --- a/code/modules/clothing/under/pants.dm +++ b/code/modules/clothing/under/pants.dm @@ -10,71 +10,59 @@ name = "classic jeans" desc = "You feel cooler already." icon_state = "jeansclassic" - item_color = "jeansclassic" /obj/item/clothing/under/pants/mustangjeans name = "Must Hang jeans" desc = "Made in the finest space jeans factory this side of Alpha Centauri." icon_state = "jeansmustang" - item_color = "jeansmustang" custom_price = 75 /obj/item/clothing/under/pants/blackjeans name = "black jeans" desc = "Only for those who can pull it off." icon_state = "jeansblack" - item_color = "jeansblack" /obj/item/clothing/under/pants/youngfolksjeans name = "Young Folks jeans" desc = "For those tired of boring old jeans. Relive the passion of your youth!" icon_state = "jeansyoungfolks" - item_color = "jeansyoungfolks" /obj/item/clothing/under/pants/white name = "white pants" desc = "Plain white pants. Boring." icon_state = "whitepants" - item_color = "whitepants" /obj/item/clothing/under/pants/red name = "red pants" desc = "Bright red pants. Overflowing with personality." icon_state = "redpants" - item_color = "redpants" /obj/item/clothing/under/pants/black name = "black pants" desc = "These pants are dark, like your soul." icon_state = "blackpants" - item_color = "blackpants" /obj/item/clothing/under/pants/tan name = "tan pants" desc = "Some tan pants. You look like a white collar worker with these on." icon_state = "tanpants" - item_color = "tanpants" /obj/item/clothing/under/pants/track name = "track pants" desc = "A pair of track pants, for the athletic." icon_state = "trackpants" - item_color = "trackpants" /obj/item/clothing/under/pants/jeans name = "jeans" desc = "A nondescript pair of tough blue jeans." icon_state = "jeans" - item_color = "jeans" /obj/item/clothing/under/pants/khaki name = "khaki pants" desc = "A pair of dust beige khaki pants." icon_state = "khaki" - item_color = "khaki" /obj/item/clothing/under/pants/camo name = "camo pants" desc = "A pair of woodland camouflage pants. Probably not the best choice for a space station." icon_state = "camopants" - item_color = "camopants" diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm index 91a1b42f1e5e..bf8556e29d72 100644 --- a/code/modules/clothing/under/shorts.dm +++ b/code/modules/clothing/under/shorts.dm @@ -10,29 +10,23 @@ /obj/item/clothing/under/shorts/red name = "red athletic shorts" icon_state = "redshorts" - item_color = "redshorts" /obj/item/clothing/under/shorts/green name = "green athletic shorts" icon_state = "greenshorts" - item_color = "greenshorts" /obj/item/clothing/under/shorts/blue name = "blue athletic shorts" icon_state = "blueshorts" - item_color = "blueshorts" /obj/item/clothing/under/shorts/black name = "black athletic shorts" icon_state = "blackshorts" - item_color = "blackshorts" /obj/item/clothing/under/shorts/grey name = "grey athletic shorts" icon_state = "greyshorts" - item_color = "greyshorts" /obj/item/clothing/under/shorts/purple name = "purple athletic shorts" icon_state = "purpleshorts" - item_color = "purpleshorts" diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index 13c6b7b6e474..c23b239bee92 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -3,7 +3,6 @@ desc = "A non-descript and slightly suspicious looking turtleneck with digital camouflage cargo pants." icon_state = "syndicate" item_state = "bl_suit" - item_color = "syndicate" has_sensor = NO_SENSORS armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 40) alt_covers_chest = TRUE @@ -14,7 +13,6 @@ desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-." icon_state = "tactifool" item_state = "bl_suit" - item_color = "tactifool" has_sensor = HAS_SENSORS armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 40) @@ -23,7 +21,6 @@ desc = "A double seamed tactical turtleneck disguised as a civilian grade silk suit. Intended for the most formal operator. The collar is really sharp." icon_state = "really_black_suit" item_state = "bl_suit" - item_color = "black_suit" can_adjust = FALSE /obj/item/clothing/under/syndicate/camo @@ -31,14 +28,12 @@ desc = "A green military camouflage uniform." icon_state = "camogreen" item_state = "g_suit" - item_color = "camogreen" can_adjust = FALSE /obj/item/clothing/under/syndicate/soviet name = "Ratnik 5 tracksuit" desc = "Badly translated labels tell you to clean this in Vodka. Great for squatting in." icon_state = "trackpants" - item_color = "trackpants" can_adjust = FALSE armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) resistance_flags = NONE @@ -47,14 +42,12 @@ name = "combat uniform" desc = "With a suit lined with this many pockets, you are ready to operate." icon_state = "syndicate_combat" - item_color = "syndicate_combat" can_adjust = FALSE /obj/item/clothing/under/syndicate/rus_army name = "advanced military tracksuit" desc = "Military grade tracksuits for frontline squatting." icon_state = "rus_under" - item_color = "rus_under" can_adjust = FALSE armor = list(MELEE = 5, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) resistance_flags = NONE diff --git a/code/modules/clothing/under/trek.dm b/code/modules/clothing/under/trek.dm index d948449e7f22..37826d5ec294 100644 --- a/code/modules/clothing/under/trek.dm +++ b/code/modules/clothing/under/trek.dm @@ -11,14 +11,12 @@ name = "command uniform" desc = "The uniform worn by command officers." icon_state = "trek_command" - item_color = "trek_command" item_state = "y_suit" /obj/item/clothing/under/trek/engsec name = "engsec uniform" desc = "The uniform worn by engineering/security officers." icon_state = "trek_engsec" - item_color = "trek_engsec" item_state = "r_suit" armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) //more sec than eng, but w/e. strip_delay = 50 @@ -27,40 +25,33 @@ name = "medsci uniform" desc = "The uniform worn by medical/science officers." icon_state = "trek_medsci" - item_color = "trek_medsci" item_state = "b_suit" //TNG /obj/item/clothing/under/trek/command/next icon_state = "trek_next_command" - item_color = "trek_next_command" item_state = "r_suit" /obj/item/clothing/under/trek/engsec/next icon_state = "trek_next_engsec" - item_color = "trek_next_engsec" item_state = "y_suit" /obj/item/clothing/under/trek/medsci/next icon_state = "trek_next_medsci" - item_color = "trek_next_medsci" //ENT /obj/item/clothing/under/trek/command/ent icon_state = "trek_ent_command" - item_color = "trek_ent_command" item_state = "bl_suit" /obj/item/clothing/under/trek/engsec/ent icon_state = "trek_ent_engsec" - item_color = "trek_ent_engsec" item_state = "bl_suit" /obj/item/clothing/under/trek/medsci/ent icon_state = "trek_ent_medsci" - item_color = "trek_ent_medsci" item_state = "bl_suit" @@ -69,5 +60,4 @@ name = "french marshall's uniform" desc = "Something about it feels off..." icon_state = "trek_Q" - item_color = "trek_Q" item_state = "r_suit" diff --git a/code/modules/events/shuttle_loan.dm b/code/modules/events/shuttle_loan.dm index cab2d87fab75..5f96b5b052f8 100644 --- a/code/modules/events/shuttle_loan.dm +++ b/code/modules/events/shuttle_loan.dm @@ -6,6 +6,7 @@ #define PIZZA_DELIVERY 6 #define ITS_HIP_TO 7 #define MY_GOD_JC 8 +#define PETA 9 /datum/round_event_control/shuttle_loan @@ -24,7 +25,7 @@ var/thanks_msg = "The cargo shuttle should return in five minutes. Have some supply points for your trouble." /datum/round_event/shuttle_loan/setup() - dispatch_type = pick(HIJACK_SYNDIE, RUSKY_PARTY, SPIDER_GIFT, DEPARTMENT_RESUPPLY, ANTIDOTE_NEEDED, PIZZA_DELIVERY, ITS_HIP_TO, MY_GOD_JC) + dispatch_type = pick(HIJACK_SYNDIE, RUSKY_PARTY, SPIDER_GIFT, DEPARTMENT_RESUPPLY, ANTIDOTE_NEEDED, PIZZA_DELIVERY, ITS_HIP_TO, MY_GOD_JC, PETA) /datum/round_event/shuttle_loan/announce(fake) SSshuttle.shuttle_loan = src @@ -52,6 +53,10 @@ priority_announce("Cargo: We have discovered an active Syndicate bomb near our VIP shuttle's fuel lines. If you feel up to the task, we will pay you for defusing it.", "CentCom Security Division") thanks_msg = "Live explosive ordnance incoming via supply shuttle. Evacuating cargo bay is recommended." bonus_points = 45000 //If you mess up, people die and the shuttle gets turned into swiss cheese + if(PETA) + priority_announce("Cargo: A group calling themselves PETA whatever that means is asking to inspect your station. Do you want to check it out?", "CentCom Diplomatic Corps") + thanks_msg = "Inspectors Incoming." + bonus_points = 10000 // Funny hostile mobs /datum/round_event/shuttle_loan/proc/loan_shuttle() priority_announce(thanks_msg, "Cargo shuttle commandeered by CentCom.") @@ -83,6 +88,8 @@ SSshuttle.centcom_message += "Biohazard cleanup incoming." if(MY_GOD_JC) SSshuttle.centcom_message += "Live explosive ordnance incoming. Exercise extreme caution." + if(PETA) + SSshuttle.centcom_message += "Inspectors Incoming." /datum/round_event/shuttle_loan/tick() if(dispatched) @@ -227,6 +234,17 @@ else shuttle_spawns.Add(/obj/item/paper/fluff/cargo/bomb/allyourbase) + if(PETA) + for(var/i in 1 to 20) + if(prob(50)) + shuttle_spawns.Add(/mob/living/simple_animal/hostile/rat/loan) + if(prob(40)) + shuttle_spawns.Add(/mob/living/simple_animal/hostile/carp/loan) + if(prob(20)) + shuttle_spawns.Add(/mob/living/simple_animal/hostile/bear/loan) + if(prob(30)) + shuttle_spawns.Add(/mob/living/simple_animal/hostile/feral_cat/loan) + var/false_positive = 0 while(shuttle_spawns.len && empty_shuttle_turfs.len) var/turf/T = pick_n_take(empty_shuttle_turfs) 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/food_and_drinks/food/snacks_egg.dm b/code/modules/food_and_drinks/food/snacks_egg.dm index c4e344692950..31fa3fe15dbd 100644 --- a/code/modules/food_and_drinks/food/snacks_egg.dm +++ b/code/modules/food_and_drinks/food/snacks_egg.dm @@ -56,7 +56,7 @@ /obj/item/reagent_containers/food/snacks/egg/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/toy/crayon)) var/obj/item/toy/crayon/C = W - var/clr = C.item_color + var/clr = C.crayon_color if(!(clr in list("blue", "green", "mime", "orange", "purple", "rainbow", "red", "yellow"))) to_chat(usr, span_notice("[src] refuses to take on this colour!")) @@ -64,7 +64,6 @@ to_chat(usr, span_notice("You colour [src] with [W].")) icon_state = "egg-[clr]" - item_color = clr else if(istype(W, /obj/item/stamp/clown)) var/clowntype = pick("grock", "grimaldi", "rainbow", "chaos", "joker", "sexy", "standard", "bobble", "krusty", "bozo", "pennywise", "ronald", "jacobs", "kelly", "popov", "cluwne") icon_state = "egg-clown-[clowntype]" @@ -75,35 +74,27 @@ /obj/item/reagent_containers/food/snacks/egg/blue icon_state = "egg-blue" - item_color = "blue" /obj/item/reagent_containers/food/snacks/egg/green icon_state = "egg-green" - item_color = "green" /obj/item/reagent_containers/food/snacks/egg/mime icon_state = "egg-mime" - item_color = "mime" /obj/item/reagent_containers/food/snacks/egg/orange icon_state = "egg-orange" - item_color = "orange" /obj/item/reagent_containers/food/snacks/egg/purple icon_state = "egg-purple" - item_color = "purple" /obj/item/reagent_containers/food/snacks/egg/rainbow icon_state = "egg-rainbow" - item_color = "rainbow" /obj/item/reagent_containers/food/snacks/egg/red icon_state = "egg-red" - item_color = "red" /obj/item/reagent_containers/food/snacks/egg/yellow icon_state = "egg-yellow" - item_color = "yellow" /obj/item/reagent_containers/food/snacks/friedegg name = "fried egg" diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm index 331ec7de7c35..aec53977e89d 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm @@ -113,6 +113,11 @@ God bless America. var/turf/T = get_turf(src) new /obj/item/syndicate_basket(T) return + if(istype(I, /obj/item/organ/brain)) + var/safety = alert(user, "Warning! This brain might still contain a life in it.", "Proceed anyways?" ,"No.", "FRY ANYWAY") + if(safety != "FRY ANYWAY") + to_chat(user, span_warning("You decided not to fry this brain...")) + return if(default_unfasten_wrench(user, I)) return else if(default_deconstruction_screwdriver(user, "fryer_off", "fryer_off" ,I)) //where's the open maint panel icon?! diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm index c513dd802e36..ee44baed7cb0 100644 --- a/code/modules/holiday/easter.dm +++ b/code/modules/holiday/easter.dm @@ -113,7 +113,6 @@ . = ..() var/eggcolor = pick("blue","green","mime","orange","purple","rainbow","red","yellow") icon_state = "egg-[eggcolor]" - item_color = "[eggcolor]" /obj/item/reagent_containers/food/snacks/egg/proc/dispensePrize(turf/where) var/won = pick(/obj/item/clothing/head/bunnyhead, diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm index 3509072a7ce5..8b1c1c8871f1 100644 --- a/code/modules/holodeck/items.dm +++ b/code/modules/holodeck/items.dm @@ -24,34 +24,35 @@ w_class = WEIGHT_CLASS_SMALL hitsound = "swing_hit" armour_penetration = 50 - var/active = 0 + var/active = FALSE + var/saber_color /obj/item/holo/esword/green/Initialize() . = ..() - item_color = "green" + saber_color = "green" /obj/item/holo/esword/red/Initialize() . = ..() - item_color = "red" + saber_color = "red" /obj/item/holo/esword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) if(active) return ..() - return 0 + return FALSE /obj/item/holo/esword/attack(target as mob, mob/user as mob) ..() /obj/item/holo/esword/Initialize() . = ..() - item_color = pick("red","blue","green","purple") + saber_color = pick("red","blue","green","purple") /obj/item/holo/esword/attack_self(mob/living/user as mob) active = !active if (active) force = 30 - icon_state = "sword[item_color]" + icon_state = "sword[saber_color]" w_class = WEIGHT_CLASS_BULKY hitsound = 'sound/weapons/blade1.ogg' playsound(user, 'sound/weapons/saberon.ogg', 20, 1) @@ -104,7 +105,8 @@ density = TRUE /obj/structure/holohoop/attackby(obj/item/W as obj, mob/user as mob, params) - if(get_dist(src,user)<2) + var/dist = get_dist(src,user) + if(dist<2 || (islizard(user) && dist<4)) if(user.transferItemToLoc(W, drop_location())) visible_message(span_warning(" [user] dunks [W] into \the [src]!")) diff --git a/code/modules/hydroponics/grown/rainbow_bunch.dm b/code/modules/hydroponics/grown/rainbow_bunch.dm index 44e8ced977bf..fb63763aa62c 100644 --- a/code/modules/hydroponics/grown/rainbow_bunch.dm +++ b/code/modules/hydroponics/grown/rainbow_bunch.dm @@ -36,42 +36,42 @@ var/flower_color = rand(1,8) switch(flower_color) if(1) - item_color = "red" color = "#DA0000" list_reagents = list(/datum/reagent/colorful_reagent/crayonpowder/red = 3) + dye_color = DYE_RED desc += " This one is in a bright red color." if(2) - item_color = "orange" color = "#FF9300" list_reagents = list(/datum/reagent/colorful_reagent/crayonpowder/orange = 3) + dye_color = DYE_ORANGE desc += " This one is in a citrus orange color." if(3) - item_color = "yellow" color = "#FFF200" list_reagents = list(/datum/reagent/colorful_reagent/crayonpowder/yellow = 3) + dye_color = DYE_YELLOW desc += " This one is in a bright yellow color." if(4) - item_color = "green" color = "#A8E61D" list_reagents = list(/datum/reagent/colorful_reagent/crayonpowder/green = 3) + dye_color = DYE_GREEN desc += " This one is in a grassy green color." if(5) - item_color = "blue" color = "#00B7EF" list_reagents = list(/datum/reagent/colorful_reagent/crayonpowder/blue = 3) + dye_color = DYE_BLUE desc += " This one is in a soothing blue color." if(6) - item_color = "purple" color = "#DA00FF" list_reagents = list(/datum/reagent/colorful_reagent/crayonpowder/purple = 3) + dye_color = DYE_PURPLE desc += " This one is in a vibrant purple color." if(7) - item_color = "black" color = "#1C1C1C" list_reagents = list(/datum/reagent/colorful_reagent/crayonpowder/black = 3) + dye_color = DYE_BLACK desc += " This one is in a midnight black color." if(8) - item_color = "white" color = "#FFFFFF" list_reagents = list(/datum/reagent/colorful_reagent/crayonpowder/white = 3) + dye_color = DYE_WHITE desc += " This one is in a pure white color." 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/_job.dm b/code/modules/jobs/job_types/_job.dm index be0c53203fef..c85904d4a217 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -219,13 +219,11 @@ var/uniform_skirt = null + /// Which slot the PDA defaults to var/pda_slot = SLOT_BELT - var/alt_shoes = /obj/item/clothing/shoes/xeno_wraps // Default digitgrade shoes assignment variable - var/alt_shoes_s = /obj/item/clothing/shoes/xeno_wraps/jackboots // Digitigrade shoes for Sec assignment variable - var/alt_shoes_c = /obj/item/clothing/shoes/xeno_wraps/command // command footwraps. - var/alt_shoes_e = /obj/item/clothing/shoes/xeno_wraps/engineering // Engineering footwraps - var/alt_shoes_ca = /obj/item/clothing/shoes/xeno_wraps/cargo // Cargo Footwraps - var/alt_shoes_m = /obj/item/clothing/shoes/xeno_wraps/medical // Medical Footwraps + + /// What shoes digitgrade crew should wear + var/digitigrade_shoes /datum/outfit/job/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) switch(H.backbag) @@ -249,17 +247,9 @@ if (isplasmaman(H) && !(visualsOnly)) //this is a plasmaman fix to stop having two boxes box = null - if(DIGITIGRADE in H.dna.species.species_traits) - if(IS_COMMAND(H)) // command gets snowflake shoes too. - shoes = alt_shoes_c - else if(IS_SECURITY(H) || find_job(H) == "Brig Physician") // Special shoes for sec and brig phys, roll first to avoid defaulting - shoes = alt_shoes_s - else if(IS_ENGINEERING(H)) // Now engineers and miners get their department specific shoes, rather than generic ones. - shoes = alt_shoes_e - else if(find_job(H) == "Shaft Miner") - shoes = alt_shoes_ca - else if(find_job(H) == "Mining Medic") - shoes = alt_shoes_m + + if((DIGITIGRADE in H.dna.species.species_traits) && digitigrade_shoes) + shoes = digitigrade_shoes /datum/outfit/job/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) if(visualsOnly) @@ -278,10 +268,7 @@ C.assignment = H.mind.role_alt_title else C.assignment = J.title - if(H.mind?.assigned_role) - C.originalassignment = H.mind.assigned_role - else - C.originalassignment = J.title + C.originalassignment = J.title if(H.age) C.registered_age = H.age C.update_label() diff --git a/code/modules/jobs/job_types/atmospheric_technician.dm b/code/modules/jobs/job_types/atmospheric_technician.dm index caa631b92d8a..bab00b284e3e 100644 --- a/code/modules/jobs/job_types/atmospheric_technician.dm +++ b/code/modules/jobs/job_types/atmospheric_technician.dm @@ -39,6 +39,7 @@ belt = /obj/item/storage/belt/utility/atmostech ears = /obj/item/radio/headset/headset_eng + digitigrade_shoes = /obj/item/clothing/shoes/xeno_wraps/engineering uniform = /obj/item/clothing/under/rank/atmospheric_technician uniform_skirt = /obj/item/clothing/under/rank/atmospheric_technician/skirt r_pocket = /obj/item/analyzer diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index ea7af7bf7931..dd5753b08fe4 100755 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -49,6 +49,7 @@ uniform_skirt = /obj/item/clothing/under/rank/captain/skirt suit = /obj/item/clothing/suit/armor/vest/capcarapace shoes = /obj/item/clothing/shoes/sneakers/brown + digitigrade_shoes = /obj/item/clothing/shoes/xeno_wraps/command head = /obj/item/clothing/head/caphat backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/station_charter=1, /obj/item/gun/energy/e_gun=1, /obj/item/modular_computer/tablet/phone/preset/advanced/command=1) //yogs - adds egun/removes civ budget diff --git a/code/modules/jobs/job_types/chief_engineer.dm b/code/modules/jobs/job_types/chief_engineer.dm index 98ebcd319395..f1cb874cbe7c 100644 --- a/code/modules/jobs/job_types/chief_engineer.dm +++ b/code/modules/jobs/job_types/chief_engineer.dm @@ -44,9 +44,9 @@ uniform = /obj/item/clothing/under/rank/chief_engineer uniform_skirt = /obj/item/clothing/under/rank/chief_engineer/skirt shoes = /obj/item/clothing/shoes/sneakers/brown - alt_shoes = /obj/item/clothing/shoes/xeno_wraps/command // Provides Command shoes to digitigrade species + digitigrade_shoes = /obj/item/clothing/shoes/xeno_wraps/command head = /obj/item/clothing/head/hardhat/white - gloves = /obj/item/clothing/gloves/color/black/ce + gloves = /obj/item/clothing/gloves/color/black backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/phone/preset/advanced/command/atmos=1) //yogs - removes eng budget glasses = /obj/item/clothing/glasses/meson/sunglasses diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm index 1e7d35b8760b..ca224c820c02 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -47,7 +47,7 @@ uniform = /obj/item/clothing/under/rank/chief_medical_officer uniform_skirt = /obj/item/clothing/under/rank/chief_medical_officer/skirt shoes = /obj/item/clothing/shoes/sneakers/brown - alt_shoes = /obj/item/clothing/shoes/xeno_wraps/command // Provides Command shoes to digitigrade species + digitigrade_shoes = /obj/item/clothing/shoes/xeno_wraps/command suit = /obj/item/clothing/suit/toggle/labcoat/cmo l_hand = /obj/item/storage/firstaid/medical suit_store = /obj/item/flashlight/pen/paramedic diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm index 303bad9936bf..3f05e98f36b0 100644 --- a/code/modules/jobs/job_types/detective.dm +++ b/code/modules/jobs/job_types/detective.dm @@ -47,6 +47,7 @@ uniform_skirt = /obj/item/clothing/under/rank/det/skirt neck = /obj/item/clothing/neck/tie/detective shoes = /obj/item/clothing/shoes/sneakers/brown + digitigrade_shoes = /obj/item/clothing/shoes/xeno_wraps/jackboots suit = /obj/item/clothing/suit/det_suit gloves = /obj/item/clothing/gloves/color/black/forensic head = /obj/item/clothing/head/fedora/det_hat diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm index 4c485d68ac9d..f8cb701dc1ce 100644 --- a/code/modules/jobs/job_types/head_of_personnel.dm +++ b/code/modules/jobs/job_types/head_of_personnel.dm @@ -55,6 +55,7 @@ uniform = /obj/item/clothing/under/rank/head_of_personnel uniform_skirt = /obj/item/clothing/under/rank/head_of_personnel/skirt shoes = /obj/item/clothing/shoes/sneakers/brown + digitigrade_shoes = /obj/item/clothing/shoes/xeno_wraps/command head = /obj/item/clothing/head/hopcap backpack_contents = list(/obj/item/storage/box/ids=1,\ /obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/phone/preset/advanced/command=1) //yogs - removes serv budget diff --git a/code/modules/jobs/job_types/head_of_security.dm b/code/modules/jobs/job_types/head_of_security.dm index 509b5150224c..ba91d38f13bd 100644 --- a/code/modules/jobs/job_types/head_of_security.dm +++ b/code/modules/jobs/job_types/head_of_security.dm @@ -51,9 +51,9 @@ uniform = /obj/item/clothing/under/rank/head_of_security uniform_skirt = /obj/item/clothing/under/rank/head_of_security/skirt shoes = /obj/item/clothing/shoes/jackboots - alt_shoes = /obj/item/clothing/shoes/xeno_wraps/jackboots // Provides Command shoes to digitigrade species + digitigrade_shoes = /obj/item/clothing/shoes/xeno_wraps/jackboots suit = /obj/item/clothing/suit/armor/hos/trenchcoat - gloves = /obj/item/clothing/gloves/color/black/hos + gloves = /obj/item/clothing/gloves/color/black head = /obj/item/clothing/head/HoS/beret glasses = /obj/item/clothing/glasses/hud/security/sunglasses suit_store = /obj/item/gun/energy/e_gun diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm index edea5b86ea19..4a1e2044d7e3 100644 --- a/code/modules/jobs/job_types/research_director.dm +++ b/code/modules/jobs/job_types/research_director.dm @@ -52,7 +52,7 @@ uniform = /obj/item/clothing/under/rank/research_director uniform_skirt = /obj/item/clothing/under/rank/research_director/skirt shoes = /obj/item/clothing/shoes/sneakers/brown - alt_shoes = /obj/item/clothing/shoes/xeno_wraps/command // Provides Command shoes to digitigrade species + digitigrade_shoes = /obj/item/clothing/shoes/xeno_wraps/command suit = /obj/item/clothing/suit/toggle/labcoat l_hand = /obj/item/clipboard l_pocket = /obj/item/laser_pointer diff --git a/code/modules/jobs/job_types/security_officer.dm b/code/modules/jobs/job_types/security_officer.dm index ca50a3384b9a..f81bfd71e423 100644 --- a/code/modules/jobs/job_types/security_officer.dm +++ b/code/modules/jobs/job_types/security_officer.dm @@ -147,6 +147,7 @@ GLOBAL_LIST_INIT(available_depts_sec, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICA head = /obj/item/clothing/head/helmet/sec suit = /obj/item/clothing/suit/armor/vest/alt shoes = /obj/item/clothing/shoes/jackboots + digitigrade_shoes = /obj/item/clothing/shoes/xeno_wraps/jackboots l_pocket = /obj/item/restraints/handcuffs r_pocket = /obj/item/assembly/flash/handheld suit_store = /obj/item/gun/energy/disabler diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm index 700e715620d0..22537ff4708b 100644 --- a/code/modules/jobs/job_types/shaft_miner.dm +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -35,12 +35,14 @@ /datum/outfit/job/miner name = "Shaft Miner" + var/static/gps_number = 1 jobtype = /datum/job/mining pda_type = /obj/item/pda/shaftminer ears = /obj/item/radio/headset/headset_cargo/mining shoes = /obj/item/clothing/shoes/workboots/mining + digitigrade_shoes = /obj/item/clothing/shoes/xeno_wraps/cargo gloves = /obj/item/clothing/gloves/color/black uniform = /obj/item/clothing/under/rank/miner/lavaland neck = /obj/item/clothing/neck/bodycam/miner @@ -59,6 +61,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/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm index f6c7bc09cdad..ce70670ea03c 100644 --- a/code/modules/jobs/job_types/station_engineer.dm +++ b/code/modules/jobs/job_types/station_engineer.dm @@ -98,6 +98,7 @@ GLOBAL_LIST_INIT(available_depts_eng, list(ENG_DEPT_MEDICAL, ENG_DEPT_SCIENCE, E uniform = /obj/item/clothing/under/rank/engineer uniform_skirt = /obj/item/clothing/under/rank/engineer/skirt shoes = /obj/item/clothing/shoes/workboots + digitigrade_shoes = /obj/item/clothing/shoes/xeno_wraps/engineering head = /obj/item/clothing/head/hardhat r_pocket = /obj/item/t_scanner diff --git a/code/modules/jobs/job_types/warden.dm b/code/modules/jobs/job_types/warden.dm index f8b5e127017d..cb41dd5b5af5 100644 --- a/code/modules/jobs/job_types/warden.dm +++ b/code/modules/jobs/job_types/warden.dm @@ -50,6 +50,7 @@ uniform = /obj/item/clothing/under/rank/warden uniform_skirt = /obj/item/clothing/under/rank/warden/skirt shoes = /obj/item/clothing/shoes/jackboots + digitigrade_shoes = /obj/item/clothing/shoes/xeno_wraps/jackboots suit = /obj/item/clothing/suit/armor/vest/warden/alt gloves = /obj/item/clothing/gloves/color/black head = /obj/item/clothing/head/warden diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index 5dad1f5e2b0e..aa2151d0dd51 100644 --- a/code/modules/mining/equipment/explorer_gear.dm +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -13,7 +13,7 @@ flags_prot = HIDEJUMPSUIT hoodtype = /obj/item/clothing/head/hooded/explorer armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 50, WOUND = 10) - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat) resistance_flags = FIRE_PROOF mutantrace_variation = MUTANTRACE_VARIATION @@ -88,7 +88,7 @@ resistance_flags = FIRE_PROOF | LAVA_PROOF slowdown = 0 armor = list(MELEE = 75, BULLET = 40, LASER = 40, ENERGY = 40, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 100) - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat) /obj/item/clothing/suit/space/hostile_environment/Initialize() . = ..() @@ -134,6 +134,6 @@ /obj/item/clothing/head/helmet/space/hostile_environment/worn_overlays(isinhands) . = ..() if(!isinhands) - var/mutable_appearance/M = mutable_appearance('icons/mob/head.dmi', "hostile_env_glass") + var/mutable_appearance/M = mutable_appearance(mob_overlay_icon, "hostile_env_glass") M.appearance_flags = RESET_COLOR . += M diff --git a/code/modules/mining/equipment/resonator.dm b/code/modules/mining/equipment/resonator.dm index 603524253f60..9bf227c55348 100644 --- a/code/modules/mining/equipment/resonator.dm +++ b/code/modules/mining/equipment/resonator.dm @@ -121,5 +121,5 @@ if(!istype(M) || !M.mineralType) // so we don't end up in the ultimate chain reaction return for(var/turf/closed/mineral/T in orange(1, M)) - if(istype(T) && M.mineralType == T.mineralType) + if(istype(T) && !locate(/obj/effect/temp_visual/resonance) in T && M.mineralType == T.mineralType) new /obj/effect/temp_visual/resonance(T, creator, null, duration) //yogs end diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index f9176b770007..2e3617c5fe58 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -580,12 +580,86 @@ GLOBAL_LIST_EMPTY(bloodmen_list) righthand_file = 'yogstation/icons/mob/inhands/weapons/scimmy_righthand.dmi' icon = 'yogstation/icons/obj/lavaland/artefacts.dmi' icon_state = "rune_scimmy" - force = 28 + force = 20 slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK damtype = BRUTE sharpness = SHARP_EDGED hitsound = 'yogstation/sound/weapons/rs_slash.ogg' attack_verb = list("slashed","pk'd","atk'd") + var/mobs_grinded = 0 + var/max_grind = 20 + +/obj/item/rune_scimmy/examine(mob/living/user) + . = ..() + . += span_notice("This blade fills you with a need to 'grind'. Slay hostile fauna to increase the Scimmy's power and earn loot.") + . += span_notice("The blade has grinded [mobs_grinded] out of [max_grind] fauna to reach maximum power, and will deal [mobs_grinded * 5] bonus damage to fauna.") + +/obj/item/rune_scimmy/afterattack(atom/target, mob/user, proximity, click_parameters) + . = ..() + if(!proximity) + return + if(isliving(target)) + var/mob/living/L = target + if(ismegafauna(L) || istype(L, /mob/living/simple_animal/hostile/asteroid)) //no loot allowed from the little skulls + if(!istype(L, /mob/living/simple_animal/hostile/asteroid/hivelordbrood)) + RegisterSignal(target,COMSIG_MOB_DEATH,.proc/roll_loot, TRUE) + //after quite a bit of grinding, you'll be doing a total of 120 damage to fauna per hit. A lot, but i feel like the grind justifies the payoff. also this doesn't effect crew. so. go nuts. + L.apply_damage(mobs_grinded*5,BRUTE) + +///This proc handles rolling the loot on the loot table and "drops" the loot where the hostile fauna died +/obj/item/rune_scimmy/proc/roll_loot(mob/living/target) + UnregisterSignal(target, COMSIG_MOB_DEATH) + if(mobs_grinded world.time) + to_chat(user, span_warning("You can't do that yet!")) + return + user.visible_message(span_warning("[user] splashes blood from the knuckles!")) + playsound(T, 'sound/effects/splat.ogg', 80, 5, -1) + for(var/i = 0 to splash_range) + if(T) + new /obj/effect/decal/cleanable/blood(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)) @@ -1178,6 +1266,8 @@ GLOBAL_LIST_EMPTY(bloodmen_list) return var/valid_reaching = FALSE for(var/mob/living/L in view(7, U)) + if(L == U) + continue for(var/obj/effect/decal/cleanable/B in range(0,L)) if(istype(B, /obj/effect/decal/cleanable/blood )|| istype(B, /obj/effect/decal/cleanable/trail_holder)) valid_reaching = TRUE @@ -1577,15 +1667,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 @@ -1598,6 +1688,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/dead/new_player/sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories.dm index ba48f2d4d4cc..5be5fd20f645 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories.dm @@ -1010,7 +1010,7 @@ // Underwear Definitions // /////////////////////////// /datum/sprite_accessory/underwear - icon = 'icons/mob/underwear.dmi' + icon = 'icons/mob/clothing/sprite_accessories/underwear.dmi' /datum/sprite_accessory/underwear/nude name = "Nude" @@ -1212,7 +1212,7 @@ //////////////////////////// /datum/sprite_accessory/undershirt - icon = 'icons/mob/underwear.dmi' + icon = 'icons/mob/clothing/sprite_accessories/undershirt.dmi' /datum/sprite_accessory/undershirt/nude name = "Nude" @@ -1496,7 +1496,7 @@ /////////////////////// /datum/sprite_accessory/socks - icon = 'icons/mob/underwear.dmi' + icon = 'icons/mob/clothing/sprite_accessories/socks.dmi' /datum/sprite_accessory/socks/nude name = "Nude" diff --git a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm index 705381e6b8bb..256f7cdb2864 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm @@ -59,16 +59,19 @@ /mob/living/carbon/alien/humanoid/update_inv_handcuffed() remove_overlay(HANDCUFF_LAYER) - var/cuff_icon = "aliencuff" - var/dmi_file = 'icons/mob/alien.dmi' - - if(mob_size == MOB_SIZE_LARGE) - cuff_icon = "aliencuff_[caste]" - dmi_file = 'icons/mob/alienqueen.dmi' if(handcuffed) - overlays_standing[HANDCUFF_LAYER] = mutable_appearance(dmi_file, cuff_icon, -HANDCUFF_LAYER) - apply_overlay(HANDCUFF_LAYER) + var/cuff_icon = handcuffed.item_state + var/dmi_file = 'icons/mob/alien.dmi' + + if(mob_size == MOB_SIZE_LARGE) + cuff_icon += "_[caste]" + dmi_file = 'icons/mob/alienqueen.dmi' + + var/mutable_appearance/cuffs = mutable_appearance(dmi_file, cuff_icon, -HANDCUFF_LAYER) + cuffs.color = handcuffed.color + + overlays_standing[HANDCUFF_LAYER] = cuffs //Royals have bigger sprites, so inhand things must be handled differently. /mob/living/carbon/alien/humanoid/royal/update_inv_hands() @@ -91,4 +94,4 @@ hands += mutable_appearance(alt_inhands_file, "[itm_state][caste]_r", -HANDS_LAYER) overlays_standing[HANDS_LAYER] = hands - apply_overlay(HANDS_LAYER) \ No newline at end of file + apply_overlay(HANDS_LAYER) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 438e4d107d1f..94b3d3eba86a 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -187,6 +187,7 @@ else if(!CHECK_BITFIELD(I.item_flags, ABSTRACT) && !HAS_TRAIT(I, TRAIT_NODROP)) thrown_thing = I + SEND_SIGNAL(thrown_thing, COMSIG_MOVABLE_PRE_DROPTHROW, src) dropItemToGround(I, silent = TRUE) if(HAS_TRAIT(src, TRAIT_PACIFISM) && I.throwforce) @@ -497,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 @@ -538,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/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index c989ec52a3fe..55867c347356 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -5,13 +5,23 @@ hud_possible = list(HEALTH_HUD,STATUS_HUD,ANTAG_HUD,GLAND_HUD,NANITE_HUD,DIAG_NANITE_FULL_HUD) has_limbs = 1 held_items = list(null, null) - var/list/internal_organs = list() //List of /obj/item/organ in the mob. They don't go in the contents for some reason I don't want to know. - var/list/internal_organs_slot= list() //Same as above, but stores "slot ID" - "organ" pairs for easy access. - var/silent = FALSE //Can't talk. Value goes down every life proc. //NOTE TO FUTURE CODERS: DO NOT INITIALIZE NUMERICAL VARS AS NULL OR I WILL MURDER YOU. - var/dreaming = 0 //How many dream images we have left to send - - var/obj/item/handcuffed = null //Whether or not the mob is handcuffed - var/obj/item/legcuffed = null //Same as handcuffs but for legs. Bear traps use this. + /// List of /obj/item/organ in the mob. + /// They don't go in the contents for some reason I don't want to know. + var/list/internal_organs = list() + /// List of /obj/item/organ in the mob by slot ID for easy access. + /// They don't go in the contents for some reason I don't want to know. + var/list/internal_organs_slot= list() + + /// Can't talk. Value goes down every life proc. + /// NOTE TO FUTURE CODERS: DO NOT INITIALIZE NUMERICAL VARS AS NULL OR I WILL MURDER YOU. + var/silent = FALSE + /// How many dream images we have left to send + var/dreaming = 0 + + /// A reference to the current handcuff on this carbon if one is equipped. + var/obj/item/restraints/handcuffed = null + /// A reference to the current legcuff on this carbon if one is equipped. Bear traps use this. + var/obj/item/restraints/legcuffed = null var/disgust = 0 diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index 75a3cb178ae5..f80c6c2b1939 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -78,6 +78,15 @@ msg += "[t_He] [t_is] moderately deformed!\n" else msg += "[t_He] [t_is] severely deformed!\n" + + if(surgeries.len) + var/surgery_text + for(var/datum/surgery/S in surgeries) + if(!surgery_text) + surgery_text = "[t_He] [t_is] being operated on in \the [S.operated_bodypart]" + else + surgery_text += ", [S.operated_bodypart]" + msg += "[surgery_text].\n" if(HAS_TRAIT(src, TRAIT_DUMB)) msg += "[t_He] seem[p_s()] to be clumsy and unable to think.\n" diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 324beccad878..60a34b30803d 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -206,7 +206,15 @@ msg += "[t_He] [t_has] moderate cellular damage!\n" else msg += "[t_He] [t_has] severe cellular damage!\n" - + + if(surgeries.len) + var/surgery_text + for(var/datum/surgery/S in surgeries) + if(!surgery_text) + surgery_text = "[t_He] [t_is] being operated on in \the [S.operated_bodypart]" + else + surgery_text += ", [S.operated_bodypart]" + msg += "[surgery_text].\n" if(fire_stacks > 0) msg += "[t_He] [t_is] covered in something flammable.\n" 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/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm index 4d986a5ea931..dbb652e4f475 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -8,8 +8,8 @@ sexes = 0 ignored_by = list(/mob/living/simple_animal/hostile/faithless) meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/shadow - species_traits = list(NOBLOOD,NOEYESPRITES,NOFLASH) - inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_NOBREATH) + species_traits = list(NOBLOOD,NOEYESPRITES,NOFLASH,) + inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_NOBREATH,TRAIT_GENELESS) changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC mutanteyes = /obj/item/organ/eyes/night_vision diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index af62aa221bfc..99684c3c2c54 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -115,26 +115,23 @@ There are several things that need to be remembered: if(wear_suit && (wear_suit.flags_inv & HIDEJUMPSUIT)) return - - var/t_color = U.item_color - if(!t_color) - t_color = U.icon_state + var/target_overlay = U.icon_state if(U.adjusted == ALT_STYLE) - t_color = "[t_color]_d" + target_overlay = "[target_overlay]_d" else if(U.adjusted == DIGITIGRADE_STYLE) - t_color = "[t_color]_l" + target_overlay = "[target_overlay]_l" else if(U.adjusted == DIGIALT_STYLE) //Yogs Start: Handles when you are using an alternate style while having digi legs - t_color = "[t_color]_d_l" //Yogs End + target_overlay = "[target_overlay]_d_l" //Yogs End var/mutable_appearance/uniform_overlay if(dna && dna.species.sexes) var/G = (gender == FEMALE) ? "f" : "m" if(G == "f" && U.fitted != NO_FEMALE_UNIFORM) - uniform_overlay = U.build_worn_icon(state = "[t_color]", default_layer = UNIFORM_LAYER, default_icon_file = 'icons/mob/uniform.dmi', isinhands = FALSE, femaleuniform = U.fitted) + uniform_overlay = U.build_worn_icon(default_layer = UNIFORM_LAYER, default_icon_file = 'icons/mob/clothing/uniform/uniform.dmi', isinhands = FALSE, femaleuniform = U.fitted, override_state = target_overlay) if(!uniform_overlay) - uniform_overlay = U.build_worn_icon(state = "[t_color]", default_layer = UNIFORM_LAYER, default_icon_file = 'icons/mob/uniform.dmi', isinhands = FALSE) + uniform_overlay = U.build_worn_icon(default_layer = UNIFORM_LAYER, default_icon_file = 'icons/mob/clothing/uniform/uniform.dmi', isinhands = FALSE, override_state = target_overlay) if(OFFSET_UNIFORM in dna.species.offset_features) @@ -162,7 +159,7 @@ There are several things that need to be remembered: update_observer_view(wear_id) //TODO: add an icon file for ID slot stuff, so it's less snowflakey - id_overlay = wear_id.build_worn_icon(state = wear_id.item_state, default_layer = ID_LAYER, default_icon_file = 'icons/mob/mob.dmi') + id_overlay = wear_id.build_worn_icon(default_layer = ID_LAYER, default_icon_file = 'icons/mob/clothing/id/id.dmi') if(OFFSET_ID in dna.species.offset_features) id_overlay.pixel_x += dna.species.offset_features[OFFSET_ID][1] id_overlay.pixel_y += dna.species.offset_features[OFFSET_ID][2] @@ -195,10 +192,7 @@ There are several things that need to be remembered: if(hud_used.inventory_shown) client.screen += gloves update_observer_view(gloves,1) - var/t_state = gloves.item_state - if(!t_state) - t_state = gloves.icon_state - overlays_standing[GLOVES_LAYER] = gloves.build_worn_icon(state = t_state, default_layer = GLOVES_LAYER, default_icon_file = 'icons/mob/hands.dmi') + overlays_standing[GLOVES_LAYER] = gloves.build_worn_icon(default_layer = GLOVES_LAYER, default_icon_file = 'icons/mob/clothing/hands/hands.dmi') gloves_overlay = overlays_standing[GLOVES_LAYER] if(OFFSET_GLOVES in dna.species.offset_features) gloves_overlay.pixel_x += dna.species.offset_features[OFFSET_GLOVES][1] @@ -224,7 +218,7 @@ There are several things that need to be remembered: client.screen += glasses //Either way, add the item to the HUD update_observer_view(glasses,1) if(!(head && (head.flags_inv & HIDEEYES)) && !(wear_mask && (wear_mask.flags_inv & HIDEEYES))) - overlays_standing[GLASSES_LAYER] = glasses.build_worn_icon(state = glasses.icon_state, default_layer = GLASSES_LAYER, default_icon_file = 'icons/mob/eyes.dmi') + overlays_standing[GLASSES_LAYER] = glasses.build_worn_icon(default_layer = GLASSES_LAYER, default_icon_file = 'icons/mob/clothing/eyes/eyes.dmi') var/mutable_appearance/glasses_overlay = overlays_standing[GLASSES_LAYER] if(glasses_overlay) @@ -251,8 +245,7 @@ There are several things that need to be remembered: if(hud_used.inventory_shown) //if the inventory is open client.screen += ears //add it to the client's screen update_observer_view(ears,1) - - overlays_standing[EARS_LAYER] = ears.build_worn_icon(state = ears.icon_state, default_layer = EARS_LAYER, default_icon_file = 'icons/mob/ears.dmi') + overlays_standing[EARS_LAYER] = ears.build_worn_icon(default_layer = EARS_LAYER, default_icon_file = 'icons/mob/clothing/ears/ears.dmi') var/mutable_appearance/ears_overlay = overlays_standing[EARS_LAYER] if(OFFSET_EARS in dna.species.offset_features) ears_overlay.pixel_x += dna.species.offset_features[OFFSET_EARS][1] @@ -260,6 +253,27 @@ There are several things that need to be remembered: overlays_standing[EARS_LAYER] = ears_overlay apply_overlay(EARS_LAYER) +/mob/living/carbon/human/update_inv_neck() + remove_overlay(NECK_LAYER) + + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_NECK] + inv.update_icon() + + if(wear_neck) + wear_neck.screen_loc = ui_neck + if(client && hud_used && hud_used.hud_shown) + if(hud_used.inventory_shown) //if the inventory is open + client.screen += wear_neck //add it to the client's screen + update_observer_view(wear_neck,1) + if(!(ITEM_SLOT_NECK in check_obscured_slots())) + overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = 'icons/mob/clothing/neck/neck.dmi') + var/mutable_appearance/neck_overlay = overlays_standing[NECK_LAYER] + if(OFFSET_NECK in dna.species.offset_features) + neck_overlay.pixel_x += dna.species.offset_features[OFFSET_NECK][1] + neck_overlay.pixel_y += dna.species.offset_features[OFFSET_NECK][2] + overlays_standing[NECK_LAYER] = neck_overlay + apply_overlay(NECK_LAYER) /mob/living/carbon/human/update_inv_shoes() remove_overlay(SHOES_LAYER) @@ -272,17 +286,17 @@ There are several things that need to be remembered: inv.update_icon() if(shoes) + var/target_overlay = shoes.icon_state + if(istype(shoes, /obj/item/clothing/shoes)) + var/obj/item/clothing/shoes/S = shoes + if(S.adjusted == DIGITIGRADE_STYLE) + target_overlay = "[target_overlay]_l" shoes.screen_loc = ui_shoes //move the item to the appropriate screen loc - var/obj/item/clothing/shoes/S = shoes - var/worn_shoes_icon = S.icon_state - if(S.adjusted == DIGITIGRADE_STYLE) - worn_shoes_icon = "[S.icon_state]_l" // Sets digitgrade version of a shoe if it has it - if(client && hud_used && hud_used.hud_shown) if(hud_used.inventory_shown) //if the inventory is open client.screen += shoes //add it to client's screen update_observer_view(shoes,1) - overlays_standing[SHOES_LAYER] = shoes.build_worn_icon(state = worn_shoes_icon, default_layer = SHOES_LAYER, default_icon_file = 'icons/mob/feet.dmi') + overlays_standing[SHOES_LAYER] = shoes.build_worn_icon(default_layer = SHOES_LAYER, default_icon_file = 'icons/mob/clothing/feet/feet.dmi', override_state = target_overlay) var/mutable_appearance/shoes_overlay = overlays_standing[SHOES_LAYER] if(OFFSET_SHOES in dna.species.offset_features) shoes_overlay.pixel_x += dna.species.offset_features[OFFSET_SHOES][1] @@ -307,7 +321,7 @@ There are several things that need to be remembered: var/t_state = s_store.item_state if(!t_state) t_state = s_store.icon_state - overlays_standing[SUIT_STORE_LAYER] = mutable_appearance('icons/mob/belt_mirror.dmi', t_state, -SUIT_STORE_LAYER) + overlays_standing[SUIT_STORE_LAYER] = mutable_appearance('icons/mob/clothing/suit_storage.dmi', t_state, -SUIT_STORE_LAYER) var/mutable_appearance/s_store_overlay = overlays_standing[SUIT_STORE_LAYER] if(OFFSET_S_STORE in dna.species.offset_features) s_store_overlay.pixel_x += dna.species.offset_features[OFFSET_S_STORE][1] @@ -319,6 +333,9 @@ There are several things that need to be remembered: /mob/living/carbon/human/update_inv_head() ..() update_mutant_bodyparts() + if(head) + update_hud_head(head) + overlays_standing[HEAD_LAYER] = head.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/clothing/head/head.dmi') var/mutable_appearance/head_overlay = overlays_standing[HEAD_LAYER] if(head_overlay) remove_overlay(HEAD_LAYER) @@ -340,12 +357,7 @@ There are several things that need to be remembered: if(client && hud_used && hud_used.hud_shown) client.screen += belt update_observer_view(belt) - - var/t_state = belt.item_state - if(!t_state) - t_state = belt.icon_state - - overlays_standing[BELT_LAYER] = belt.build_worn_icon(state = t_state, default_layer = BELT_LAYER, default_icon_file = 'icons/mob/belt.dmi') + overlays_standing[BELT_LAYER] = belt.build_worn_icon(default_layer = BELT_LAYER, default_icon_file = 'icons/mob/clothing/belt.dmi') var/mutable_appearance/belt_overlay = overlays_standing[BELT_LAYER] if(OFFSET_BELT in dna.species.offset_features) belt_overlay.pixel_x += dna.species.offset_features[OFFSET_BELT][1] @@ -363,23 +375,18 @@ There are several things that need to be remembered: var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_SUIT] inv.update_icon() - if(istype(wear_suit, /obj/item/clothing/suit)) + if(istype(wear_suit, /obj/item)) wear_suit.screen_loc = ui_oclothing - var/obj/item/clothing/suit/S = wear_suit - var/worn_suit_icon = S.icon_state - if(S.adjusted == DIGITIGRADE_STYLE) - worn_suit_icon = "[wear_suit.icon_state]_l" // Checks for digitgrade version of a suit if it has it if(client && hud_used && hud_used.hud_shown) if(hud_used.inventory_shown) client.screen += wear_suit - update_observer_view(wear_suit,1) - - overlays_standing[SUIT_LAYER] = wear_suit.build_worn_icon(state = worn_suit_icon, default_layer = SUIT_LAYER, default_icon_file = 'icons/mob/suit.dmi') + overlays_standing[SUIT_LAYER] = wear_suit.build_worn_icon(default_layer = SUIT_LAYER, default_icon_file = 'icons/mob/clothing/suit/suit.dmi') var/mutable_appearance/suit_overlay = overlays_standing[SUIT_LAYER] if(OFFSET_SUIT in dna.species.offset_features) suit_overlay.pixel_x += dna.species.offset_features[OFFSET_SUIT][1] suit_overlay.pixel_y += dna.species.offset_features[OFFSET_SUIT][2] - overlays_standing[SUIT_LAYER] = suit_overlay + overlays_standing[SUIT_LAYER] = suit_overlay + update_observer_view(wear_suit,1) update_hair() update_mutant_bodyparts() @@ -410,36 +417,47 @@ There are several things that need to be remembered: /mob/living/carbon/human/update_inv_wear_mask() - ..() - var/mutable_appearance/mask_overlay = overlays_standing[FACEMASK_LAYER] - if(mask_overlay) - remove_overlay(FACEMASK_LAYER) - if(OFFSET_FACEMASK in dna.species.offset_features) - mask_overlay.pixel_x += dna.species.offset_features[OFFSET_FACEMASK][1] - mask_overlay.pixel_y += dna.species.offset_features[OFFSET_FACEMASK][2] - overlays_standing[FACEMASK_LAYER] = mask_overlay + remove_overlay(FACEMASK_LAYER) + + if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated + return + + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK] + inv.update_icon() + + if(wear_mask) + update_hud_wear_mask(wear_mask) + overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/clothing/mask/mask.dmi') + var/mutable_appearance/mask_overlay = overlays_standing[FACEMASK_LAYER] + if(mask_overlay) + remove_overlay(FACEMASK_LAYER) + if(OFFSET_FACEMASK in dna.species.offset_features) + mask_overlay.pixel_x += dna.species.offset_features[OFFSET_FACEMASK][1] + mask_overlay.pixel_y += dna.species.offset_features[OFFSET_FACEMASK][2] + overlays_standing[FACEMASK_LAYER] = mask_overlay apply_overlay(FACEMASK_LAYER) update_mutant_bodyparts() //e.g. upgate needed because mask now hides lizard snout /mob/living/carbon/human/update_inv_back() - ..() - var/mutable_appearance/back_overlay = overlays_standing[BACK_LAYER] - if(back_overlay) - remove_overlay(BACK_LAYER) - if(OFFSET_BACK in dna.species.offset_features) - back_overlay.pixel_x += dna.species.offset_features[OFFSET_BACK][1] - back_overlay.pixel_y += dna.species.offset_features[OFFSET_BACK][2] + remove_overlay(BACK_LAYER) + + if(client && hud_used && hud_used.inv_slots[SLOT_BACK]) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_BACK] + inv.update_icon() + + if(back) + update_hud_back(back) + overlays_standing[BACK_LAYER] = back.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = 'icons/mob/clothing/back.dmi') + var/mutable_appearance/back_overlay = overlays_standing[BACK_LAYER] + if(back_overlay) + remove_overlay(BACK_LAYER) + if(OFFSET_BACK in dna.species.offset_features) + back_overlay.pixel_x += dna.species.offset_features[OFFSET_BACK][1] + back_overlay.pixel_y += dna.species.offset_features[OFFSET_BACK][2] overlays_standing[BACK_LAYER] = back_overlay apply_overlay(BACK_LAYER) -/mob/living/carbon/human/update_inv_legcuffed() - remove_overlay(LEGCUFF_LAYER) - clear_alert("legcuffed") - if(legcuffed) - overlays_standing[LEGCUFF_LAYER] = mutable_appearance('icons/mob/mob.dmi', "legcuff1", -LEGCUFF_LAYER) - apply_overlay(LEGCUFF_LAYER) - throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = src.legcuffed) - /proc/wear_female_version(t_color, icon, layer, type) var/index = t_color var/icon/female_clothing_icon = GLOB.female_clothing_icons[index] @@ -514,7 +532,7 @@ default_layer: The layer to draw this on if no other layer is specified default_icon_file: The icon file to draw states from if no other icon file is specified -isinhands: If true then alternate_worn_icon is skipped so that default_icon_file is used, +isinhands: If true then mob_overlay_icon is skipped so that default_icon_file is used, in this situation default_icon_file is expected to match either the lefthand_ or righthand_ file var femalueuniform: A value matching a uniform item's fitted var, if this is anything but NO_FEMALE_UNIFORM, we @@ -522,12 +540,24 @@ generate/load female uniform sprites matching all previously decided variables */ -/obj/item/proc/build_worn_icon(var/state = "", var/default_layer = 0, var/default_icon_file = null, var/isinhands = FALSE, var/femaleuniform = NO_FEMALE_UNIFORM) +/obj/item/proc/build_worn_icon(default_layer = 0, default_icon_file = null, isinhands = FALSE, femaleuniform = NO_FEMALE_UNIFORM, override_state = null) + + var/t_state + if(override_state) + t_state = override_state + else + if(isinhands && item_state) + t_state = item_state + else + t_state = icon_state + var/t_icon = mob_overlay_icon + if(!t_icon) + t_icon = default_icon_file //Find a valid icon file from variables+arguments var/file2use - if(!isinhands && alternate_worn_icon) - file2use = alternate_worn_icon + if(!isinhands && mob_overlay_icon) + file2use = mob_overlay_icon if(!file2use) file2use = default_icon_file @@ -542,12 +572,12 @@ generate/load female uniform sprites matching all previously decided variables var/mutable_appearance/standing if(femaleuniform) if(HAS_TRAIT(H, TRAIT_SKINNY) && (H.underwear == "Nude")) - standing = wear_skinny_version(state,file2use,layer2use,femaleuniform) + standing = wear_skinny_version(t_state, file2use, layer2use, femaleuniform) else - standing = wear_female_version(state,file2use,layer2use,femaleuniform) + standing = wear_female_version(t_state, file2use, layer2use, femaleuniform) if(!standing) - standing = mutable_appearance(file2use, state, -layer2use) - + standing = mutable_appearance(file2use, t_state, -layer2use) + //Get the overlays for this item when it's being worn //eg: ammo counters, primed grenade flashes, etc. var/list/worn_overlays = worn_overlays(isinhands, file2use) diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm index 41d37a50217b..ed30724689dd 100644 --- a/code/modules/mob/living/carbon/monkey/update_icons.dm +++ b/code/modules/mob/living/carbon/monkey/update_icons.dm @@ -43,10 +43,15 @@ /mob/living/carbon/monkey/update_inv_legcuffed() remove_overlay(LEGCUFF_LAYER) + clear_alert("legcuffed") if(legcuffed) - var/mutable_appearance/legcuff_overlay = mutable_appearance('icons/mob/mob.dmi', "legcuff1", -LEGCUFF_LAYER) - legcuff_overlay.pixel_y = 8 - overlays_standing[LEGCUFF_LAYER] = legcuff_overlay + var/mutable_appearance/legcuffs = mutable_appearance('icons/mob/restraints.dmi', legcuffed.item_state, -LEGCUFF_LAYER) + legcuffs.color = handcuffed.color + legcuffs.pixel_y = 8 + + overlays_standing[HANDCUFF_LAYER] = legcuffs + apply_overlay(LEGCUFF_LAYER) + throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = legcuffed) apply_overlay(LEGCUFF_LAYER) @@ -74,4 +79,4 @@ /mob/living/carbon/monkey/update_hud_back(obj/item/I) if(client && hud_used && hud_used.hud_shown) I.screen_loc = ui_monkey_back - client.screen += I \ No newline at end of file + client.screen += I diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index 5dc538ee5cfa..287af24bf46c 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -77,7 +77,7 @@ if(get_held_index_of_item(I) % 2 == 0) icon_file = I.righthand_file - hands += I.build_worn_icon(state = t_state, default_layer = HANDS_LAYER, default_icon_file = icon_file, isinhands = TRUE) + hands += I.build_worn_icon(default_layer = HANDS_LAYER, default_icon_file = icon_file, isinhands = TRUE) overlays_standing[HANDS_LAYER] = hands apply_overlay(HANDS_LAYER) @@ -121,7 +121,7 @@ if(wear_mask) if(!(SLOT_WEAR_MASK in check_obscured_slots())) - overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(state = wear_mask.icon_state, default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/mask.dmi') + overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/clothing/mask/mask.dmi') update_hud_wear_mask(wear_mask) apply_overlay(FACEMASK_LAYER) @@ -135,7 +135,7 @@ if(wear_neck) if(!(SLOT_NECK in check_obscured_slots())) - overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(state = wear_neck.icon_state, default_layer = NECK_LAYER, default_icon_file = 'icons/mob/neck.dmi') + overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = 'icons/mob/clothing/neck/neck.dmi') update_hud_neck(wear_neck) apply_overlay(NECK_LAYER) @@ -148,7 +148,7 @@ inv.update_icon() if(back) - overlays_standing[BACK_LAYER] = back.build_worn_icon(state = back.icon_state, default_layer = BACK_LAYER, default_icon_file = 'icons/mob/back.dmi') + overlays_standing[BACK_LAYER] = back.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = 'icons/mob/clothing/back.dmi') update_hud_back(back) apply_overlay(BACK_LAYER) @@ -164,7 +164,7 @@ inv.update_icon() if(head) - overlays_standing[HEAD_LAYER] = head.build_worn_icon(state = head.icon_state, default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/head.dmi') + overlays_standing[HEAD_LAYER] = head.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/clothing/head/head.dmi') update_hud_head(head) apply_overlay(HEAD_LAYER) @@ -173,9 +173,22 @@ /mob/living/carbon/update_inv_handcuffed() remove_overlay(HANDCUFF_LAYER) if(handcuffed) - overlays_standing[HANDCUFF_LAYER] = mutable_appearance('icons/mob/mob.dmi', "handcuff1", -HANDCUFF_LAYER) + var/mutable_appearance/cuffs = mutable_appearance('icons/mob/restraints.dmi', handcuffed.item_state, -HANDCUFF_LAYER) + cuffs.color = handcuffed.color + + overlays_standing[HANDCUFF_LAYER] = cuffs apply_overlay(HANDCUFF_LAYER) +/mob/living/carbon/update_inv_legcuffed() + remove_overlay(LEGCUFF_LAYER) + clear_alert("legcuffed") + if(legcuffed) + var/mutable_appearance/legcuffs = mutable_appearance('icons/mob/restraints.dmi', legcuffed.item_state, -LEGCUFF_LAYER) + legcuffs.color = handcuffed.color + + overlays_standing[HANDCUFF_LAYER] = legcuffs + apply_overlay(LEGCUFF_LAYER) + throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = legcuffed) //mob HUD updates for items in our inventory diff --git a/code/modules/mob/living/inhand_holder.dm b/code/modules/mob/living/inhand_holder.dm index 0a73fdeb0303..6d3f2b90a30b 100644 --- a/code/modules/mob/living/inhand_holder.dm +++ b/code/modules/mob/living/inhand_holder.dm @@ -15,12 +15,6 @@ . = ..() if(weight > MOB_SIZE_SMALL) w_class = weight + 2 // rough conversion - if(clothing_layer) - alternate_worn_layer = clothing_layer - if(held_icon) - alternate_worn_icon = held_icon - if(worn_state) - item_state = worn_state if(lh_icon) lefthand_file = lh_icon if(rh_icon) @@ -83,6 +77,13 @@ /obj/item/clothing/mob_holder/container_resist() release() +/obj/item/clothing/mob_holder/pre_attack(atom/A, mob/living/user, params) + if(isobj(A) && ismachinery(A)) + if(istype(A, /obj/machinery/deepfryer)) + to_chat(user, span_warning("You wouldn't deepfry [name].....")) + return + . = ..() + /obj/item/clothing/mob_holder/drone/deposit(mob/living/L) . = ..() if(!isdrone(L)) @@ -112,4 +113,4 @@ held_mob = null if(del_on_release && !destroying) qdel(src) - return TRUE \ No newline at end of file + return TRUE diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 07410fe5b7f6..6e08540bbaa4 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -533,7 +533,8 @@ livingdoll.filtered = TRUE var/icon/mob_mask = icon(icon, icon_state) if(mob_mask.Height() > world.icon_size || mob_mask.Width() > world.icon_size) - mob_mask = icon('icons/mob/screen_gen.dmi', "megasprite") //swap to something that fits if they wont + var/health_doll_icon_state = health_doll_icon ? health_doll_icon : "megasprite" + mob_mask = icon('icons/mob/screen_gen.dmi', health_doll_icon_state) //swap to something generic if they have no special doll UNLINT(livingdoll.filters += filter(type="alpha", icon = mob_mask)) livingdoll.filters += filter(type="drop_shadow", size = -1) if(severity > 0) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index ab75a5c65977..df52c8a0f576 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -73,6 +73,8 @@ var/smoke_delay = 0 //used to prevent spam with smoke reagent reaction on mob. + var/health_doll_icon //if this exists AND the normal sprite is bigger than 32x32, this is the replacement icon state (because health doll size limitations). the icon will always be screen_gen.dmi + var/bubble_icon = "default" //what icon the mob uses for speechbubbles var/last_bumped = 0 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 763eb34c7792..617dbcf3773b 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/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index e1ea21f51d55..fbbf8491bf89 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -687,7 +687,7 @@ else add_overlay("ov-opencover -c") if(hat) - var/mutable_appearance/head_overlay = hat.build_worn_icon(state = hat.icon_state, default_layer = 20, default_icon_file = 'icons/mob/head.dmi') + var/mutable_appearance/head_overlay = hat.build_worn_icon(default_layer = 20, default_icon_file = 'icons/mob/clothing/head/head.dmi') head_overlay.pixel_y += hat_offset add_overlay(head_overlay) update_fire() diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index f1562c7ec604..df152897a3fa 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -648,8 +648,7 @@ /obj/item/bonesetter, /obj/item/melee/transforming/energy/sword/cyborg/saw, /obj/item/roller/robo, - /obj/item/card/emag, - /obj/item/crowbar/cyborg, + /obj/item/restraints/handcuffs/cable/zipties, /obj/item/extinguisher/mini, /obj/item/pinpointer/syndicate_cyborg, /obj/item/stack/medical/gauze/cyborg, @@ -668,6 +667,7 @@ name = "Syndicate Saboteur" basic_modules = list( /obj/item/assembly/flash/cyborg, + /obj/item/kitchen/knife/combat/cyborg, /obj/item/borg/sight/thermal, /obj/item/construction/rcd/borg/syndicate, /obj/item/pipe_dispenser, diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm index 17d7530c2971..d7bc536a4768 100644 --- a/code/modules/mob/living/simple_animal/corpse.dm +++ b/code/modules/mob/living/simple_animal/corpse.dm @@ -85,7 +85,7 @@ uniform = /obj/item/clothing/under/pirate shoes = /obj/item/clothing/shoes/jackboots glasses = /obj/item/clothing/glasses/eyepatch - head = /obj/item/clothing/head/bandana + head = /obj/item/clothing/head/pirate/bandana /obj/effect/mob_spawn/human/corpse/pirate/ranged diff --git a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm index 408edc711098..b6fe86efe0db 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm @@ -28,12 +28,7 @@ var/y_shift = getItemPixelShiftY() if(r_hand) - - var/r_state = r_hand.item_state - if(!r_state) - r_state = r_hand.icon_state - - var/mutable_appearance/r_hand_overlay = r_hand.build_worn_icon(state = r_state, default_layer = DRONE_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) + var/mutable_appearance/r_hand_overlay = r_hand.build_worn_icon(default_layer = DRONE_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) if(y_shift) r_hand_overlay.pixel_y += y_shift @@ -46,12 +41,7 @@ client.screen |= r_hand if(l_hand) - - var/l_state = l_hand.item_state - if(!l_state) - l_state = l_hand.icon_state - - var/mutable_appearance/l_hand_overlay = l_hand.build_worn_icon(state = l_state, default_layer = DRONE_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) + var/mutable_appearance/l_hand_overlay = l_hand.build_worn_icon(default_layer = DRONE_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) if(y_shift) l_hand_overlay.pixel_y += y_shift @@ -82,10 +72,7 @@ if(client && hud_used && hud_used.hud_shown) head.screen_loc = ui_drone_head client.screen += head - var/used_head_icon = 'icons/mob/head.dmi' - if(istype(head, /obj/item/clothing/mask)) - used_head_icon = 'icons/mob/mask.dmi' - var/mutable_appearance/head_overlay = head.build_worn_icon(state = head.icon_state, default_layer = DRONE_HEAD_LAYER, default_icon_file = used_head_icon) + var/mutable_appearance/head_overlay = head.build_worn_icon(default_layer = DRONE_HEAD_LAYER, default_icon_file = 'icons/mob/clothing/head/head.dmi') head_overlay.pixel_y -= 15 drone_overlays[DRONE_HEAD_LAYER] = head_overlay diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index d87e59f03f16..ab0a0b3205c7 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -92,9 +92,9 @@ GLOBAL_VAR_INIT(mouse_killed, 0) if(!stat) var/mob/M = AM to_chat(M, span_notice("[icon2html(src, M)] Squeak!")) - if(istype(AM, /obj/item/reagent_containers/food/snacks/royalcheese)) - evolve() - qdel(AM) + //if(istype(AM, /obj/item/reagent_containers/food/snacks/royalcheese)) + // evolve() + // qdel(AM) ..() /mob/living/simple_animal/mouse/handle_automated_action() @@ -116,10 +116,10 @@ GLOBAL_VAR_INIT(mouse_killed, 0) be_fruitful() qdel(cheese) return - for(var/obj/item/reagent_containers/food/snacks/royalcheese/bigcheese in range(1, src)) - qdel(bigcheese) - evolve() - return + //for(var/obj/item/reagent_containers/food/snacks/royalcheese/bigcheese in range(1, src)) + // qdel(bigcheese) + // evolve() + // return /** @@ -261,9 +261,9 @@ GLOBAL_VAR_INIT(mouse_killed, 0) var/list/cheeses = list(/obj/item/reagent_containers/food/snacks/cheesewedge, /obj/item/reagent_containers/food/snacks/cheesewheel, /obj/item/reagent_containers/food/snacks/store/cheesewheel, /obj/item/reagent_containers/food/snacks/customizable/cheesewheel, /obj/item/reagent_containers/food/snacks/cheesiehonkers) //all cheeses - royal - if(istype(F, /obj/item/reagent_containers/food/snacks/royalcheese)) - evolve() - return + //if(istype(F, /obj/item/reagent_containers/food/snacks/royalcheese)) + // evolve() + // return if(istype(F, /obj/item/grown/bananapeel/bluespace)) var/obj/item/grown/bananapeel/bluespace/B var/teleport_radius = max(round(B.seed.potency / 10), 1) diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 7465f0b193f6..5ac2b887009e 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -6,6 +6,7 @@ icon_living = "alienh" icon_dead = "alienh_dead" icon_gib = "syndicate_gib" + health_doll_icon = "alienq" gender = FEMALE response_help = "pokes" response_disarm = "shoves" diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index 6c2a9bdecfc9..cf41c87b1782 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -44,6 +44,9 @@ do_footstep = TRUE +/mob/living/simple_animal/hostile/bear/loan + faction = list("hostile") + //SPACE BEARS! SQUEEEEEEEE~ OW! FUCK! IT BIT MY HAND OFF!! /mob/living/simple_animal/hostile/bear/Hudson name = "Hudson" diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index 5a5bb3f09a5a..5548ee1aef5b 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -8,6 +8,7 @@ icon_living = "base" icon_dead = "base_dead" icon_gib = "carp_gib" + health_doll_icon = "megacarp" mob_biotypes = list(MOB_ORGANIC, MOB_BEAST) speak_chance = 0 turns_per_move = 5 @@ -62,6 +63,9 @@ "silver" = "#fdfbf3", \ ) +/mob/living/simple_animal/hostile/carp/loan + faction = list("hostile") + /mob/living/simple_animal/hostile/carp/Initialize(mapload) . = ..() carp_randomify(rarechance) diff --git a/code/modules/mob/living/simple_animal/hostile/feral_cat.dm b/code/modules/mob/living/simple_animal/hostile/feral_cat.dm index 4067d5520898..0907140b0508 100644 --- a/code/modules/mob/living/simple_animal/hostile/feral_cat.dm +++ b/code/modules/mob/living/simple_animal/hostile/feral_cat.dm @@ -26,3 +26,6 @@ atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) unsuitable_atmos_damage = 5 pass_flags = PASSTABLE + +/mob/living/simple_animal/hostile/feral_cat/loan + faction = list("hostile") diff --git a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm index 9423b7b05eed..1e4375d8009d 100644 --- a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm +++ b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm @@ -9,6 +9,7 @@ icon_state = "crawling" icon_living = "crawling" icon_dead = "dead" + health_doll_icon = "crawling" mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID) speak_chance = 80 maxHealth = 220 diff --git a/code/modules/mob/living/simple_animal/hostile/gorilla/visuals_icons.dm b/code/modules/mob/living/simple_animal/hostile/gorilla/visuals_icons.dm index b3e0f3b658aa..9d451748b059 100644 --- a/code/modules/mob/living/simple_animal/hostile/gorilla/visuals_icons.dm +++ b/code/modules/mob/living/simple_animal/hostile/gorilla/visuals_icons.dm @@ -33,14 +33,12 @@ var/obj/item/r_hand = get_item_for_held_index(2) if(r_hand) - var/r_state = r_hand.item_state ? r_hand.item_state : r_hand.icon_state - var/mutable_appearance/r_hand_overlay = r_hand.build_worn_icon(state = r_state, default_layer = GORILLA_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) + var/mutable_appearance/r_hand_overlay = r_hand.build_worn_icon(default_layer = GORILLA_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) r_hand_overlay.pixel_y -= 1 hands_overlays += r_hand_overlay if(l_hand) - var/l_state = l_hand.item_state ? l_hand.item_state : l_hand.icon_state - var/mutable_appearance/l_hand_overlay = l_hand.build_worn_icon(state = l_state, default_layer = GORILLA_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) + var/mutable_appearance/l_hand_overlay = l_hand.build_worn_icon(default_layer = GORILLA_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) l_hand_overlay.pixel_y -= 1 hands_overlays += l_hand_overlay diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm index 09cd436e72f8..d24767767cef 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm @@ -28,6 +28,7 @@ Difficulty: Medium icon_state = "miner" icon_living = "miner" icon = 'icons/mob/broadMobs.dmi' + health_doll_icon = "miner" mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID) light_color = "#E4C7C5" movement_type = GROUND diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index 889829eefcb5..6f9e3f666e3f 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -19,9 +19,8 @@ It can charge at its target, and also heavily damaging anything directly hit in If at half health it will start to charge from all sides with clones. When Bubblegum dies, it leaves behind a H.E.C.K. mining suit as well as one of the following: - 1.set of knuckles that can trap victims where they stand - 2. A cursed stomach that allows the user to hop between vomit puddles - 3.A pair of cuffs allowing the wearer to devour creatures to heal + 1.A set of knuckles that can trap victims where they stand + 2.A pair of cuffs allowing the wearer to devour creatures to heal Difficulty: Hard @@ -37,6 +36,7 @@ Difficulty: Hard icon_state = "bubblegum" icon_living = "bubblegum" icon_dead = "" + health_doll_icon = "bubblegum" friendly = "stares down" icon = 'icons/mob/lavaland/96x96megafauna.dmi' speak_emote = list("gurgles") diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 4e3388e03d93..7348672f8da8 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -31,6 +31,7 @@ Difficulty: Very Hard icon_state = "eva" icon_living = "eva" icon_dead = "" + health_doll_icon = "eva" friendly = "stares down" icon = 'icons/mob/lavaland/96x96megafauna.dmi' speak_emote = list("roars") diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index 2643782d381d..b7d86dc059cc 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -41,6 +41,7 @@ Difficulty: Medium icon_state = "dragon" icon_living = "dragon" icon_dead = "dragon_dead" + health_doll_icon = "dragon" friendly = "stares down" speak_emote = list("roars") armour_penetration = 40 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index b4f731910463..405f0e8b49a1 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -43,6 +43,7 @@ Difficulty: Hard attack_sound = 'sound/weapons/sonic_jackhammer.ogg' icon_state = "hierophant" icon_living = "hierophant" + health_doll_icon = "hierophant" friendly = "stares down" icon = 'icons/mob/lavaland/hierophant_new.dmi' faction = list("boss") //asteroid mobs? get that shit out of my beautiful square house diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index 03ff750cccbf..67cda1af55be 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -22,6 +22,7 @@ Difficulty: Medium maxHealth = 800 icon_state = "legion" icon_living = "legion" + health_doll_icon = "mega_legion" desc = "One of many." icon = 'icons/mob/lavaland/legion.dmi' attacktext = "chomps" diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm index 8b6f929de5e7..c4d70728079e 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm @@ -67,6 +67,7 @@ icon_living = "watcher" icon_aggro = "watcher" icon_dead = "watcher_dead" + health_doll_icon = "watcher" pixel_x = -10 throw_message = "bounces harmlessly off of" melee_damage_lower = 15 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm index 8d7a10054189..328b5adde542 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm @@ -25,6 +25,7 @@ icon_aggro = "broodmother" icon_dead = "egg_sac" icon_gib = "syndicate_gib" + health_doll_icon = "broodmother" maxHealth = 800 health = 800 melee_damage_lower = 30 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm index 684b57b29170..9b0a659f095c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm @@ -24,6 +24,7 @@ icon_aggro = "herald" icon_dead = "herald_dying" icon_gib = "syndicate_gib" + health_doll_icon = "herald" maxHealth = 800 health = 800 melee_damage_lower = 20 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm index 0ec875f986b3..dfdd8f8f54b9 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm @@ -24,6 +24,7 @@ icon_aggro = "legionnaire" icon_dead = "legionnaire_dead" icon_gib = "syndicate_gib" + health_doll_icon = "legionnaire" maxHealth = 800 health = 800 melee_damage_lower = 30 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm index ebbd16777e10..62c8e0e4e7d4 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/pandora.dm @@ -24,6 +24,7 @@ icon_aggro = "pandora" icon_dead = "pandora_dead" icon_gib = "syndicate_gib" + health_doll_icon = "pandora" maxHealth = 800 health = 800 melee_damage_lower = 15 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm index 2493bcabc9aa..4d35caf9b0e5 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @@ -248,6 +248,7 @@ icon_state = "legion" icon_living = "legion" icon_dead = "legion" + health_doll_icon = "legion" health = 450 maxHealth = 450 melee_damage_lower = 20 diff --git a/code/modules/mob/living/simple_animal/hostile/rat.dm b/code/modules/mob/living/simple_animal/hostile/rat.dm index 3a36252cdc54..c2363ec25c44 100644 --- a/code/modules/mob/living/simple_animal/hostile/rat.dm +++ b/code/modules/mob/living/simple_animal/hostile/rat.dm @@ -26,6 +26,9 @@ faction = list("rat") var/body_color +/mob/living/simple_animal/hostile/rat/loan + faction = list("hostile") + /mob/living/simple_animal/hostile/rat/Initialize() . = ..() if(mind) diff --git a/code/modules/mob/living/simple_animal/hostile/regalrat.dm b/code/modules/mob/living/simple_animal/hostile/regalrat.dm index ac2f67960266..7e3d5c0568c6 100644 --- a/code/modules/mob/living/simple_animal/hostile/regalrat.dm +++ b/code/modules/mob/living/simple_animal/hostile/regalrat.dm @@ -45,6 +45,7 @@ var/title = pick("King","Lord","Prince","Emperor","Supreme","Overlord","Master","Shogun","Bojar","Tsar","Hetman") name = "[kingdom] [title]" language_holder += new /datum/language_holder/mouse(src) + qdel(src) /mob/living/simple_animal/hostile/regalrat/handle_automated_action() if(prob(20)) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm index 28a2832c59f7..bc95334882d3 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/bat.dm @@ -1,5 +1,5 @@ /mob/living/simple_animal/hostile/retaliate/bat - name = "Space Bat" + name = "space bat" desc = "A rare breed of bat which roosts in spaceships, probably not vampiric." icon_state = "bat" icon_living = "bat" @@ -15,6 +15,7 @@ health = 15 spacewalk = TRUE see_in_dark = 10 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE harm_intent_damage = 6 melee_damage_lower = 6 melee_damage_upper = 5 @@ -32,9 +33,7 @@ var/max_co2 = 0 //to be removed once metastation map no longer use those for Sgt Araneus var/min_oxy = 0 var/max_tox = 0 - - - //Space bats need no air to fly in. - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) //Space bats need no air to fly in. minbodytemp = 0 + can_be_held = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm index 4eabe1b110f7..d80d8d4b5972 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm @@ -1,11 +1,12 @@ /mob/living/simple_animal/hostile/retaliate/clown - name = "Clown" + name = "clown" desc = "A denizen of clown planet." icon = 'icons/mob/clown_mobs.dmi' icon_state = "clown" icon_living = "clown" icon_dead = "clown_dead" icon_gib = "clown_gib" + health_doll_icon = "clown" //if >32x32, it will use this generic. for all the huge clown mobs that subtype from this mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID) turns_per_move = 5 response_help = "pokes" @@ -25,7 +26,7 @@ attack_sound = 'sound/items/bikehorn.ogg' obj_damage = 0 environment_smash = ENVIRONMENT_SMASH_NONE - del_on_death = 1 + del_on_death = TRUE loot = list(/obj/effect/mob_spawn/human/clown/corpse) atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm index 5b33beb5d6ce..ff6d644d7257 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm @@ -13,7 +13,7 @@ if(M.occupant) return A // yogs start - else if(istype(A, /obj/spacepod)) + else if(isspacepod(A)) var/obj/spacepod/M = A if(M.pilot || M.passengers.len) return A diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm index c50ace8871c5..5e9fa8d4f11c 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm @@ -1,5 +1,5 @@ /mob/living/simple_animal/hostile/retaliate/spaceman - name = "Spaceman" + name = "spaceman" desc = "What in the actual hell..?" icon_state = "old" icon_living = "old" @@ -22,7 +22,6 @@ attack_sound = 'sound/weapons/punch1.ogg' obj_damage = 0 environment_smash = ENVIRONMENT_SMASH_NONE - del_on_death = 0 do_footstep = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index 04825893a59d..9b9376dfe924 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -6,6 +6,7 @@ icon_living = "pine_1" icon_dead = "pine_1" icon_gib = "pine_1" + health_doll_icon = "pine_1" gender = NEUTER speak_chance = 0 turns_per_move = 5 diff --git a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm index 4e077a84bb10..4766d6af0b19 100644 --- a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm +++ b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm @@ -8,6 +8,7 @@ icon_aggro = "Fugu0" icon_dead = "Fugu_dead" icon_gib = "syndicate_gib" + health_doll_icon = "Fugu0" mob_biotypes = list(MOB_ORGANIC, MOB_BEAST) mouse_opacity = MOUSE_OPACITY_ICON move_to_delay = 5 diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index a62719306970..e8d378d62144 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -483,7 +483,9 @@ var/mob/dead/observer/C = pick(candidates) to_chat(M, "Your mob has been taken over by a ghost!") message_admins("[key_name_admin(C)] has taken control of ([ADMIN_LOOKUPFLW(M)])") - M.ghostize(0) + var/mob/dead/observer/G = M.ghostize(FALSE) + if(istype(G)) + G.mind = null M.key = C.key return TRUE else diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 3ed8489b35e4..bf1e03e7a356 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -158,15 +158,17 @@ return if(!istype(M)) return - - if(..()) - if(reagents.total_volume) - if(M.reagents) - to_chat(user, span_warning("You begin to injecting [src]'s contents into [M]")) - if(!do_after(user, 0.5 SECONDS, M)) - return - reagents.reaction(M, INJECT, reagents.total_volume) - reagents.trans_to(M, reagents.total_volume, transfered_by = user) + if(!..()) + return + if(!reagents.total_volume || !M.reagents) + return + + to_chat(user, span_warning("You begin to injecting [src]'s contents into [M]")) + if(!do_after(user, 0.5 SECONDS, M)) + return + reagents.reaction(M, INJECT, reagents.total_volume) + reagents.trans_to(M, reagents.total_volume, transfered_by = user) + /obj/item/pen/sleepy/Initialize() diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index 2c4a9820ec79..5b0e5dbdfb00 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -9,7 +9,6 @@ throw_speed = 3 throw_range = 7 materials = list(/datum/material/iron=60) - item_color = "cargo" pressure_resistance = 2 attack_verb = list("stamped") @@ -20,74 +19,74 @@ /obj/item/stamp/qm name = "quartermaster's rubber stamp" icon_state = "stamp-qm" - item_color = "qm" + dye_color = DYE_QM /obj/item/stamp/law name = "law office's rubber stamp" icon_state = "stamp-law" - item_color = "cargo" + dye_color = DYE_LAW /obj/item/stamp/captain name = "captain's rubber stamp" icon_state = "stamp-cap" - item_color = "captain" + dye_color = DYE_CAPTAIN /obj/item/stamp/hop name = "head of personnel's rubber stamp" icon_state = "stamp-hop" - item_color = "hop" + dye_color = DYE_HOP /obj/item/stamp/hos name = "head of security's rubber stamp" icon_state = "stamp-hos" - item_color = "hosred" + dye_color = DYE_HOS /obj/item/stamp/ce name = "chief engineer's rubber stamp" icon_state = "stamp-ce" - item_color = "chief" + dye_color = DYE_CE /obj/item/stamp/rd name = "research director's rubber stamp" icon_state = "stamp-rd" - item_color = "director" + dye_color = DYE_RD /obj/item/stamp/cmo name = "chief medical officer's rubber stamp" icon_state = "stamp-cmo" - item_color = "cmo" + dye_color = DYE_CMO /obj/item/stamp/denied name = "\improper DENIED rubber stamp" icon_state = "stamp-deny" - item_color = "redcoat" + dye_color = DYE_REDCOAT /obj/item/stamp/clown name = "clown's rubber stamp" icon_state = "stamp-clown" - item_color = "clown" + dye_color = DYE_CLOWN /obj/item/stamp/mime name = "mime's rubber stamp" icon_state = "stamp-mime" - item_color = "mime" + dye_color = DYE_MIME /obj/item/stamp/cent name = "centcom rubber stamp" icon_state = "stamp-cent" - item_color = "redcoat" + dye_color = DYE_REDCOAT /obj/item/stamp/syndi name = "knock-off syndicate rubber stamp" desc = "Not a syndicate ripoff!" icon_state = "stamp-syndi" - item_color = "hosred" + dye_color = DYE_HOS /obj/item/stamp/syndiround name = "syndicate rubber stamp" icon_state = "stamp-syndiround" - item_color = "hosred" + dye_color = DYE_HOS /obj/item/stamp/attack_paw(mob/user) return attack_hand(user) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 4cd351a6c057..69de93873a67 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -478,7 +478,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai max_amount = MAXCOIL amount = MAXCOIL merge_type = /obj/item/stack/cable_coil // This is here to let its children merge between themselves - item_color = "red" + var/cable_color = "red" desc = "A coil of insulated power cable." throwforce = 0 w_class = WEIGHT_CLASS_SMALL @@ -499,8 +499,8 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai cost = 1 /obj/item/stack/cable_coil/cyborg/attack_self(mob/user) - var/cable_color = input(user,"Pick a cable color.","Cable Color") in list("red","yellow","green","blue","pink","orange","cyan","white") - item_color = cable_color + var/picked = input(user,"Pick a cable color.","Cable Color") in list("red","yellow","green","blue","pink","orange","cyan","white") + cable_color = picked update_icon() /obj/item/stack/cable_coil/suicide_act(mob/user) @@ -514,9 +514,9 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai . = ..() var/list/cable_colors = GLOB.cable_colors - item_color = param_color || item_color || pick(cable_colors) - if(cable_colors[item_color]) - item_color = cable_colors[item_color] + cable_color = param_color || cable_color || pick(cable_colors) + if(cable_colors[cable_color]) + cable_color = cable_colors[cable_color] pixel_x = rand(-2,2) pixel_y = rand(-2,2) @@ -550,7 +550,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai icon_state = "[initial(item_state)][amount < 3 ? amount : ""]" name = "cable [amount < 3 ? "piece" : "coil"]" color = null - add_atom_colour(item_color, FIXED_COLOUR_PRIORITY) + add_atom_colour(cable_color, FIXED_COLOUR_PRIORITY) /obj/item/stack/cable_coil/attack_hand(mob/user) . = ..() @@ -558,7 +558,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai return var/obj/item/stack/cable_coil/new_cable = ..() if(istype(new_cable)) - new_cable.item_color = item_color + new_cable.cable_color = cable_color new_cable.update_icon() //add cables to the stack @@ -577,7 +577,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai /obj/item/stack/cable_coil/proc/get_new_cable(location) var/path = /obj/structure/cable - return new path(location, item_color) + return new path(location, cable_color) // called when cable_coil is clicked on a turf /obj/item/stack/cable_coil/proc/place_turf(turf/T, mob/user, dirnew) @@ -766,38 +766,38 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai ///////////////////////////// /obj/item/stack/cable_coil/red - item_color = "red" + cable_color = "red" color = "#ff0000" /obj/item/stack/cable_coil/yellow - item_color = "yellow" + cable_color = "yellow" color = "#ffff00" /obj/item/stack/cable_coil/blue - item_color = "blue" + cable_color = "blue" color = "#1919c8" /obj/item/stack/cable_coil/green - item_color = "green" + cable_color = "green" color = "#00aa00" /obj/item/stack/cable_coil/pink - item_color = "pink" + cable_color = "pink" color = "#ff3ccd" /obj/item/stack/cable_coil/orange - item_color = "orange" + cable_color = "orange" color = "#ff8000" /obj/item/stack/cable_coil/cyan - item_color = "cyan" + cable_color = "cyan" color = "#00ffff" /obj/item/stack/cable_coil/white - item_color = "white" + cable_color = "white" /obj/item/stack/cable_coil/random - item_color = null + cable_color = null color = "#ffffff" /obj/item/stack/cable_coil/random/thirty @@ -819,36 +819,36 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai update_icon() /obj/item/stack/cable_coil/cut/red - item_color = "red" + cable_color = "red" color = "#ff0000" /obj/item/stack/cable_coil/cut/yellow - item_color = "yellow" + cable_color = "yellow" color = "#ffff00" /obj/item/stack/cable_coil/cut/blue - item_color = "blue" + cable_color = "blue" color = "#1919c8" /obj/item/stack/cable_coil/cut/green - item_color = "green" + cable_color = "green" color = "#00aa00" /obj/item/stack/cable_coil/cut/pink - item_color = "pink" + cable_color = "pink" color = "#ff3ccd" /obj/item/stack/cable_coil/cut/orange - item_color = "orange" + cable_color = "orange" color = "#ff8000" /obj/item/stack/cable_coil/cut/cyan - item_color = "cyan" + cable_color = "cyan" color = "#00ffff" /obj/item/stack/cable_coil/cut/white - item_color = "white" + cable_color = "white" /obj/item/stack/cable_coil/cut/random - item_color = null + cable_color = null color = "#ffffff" diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index f16969d0edb8..9a94a93dca46 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -2,15 +2,10 @@ // stores power //Cache defines -#define SMES_CLEVEL_1 1 -#define SMES_CLEVEL_2 2 -#define SMES_CLEVEL_3 3 -#define SMES_CLEVEL_4 4 -#define SMES_CLEVEL_5 5 -#define SMES_OUTPUTTING 6 -#define SMES_NOT_OUTPUTTING 7 -#define SMES_INPUTTING 8 -#define SMES_INPUT_ATTEMPT 9 +#define SMES_OUTPUTTING 7 +#define SMES_NOT_OUTPUTTING 8 +#define SMES_INPUTTING 9 +#define SMES_INPUT_ATTEMPT 10 /obj/machinery/power/smes name = "power storage unit" @@ -219,15 +214,15 @@ return if(outputting) - add_overlay("smes-op1") + add_overlay("smes-out1") else - add_overlay("smes-op0") + add_overlay("smes-out0") if(inputting) - add_overlay("smes-oc1") + add_overlay("smes-inp1") else if(input_attempt) - add_overlay("smes-oc0") + add_overlay("smes-inp0") var/clevel = chargedisplay() if(clevel>0) @@ -235,7 +230,7 @@ /obj/machinery/power/smes/proc/chargedisplay() - return clamp(round(5.5*charge/capacity),0,5) + return clamp(round(6.5*charge/capacity),0,6) /obj/machinery/power/smes/process() if(stat & BROKEN) @@ -453,12 +448,6 @@ log_smes(user) update_icon() - -#undef SMES_CLEVEL_1 -#undef SMES_CLEVEL_2 -#undef SMES_CLEVEL_3 -#undef SMES_CLEVEL_4 -#undef SMES_CLEVEL_5 #undef SMES_OUTPUTTING #undef SMES_NOT_OUTPUTTING #undef SMES_INPUTTING diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm index a8f463e4ca5a..06bb0275a487 100644 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -8,6 +8,11 @@ projectile_type = /obj/item/projectile/bullet/shotgun_slug materials = list(/datum/material/iron=4000) +/obj/item/ammo_casing/shotgun/syndie + name = "syndicate shotgun slug" + desc = "An illegal type of ammunition used by the syndicate for their bulldog shotguns. Hopefully you're not the one on the receiving end." + projectile_type = /obj/item/projectile/bullet/shotgun_slug/syndie + /obj/item/ammo_casing/shotgun/beanbag name = "beanbag slug" desc = "A weak beanbag slug for riot control." @@ -64,6 +69,22 @@ pellets = 6 variance = 25 +/obj/item/ammo_casing/shotgun/hpbuck + name = "hollow-point buckshot shell" + desc = "A 12 gauge hollow-point buckshot shell." + icon_state = "hpbshell" + projectile_type = /obj/item/projectile/bullet/pellet/shotgun_hpbuckshot + pellets = 6 + variance = 25 + +/obj/item/ammo_casing/shotgun/flechette + name = "flechette shell" + desc = "A 12 gauge flechette shell." + icon_state = "flshell" + projectile_type = /obj/item/projectile/bullet/pellet/shotgun_flechette + pellets = 6 + variance = 15 + /obj/item/ammo_casing/shotgun/clownshot name = "buckshot shell..?" desc = "This feels a little light for a buckshot shell." diff --git a/code/modules/projectiles/boxes_magazines/external/shotgun.dm b/code/modules/projectiles/boxes_magazines/external/shotgun.dm index 2123d76c857c..cf76c460f093 100644 --- a/code/modules/projectiles/boxes_magazines/external/shotgun.dm +++ b/code/modules/projectiles/boxes_magazines/external/shotgun.dm @@ -16,9 +16,9 @@ ammo_type = /obj/item/ammo_casing/shotgun/stunslug /obj/item/ammo_box/magazine/m12g/slug - name = "shotgun magazine (12g slugs)" + name = "shotgun magazine (12g syndicate slugs)" icon_state = "m12gb" //this may need an unique sprite - ammo_type = /obj/item/ammo_casing/shotgun + ammo_type = /obj/item/ammo_casing/shotgun/syndie /obj/item/ammo_box/magazine/m12g/dragon name = "shotgun magazine (12g dragon's breath)" @@ -34,3 +34,13 @@ name = "shotgun magazine (12g meteor slugs)" icon_state = "m12gbc" ammo_type = /obj/item/ammo_casing/shotgun/meteorslug + +/obj/item/ammo_box/magazine/m12g/flechette + name = "shotgun magazine (12g flechette)" + icon_state = "m12gb" + ammo_type = /obj/item/ammo_casing/shotgun/flechette + +/obj/item/ammo_box/magazine/m12g/hpbuck + name = "shotgun magazine (12g hollow-point buckshot)" + icon_state = "m12gb" + ammo_type = /obj/item/ammo_casing/shotgun/hpbuck diff --git a/code/modules/projectiles/boxes_magazines/external/smg.dm b/code/modules/projectiles/boxes_magazines/external/smg.dm index ae0322de805b..8632ea82b87e 100644 --- a/code/modules/projectiles/boxes_magazines/external/smg.dm +++ b/code/modules/projectiles/boxes_magazines/external/smg.dm @@ -3,11 +3,23 @@ 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() ..() - icon_state = "46x30mmt-[round(ammo_count(),4)]" + switch(ammo_count()) + if(19 to 22) + icon_state = "46x30mmt-20" + if(15 to 18) + icon_state = "46x30mmt-16" + if(11 to 14) + icon_state = "46x30mmt-12" + if(7 to 10) + icon_state = "46x30mmt-8" + if(3 to 6) + icon_state = "46x30mmt-4" + else + icon_state = "46x30mmt-0" /obj/item/ammo_box/magazine/wt550m9/wtap name = "\improper WT-550 magazine (Armour Piercing 4.6x30mm)" @@ -16,7 +28,19 @@ /obj/item/ammo_box/magazine/wt550m9/wtap/update_icon() ..() - icon_state = "46x30mmtA-[round(ammo_count(),4)]" + switch(ammo_count()) + if(19 to 22) + icon_state = "46x30mmtA-20" + if(15 to 18) + icon_state = "46x30mmtA-16" + if(11 to 14) + icon_state = "46x30mmtA-12" + if(7 to 10) + icon_state = "46x30mmtA-8" + if(3 to 6) + icon_state = "46x30mmtA-4" + else + icon_state = "46x30mmtA-0" /obj/item/ammo_box/magazine/wt550m9/wtic name = "\improper WT-550 magazine (Incendiary 4.6x30mm)" @@ -25,7 +49,19 @@ /obj/item/ammo_box/magazine/wt550m9/wtic/update_icon() ..() - icon_state = "46x30mmtI-[round(ammo_count(),4)]" + switch(ammo_count()) + if(19 to 22) + icon_state = "46x30mmtI-20" + if(15 to 18) + icon_state = "46x30mmtI-16" + if(11 to 14) + icon_state = "46x30mmtI-12" + if(7 to 10) + icon_state = "46x30mmtI-8" + if(3 to 6) + icon_state = "46x30mmtI-4" + else + icon_state = "46x30mmtI-0" /obj/item/ammo_box/magazine/wt550m9/wtr name = "\improper WT-550 magazine(Rubber Rounds 4.6x30mm)" @@ -34,7 +70,19 @@ /obj/item/ammo_box/magazine/wt550m9/wtr/update_icon() ..() - icon_state = "46x30mmtR-[round(ammo_count(),4)]" + switch(ammo_count()) + if(19 to 22) + icon_state = "46x30mmtR-20" + if(15 to 18) + icon_state = "46x30mmtR-16" + if(11 to 14) + icon_state = "46x30mmtR-12" + if(7 to 10) + icon_state = "46x30mmtR-8" + if(3 to 6) + icon_state = "46x30mmtR-4" + else + icon_state = "46x30mmtR-0" /obj/item/ammo_box/magazine/uzim9mm name = "uzi magazine (9mm)" 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/guns/ballistic/minigun.dm b/code/modules/projectiles/guns/ballistic/minigun.dm index 11c740f869c5..2559f6567a91 100644 --- a/code/modules/projectiles/guns/ballistic/minigun.dm +++ b/code/modules/projectiles/guns/ballistic/minigun.dm @@ -113,15 +113,17 @@ slot_flags = null w_class = WEIGHT_CLASS_HUGE materials = list() - burst_size = 3 + burst_size = 5 + var/select = TRUE automatic = FALSE fire_delay = 1 recoil = 0.5 - spread = 34 + spread = 30 fire_sound_volume = 60 weapon_weight = WEAPON_HEAVY fire_sound = 'sound/weapons/gunshot.ogg' mag_type = /obj/item/ammo_box/magazine/internal/minigunosprey + actions_types = list(/datum/action/item_action/toggle_firemode) tac_reloads = FALSE casing_ejector = FALSE item_flags = NEEDS_PERMIT | SLOWS_WHILE_IN_HAND @@ -172,3 +174,21 @@ /obj/item/gun/ballistic/minigunosprey/dropped(mob/living/user) . = ..() ammo_pack.attach_gun(user) + +/obj/item/gun/ballistic/minigunosprey/ui_action_click(mob/user, actiontype) + if(istype(actiontype, /datum/action/item_action/toggle_firemode)) + burst_select() + . = ..() + +/obj/item/gun/ballistic/minigunosprey/proc/burst_select() + var/mob/living/carbon/user = usr + if(!select) + select = TRUE + burst_size = initial(burst_size) + to_chat(user, span_notice("You switch to [burst_size]-rnd burst.")) + else + select = FALSE + burst_size = 7 + to_chat(user, span_notice("You switch to [burst_size]-rnd burst. BRRRRRRRT.")) + playsound(user, 'sound/weapons/empty.ogg', 100, TRUE) + return 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..8b38bf93471a 100644 --- a/code/modules/projectiles/projectile/bullets/shotgun.dm +++ b/code/modules/projectiles/projectile/bullets/shotgun.dm @@ -4,6 +4,10 @@ sharpness = SHARP_POINTY wound_bonus = -30 +/obj/item/projectile/bullet/shotgun_slug/syndie + name = "12g syndicate shotgun slug" + damage = 60 + /obj/item/projectile/bullet/shotgun_beanbag name = "beanbag slug" damage = 5 @@ -63,7 +67,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" @@ -71,7 +75,20 @@ wound_bonus = 5 bare_wound_bonus = 5 wound_falloff_tile = -2.5 // low damage + additional dropoff will already curb wounding potential anything past point blank - + +/obj/item/projectile/bullet/pellet/shotgun_flechette + name = "flechette pellet" + damage = 15 + wound_bonus = -5 + bare_wound_bonus = -15 + armour_penetration = 40 + +/obj/item/projectile/bullet/pellet/shotgun_hpbuckshot + name = "hollow-point pellet" + damage = 25 + bare_wound_bonus = 5 + armour_penetration = -40 + /obj/item/projectile/bullet/pellet/shotgun_clownshot name = "clownshot pellet" damage = 0 @@ -80,7 +97,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 @@ -98,9 +115,9 @@ /obj/item/projectile/bullet/shotgun_uraniumslug name = "depleted uranium slug" icon_state = "ubullet" - damage = 35 - armour_penetration = 200 // he he funny round go through armor - wound_bonus = -30 + damage = 30 + armour_penetration = 60 // he he funny round go through armor + wound_bonus = -45 /obj/item/projectile/bullet/shotgun_uraniumslug/on_hit(atom/target) . = ..() 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..91d76688d508 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -33,6 +33,10 @@ var/has_panel_overlay = TRUE var/macroresolution = 1 var/obj/item/reagent_containers/beaker = null + //This will display every reagent that it could POSSIBLY dispense if it was fully upgraded (barring emagged chemicals). Ones you can't use will show what tier you need. + //If you want to add more to the tiers, it has to be in dispensable_reagents AND the list of what you tier you want it in below. + var/list/display_reagents = list() + var/list/dispensable_reagents = list( /datum/reagent/aluminium, /datum/reagent/bromine, @@ -43,7 +47,6 @@ /datum/reagent/fluorine, /datum/reagent/hydrogen, /datum/reagent/iodine, - /datum/reagent/iron, /datum/reagent/lithium, /datum/reagent/mercury, /datum/reagent/nitrogen, @@ -57,17 +60,21 @@ /datum/reagent/stable_plasma, /datum/reagent/consumable/sugar, /datum/reagent/sulfur, - /datum/reagent/toxin/acid, + /datum/reagent/toxin/acid + ) + var/list/t2_upgrade_reagents = list( + /datum/reagent/iron, /datum/reagent/water, /datum/reagent/fuel ) - //these become available once the manipulator has been upgraded to tier 4 (femto) - var/list/upgrade_reagents = list( - /datum/reagent/acetone, + var/list/t3_upgrade_reagents = list( /datum/reagent/ammonia, /datum/reagent/ash, + /datum/reagent/oil + ) + var/list/t4_upgrade_reagents = list( + /datum/reagent/acetone, /datum/reagent/diethylamine, - /datum/reagent/oil, /datum/reagent/saltpetre ) var/list/emagged_reagents = list( @@ -83,10 +90,20 @@ /obj/machinery/chem_dispenser/Initialize() . = ..() dispensable_reagents = sortList(dispensable_reagents, /proc/cmp_reagents_asc) + display_reagents = dispensable_reagents.Copy() if(emagged_reagents) emagged_reagents = sortList(emagged_reagents, /proc/cmp_reagents_asc) - if(upgrade_reagents) - upgrade_reagents = sortList(upgrade_reagents, /proc/cmp_reagents_asc) + if(t2_upgrade_reagents) + t2_upgrade_reagents = sortList(t2_upgrade_reagents, /proc/cmp_reagents_asc) + display_reagents |= t2_upgrade_reagents + display_reagents = sortList(display_reagents,/proc/cmp_reagents_asc) //Why is this here you ask? because yogs moved things from t1 to t2 so now it fucks up the ordering. This restores it. + if(t3_upgrade_reagents) + t3_upgrade_reagents = sortList(t3_upgrade_reagents, /proc/cmp_reagents_asc) + display_reagents |= t3_upgrade_reagents + if(t4_upgrade_reagents) + t4_upgrade_reagents = sortList(t4_upgrade_reagents, /proc/cmp_reagents_asc) + display_reagents |= t4_upgrade_reagents + //we don't sort display_reagents again after adding these because they will fuck up the order update_icon() /obj/machinery/chem_dispenser/Destroy() @@ -101,8 +118,8 @@ if(in_range(user, src) || isobserver(user)) . += "The status display reads: \n"+\ "Recharging [recharge_amount] power units per interval.\n"+\ - "Power efficiency increased by [round((powerefficiency*1000)-100, 1)]%.\n"+\ - "Macro granularity at [macroresolution]u." + "Power efficiency increased by [round((powerefficiency*1000)-100, 1)]%." + //"Macro granularity at [macroresolution]u." /obj/machinery/chem_dispenser/process() if (recharge_counter >= 4) @@ -143,6 +160,7 @@ return to_chat(user, span_notice("You short out [src]'s safeties.")) dispensable_reagents |= emagged_reagents//add the emagged reagents to the dispensable ones + display_reagents |= emagged_reagents obj_flags |= EMAGGED /obj/machinery/chem_dispenser/ex_act(severity, target) @@ -166,6 +184,16 @@ beaker = null cut_overlays() +/obj/machinery/chem_dispenser/proc/get_tier_for_chemical(datum/reagent/chem) + var/tier = 1 + if(t4_upgrade_reagents?.Find(chem.type)) + tier = 4 + if(t3_upgrade_reagents?.Find(chem.type)) + tier = 3 + if(t2_upgrade_reagents?.Find(chem.type)) + tier = 2 + return tier + /obj/machinery/chem_dispenser/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) @@ -203,13 +231,13 @@ var/is_hallucinating = FALSE if(user.hallucinating()) is_hallucinating = TRUE - for(var/re in dispensable_reagents) + for(var/re in display_reagents) var/datum/reagent/temp = GLOB.chemical_reagents_list[re] if(temp) var/chemname = temp.name if(is_hallucinating && prob(5)) chemname = "[pick_list_replacements("hallucination.json", "chemicals")]" - chemicals.Add(list(list("title" = chemname, "id" = ckey(temp.name)))) + chemicals.Add(list(list("title" = chemname, "id" = ckey(temp.name), "locked" = (dispensable_reagents.Find(temp.type) ? FALSE : TRUE), "tier" = get_tier_for_chemical(temp)))) for(var/recipe in saved_recipes) recipes.Add(list(recipe)) data["chemicals"] = chemicals @@ -369,10 +397,13 @@ for(var/obj/item/stock_parts/capacitor/C in component_parts) recharge_amount *= C.rating for(var/obj/item/stock_parts/manipulator/M in component_parts) - if (M.rating > 1) + if (M.rating > 1) // T2+ + dispensable_reagents |= t2_upgrade_reagents macroresolution -= M.rating //5 for t1, 3 for t2, 2 for t3, 1 for t4 - if (M.rating > 3) - dispensable_reagents |= upgrade_reagents + if (M.rating > 2) // T3+ + dispensable_reagents |= t3_upgrade_reagents + if (M.rating > 3) // T4+ + dispensable_reagents |= t4_upgrade_reagents powerefficiency = round(newpowereff, 0.01) /obj/machinery/chem_dispenser/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker) @@ -469,6 +500,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, @@ -487,7 +519,9 @@ /datum/reagent/consumable/menthol, /datum/reagent/consumable/berryjuice ) - upgrade_reagents = null + t2_upgrade_reagents = null + t3_upgrade_reagents = null + t4_upgrade_reagents = null emagged_reagents = list( /datum/reagent/consumable/ethanol/thirteenloko, /datum/reagent/consumable/ethanol/whiskey_cola, @@ -541,7 +575,9 @@ /datum/reagent/consumable/ethanol/applejack, /datum/reagent/consumable/ethanol/amaretto ) - upgrade_reagents = null + t2_upgrade_reagents = null + t3_upgrade_reagents = null + t4_upgrade_reagents = null emagged_reagents = list( /datum/reagent/consumable/ethanol, /datum/reagent/iron, @@ -572,7 +608,9 @@ name = "mutagen dispenser" desc = "Creates and dispenses mutagen." dispensable_reagents = list(/datum/reagent/toxin/mutagen) - upgrade_reagents = null + t2_upgrade_reagents = null + t3_upgrade_reagents = null + t4_upgrade_reagents = null emagged_reagents = list(/datum/reagent/toxin/plasma) @@ -595,7 +633,9 @@ /datum/reagent/ammonia, /datum/reagent/ash, /datum/reagent/diethylamine) - upgrade_reagents = null + t2_upgrade_reagents = null + t3_upgrade_reagents = null + t4_upgrade_reagents = null /obj/machinery/chem_dispenser/mutagensaltpeter/Initialize() . = ..() 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/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 6a7c441e9d99..ac4b457e46c8 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -197,6 +197,7 @@ /obj/item/reagent_containers/syringe/on_embed(mob/living/carbon/human/embedde, obj/item/bodypart/part) reagents.trans_to(embedde, amount_per_transfer_from_this) + return TRUE /obj/item/reagent_containers/syringe/embed_tick(embedde, part) reagents.trans_to(embedde, amount_per_transfer_from_this * 0.2) diff --git a/code/modules/religion/religion_sects.dm b/code/modules/religion/religion_sects.dm index 3007a633fd40..4ffbbf7d77f1 100644 --- a/code/modules/religion/religion_sects.dm +++ b/code/modules/religion/religion_sects.dm @@ -210,7 +210,7 @@ id_card.registered_account.adjust_money(-10) id_cardu.registered_account.adjust_money(10) SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "blessing", /datum/mood_event/blessing) - playsound(user, 'sound/misc/capitialism.ogg', 25, TRUE, -1) + playsound(user, 'sound/misc/capitialism-short.ogg', 25, TRUE, -1) H.visible_message(span_notice("[user] blesses [H] with the power of capitalism!")) to_chat(H, span_boldnotice("You feel spiritually enriched, and donate to the cause of [GLOB.deity]!")) H.visible_message(span_notice("[H] donated 10 credits!")) diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index c3464beeae42..6fc7d54e08ac 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -364,7 +364,7 @@ id = "plate" build_type = AUTOLATHE | PROTOLATHE materials = list(/datum/material/iron = 1500) - build_path = /obj/item/storage/bag/tray + build_path = /obj/item/plate category = list("initial","Dinnerware","Service") departmental_flags = DEPARTMENTAL_FLAG_SERVICE diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 349eacbf9eb1..53e602e704a4 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -217,7 +217,7 @@ id = "rollerbed" build_path = /obj/item/roller build_type = PROTOLATHE - materials = list(/datum/material/iron = 8000, /datum/material/plastic = 2000) // balancing is a bitch, what does this even mean? i don't really know. + materials = list(/datum/material/iron = 8000) category = list("Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE @@ -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..dcea347fd5fd 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -104,6 +104,16 @@ category = list("Firing Pins") departmental_flags = DEPARTMENTAL_FLAG_SECURITY +/datum/design/batonupgrade + name = "Baton Power Upgrade" + desc = "A new power management circuit which enables stun batons to instantly stun, at the cost of more power usage." + id = "baton_upgrade" + build_type = PROTOLATHE + materials = list(/datum/material/gold = 600, /datum/material/silver = 600, /datum/material/diamond = 600, /datum/material/uranium = 600, /datum/material/plasma = 600) + build_path = /obj/item/batonupgrade + category = list("Firing Pins") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY + /datum/design/stunmine/sec //mines ported from BeeStation name = "Stun Mine" desc = "A basic non-lethal stunning mine. Stuns anyone who walks over it." @@ -310,7 +320,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 +330,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 +338,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 +346,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/nanites/nanite_programs/suppression.dm b/code/modules/research/nanites/nanite_programs/suppression.dm index b851990adfda..7f892ff8fa90 100644 --- a/code/modules/research/nanites/nanite_programs/suppression.dm +++ b/code/modules/research/nanites/nanite_programs/suppression.dm @@ -108,7 +108,7 @@ /datum/nanite_program/fake_death name = "Death Simulation" desc = "The nanites induce a death-like coma into the host, able to fool most medical scans." - use_rate = 3.5 + use_rate = 4.5 rogue_types = list(/datum/nanite_program/nerve_decay, /datum/nanite_program/necrotic, /datum/nanite_program/brain_decay) harmful = TRUE diff --git a/code/modules/research/nanites/nanite_programs/weapon.dm b/code/modules/research/nanites/nanite_programs/weapon.dm index 810f59fa3da4..68504cbd7f6c 100644 --- a/code/modules/research/nanites/nanite_programs/weapon.dm +++ b/code/modules/research/nanites/nanite_programs/weapon.dm @@ -91,14 +91,14 @@ return host_mob.visible_message(span_warning("[host_mob] starts emitting a high-pitched buzzing, and [host_mob.p_their()] skin begins to glow..."),\ span_userdanger("You start emitting a high-pitched buzzing, and your skin begins to glow...")) - addtimer(CALLBACK(src, .proc/boom), clamp((nanites.nanite_volume * 0.35), 25, 150)) + addtimer(CALLBACK(src, .proc/boom), 30 SECONDS) //You have 30 seconds to live /datum/nanite_program/triggered/explosive/proc/boom() var/nanite_amount = nanites.nanite_volume - var/dev_range = FLOOR(nanite_amount/200, 1) - 1 + host_mob.adjustBruteLoss(nanite_amount/2.5) //Instead of gibbing we'll just do an asston of damage var/heavy_range = FLOOR(nanite_amount/100, 1) - 1 var/light_range = FLOOR(nanite_amount/50, 1) - 1 - explosion(host_mob, dev_range, heavy_range, light_range) + explosion(host_mob, 0, heavy_range, light_range) qdel(nanites) //TODO make it defuse if triggered again diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 81ceddbcace4..7240543c879c 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -699,6 +699,11 @@ Nothing else in the console has ID requirements. /obj/machinery/computer/rdconsole/proc/machine_icon(atom/item) return icon2html(initial(item.icon), usr, initial(item.icon_state), SOUTH) +/obj/machinery/computer/rdconsole/proc/can_research(mob/user) + if(!locked || allowed(user)) + return TRUE + return FALSE + /obj/machinery/computer/rdconsole/proc/ui_techweb_single_node(datum/techweb_node/node, selflink=TRUE, minimal=FALSE) var/list/l = list() if (stored_research.hidden_nodes[node.id]) @@ -974,6 +979,9 @@ Nothing else in the console has ID requirements. if(ls["disk_slot"]) disk_slot_selected = text2num(ls["disk_slot"]) if(ls["research_node"]) + if(!can_research(usr)) + to_chat(usr, "ACCESS DENIED") + return if(!research_control) return //honestly should call them out for href exploiting :^) if(!SSresearch.science_tech.available_nodes[ls["research_node"]]) 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..b3a10a569a3b 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 @@ -697,7 +697,7 @@ display_name = "Advanced Weapon Development Technology" description = "Our weapons are breaking the rules of reality by now." prereq_ids = list("adv_engi", "weaponry") - design_ids = list("pin_loyalty", "borg_transform_security") + design_ids = list("pin_loyalty", "borg_transform_security", "baton_upgrade") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) 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/advanced/brainwashing.dm b/code/modules/surgery/advanced/brainwashing.dm index 6be764505123..e426ad0bb28a 100644 --- a/code/modules/surgery/advanced/brainwashing.dm +++ b/code/modules/surgery/advanced/brainwashing.dm @@ -28,7 +28,10 @@ /datum/surgery_step/brainwash name = "brainwash" implements = list(TOOL_HEMOSTAT = 85, TOOL_WIRECUTTER = 50, /obj/item/stack/packageWrap = 35, /obj/item/stack/cable_coil = 15) - time = 200 + time = 20 SECONDS + preop_sound = 'sound/surgery/hemostat1.ogg' + success_sound = 'sound/surgery/hemostat1.ogg' + failure_sound = 'sound/surgery/organ2.ogg' var/objective /datum/surgery_step/brainwash/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -64,4 +67,4 @@ B.applyOrganDamage(80) else user.visible_message("[user] suddenly notices that the brain [user.p_they()] [user.p_were()] working on is not there anymore.", span_warning("You suddenly notice that the brain you were working on is not there anymore.")) - return FALSE \ No newline at end of file + return FALSE diff --git a/code/modules/surgery/advanced/lobotomy.dm b/code/modules/surgery/advanced/lobotomy.dm index 5bf66e36e27c..c90b40a15eba 100644 --- a/code/modules/surgery/advanced/lobotomy.dm +++ b/code/modules/surgery/advanced/lobotomy.dm @@ -1,6 +1,7 @@ /datum/surgery/advanced/lobotomy name = "Lobotomy" desc = "An invasive surgical procedure which guarantees removal of almost all brain traumas, but might cause another permanent trauma in return." + icon_state = "lobotomy" steps = list( /datum/surgery_step/incise, /datum/surgery_step/retract_skin, @@ -25,7 +26,10 @@ name = "perform lobotomy" implements = list(TOOL_SCALPEL = 85, /obj/item/melee/transforming/energy/sword = 55, /obj/item/kitchen/knife = 35, /obj/item/shard = 25, /obj/item = 20) - time = 100 + time = 10 SECONDS + preop_sound = 'sound/surgery/scalpel1.ogg' + success_sound = 'sound/surgery/scalpel2.ogg' + failure_sound = 'sound/surgery/organ2.ogg' fuckup_damage = 20 /datum/surgery_step/lobotomize/tool_check(mob/user, obj/item/tool) diff --git a/code/modules/surgery/advanced/pacification.dm b/code/modules/surgery/advanced/pacification.dm index 978ac0de8548..a6ce9d3887dc 100644 --- a/code/modules/surgery/advanced/pacification.dm +++ b/code/modules/surgery/advanced/pacification.dm @@ -21,7 +21,10 @@ /datum/surgery_step/pacify name = "rewire brain" implements = list(TOOL_HEMOSTAT = 100, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15) - time = 40 + time = 4 SECONDS + preop_sound = 'sound/surgery/hemostat1.ogg' + success_sound = 'sound/surgery/hemostat1.ogg' + failure_sound = 'sound/surgery/organ2.ogg' /datum/surgery_step/pacify/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results(user, target, span_notice("You begin to pacify [target]..."), @@ -40,4 +43,4 @@ span_warning("[user] screws up, causing brain damage!"), "[user] completes the surgery on [target]'s brain.") target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_LOBOTOMY) - return FALSE \ No newline at end of file + return FALSE diff --git a/code/modules/surgery/advanced/revival.dm b/code/modules/surgery/advanced/revival.dm index f80d2e424450..164d1fedb60d 100644 --- a/code/modules/surgery/advanced/revival.dm +++ b/code/modules/surgery/advanced/revival.dm @@ -1,6 +1,7 @@ /datum/surgery/advanced/revival name = "Revival" desc = "An experimental surgical procedure which involves reconstruction and reactivation of the patient's brain even long after death. The body must still be able to sustain life." + icon_state = "revival" steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/saw, @@ -26,9 +27,11 @@ return TRUE /datum/surgery_step/revive - name = "shock body" + name = "shock brain" implements = list(/obj/item/twohanded/shockpaddles = 100, /obj/item/melee/baton = 75, /obj/item/gun/energy = 60, /obj/item/melee/touch_attack/shock = 100) - time = 120 + time = 12 SECONDS + success_sound = 'sound/magic/lightningbolt.ogg' + failure_sound = 'sound/machines/defib_zap.ogg' /datum/surgery_step/revive/tool_check(mob/user, obj/item/tool) . = TRUE @@ -56,11 +59,18 @@ "[user] prepares to shock [target]'s brain with [tool].") target.notify_ghost_cloning("Someone is trying to zap your brain.", source = target) +/datum/surgery_step/revive/play_preop_sound(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(istype(tool, /obj/item/twohanded/shockpaddles)) + playsound(tool, 'sound/machines/defib_charge.ogg', 75, 0) + else + ..() + /datum/surgery_step/revive/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(user.job == "Medical Doctor" || user.job == "Paramedic" || user.job == "Chief Medical Officer") + user.say("Clear!", forced = "surgery") display_results(user, target, span_notice("You successfully shock [target]'s brain with [tool]..."), "[user] send a powerful shock to [target]'s brain with [tool]...", "[user] send a powerful shock to [target]'s brain with [tool]...") - playsound(get_turf(target), 'sound/magic/lightningbolt.ogg', 50, 1) target.grab_ghost() target.adjustOxyLoss(-50, 0) target.updatehealth() @@ -74,9 +84,10 @@ return FALSE /datum/surgery_step/revive/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(user.job == "Medical Doctor" || user.job == "Paramedic" || user.job == "Chief Medical Officer") + user.say("Clear!", forced = "surgery") display_results(user, target, span_notice("You shock [target]'s brain with [tool], but [target.p_they()] doesn't react."), "[user] send a powerful shock to [target]'s brain with [tool], but [target.p_they()] doesn't react.", "[user] send a powerful shock to [target]'s brain with [tool], but [target.p_they()] doesn't react.") - playsound(get_turf(target), 'sound/magic/lightningbolt.ogg', 50, 1) target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15, 180) return FALSE diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm index 65d2e12ef250..6a357e482b95 100644 --- a/code/modules/surgery/amputation.dm +++ b/code/modules/surgery/amputation.dm @@ -1,6 +1,8 @@ /datum/surgery/amputation name = "Amputation" + icon_state = "amputation" + desc = "Sever a limb from the torso." steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/saw, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/sever_limb) target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey) possible_locs = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_HEAD) @@ -27,7 +29,9 @@ /datum/surgery_step/sever_limb name = "sever limb" implements = list(TOOL_SCALPEL = 100, TOOL_SAW = 100, /obj/item/melee/arm_blade = 80, /obj/item/twohanded/required/chainsaw = 80, /obj/item/mounted_chainsaw = 80, /obj/item/twohanded/fireaxe = 50, /obj/item/hatchet = 40, /obj/item/kitchen/knife/butcher = 25) - time = 64 + time = 6.4 SECONDS + preop_sound = 'sound/surgery/scalpel1.ogg' + success_sound = 'sound/surgery/organ2.ogg' /datum/surgery_step/sever_limb/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results(user, target, span_notice("You begin to sever [target]'s [parse_zone(target_zone)]..."), diff --git a/code/modules/surgery/autopsy.dm b/code/modules/surgery/autopsy.dm index 331a4fb9b4e3..995ca5ec1c94 100644 --- a/code/modules/surgery/autopsy.dm +++ b/code/modules/surgery/autopsy.dm @@ -1,6 +1,9 @@ /datum/surgery/autopsy name = "Autopsy" + desc = "Tells you what last damaged the patient." + icon = 'icons/obj/surgery.dmi' + icon_state = "scalpel" steps = list(/datum/surgery_step/incise, /datum/surgery_step/autopsy) target_mobtypes = list(/mob/living) diff --git a/code/modules/surgery/brain_surgery.dm b/code/modules/surgery/brain_surgery.dm index f73d85ad8676..1d764536b704 100644 --- a/code/modules/surgery/brain_surgery.dm +++ b/code/modules/surgery/brain_surgery.dm @@ -1,5 +1,8 @@ /datum/surgery/brain_surgery name = "Brain surgery" + desc = "This procedure cures all severe and basic traumas and reduces brain damage by a large amount. Failing to fix the brain causes hefty brain damage." + icon = 'icons/obj/surgery.dmi' + icon_state = "brain" steps = list( /datum/surgery_step/incise, /datum/surgery_step/retract_skin, @@ -15,7 +18,10 @@ /datum/surgery_step/fix_brain name = "fix brain" implements = list(TOOL_HEMOSTAT = 85, TOOL_SCREWDRIVER = 35, /obj/item/pen = 15) //don't worry, pouring some alcohol on their open brain will get that chance to 100 - time = 120 //long and complicated + time = 12 SECONDS //long and complicated + preop_sound = 'sound/surgery/hemostat1.ogg' + success_sound = 'sound/surgery/hemostat1.ogg' + failure_sound = 'sound/surgery/organ2.ogg' fuckup_damage = 20 /datum/surgery/brain_surgery/can_start(mob/user, mob/living/carbon/target) diff --git a/code/modules/surgery/burn_dressing.dm b/code/modules/surgery/burn_dressing.dm index d78d0a636d85..2c52586fbdba 100644 --- a/code/modules/surgery/burn_dressing.dm +++ b/code/modules/surgery/burn_dressing.dm @@ -24,8 +24,11 @@ /datum/surgery_step/debride_infected name = "excise infection" implements = list(TOOL_SCALPEL = 100, TOOL_SAW = 60, TOOL_WIRECUTTER = 40) - time = 30 + time = 3 SECONDS repeatable = TRUE + preop_sound = 'sound/surgery/scalpel1.ogg' + success_sound = 'sound/surgery/retractor2.ogg' + failure_sound = 'sound/surgery/organ1.ogg' /// How much sanitization is added per step var/sanitization_added = 0.5 /// How much infestation is removed per step (positive number) @@ -80,7 +83,9 @@ /datum/surgery_step/dress name = "bandage burns" implements = list(/obj/item/stack/medical/gauze = 100) - time = 40 + time = 4 SECONDS + preop_sound = 'sound/effects/rip2.ogg' + success_sound = 'sound/effects/rip1.ogg' /datum/surgery_step/dress/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) var/datum/wound/burn/burn_wound = surgery.operated_wound diff --git a/code/modules/surgery/cavity_implant.dm b/code/modules/surgery/cavity_implant.dm index 4c01ddc9c5f3..fc8faf3b667e 100644 --- a/code/modules/surgery/cavity_implant.dm +++ b/code/modules/surgery/cavity_implant.dm @@ -1,5 +1,8 @@ /datum/surgery/cavity_implant name = "Cavity implant" + desc = "Implants or removes an object in the chest. Items up to normal size can be implanted, but tiny and small items won't show what they are in the implanting messages." + icon = 'icons/obj/lighting.dmi' + icon_state = "flashlight" steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/incise, /datum/surgery_step/handle_cavity, /datum/surgery_step/close) target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey) possible_locs = list(BODY_ZONE_CHEST) @@ -17,7 +20,9 @@ name = "implant item" accept_hand = 1 accept_any_item = 1 - time = 32 + time = 3.2 SECONDS + preop_sound = 'sound/surgery/organ1.ogg' + success_sound = 'sound/surgery/organ2.ogg' var/obj/item/IC = null /datum/surgery_step/handle_cavity/preop(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/surgery/core_removal.dm b/code/modules/surgery/core_removal.dm index 9155cf201235..32be2db283f0 100644 --- a/code/modules/surgery/core_removal.dm +++ b/code/modules/surgery/core_removal.dm @@ -1,5 +1,8 @@ /datum/surgery/core_removal name = "Core removal" + desc = "Remove core from slime. Extract core must be repeated for every core if slime has several." + icon = 'icons/mob/slimes.dmi' + icon_state = "grey slime extract" steps = list(/datum/surgery_step/incise, /datum/surgery_step/extract_core) target_mobtypes = list(/mob/living/simple_animal/slime) possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD) diff --git a/code/modules/surgery/coronary_bypass.dm b/code/modules/surgery/coronary_bypass.dm index 1a91f36f7fc7..86c32a148482 100644 --- a/code/modules/surgery/coronary_bypass.dm +++ b/code/modules/surgery/coronary_bypass.dm @@ -1,5 +1,8 @@ /datum/surgery/coronary_bypass name = "Coronary Bypass" + desc = "Restores the heart to a functional state if it is in a non-functional state, making it able to be defibrillated and sustain life. Can only be performed once on an individual heart." + icon = 'icons/obj/surgery.dmi' + icon_state = "heart-off" steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/saw, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/incise_heart, /datum/surgery_step/coronary_bypass, /datum/surgery_step/close) possible_locs = list(BODY_ZONE_CHEST) @@ -17,7 +20,10 @@ name = "incise heart" implements = list(TOOL_SCALPEL = 90, /obj/item/melee/transforming/energy/sword = 45, /obj/item/kitchen/knife = 45, /obj/item/shard = 25) - time = 16 + time = 1.6 SECONDS + preop_sound = 'sound/surgery/scalpel1.ogg' + success_sound = 'sound/surgery/scalpel2.ogg' + failure_sound = 'sound/surgery/organ2.ogg' fuckup_damage = 20 /datum/surgery_step/incise_heart/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -52,7 +58,10 @@ /datum/surgery_step/coronary_bypass name = "graft coronary bypass" implements = list(TOOL_HEMOSTAT = 90, TOOL_WIRECUTTER = 35, /obj/item/stack/packageWrap = 15, /obj/item/stack/cable_coil = 5) - time = 90 + time = 9 SECONDS + preop_sound = 'sound/surgery/hemostat1.ogg' + success_sound = 'sound/surgery/hemostat1.ogg' + failure_sound = 'sound/surgery/organ2.ogg' fuckup_damage = 20 /datum/surgery_step/coronary_bypass/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/surgery/dental_implant.dm b/code/modules/surgery/dental_implant.dm index f0457cdc6b39..965d6cd03f59 100644 --- a/code/modules/surgery/dental_implant.dm +++ b/code/modules/surgery/dental_implant.dm @@ -1,5 +1,8 @@ /datum/surgery/dental_implant name = "Dental implant" + desc = "This allows you to insert pills/patches into a tooth cavity, allowing you to pop it any time to ingest it. This works for both stimulants and suicide pills." + icon = 'icons/obj/implants.dmi' + icon_state = "reagents" steps = list(/datum/surgery_step/drill, /datum/surgery_step/insert_pill) possible_locs = list(BODY_ZONE_PRECISE_MOUTH) diff --git a/code/modules/surgery/experimental_dissection.dm b/code/modules/surgery/experimental_dissection.dm index cfa5b4f8ae80..09bd2b66f8fc 100644 --- a/code/modules/surgery/experimental_dissection.dm +++ b/code/modules/surgery/experimental_dissection.dm @@ -1,6 +1,8 @@ /datum/surgery/experimental_dissection name = "Experimental Dissection" desc = "A surgical procedure which deeply analyzes the biology of a corpse, and automatically adds new findings to the research database." + icon = 'icons/obj/implants.dmi' + icon_state = "scan_mode" steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/clamp_bleeders, diff --git a/code/modules/surgery/eye_surgery.dm b/code/modules/surgery/eye_surgery.dm index 6c5661c86503..4f41fb3a1308 100644 --- a/code/modules/surgery/eye_surgery.dm +++ b/code/modules/surgery/eye_surgery.dm @@ -1,5 +1,8 @@ /datum/surgery/eye_surgery name = "Eye surgery" + desc = "Fixes all damage done to eyes, though doesnt fix genetic blindness. Failing to fix the eyes will cause brain damage to the patient." + icon = 'icons/obj/surgery.dmi' + icon_state = "eyeballs" steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/fix_eyes, /datum/surgery_step/close) target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey) possible_locs = list(BODY_ZONE_PRECISE_EYES) diff --git a/code/modules/surgery/healing.dm b/code/modules/surgery/healing.dm index 09ccb42d169b..421c1eb3f19c 100644 --- a/code/modules/surgery/healing.dm +++ b/code/modules/surgery/healing.dm @@ -1,4 +1,5 @@ /datum/surgery/healing + icon = 'icons/obj/chemical.dmi' steps = list(/datum/surgery_step/incise, /datum/surgery_step/heal, /datum/surgery_step/close) @@ -23,6 +24,8 @@ implements = list(TOOL_HEMOSTAT = 100, TOOL_SCREWDRIVER = 65, /obj/item/pen = 55) repeatable = TRUE time = 2 SECONDS + success_sound = 'sound/surgery/retractor2.ogg' + failure_sound = 'sound/surgery/organ2.ogg' fuckup_damage = 0 var/brutehealing = 0 var/burnhealing = 0 @@ -103,6 +106,7 @@ /***************************BRUTE***************************/ /datum/surgery/healing/brute name = "Tend Wounds (Bruises)" + icon_state = "bandaid_brute" /datum/surgery/healing/brute/basic name = "Tend Wounds (Bruises, Basic)" @@ -168,6 +172,7 @@ /***************************BURN***************************/ /datum/surgery/healing/burn name = "Tend Wounds (Burn)" + icon_state = "bandaid_burn" /datum/surgery/healing/burn/basic name = "Tend Wounds (Burn, Basic)" @@ -234,6 +239,7 @@ /datum/surgery/healing/combo name = "Tend Wounds (Mixture, Basic)" + icon_state = "bandaid_both" replaced_by = /datum/surgery/healing/combo/upgraded requires_tech = TRUE healing_step_type = /datum/surgery_step/heal/combo diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index 2dd2849ba82b..507b7bef2244 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -19,6 +19,7 @@ if(!current_surgery) var/list/all_surgeries = GLOB.surgeries_list.Copy() var/list/available_surgeries = list() + var/list/radial_list = list() for(var/datum/surgery/S in all_surgeries) if(!S.possible_locs.Find(selected_zone)) @@ -39,12 +40,17 @@ for(var/path in S.target_mobtypes) if(istype(M, path)) available_surgeries[S.name] = S + var/datum/radial_menu_choice/choice = new + choice.image = S.get_icon() + choice.info = S.desc + radial_list[S.name] = choice break if(!available_surgeries.len) + to_chat(user, span_warning("You can't preform any surgeries on [M]'s [parse_zone(selected_zone)]!")) return - - var/P = input("Begin which procedure?", "Surgery", null, null) as null|anything in available_surgeries + + var/P = show_radial_menu(user, M, radial_list, radius = 40, require_near = TRUE, tooltips = TRUE) if(P && user && user.Adjacent(M) && (I in user)) var/datum/surgery/S = available_surgeries[P] @@ -69,10 +75,17 @@ if(S.ignore_clothes || get_location_accessible(M, selected_zone)) var/datum/surgery/procedure = new S.type(M, selected_zone, affecting) - user.visible_message("[user] drapes [I] over [M]'s [parse_zone(selected_zone)] to prepare for surgery.", \ - span_notice("You drape [I] over [M]'s [parse_zone(selected_zone)] to prepare for \an [procedure.name].")) - + var/datum/surgery_step/step = procedure.get_surgery_step() + user.visible_message("[user] prepares to operate on [M]'s [parse_zone(selected_zone)].", \ + span_notice("You prepare to operate on [M]'s [parse_zone(selected_zone)].")) + playsound(get_turf(M), 'sound/items/handling/cloth_drop.ogg', 30, TRUE, falloff = 1) log_combat(user, M, "operated on", null, "(OPERATION TYPE: [procedure.name]) (TARGET AREA: [selected_zone])") + if(procedure.step_in_progress) + return + var/try_to_fail = FALSE + if(user.a_intent == INTENT_DISARM) + try_to_fail = TRUE + step.try_op(user, M, user.zone_selected, I, procedure, try_to_fail) else to_chat(user, span_warning("You need to expose [M]'s [parse_zone(selected_zone)] first!")) @@ -83,26 +96,25 @@ /proc/attempt_cancel_surgery(datum/surgery/S, obj/item/I, mob/living/M, mob/user) var/selected_zone = user.zone_selected + to_chat(user, span_notice("You begin to cancel \the [S].")) + if(!do_mob(user, M, 3 SECONDS)) + return if(S.status == 1) M.surgeries -= S - user.visible_message("[user] removes [I] from [M]'s [parse_zone(selected_zone)].", \ - span_notice("You remove [I] from [M]'s [parse_zone(selected_zone)].")) + user.visible_message("[user] stops the surgery on [M]'s [parse_zone(selected_zone)].", \ + span_notice("You stop the surgery on [M]'s [parse_zone(selected_zone)].")) qdel(S) else if(S.can_cancel) - var/close_tool_type = /obj/item/cautery - var/obj/item/close_tool = user.get_inactive_held_item() - var/is_robotic = S.requires_bodypart_type == BODYPART_ROBOTIC - if(is_robotic) - close_tool_type = /obj/item/screwdriver - if(istype(close_tool, close_tool_type) || iscyborg(user)) + var/obj/item/close_tool = user.get_active_held_item() + if(close_tool.tool_behaviour == (S.requires_bodypart_type == BODYPART_ROBOTIC ? TOOL_SCREWDRIVER : TOOL_CAUTERY) || iscyborg(user)) if(S.operated_bodypart) S.operated_bodypart.generic_bleedstacks -= 10 M.surgeries -= S - user.visible_message("[user] closes [M]'s [parse_zone(selected_zone)] with [close_tool] and removes [I].", \ - span_notice("You close [M]'s [parse_zone(selected_zone)] with [close_tool] and remove [I].")) + user.visible_message("[user] closes [M]'s [parse_zone(selected_zone)] with [close_tool].", \ + span_notice("You close [M]'s [parse_zone(selected_zone)] with [close_tool].")) qdel(S) else - to_chat(user, span_warning("You need to hold a [is_robotic ? "screwdriver" : "cautery"] in your inactive hand to stop [M]'s surgery!")) + to_chat(user, span_warning("You need to hold a [S.requires_bodypart_type == BODYPART_ROBOTIC ? "screwdriver" : "cautery"] in your active hand to stop [M]'s surgery!")) /proc/get_location_modifier(mob/M) var/turf/T = get_turf(M) diff --git a/code/modules/surgery/implant_removal.dm b/code/modules/surgery/implant_removal.dm index 60c97ed42c6f..5ead081c0fc8 100644 --- a/code/modules/surgery/implant_removal.dm +++ b/code/modules/surgery/implant_removal.dm @@ -1,5 +1,8 @@ /datum/surgery/implant_removal name = "implant removal" + desc = "Extracts implants from the patient. If you don't have an empty implant case in your other hand, the implant will be ruined on extraction." + icon = 'icons/obj/implants.dmi' + icon_state = "implantcase-b" steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/extract_implant, /datum/surgery_step/close) target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey) possible_locs = list(BODY_ZONE_CHEST) @@ -16,7 +19,8 @@ /datum/surgery_step/extract_implant name = "extract implant" implements = list(TOOL_HEMOSTAT = 100, TOOL_CROWBAR = 65) - time = 64 + time = 6.4 SECONDS + success_sound = 'sound/surgery/hemostat1.ogg' var/obj/item/implant/I = null /datum/surgery_step/extract_implant/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/surgery/limb_augmentation.dm b/code/modules/surgery/limb_augmentation.dm index 25c0deb4f370..56405fb1a813 100644 --- a/code/modules/surgery/limb_augmentation.dm +++ b/code/modules/surgery/limb_augmentation.dm @@ -45,6 +45,8 @@ /datum/surgery/augmentation name = "Augmentation" + desc = "Replace a limb with a robot part." + icon_state = "augmentation" steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/replace, /datum/surgery_step/saw, /datum/surgery_step/replace_limb) target_mobtypes = list(/mob/living/carbon/human) possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD) diff --git a/code/modules/surgery/lipoplasty.dm b/code/modules/surgery/lipoplasty.dm index 80d399676eb5..59e0a9b60b30 100644 --- a/code/modules/surgery/lipoplasty.dm +++ b/code/modules/surgery/lipoplasty.dm @@ -1,5 +1,8 @@ /datum/surgery/lipoplasty name = "Lipoplasty" + desc = "Removes excess fat from the patient." + icon = 'icons/obj/food/food.dmi' + icon_state = "meat" steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/cut_fat, /datum/surgery_step/remove_fat, /datum/surgery_step/close) possible_locs = list(BODY_ZONE_CHEST) diff --git a/code/modules/surgery/lobectomy.dm b/code/modules/surgery/lobectomy.dm index 3c3b2310249d..c73fc138b767 100644 --- a/code/modules/surgery/lobectomy.dm +++ b/code/modules/surgery/lobectomy.dm @@ -1,5 +1,8 @@ /datum/surgery/lobectomy name = "Lobectomy" //not to be confused with lobotomy + desc = "Restores the lungs to a functional state if it is in a non-functional state, making it able to sustain life. Can only be performed once on an individual set of lungs." + icon = 'icons/obj/surgery.dmi' + icon_state = "lungs" steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/saw, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/lobectomy, /datum/surgery_step/close) possible_locs = list(BODY_ZONE_CHEST) @@ -17,7 +20,10 @@ name = "excise damaged lung node" implements = list(TOOL_SCALPEL = 95, /obj/item/melee/transforming/energy/sword = 65, /obj/item/kitchen/knife = 45, /obj/item/shard = 35) - time = 42 + time = 4.2 SECONDS + preop_sound = 'sound/surgery/scalpel1.ogg' + success_sound = 'sound/surgery/organ1.ogg' + failure_sound = 'sound/surgery/organ2.ogg' fuckup_damage = 20 /datum/surgery_step/lobectomy/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/surgery/mechanic_steps.dm b/code/modules/surgery/mechanic_steps.dm index 79d09aa06db3..b6162b4588e1 100644 --- a/code/modules/surgery/mechanic_steps.dm +++ b/code/modules/surgery/mechanic_steps.dm @@ -3,19 +3,24 @@ name = "unscrew shell" implements = list( TOOL_SCREWDRIVER = 100, - TOOL_SCALPEL = 75, // med borgs could try to unskrew shell with scalpel + TOOL_SCALPEL = 75, // med borgs could try to unscrew shell with scalpel /obj/item/kitchen/knife = 50, /obj/item = 10) // 10% success with any sharp item. - time = 24 + time = 2.4 SECONDS + preop_sound = 'sound/items/screwdriver.ogg' + success_sound = 'sound/items/screwdriver2.ogg' /datum/surgery_step/mechanic_open/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results(user, target, span_notice("You begin to unscrew the shell of [target]'s [parse_zone(target_zone)]..."), "[user] begins to unscrew the shell of [target]'s [parse_zone(target_zone)].", "[user] begins to unscrew the shell of [target]'s [parse_zone(target_zone)].") -/datum/surgery_step/mechanic_incise/tool_check(mob/user, obj/item/tool) - if(implement_type == /obj/item && !tool.is_sharp()) - return FALSE +/datum/surgery_step/mechanic_open/tool_check(mob/user, obj/item/tool) + if(istype(tool)) + if(!tool.is_sharp()) + return FALSE + if(tool.usesound) + preop_sound = tool.usesound return TRUE @@ -27,7 +32,9 @@ TOOL_SCALPEL = 75, /obj/item/kitchen/knife = 50, /obj/item = 10) // 10% success with any sharp item. - time = 24 + time = 2.4 SECONDS + preop_sound = 'sound/items/screwdriver.ogg' + success_sound = 'sound/items/screwdriver2.ogg' /datum/surgery_step/mechanic_close/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results(user, target, span_notice("You begin to screw the shell of [target]'s [parse_zone(target_zone)]..."), @@ -35,8 +42,11 @@ "[user] begins to screw the shell of [target]'s [parse_zone(target_zone)].") /datum/surgery_step/mechanic_close/tool_check(mob/user, obj/item/tool) - if(implement_type == /obj/item && !tool.is_sharp()) - return FALSE + if(istype(tool)) + if(!tool.is_sharp()) + return FALSE + if(tool.usesound) + preop_sound = tool.usesound return TRUE @@ -46,7 +56,10 @@ implements = list( TOOL_MULTITOOL = 100, TOOL_HEMOSTAT = 10) // try to reboot internal controllers via short circuit with some conductor - time = 24 + time = 2.4 SECONDS + preop_sound = 'sound/items/tape_flip.ogg' + success_sound = 'sound/items/taperecorder_close.ogg' + failure_sound = 'sound/machines/defib_zap.ogg' /datum/surgery_step/prepare_electronics/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results(user, target, span_notice("You begin to prepare electronics in [target]'s [parse_zone(target_zone)]..."), @@ -59,33 +72,54 @@ implements = list( TOOL_WRENCH = 100, TOOL_RETRACTOR = 10) - time = 24 + time = 2.4 SECONDS + preop_sound = 'sound/items/ratchet.ogg' /datum/surgery_step/mechanic_unwrench/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results(user, target, span_notice("You begin to unwrench some bolts in [target]'s [parse_zone(target_zone)]..."), "[user] begins to unwrench some bolts in [target]'s [parse_zone(target_zone)].", "[user] begins to unwrench some bolts in [target]'s [parse_zone(target_zone)].") + +/datum/surgery_step/mechanic_unwrench/tool_check(mob/user, obj/item/tool) + if(tool.usesound) + preop_sound = tool.usesound + return TRUE + //wrench /datum/surgery_step/mechanic_wrench name = "wrench bolts" implements = list( TOOL_WRENCH = 100, TOOL_RETRACTOR = 10) - time = 24 + time = 2.4 SECONDS + preop_sound = 'sound/items/ratchet.ogg' /datum/surgery_step/mechanic_wrench/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results(user, target, span_notice("You begin to wrench some bolts in [target]'s [parse_zone(target_zone)]..."), "[user] begins to wrench some bolts in [target]'s [parse_zone(target_zone)].", "[user] begins to wrench some bolts in [target]'s [parse_zone(target_zone)].") + +/datum/surgery_step/mechanic_wrench/tool_check(mob/user, obj/item/tool) + if(tool.usesound) + preop_sound = tool.usesound + return TRUE + //open hatch /datum/surgery_step/open_hatch name = "open the hatch" accept_hand = 1 - time = 10 + time = 1 SECONDS + preop_sound = 'sound/items/ratchet.ogg' + success_sound = 'sound/machines/doorclick.ogg' /datum/surgery_step/open_hatch/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results(user, target, span_notice("You begin to open the hatch holders in [target]'s [parse_zone(target_zone)]..."), "[user] begins to open the hatch holders in [target]'s [parse_zone(target_zone)].", - "[user] begins to open the hatch holders in [target]'s [parse_zone(target_zone)].") \ No newline at end of file + "[user] begins to open the hatch holders in [target]'s [parse_zone(target_zone)].") + +/datum/surgery_step/open_hatch/tool_check(mob/user, obj/item/tool) + if(tool.usesound) + preop_sound = tool.usesound + return TRUE diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index 42a2f3322d13..a27f68fdb38b 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -1,5 +1,7 @@ /datum/surgery/organ_manipulation name = "Organ manipulation" + icon_state = "organ_manipulation" + desc = "This surgery covers operations to remove/insert internal organs, tails, and cyber implants." target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey) possible_locs = list(BODY_ZONE_CHEST, BODY_ZONE_HEAD) requires_real_bodypart = 1 @@ -65,10 +67,12 @@ ) /datum/surgery_step/manipulate_organs - time = 64 + time = 6.4 SECONDS name = "manipulate organs" repeatable = 1 implements = list(/obj/item/organ = 100, /obj/item/reagent_containers/food/snacks/organ = 0, /obj/item/organ_storage = 100) + preop_sound = 'sound/surgery/organ2.ogg' + success_sound = 'sound/surgery/organ1.ogg' var/implements_extract = list(TOOL_HEMOSTAT = 100, TOOL_CROWBAR = 55) var/current_type var/obj/item/organ/I = null @@ -80,6 +84,8 @@ /datum/surgery_step/manipulate_organs/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) I = null if(istype(tool, /obj/item/organ_storage)) + preop_sound = initial(preop_sound) + success_sound = initial(success_sound) if(!tool.contents.len) to_chat(user, span_notice("There is nothing inside [tool]!")) return -1 @@ -90,6 +96,8 @@ tool = I if(isorgan(tool)) current_type = "insert" + preop_sound = initial(preop_sound) + success_sound = initial(success_sound) I = tool if(target_zone != I.zone || target.getorganslot(I.slot)) to_chat(user, span_notice("There is no room for [I] in [target]'s [parse_zone(target_zone)]!")) @@ -101,6 +109,8 @@ else if(implement_type in implements_extract) current_type = "extract" + preop_sound = 'sound/surgery/hemostat1.ogg' + success_sound = 'sound/surgery/organ2.ogg' var/list/organs = target.getorganszone(target_zone) var/mob/living/simple_animal/horror/H = target.has_horror_inside() if(H) diff --git a/code/modules/surgery/organic_steps.dm b/code/modules/surgery/organic_steps.dm index 7cdbb26e01d1..938ff27a1f97 100644 --- a/code/modules/surgery/organic_steps.dm +++ b/code/modules/surgery/organic_steps.dm @@ -4,7 +4,9 @@ name = "make incision" implements = list(TOOL_SCALPEL = 100, /obj/item/melee/transforming/energy/sword = 75, /obj/item/kitchen/knife = 65, /obj/item/shard = 45, /obj/item = 30) // 30% success with any sharp item. - time = 16 + time = 1.6 SECONDS + preop_sound = 'sound/surgery/scalpel1.ogg' + success_sound = 'sound/surgery/scalpel2.ogg' var/bleeding = 5 //how much bleeding you get from this being done /datum/surgery_step/incise/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -43,7 +45,8 @@ /datum/surgery_step/clamp_bleeders name = "clamp bleeders" implements = list(TOOL_HEMOSTAT = 100, TOOL_WIRECUTTER = 60, /obj/item/stack/packageWrap = 35, /obj/item/stack/cable_coil = 15) - time = 24 + time = 2.4 SECONDS + preop_sound = 'sound/surgery/hemostat1.ogg' /datum/surgery_step/clamp_bleeders/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results(user, target, span_notice("You begin to clamp bleeders in [target]'s [parse_zone(target_zone)]..."), @@ -65,7 +68,9 @@ /datum/surgery_step/retract_skin name = "retract skin" implements = list(TOOL_RETRACTOR = 100, TOOL_SCREWDRIVER = 45, TOOL_WIRECUTTER = 35) - time = 24 + time = 2.4 SECONDS + preop_sound = 'sound/surgery/retractor1.ogg' + success_sound = 'sound/surgery/retractor2.ogg' /datum/surgery_step/retract_skin/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results(user, target, span_notice("You begin to retract the skin in [target]'s [parse_zone(target_zone)]..."), @@ -79,7 +84,9 @@ name = "mend incision" implements = list(TOOL_CAUTERY = 100, /obj/item/gun/energy/laser = 90, TOOL_WELDER = 70, /obj/item = 30) // 30% success with any hot item. - time = 24 + time = 2.4 SECONDS + preop_sound = 'sound/surgery/cautery1.ogg' + success_sound = 'sound/surgery/cautery2.ogg' fuckup_damage_type = BURN /datum/surgery_step/close/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -113,7 +120,15 @@ implements = list(TOOL_SAW = 100, /obj/item/melee/transforming/energy/sword/cyborg/saw = 100, /obj/item/melee/arm_blade = 75, /obj/item/mounted_chainsaw = 65, /obj/item/twohanded/required/chainsaw = 50, /obj/item/twohanded/fireaxe = 50, /obj/item/hatchet = 35, /obj/item/kitchen/knife/butcher = 25) - time = 54 + time = 5.4 SECONDS + preop_sound = list( + /obj/item/circular_saw = 'sound/surgery/saw.ogg', + /obj/item/melee/arm_blade = 'sound/surgery/scalpel1.ogg', + /obj/item/twohanded/fireaxe = 'sound/surgery/scalpel1.ogg', + /obj/item/hatchet = 'sound/surgery/scalpel1.ogg', + /obj/item/kitchen/knife/butcher = 'sound/surgery/scalpel1.ogg', + /obj/item = 'sound/surgery/scalpel1.ogg', + ) fuckup_damage = 20 /datum/surgery_step/saw/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 10833bf57762..a1140682a993 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -325,8 +325,7 @@ /obj/item/toolset_handler/attack(mob/living/M, mob/user) if(active_tool) - if(istype(active_tool, /obj/item/surgical_drapes)) //of all the things to not have a tool behavior its drapes - attempt_initiate_surgery(src, M, user) + if(!(user.a_intent == INTENT_HARM) && attempt_initiate_surgery(active_tool, M, user)) return ..() 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/plastic_surgery.dm b/code/modules/surgery/plastic_surgery.dm index f5dcbdcd139b..374aef33655b 100644 --- a/code/modules/surgery/plastic_surgery.dm +++ b/code/modules/surgery/plastic_surgery.dm @@ -1,5 +1,7 @@ /datum/surgery/plastic_surgery name = "Plastic surgery" + desc = "If the patient's face is damaged and unrecognizable it restores it, otherwise it change the face and identity of the patient." + icon_state = "plastic_surgery" steps = list(/datum/surgery_step/incise, /datum/surgery_step/retract_skin, /datum/surgery_step/reshape_face, /datum/surgery_step/close) possible_locs = list(BODY_ZONE_HEAD) diff --git a/code/modules/surgery/prosthetic_replacement.dm b/code/modules/surgery/prosthetic_replacement.dm index e158067b4ba6..e7adaf10ca54 100644 --- a/code/modules/surgery/prosthetic_replacement.dm +++ b/code/modules/surgery/prosthetic_replacement.dm @@ -1,5 +1,7 @@ /datum/surgery/prosthetic_replacement name = "Prosthetic replacement" + desc = "Replace a severed limb with either a normal or a robotic limb." + icon_state = "prosthetic_replacement" steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/add_prosthetic) target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey) possible_locs = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_HEAD) diff --git a/code/modules/surgery/remove_embedded_object.dm b/code/modules/surgery/remove_embedded_object.dm index 3b4f542f5d3a..1ef83e512b6c 100644 --- a/code/modules/surgery/remove_embedded_object.dm +++ b/code/modules/surgery/remove_embedded_object.dm @@ -1,8 +1,16 @@ /datum/surgery/embedded_removal name = "Removal of embedded objects" + desc = "Extracts objects stuck in the body such as throwing stars or spears." + icon_state = "embedded_removal" steps = list(/datum/surgery_step/incise, /datum/surgery_step/remove_object, /datum/surgery_step/close) possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD) +/datum/surgery/repair_bone_hairline/can_start(mob/living/user, mob/living/carbon/target) + if(!istype(target)) + return FALSE + if(..()) + var/obj/item/bodypart/targeted_bodypart = target.get_bodypart(user.zone_selected) + return(targeted_bodypart.embedded_objects) /datum/surgery_step/remove_object name = "remove embedded objects" @@ -13,7 +21,6 @@ var/obj/item/target_item = null var/obj/item/bodypart/L = null - /datum/surgery_step/remove_object/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) L = surgery.operated_bodypart if(L) diff --git a/code/modules/surgery/repair_puncture.dm b/code/modules/surgery/repair_puncture.dm index 7a13400394f1..59936f641564 100644 --- a/code/modules/surgery/repair_puncture.dm +++ b/code/modules/surgery/repair_puncture.dm @@ -8,6 +8,8 @@ ///// Repair puncture wounds /datum/surgery/repair_puncture name = "Repair puncture" + icon = 'icons/obj/stack_medical.dmi' + icon_state = "suture_3" steps = list(/datum/surgery_step/incise, /datum/surgery_step/repair_innards, /datum/surgery_step/seal_veins, /datum/surgery_step/close) // repeat between steps 2 and 3 until healed target_mobtypes = list(/mob/living/carbon) possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD) diff --git a/code/modules/surgery/stomachpump.dm b/code/modules/surgery/stomachpump.dm new file mode 100644 index 000000000000..dfe41cc6608c --- /dev/null +++ b/code/modules/surgery/stomachpump.dm @@ -0,0 +1,55 @@ +/datum/surgery/stomach_pump + name = "Stomach Pump" + icon = 'icons/obj/surgery.dmi' + icon_state = "stomach" + 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.dm b/code/modules/surgery/surgery.dm index 6e8e6506fa7d..eae199ee97b5 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -1,26 +1,47 @@ /datum/surgery var/name = "surgery" var/desc = "surgery description" + var/icon = 'icons/misc/surgery_icons.dmi' + var/icon_state var/status = 1 - var/list/steps = list() //Steps in a surgery - var/step_in_progress = 0 //Actively performing a Surgery - var/can_cancel = 1 //Can cancel this surgery after step 1 with cautery - var/list/target_mobtypes = list(/mob/living/carbon/human) //Acceptable Species - var/location = BODY_ZONE_CHEST //Surgery location - var/requires_bodypart_type = BODYPART_ORGANIC //Prevents you from performing an operation on incorrect limbs. 0 for any limb type - var/list/possible_locs = list() //Multiple locations - var/ignore_clothes = 0 //This surgery ignores clothes - var/mob/living/carbon/target //Operation target mob - var/obj/item/bodypart/operated_bodypart //Operable body part - var/datum/wound/operated_wound //The actual wound datum instance we're targeting - var/datum/wound/targetable_wound //The wound type this surgery targets - var/requires_bodypart = TRUE //Surgery available only when a bodypart is present, or only when it is missing. - var/success_multiplier = 0 //Step success propability multiplier - var/requires_real_bodypart = 0 //Some surgeries don't work on limbs that don't really exist - var/lying_required = TRUE //Does the vicitm needs to be lying down. - var/self_operable = FALSE //Can the surgery be performed on yourself. - var/requires_tech = FALSE //handles techweb-oriented surgeries, previously restricted to the /advanced subtype (You still need to add designs) - var/replaced_by //type; doesn't show up if this type exists. Set to /datum/surgery if you want to hide a "base" surgery (useful for typing parents IE healing.dm just make sure to null it out again) + /// Steps in a surgery + var/list/steps = list() + /// Actively performing a Surgery + var/step_in_progress = 0 + /// Can cancel this surgery after step 1 with cautery + var/can_cancel = 1 + /// Acceptable Species + var/list/target_mobtypes = list(/mob/living/carbon/human) + /// Surgery location + var/location = BODY_ZONE_CHEST + /// Prevents you from performing an operation on incorrect limbs. FALSE for any limb type + var/requires_bodypart_type = BODYPART_ORGANIC + /// Multiple locations + var/list/possible_locs = list() + /// If this surgery ignores clothes + var/ignore_clothes = 0 + /// Operation target mob + var/mob/living/carbon/target + /// Operable body part + var/obj/item/bodypart/operated_bodypart + /// The actual wound datum instance we're targeting + var/datum/wound/operated_wound + /// The wound type this surgery targets + var/datum/wound/targetable_wound + /// Surgery available only when a bodypart is present, or only when it is missing. + var/requires_bodypart = TRUE + /// Step success propability multiplier + var/success_multiplier = 0 + /// Some surgeries don't work on limbs that don't really exist + var/requires_real_bodypart = 0 + /// Does the vicitm needs to be lying down. + var/lying_required = TRUE + /// Can the surgery be performed on yourself. + var/self_operable = FALSE + /// Handles techweb-oriented surgeries, previously restricted to the /advanced subtype (You still need to add designs) + var/requires_tech = FALSE + /// Type; doesn't show up if this type exists. Set to /datum/surgery if you want to hide a "base" surgery (useful for typing parents IE healing.dm just make sure to null it out again) + var/replaced_by /datum/surgery/New(surgery_target, surgery_location, surgery_bodypart) ..() @@ -114,9 +135,14 @@ var/obj/item/tool = user.get_active_held_item() if(S.try_op(user, target, user.zone_selected, tool, src, try_to_fail)) return TRUE - if(tool.item_flags & SURGICAL_TOOL) //Just because you used the wrong tool it doesn't mean you meant to whack the patient with it - to_chat(user, span_warning("This step requires a different tool!")) - return TRUE + if(tool) + if(tool.tool_behaviour == TOOL_CAUTERY || (requires_bodypart_type == BODYPART_ROBOTIC && tool.tool_behaviour == TOOL_SCREWDRIVER)) + // Cancel the surgery if a cautery/screwdriver is used AND it's not the tool used in the next step. + attempt_cancel_surgery(src, tool, target, user) + return TRUE + if(tool.item_flags & SURGICAL_TOOL) //Just because you used the wrong tool it doesn't mean you meant to whack the patient with it + to_chat(user, span_warning("This step requires a different tool!")) + return TRUE return FALSE /datum/surgery/proc/get_surgery_step() @@ -147,6 +173,9 @@ return probability + success_multiplier +/datum/surgery/proc/get_icon() + return icon(icon, icon_state) + /datum/surgery/advanced name = "advanced surgery" requires_tech = TRUE diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index 783ca874960e..2dc56a6b5f3d 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -2,17 +2,35 @@ /datum/surgery_step var/name - var/list/implements = list() //format is path = probability of success. alternatively - var/implement_type = null //the current type of implement used. This has to be stored, as the actual typepath of the tool may not match the list type. - var/accept_hand = FALSE //does the surgery step require an open hand? If true, ignores implements. Compatible with accept_any_item. - var/accept_any_item = FALSE //does the surgery step accept any item? If true, ignores implements. Compatible with require_hand. - var/time = 10 //how long does the step take? - var/repeatable = FALSE //can this step be repeated? Make shure it isn't last step, or it used in surgery with `can_cancel = 1`. Or surgion will be stuck in the loop - var/list/chems_needed = list() //list of chems needed to complete the step. Even on success, the step will have no effect if there aren't the chems required in the mob. - var/require_all_chems = TRUE //any on the list or all on the list? - var/list/ouchie_modifying_chems = list(/datum/reagent/consumable/ethanol/painkiller = 0.5, /datum/reagent/consumable/ethanol/inocybeshine = 0.5, /datum/reagent/medicine/morphine = 0.5) //chems that will modify the chance for fuckups while operating on conscious patients, stacks. - var/fuckup_damage = 10 //base damage dealt on a surgery being done without anesthetics on SURGERY_FUCKUP_CHANCE percent chance - var/fuckup_damage_type = BRUTE //damage type fuckup_damage is dealt as + /// What tools can be used in this surgery, format is path = probability of success. + var/list/implements = list() + /// The current type of implement used. This has to be stored, as the actual typepath of the tool may not match the list type. + var/implement_type = null + /// Does the surgery step require an open hand? If true, ignores implements. Compatible with accept_any_item. + var/accept_hand = FALSE + /// Does the surgery step accept any item? If true, ignores implements. Compatible with require_hand. + var/accept_any_item = FALSE + /// How long does the step take? + var/time = 1 SECONDS + /// Can this step be repeated? Make shure it isn't last step, or it used in surgery with `can_cancel = 1`. Or surgion will be stuck in the loop + var/repeatable = FALSE + /// List of chems needed to complete the step. Even on success, the step will have no effect if there aren't the chems required in the mob. Use *require_all_chems* to specify if its any on the list or all on the list + var/list/chems_needed = list() + /// If *chems_needed* requires all chems in the list or one chem in the list. + var/require_all_chems = TRUE + /// Chems that will modify the chance for fuckups while operating on conscious patients, stacks. + var/list/ouchie_modifying_chems = list(/datum/reagent/consumable/ethanol/painkiller = 0.5, /datum/reagent/consumable/ethanol/inocybeshine = 0.5, /datum/reagent/medicine/morphine = 0.5) + /// Base damage dealt on a surgery being done without anesthetics on SURGERY_FUCKUP_CHANCE percent chance + var/fuckup_damage = 10 + /// Damage type fuckup_damage is dealt as + var/fuckup_damage_type = BRUTE + + /// Sound played when the step is started + var/preop_sound + /// Sound played if the step succeeded + var/success_sound + /// Sound played if the step fails + var/failure_sound /datum/surgery_step/proc/try_op(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, try_to_fail = FALSE) var/success = FALSE @@ -76,8 +94,9 @@ var/user_speed_mod = 1 if(preop(user, target, target_zone, tool, surgery) == -1) - surgery.step_in_progress = 0 - return + surgery.step_in_progress = FALSE + return FALSE + play_preop_sound(user, target, target_zone, tool, surgery) if(tool) tool_speed_mod = tool.toolspeed @@ -85,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 @@ -92,12 +113,23 @@ prob_chance = implements[implement_type] prob_chance *= surgery.get_probability_multiplier() + // Blood splatters on tools and user + if(tool && prob(20)) + tool.add_mob_blood(target) + to_chat(user, span_warning("Your [tool] gets covered [target]'s blood ")) + if(prob(10)) + user.add_mob_blood(target) + to_chat(user, span_warning("You get covered [target]'s blood ")) + if((prob(prob_chance) || iscyborg(user)) && chem_check(target, user, tool) && !try_to_fail) if(success(user, target, target_zone, tool, surgery)) + play_success_sound(user, target, target_zone, tool, surgery) advance = TRUE else if(failure(user, target, target_zone, tool, surgery)) + play_failure_sound(user, target, target_zone, tool, surgery) + advance = TRUE if(!HAS_TRAIT(target, TRAIT_SURGERY_PREPARED) && target.stat != DEAD && !IS_IN_STASIS(target) && fuckup_damage) //not under the effects of anaesthetics or a strong painkiller, harsh penalty to success chance if(!issilicon(user) && !HAS_TRAIT(user, TRAIT_SURGEON)) //borgs and abductors are immune to this @@ -108,7 +140,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 @@ -118,18 +152,57 @@ "[user] begins to perform surgery on [target].", "[user] begins to perform surgery on [target].") +/datum/surgery_step/proc/play_preop_sound(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(!preop_sound) + return + var/sound_file_use + if(islist(preop_sound)) + for(var/typepath in preop_sound)//iterate and assign subtype to a list, works best if list is arranged from subtype first and parent last + if(istype(tool, typepath)) + sound_file_use = preop_sound[typepath] + break + else + sound_file_use = preop_sound + playsound(get_turf(target), sound_file_use, 30, TRUE, falloff = 2) + /datum/surgery_step/proc/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results(user, target, span_notice("You succeed."), "[user] succeeds!", "[user] finishes.") return TRUE +/datum/surgery_step/proc/play_success_sound(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(!success_sound) + return + var/sound_file_use + if(islist(success_sound )) + for(var/typepath in success_sound )//iterate and assign subtype to a list, works best if list is arranged from subtype first and parent last + if(istype(tool, typepath)) + sound_file_use = success_sound [typepath] + break + else + sound_file_use = success_sound + playsound(get_turf(target), sound_file_use, 30, TRUE, falloff = 2) + /datum/surgery_step/proc/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results(user, target, span_warning("You screw up!"), span_warning("[user] screws up!"), "[user] finishes.", TRUE) //By default the patient will notice if the wrong thing has been cut return FALSE +/datum/surgery_step/proc/play_failure_sound(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(!failure_sound) + return + var/sound_file_use + if(islist(failure_sound)) + for(var/typepath in failure_sound)//iterate and assign subtype to a list, works best if list is arranged from subtype first and parent last + if(istype(tool, typepath)) + sound_file_use = failure_sound[typepath] + break + else + sound_file_use = failure_sound + playsound(get_turf(target), sound_file_use, 30, TRUE, falloff = 2) + /datum/surgery_step/proc/tool_check(mob/user, obj/item/tool) return TRUE @@ -188,8 +261,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/surgery/tools.dm b/code/modules/surgery/tools.dm index 5576ac42ed1b..577773fe4322 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -12,6 +12,9 @@ tool_behaviour = TOOL_RETRACTOR w_class = WEIGHT_CLASS_TINY +/obj/item/retractor/attack(mob/living/M, mob/user) + if(user.a_intent == INTENT_HARM || !attempt_initiate_surgery(src, M, user)) + ..() /obj/item/retractor/augment name = "retractor" @@ -45,6 +48,9 @@ w_class = WEIGHT_CLASS_TINY attack_verb = list("attacked", "pinched") +/obj/item/hemostat/attack(mob/living/M, mob/user) + if(user.a_intent == INTENT_HARM || !attempt_initiate_surgery(src, M, user)) + ..() /obj/item/hemostat/augment name = "hemostat" @@ -79,6 +85,9 @@ w_class = WEIGHT_CLASS_TINY attack_verb = list("burnt") +/obj/item/cautery/attack(mob/living/M, mob/user) + if(user.a_intent == INTENT_HARM || !attempt_initiate_surgery(src, M, user)) + ..() /obj/item/cautery/augment name = "cautery" @@ -125,6 +134,9 @@ SSachievements.unlock_achievement(/datum/achievement/likearecord, user.client) return (MANUAL_SUICIDE) +/obj/item/surgicaldrill/attack(mob/living/M, mob/user) + if(user.a_intent == INTENT_HARM || !attempt_initiate_surgery(src, M, user)) + ..() /obj/item/surgicaldrill/augment name = "surgical drill" @@ -167,6 +179,10 @@ . = ..() AddComponent(/datum/component/butchering, 80 * toolspeed, 100, 0) +/obj/item/scalpel/attack(mob/living/M, mob/user) + if(user.a_intent == INTENT_HARM || !attempt_initiate_surgery(src, M, user)) + ..() + /obj/item/scalpel/augment name = "scalpel" desc = "Ultra-sharp blade attached directly to your bone for extra-accuracy." @@ -222,6 +238,10 @@ . = ..() AddComponent(/datum/component/butchering, 40 * toolspeed, 100, 5, 'sound/weapons/circsawhit.ogg') //saws are very accurate and fast at butchering +/obj/item/circular_saw/attack(mob/living/M, mob/user) + if(user.a_intent == INTENT_HARM || !attempt_initiate_surgery(src, M, user)) + ..() + /obj/item/circular_saw/augment name = "circular saw" desc = "A small but very fast spinning saw. Edges dulled to prevent accidental cutting inside of the surgeon." @@ -258,6 +278,10 @@ w_class = WEIGHT_CLASS_SMALL attack_verb = list("corrected", "properly set") +/obj/item/bonesetter/attack(mob/living/M, mob/user) + if(user.a_intent == INTENT_HARM || !attempt_initiate_surgery(src, M, user)) + ..() + /obj/item/bonesetter/bone name = "bone bonesetter" desc = "A bonesetter made of bones... for setting bones with... bones?" @@ -276,7 +300,7 @@ attack_verb = list("slapped") /obj/item/surgical_drapes/attack(mob/living/M, mob/user) - if(!attempt_initiate_surgery(src, M, user)) + if(user.a_intent == INTENT_HARM || !attempt_initiate_surgery(src, M, user)) ..() /obj/item/surgical_drapes/goliath diff --git a/code/modules/swarmers/swarmer.dm b/code/modules/swarmers/swarmer.dm index 471b0a0a0a30..82a215fc4b91 100644 --- a/code/modules/swarmers/swarmer.dm +++ b/code/modules/swarmers/swarmer.dm @@ -59,7 +59,7 @@ del_on_death = 1 deathmessage = "explodes with a sharp pop!" light_color = LIGHT_COLOR_CYAN - hud_type = /datum/hud/swarmer + hud_type = /datum/hud/living/swarmer speech_span = SPAN_ROBOT ///Resource points, generated by consuming metal/glass var/resources = 0 diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index d797a6424a19..70692d5b81fb 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -767,6 +767,16 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) cost = 3 item = /obj/item/ammo_box/magazine/m12g/slug +/datum/uplink_item/ammo/shotgun/hpbuck + name = "12g Hollow-Point Buckshot Drum" + desc = "An alternative 8-round hollow-point buckshot magazine for use with the Bulldog shotgun. For when you really need to put people in the dirt." + item = /obj/item/ammo_box/magazine/m12g/hpbuck + +/datum/uplink_item/ammo/shotgun/flechette + name = "12g Flechette Drum" + desc = "An alternative 8-round flechette magazine for use with the Bulldog shotgun. Hope they didnt want to use that armor..." + item = /obj/item/ammo_box/magazine/m12g/flechette + /datum/uplink_item/ammo/revolver name = ".357 Speed Loader" desc = "A speed loader that contains seven additional .357 Magnum rounds; usable with the Syndicate revolver. \ @@ -1584,7 +1594,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) desc = "Stimpacks, the tool of many great heroes, make you nearly immune to stuns and knockdowns for about \ 5 minutes after injection." item = /obj/item/reagent_containers/hypospray/medipen/stimpack/large // Yogs -- Stimpack change - cost = 5 + cost = 8 surplus = 90 /datum/uplink_item/device_tools/medkit @@ -1693,7 +1703,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/autosurgeon/anti_stun cost = 12 surplus = 0 - include_modes = list(/datum/game_mode/nuclear) /datum/uplink_item/implants/freedom name = "Freedom Implant" diff --git a/code/modules/vehicles/motorized_wheelchair.dm b/code/modules/vehicles/motorized_wheelchair.dm index 7062fa9e6f78..ee690b5b5806 100644 --- a/code/modules/vehicles/motorized_wheelchair.dm +++ b/code/modules/vehicles/motorized_wheelchair.dm @@ -1,18 +1,19 @@ /obj/vehicle/ridden/wheelchair/motorized name = "motorized wheelchair" desc = "A chair with big wheels. It seems to have a motor in it." + icon_state = "mwheelchair" max_integrity = 150 var/speed = 2 var/power_efficiency = 1 - var/power_usage = 100 + var/power_usage = 25 var/panel_open = FALSE var/list/required_parts = list(/obj/item/stock_parts/manipulator, - /obj/item/stock_parts/manipulator, - /obj/item/stock_parts/capacitor) + /obj/item/stock_parts/manipulator, + /obj/item/stock_parts/capacitor) var/obj/item/stock_parts/cell/power_cell /obj/vehicle/ridden/wheelchair/motorized/CheckParts(list/parts_list) - ..() + . = ..() refresh_parts() /obj/vehicle/ridden/wheelchair/motorized/proc/refresh_parts() @@ -24,14 +25,20 @@ var/datum/component/riding/D = GetComponent(/datum/component/riding) D.vehicle_move_delay = round(CONFIG_GET(number/movedelay/run_delay) * movedelay) / speed -/obj/vehicle/ridden/wheelchair/motorized/obj_destruction(damage_flag) +/obj/vehicle/ridden/wheelchair/motorized/proc/drop_contents() var/turf/T = get_turf(src) for(var/atom/movable/A in contents) A.forceMove(T) if(isliving(A)) var/mob/living/L = A L.update_mobility() - ..() + if(power_cell) + power_cell.update_icon() + refresh_parts() + +/obj/vehicle/ridden/wheelchair/motorized/obj_destruction(damage_flag) + drop_contents() + . = ..() /obj/vehicle/ridden/wheelchair/motorized/driver_move(mob/living/user, direction) if(istype(user)) @@ -70,8 +77,8 @@ if(power_cell && panel_open) power_cell.update_icon() user.put_in_hands(power_cell) - power_cell = null to_chat(user, span_notice("You remove the [power_cell] from [src].")) + power_cell = null return return ..() @@ -92,18 +99,18 @@ refresh_parts() return if(istype(I, /obj/item/stock_parts)) - var/obj/item/stock_parts/B = I + var/obj/item/stock_parts/newpart = I var/P - for(var/obj/item/stock_parts/A in contents) + for(var/obj/item/stock_parts/oldpart in contents) for(var/D in required_parts) - if(ispath(A.type, D)) + if(ispath(oldpart.type, D)) P = D break - if(istype(B, P) && istype(A, P)) - if(B.get_part_rating() > A.get_part_rating()) - B.forceMove(src) - user.put_in_hands(A) - user.visible_message(span_notice("[user] replaces [A] with [B] in [src]."), span_notice("You replace [A] with [B].")) + if(istype(newpart, P) && istype(oldpart, P)) + if(newpart.get_part_rating() > oldpart.get_part_rating()) + newpart.forceMove(src) + user.put_in_hands(oldpart) + user.visible_message(span_notice("[user] replaces [oldpart] with [newpart] in [src]."), span_notice("You replace [oldpart] with [newpart].")) break refresh_parts() return @@ -115,12 +122,7 @@ to_chat(user, span_notice("You detach the wheels and deconstruct the chair.")) new /obj/item/stack/rods(drop_location(), 8) new /obj/item/stack/sheet/metal(drop_location(), 10) - var/turf/T = get_turf(src) - for(var/atom/movable/A in contents) - A.forceMove(T) - if(isliving(A)) - var/mob/living/L = A - L.update_mobility() + drop_contents() qdel(src) return TRUE @@ -138,12 +140,12 @@ /obj/vehicle/ridden/wheelchair/motorized/Bump(atom/movable/M) . = ..() // Here is the shitty emag functionality. - if(obj_flags & EMAGGED && (istype(M, /turf/closed) || isliving(M))) + if(obj_flags & EMAGGED && (isclosedturf(M) || isliving(M))) explosion(src, -1, 1, 3, 2, 0) visible_message(span_boldwarning("[src] explodes!!")) return // If the speed is higher than what delay_multiplier used to be throw the person on the wheelchair away - if(M.density && speed > 6.7 && has_buckled_mobs()) + if(isclosedturf(M) && speed > 6.7 && has_buckled_mobs()) var/mob/living/H = buckled_mobs[1] var/atom/throw_target = get_edge_target_turf(H, pick(GLOB.cardinals)) unbuckle_mob(H) diff --git a/code/modules/vehicles/wheelchair.dm b/code/modules/vehicles/wheelchair.dm index 993e8bdae3ca..ccc6d43abb1b 100644 --- a/code/modules/vehicles/wheelchair.dm +++ b/code/modules/vehicles/wheelchair.dm @@ -10,8 +10,6 @@ canmove = TRUE density = FALSE //Thought I couldn't fix this one easily, phew movedelay = 4 - ///Determines the typepath of what the object folds into - var/foldabletype = /obj/item/wheelchair /obj/vehicle/ridden/wheelchair/Initialize() . = ..() @@ -42,7 +40,7 @@ if(canmove && (user.get_num_arms() < arms_required)) to_chat(user, span_warning("You don't have enough arms to operate the wheels!")) canmove = FALSE - addtimer(VARSET_CALLBACK(src, canmove, TRUE), 20) + addtimer(VARSET_CALLBACK(src, canmove, TRUE), 2 SECONDS) return FALSE //paraplegic quirk users get a halved movedelay to model their life of wheelchair useage - yogs if(user.has_quirk(/datum/quirk/paraplegic)) @@ -61,11 +59,10 @@ /obj/vehicle/ridden/wheelchair/Moved() . = ..() cut_overlays() - playsound(src, 'sound/effects/roll.ogg', 75, 1) + playsound(src, 'sound/effects/roll.ogg', 75, TRUE) if(has_buckled_mobs()) handle_rotation_overlayed() - /obj/vehicle/ridden/wheelchair/post_buckle_mob(mob/living/user) . = ..() handle_rotation_overlayed() @@ -80,7 +77,7 @@ /obj/vehicle/ridden/wheelchair/wrench_act(mob/living/user, obj/item/I) //Attackby should stop it attacking the wheelchair after moving away during decon to_chat(user, span_notice("You begin to detach the wheels...")) - if(I.use_tool(src, user, 40, volume=50)) + if(I.use_tool(src, user, 4 SECONDS, volume=50)) to_chat(user, span_notice("You detach the wheels and deconstruct the chair.")) new /obj/item/stack/rods(drop_location(), 6) new /obj/item/stack/sheet/metal(drop_location(), 4) @@ -99,8 +96,6 @@ var/image/V = image(icon = icon, icon_state = "wheelchair_overlay", layer = FLY_LAYER, dir = src.dir) add_overlay(V) - - /obj/vehicle/ridden/wheelchair/proc/can_be_rotated(mob/living/user) return TRUE @@ -113,6 +108,16 @@ return TRUE return FALSE +/obj/vehicle/ridden/wheelchair/CtrlClick(mob/user) + if(has_buckled_mobs() && pick(buckled_mobs) == user) + return + . = ..() + +/obj/vehicle/ridden/wheelchair/post_buckle_mob(mob/living/L) + if(L.pulling && src.pulledby == L) + L.stop_pulling() + . = ..() + /obj/vehicle/ridden/wheelchair/the_whip/driver_move(mob/living/user, direction) if(istype(user)) var/datum/component/riding/D = GetComponent(/datum/component/riding) @@ -121,7 +126,6 @@ /obj/item/wheelchair name = "wheelchair" - desc = "A collapsed wheelchair that can be carried around." icon = 'icons/obj/vehicles.dmi' icon_state = "wheelchair_folded" lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' @@ -129,25 +133,35 @@ w_class = WEIGHT_CLASS_NORMAL force = 8 //Force is same as a chair custom_materials = list(/datum/material/iron = 10000) - var/unfolded_type = /obj/vehicle/ridden/wheelchair + var/obj/vehicle/ridden/wheelchair/wheelchair /obj/vehicle/ridden/wheelchair/MouseDrop(over_object, src_location, over_location) //Lets you collapse wheelchair . = ..() - if(over_object != usr || !Adjacent(usr) || !foldabletype) + if(over_object != usr || !Adjacent(usr)) return FALSE if(!ishuman(usr) || !usr.canUseTopic(src, BE_CLOSE)) return FALSE if(has_buckled_mobs()) + to_chat(usr, span_warning("You need to unbuckle the passenger from [src] first!")) return FALSE - usr.visible_message("[usr] collapses [src].", "You collapse [src].") - var/obj/vehicle/ridden/wheelchair/wheelchair_folded = new foldabletype(get_turf(src)) + usr.visible_message(span_notice("[usr] collapses [src]."), span_notice("You collapse [src].")) + var/obj/item/wheelchair/wheelchair_folded = new /obj/item/wheelchair(get_turf(src)) + forceMove(wheelchair_folded) + wheelchair_folded.desc = "A collapsed [name] that can be carried around." + wheelchair_folded.name = name + wheelchair_folded.wheelchair = src usr.put_in_hands(wheelchair_folded) - qdel(src) - + /obj/item/wheelchair/attack_self(mob/user) //Deploys wheelchair on in-hand use deploy_wheelchair(user, user.loc) /obj/item/wheelchair/proc/deploy_wheelchair(mob/user, atom/location) - var/obj/vehicle/ridden/wheelchair/wheelchair_unfolded = new unfolded_type(location) - wheelchair_unfolded.add_fingerprint(user) + if(!wheelchair) + wheelchair = new /obj/vehicle/ridden/wheelchair(location) + wheelchair.add_fingerprint(user) + wheelchair.forceMove(location) qdel(src) + +/obj/item/wheelchair/Destroy() + wheelchair = null + . = ..() 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/autodrobe.dm b/code/modules/vending/autodrobe.dm index a1951679160b..b186e919da08 100644 --- a/code/modules/vending/autodrobe.dm +++ b/code/modules/vending/autodrobe.dm @@ -61,7 +61,7 @@ /obj/item/clothing/under/pirate = 1, /obj/item/clothing/suit/pirate = 1, /obj/item/clothing/head/pirate = 1, - /obj/item/clothing/head/bandana = 1, + /obj/item/clothing/head/pirate/bandana = 1, /obj/item/clothing/under/soviet = 1, /obj/item/clothing/head/ushanka = 1, /obj/item/clothing/suit/imperium_monk = 1, @@ -76,6 +76,7 @@ /obj/item/clothing/suit/wizrobe/fake = 1, /obj/item/clothing/head/wizard/fake = 1, /obj/item/staff = 3, + /obj/item/toy/dummy = 2, /obj/item/clothing/mask/gas/sexyclown = 1, /obj/item/clothing/under/rank/clown/sexy = 1, /obj/item/clothing/mask/gas/sexymime = 1, diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm index 9299e3766bc2..bd021acb8192 100644 --- a/code/modules/vending/clothesmate.dm +++ b/code/modules/vending/clothesmate.dm @@ -176,7 +176,7 @@ /obj/item/clothing/glasses/sunglasses/cheap = 2, /obj/item/clothing/glasses/yogs/threed = 2, /obj/item/clothing/shoes/sneakers/black = 3, - /obj/item/clothing/shoes/yogs/fire_crocs = 1, + /obj/item/clothing/shoes/fire_crocs = 1, /obj/item/clothing/shoes/winterboots = 2, /obj/item/clothing/shoes/singery = 1, /obj/item/clothing/shoes/singerb = 1, 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/dependencies.sh b/dependencies.sh index 46516ffc69a0..f0cbc83c49b9 100755 --- a/dependencies.sh +++ b/dependencies.sh @@ -6,10 +6,10 @@ # byond version # Extracted from the Dockerfile. Change by editing Dockerfile's FROM command. export BYOND_MAJOR=514 -export BYOND_MINOR=1564 +export BYOND_MINOR=1583 #rust_g git tag -export RUST_G_VERSION=0.4.5 +export RUST_G_VERSION=0.7.0 #node version export NODE_VERSION=12 diff --git a/html/changelog.html b/html/changelog.html index 1f16a32b61dd..c9a600e43536 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -58,19 +58,477 @@ -->
+

28 June 2022

+

redmoogle updated:

+
    +
  • Hand drill now works as a screwdriver for surgery
  • +
+ +

27 June 2022

+

actioninja, Ghommie updated:

+
    +
  • Washing machines now support arbitrary dye color
  • +
  • Washing machines now dye nearly every item.
  • +
  • lots of backend changes to clothing overlays, report any issues
  • +
  • Different cuffs now come with different worn overlays instead of a generic one.
  • +
+

adamsong updated:

+
    +
  • fixed ai whale on gax
  • +
+ +

26 June 2022

+

Nmajask, IndusRobot, Mothblocks updated:

+
    +
  • Selecting surgeries are now done by a radial menu
  • +
  • You can now start surgeries with tools and end surgeries without drapes
  • +
  • Surgeries are now quieter
  • +
  • You can now see if someone is being operated on when you inspect them
  • +
  • Doing a surgery now has a 20% chance to get blood on your tool and 10% chance to get blood on you
  • +
+

SuperSlayer updated:

+
    +
  • CNS rebooter implant is no more nukie only
  • +
+

AlvCyktor updated:

+
    +
  • fixed duplicate build path for plate and trays
  • +
  • RSF can now print plates
  • +
  • Ding
  • +
+

Arkatos, ported to YogStation by SuperSlayer updated:

+
    +
  • Blobbernauts now have a generic living healthdoll and pull icon.
  • +
  • Blobbernauts will now show severity of their injuries as a red screen overlay to the user.
  • +
  • Blob core remaining health will now show in percentages and in green color. This affects both blobbernauts and blob overminds.
  • +
  • Blob power is now in orange color for blob overminds.
  • +
  • Swarmers now have a generic living healthdoll and pull icon.
  • +
  • Swarmers will now show severity of their injuries as a red screen overlay to the user.
  • +
  • Swarmer's abilities now have tooltips to clarify their use upon mouse hover.
  • +
+

Chubbygummibear updated:

+
    +
  • Rune Scimitar causes mobs to drop bonus loot from a loot table on kill
  • +
  • Rune Scimitar gains bonus damage against fauna with each lavaland fauna slain up to 20, for a total of 100 bonus damage. get out there and grind
  • +
  • Rune Scimitar's base force down to 20
  • +
+

JamieD1 updated:

+
    +
  • Disabling Regal Rat till its fixed
  • +
  • Shadowlings now cannot get mutations and nerfs speed
  • +
+

MajManatee updated:

+
    +
  • Minigun go BRRRRRRRRRRRRRRRT
  • +
  • Adds a Flechette drum for traitors/nukies
  • +
  • Adds a Hollow-point buckshot drum for traitors/nukies
  • +
+

Mqiib updated:

+
    +
  • Krav maga lung punch losebreath reduced by 40%
  • +
  • Moves stun immunity of fortitude to level 2.
  • +
  • Frenzy state gives stun immunity
  • +
  • CQC counter no longer hard stuns
  • +
  • Explosive meltdown nanites have a flat 30 second timer now.
  • +
  • Explosive meltdown nanites no longer gib you, but still do a buttload of brute damage.
  • +
  • Smashing a bluespace crystal now makes you nauseous and slightly confused
  • +
+

SapphicOverload updated:

+
    +
  • adds winter coats for department heads
  • +
  • gives the CE's hardsuit full radiation protection
  • +
+

Skrem7 updated:

+
    +
  • Mining belts can now hold lazarus injectors and bottles of whiskey
  • +
  • Mining belts can no longer hold bone swords
  • +
  • Storage on mining webbing and sinewbelt increased
  • +
  • Space Pirates now have a unique uniform which has armor stats equal to the tactical turtleneck as well as no sensors.
  • +
  • Space Pirate captain now spawns with a Syndicate captain's coat and hat, which has more robust armor than the standard space pirate gear.
  • +
  • Space Pirate gunner now spawns with a Syndicate pirate hat, having their own unique uniform.
  • +
  • The pirate bandana now gives the ability to speak pirate, similar to the pirate and pirate captain's hat.
  • +
  • All pirate exosuits can now hold the normal cutlass in addition to the energy one. Normal exosuits can hold emergency tanks now.
  • +
  • The normal and space pirate garb have all been given updated descriptions. The Syndicate ones have also received new names and different descriptions.
  • +
  • FEAR THE (LAVA) SEAS LAND LUBBERS, OUR BLADES HUNGER FOR WHELPLING BLOOD
  • +
  • Warden webbing powergaming has been destroyed by secoff financial independence
  • +
  • Patches up some weird storage decisions regarding all mining exosuits. Basically, knives and legion cores of all forms should fit on any mining exosuit
  • +
  • Adds bone sword and all bows as options to exosuit slot on goliath, pathfinder, and drake armors
  • +
  • Adds bone spear to drake armor because it had the normal spear only??
  • +
+

Sniblet updated:

+
    +
  • Rollerbeds no longer require plastic
  • +
+

SomeguyManperson updated:

+
    +
  • resonator blasts will no longer stack on top of eachother creating a tile you cannot step on without breaking your bones that has collectable rocks on it
  • +
  • 2 ventriloquist dummies are now stocked in autodrobes
  • +
+

TheRyeGuyWhoWillNowDie updated:

+
    +
  • inspecting the twisted construction spell AKA the hand that appears after casting the spell will also no longer incorrectly state that it can convert cyborgs
  • +
  • the loose beans in the armory have been placed in boxes. there are also more of them now.
  • +
+

ToasterBiome updated:

+
    +
  • Adds buttons to preview what higher tier chem dispensers can put out
  • +
+

nmajask updated:

+
    +
  • cryopods should work now
  • +
+

redmoogle updated:

+
    +
  • Admins now have a button to set the beer nuke code
  • +
  • Adds PETA cargo loan
  • +
  • SMES Icon changed slightly
  • +
+

tralezab, ported to Yogstation by SuperSlayer updated:

+
    +
  • a lot of >32x32 mobs now have icons for their health dolls
  • +
+

ynot01 updated:

+
    +
  • Nanite fake death now has a 4.5 use rate from 3.5
  • +
  • ghost role chemical dispensers are now fully upgraded
  • +
  • VR chemical dispensers are now fully upgraded
  • +
+ +

25 June 2022

+

ToasterBiome updated:

+
    +
  • fixes bad sign and light in yogsbox
  • +
  • makes some wires more superior on yogsbox
  • +
+ +

24 June 2022

+

LazennG updated:

+
    +
  • fixes knuckles not working right
  • +
+

MajManatee updated:

+
    +
  • Delta now has grounding rods.
  • +
+ +

23 June 2022

+

TheRyeGuyWhoWillNowDie updated:

+
    +
  • cult's twisted construction no longer incorrectly states that it can convert cyborgs
  • +
  • fixes a theos moment
  • +
+ +

22 June 2022

+

MajManatee updated:

+
    +
  • WT mags are now visible again
  • +
+

ynot01 updated:

+
    +
  • Made the capitalist bible sound much shorter
  • +
+ +

21 June 2022

+

GalacticRuler updated:

+
    +
  • Depleted Uranium Slugs cost 1 less uranium sheet each
  • +
  • Depleted Uranium Slugs have 60 ap (down from 200)
  • +
  • Depleted Uranium Slugs do 30 damage (down from 35)
  • +
  • Depleted Uranium Slugs have a -45 wound mod (down from -30)
  • +
+

GraveHat updated:

+
    +
  • Adds in Surgery Duffel and a Medical mask with an Anesthetic tank while removing the surgery tools on the table, this also means they get a sterilizer a razor, and an extra surgery mask now
  • +
+

JamieD1 updated:

+
    +
  • Batons are now upgradable to be 1 hit stun and can also be equipped with mindshield firing pins
  • +
  • Balances Stimulants - 5 to 8 TC 2 to 3 Uses
  • +
  • Adds FTL Advanced Edition Soundtrack: Lanius (Battle) (ABANDONED SECTOR)
  • +
  • Adds FTL Theme to Lobby Music
  • +
+

Marmio64 updated:

+
    +
  • extinguishers deal 33% less damage to blazing oil blob strain
  • +
+

Skrem7 updated:

+
    +
  • Secbelts and bandoliers can now hold proper number of items
  • +
  • Syndie mediborg loses emag and crowbar, gains zipties
  • +
  • Syndie saboborg gains combat knife
  • +
+

SomeguyManperson updated:

+
    +
  • golem greet text no longer gives conflicting information with certain golem types by assuming your material
  • +
+

SuperSlayer updated:

+
    +
  • Blob now becomes almost unlikable after reaching critical mass
  • +
+

TheRyeGuyWhoWillNowDie updated:

+
    +
  • syndie sabo borgs now have emags
  • +
  • the shotgun slug drums purchasable by nuclear operative have had their ammo type replaced with syndicate slugs, which do more damage.
  • +
  • syndicate slugs, shotgun slugs that do 60 brute instead of 42. only purchasable by nuclear operatives
  • +
+

adamsong updated:

+
    +
  • Added horror's host to check antags
  • +
+

alexkar598 updated:

+
    +
  • Lizards are now cannonically 8 feet tall
  • +
+

nmajask updated:

+
    +
  • fixed ashwalker clothing having missing pixels if worn by a female
  • +
  • fixed footwraps not showing up on the preference menu and being incorrect when a job outfit is selected by an admin
  • +
  • fixed selecting an outfit for a ghost who had their original body offered teleporting the wrong player
  • +
  • fixed syringes not embedding
  • +
+

redmoogle updated:

+
    +
  • Brain damage quirk
  • +
  • organ harvester can be rotated now
  • +
+

stwordcitizen updated:

+
    +
  • made simplemob health doll not spawn on top of the stop pulling button
  • +
+

tattax updated:

+
    +
  • you can now hold space bats
  • +
  • bats can now actually see in the dark
  • +
  • uncapitalized simplemob names
  • +
  • you can no longer mess with inhand mobs
  • +
+

ynot01 updated:

+
    +
  • gave chemical dispensers more manipulator upgrade tiers
  • +
+ +

19 June 2022

+

@LazennG, @ToasterBiome, Chubbygummibear updated:

+
    +
  • Basalt Katana gets an activatable dodge roll mechanic
  • +
  • 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
  • +
  • Basalt katana force down to 18 to avoid miner ninjas tearing up the crew
  • +
  • Basalt katana damage on lavaland fauna up to 70, including megafauna
  • +
  • dodge roll sound effect
  • +
  • evasion icon to go with the popup letting you know you're in i-frames
  • +
+

Galacticruler, @Chubbygummibear, @Hopekz updated:

+
    +
  • Added new eye implant for reagent scanning, the chemical analyzer implant
  • +
  • added new implant to the tech node with the other HUD implants
  • +
  • added third mob-level check to allow for the new implant to work
  • +
+

comma, orelbon updated:

+
    +
  • Added holosigns from Baystation
  • +
+

00ze-cyclone updated:

+
    +
  • Removed a space in the species whitelisting
  • +
  • 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 updated:

+
    +
  • Added inhand ability for bloody knuckles
  • +
  • tweaked some recent loot to hopefully be less useless
  • +
+

Chubbygummibear updated:

+
    +
  • Preternis eyes no longer delete themselves when in a non preternis host
  • +
  • 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.
  • +
  • Preternis eyes depend on being high organ health to use their night vision rather than preternis charge meter.
  • +
  • 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
  • +
  • Stomach Pumping surgery. A quick way to deal with someone, living or dead who has way too many reagents in their system.
  • +
  • I updated our vomit code and i don't want to talk about it. players won't notice a difference
  • +
+

GalacticRuler updated:

+
    +
  • Adds new Fishing themed 10x10 maint ruin.
  • +
  • Adds new ruin to station.dmm
  • +
+

Skrem7 updated:

+
    +
  • WT has 2-rnd burst back, bullets do less individual damage, magazine size increased
  • +
  • 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.
  • +
  • Secbelt + variants can hold shotgun shell boxes and teleshields, bulky now.
  • +
  • Shotgun shell boxes can now only carry shotgun shells.
  • +
  • Beanbag boxes spawn with 7 beanbags, rather than 6.
  • +
  • Security webbing and HoS belt storage buffed.
  • +
  • HoS now spawns with their belt and teleshield from the locker, extra baton/flash/cuffs moved to locker.
  • +
  • Assault belt now identical to tactical webbing.
  • +
  • Shoulder holster normal-sized again.
  • +
  • Bandolier holds more shells.
  • +
+

SomeguyManperson updated:

+
    +
  • toxins bombs no longer give direct research, instead doubling research speed for the amount of points they are worth
  • +
  • bloodsucker frenzy now provides reduced damage slowdown for its duration
  • +
  • adds line battles, you can now shoot over people who are both prone and within 2 tiles of you
  • +
  • this also means you can combat flop to matrix bullets at close range
  • +
+

TheBonded, ported to YogStation by SuperSlayer updated:

+
    +
  • 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 updated:

+
    +
  • AI gets 1 more research point per CPU
  • +
  • AI techs are no longer hiding in the techweb
  • +
  • AI cores should no longer turn off due to grid failure events
  • +
+

ToasterBiome updated:

+
    +
  • Adds collapsable fishing rod
  • +
  • fixes fishing rod right inhand
  • +
  • eating fish now works
  • +
  • make fishing loot datums make a bit more sense
  • +
+

TymurShatillo updated:

+
    +
  • Fixes pacifism touch cooldown
  • +
+

jachlompsky updated:

+
    +
  • gangrel transform now gives the user armor and increased punch damage
  • +
+

nmajask updated:

+
    +
  • moving while doing a surgery now hurts the patient
  • +
+

ynot01 updated:

+
    +
  • Destroying the bluespace locker now teleports everything inside to the station
  • +
+ +

18 June 2022

+

Mothblocks, ported to YogStation by SuperSlayer updated:

+
    +
  • Defibing people now gives positive mood
  • +
+

Skrem7 updated:

+
    +
  • Rubber shot more damage and less damage falloff
  • +
+

tattax updated:

+
    +
  • vanishing act now works, frenzy exit is now setup properly
  • +
+

ynot01 updated:

+
    +
  • fixed fish descriptions
  • +
  • fixed card descriptions
  • +
+ +

17 June 2022

+

AlvCyktor updated:

+
    +
  • Barq is good apparently
  • +
+

JamieD1 updated:

+
    +
  • Removes ALL button from investigate.
  • +
+

nmajask updated:

+
    +
  • fixed wigs using a different sprite than it should
  • +
+ +

16 June 2022

+

GalacticRuler updated:

+
    +
  • Added one new 3x3 maint ruin themed around vending machines
  • +
  • Corrected missing spaces in station.dm
  • +
+

ToasterBiome updated:

+
    +
  • tinted window in metastation courtroom is now a proper window spawner
  • +
+ +

15 June 2022

+

SomeguyManperson updated:

+
    +
  • no more ruin spawned corpses with gpses because people with gpses dont get not recovered (this is canon shut up)
  • +
  • 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
  • +
  • mining medic no longer gets 2 gpses
  • +
+

14 June 2022

+

@GalacticRuler, Chubbygummibear updated:

+
    +
  • crayons and spraycans with 1 charge left are no longer infinite for tags that cost more than 1 charge
  • +

Hopek updated:

  • Mappers can now created round-start tilted vending machines
+

ghost, ported by TheGamerdk updated:

+
    +
  • Glowshrooms less bad
  • +
  • Glowshrooms now spread and decay different from before, hopefully preventing the issues they were causing with performance
  • +
+

maxspells, TheBoondock, MrMelbert, nmajask updated:

+
    +
  • added sounds to surgery steps
  • +
  • fixed medical sounds for wounds, rad laser, and PDA health scan
  • +
  • doctors now say "Clear!" during revive surgery
  • +
  • fixed revive surgery saying "shock body" instead of "shock brain"
  • +
+

AlvCyktor updated:

+
    +
  • tweaked deepfryer code
  • +
+

ChesterTheCheesy updated:

+
    +
  • arena shuttle now has a mood bonus
  • +

GalacticRuler updated:

  • replaced unusable frames with usable machine frames in the old cryo room maint-ruin
+

JamieD1 updated:

+
    +
  • Stun batons cannot be turned on for 8 Seconds after being dropped
  • +
  • Scrying orb
  • +
+

LazennG updated:

+
    +
  • Removes cursed stomach from bubblegum's loot and removes morph syringe from gluttony ruin
  • +
+

MajManatee updated:

+
    +
  • Adds a donor item for Skrem, the Rainbow flower.
  • +
+

Marmio64 updated:

+
    +
  • Infiltrator win conditions are stricter, they can also end in a Stalemate if they didn't do very good.
  • +
+

TheRyeGuyWhoWillNowDie updated:

+
    +
  • the security belt in the head of security's locker has been changed to a head of security's security belt
  • +
  • the head of security now has a backpack baton and pocket cuffs/flash again
  • +
  • the head of security no longer starts with a full secbelt again
  • +

ToasterBiome updated:

  • Adds support for map spawned holochips
  • Adds a bunch of tile and tile trims from tg
  • +
  • Removes Jive Accent
  • +
  • Vomit crawling can't crawl between z levels anymore
  • +
+

tattax updated:

+
    +
  • fixes motorized wheelchairs becoming normal ones | powercell now displays its name properly
  • +
  • wheelchairs above 6 speed no longer crash on open turfs like airlocks
  • +
  • motorized wheelchair sprite, little change in the normal wheelchair sprite
  • +
+

ynot01 updated:

+
    +
  • Internal Affairs Agents are now equipped with dusting implants instead of cyanide capsules

12 June 2022

@@ -2107,279 +2565,6 @@

adamsong updated:

  • fixed paper being blank when held to AI camera
- -

29 March 2022

-

SomeguyManperson updated:

-
    -
  • you can now repair cybernetic limbs again without the target having to have a wound
  • -
  • brazil now only kicks out people who aren't supposed to be there instead of people who are
  • -
-

adamsong updated:

-
    -
  • rotatium has added rotating
  • -
  • fixed the possibility of a malf AI not spawning on a malf round
  • -
-

tattax updated:

-
    -
  • fixed a bug that made borgs not unrest people and the message when clicking on a resting person
  • -
- -

28 March 2022

-

adamsong updated:

-
    -
  • Removed player access to edit variables on any apc on station
  • -
-

nmajask updated:

-
    -
  • telescopic batons now have the right sprites again
  • -
- -

27 March 2022

-

Chubbygummibear, Lazzen updated:

-
    -
  • Grand Core organ adds the blooded faction tag instead of replacing your neutral faction
  • -
  • Grand Core organ removes the blooded faction when it's removed from you
  • -
-

Cuackles, Chubbygummibear updated:

-
    -
  • Added raincoat, officer hatsky, and hotdog costume
  • -
  • Sprites added for the clothing
  • -
-

Hopek updated:

-
    -
  • Added a new donator borg skin; DIO L.I.T.E
  • -
  • Added a new donator AI skin; D.I.O
  • -
-

comma updated:

-
    -
  • Crypods, sleepers and bodyscanner pods now make sounds when someone enters/leaves
  • -
-

MrMelbert, Simplehorror updated:

-
    -
  • Add 3 new station traits, Ionic Stormfront (increases Ion Storm chances), Radiation Stormfront (increases Radiation Storm chances), Eventful (decreases time between events),
  • -
-

NovaAzure updated:

-
    -
  • Placing a new bulb into a borg fixes their headlamp
  • -
-

maxion12345, Simplehorror updated:

-
    -
  • Rapid Pipe Dispensers can no longer print transit tubes, disposal pipes or plumbing pipes on turfs containing dense atoms.
  • -
-

Chubbygummibear updated:

-
    -
  • Genetics Hulk and Hulk state have an instability cost to them now
  • -
  • Genetics Hulk and Hulk state work with all races
  • -
  • Genetics Hulk no longer naturally appears through spawns or gene randomizing
  • -
  • Genetics Hulk has to be created through Genetics
  • -
  • Genetics Hulk and Hulk state can both be removed with mutadone
  • -
-

Marmio64 updated:

-
    -
  • Adds wax golem and the ability to transform people into it for the candle sect. Also adds new candle sect and kudzu sect bless effects.
  • -
-

Mqiib updated:

-
    -
  • Makes necroseed work more consistently with species that have weird numbers
  • -
-

Simplehorror updated:

-
    -
  • Luxury shuttle windows now survive RCDs
  • -
  • Fix macros not loading if you join game before SSinput is started
  • -
-

Skrem7 updated:

-
    -
  • Tweaks several quirky lawset ion weights up
  • -
  • Adds a gritty, noir-esqe lawset for those troubled, hard-boiled silicon detectives
  • -
-

SomeguyManperson updated:

-
    -
  • non-welders that act as welders i.e. holotool can now be used to repair cybernetic limbs
  • -
  • preternis can now be placed in cryo to heal oxygen and toxin damage and not get immediately kicked back out
  • -
-

TheGamerdk updated:

-
    -
  • Tweaked visibility of Toggle Download button for malf AIs
  • -
  • AI servers should no longer sporadically fail to add resources
  • -
  • AIs are notified when the console downloading them is consolen't
  • -
  • Malf AIs can no longer initiate the big bad doomsday device after they've died
  • -
  • Added a confirm button to being instantly downloaded
  • -
-

ToasterBiome updated:

-
    -
  • Adds rock hardness
  • -
  • Add PKA mod to increase what hardness rocks you can destroy
  • -
  • Adds plasma magmite
  • -
  • Adds world anvil to necropolis gate
  • -
  • adds hard rocks to lavaland
  • -
  • just read the PR
  • -
  • yogsbox ai sat exterior airlock button has correct id to open correct exterior airlock door
  • -
  • Adds 3 new tumors
  • -
  • Adds 3 new virology symptoms
  • -
  • lets organs be inserted into special funny slots
  • -
-

adamsong updated:

-
    -
  • turned off medbay intercom
  • -
-

maxion12345 updated:

-
    -
  • Added new airlock to secondary datacore
  • -
- -

26 March 2022

-

TheGamerdk updated:

-
    -
  • Fixes issue where you could end up downloading an AI out of an intellicard
  • -
-

ToasterBiome updated:

-
    -
  • plate sprite is now removed from the rest of the filet migrawr frames
  • -
-

adamsong updated:

-
    -
  • fixed mentorwho still including admins after I explicitly told it not to
  • -
- -

25 March 2022

-

Mqiib updated:

-
    -
  • New rare species for powergaming lavalandists: Draconids!
  • -
  • Makes the lizard roll for dragon's blood bottles turn you into a draconid
  • -
  • WARNING: MINING BUFF
  • -
-

SomeguyManperson updated:

-
    -
  • crafted structures now have their own crafting category because having everything in misc only works for so long
  • -
  • extendohand is now in the weapons category
  • -
  • the flashlight eyes are in the robot category
  • -
- -

24 March 2022

-

adamsong updated:

-
    -
  • fixed several vv actions not working
  • -
  • Removed the ability for non-admins to reboot the server
  • -
  • fixed being able to spam admins with pretty filter logs
  • -
  • muted people no longer generate pretty filter logs
  • -
- -

23 March 2022

-

SomeguyManperson updated:

-
    -
  • swarmers are no longer narsie's worst enemy
  • -
- -

21 March 2022

-

Simplehorror updated:

-
    -
  • Fix capitalisation in malf round report
  • -
-

Sniblet updated:

-
    -
  • slightly expanded the tooltip for pass
  • -
-

TheGamerdk updated:

-
    -
  • AI Control Console no longer shows 'G2' no matter which AI you're downloading
  • -
-

maxion12345 updated:

-
    -
  • pool ladders are anchored now
  • -
- -

20 March 2022

-

TheGamerdk updated:

-
    -
  • AI Control Console passwords should no longer sporadically fail
  • -
-

maxion12345 updated:

-
    -
  • RGB project no longer flashes to one color and stops
  • -
- -

19 March 2022

-

00ze-cyclone updated:

-
    -
  • an implant case for the syndie surgery duffel
  • -
  • cheaper syndie surgery duffel
  • -
-

Chubbygummibear updated:

-
    -
  • cooldown on health analyzer beep so medbay isn't constant beeping
  • -
-

MenacingManatee updated:

-
    -
  • Sentient diseases now start with 2 stealth 2 resistance
  • -
-

Skrem7 updated:

-
    -
  • Adds a new druidic lawset focused on cultivating the organics
  • -
-

Sniblet updated:

-
    -
  • climbing things doesn't discourage waggers
  • -
  • felinids can now oppress other species
  • -
-

ToasterBiome updated:

-
    -
  • cyborgs now get an "eject hat" button that will take off their hat and drop it
  • -
  • fixes shitty minesweeper formatting
  • -
-

cuackles updated:

-
    -
  • Added new simple mob (snail)
  • -
  • added some icons and images of said simple mob (snail)
  • -
-

nmajask updated:

-
    -
  • fixed deleting files from disks
  • -
  • TRAC implant now lasts 15 minutes
  • -
  • Detectives now start with a modular PDA
  • -
  • Radar programs now work on PDAs and the implant tracking program now only requires brig access
  • -
  • captain starts with a phone round start
  • -
  • CE's phone starts with a sensor package
  • -
-

zen373 updated:

-
    -
  • Fixes atmos airlock pipes
  • -
- -

18 March 2022

-

ToasterBiome, TheGamerdk updated:

-
    -
  • fixes engine template failing 28% of the time and picking weird weights for engines
  • -
  • legitimizes weird engine weights
  • -
-

Sniblet updated:

-
    -
  • made the code slightly less illiterate
  • -
- -

17 March 2022

-

Identification updated:

-
    -
  • Telescopic batons are now a discernible shape
  • -
-

Chubbygummibear updated:

-
    -
  • Throwing Mjolnier into someone with anti-magic makes it go bye bye in a big boom
  • -
-

ToasterBiome updated:

-
    -
  • removes erroneous admin logging that is not needed
  • -
- -

16 March 2022

-

Marmio64 updated:

-
    -
  • Adds text saying that you can use a lit candle instead of a welder to heat up bowls, substitute cacti for porcini leaves, and that resin uses water now instead of heat to solidify, to the ash walker's knowledge book.
  • -
  • Fixed a typo with poultice making.
  • -
-

adamsong updated:

-
    -
  • fixed bug in dna console sanitization
  • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index ab287290f783..69684fdaabf7 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -32029,11 +32029,358 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: you can now remove embedded objects from dismembered limbs by stabbing them again 2022-06-14: + ' @GalacticRuler, Chubbygummibear': + - bugfix: crayons and spraycans with 1 charge left are no longer infinite for tags + that cost more than 1 charge ' Hopek': - rscadd: Mappers can now created round-start tilted vending machines + ' ghost, ported by TheGamerdk': + - rscadd: Glowshrooms less bad + - rscadd: Glowshrooms now spread and decay different from before, hopefully preventing + the issues they were causing with performance + ' maxspells, TheBoondock, MrMelbert, nmajask': + - soundadd: added sounds to surgery steps + - bugfix: fixed medical sounds for wounds, rad laser, and PDA health scan + - tweak: doctors now say "Clear!" during revive surgery + - spellcheck: fixed revive surgery saying "shock body" instead of "shock brain" + AlvCyktor: + - tweak: tweaked deepfryer code + ChesterTheCheesy: + - tweak: arena shuttle now has a mood bonus GalacticRuler: - bugfix: replaced unusable frames with usable machine frames in the old cryo room maint-ruin + JamieD1: + - rscadd: Stun batons cannot be turned on for 8 Seconds after being dropped + - rscdel: Scrying orb + LazennG: + - rscdel: Removes cursed stomach from bubblegum's loot and removes morph syringe + from gluttony ruin + MajManatee: + - rscadd: Adds a donor item for Skrem, the Rainbow flower. + Marmio64: + - tweak: Infiltrator win conditions are stricter, they can also end in a Stalemate + if they didn't do very good. + TheRyeGuyWhoWillNowDie: + - tweak: the security belt in the head of security's locker has been changed to + a head of security's security belt + - rscadd: the head of security now has a backpack baton and pocket cuffs/flash again + - rscdel: the head of security no longer starts with a full secbelt again ToasterBiome: - rscadd: Adds support for map spawned holochips - rscadd: Adds a bunch of tile and tile trims from tg + - rscdel: Removes Jive Accent + - bugfix: Vomit crawling can't crawl between z levels anymore + tattax: + - bugfix: fixes motorized wheelchairs becoming normal ones | powercell now displays + its name properly + - tweak: wheelchairs above 6 speed no longer crash on open turfs like airlocks + - imageadd: motorized wheelchair sprite, little change in the normal wheelchair + sprite + 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 +2022-06-21: + GalacticRuler: + - tweak: Depleted Uranium Slugs cost 1 less uranium sheet each + - tweak: Depleted Uranium Slugs have 60 ap (down from 200) + - tweak: Depleted Uranium Slugs do 30 damage (down from 35) + - tweak: Depleted Uranium Slugs have a -45 wound mod (down from -30) + GraveHat: + - tweak: Adds in Surgery Duffel and a Medical mask with an Anesthetic tank while + removing the surgery tools on the table, this also means they get a sterilizer + a razor, and an extra surgery mask now + JamieD1: + - rscadd: Batons are now upgradable to be 1 hit stun and can also be equipped with + mindshield firing pins + - tweak: Balances Stimulants - 5 to 8 TC 2 to 3 Uses + - rscadd: 'Adds FTL Advanced Edition Soundtrack: Lanius (Battle) (ABANDONED SECTOR)' + - rscadd: Adds FTL Theme to Lobby Music + Marmio64: + - tweak: extinguishers deal 33% less damage to blazing oil blob strain + Skrem7: + - bugfix: Secbelts and bandoliers can now hold proper number of items + - tweak: Syndie mediborg loses emag and crowbar, gains zipties + - tweak: Syndie saboborg gains combat knife + SomeguyManperson: + - tweak: golem greet text no longer gives conflicting information with certain golem + types by assuming your material + SuperSlayer: + - tweak: Blob now becomes almost unlikable after reaching critical mass + TheRyeGuyWhoWillNowDie: + - rscadd: syndie sabo borgs now have emags + - rscadd: the shotgun slug drums purchasable by nuclear operative have had their + ammo type replaced with syndicate slugs, which do more damage. + - rscadd: syndicate slugs, shotgun slugs that do 60 brute instead of 42. only purchasable + by nuclear operatives + adamsong: + - rscadd: Added horror's host to check antags + alexkar598: + - tweak: Lizards are now cannonically 8 feet tall + nmajask: + - bugfix: fixed ashwalker clothing having missing pixels if worn by a female + - bugfix: fixed footwraps not showing up on the preference menu and being incorrect + when a job outfit is selected by an admin + - bugfix: fixed selecting an outfit for a ghost who had their original body offered + teleporting the wrong player + - bugfix: fixed syringes not embedding + redmoogle: + - rscadd: Brain damage quirk + - bugfix: organ harvester can be rotated now + stwordcitizen: + - bugfix: made simplemob health doll not spawn on top of the stop pulling button + tattax: + - rscadd: you can now hold space bats + - bugfix: bats can now actually see in the dark + - spellcheck: uncapitalized simplemob names + - bugfix: you can no longer mess with inhand mobs + ynot01: + - tweak: gave chemical dispensers more manipulator upgrade tiers +2022-06-22: + MajManatee: + - bugfix: WT mags are now visible again + ynot01: + - tweak: Made the capitalist bible sound much shorter +2022-06-23: + TheRyeGuyWhoWillNowDie: + - spellcheck: cult's twisted construction no longer incorrectly states that it can + convert cyborgs + - experiment: fixes a theos moment +2022-06-24: + LazennG: + - bugfix: fixes knuckles not working right + MajManatee: + - bugfix: Delta now has grounding rods. +2022-06-25: + ToasterBiome: + - bugfix: fixes bad sign and light in yogsbox + - tweak: makes some wires more superior on yogsbox +2022-06-26: + ' Nmajask, IndusRobot, Mothblocks': + - rscadd: Selecting surgeries are now done by a radial menu + - tweak: You can now start surgeries with tools and end surgeries without drapes + - tweak: Surgeries are now quieter + - tweak: You can now see if someone is being operated on when you inspect them + - tweak: Doing a surgery now has a 20% chance to get blood on your tool and 10% + chance to get blood on you + ' SuperSlayer': + - tweak: CNS rebooter implant is no more nukie only + AlvCyktor: + - bugfix: fixed duplicate build path for plate and trays + - tweak: RSF can now print plates + - rscadd: Ding + Arkatos, ported to YogStation by SuperSlayer: + - tweak: Blobbernauts now have a generic living healthdoll and pull icon. + - tweak: Blobbernauts will now show severity of their injuries as a red screen overlay + to the user. + - tweak: Blob core remaining health will now show in percentages and in green color. + This affects both blobbernauts and blob overminds. + - tweak: Blob power is now in orange color for blob overminds. + - tweak: Swarmers now have a generic living healthdoll and pull icon. + - tweak: Swarmers will now show severity of their injuries as a red screen overlay + to the user. + - tweak: Swarmer's abilities now have tooltips to clarify their use upon mouse hover. + Chubbygummibear: + - rscadd: Rune Scimitar causes mobs to drop bonus loot from a loot table on kill + - rscadd: Rune Scimitar gains bonus damage against fauna with each lavaland fauna + slain up to 20, for a total of 100 bonus damage. get out there and grind + - tweak: Rune Scimitar's base force down to 20 + JamieD1: + - bugfix: Disabling Regal Rat till its fixed + - tweak: Shadowlings now cannot get mutations and nerfs speed + MajManatee: + - rscadd: Minigun go BRRRRRRRRRRRRRRRT + - rscadd: Adds a Flechette drum for traitors/nukies + - rscadd: Adds a Hollow-point buckshot drum for traitors/nukies + Mqiib: + - tweak: Krav maga lung punch losebreath reduced by 40% + - tweak: Moves stun immunity of fortitude to level 2. + - tweak: Frenzy state gives stun immunity + - tweak: CQC counter no longer hard stuns + - tweak: Explosive meltdown nanites have a flat 30 second timer now. + - tweak: Explosive meltdown nanites no longer gib you, but still do a buttload of + brute damage. + - tweak: Smashing a bluespace crystal now makes you nauseous and slightly confused + SapphicOverload: + - rscadd: adds winter coats for department heads + - tweak: gives the CE's hardsuit full radiation protection + Skrem7: + - tweak: Mining belts can now hold lazarus injectors and bottles of whiskey + - tweak: Mining belts can no longer hold bone swords + - tweak: Storage on mining webbing and sinewbelt increased + - rscadd: Space Pirates now have a unique uniform which has armor stats equal to + the tactical turtleneck as well as no sensors. + - rscadd: Space Pirate captain now spawns with a Syndicate captain's coat and hat, + which has more robust armor than the standard space pirate gear. + - rscadd: Space Pirate gunner now spawns with a Syndicate pirate hat, having their + own unique uniform. + - rscadd: The pirate bandana now gives the ability to speak pirate, similar to the + pirate and pirate captain's hat. + - tweak: All pirate exosuits can now hold the normal cutlass in addition to the + energy one. Normal exosuits can hold emergency tanks now. + - tweak: The normal and space pirate garb have all been given updated descriptions. + The Syndicate ones have also received new names and different descriptions. + - tweak: FEAR THE (LAVA) SEAS LAND LUBBERS, OUR BLADES HUNGER FOR WHELPLING BLOOD + - tweak: Warden webbing powergaming has been destroyed by secoff financial independence + - tweak: Patches up some weird storage decisions regarding all mining exosuits. + Basically, knives and legion cores of all forms should fit on any mining exosuit + - tweak: Adds bone sword and all bows as options to exosuit slot on goliath, pathfinder, + and drake armors + - tweak: Adds bone spear to drake armor because it had the normal spear only?? + Sniblet: + - tweak: Rollerbeds no longer require plastic + SomeguyManperson: + - bugfix: resonator blasts will no longer stack on top of eachother creating a tile + you cannot step on without breaking your bones that has collectable rocks on + it + - rscadd: 2 ventriloquist dummies are now stocked in autodrobes + TheRyeGuyWhoWillNowDie: + - spellcheck: inspecting the twisted construction spell AKA the hand that appears + after casting the spell will also no longer incorrectly state that it can convert + cyborgs + - tweak: the loose beans in the armory have been placed in boxes. there are also + more of them now. + ToasterBiome: + - rscadd: Adds buttons to preview what higher tier chem dispensers can put out + nmajask: + - bugfix: cryopods should work now + redmoogle: + - rscadd: Admins now have a button to set the beer nuke code + - rscadd: Adds PETA cargo loan + - imageadd: SMES Icon changed slightly + tralezab, ported to Yogstation by SuperSlayer: + - imageadd: a lot of >32x32 mobs now have icons for their health dolls + ynot01: + - tweak: Nanite fake death now has a 4.5 use rate from 3.5 + - tweak: ghost role chemical dispensers are now fully upgraded + - tweak: VR chemical dispensers are now fully upgraded +2022-06-27: + ' actioninja, Ghommie': + - rscadd: Washing machines now support arbitrary dye color + - rscadd: Washing machines now dye nearly every item. + - experiment: lots of backend changes to clothing overlays, report any issues + - imageadd: Different cuffs now come with different worn overlays instead of a generic + one. + adamsong: + - bugfix: fixed ai whale on gax +2022-06-28: + redmoogle: + - bugfix: Hand drill now works as a screwdriver for surgery diff --git a/html/changelogs/AutoChangelog-pr-14559.yml b/html/changelogs/AutoChangelog-pr-14559.yml new file mode 100644 index 000000000000..acca73e1070b --- /dev/null +++ b/html/changelogs/AutoChangelog-pr-14559.yml @@ -0,0 +1,4 @@ +author: "JamieD1" +delete-after: true +changes: + - rscadd: "Research now requires Toxins/Robotics Access and now has Doors" diff --git a/icons/effects/clothing.dmi b/icons/effects/clothing.dmi new file mode 100644 index 000000000000..a01a5471458f Binary files /dev/null and b/icons/effects/clothing.dmi differ diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index aa03f6b641a9..dcd970251cf5 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/misc/surgery_icons.dmi b/icons/misc/surgery_icons.dmi new file mode 100644 index 000000000000..9d2abbf3b180 Binary files /dev/null and b/icons/misc/surgery_icons.dmi differ diff --git a/icons/mob/alien.dmi b/icons/mob/alien.dmi index c50351eef374..21238366f198 100644 Binary files a/icons/mob/alien.dmi and b/icons/mob/alien.dmi differ diff --git a/icons/mob/alienqueen.dmi b/icons/mob/alienqueen.dmi index 115bd17cb0b1..3a7ab277da1b 100644 Binary files a/icons/mob/alienqueen.dmi and b/icons/mob/alienqueen.dmi differ diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index f2ad8f2633dd..b3ffebe94399 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi deleted file mode 100644 index fb98e52df80a..000000000000 Binary files a/icons/mob/belt.dmi and /dev/null differ diff --git a/icons/mob/accessories.dmi b/icons/mob/clothing/accessories.dmi similarity index 100% rename from icons/mob/accessories.dmi rename to icons/mob/clothing/accessories.dmi diff --git a/icons/mob/back.dmi b/icons/mob/clothing/back.dmi similarity index 100% rename from icons/mob/back.dmi rename to icons/mob/clothing/back.dmi diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi new file mode 100644 index 000000000000..79200b629135 Binary files /dev/null and b/icons/mob/clothing/belt.dmi differ diff --git a/icons/mob/ears.dmi b/icons/mob/clothing/ears/ears.dmi similarity index 100% rename from icons/mob/ears.dmi rename to icons/mob/clothing/ears/ears.dmi diff --git a/icons/mob/eyes.dmi b/icons/mob/clothing/eyes/eyes.dmi similarity index 100% rename from icons/mob/eyes.dmi rename to icons/mob/clothing/eyes/eyes.dmi diff --git a/icons/mob/feet.dmi b/icons/mob/clothing/feet/feet.dmi similarity index 100% rename from icons/mob/feet.dmi rename to icons/mob/clothing/feet/feet.dmi diff --git a/icons/mob/clothing/hands/hands.dmi b/icons/mob/clothing/hands/hands.dmi new file mode 100644 index 000000000000..7b0c692a3492 Binary files /dev/null and b/icons/mob/clothing/hands/hands.dmi differ diff --git a/icons/mob/clothing/head/head.dmi b/icons/mob/clothing/head/head.dmi new file mode 100644 index 000000000000..cab2f5225a62 Binary files /dev/null and b/icons/mob/clothing/head/head.dmi differ diff --git a/icons/mob/clothing/id/id.dmi b/icons/mob/clothing/id/id.dmi new file mode 100644 index 000000000000..afaaccef27a9 Binary files /dev/null and b/icons/mob/clothing/id/id.dmi differ diff --git a/icons/mob/mask.dmi b/icons/mob/clothing/mask/mask.dmi similarity index 100% rename from icons/mob/mask.dmi rename to icons/mob/clothing/mask/mask.dmi diff --git a/icons/mob/clothing/neck/neck.dmi b/icons/mob/clothing/neck/neck.dmi new file mode 100644 index 000000000000..817d108ea8ad Binary files /dev/null and b/icons/mob/clothing/neck/neck.dmi differ diff --git a/icons/mob/clothing/neck/sheets.dmi b/icons/mob/clothing/neck/sheets.dmi new file mode 100644 index 000000000000..469a1f209816 Binary files /dev/null and b/icons/mob/clothing/neck/sheets.dmi differ diff --git a/icons/mob/clothing/neck/skillcapes.dmi b/icons/mob/clothing/neck/skillcapes.dmi new file mode 100644 index 000000000000..bb190a24eaf0 Binary files /dev/null and b/icons/mob/clothing/neck/skillcapes.dmi differ diff --git a/icons/mob/clothing/sprite_accessories/socks.dmi b/icons/mob/clothing/sprite_accessories/socks.dmi new file mode 100644 index 000000000000..2b3d0a0b5c89 Binary files /dev/null and b/icons/mob/clothing/sprite_accessories/socks.dmi differ diff --git a/icons/mob/clothing/sprite_accessories/undershirt.dmi b/icons/mob/clothing/sprite_accessories/undershirt.dmi new file mode 100644 index 000000000000..265c33e63591 Binary files /dev/null and b/icons/mob/clothing/sprite_accessories/undershirt.dmi differ diff --git a/icons/mob/clothing/sprite_accessories/underwear.dmi b/icons/mob/clothing/sprite_accessories/underwear.dmi new file mode 100644 index 000000000000..512e9a31503b Binary files /dev/null and b/icons/mob/clothing/sprite_accessories/underwear.dmi differ diff --git a/icons/mob/clothing/suit/suit.dmi b/icons/mob/clothing/suit/suit.dmi new file mode 100644 index 000000000000..9d539e6498ef Binary files /dev/null and b/icons/mob/clothing/suit/suit.dmi differ diff --git a/icons/mob/belt_mirror.dmi b/icons/mob/clothing/suit_storage.dmi similarity index 100% rename from icons/mob/belt_mirror.dmi rename to icons/mob/clothing/suit_storage.dmi diff --git a/icons/mob/uniform.dmi b/icons/mob/clothing/uniform/uniform.dmi similarity index 99% rename from icons/mob/uniform.dmi rename to icons/mob/clothing/uniform/uniform.dmi index d98321f574e3..ff5d7802e347 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/clothing/uniform/uniform.dmi differ diff --git a/icons/mob/hands.dmi b/icons/mob/hands.dmi deleted file mode 100644 index b9f27f2ed0e3..000000000000 Binary files a/icons/mob/hands.dmi and /dev/null differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi deleted file mode 100644 index 72f527e226c5..000000000000 Binary files a/icons/mob/head.dmi and /dev/null differ diff --git a/icons/mob/inhands/clothing_lefthand.dmi b/icons/mob/inhands/clothing_lefthand.dmi index 723fc4c19c48..13cdd51cec54 100644 Binary files a/icons/mob/inhands/clothing_lefthand.dmi and b/icons/mob/inhands/clothing_lefthand.dmi differ diff --git a/icons/mob/inhands/clothing_righthand.dmi b/icons/mob/inhands/clothing_righthand.dmi index 6c89fcbbd31b..eb408d4108fa 100644 Binary files a/icons/mob/inhands/clothing_righthand.dmi and b/icons/mob/inhands/clothing_righthand.dmi differ 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/inhands/equipment/security_lefthand.dmi b/icons/mob/inhands/equipment/security_lefthand.dmi index 6ccdfba3fce4..e669626e38f7 100644 Binary files a/icons/mob/inhands/equipment/security_lefthand.dmi and b/icons/mob/inhands/equipment/security_lefthand.dmi differ diff --git a/icons/mob/inhands/equipment/security_righthand.dmi b/icons/mob/inhands/equipment/security_righthand.dmi index e3f930a13e8f..8963ae53b440 100644 Binary files a/icons/mob/inhands/equipment/security_righthand.dmi and b/icons/mob/inhands/equipment/security_righthand.dmi differ diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index 3f1756ca8c37..22c6ca201f4d 100644 Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ diff --git a/icons/mob/pets_held_lh.dmi b/icons/mob/pets_held_lh.dmi index 06d7bfc58f8b..0f6a2d861b75 100644 Binary files a/icons/mob/pets_held_lh.dmi and b/icons/mob/pets_held_lh.dmi differ diff --git a/icons/mob/pets_held_rh.dmi b/icons/mob/pets_held_rh.dmi index 6d6b8f45f742..a015d0442595 100644 Binary files a/icons/mob/pets_held_rh.dmi and b/icons/mob/pets_held_rh.dmi differ diff --git a/icons/mob/restraints.dmi b/icons/mob/restraints.dmi new file mode 100644 index 000000000000..6e22ac1d58d1 Binary files /dev/null and b/icons/mob/restraints.dmi 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/mob/screen_gen.dmi b/icons/mob/screen_gen.dmi index 2651ee655c55..feee6f67857e 100644 Binary files a/icons/mob/screen_gen.dmi and b/icons/mob/screen_gen.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi deleted file mode 100644 index f65429117272..000000000000 Binary files a/icons/mob/suit.dmi and /dev/null differ diff --git a/icons/mob/underwear.dmi b/icons/mob/underwear.dmi deleted file mode 100644 index c08805567f2f..000000000000 Binary files a/icons/mob/underwear.dmi and /dev/null differ diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index 7324b1d28f31..b55e42efc50f 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index d7e864f616b3..c499921d8609 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 2c8abfd76d42..7b9b4b3002b2 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 1cf575f0ab5b..6f3ef5f97f91 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.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/handcuffs.dmi b/icons/obj/handcuffs.dmi index c388098bf3fd..b3abdb722bc3 100644 Binary files a/icons/obj/handcuffs.dmi and b/icons/obj/handcuffs.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/icons/obj/machines/harvester.dmi b/icons/obj/machines/harvester.dmi index d6d9b01fc624..a5f2f4e184d2 100644 Binary files a/icons/obj/machines/harvester.dmi and b/icons/obj/machines/harvester.dmi differ diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi index b69b75323003..b4c58f12e9c8 100644 Binary files a/icons/obj/power.dmi and b/icons/obj/power.dmi differ diff --git a/icons/obj/vehicles.dmi b/icons/obj/vehicles.dmi index c14c3cc25c87..34f5a363f7b0 100644 Binary files a/icons/obj/vehicles.dmi and b/icons/obj/vehicles.dmi differ diff --git a/sound/items/tape_flip.ogg b/sound/items/tape_flip.ogg new file mode 100644 index 000000000000..fae3e07373c5 Binary files /dev/null and b/sound/items/tape_flip.ogg differ diff --git a/sound/items/taperecorder_close.ogg b/sound/items/taperecorder_close.ogg new file mode 100644 index 000000000000..ab9f521c5f9f Binary files /dev/null and b/sound/items/taperecorder_close.ogg differ diff --git a/sound/misc/capitialism-short.ogg b/sound/misc/capitialism-short.ogg new file mode 100644 index 000000000000..044617c59cd6 Binary files /dev/null and b/sound/misc/capitialism-short.ogg differ diff --git a/sound/surgery/cautery1.ogg b/sound/surgery/cautery1.ogg new file mode 100644 index 000000000000..ac15a5812666 Binary files /dev/null and b/sound/surgery/cautery1.ogg differ diff --git a/sound/surgery/cautery2.ogg b/sound/surgery/cautery2.ogg new file mode 100644 index 000000000000..334c98f6cde4 Binary files /dev/null and b/sound/surgery/cautery2.ogg differ diff --git a/sound/surgery/hemostat1.ogg b/sound/surgery/hemostat1.ogg new file mode 100644 index 000000000000..d68c82620d2a Binary files /dev/null and b/sound/surgery/hemostat1.ogg differ diff --git a/sound/surgery/organ1.ogg b/sound/surgery/organ1.ogg new file mode 100644 index 000000000000..d6cdd6271fe3 Binary files /dev/null and b/sound/surgery/organ1.ogg differ diff --git a/sound/surgery/organ2.ogg b/sound/surgery/organ2.ogg new file mode 100644 index 000000000000..9199c7d1a2db Binary files /dev/null and b/sound/surgery/organ2.ogg differ diff --git a/sound/surgery/retractor1.ogg b/sound/surgery/retractor1.ogg new file mode 100644 index 000000000000..de7c31199e3c Binary files /dev/null and b/sound/surgery/retractor1.ogg differ diff --git a/sound/surgery/retractor2.ogg b/sound/surgery/retractor2.ogg new file mode 100644 index 000000000000..620fafe035d8 Binary files /dev/null and b/sound/surgery/retractor2.ogg differ diff --git a/sound/surgery/saw.ogg b/sound/surgery/saw.ogg new file mode 100644 index 000000000000..8e7a47f0fa06 Binary files /dev/null and b/sound/surgery/saw.ogg differ diff --git a/sound/surgery/scalpel1.ogg b/sound/surgery/scalpel1.ogg new file mode 100644 index 000000000000..6c0fe5dad9fe Binary files /dev/null and b/sound/surgery/scalpel1.ogg differ diff --git a/sound/surgery/scalpel2.ogg b/sound/surgery/scalpel2.ogg new file mode 100644 index 000000000000..497672239393 Binary files /dev/null and b/sound/surgery/scalpel2.ogg differ diff --git a/strings/accents/accent_jive.json b/strings/accents/accent_jive.json deleted file mode 100644 index 780ce30ae1ba..000000000000 --- a/strings/accents/accent_jive.json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "Jive": { - "\bDirector\b": "Directo'", - "\bStation\b": "Stashun", - "\bDoctor\b": "Docto'", - "\bJanitor\b": "Janito'", - "\bCurator\b": "Curato'", - "\bCyborg\b": "Cybo'g", - "\btraitor\b": "traito'", - "\bchangeling\b": "changelin'", - "\bOperative\b": "Opuh'ative", - "\bClockwork\b": "Clockwo'k", - "\bRevolution\b": "Revolushun", - "\bShadowling\b": "Shadowlin'", - "\bling\b": "lin'", - "\bsling\b": "slin'", - "\bbrothers\b": "broders", - "\bxenomorph\b": "xenomo'ph", - "\bMorph\b": "Mo'ph", - "\bAbductor\b": "Abducto'", - "\bDeath\b": "Dead", - "\bthe\b": "de", - "\byou\b": "ya'", - "\bthat\b": "dat", - "\bwas\b": "wuz", - "\bfor\b": "fo'", - "\bwith\b": "wid", - "\bthey\b": "dey", - "\bhave\b": "gotss'", - "\bthis\b": "dis", - "\bor\b": "o'", - "\bword\b": "wo'd", - "\bwhat\b": "whut", - "\bother\b": "oder", - "\bthere\b": "dere", - "\bup\b": "waaay down", - "\byour\b": "yo'", - "\btheir\b": "deir", - "\bwill\b": "gotss'ta", - "\bthen\b": "den", - "\bthem\b": "dem", - "\bwrite\b": "scribble", - "\blike\b": "likes", - "\bthese\b": "dese", - "\bthing\b": "din'", - "\bmore\b": "mo'e", - "\bpeople\b": "sucka's", - "\bwater\b": "booze", - "\bthan\b": "dan", - "\bfirst\b": "fust", - "\bdown\b": "waaay down", - "\bwork\b": "wo'k", - "\btake\b": "snatch", - "\bgood\b": "baaaad", - "\bname\b": "dojigger", - "\bthrough\b": "drough", - "\bform\b": "fo'm", - "\bthink\b": "dink", - "\bbefore\b": "befo'e", - "\bdoes\b": "duz", - "\bthree\b": "dree", - "\bwant\b": "wants'", - "\bwell\b": "sheeit", - "\bsmall\b": "little-ass", - "\bport\b": "po't", - "\bbig\b": "big-ass", - "\bmother\b": "moder", - "\bworld\b": "wo'ld", - "\bearth\b": "eard", - "\bfather\b": "fader", - "\bhead\b": "'haid", - "\bschool\b": "farm", - "\bfour\b": "foe", - "\bthought\b": "dought", - "\bstory\b": "sto'y", - "\bdon't\b": "duzn't", - "\bnorth\b": "no'd", - "\btogether\b": "togeder", - "\bwhite\b": "honky", - "\bgot\b": "gots", - "\bpaper\b": "papuh'", - "\bmusic\b": "beat", - "\bthose\b": "dose", - "\bboth\b": "bod", - "\bbook\b": "scribblin'", - "\bfriend\b": "homey", - "\bhorse\b": "ho'se", - "\bsure\b": "sho' nuff", - "\bcolor\b": "colo'", - "\bgirl\b": "goat", - "\byoung\b": "yung", - "\bthough\b": "dough", - "\btalk\b": "rap", - "\bmeasure\b": "measho' nuff", - "\bdoor\b": "doo'", - "\bshort\b": "sho't", - "\bquestion\b": "quesshun", - "\border\b": "o'der", - "\bsouth\b": "soud", - "\bknew\b": "knowed", - "\bking\b": "kin'", - "\bduring\b": "durin'", - "\bsing\b": "sin'", - "\bmorning\b": "mo'nin'", - "\bperson\b": "sucka'", - "\bmoney\b": "bre'd", - "\bcorrect\b": "co'rect", - "\bdrive\b": "roll", - "\bnothing\b": "nodin'", - "\bforce\b": "fo'ce", - "\brecord\b": "reco'd", - "\bthousand\b": "dousand", - "\bbring\b": "brin'", - "\bposition\b": "posishun", - "\bperhaps\b": "puh'haps", - "\blength\b": "lengd", - "\bbrother\b": "broder", - "\bfraction\b": "fracshun", - "\bforest\b": "fo'est", - "\bstore\b": "sto'e", - "\bboard\b": "bo'd", - "\bweather\b": "weader", - "\bmonth\b": "mond", - "\bclothe\b": "clode", - "\bmetal\b": "meta-fuckin'l", - "\bwhether\b": "wheder", - "\bthird\b": "dird", - "\bhair\b": "fro", - "\bfloor\b": "floo'", - "\beither\b": "eider", - "\btemperature\b": "tempuh'ature", - "\bfinger\b": "fin'er", - "\bbeat\b": "whup'", - "\bspring\b": "sprin'", - "\bnation\b": "nashun", - "\bdictionary\b": "dicshunary", - "\bmethod\b": "medod", - "\borgan\b": "o'gan", - "\bsection\b": "secshun", - "\bpoor\b": "poo'", - "\bexperiment\b": "'spuh'iment", - "\bsingle\b": "sin'le", - "\bmouth\b": "moud", - "\bbreak\b": "boogie", - "\bbad\b": "bad-ass", - "\bwoman\b": "honky chick", - "\bdoctor\b": "docto'", - "\bring\b": "rin'", - "\bperiod\b": "puh'iod", - "\bhistory\b": "histo'y", - "\bexpect\b": "'spect", - "\bcorner\b": "co'ner", - "\bthus\b": "dus", - "\bchair\b": "cfro", - "\bthick\b": "dick", - "\boperate\b": "opuh'ate", - "\bwing\b": "win'", - "\bneighbor\b": "neighbo'", - "\bwash\b": "wuzh", - "\brather\b": "rader", - "\bcorn\b": "co'n", - "\bstring\b": "strin'", - "\bthin\b": "din", - "\bmajor\b": "majo'", - "\bsend\b": "t'row", - "\bdead\b": "wuzted", - "\bwife\b": "mama", - "\bborn\b": "bo'n", - "\bgather\b": "gader", - "\bthrow\b": "drow", - "\bproperty\b": "propuh'ty", - "\bdeath\b": "wuzted", - "\bwomen\b": "honky chicks", - "\bsolution\b": "solushun", - "\bthank\b": "dank", - "\bforward\b": "fo'ward", - "\bexperience\b": "'spuh'ience", - "\bscore\b": "sco'e", - "\bevening\b": "evenin'", - "\bcondition\b": "condishun", - "\bnor\b": "no'", - "\bshore\b": "sho'e", - "\bfavor\b": "favo'", - "\bchord\b": "cho'd", - "\boriginal\b": "o'iginal", - "\bstation\b": "stashun", - "\bproper\b": "propuh'", - "\bsupport\b": "suppo't", - "\bmotion\b": "moshun", - "\bpath\b": "pad", - "\bteeth\b": "teed" - } -} \ No newline at end of file diff --git a/strings/accents/accents.json b/strings/accents/accents.json index 779a7f584081..7d4cdfdbb0ed 100644 --- a/strings/accents/accents.json +++ b/strings/accents/accents.json @@ -7,7 +7,6 @@ "Heavy French": "accent_french.json", "Kraut": "accent_kraut.json", "German": "accent_germanlight.json", - "Jive": "accent_jive.json", "Old English": "accent_oldenglish.json", "Ork": "accent_ork.json", "Pirate": "accent_pirate.json", @@ -21,4 +20,4 @@ "Valley": "accent_valspeak.json", "Skaven": "accent_skaven.json" } -} \ No newline at end of file +} diff --git a/tgui/packages/tgui/interfaces/ChemDispenser.js b/tgui/packages/tgui/interfaces/ChemDispenser.js index f266691fc192..faac2ed337d8 100644 --- a/tgui/packages/tgui/interfaces/ChemDispenser.js +++ b/tgui/packages/tgui/interfaces/ChemDispenser.js @@ -70,6 +70,8 @@ export const ChemDispenser = (props, context) => { width="129.5px" lineHeight={1.75} content={chemical.title} + disabled={chemical.locked} + tooltip={chemical.locked ? "Requires T" + chemical.tier + " manipulator!" : ""} onClick={() => act('dispense', { reagent: chemical.id, })} /> @@ -101,14 +103,14 @@ export const ChemDispenser = (props, context) => { {recording && 'Virtual beaker' || data.isBeakerLoaded - && ( - - - /{data.beakerMaxVolume} units - - ) + && ( + + + /{data.beakerMaxVolume} units + + ) || 'No beaker'} LIGHT_DAM_THRESHOLD) C.remove_movespeed_modifier(id) else - C.add_movespeed_modifier(id, update=TRUE, priority=100, multiplicative_slowdown=-2, blacklisted_movetypes=(FLYING|FLOATING)) + C.add_movespeed_modifier(id, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING)) /datum/species/shadow/ling/lesser //Empowered thralls. Obvious, but powerful diff --git a/yogstation/code/game/gamemodes/vampire/vampire_other.dm b/yogstation/code/game/gamemodes/vampire/vampire_other.dm index 88783818d3c8..65549012fb63 100644 --- a/yogstation/code/game/gamemodes/vampire/vampire_other.dm +++ b/yogstation/code/game/gamemodes/vampire/vampire_other.dm @@ -7,7 +7,7 @@ /obj/item/clothing/suit/draculacoat name = "Vampire Coat" desc = "What is a man? A miserable little pile of secrets." - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' icon_state = "draculacoat" item_state = "draculacoat" diff --git a/yogstation/code/game/objects/effects/landmarks.dm b/yogstation/code/game/objects/effects/landmarks.dm index c2ce36c60110..4a40f32984d2 100644 --- a/yogstation/code/game/objects/effects/landmarks.dm +++ b/yogstation/code/game/objects/effects/landmarks.dm @@ -166,9 +166,28 @@ GLOBAL_LIST_EMPTY(chosen_station_templates) template_names = list("Maint aquarium", "Maint bigconstruction", "Maint bigtheatre", "Maint deltalibrary", "Maint graffitiroom", "Maint junction", "Maint podrepairbay", "Maint pubbybar", "Maint roosterdome", "Maint sanitarium", "Maint snakefighter", "Maint vault", "Maint ward", "Maint assaultpod", "Maint maze", "Maint maze2", "Maint boxfactory", "Maint sixsectorsdown", "Maint advbotany", "Maint beach", "Maint botany_apiary", "Maint gamercave", "Maint ladytesla_altar", "Maint olddiner", "Maint smallmagician", "Maint fourshops") -/obj/effect/landmark/stationroom/gax/ai_whale - unique = TRUE - template_names = list("AI Whale",EMPTY_SPAWN,EMPTY_SPAWN,EMPTY_SPAWN) +/// Type of landmark that find all others of the same type, and only spawns count number of ruins at them +/obj/effect/landmark/stationroom/limited_spawn + var/choose_result = "" + var/count = 1 + +/obj/effect/landmark/stationroom/limited_spawn/choose() + if(choose_result != "") + return choose_result + var/list/landmarks = list() + for(var/obj/effect/landmark/stationroom/limited_spawn/L in GLOB.stationroom_landmarks) + if(L.type == src.type) + landmarks |= L + + for(var/i = 0, i < count, i++) + var/obj/effect/landmark/stationroom/limited_spawn/L = pick_n_take(landmarks) + L.choose_result = pick(L.template_names) + + for(var/obj/effect/landmark/stationroom/limited_spawn/L in landmarks) + L.choose_result = EMPTY_SPAWN + +/obj/effect/landmark/stationroom/limited_spawn/gax/ai_whale + template_names = list("AI Whale") /obj/effect/landmark/start/infiltrator name = "infiltrator" 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/game/objects/items/melee/energy.dm b/yogstation/code/game/objects/items/melee/energy.dm index 82ccb8476dc1..43adcdf8c2bb 100644 --- a/yogstation/code/game/objects/items/melee/energy.dm +++ b/yogstation/code/game/objects/items/melee/energy.dm @@ -3,7 +3,7 @@ var/color = input(user, "Select a color!", "Esword color") as null|anything in list("red", "green", "blue", "purple", "rainbow") if(!color) return - item_color = color + saber_color = color if(active) icon_state = "sword[color]" @@ -21,4 +21,4 @@ return ..() return ..() else - return 0 \ No newline at end of file + return 0 diff --git a/yogstation/code/game/objects/items/storage/backpack.dm b/yogstation/code/game/objects/items/storage/backpack.dm index a0d47ba00df4..f14d5d7b417f 100644 --- a/yogstation/code/game/objects/items/storage/backpack.dm +++ b/yogstation/code/game/objects/items/storage/backpack.dm @@ -8,8 +8,8 @@ /obj/item/storage/backpack/holding/build_worn_icon(var/state = "", var/default_layer = 0, var/default_icon_file = null, var/isinhands = FALSE, var/femaleuniform = NO_FEMALE_UNIFORM) state = item_state - if(default_icon_file == 'icons/mob/head.dmi') - default_icon_file = 'yogstation/icons/mob/head.dmi' // thats a fun dilemma.... how to keep the tg sprites when doing back but do yogs sprites when worn on head. + if(default_icon_file == 'icons/mob/clothing/head/head.dmi') + default_icon_file = 'yogstation/icons/mob/clothing/head/head.dmi' // thats a fun dilemma.... how to keep the tg sprites when doing back but do yogs sprites when worn on head. return ..() /obj/item/storage/backpack/holding/attackby(obj/item/W, mob/living/user) @@ -183,7 +183,7 @@ name = "snail shell" desc = "You wonder who this came from." icon = 'yogstation/icons/obj/storage.dmi' - alternate_worn_icon = 'yogstation/icons/mob/back.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/back.dmi' item_state = "snail_green" icon_state = "snail_green" slowdown = 1 @@ -199,7 +199,7 @@ name = "green shell backpack" desc = "An emerald-green snail shell converted into a backpack. Still smells of salt." icon = 'yogstation/icons/obj/storage.dmi' - alternate_worn_icon = 'yogstation/icons/mob/back.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/back.dmi' item_state = "snail_green" icon_state = "snail_green" @@ -207,7 +207,7 @@ name = "banana backpack" desc = "Is it a backpack made of bananas or a backpack with a banana texture? The world may never know." icon = 'yogstation/icons/obj/storage.dmi' - alternate_worn_icon = 'yogstation/icons/mob/back.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/back.dmi' icon_state = "bananabackpack" item_state = "bananabackpack" @@ -215,7 +215,7 @@ name = "clown face backpack" desc = "Sometimes there are some things better left off not existing, this is one of them." icon = 'yogstation/icons/obj/storage.dmi' - alternate_worn_icon = 'yogstation/icons/mob/back.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/back.dmi' icon_state = "clownfacebackpack" item_state = "clownfacebackpack" diff --git a/yogstation/code/game/objects/items/tools.dm b/yogstation/code/game/objects/items/tools.dm index 5e803159f957..3c02f7f7d4cb 100644 --- a/yogstation/code/game/objects/items/tools.dm +++ b/yogstation/code/game/objects/items/tools.dm @@ -99,6 +99,7 @@ usesound = 'sound/items/drill_use.ogg' toolspeed = 0.7 tool_behaviour = TOOL_SCREWDRIVER + sharpness = SHARP_POINTY /obj/item/handdrill/attack_self(mob/user) if (tool_behaviour == TOOL_SCREWDRIVER) @@ -114,6 +115,7 @@ desc = "A simple powered hand drill. It's fitted with a bolt bit." icon_state = "drill_bolt" tool_behaviour = TOOL_WRENCH + sharpness = SHARP_NONE playsound(get_turf(user),'sound/items/change_drill.ogg',50,1) if (iscyborg(user)) to_chat(user,span_notice("Your servos whirr as the drill reconfigures into bolt mode.")) @@ -125,6 +127,7 @@ desc = "A simple powered hand drill. It's fitted with a screw bit." icon_state = "drill_screw" tool_behaviour = TOOL_SCREWDRIVER + sharpness = SHARP_POINTY playsound(get_turf(user),'sound/items/change_drill.ogg',50,1) if (iscyborg(user)) to_chat(user,span_notice("Your servos whirr as the drill reconfigures into screw mode.")) diff --git a/yogstation/code/game/objects/structures/bedsheet_bin.dm b/yogstation/code/game/objects/structures/bedsheet_bin.dm index 7020a40681fd..8a9b585345d5 100644 --- a/yogstation/code/game/objects/structures/bedsheet_bin.dm +++ b/yogstation/code/game/objects/structures/bedsheet_bin.dm @@ -9,9 +9,8 @@ LINEN BINS //The description is a reference to the Medical Blanket's description. desc = "It's a very unsterile blanket used in Virology, covered in pathogens of all sorts. You probably shouldn't wear this one." icon = 'yogstation/icons/obj/bedsheets.dmi' - alternate_worn_icon = 'yogstation/icons/mob/neck.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/neck/neck.dmi' icon_state = "sheetvirology" - item_color = "virologywhite" dream_messages = list("plague", "green", "sneezing", "a virologist") newbedpath = null @@ -19,7 +18,6 @@ LINEN BINS name = "prisoner's blanket" desc = "An old, heavy-duty, Nanotrasen-issue prison bedsheet. You try not to think about where those stains came from..." icon = 'yogstation/icons/obj/bedsheets.dmi' - alternate_worn_icon = 'yogstation/icons/mob/neck.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/neck/neck.dmi' icon_state = "sheetprisoner" - item_color = "prisoner" - dream_messages = list("a prison cell", "orange", "a warden", "filth", "captivity", "shackles", "misconduct", "depravity") \ No newline at end of file + dream_messages = list("a prison cell", "orange", "a warden", "filth", "captivity", "shackles", "misconduct", "depravity") 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/antagonists/infiltrator/items/hardsuit.dm b/yogstation/code/modules/antagonists/infiltrator/items/hardsuit.dm index 92a611bfbe09..a5c0a8780c40 100644 --- a/yogstation/code/modules/antagonists/infiltrator/items/hardsuit.dm +++ b/yogstation/code/modules/antagonists/infiltrator/items/hardsuit.dm @@ -2,7 +2,6 @@ name = "engineering hardsuit helmet" icon_state = "hardsuit0-engineering" item_state = "eng_helm" - item_color = "engineering" armor = list(MELEE = 35, BULLET = 15, LASER = 30,ENERGY = 10, BOMB = 10, BIO = 100, RAD = 50, FIRE = 75, ACID = 75) syndicate = TRUE diff --git a/yogstation/code/modules/antagonists/infiltrator/team.dm b/yogstation/code/modules/antagonists/infiltrator/team.dm index 3a7ac9fb1179..4365ee64e1a3 100644 --- a/yogstation/code/modules/antagonists/infiltrator/team.dm +++ b/yogstation/code/modules/antagonists/infiltrator/team.dm @@ -52,11 +52,11 @@ if (INFILTRATION_SOMECOMPLETE) var/static/list/messages = list( "Better than a complete fluke, I guess.", - "Nowhere near the smoothest operation I've ever seen, but it was okay.", - "We did it, but we didn't get everything. We'll get it next time." + "I'm going to have to pull some strings to make sure we don't get a pay cut for sub-par preformance.", + "I suppose it wasn't a complete waste of time at least..." ) - parts += span_marooned(span_big("Infiltrator Minor Victory")) - parts += span_bold("The Syndicate infiltrators completed some of their objectives successfully!") + parts += span_marooned(span_big("Neutral victory")) + parts += span_bold("The Syndicate infiltrators completed some of their objectives, but not enough to win.") flavor_message = pick(messages) else var/static/list/messages = list( @@ -151,11 +151,11 @@ else objectives_failed++ - if(objectives_failed == 0 && objectives_complete > 0) + if(objectives_failed == 0 && objectives_complete > 0) //Complete all, and fail none, big win! return INFILTRATION_ALLCOMPLETE - else if (objectives_complete > objectives_failed) + else if (objectives_failed == 1 && objectives_complete > 0) // Fail one, but complete the rest, still pretty good! return INFILTRATION_MOSTCOMPLETE - else if((objectives_complete == objectives_failed) || (objectives_complete > 0 && objectives_failed > objectives_complete)) + else if((objectives_complete == objectives_failed) || (objectives_complete > 0 && objectives_failed > objectives_complete)) //Fail almost all of them, not very good... return INFILTRATION_SOMECOMPLETE else - return INFILTRATION_NONECOMPLETE + return INFILTRATION_NONECOMPLETE //You completely failed, you suck. diff --git a/yogstation/code/modules/antagonists/shadowling/shadowling_items.dm b/yogstation/code/modules/antagonists/shadowling/shadowling_items.dm index 96538f5b745a..5e0ac3598af2 100644 --- a/yogstation/code/modules/antagonists/shadowling/shadowling_items.dm +++ b/yogstation/code/modules/antagonists/shadowling/shadowling_items.dm @@ -1,7 +1,7 @@ /obj/item/clothing/suit/space/shadowling name = "chitin shell" desc = "A dark, semi-transparent shell. Protects against vacuum, but not against the light of the stars." //Still takes damage from spacewalking but is immune to space itself - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' icon_state = "sl_shell" item_state = "sl_shell" @@ -24,7 +24,7 @@ /obj/item/clothing/head/shadowling name = "chitin helm" desc = "A helmet-like enclosure of the head." - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/hats.dmi' icon_state = "sl_head" item_state = "sl_head" diff --git a/yogstation/code/modules/antagonists/shadowling/special_shadowling_abilities.dm b/yogstation/code/modules/antagonists/shadowling/special_shadowling_abilities.dm index 084a144b1abd..9d9093166253 100644 --- a/yogstation/code/modules/antagonists/shadowling/special_shadowling_abilities.dm +++ b/yogstation/code/modules/antagonists/shadowling/special_shadowling_abilities.dm @@ -97,6 +97,7 @@ H.equip_to_slot_or_del(new /obj/item/clothing/suit/space/shadowling(H), SLOT_WEAR_SUIT) H.equip_to_slot_or_del(new /obj/item/clothing/head/shadowling(H), SLOT_HEAD) H.set_species(/datum/species/shadow/ling) //can't be a shadowling without being a shadowling + H.dna.remove_all_mutations(list(MUT_NORMAL, MUT_EXTRA), TRUE) H.mind.RemoveSpell(src) if(!do_mob(H,H,10,1)) return diff --git a/yogstation/code/modules/clothing/clothing.dm b/yogstation/code/modules/clothing/clothing.dm index f0743536ebca..c8a3cc879d86 100644 --- a/yogstation/code/modules/clothing/clothing.dm +++ b/yogstation/code/modules/clothing/clothing.dm @@ -1,48 +1,48 @@ /obj/item/clothing/ears/yogs - alternate_worn_icon = 'yogstation/icons/mob/ears.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/ears/ears.dmi' icon = 'yogstation/icons/obj/clothing/ears.dmi' /obj/item/clothing/glasses/yogs - alternate_worn_icon = 'yogstation/icons/mob/eyes.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/eyes/eyes.dmi' icon = 'yogstation/icons/obj/clothing/glasses.dmi' /obj/item/clothing/gloves/yogs - alternate_worn_icon = 'yogstation/icons/mob/hands.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/hands/hands.dmi' icon = 'yogstation/icons/obj/clothing/gloves.dmi' /obj/item/clothing/head/yogs - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon = 'yogstation/icons/obj/clothing/hats.dmi' /obj/item/clothing/neck/yogs - alternate_worn_icon = 'yogstation/icons/mob/neck.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/neck/neck.dmi' icon = 'yogstation/icons/obj/clothing/neck.dmi' /obj/item/clothing/mask/yogs - alternate_worn_icon = 'yogstation/icons/mob/mask.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/mask/mask.dmi' icon = 'yogstation/icons/obj/clothing/masks.dmi' /obj/item var/list/alternate_screams = list() /obj/item/clothing/shoes/yogs - alternate_worn_icon = 'yogstation/icons/mob/feet.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/feet/feet.dmi' icon = 'yogstation/icons/obj/clothing/shoes.dmi' /obj/item/clothing/suit/yogs - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' /obj/item/clothing/under/yogs - alternate_worn_icon = 'yogstation/icons/mob/uniform.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/uniform/uniform.dmi' icon = 'yogstation/icons/obj/clothing/uniforms.dmi' /obj/item/clothing/back/yogs - alternate_worn_icon = 'yogstation/icons/mob/back.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/back.dmi' icon = 'yogstation/icons/obj/clothing/back.dmi' /obj/item/storage/belt/yogs - alternate_worn_icon = 'yogstation/icons/mob/belt.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/belt.dmi' icon = 'yogstation/icons/obj/clothing/belts.dmi' /obj/item/clothing/torncloth diff --git a/yogstation/code/modules/clothing/fishing.dm b/yogstation/code/modules/clothing/fishing.dm index 6f67c4ce613a..c695fc89130e 100644 --- a/yogstation/code/modules/clothing/fishing.dm +++ b/yogstation/code/modules/clothing/fishing.dm @@ -3,10 +3,10 @@ desc = "She said she's down to fish!" icon_state = "fishing_cap" item_state = "fishing_cap" - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/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) @@ -15,7 +15,7 @@ desc = "As she banging my line, she wastin my time." icon_state = "fishing_vest" item_state = "fishing_vest" - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' /obj/item/clothing/suit/fishing/Initialize() @@ -27,7 +27,7 @@ desc = "Packin my tackle box down by the brook." icon_state = "fishing_gloves" item_state = "fishing_gloves" - alternate_worn_icon = 'yogstation/icons/mob/hands.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/hands/hands.dmi' icon = 'yogstation/icons/obj/clothing/gloves.dmi' /obj/item/clothing/gloves/fishing/Initialize() @@ -39,7 +39,7 @@ desc = "We livin' the life, if we ain't going fishing then don't waste my time." icon_state = "fishing_sandals" item_state = "fishing_sandals" - alternate_worn_icon = 'yogstation/icons/mob/feet.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/feet/feet.dmi' icon = 'yogstation/icons/obj/clothing/shoes.dmi' /obj/item/clothing/shoes/fishing/Initialize() diff --git a/yogstation/code/modules/clothing/head.dm b/yogstation/code/modules/clothing/head.dm index beb535d073f6..a640060b48e8 100644 --- a/yogstation/code/modules/clothing/head.dm +++ b/yogstation/code/modules/clothing/head.dm @@ -44,7 +44,7 @@ name = "nam helmet" desc = "An ancient war helmet that is perfect for protecting your noggin from greytide clobberin'!" icon = 'yogstation/icons/obj/clothing/hats.dmi' - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon_state = "namhelm" item_state = "namhelm" @@ -118,7 +118,7 @@ name = "war helmet" desc = "Get ready boys, we are going to war!" icon = 'yogstation/icons/obj/clothing/hats.dmi' - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon_state = "kr_helm" item_state = "kr_helm" @@ -144,7 +144,7 @@ name = "corporate warden beret" desc = "A special black beret with a warden's insignia in the middle. This one is commonly worn by wardens of the corporation." icon = 'yogstation/icons/obj/clothing/hats.dmi' - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon_state = "beret_corporate_warden" armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0, fire = 30, acid = 60) strip_delay = 60 @@ -153,7 +153,7 @@ name = "corporate security beret" desc = "A special black beret for the mundane life of a corporate security officer." icon = 'yogstation/icons/obj/clothing/hats.dmi' - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon_state = "beret_corporate_officer" armor = list(melee = 40, bullet = 30, laser = 30,energy = 10, bomb = 25, bio = 0, rad = 0, fire = 20, acid = 50) strip_delay = 60 @@ -162,7 +162,7 @@ name = "engineering beret" desc = "A beret with the engineering insignia emblazoned on it. For engineers that are more inclined towards style than safety." icon = 'yogstation/icons/obj/clothing/hats.dmi' - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon_state = "beret_engineering" armor = list(rad = 10, fire = 10) strip_delay = 60 @@ -171,7 +171,7 @@ name = "atmospherics beret" desc = "A beret for those who have shown immaculate proficiency in piping. Or plumbing." icon = 'yogstation/icons/obj/clothing/hats.dmi' - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon_state = "beret_atmospherics" armor = list(rad = 10, fire = 10) strip_delay = 60 @@ -180,7 +180,7 @@ name = "chief engineer beret" desc = "A white beret with the engineering insignia emblazoned on it. Its owner knows what they're doing. Probably." icon = 'yogstation/icons/obj/clothing/hats.dmi' - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon_state = "beret_ce" armor = list(rad = 20, fire = 30) strip_delay = 60 @@ -189,7 +189,7 @@ name = "science beret" desc = "A purple beret with the science insignia emblazoned on it. It has that authentic burning plasma smell." icon = 'yogstation/icons/obj/clothing/hats.dmi' - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon_state = "beret_sci" armor = list(bomb = 5, bio = 5, fire = 5, acid = 10) strip_delay = 60 @@ -198,7 +198,7 @@ name = "medical beret" desc = "A white beret with a blue cross finely threaded into it. It has that sterile smell about it." icon = 'yogstation/icons/obj/clothing/hats.dmi' - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon_state = "beret_med" armor = list(bio = 20) strip_delay = 60 @@ -207,7 +207,7 @@ name = "chief medical officer beret" desc = "A baby blue beret with the insignia of Medistan. It smells very sterile." icon = 'yogstation/icons/obj/clothing/hats.dmi' - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon_state = "beret_cmo" armor = list(bio = 30, acid = 20) strip_delay = 60 @@ -216,7 +216,7 @@ name = "captain beret" desc = "A lovely blue Captain beret with a gold and white insignia." icon = 'yogstation/icons/obj/clothing/hats.dmi' - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon_state = "beret_captain" armor = list(melee = 50, bullet = 30, laser = 20, energy = 10, bomb = 15, bio = 10, rad = 10, fire = 10, acid = 60) strip_delay = 90 @@ -227,7 +227,7 @@ lefthand_file = 'yogstation/icons/mob/inhands/lefthand.dmi' righthand_file = 'yogstation/icons/mob/inhands/righthand.dmi' icon = 'yogstation/icons/obj/clothing/hats.dmi' - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon_state = "demonwelding" item_state = "demonwelding" @@ -237,7 +237,7 @@ lefthand_file = 'yogstation/icons/mob/inhands/lefthand.dmi' righthand_file = 'yogstation/icons/mob/inhands/righthand.dmi' icon = 'yogstation/icons/obj/clothing/hats.dmi' - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon_state = "knightwelding" item_state = "welding" @@ -247,7 +247,7 @@ lefthand_file = 'yogstation/icons/mob/inhands/lefthand.dmi' righthand_file = 'yogstation/icons/mob/inhands/righthand.dmi' icon = 'yogstation/icons/obj/clothing/hats.dmi' - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon_state = "fancywelding" item_state = "fancywelding" @@ -257,7 +257,7 @@ lefthand_file = 'yogstation/icons/mob/inhands/lefthand.dmi' righthand_file = 'yogstation/icons/mob/inhands/righthand.dmi' icon = 'yogstation/icons/obj/clothing/hats.dmi' - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon_state = "engiewelding" item_state = "engiewelding" @@ -267,14 +267,14 @@ lefthand_file = 'yogstation/icons/mob/inhands/lefthand.dmi' righthand_file = 'yogstation/icons/mob/inhands/righthand.dmi' icon = 'yogstation/icons/obj/clothing/hats.dmi' - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon_state = "carpwelding" item_state = "carpwelding" /obj/item/clothing/head/milliondollarhat name = "millionaires hat" desc = "On a small label at the bottom of the hat it reads.'My name is Doug Dimmadome, owner of the Dimmsdale Dimmadome and thank you for buying one of my top quality dimmahats!' On a even smaller label hidden in the small label it reads 'No refunds'." - alternate_worn_icon = 'yogstation/icons/mob/large-worn-icons/1024x1024/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/large-worn-icons/1024x1024/head.dmi' icon = 'yogstation/icons/obj/clothing/1024x1024/hats.dmi' icon_state = "milliondollarhat" item_state = "milliondollarhat" @@ -282,4 +282,4 @@ worn_y_dimension = 1024 armor = list(melee = 20) //lets say the hat itself doesnt provide any melee protection but people are so shocked at how huge your hat is they unconsciously soften there blows as to not hurt the hat. resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - strip_delay = 120 \ No newline at end of file + strip_delay = 120 diff --git a/yogstation/code/modules/clothing/head/jobs.dm b/yogstation/code/modules/clothing/head/jobs.dm index ef77471ccc55..e6b38c196b2f 100644 --- a/yogstation/code/modules/clothing/head/jobs.dm +++ b/yogstation/code/modules/clothing/head/jobs.dm @@ -15,9 +15,8 @@ name = "Brig Physician's cap" desc = "It's a baseball hat with a dark brown color and a reflective cross on the top. Has BP embossed into it." icon = 'yogstation/icons/obj/clothing/hats.dmi' - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon_state = "emtsecsoft" - item_color = "emtsec" /obj/item/clothing/head/beret/med/phys name = "Brig Physician's beret" @@ -28,6 +27,6 @@ name = "corporate physician beret" desc = "A special black beret for the mundane life of a corporate brig physician." icon = 'yogstation/icons/obj/clothing/hats.dmi' - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon_state = "beret_corporate_phys" armor = list(BIO = 20) //So it isnt a direct upgrade over the normal berret diff --git a/yogstation/code/modules/clothing/head/misc.dm b/yogstation/code/modules/clothing/head/misc.dm index 4871066956ea..b031095e865d 100644 --- a/yogstation/code/modules/clothing/head/misc.dm +++ b/yogstation/code/modules/clothing/head/misc.dm @@ -29,7 +29,7 @@ /obj/item/clothing/head/helmet/juggernaut name = "Juggernaut Helmet" desc = "I...am...the...JUGGERNAUT!!!." - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon = 'yogstation/icons/obj/clothing/hats.dmi' icon_state = "juggernauthelm" item_state = "juggernauthelm" @@ -50,7 +50,7 @@ /obj/item/clothing/head/yogs/goatpope name = "goat pope hat" desc = "And on the seventh day King Goat said there will be cabbage!" - alternate_worn_icon = 'yogstation/icons/mob/large-worn-icons/64x64/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/large-worn-icons/64x64/head.dmi' icon_state = "goatpope" item_state = "goatpope" worn_x_dimension = 64 diff --git a/yogstation/code/modules/clothing/mask.dm b/yogstation/code/modules/clothing/mask.dm index 95346d6e5c1b..150007abc4fa 100644 --- a/yogstation/code/modules/clothing/mask.dm +++ b/yogstation/code/modules/clothing/mask.dm @@ -206,7 +206,7 @@ name = "banana mask" desc = "Do you want a banana?" clothing_flags = MASKINTERNALS - alternate_worn_icon = 'yogstation/icons/mob/large-worn-icons/64x64/masks.dmi' + mob_overlay_icon = 'yogstation/icons/mob/large-worn-icons/64x64/masks.dmi' icon_state = "bananamask" item_state = "bananamask" worn_x_dimension = 64 diff --git a/yogstation/code/modules/clothing/neck/_neck.dm b/yogstation/code/modules/clothing/neck/_neck.dm index 5cfd27b63f2d..106374ac49dd 100644 --- a/yogstation/code/modules/clothing/neck/_neck.dm +++ b/yogstation/code/modules/clothing/neck/_neck.dm @@ -2,59 +2,59 @@ name = "striped white scarf" desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks." icon_state = "stripescarf" - item_color = "white" + dye_color = DYE_WHITE custom_price = 10 /obj/item/clothing/neck/yogs/stripedscarf/black name = "striped black scarf" - item_color = "black" + dye_color = DYE_BLACK icon_state = "stripedscarf" color = "#4A4A4B" //Grey but it looks black /obj/item/clothing/neck/yogs/stripedscarf/pink name = "striped pink scarf" - item_color = "pink" + dye_color = DYE_RED icon_state = "stripedscarf" color = "#F699CD" //Pink /obj/item/clothing/neck/yogs/stripedscarf/red name = "striped red scarf" - item_color = "red" + dye_color = DYE_RED icon_state = "stripedscarf" color = "#D91414" //Red /obj/item/clothing/neck/yogs/stripedscarf/green name = "striped green scarf" - item_color = "green" + dye_color = DYE_GREEN icon_state = "stripedscarf" color = "#5C9E54" //Green /obj/item/clothing/neck/yogs/stripedscarf/darkblue name = "striped dark blue scarf" - item_color = "blue" + dye_color = DYE_BLUE icon_state = "stripedscarf" color = "#1E85BC" //Blue /obj/item/clothing/neck/yogs/stripedscarf/purple name = "striped purple scarf" - item_color = "purple" + dye_color = DYE_PURPLE icon_state = "stripedscarf" color = "#9557C5" //Purple /obj/item/clothing/neck/yogs/stripedscarf/yellow name = "striped yellow scarf" - item_color = "yellow" + dye_color = DYE_YELLOW icon_state = "stripedscarf" color = "#E0C14F" //Yellow /obj/item/clothing/neck/yogs/stripedscarf/orange name = "striped orange scarf" - item_color = "orange" + dye_color = DYE_ORANGE icon_state = "stripedscarf" color = "#C67A4B" //Orange /obj/item/clothing/neck/yogs/stripedscarf/cyan name = "striped cyan scarf" - item_color = "cyan" + dye_color = DYE_BLUE icon_state = "stripedscarf" - color = "#54A3CE" //Cyan \ No newline at end of file + color = "#54A3CE" //Cyan diff --git a/yogstation/code/modules/clothing/shoe.dm b/yogstation/code/modules/clothing/shoe.dm index 76620a4684fc..297b57fae76d 100644 --- a/yogstation/code/modules/clothing/shoe.dm +++ b/yogstation/code/modules/clothing/shoe.dm @@ -3,7 +3,6 @@ name = "clown shoes" icon_state = "cluwne" item_state = "cluwne" - item_color = "cluwne" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF item_flags = DROPDEL slowdown = SHOES_SLOWDOWN+1 diff --git a/yogstation/code/modules/clothing/shoes/miscellaneous.dm b/yogstation/code/modules/clothing/shoes/miscellaneous.dm index 9122b6ae89e6..0702e7f15d0c 100644 --- a/yogstation/code/modules/clothing/shoes/miscellaneous.dm +++ b/yogstation/code/modules/clothing/shoes/miscellaneous.dm @@ -17,7 +17,7 @@ name = "scary clown shoes" desc = "Clown shoes often seen being worn by sewer clowns." icon = 'yogstation/icons/obj/clothing/shoes.dmi' - alternate_worn_icon = 'yogstation/icons/mob/feet.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/feet/feet.dmi' icon_state = "scaryclownshoes" item_state = "scaryclownshoes" @@ -25,7 +25,7 @@ name = "bee shoes" desc = "It's hip to wear bees." icon = 'yogstation/icons/obj/clothing/shoes.dmi' - alternate_worn_icon = 'yogstation/icons/mob/feet.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/feet/feet.dmi' icon_state = "bee_shoes" item_state = "bee_shoes" @@ -40,10 +40,9 @@ permeability_coefficient = 0.05 //Thick soles, and covers the ankle pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes -/obj/item/clothing/shoes/yogs/fire_crocs +/obj/item/clothing/shoes/fire_crocs name = "fire crocs" desc = "You are now the coolest kid on the station." icon = 'icons/obj/clothing/shoes.dmi' - alternate_worn_icon = 'icons/mob/feet.dmi' icon_state = "fire_crocs" - item_state = "fire_crocs" \ No newline at end of file + item_state = "fire_crocs" diff --git a/yogstation/code/modules/clothing/suits/armor.dm b/yogstation/code/modules/clothing/suits/armor.dm index fd90d69eb8f6..4300349f6900 100644 --- a/yogstation/code/modules/clothing/suits/armor.dm +++ b/yogstation/code/modules/clothing/suits/armor.dm @@ -12,7 +12,7 @@ /obj/item/clothing/suit/armor/vest/rycliesarmour name = "war armour" desc = "Good for protecting your chest during war." - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' icon_state = "rycliesarmour" item_state = "rycliesarmour" @@ -20,7 +20,7 @@ /obj/item/clothing/suit/armor/vest/namflakjacket name = "nam flak jacket" desc = "Good for protecting your chest from napalm and toolboxes!" - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' icon_state = "namflakjacket" item_state = "namflakjacket" @@ -28,7 +28,7 @@ /obj/item/clothing/suit/armor/vest/redcoatcoat name = "redcoat coat" desc = "Security is coming! Security is coming! Also padded with kevlar for protection." - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' icon_state = "red_coat_coat" item_state = "red_coat_coat" @@ -36,7 +36,7 @@ /obj/item/clothing/suit/armor/vest/secmiljacket name = "sec military jacket" desc = "Aviators not included. Now with extra padding!" - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' icon_state = "secmiljacket" item_state = "secmiljacket" @@ -44,7 +44,7 @@ /obj/item/clothing/suit/armor/vest/hosjacket name = "head of security jacket" desc = "all the style of a jacket with all the protection of a armor vest!" - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' icon_state = "hos_jacket" item_state = "hos_item" @@ -52,7 +52,7 @@ /obj/item/clothing/suit/armor/vest/wardenjacket name = "warden's black jacket" desc = "all the style of a jacket with all the protection of a armor vest!" - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' icon_state = "warden_jacket" item_state = "warden_item" @@ -60,7 +60,7 @@ /obj/item/clothing/suit/armor/hos/germancoat name = "padded german coat" desc = "for those cold german winters or for those head of securitys that want to show their true colors." - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' icon_state = "german_coat" item_state = "german_item" @@ -73,7 +73,7 @@ /obj/item/clothing/suit/armor/vest/sovietcoat name = "soviet coat" desc = "Glory to Arstotzka! Now with padding protection!" - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' icon_state = "soviet_coat" item_state = "soviet_item" @@ -81,7 +81,7 @@ /obj/item/clothing/suit/armor/vest/rurmcoat name = "russian officer coat" desc = "Papers please. Now with padding protection!" - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' icon_state = "ru_rmcoat" item_state = "ru_rmcoat" @@ -89,7 +89,7 @@ /obj/item/clothing/suit/armor/heavy/juggernaut name = "Juggernaut Suit" desc = "I...am...the...JUGGERNAUT!!!" - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' icon_state = "juggernaut" item_state = "juggernaut" diff --git a/yogstation/code/modules/clothing/suits/labcoat.dm b/yogstation/code/modules/clothing/suits/labcoat.dm index 664f6b439c1a..eb75b8119367 100644 --- a/yogstation/code/modules/clothing/suits/labcoat.dm +++ b/yogstation/code/modules/clothing/suits/labcoat.dm @@ -9,15 +9,14 @@ /obj/item/clothing/suit/toggle/labcoat/emt/physician name = "brig physicians jacket" desc = "A protective jacket for medical emergencies on off-world planets. Has BP embossed into it." - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' icon_state = "labcoat_emtsec" - item_color = "labcoat_emtsec" /obj/item/clothing/suit/toggle/labcoat/physician name = "brig physician's labcoat" desc = "A white labcoat with red medical crosses. Has BP embossed into it." - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' icon_state = "labcoat_sec" item_state = "labcoat_sec" diff --git a/yogstation/code/modules/clothing/suits/miscellaneous.dm b/yogstation/code/modules/clothing/suits/miscellaneous.dm index 1329a1f231e3..827ed514338a 100644 --- a/yogstation/code/modules/clothing/suits/miscellaneous.dm +++ b/yogstation/code/modules/clothing/suits/miscellaneous.dm @@ -1,5 +1,5 @@ /obj/item/clothing/suit/hooded/wintercoat/engineering/tcomms - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' name = "network admin's winter coat" icon_state = "coatsignaltech" @@ -7,7 +7,7 @@ hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering/tcomms /obj/item/clothing/head/hooded/winterhood/engineering/tcomms - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon = 'yogstation/icons/obj/clothing/hats.dmi' icon_state = "winterhood_signaltech" @@ -22,7 +22,7 @@ icon_state = "blackwhitesweat" /obj/item/clothing/suit/hooded/wintercoat/bluecoat - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' name = "Blue winter coat" icon_state = "coatwinterblue" @@ -30,7 +30,7 @@ hoodtype = /obj/item/clothing/head/hooded/winterhood/bluecoat /obj/item/clothing/head/hooded/winterhood/bluecoat - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon = 'yogstation/icons/obj/clothing/hats.dmi' icon_state = "winterhood_blue" @@ -53,7 +53,7 @@ item_state = "hamiltoncoat" /obj/item/clothing/suit/hooded/sandsuit - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' name = "sand suit" desc = "A suit often worn by desert nomads." @@ -63,7 +63,7 @@ hoodtype = /obj/item/clothing/head/hooded/sandsuit /obj/item/clothing/head/hooded/sandsuit - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon = 'yogstation/icons/obj/clothing/hats.dmi' icon_state = "sandsuit" flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR|HIDEHAIR @@ -126,7 +126,7 @@ name = "robotics steampunk labcoat" desc = "A labcoat with a steampunk design to it for a roboticist." icon = 'yogstation/icons/obj/clothing/suits.dmi' - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon_state = "wardt_lab" item_state = "wardt_lab" @@ -134,7 +134,7 @@ name = "robotics fancy labcoat" desc = "A labcoat with a few markings denoting it as a labcoat for a roboticist." icon = 'yogstation/icons/obj/clothing/suits.dmi' - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon_state = "aeneasrinil" item_state = "aeneasrinil" @@ -190,7 +190,7 @@ allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/box/fancy/cigarettes, /obj/item/lighter, /obj/item/radio) /obj/item/clothing/suit/hooded/fiendcowl - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' name = "fiend cowl" desc = "Only a really evil person would wear such a fiendish cowl!" @@ -200,13 +200,13 @@ hoodtype = /obj/item/clothing/head/hooded/fiendhood /obj/item/clothing/head/hooded/fiendhood - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon = 'yogstation/icons/obj/clothing/hats.dmi' icon_state = "fiendhood" flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR|HIDEHAIR /obj/item/clothing/suit/hooded/eldritchcowl - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' name = "eldritch cowl" desc = "A tattered heretical cloak from a time long passed." @@ -216,7 +216,7 @@ hoodtype = /obj/item/clothing/head/hooded/eldritchhood /obj/item/clothing/head/hooded/eldritchhood - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon = 'yogstation/icons/obj/clothing/hats.dmi' icon_state = "eldritchhood" flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR|HIDEHAIR|HIDEMASK @@ -228,7 +228,7 @@ item_state = "infsuit" /obj/item/clothing/suit/hooded/caretakercloak - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' name = "caretaker cloak" desc = "Yeah, he will 'take care' of you alright." @@ -238,7 +238,7 @@ hoodtype = /obj/item/clothing/head/hooded/caretakerhood /obj/item/clothing/head/hooded/caretakerhood - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon = 'yogstation/icons/obj/clothing/hats.dmi' icon_state = "caretakerhood" flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR|HIDEHAIR @@ -306,7 +306,7 @@ /obj/item/clothing/suit/hooded/spesshoodie - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' name = "spess hoodie" desc = "A hoodie...IN SPESS!!!" @@ -316,7 +316,7 @@ hoodtype = /obj/item/clothing/head/hooded/spesshoodie /obj/item/clothing/head/hooded/spesshoodie - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon = 'yogstation/icons/obj/clothing/hats.dmi' icon_state = "spesshoodie" flags_inv = HIDEEARS|HIDEHAIR diff --git a/yogstation/code/modules/clothing/under.dm b/yogstation/code/modules/clothing/under.dm index e6ad6332cc09..05dd58e6d72c 100644 --- a/yogstation/code/modules/clothing/under.dm +++ b/yogstation/code/modules/clothing/under.dm @@ -4,7 +4,6 @@ alternate_screams = list('yogstation/sound/voice/cluwnelaugh1.ogg','yogstation/sound/voice/cluwnelaugh2.ogg','yogstation/sound/voice/cluwnelaugh3.ogg') icon_state = "cluwne" item_state = "cluwne" - item_color = "cluwne" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF item_flags = DROPDEL can_adjust = 0 @@ -26,7 +25,6 @@ desc = "'An old uniform that was used as a mascot in commercial advertising to make children smile while in other places slaughtering children.'" icon_state = "ronald_s" item_state = "clown" - item_color = "ronald_s" fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE @@ -35,7 +33,6 @@ desc = "Seize the means of production in style!" icon_state = "soviet_dress_uniform" item_state = "soviet_dress_uniform" - item_color = "soviet_dress_uniform" can_adjust = FALSE /obj/item/clothing/under/yogs/lederhosen @@ -43,5 +40,4 @@ desc = "'Nothing like wearing a lederhosen for another hard day at work on a space station.'" icon_state = "lederhosen" item_state = "lederhosen" - item_color = "lederhosen" can_adjust = FALSE diff --git a/yogstation/code/modules/clothing/under/jobs/civilian.dm b/yogstation/code/modules/clothing/under/jobs/civilian.dm index 43ac53d56b9b..7778dc455761 100644 --- a/yogstation/code/modules/clothing/under/jobs/civilian.dm +++ b/yogstation/code/modules/clothing/under/jobs/civilian.dm @@ -3,7 +3,6 @@ desc = "I explored the galaxy and all I got was this lousy T-shirt!" icon_state = "tourist" item_state = "gy_suit" - item_color = "tourist" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION /obj/item/clothing/under/yogs/rank/clerk @@ -11,7 +10,6 @@ name = "clerk's uniform" icon_state = "clerk" item_state = "clerk" - item_color = "clerk" can_adjust = FALSE mutantrace_variation = MUTANTRACE_VARIATION @@ -20,7 +18,6 @@ name = "clerk's skirt" icon_state = "clerk_skirt" item_state = "clerk_skirt" - item_color = "clerk_skirt" body_parts_covered = CHEST|GROIN|ARMS fitted = FEMALE_UNIFORM_TOP mutantrace_variation = NO_MUTANTRACE_VARIATION @@ -30,7 +27,6 @@ name = "recovery medic's jumpsuit" icon_state = "recovery" item_state = "recovery" - item_color = "recovery" can_adjust = 0 sensor_mode = 3 random_sensor = 0 diff --git a/yogstation/code/modules/clothing/under/jobs/security.dm b/yogstation/code/modules/clothing/under/jobs/security.dm index 5e2bd4b0a0a2..e2fda379b1d6 100644 --- a/yogstation/code/modules/clothing/under/jobs/security.dm +++ b/yogstation/code/modules/clothing/under/jobs/security.dm @@ -3,7 +3,6 @@ desc = "You have one job, don't screw it up." icon_state = "kr_officer_s" item_state = "kr_officer" - item_color = "kr_officer_s" armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30) strip_delay = 50 alt_covers_chest = TRUE @@ -17,7 +16,6 @@ desc = "A verstile blue and white uniform honored to hard working brig physicians who help with injured prisoners and security personel." icon_state = "recovery" item_state = "recovery" - item_color = "recovery" alt_covers_chest = TRUE sensor_mode = 3 random_sensor = FALSE @@ -28,7 +26,6 @@ desc = "A classic jumpsuit that connects you to your medsci brothers and sisters." icon_state = "secwhite" item_state = "secwhite" - item_color = "secwhite" alt_covers_chest = FALSE random_sensor = TRUE @@ -37,8 +34,7 @@ desc = "A classic jumpskirt that connects you to your medsci brothers and sisters." icon_state = "secwhite_skirt" item_state = "secwhite_skirt" - item_color = "secwhite_skirt" can_adjust = FALSE body_parts_covered = CHEST|GROIN|ARMS fitted = FEMALE_UNIFORM_TOP - mutantrace_variation = NO_MUTANTRACE_VARIATION \ No newline at end of file + mutantrace_variation = NO_MUTANTRACE_VARIATION diff --git a/yogstation/code/modules/clothing/under/miscellaneous.dm b/yogstation/code/modules/clothing/under/miscellaneous.dm index c16c0cb60416..eb626e97fc55 100644 --- a/yogstation/code/modules/clothing/under/miscellaneous.dm +++ b/yogstation/code/modules/clothing/under/miscellaneous.dm @@ -3,7 +3,6 @@ desc = "Groovy!" icon_state = "psyche_s" item_state = "rainbow" - item_color = "psyche_s" can_adjust = FALSE /obj/item/clothing/under/yogs/scaryclown @@ -11,7 +10,6 @@ desc = "Often worn by sewer clowns." icon_state = "scaryclownuniform" item_state = "scaryclownuniform" - item_color = "scaryclownuniform" can_adjust = FALSE /obj/item/clothing/under/rank/yogs/scaryclown/Initialize() @@ -23,7 +21,6 @@ desc = "Two faces, two colors." icon_state = "harvey_flint_s" item_state = "harvey_flint" - item_color = "harvey_flint_s" can_adjust = FALSE /obj/item/clothing/under/yogs/thejester @@ -31,7 +28,6 @@ desc = "You can never catch me, spaceman!" icon_state = "the_jester_s" item_state = "the_jester" - item_color = "the_jester_s" can_adjust = FALSE /obj/item/clothing/under/yogs/trickster @@ -39,7 +35,6 @@ desc = "HAHAHA! I love riddles!" icon_state = "trickster_s" item_state = "trickster" - item_color = "trickster_s" can_adjust = FALSE /obj/item/clothing/under/yogs/penguinsuit @@ -47,7 +42,6 @@ desc = "How fancy!" icon_state = "penguin_s" item_state = "penguin" - item_color = "penguin_s" can_adjust = FALSE /obj/item/clothing/under/yogs/barber @@ -55,7 +49,6 @@ desc = "The perfect suit for singing in a quartet." icon_state = "barber_s" item_state = "barber" - item_color = "barber_s" can_adjust = FALSE /obj/item/clothing/under/yogs/dresdenunder @@ -63,7 +56,6 @@ desc = "Generic nerd by day, evil super villian by night." icon_state = "dresdenunder_s" item_state = "dresdenunder" - item_color = "dresdenunder_s" can_adjust = FALSE /obj/item/clothing/under/yogs/relaxedwearm @@ -71,7 +63,6 @@ desc = "Perfect for hosting that evening bbq!" icon_state = "relaxedwearm_s" item_state = "relaxedwearm" - item_color = "relaxedwearm_s" can_adjust = FALSE /obj/item/clothing/under/yogs/springm @@ -79,7 +70,6 @@ desc = "Perfect for relaxing under the spring sun!" icon_state = "springm_s" item_state = "springm" - item_color = "springm_s" can_adjust = FALSE /obj/item/clothing/under/yogs/pinstripe @@ -87,7 +77,6 @@ desc = "This suit screams rich mafia boss." icon_state = "pinstripe_s" item_state = "pinstripe" - item_color = "pinstripe_s" can_adjust = FALSE /obj/item/clothing/under/yogs/treasure @@ -95,7 +84,6 @@ desc = "This suit belongs in a museum!" icon_state = "doctor_s" item_state = "doctor" - item_color = "doctor_s" can_adjust = FALSE /obj/item/clothing/under/yogs/doomsday @@ -103,7 +91,6 @@ desc = "The end times are here!" icon_state = "doomsday_s" item_state = "doomsday" - item_color = "doomsday_s" can_adjust = FALSE /obj/item/clothing/under/yogs/rycliesuni @@ -111,7 +98,6 @@ desc = "Protects your body from mental brainwashing. Too bad there is no brain inside of your chest." icon_state = "rycliesuni_s" item_state = "rycliesuni" - item_color = "rycliesuni_s" can_adjust = FALSE /obj/item/clothing/under/yogs/oliveoutfit @@ -119,7 +105,6 @@ desc = "For people who want to look like they are in the army without actually being in the army." icon_state = "oliveoutfit_s" item_state = "oliveoutfit" - item_color = "oliveoutfit_s" can_adjust = FALSE /obj/item/clothing/under/yogs/plaidoutfit @@ -127,7 +112,6 @@ desc = "The most boring of suits." icon_state = "plaidoutfit_s" item_state = "plaidoutfit" - item_color = "plaidoutfit_s" can_adjust = FALSE /obj/item/clothing/under/yogs/moutfit @@ -135,7 +119,6 @@ desc = "The most casual of suits." icon_state = "moutfit_s" item_state = "moutfit" - item_color = "moutfit_s" can_adjust = FALSE /obj/item/clothing/under/yogs/luna @@ -143,7 +126,6 @@ desc = "So about that football team..." icon_state = "luna_s" item_state = "luna" - item_color = "luna_s" can_adjust = FALSE /obj/item/clothing/under/yogs/altshield @@ -151,7 +133,6 @@ desc = "The name tag has the name 'Joe From Accounting' on it." icon_state = "altshield_s" item_state = "altshield" - item_color = "altshield_s" can_adjust = FALSE /obj/item/clothing/under/yogs/namjumpsuit @@ -159,7 +140,6 @@ desc = "Welcome to nam, soldier. Now let's go arrest some greytide!" icon_state = "namjumpsuit_s" item_state = "namjumpsuit" - item_color = "namjumpsuit_s" armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30) strip_delay = 50 alt_covers_chest = TRUE @@ -172,7 +152,6 @@ desc = "For wardens particular to the use of the gulag." icon_state = "gru_officer_s" item_state = "gru_officer" - item_color = "gru_officer_s" armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30) strip_delay = 50 alt_covers_chest = TRUE @@ -185,7 +164,6 @@ desc = "As long as you protect your men and arrest the greytide you should be fine. God speed." icon_state = "Lieut_General_US_s" item_state = "Lieut_General_US" - item_color = "Lieut_General_US_s" armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) strip_delay = 60 alt_covers_chest = TRUE @@ -198,7 +176,6 @@ desc = "You are the commander of your men and the top of the top, dont let them down!" icon_state = "Captain_Artillery_CS_s" item_state = "Captain_Artillery_CS" - item_color = "Captain_Artillery_CS_s" sensor_mode = SENSOR_COORDS random_sensor = FALSE can_adjust = FALSE @@ -208,7 +185,6 @@ desc = "Darn yankees." icon_state = "blue_coat_uniform_s" item_state = "blue_coat_uniform" - item_color = "blue_coat_uniform_s" can_adjust = FALSE /obj/item/clothing/under/yogs/redcoatuniform @@ -216,7 +192,6 @@ desc = "Security is coming! Security is coming!" icon_state = "red_coat_uniform_s" item_state = "red_coat_uniform" - item_color = "red_coat_uniform_s" armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30) strip_delay = 50 alt_covers_chest = TRUE @@ -229,7 +204,6 @@ desc = "Time to be the leader of your own musical!" icon_state = "hamilton_uniform_s" item_state = "hamilton_uniform" - item_color = "hamilton_uniform_s" can_adjust = FALSE /obj/item/clothing/under/yogs/cowboy2 @@ -237,7 +211,6 @@ desc = "Welcome to the wild west partner." icon_state = "cowboy2_s" item_state = "cowboy2" - item_color = "cowboy2_s" can_adjust = FALSE /obj/item/clothing/under/yogs/cowboy @@ -245,7 +218,6 @@ desc = "Welcome to the wild west partner. Now slightly more fancy!" icon_state = "cowboy_s" item_state = "cowboy" - item_color = "cowboy_s" can_adjust = FALSE /obj/item/clothing/under/yogs/bluedetective @@ -253,7 +225,6 @@ desc = "A suit often worn by those detective types. Now in blue!" icon_state = "blue_detective" item_state = "blue_detective" - item_color = "blue_detective" can_adjust = FALSE /obj/item/clothing/under/yogs/golddetective @@ -261,14 +232,12 @@ desc = "A suit often worn by those detective types. Now in gold!" icon_state = "gold_detective" item_state = "gold_detective" - item_color = "gold_detective" /obj/item/clothing/under/yogs/greydetective name = "grey detective suit" desc = "A suit often worn by those detective types. Now in boring old grey!" icon_state = "grey_detective" item_state = "grey_detective" - item_color = "grey_detective" can_adjust = FALSE /obj/item/clothing/under/yogs/blackdetective @@ -276,7 +245,6 @@ desc = "A suit often worn by those detective types. Now in black!" icon_state = "black_detective" item_state = "black_detective" - item_color = "black_detective" can_adjust = FALSE /obj/item/clothing/under/yogs/whitetuxedo @@ -284,7 +252,6 @@ desc = "The perfect suit for almost any occasion, just make sure to wash it down once you're done with it." icon_state = "white_tuxedo" item_state = "white_tuxedo" - item_color = "white_tuxedo" can_adjust = FALSE /obj/item/clothing/under/yogs/ceturtleneck @@ -292,7 +259,6 @@ desc = "How cozy!" icon_state = "ce_turtleneck" item_state = "ce_turtleneck" - item_color = "ce_turtleneck" armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 80, ACID = 40) resistance_flags = NONE can_adjust = FALSE @@ -302,7 +268,6 @@ desc = "The perfect dress for almost any ball." icon_state = "white_dress" item_state = "white_dress" - item_color = "white_dress" can_adjust = FALSE /obj/item/clothing/under/yogs/nursedress @@ -310,7 +275,6 @@ desc = "Nurse, stop standing there and help me! I am dying!" icon_state = "nurse_dress" item_state = "nurse_dress" - item_color = "nurse_dress" can_adjust = FALSE /obj/item/clothing/under/yogs/prosecutorsuit @@ -318,7 +282,6 @@ desc = "GUILTY! LET'S GO GET SOME DONUTS!" icon_state = "prosecutor_suit" item_state = "prosecutor_suit" - item_color = "prosecutor_suit" can_adjust = FALSE /obj/item/clothing/under/yogs/dictatorhos @@ -326,7 +289,6 @@ desc = "The leader the station does not need or want." icon_state = "uniform_two" item_state = "uniform_two" - item_color = "uniform_two" armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) strip_delay = 60 alt_covers_chest = TRUE @@ -339,7 +301,6 @@ desc = "Are we making meth or growing plants?" icon_state = "botany_uniform" item_state = "botany_uniform" - item_color = "botany_uniform" permeability_coefficient = 0.5 can_adjust = FALSE @@ -348,7 +309,6 @@ desc = "Even the captain has to let loose on this metal death trap every now and then." icon_state = "casual_captain" item_state = "casual_captain" - item_color = "casual_captain" can_adjust = FALSE /obj/item/clothing/under/yogs/fancysuit @@ -356,7 +316,6 @@ desc = "What a fancy suit!" icon_state = "fancy_suit" item_state = "fancy_suit" - item_color = "fancy_suit" can_adjust = FALSE /obj/item/clothing/under/yogs/redcamo @@ -364,7 +323,6 @@ desc = "Kinda ruins the whole point of camouflage in the first place to be honest." icon_state = "red_camo" item_state = "red_camo" - item_color = "red_camo" can_adjust = FALSE /obj/item/clothing/under/yogs/whitecaptainsuit @@ -372,7 +330,6 @@ desc = "For captains who want to pretend they are a boat captain and not a space station captain." icon_state = "captain_suit" item_state = "captain_suit" - item_color = "captain_suit" can_adjust = FALSE /obj/item/clothing/under/yogs/armyuniform @@ -380,7 +337,6 @@ desc = "Often seen being worn by the space army." icon_state = "army_uniform" item_state = "army_uniform" - item_color = "army_uniform" can_adjust = FALSE /obj/item/clothing/under/yogs/work_suit @@ -388,7 +344,6 @@ desc = "Perfect for that 24/7 workout with all the running you do around the station." icon_state = "work_suit" item_state = "work_suit" - item_color = "work_suit" can_adjust = FALSE /obj/item/clothing/under/yogs/colony @@ -396,14 +351,12 @@ desc = "Nothing like exploring the great jungles of watabaga and fighting the great lumbarian wombo in the morning." icon_state = "colony_longsleeve" item_state = "colony_longsleeve" - item_color = "colony_longsleeve" /obj/item/clothing/under/yogs/hoslatenight name = "late night head of security uniform" desc = "For those more quiet shifts." icon_state = "hos1_suit" item_state = "hos1_suit" - item_color = "hos1_suit" armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) strip_delay = 60 alt_covers_chest = TRUE @@ -416,7 +369,6 @@ desc = "Even the CE has to take a break from setting up the engine somet- and the singlo is loose." icon_state = "ce_suit" item_state = "ce_suit" - item_color = "ce_suit" armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 80, ACID = 40) resistance_flags = NONE can_adjust = FALSE @@ -426,7 +378,6 @@ desc = "Even the HoS has to take a break from beating the clown sometimes." icon_state = "hos_suit" item_state = "hos_suit" - item_color = "hos_suit" armor = list(MELEE = 10, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) strip_delay = 60 alt_covers_chest = TRUE @@ -439,7 +390,6 @@ desc = "Even the HoP has to take a break from giving all access to the crew sometimes." icon_state = "hop_suit" item_state = "hop_suit" - item_color = "hop_suit" can_adjust = FALSE /obj/item/clothing/under/yogs/forensictech @@ -447,7 +397,6 @@ desc = "Hmm, this bloody toolbox has insulated fibers on it..." icon_state = "forensic_tech" item_state = "forensic_tech" - item_color = "forensic_tech" can_adjust = FALSE /obj/item/clothing/under/yogs/bluetunic @@ -455,7 +404,6 @@ desc = "Perfect for relaxing in a bath house. Too bad there isn't one on the station." icon_state = "bluetunic_s" item_state = "bluetunic" - item_color = "bluetunic_s" can_adjust = FALSE /obj/item/clothing/under/yogs/caretaker @@ -463,7 +411,6 @@ desc = "Yeah, he will 'take care' of you alright." icon_state = "caretaker_s" item_state = "caretaker" - item_color = "caretaker_s" can_adjust = FALSE /obj/item/clothing/under/yogs/familiartunic @@ -471,7 +418,6 @@ desc = "You swear you've seen this tunic before, but you can't place where..." icon_state = "familiartunic_s" item_state = "familiartunic" - item_color = "familiartunic_s" can_adjust = FALSE /obj/item/clothing/under/yogs/fiendsuit @@ -479,7 +425,6 @@ desc = "Named so because only a really bad person would wear such a suit." icon_state = "fiendsuit_s" item_state = "fiendsuit" - item_color = "fiendsuit_s" can_adjust = FALSE /obj/item/clothing/under/yogs/grimhoodie @@ -487,7 +432,6 @@ desc = "A hoodie without a hood... how grim." icon_state = "grimhoodie_s" item_state = "grimhoodie" - item_color = "grimhoodie_s" can_adjust = FALSE /obj/item/clothing/under/yogs/infmob @@ -495,7 +439,6 @@ desc = "So you wanna be a classy gangster, ay?" icon_state = "inf_mob_s" item_state = "inf_mob" - item_color = "inf_mob_s" can_adjust = FALSE /obj/item/clothing/under/yogs/persskinsuit @@ -503,7 +446,6 @@ desc = "Pretty uncomfortable but at least it looks cool." icon_state = "pers_skinsuit_s" item_state = "pers_skinsuit" - item_color = "pers_skinsuit_s" can_adjust = FALSE /obj/item/clothing/under/yogs/soldieruniform @@ -511,7 +453,6 @@ desc = "Are you a man or a mouse?" icon_state = "soldier_uniform_s" item_state = "soldier_uniform" - item_color = "soldier_uniform_s" can_adjust = FALSE /obj/item/clothing/under/yogs/lightpink @@ -519,14 +460,12 @@ desc = "A jumpsuit. Now in light pink." icon_state = "lightpink_s" item_state = "lightpink" - item_color = "lightpink_s" /obj/item/clothing/under/yogs/rdema name = "pink research directors uniform" desc = "What relaxing colors." icon_state = "rdema_s" item_state = "rdema" - item_color = "rdema_s" can_adjust = FALSE armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 10, BIO = 10, RAD = 0, FIRE = 0, ACID = 35) @@ -535,7 +474,6 @@ desc = "Candy is dandy, but liquor is quicker!" icon_state = "billydonka_s" item_state = "billydonka" - item_color = "billydonka_s" can_adjust = FALSE /obj/item/clothing/under/yogs/brownoveralls @@ -543,7 +481,6 @@ desc = "The perfect uniform for coal mining." icon_state = "b-overalls_s" item_state = "b-overalls" - item_color = "b-overalls_s" can_adjust = FALSE /obj/item/clothing/under/yogs/redoveralls @@ -551,7 +488,6 @@ desc = "The perfect uniform for lumberjacks." icon_state = "r-overalls_s" item_state = "r-overalls" - item_color = "r-overalls_s" can_adjust = FALSE /obj/item/clothing/under/yogs/casualjanitorsuit @@ -559,7 +495,6 @@ desc = "Even the janitor has to take a break from slipping the crew sometimes." icon_state = "janitor_suit" item_state = "janitor_suit" - item_color = "janitor_suit" armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) can_adjust = FALSE @@ -568,7 +503,6 @@ desc = "Even the bartender has to take a break from protecting Pun Pun sometimes." icon_state = "callum_suit_s" item_state = "callum_suit" - item_color = "callum_suit_s" can_adjust = FALSE /obj/item/clothing/under/yogs/saaland @@ -576,7 +510,6 @@ desc = "Made from 0.01% real gold!" icon_state = "saaland_s" item_state = "saaland" - item_color = "saaland_s" can_adjust = FALSE /obj/item/clothing/under/yogs/victorianblred @@ -584,7 +517,6 @@ desc = "Oh how eighteen hundreds!" icon_state = "victorianblred" item_state = "victorianblred" - item_color = "victorianblred" can_adjust = FALSE /obj/item/clothing/under/yogs/victorianredvest @@ -592,7 +524,6 @@ desc = "Oh how eighteen hundreds!" icon_state = "victorianredvest" item_state = "victorianredvest" - item_color = "victorianredvest" can_adjust = FALSE /obj/item/clothing/under/yogs/victorianvest @@ -600,7 +531,6 @@ desc = "Oh how eighteen hundreds!" icon_state = "victorianvest" item_state = "victorianvest" - item_color = "victorianvest" can_adjust = FALSE /obj/item/clothing/under/yogs/victorianblackdress @@ -608,7 +538,6 @@ desc = "Oh how eighteen hundreds!" icon_state = "victorianblackdress" item_state = "victorianblackdress" - item_color = "victorianblackdress" can_adjust = FALSE /obj/item/clothing/under/yogs/victorianreddress @@ -616,7 +545,6 @@ desc = "Oh how eighteen hundreds!" icon_state = "victorianreddress" item_state = "victorianreddress" - item_color = "victorianreddress" can_adjust = FALSE /obj/item/clothing/under/yogs/shitcurity @@ -624,21 +552,18 @@ desc = "For the security members that want to show their true colors." icon_state = "altsecurity" item_state = "altsecurity" - item_color = "altsecurity" /obj/item/clothing/under/yogs/victoriouscaptainuniform name = "very fancy captain uniform" desc = "Ask not the sparrow how the eagle soars!" icon_state = "captainfemaleformal_s" item_state = "captainfemaleformal" - item_color = "captainfemaleformal_s" /obj/item/clothing/under/yogs/zootsuit name = "zoot suit" desc = "A snazzy purple zoot suit. The name 'Big Papa' is stitched on the inside of the collar." icon_state = "zootsuit" item_state = "zootsuit" - item_color = "zootsuit" can_adjust = 0 /obj/item/clothing/under/yogs/cosby @@ -646,5 +571,4 @@ desc = "Zip zap zoobity bap!" icon_state = "cosby" item_state = "cosby" - item_color = "cosby" - can_adjust = 0 \ No newline at end of file + can_adjust = 0 diff --git a/yogstation/code/modules/donor/unique_donator_items.dm b/yogstation/code/modules/donor/unique_donator_items.dm index 82289e96e991..199978503bff 100644 --- a/yogstation/code/modules/donor/unique_donator_items.dm +++ b/yogstation/code/modules/donor/unique_donator_items.dm @@ -118,7 +118,6 @@ Uncomment this and use atomproccall as necessary, then copypaste the output into name = "green cosmic bedsheet" icon_state = "sheetcosmos_green" item_state = "sheetcosmos_green" - item_color = "cosmos_green" /datum/donator_gear/azeelium name = "Utatul-Azeel plushie" @@ -150,6 +149,11 @@ Uncomment this and use atomproccall as necessary, then copypaste the output into ckey = "Hisakaki" unlock_path = /obj/item/clothing/head/halo +/datum/donator_gear/skrem + name = "Rainbow flower" + ckey = "Skrem7" + unlock_path = /obj/item/clothing/head/rainbow_flower + ///Generic donator hats, ckey agnostic. /datum/donator_gear/beanie name = "Beanie" diff --git a/yogstation/code/modules/jobs/job_types/brig_physician.dm b/yogstation/code/modules/jobs/job_types/brig_physician.dm index 4b3c54f18421..b7a7b325ae0c 100644 --- a/yogstation/code/modules/jobs/job_types/brig_physician.dm +++ b/yogstation/code/modules/jobs/job_types/brig_physician.dm @@ -40,6 +40,7 @@ ears = /obj/item/radio/headset/headset_medsec glasses = /obj/item/clothing/glasses/hud/health/sunglasses shoes = /obj/item/clothing/shoes/jackboots + digitigrade_shoes = /obj/item/clothing/shoes/xeno_wraps/jackboots uniform = /obj/item/clothing/under/yogs/rank/miner/medic suit = /obj/item/clothing/suit/toggle/labcoat/emt/physician l_hand = /obj/item/storage/firstaid/regular diff --git a/yogstation/code/modules/jobs/job_types/mining_medic.dm b/yogstation/code/modules/jobs/job_types/mining_medic.dm index f8d2058ad126..3fd4a43e1ee0 100644 --- a/yogstation/code/modules/jobs/job_types/mining_medic.dm +++ b/yogstation/code/modules/jobs/job_types/mining_medic.dm @@ -34,12 +34,12 @@ 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 shoes = /obj/item/clothing/shoes/workboots/mining + digitigrade_shoes = /obj/item/clothing/shoes/xeno_wraps/medical suit = /obj/item/clothing/suit/toggle/labcoat/emt/explorer uniform = /obj/item/clothing/under/yogs/rank/miner/medic l_hand = /obj/item/storage/firstaid/regular diff --git a/yogstation/code/modules/jobs/job_types/network_admin.dm b/yogstation/code/modules/jobs/job_types/network_admin.dm index 59b9bff70d20..c229069d1e6b 100644 --- a/yogstation/code/modules/jobs/job_types/network_admin.dm +++ b/yogstation/code/modules/jobs/job_types/network_admin.dm @@ -40,6 +40,7 @@ suit = /obj/item/clothing/suit/hooded/wintercoat/engineering/tcomms gloves = /obj/item/clothing/gloves/color/black shoes = /obj/item/clothing/shoes/workboots + digitigrade_shoes = /obj/item/clothing/shoes/xeno_wraps/engineering backpack_contents = list(/obj/item/modular_computer/tablet/preset/advanced=1) backpack = /obj/item/storage/backpack/industrial diff --git a/yogstation/code/modules/mob/dead/new_player/sprite_accessories.dm b/yogstation/code/modules/mob/dead/new_player/sprite_accessories.dm index 16a5ea794aec..b6c3742e18d4 100644 --- a/yogstation/code/modules/mob/dead/new_player/sprite_accessories.dm +++ b/yogstation/code/modules/mob/dead/new_player/sprite_accessories.dm @@ -1,5 +1,5 @@ /datum/sprite_accessory/undershirt/goose name = "Shirt (Vomit Goose)" icon_state = "vomitgooseshirt" - icon = 'yogstation/icons/mob/underwear.dmi' - gender = NEUTER \ No newline at end of file + icon = 'yogstation/icons/mob/clothing/sprite_accessories/undershirt.dmi' + gender = NEUTER 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 2206003e834d..8b1f1e69f062 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/code/modules/mob/living/silicon/robot/robot.dm b/yogstation/code/modules/mob/living/silicon/robot/robot.dm index 2025d350fbff..6ad182cc1c31 100644 --- a/yogstation/code/modules/mob/living/silicon/robot/robot.dm +++ b/yogstation/code/modules/mob/living/silicon/robot/robot.dm @@ -66,7 +66,7 @@ else add_overlay("ov-opencover -c") if(hat) - var/mutable_appearance/head_overlay = hat.build_worn_icon(state = hat.icon_state, default_layer = 20, default_icon_file = 'icons/mob/head.dmi') + var/mutable_appearance/head_overlay = hat.build_worn_icon(default_layer = 20, default_icon_file = 'icons/mob/clothing/head/head.dmi') head_overlay.pixel_y += hat_offset add_overlay(head_overlay) update_fire() diff --git a/yogstation/code/modules/ninja/suit/ninja.dm b/yogstation/code/modules/ninja/suit/ninja.dm index 8def55122e3f..068fb2697ad1 100644 --- a/yogstation/code/modules/ninja/suit/ninja.dm +++ b/yogstation/code/modules/ninja/suit/ninja.dm @@ -1,22 +1,22 @@ /obj/item/clothing/head/helmet/space/space_ninja - alternate_worn_icon = 'yogstation/icons/mob/head.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/head/head.dmi' icon_state = "s-ninja" /obj/item/clothing/mask/gas/space_ninja - alternate_worn_icon = 'yogstation/icons/mob/mask.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/mask/mask.dmi' icon = 'yogstation/icons/obj/clothing/masks.dmi' icon_state = "s-ninja" var/lights_on = FALSE var/lights_colour = "16be00" /obj/item/clothing/shoes/space_ninja - alternate_worn_icon = 'yogstation/icons/mob/feet.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/feet/feet.dmi' icon_state = "s-ninja" var/lights_on = FALSE var/lights_colour = "16be00" /obj/item/clothing/suit/space/space_ninja - alternate_worn_icon = 'yogstation/icons/mob/suit.dmi' + mob_overlay_icon = 'yogstation/icons/mob/clothing/suit/suit.dmi' icon = 'yogstation/icons/obj/clothing/suits.dmi' icon_state = "s-ninja" var/lights_on = FALSE @@ -30,14 +30,14 @@ /obj/item/clothing/suit/space/space_ninja/worn_overlays(isinhands = FALSE) .=..() if(!isinhands && lights_on) - var/mutable_appearance/M = mutable_appearance('yogstation/icons/mob/suit.dmi', "s-ninja-overlay") + var/mutable_appearance/M = mutable_appearance(mob_overlay_icon, "s-ninja-overlay") M.color = lights_colour . += M /obj/item/clothing/mask/gas/space_ninja/worn_overlays(isinhands = FALSE) .=..() if(!isinhands && lights_on) - var/mutable_appearance/M = mutable_appearance('yogstation/icons/mob/mask.dmi', "s-ninja-overlay") + var/mutable_appearance/M = mutable_appearance(mob_overlay_icon, "s-ninja-overlay") M.color = lights_colour . += M @@ -45,14 +45,14 @@ /obj/item/clothing/shoes/space_ninja/worn_overlays(isinhands = FALSE) .=..() if(!isinhands && lights_on) - var/mutable_appearance/M = mutable_appearance('yogstation/icons/mob/feet.dmi', "s-ninja-overlay") + var/mutable_appearance/M = mutable_appearance(mob_overlay_icon, "s-ninja-overlay") M.color = lights_colour . += M /obj/item/clothing/gloves/space_ninja/worn_overlays(isinhands = FALSE) .=..() if(!isinhands && lights_on) - var/mutable_appearance/M = mutable_appearance('yogstation/icons/mob/hands.dmi', "s-ninja-overlay") + var/mutable_appearance/M = mutable_appearance(mob_overlay_icon, "s-ninja-overlay") M.color = lights_colour . += M diff --git a/yogstation/code/modules/reagents/reagent_containers/hypospray.dm b/yogstation/code/modules/reagents/reagent_containers/hypospray.dm index 4dfcd25b1e8a..a3f7fa0ef8de 100644 --- a/yogstation/code/modules/reagents/reagent_containers/hypospray.dm +++ b/yogstation/code/modules/reagents/reagent_containers/hypospray.dm @@ -16,12 +16,12 @@ /obj/item/reagent_containers/hypospray/medipen/stimpack/large name = "stimpack injector" - desc = "Contains two heavy doses of stimulants." + desc = "Contains three heavy doses of stimulants." icon = 'yogstation/icons/obj/syringe.dmi' icon_state = "stimpakpen" - volume = 50 + volume = 75 amount_per_transfer_from_this = 25 - list_reagents = list(/datum/reagent/medicine/stimulants = 50) + list_reagents = list(/datum/reagent/medicine/stimulants = 75) /obj/item/reagent_containers/hypospray/medipen/stimpack/large/update_icon() if(reagents.total_volume > 25) diff --git a/yogstation/code/modules/surgery/gender_reassignment.dm b/yogstation/code/modules/surgery/gender_reassignment.dm index 25cf89fcada7..c9f040a0225d 100644 --- a/yogstation/code/modules/surgery/gender_reassignment.dm +++ b/yogstation/code/modules/surgery/gender_reassignment.dm @@ -1,5 +1,7 @@ /datum/surgery/gender_reassignment name = "gender reassignment" + desc = "This surgery reassigns a person's gender that of the opposite sex. Failure may result in gender ambiguity." + icon_state = "gender_change" steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/reshape_genitals, @@ -42,4 +44,4 @@ user.visible_message(span_warning("[user] accidentally mutilates [target]'s genitals beyond the point of recognition!"), span_warning("You accidentally mutilate [target]'s genitals beyond the point of recognition!")) target.gender = pick(MALE, FEMALE) target.regenerate_icons() - return 1 \ No newline at end of file + return 1 diff --git a/yogstation/code/modules/surgery/healing_surgeries.dm b/yogstation/code/modules/surgery/healing_surgeries.dm index 527a7f4e1330..d30634f5ab2b 100644 --- a/yogstation/code/modules/surgery/healing_surgeries.dm +++ b/yogstation/code/modules/surgery/healing_surgeries.dm @@ -65,10 +65,16 @@ //surgeries go here /datum/surgery/heal_brute name = "patch wounds" + desc = "Heals a body part of brute damage. Useful for allowing a body to be defibrillated." + icon = 'icons/obj/stack_medical.dmi' + icon_state = "brutepack_3" steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/debride, /datum/surgery_step/apply_dressing, /datum/surgery_step/close) possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD) /datum/surgery/heal_burn name = "treat burns" + desc = "Heals a body part of burn damage. Useful for allowing a body to be defibrillated." + icon = 'icons/obj/stack_medical.dmi' + icon_state = "ointment_3" steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/debride, /datum/surgery_step/apply_dressing/burn, /datum/surgery_step/close) possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD) diff --git a/yogstation/icons/mob/back.dmi b/yogstation/icons/mob/clothing/back.dmi similarity index 100% rename from yogstation/icons/mob/back.dmi rename to yogstation/icons/mob/clothing/back.dmi diff --git a/yogstation/icons/mob/belt.dmi b/yogstation/icons/mob/clothing/belt.dmi similarity index 100% rename from yogstation/icons/mob/belt.dmi rename to yogstation/icons/mob/clothing/belt.dmi diff --git a/yogstation/icons/mob/ears.dmi b/yogstation/icons/mob/clothing/ears/ears.dmi similarity index 100% rename from yogstation/icons/mob/ears.dmi rename to yogstation/icons/mob/clothing/ears/ears.dmi diff --git a/yogstation/icons/mob/eyes.dmi b/yogstation/icons/mob/clothing/eyes/eyes.dmi similarity index 100% rename from yogstation/icons/mob/eyes.dmi rename to yogstation/icons/mob/clothing/eyes/eyes.dmi diff --git a/yogstation/icons/mob/feet.dmi b/yogstation/icons/mob/clothing/feet/feet.dmi similarity index 100% rename from yogstation/icons/mob/feet.dmi rename to yogstation/icons/mob/clothing/feet/feet.dmi diff --git a/yogstation/icons/mob/hands.dmi b/yogstation/icons/mob/clothing/hands/hands.dmi similarity index 100% rename from yogstation/icons/mob/hands.dmi rename to yogstation/icons/mob/clothing/hands/hands.dmi diff --git a/yogstation/icons/mob/head.dmi b/yogstation/icons/mob/clothing/head/head.dmi similarity index 100% rename from yogstation/icons/mob/head.dmi rename to yogstation/icons/mob/clothing/head/head.dmi diff --git a/yogstation/icons/mob/mask.dmi b/yogstation/icons/mob/clothing/mask/mask.dmi similarity index 100% rename from yogstation/icons/mob/mask.dmi rename to yogstation/icons/mob/clothing/mask/mask.dmi diff --git a/yogstation/icons/mob/neck.dmi b/yogstation/icons/mob/clothing/neck/neck.dmi similarity index 100% rename from yogstation/icons/mob/neck.dmi rename to yogstation/icons/mob/clothing/neck/neck.dmi diff --git a/yogstation/icons/mob/underwear.dmi b/yogstation/icons/mob/clothing/sprite_accessories/undershirt.dmi similarity index 100% rename from yogstation/icons/mob/underwear.dmi rename to yogstation/icons/mob/clothing/sprite_accessories/undershirt.dmi diff --git a/yogstation/icons/mob/suit.dmi b/yogstation/icons/mob/clothing/suit/suit.dmi similarity index 100% rename from yogstation/icons/mob/suit.dmi rename to yogstation/icons/mob/clothing/suit/suit.dmi diff --git a/yogstation/icons/mob/uniform.dmi b/yogstation/icons/mob/clothing/uniform/uniform.dmi similarity index 100% rename from yogstation/icons/mob/uniform.dmi rename to yogstation/icons/mob/clothing/uniform/uniform.dmi 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