diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 486905e09db..8c4be2d99a2 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -1523,6 +1523,7 @@ /obj/item/bedsheet/dorms{ dir = 1 }, +/obj/item/pillow/random, /turf/open/floor/wood, /area/station/commons/dorms) "aqW" = ( @@ -56637,6 +56638,7 @@ /obj/item/bedsheet/dorms, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/landmark/start/hangover, +/obj/item/pillow/random, /turf/open/floor/wood, /area/station/commons/dorms) "nKA" = ( @@ -60482,6 +60484,7 @@ /obj/structure/bed, /obj/item/bedsheet/dorms, /obj/machinery/status_display/evac/directional/east, +/obj/item/pillow/random, /turf/open/floor/wood, /area/station/commons/dorms) "oLT" = ( @@ -65392,6 +65395,7 @@ dir = 1 }, /obj/machinery/status_display/evac/directional/north, +/obj/item/pillow/random, /turf/open/floor/wood, /area/station/commons/dorms) "pUp" = ( @@ -84456,6 +84460,7 @@ /obj/item/bedsheet/dorms_double, /obj/machinery/status_display/evac/directional/east, /obj/effect/landmark/start/hangover, +/obj/item/pillow/random, /turf/open/floor/wood, /area/station/commons/dorms) "uEv" = ( diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 896dedbd395..b948354da4e 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -6973,6 +6973,7 @@ normaldoorcontrol = 1; specialfunctions = 4 }, +/obj/item/pillow/random, /turf/open/floor/wood, /area/station/commons/dorms) "ccr" = ( @@ -10424,6 +10425,7 @@ normaldoorcontrol = 1; specialfunctions = 4 }, +/obj/item/pillow/random, /turf/open/floor/wood, /area/station/commons/dorms) "dct" = ( @@ -41280,6 +41282,7 @@ normaldoorcontrol = 1; specialfunctions = 4 }, +/obj/item/pillow/random, /turf/open/floor/carpet, /area/station/commons/dorms) "mJX" = ( @@ -45067,6 +45070,7 @@ normaldoorcontrol = 1; specialfunctions = 4 }, +/obj/item/pillow/random, /turf/open/floor/carpet, /area/station/commons/dorms) "nOw" = ( @@ -49570,6 +49574,7 @@ normaldoorcontrol = 1; specialfunctions = 4 }, +/obj/item/pillow/random, /turf/open/floor/carpet, /area/station/commons/dorms) "piI" = ( diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 4eca0ce985a..65cbfe16b44 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -8331,6 +8331,7 @@ specialfunctions = 4 }, /obj/effect/mapping_helpers/broken_floor, +/obj/item/pillow/random, /turf/open/floor/wood, /area/station/commons/locker) "czH" = ( @@ -24844,6 +24845,7 @@ normaldoorcontrol = 1; specialfunctions = 4 }, +/obj/item/pillow/random, /turf/open/floor/wood, /area/station/commons/locker) "hfP" = ( @@ -62542,6 +62544,7 @@ dir = 4 }, /obj/effect/landmark/start/hangover, +/obj/item/pillow/random, /turf/open/floor/wood, /area/station/commons/locker) "rPy" = ( @@ -81554,6 +81557,7 @@ /obj/effect/landmark/start/assistant, /obj/item/bedsheet/dorms, /obj/effect/landmark/start/hangover, +/obj/item/pillow/random, /turf/open/floor/wood, /area/station/commons/locker) "xdv" = ( diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index dd0f670e7bd..4e0f6f2f5c4 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -1146,6 +1146,7 @@ normaldoorcontrol = 1; specialfunctions = 4 }, +/obj/item/pillow/random, /turf/open/floor/carpet, /area/station/commons/dorms) "awt" = ( @@ -3629,6 +3630,7 @@ normaldoorcontrol = 1; specialfunctions = 4 }, +/obj/item/pillow/random, /turf/open/floor/carpet, /area/station/commons/dorms) "bmB" = ( @@ -32197,6 +32199,7 @@ normaldoorcontrol = 1; specialfunctions = 4 }, +/obj/item/pillow/random, /turf/open/floor/wood, /area/station/commons/dorms) "lxm" = ( @@ -50605,6 +50608,7 @@ normaldoorcontrol = 1; specialfunctions = 4 }, +/obj/item/pillow/random, /turf/open/floor/wood, /area/station/commons/dorms) "rUE" = ( @@ -52464,6 +52468,7 @@ normaldoorcontrol = 1; specialfunctions = 4 }, +/obj/item/pillow/random, /turf/open/floor/wood, /area/station/commons/dorms) "sBd" = ( @@ -64718,6 +64723,7 @@ normaldoorcontrol = 1; specialfunctions = 4 }, +/obj/item/pillow/random, /turf/open/floor/carpet, /area/station/commons/dorms) "wND" = ( diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index 7c2873ff9ef..343312782e1 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -3211,14 +3211,6 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron, /area/station/hallway/secondary/service) -"bpU" = ( -/obj/structure/bed{ - dir = 8 - }, -/obj/item/bedsheet/dorms, -/obj/structure/sign/clock/directional/east, -/turf/open/floor/carpet, -/area/station/commons/dorms) "bqg" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -3711,6 +3703,17 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/construction/engineering) +"bzs" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/dorms{ + dir = 4 + }, +/obj/structure/sign/clock/directional/west, +/obj/item/pillow/random, +/turf/open/floor/carpet, +/area/station/commons/dorms) "bzz" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 @@ -6688,6 +6691,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/dorms) +"cvg" = ( +/obj/structure/bed/double, +/obj/item/bedsheet/dorms_double, +/obj/effect/landmark/start/assistant, +/obj/structure/sign/clock/directional/north, +/obj/item/pillow/random, +/turf/open/floor/wood, +/area/station/commons/dorms) "cvw" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -7882,6 +7893,18 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/plating, /area/station/maintenance/solars/starboard) +"cPK" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/dorms{ + dir = 4 + }, +/obj/effect/landmark/start/assistant, +/obj/structure/sign/clock/directional/west, +/obj/item/pillow/random, +/turf/open/floor/carpet, +/area/station/commons/dorms) "cPM" = ( /turf/closed/wall, /area/station/engineering/atmos) @@ -10093,15 +10116,6 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/white, /area/station/science/xenobiology) -"dBQ" = ( -/obj/structure/bed{ - dir = 8 - }, -/obj/item/bedsheet/dorms, -/obj/effect/landmark/start/assistant, -/obj/structure/sign/clock/directional/east, -/turf/open/floor/wood, -/area/station/commons/dorms) "dCd" = ( /turf/open/floor/iron/smooth, /area/station/maintenance/tram/mid) @@ -10945,6 +10959,17 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/plating/airless, /area/station/engineering/supermatter/room) +"dRz" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/dorms{ + dir = 4 + }, +/obj/structure/sign/clock/directional/south, +/obj/item/pillow/random, +/turf/open/floor/carpet, +/area/station/commons/dorms) "dRK" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 10 @@ -13884,15 +13909,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/vacant_room/commissary) -"eUF" = ( -/obj/structure/bed{ - dir = 8 - }, -/obj/item/bedsheet/dorms, -/obj/effect/landmark/start/assistant, -/obj/structure/sign/clock/directional/east, -/turf/open/floor/carpet, -/area/station/commons/dorms) "eUH" = ( /obj/machinery/door/airlock/external{ name = "Labor Camp Shuttle Airlock" @@ -13902,16 +13918,6 @@ }, /turf/open/floor/plating, /area/station/security/processing) -"eUS" = ( -/obj/structure/bed{ - dir = 4 - }, -/obj/item/bedsheet/dorms{ - dir = 4 - }, -/obj/structure/sign/clock/directional/west, -/turf/open/floor/wood, -/area/station/commons/dorms) "eUZ" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 6 @@ -16605,16 +16611,6 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation/entertainment) -"fWG" = ( -/obj/structure/bed{ - dir = 4 - }, -/obj/item/bedsheet/dorms{ - dir = 4 - }, -/obj/structure/sign/clock/directional/west, -/turf/open/floor/carpet, -/area/station/commons/dorms) "fWJ" = ( /obj/effect/turf_decal/trimline/red/filled/line, /obj/effect/turf_decal/trimline/red/filled/corner{ @@ -18109,13 +18105,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/engine, /area/station/engineering/supermatter/room) -"gyH" = ( -/obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, -/obj/effect/landmark/start/assistant, -/obj/structure/sign/clock/directional/north, -/turf/open/floor/wood, -/area/station/commons/dorms) "gyP" = ( /obj/structure/rack, /obj/item/healthanalyzer{ @@ -19892,6 +19881,15 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/tram/right) +"hft" = ( +/obj/structure/bed{ + dir = 8 + }, +/obj/item/bedsheet/dorms, +/obj/structure/sign/clock/directional/east, +/obj/item/pillow/random, +/turf/open/floor/wood, +/area/station/commons/dorms) "hfw" = ( /obj/machinery/light/directional/north, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -21073,16 +21071,6 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/mining, /turf/open/floor/iron, /area/station/cargo/miningdock) -"hEp" = ( -/obj/structure/bed{ - dir = 4 - }, -/obj/item/bedsheet/dorms{ - dir = 4 - }, -/obj/structure/sign/clock/directional/south, -/turf/open/floor/carpet, -/area/station/commons/dorms) "hEz" = ( /obj/effect/turf_decal/sand/plating, /obj/structure/marker_beacon/burgundy, @@ -21314,6 +21302,16 @@ "hHP" = ( /turf/open/floor/iron/dark, /area/station/maintenance/radshelter/civil) +"hHR" = ( +/obj/structure/bed{ + dir = 8 + }, +/obj/item/bedsheet/dorms, +/obj/effect/landmark/start/hangover, +/obj/structure/sign/clock/directional/east, +/obj/item/pillow/random, +/turf/open/floor/wood, +/area/station/commons/dorms) "hIg" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -21688,10 +21686,6 @@ }, /turf/open/floor/iron, /area/station/command/heads_quarters/qm) -"hQy" = ( -/obj/machinery/keycard_auth, -/turf/closed/wall/r_wall, -/area/station/command/bridge) "hQU" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 4 @@ -21764,6 +21758,14 @@ }, /turf/open/floor/catwalk_floor, /area/station/maintenance/tram/mid) +"hRK" = ( +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/obj/effect/landmark/start/hangover, +/obj/structure/sign/clock/directional/south, +/obj/item/pillow/random, +/turf/open/floor/carpet, +/area/station/commons/dorms) "hSf" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -23351,6 +23353,13 @@ }, /turf/open/floor/wood/large, /area/station/service/library) +"iuJ" = ( +/obj/structure/bed/double, +/obj/item/bedsheet/dorms_double, +/obj/structure/sign/clock/directional/north, +/obj/item/pillow/random, +/turf/open/floor/carpet, +/area/station/commons/dorms) "iuM" = ( /obj/structure/table/wood/fancy/royalblue, /obj/machinery/door/window{ @@ -25790,6 +25799,16 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/security/brig) +"jnR" = ( +/obj/structure/bed{ + dir = 8 + }, +/obj/item/bedsheet/dorms, +/obj/effect/landmark/start/assistant, +/obj/structure/sign/clock/directional/east, +/obj/item/pillow/random, +/turf/open/floor/carpet, +/area/station/commons/dorms) "jnU" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -25798,13 +25817,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) -"joe" = ( -/obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, -/obj/effect/landmark/start/hangover, -/obj/structure/sign/clock/directional/north, -/turf/open/floor/wood, -/area/station/commons/dorms) "jof" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 1 @@ -29428,15 +29440,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark, /area/station/command/bridge) -"kBm" = ( -/obj/structure/bed{ - dir = 8 - }, -/obj/item/bedsheet/dorms, -/obj/effect/landmark/start/hangover, -/obj/structure/sign/clock/directional/east, -/turf/open/floor/wood, -/area/station/commons/dorms) "kBo" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -29722,14 +29725,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron, /area/station/maintenance/tram/mid) -"kFW" = ( -/obj/structure/bed{ - dir = 8 - }, -/obj/item/bedsheet/dorms, -/obj/structure/sign/clock/directional/east, -/turf/open/floor/wood, -/area/station/commons/dorms) "kFY" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -32883,6 +32878,16 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/primary/tram/center) +"lLq" = ( +/obj/structure/bed{ + dir = 8 + }, +/obj/item/bedsheet/dorms, +/obj/effect/landmark/start/assistant, +/obj/structure/sign/clock/directional/east, +/obj/item/pillow/random, +/turf/open/floor/wood, +/area/station/commons/dorms) "lLx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -34266,12 +34271,6 @@ /obj/effect/turf_decal/stripes/white/full, /turf/open/floor/iron, /area/station/cargo/lobby) -"mkZ" = ( -/obj/structure/bed/double, -/obj/item/bedsheet/dorms_double, -/obj/structure/sign/clock/directional/north, -/turf/open/floor/carpet, -/area/station/commons/dorms) "mlg" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 6 @@ -39147,13 +39146,6 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) -"nYL" = ( -/obj/structure/bed, -/obj/item/bedsheet/dorms, -/obj/effect/landmark/start/hangover, -/obj/structure/sign/clock/directional/south, -/turf/open/floor/carpet, -/area/station/commons/dorms) "nYP" = ( /obj/machinery/power/smes{ charge = 5e+006 @@ -40321,6 +40313,14 @@ }, /turf/open/floor/iron/dark, /area/station/medical/morgue) +"ouo" = ( +/obj/structure/table/wood, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/item/pillow/random, +/turf/open/floor/carpet, +/area/station/commons/dorms) "oux" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 6 @@ -41443,16 +41443,6 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron, /area/station/maintenance/tram/left) -"oRE" = ( -/obj/item/bedsheet/dorms_double{ - dir = 4 - }, -/obj/structure/bed/double{ - dir = 4 - }, -/obj/structure/sign/clock/directional/north, -/turf/open/floor/carpet, -/area/station/commons/dorms) "oRV" = ( /obj/machinery/firealarm/directional/north, /obj/effect/turf_decal/trimline/green/filled/line, @@ -42203,6 +42193,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, /area/station/security/prison) +"pfm" = ( +/obj/item/bedsheet/dorms_double{ + dir = 4 + }, +/obj/structure/bed/double{ + dir = 4 + }, +/obj/structure/sign/clock/directional/north, +/obj/item/pillow/random, +/turf/open/floor/carpet, +/area/station/commons/dorms) "pfo" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 4 @@ -46375,6 +46376,10 @@ /obj/item/stack/sheet/glass/fifty, /turf/open/floor/iron, /area/station/engineering/main) +"qyZ" = ( +/obj/machinery/keycard_auth, +/turf/closed/wall/r_wall, +/area/station/command/bridge) "qza" = ( /turf/closed/wall, /area/station/command/heads_quarters/qm) @@ -52394,16 +52399,6 @@ /obj/item/computer_disk/atmos, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) -"sGu" = ( -/obj/structure/bed/double{ - dir = 4 - }, -/obj/item/bedsheet/dorms_double{ - dir = 4 - }, -/obj/structure/sign/clock/directional/north, -/turf/open/floor/wood, -/area/station/commons/dorms) "sGF" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -56038,6 +56033,17 @@ }, /turf/open/floor/iron, /area/station/science/research) +"tUM" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/dorms{ + dir = 4 + }, +/obj/structure/sign/clock/directional/west, +/obj/item/pillow/random, +/turf/open/floor/wood, +/area/station/commons/dorms) "tVe" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -56657,6 +56663,15 @@ }, /turf/open/floor/iron, /area/station/commons/storage/art) +"ugf" = ( +/obj/structure/bed{ + dir = 8 + }, +/obj/item/bedsheet/dorms, +/obj/structure/sign/clock/directional/east, +/obj/item/pillow/random, +/turf/open/floor/carpet, +/area/station/commons/dorms) "ugh" = ( /obj/effect/turf_decal/siding/thinplating, /obj/effect/turf_decal/siding/thinplating{ @@ -57098,6 +57113,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/hallway/primary/tram/center) +"upb" = ( +/obj/structure/bed/double, +/obj/item/bedsheet/dorms_double, +/obj/effect/landmark/start/hangover, +/obj/structure/sign/clock/directional/north, +/obj/item/pillow/random, +/turf/open/floor/wood, +/area/station/commons/dorms) "upe" = ( /obj/effect/landmark/start/cyborg, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -61073,17 +61096,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/engine, /area/station/science/cytology) -"vMv" = ( -/obj/structure/bed{ - dir = 4 - }, -/obj/item/bedsheet/dorms{ - dir = 4 - }, -/obj/effect/landmark/start/assistant, -/obj/structure/sign/clock/directional/west, -/turf/open/floor/carpet, -/area/station/commons/dorms) "vMx" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -63731,6 +63743,17 @@ /obj/machinery/atmospherics/pipe/smart/simple/green/visible, /turf/open/floor/iron, /area/station/engineering/atmos) +"wJe" = ( +/obj/structure/bed/double{ + dir = 4 + }, +/obj/item/bedsheet/dorms_double{ + dir = 4 + }, +/obj/structure/sign/clock/directional/north, +/obj/item/pillow/random, +/turf/open/floor/wood, +/area/station/commons/dorms) "wJh" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -84949,15 +84972,15 @@ ncF ncF dhe elr -eUS +tUM fOs suR elr -fWG +bzs pKZ oJR elr -eUS +tUM fOs suR elr @@ -84966,11 +84989,11 @@ ujn elr oJR pKZ -vMv +cPK elr suR fOs -eUS +tUM apC apC apC @@ -85231,7 +85254,7 @@ eAS elr xlU dxL -hEp +dRz apC xtu dhe @@ -85488,7 +85511,7 @@ elr elr elr rnD -eix +ouo apC xtu dhe @@ -87515,15 +87538,15 @@ qQq uWr vqV ncF -joe +upb twk smp elr -mkZ +iuJ szo vyR elr -gyH +cvg twk smp apC @@ -88543,15 +88566,15 @@ qQq hXO woH ncF -sGu +wJe twk smp elr -oRE +pfm szo vyR elr -sGu +wJe twk smp apC @@ -90885,7 +90908,7 @@ eAS elr xlU dxL -nYL +hRK apC xtu dhe @@ -91117,15 +91140,15 @@ ncF dhe dhe elr -kBm +hHR fOs dVA elr -eUF +jnR pKZ sjB elr -kFW +hft fOs dVA oTA @@ -91134,11 +91157,11 @@ vwO oTA sjB pKZ -bpU +ugf elr dVA fOs -dBQ +lLq elr apC apC @@ -152253,7 +152276,7 @@ pxi pxi pxi pxi -hQy +qyZ lDK xAQ eTv diff --git a/code/datums/components/bumpattack.dm b/code/datums/components/bumpattack.dm new file mode 100644 index 00000000000..0f7955fb30c --- /dev/null +++ b/code/datums/components/bumpattack.dm @@ -0,0 +1,72 @@ +/** + * Add an auto attack on bump behaviour to item + * valid_inventory_slot: the inventory slot the item could be held in while still bumpattacking with it + * proxy_weapon: the weapon that will gain this behaviour + */ +#define COOLDOWN_BUMP_ATTACK "bump_attack_cooldown" + +/datum/component/bumpattack + dupe_mode = COMPONENT_DUPE_UNIQUE + ///inventory slot that the item could be stored while still being able to attack with it. DO SLOT_HANDS|SLOT_BACK instead of a list for multiple slots + var/valid_inventory_slot + ///whether or not the behaviour would be active on the item + var/active = FALSE + ///the mob handling the item + var/mob/living/wearer + ///the item that will gain this behaviour + var/obj/item/proxy_weapon + ///cool down between each hit + var/attack_cooldown = CLICK_CD_MELEE + +/datum/component/bumpattack/Initialize(valid_inventory_slot, obj/item/proxy_weapon) + if(!isitem(parent)) + return COMPONENT_INCOMPATIBLE + src.valid_inventory_slot = valid_inventory_slot + src.proxy_weapon = proxy_weapon + + return ..() + +/datum/component/bumpattack/RegisterWithParent() + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/check_equip) + RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/check_drop) + +/datum/component/bumpattack/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)) + +/datum/component/bumpattack/proc/check_equip(obj/item/source, mob/living/user, slot) + SIGNAL_HANDLER + if(!user) // iunno, thoroughness + return + if(slot & valid_inventory_slot) + activate(user) + else + deactivate() + +/datum/component/bumpattack/proc/check_drop(datum/source, mob/living/dropper) + SIGNAL_HANDLER + deactivate() + +/datum/component/bumpattack/proc/activate(mob/living/user) + if(!istype(user)) + return + active = TRUE + wearer = user + RegisterSignal(user, COMSIG_LIVING_MOB_BUMP, .proc/check_bump) + +/datum/component/bumpattack/proc/deactivate() + active = FALSE + if(wearer) + UnregisterSignal(wearer, COMSIG_LIVING_MOB_BUMP) + wearer = null + +/datum/component/bumpattack/proc/check_bump(mob/living/bumper, mob/living/target) + SIGNAL_HANDLER + var/obj/item/our_weapon = proxy_weapon || parent + if(!istype(our_weapon)) + CRASH("[our_weapon] somehow failed istype") + if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_BUMP_ATTACK)) + TIMER_COOLDOWN_START(src, COOLDOWN_BUMP_ATTACK, attack_cooldown) + INVOKE_ASYNC(target, /atom.proc/attackby , our_weapon, bumper) + bumper.visible_message(span_danger("[bumper] charges into [target], attacking with [our_weapon]!"), span_danger("You charge into [target], attacking with [our_weapon]!"), vision_distance = COMBAT_MESSAGE_RANGE) + +#undef COOLDOWN_BUMP_ATTACK diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm index 069521982fc..f13f5b8a89d 100644 --- a/code/datums/components/crafting/recipes.dm +++ b/code/datums/components/crafting/recipes.dm @@ -1839,6 +1839,28 @@ qdel(toilet) to_chat(user, span_notice("[user] attaches the flamethrower to the repurposed toilet.")) +/datum/crafting_recipe/pillow_suit + name = "pillow suit" + result = /obj/item/clothing/suit/pillow_suit + time = 2 SECONDS + reqs = list( + /obj/item/stack/sticky_tape = 10, + /obj/item/pillow = 5, + ) + category = CAT_CLOTHING + +/datum/crafting_recipe/pillow_hood + name = "pillow hood" + result = /obj/item/clothing/head/pillow_hood + tool_behaviors = list(TOOL_WIRECUTTER, TOOL_KNIFE) + time = 2 SECONDS + reqs = list( + /obj/item/stack/sticky_tape = 5, + /obj/item/pillow = 1, + ) + category = CAT_CLOTHING + + /datum/crafting_recipe/house_edge name = "House Edge" result = /obj/item/house_edge diff --git a/code/datums/quirks/negative.dm b/code/datums/quirks/negative.dm index 79ab5a0485e..c68e4482575 100644 --- a/code/datums/quirks/negative.dm +++ b/code/datums/quirks/negative.dm @@ -264,6 +264,7 @@ /obj/item/clothing/head/costume/nightcap/red, /obj/item/clothing/under/misc/pj/blue, /obj/item/clothing/head/costume/nightcap/blue, + /obj/item/pillow/random, ) /datum/quirk/hypersensitive diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 6b38d164e9a..1bb5f2716a5 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -450,3 +450,4 @@ armour_penetration = 50 attack_verb_continuous = list("smacks", "strikes", "cracks", "beats") attack_verb_simple = list("smack", "strike", "crack", "beat") + diff --git a/code/game/objects/items/pillow.dm b/code/game/objects/items/pillow.dm new file mode 100644 index 00000000000..d3c09d4d200 --- /dev/null +++ b/code/game/objects/items/pillow.dm @@ -0,0 +1,175 @@ +//Pillow and pillow related items +/obj/item/pillow + name = "pillow" + desc = "A soft and fluffy pillow. You can smack someone with this!" + icon = 'icons/obj/pillow.dmi' + icon_state = "pillow_1_t" + inhand_icon_state = "pillow_t" + lefthand_file = 'icons/mob/inhands/items/pillow_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items/pillow_righthand.dmi' + w_class = WEIGHT_CLASS_NORMAL + damtype = STAMINA + ///change the description based on the pillow tag + var/static/tag_desc = "This one seems to have its tag removed." + ///pillow tag is attached to it + var/obj/item/clothing/neck/pillow_tag/pillow_trophy + ///whoever last use this pillow + var/last_fighter + ///for selecting the various sprite variation, defaults to the blank white pillow + var/variation = 1 + ///for alternating between hard hitting sound vs soft hitting sound + var/hit_sound + +/obj/item/pillow/Initialize(mapload) + . = ..() + if(!pillow_trophy) + pillow_trophy = new(src) + AddComponent(/datum/component/two_handed, \ + force_unwielded = 5, \ + force_wielded = 10, \ + ) + +/obj/item/pillow/Destroy(force) + . = ..() + QDEL_NULL(pillow_trophy) + +/obj/item/pillow/attack(mob/living/carbon/target_mob, mob/living/user, params) + . = ..() + if(!iscarbon(target_mob)) + return + if(HAS_TRAIT(src, TRAIT_WIELDED)) + user.apply_damage(5, STAMINA) // when hitting with such force we should prolly be getting tired too + hit_sound = 'sound/items/pillow_hit2.ogg' + else + hit_sound = 'sound/items/pillow_hit.ogg' + last_fighter = user + playsound(user, hit_sound, 80) //the basic 50 vol is barely audible + +/obj/item/pillow/attack_secondary(mob/living/carbon/victim, mob/living/user, params) + . = ..() + if(!istype(victim)) + return + if(victim.wear_mask || !user.get_bodypart(BODY_ZONE_HEAD)) + return + if(HAS_TRAIT(user, TRAIT_PACIFISM)) + to_chat(user, span_notice("You can't bring yourself to harm [victim]")) + return + if(victim.body_position || user.grab_state >= GRAB_AGGRESSIVE) + user.visible_message("[user] starts to smother [victim]", span_notice("You begin smothering [victim]"), vision_distance = COMBAT_MESSAGE_RANGE) + smothering(user, victim) + +/obj/item/pillow/proc/smothering(mob/living/carbon/user, mob/living/carbon/victim) + while(victim) + if(victim.body_position == FALSE && user.grab_state <= GRAB_NECK) + break + if(!do_after(user, 1 SECONDS, victim)) + break + victim.losebreath += 1 + victim.visible_message("[victim] manages to escape being smothered!", span_notice("You break free!"), vision_distance = COMBAT_MESSAGE_RANGE) + +/obj/item/pillow/attackby(obj/item/attacking_item, mob/user, params) + . = ..() + if(!pillow_trophy && istype(attacking_item, /obj/item/clothing/neck/pillow_tag)) + user.transferItemToLoc(attacking_item, src) + pillow_trophy = attacking_item + balloon_alert(user, "honor reclaimed!") + update_appearance() + else + balloon_alert(user, "tag is intact.") + return + +/obj/item/pillow/examine(mob/user) + . = ..() + . += span_notice("There's more information below, you can look again to take a closer look...") + +/obj/item/pillow/examine_more(mob/user) + . = ..() + . += span_notice("Alt-click to remove the tag!") + +/obj/item/pillow/AltClick(mob/user) + . = ..() + if(!pillow_trophy) + balloon_alert(user, "no tag!") + return + balloon_alert(user, span_notice("removing tag...")) + if(!do_after(user, 2 SECONDS, src)) + return + if(last_fighter) + pillow_trophy.desc = "a pillow tag taken from [last_fighter] after a gruesome pillow fight." + user.put_in_hands(pillow_trophy) + pillow_trophy = null + balloon_alert(user, span_notice("tag removed")) + playsound(user,'sound/items/poster_ripped.ogg', 50) + update_appearance() + +/obj/item/pillow/update_appearance(updates) + . = ..() + if(!pillow_trophy) + desc = "A soft and fluffy pillow. You can smack someone with this! [tag_desc]" + icon_state = "pillow_[variation]" + inhand_icon_state = "pillow_no_t" + else + desc = "A soft and fluffy pillow. You can smack someone with this!" + icon_state = "pillow_[variation]_t" + inhand_icon_state = "pillow_t" + +/obj/item/pillow/random + +/obj/item/pillow/random/Initialize(mapload) + . = ..() + variation = rand(1, 4) + icon_state = "pillow_[variation]_t" + +/obj/item/clothing/suit/pillow_suit + name = "pillow suit" + desc = "Part man, part pillow. All CARNAGE!" + body_parts_covered = CHEST|GROIN|ARMS|LEGS|FEET + cold_protection = CHEST|GROIN|ARMS|LEGS //a pillow suit must be hella warm + allowed = list(/obj/item/pillow) //moar pillow carnage + icon = 'icons/obj/pillow.dmi' + worn_icon = 'icons/mob/clothing/suits/pillow.dmi' + icon_state = "pillow_suit" + armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 75) //fluffy amor + var/obj/item/pillow/unstoppably_plushed + +/obj/item/clothing/suit/pillow_suit/Initialize(mapload) + . = ..() + unstoppably_plushed = new(src) + AddComponent(/datum/component/bumpattack, proxy_weapon = unstoppably_plushed, valid_inventory_slot = ITEM_SLOT_OCLOTHING) + +/obj/item/clothing/suit/pillow_suit/Destroy() + . = ..() + QDEL_NULL(unstoppably_plushed) + +/obj/item/clothing/head/pillow_hood + name = "pillow hood" + desc = "The final piece of the pillow juggernaut" + body_parts_covered = HEAD + icon = 'icons/obj/pillow.dmi' + worn_icon = 'icons/mob/clothing/suits/pillow.dmi' + icon_state = "pillowcase_hat" + body_parts_covered = HEAD + flags_inv = HIDEHAIR|HIDEEARS + armor = list(MELEE = 5, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 75) //fluffy amor + +/obj/item/clothing/neck/pillow_tag + name = "pillow tag" + desc = "A price tag for the pillow. It appears to have space to fill names in." + icon = 'icons/obj/pillow.dmi' + icon_state = "pillow_tag" + worn_icon = 'icons/mob/clothing/neck.dmi' + worn_icon_state = "pillow_tag" + body_parts_covered = NECK + +/obj/item/pillow/clown + name = "clown pillow" + desc = "Daww look at that little clown!" + icon_state = "pillow_5_t" + variation = 5 + +/obj/item/pillow/mime + name = "mime pillow" + desc = "Daww look at that little mime!" + icon_state = "pillow_6_t" + variation = 6 + diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 27abe2999e2..1d22d1f924a 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -430,6 +430,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \ new/datum/stack_recipe("19x19 canvas", /obj/item/canvas/nineteen_nineteen, 3), \ new/datum/stack_recipe("23x19 canvas", /obj/item/canvas/twentythree_nineteen, 4), \ new/datum/stack_recipe("23x23 canvas", /obj/item/canvas/twentythree_twentythree, 5), \ + new/datum/stack_recipe("pillow", /obj/item/pillow, 3), \ )) /obj/item/stack/sheet/cloth diff --git a/icons/mob/clothing/neck.dmi b/icons/mob/clothing/neck.dmi index acd30970cbf..0e744988976 100644 Binary files a/icons/mob/clothing/neck.dmi and b/icons/mob/clothing/neck.dmi differ diff --git a/icons/mob/clothing/suits/pillow.dmi b/icons/mob/clothing/suits/pillow.dmi new file mode 100644 index 00000000000..d1fe8d182a4 Binary files /dev/null and b/icons/mob/clothing/suits/pillow.dmi differ diff --git a/icons/mob/inhands/items/pillow_lefthand.dmi b/icons/mob/inhands/items/pillow_lefthand.dmi new file mode 100644 index 00000000000..af23abae639 Binary files /dev/null and b/icons/mob/inhands/items/pillow_lefthand.dmi differ diff --git a/icons/mob/inhands/items/pillow_righthand.dmi b/icons/mob/inhands/items/pillow_righthand.dmi new file mode 100644 index 00000000000..3508e9e3e04 Binary files /dev/null and b/icons/mob/inhands/items/pillow_righthand.dmi differ diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi index c9e80285dc6..edff5a54f1e 100644 Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ diff --git a/icons/obj/pillow.dmi b/icons/obj/pillow.dmi new file mode 100644 index 00000000000..b086d56b125 Binary files /dev/null and b/icons/obj/pillow.dmi differ diff --git a/sound/items/pillow_hit.ogg b/sound/items/pillow_hit.ogg new file mode 100644 index 00000000000..600068ce98c Binary files /dev/null and b/sound/items/pillow_hit.ogg differ diff --git a/sound/items/pillow_hit2.ogg b/sound/items/pillow_hit2.ogg new file mode 100644 index 00000000000..a7961166bd5 Binary files /dev/null and b/sound/items/pillow_hit2.ogg differ diff --git a/tgstation.dme b/tgstation.dme index cad446112ce..74a4a19ff6c 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -777,6 +777,7 @@ #include "code\datums\components\blood_walk.dm" #include "code\datums\components\bloodysoles.dm" #include "code\datums\components\boomerang.dm" +#include "code\datums\components\bumpattack.dm" #include "code\datums\components\butchering.dm" #include "code\datums\components\caltrop.dm" #include "code\datums\components\chasm.dm" @@ -1628,6 +1629,7 @@ #include "code\game\objects\items\paint.dm" #include "code\game\objects\items\paiwire.dm" #include "code\game\objects\items\pet_carrier.dm" +#include "code\game\objects\items\pillow.dm" #include "code\game\objects\items\pinpointer.dm" #include "code\game\objects\items\pitchfork.dm" #include "code\game\objects\items\plushes.dm"