diff --git a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm index 99f7f19621..c64a73eada 100644 --- a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm @@ -509,7 +509,9 @@ /obj/machinery/button/door{ id = "a3"; name = "privacy button"; - pixel_y = -24 + normaldoorcontrol = 1; + pixel_y = -24; + specialfunctions = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/wood, @@ -557,7 +559,9 @@ /obj/machinery/button/door{ id = "a4"; name = "privacy button"; - pixel_y = -24 + normaldoorcontrol = 1; + pixel_y = -24; + specialfunctions = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/wood, @@ -605,7 +609,9 @@ /obj/machinery/button/door{ id = "a5"; name = "privacy button"; - pixel_y = -24 + normaldoorcontrol = 1; + pixel_y = -24; + specialfunctions = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/wood, @@ -653,7 +659,9 @@ /obj/machinery/button/door{ id = "a6"; name = "privacy button"; - pixel_y = -24 + normaldoorcontrol = 1; + pixel_y = -24; + specialfunctions = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/wood, @@ -1097,7 +1105,9 @@ /obj/machinery/button/door{ id = "a2"; name = "privacy button"; - pixel_y = 24 + normaldoorcontrol = 1; + pixel_y = 24; + specialfunctions = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/wood, @@ -1159,7 +1169,9 @@ /obj/machinery/button/door{ id = "a1"; name = "privacy button"; - pixel_y = 24 + normaldoorcontrol = 1; + pixel_y = 24; + specialfunctions = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/wood, @@ -1807,7 +1819,9 @@ /area/ruin/space/has_grav/hotel/bar) "fE" = ( /obj/machinery/vending/boozeomat{ - req_access_txt = "200" + extended_inventory = 1; + req_access_txt = "200"; + scan_id = 0 }, /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -4496,7 +4510,6 @@ /turf/closed/wall, /area/ruin/space/has_grav/hotel/custodial) "me" = ( -/mob/living/simple_animal/bot/cleanbot, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -4507,6 +4520,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/mob/living/simple_animal/bot/cleanbot, /turf/open/floor/plasteel, /area/ruin/space/has_grav/hotel/custodial) "mf" = ( diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index de28ff59fa..c764adca16 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -36664,14 +36664,11 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "bHT" = ( -/obj/machinery/door/poddoor/preopen{ - id = "medpriv1"; - name = "privacy door" - }, /obj/effect/spawner/structure/window, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/door/firedoor, /turf/open/floor/plating, /area/medical/medbay/central) "bHU" = ( @@ -37987,22 +37984,23 @@ /turf/open/floor/plating, /area/maintenance/aft) "bKM" = ( -/obj/machinery/vending/wallmed{ - pixel_y = 28 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, +/obj/machinery/airalarm{ + pixel_y = 24 + }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bKN" = ( /obj/machinery/door/airlock/medical{ - name = "Patient Room 2"; + name = "Apothecary"; req_access_txt = "5" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/machinery/door/firedoor, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bKO" = ( @@ -38456,24 +38454,17 @@ /turf/open/floor/plating, /area/maintenance/aft) "bLU" = ( -/obj/structure/table, -/obj/item/folder/white, -/obj/item/clothing/neck/stethoscope, /obj/machinery/light/small{ dir = 8 }, +/obj/machinery/chem_dispenser, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bLV" = ( -/obj/structure/closet/secure_closet/personal/patient, -/obj/machinery/button/door{ - id = "medpriv1"; - name = "Privacy Shutters"; - pixel_y = -25 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/chem_heater, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bLW" = ( @@ -56742,6 +56733,16 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, /area/science/circuit) +"fTg" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/firealarm{ + dir = 2; + pixel_y = 24 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "gbq" = ( /obj/structure/cable{ icon_state = "4-8" @@ -57499,6 +57500,10 @@ /obj/structure/table/wood, /turf/open/floor/wood, /area/maintenance/bar) +"tRe" = ( +/obj/machinery/chem_master, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "tRF" = ( /obj/machinery/light/small{ dir = 8 @@ -95728,8 +95733,8 @@ bof bof bof bJE -bof -bof +bJE +bJE bNd bIJ bPo @@ -95985,7 +95990,7 @@ bof bGT bIo bof -bIo +tRe bLU bNd bII @@ -96499,7 +96504,7 @@ bof bGU bqQ bof -bCR +fTg bLV bNd bOm diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index bd159e4e9c..c8e551b9fe 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -101814,6 +101814,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 1 }, +/obj/effect/landmark/start/medical_doctor, /turf/open/floor/plasteel/white, /area/medical/genetics/cloning) "dpo" = ( @@ -126296,6 +126297,20 @@ /obj/machinery/atmospherics/pipe/simple/general/visible, /turf/closed/wall/r_wall, /area/science/mixing) +"eLw" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/chem_dispenser, +/turf/open/floor/plasteel/dark, +/area/medical/medbay/central) "eMD" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ @@ -126355,6 +126370,22 @@ }, /turf/open/floor/plasteel/white, /area/science/misc_lab) +"fhE" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical{ + name = "Apothecary" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/medical/medbay/central) "fno" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -126584,6 +126615,13 @@ /obj/item/restraints/handcuffs/fake, /turf/open/floor/plating, /area/crew_quarters/abandoned_gambling_den) +"hSf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/medical/medbay/central) "iaF" = ( /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, @@ -126593,6 +126631,18 @@ /obj/item/reagent_containers/glass/beaker, /turf/open/floor/plating, /area/crew_quarters/abandoned_gambling_den) +"iwL" = ( +/obj/machinery/status_display{ + pixel_x = 32 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "ixL" = ( /obj/structure/sign/warning/vacuum{ pixel_x = 32 @@ -126743,6 +126793,23 @@ }, /turf/open/floor/plasteel, /area/medical/morgue) +"jOE" = ( +/obj/machinery/newscaster{ + pixel_x = 32 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/chem_master, +/turf/open/floor/plasteel/dark, +/area/medical/medbay/central) "jRy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -126853,6 +126920,22 @@ }, /turf/open/floor/engine, /area/science/mixing) +"lzF" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/firealarm{ + pixel_y = 26 + }, +/turf/open/floor/plasteel/dark, +/area/medical/medbay/central) "lEl" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -126909,6 +126992,23 @@ }, /turf/open/floor/plating, /area/construction/mining/aux_base) +"lTx" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/table, +/obj/machinery/airalarm{ + pixel_y = 22 + }, +/turf/open/floor/plasteel/dark, +/area/medical/medbay/central) "lXF" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -127259,6 +127359,16 @@ dir = 10 }, /area/science/misc_lab) +"tRT" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/chem_heater, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "upk" = ( /obj/machinery/door/airlock/public/glass{ name = "Holodeck Access" @@ -174190,9 +174300,9 @@ dfL dCM dEb cPy -dfL -dCM -dEb +cNz +fhE +hSf cPy dhs dMS @@ -174447,7 +174557,7 @@ dBo cSF dEc cPy -dBo +lzF cSF dEc cPy @@ -174961,8 +175071,8 @@ dBq dCN dEe cPy -dBq -dCN +lTx +cSK dEe cPy cMg @@ -175218,9 +175328,9 @@ dBr dCO dEf cPy -dBr +eLw dCO -dEf +tRT cPy dLo dMW @@ -175475,9 +175585,9 @@ dBs dCP dEg cPy -dBs +jOE dCP -dEg +iwL cPy dLp dMV diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 228700580a..78ffa3881c 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -64367,6 +64367,7 @@ /obj/structure/cable/yellow{ icon_state = "1-8" }, +/obj/effect/landmark/start/medical_doctor, /turf/open/floor/plasteel/white, /area/medical/patients_rooms/room_a) "cum" = ( @@ -65463,24 +65464,9 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "cwo" = ( -/obj/structure/table, -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = -3 - }, -/obj/item/clothing/neck/stethoscope, /obj/machinery/light/small{ dir = 8 }, -/obj/machinery/power/apc{ - dir = 8; - name = "Patient Room B APC"; - areastring = "/area/medical/patients_rooms/room_b"; - pixel_x = -26 - }, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -65493,31 +65479,24 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/chem_dispenser{ + layer = 2.7 + }, /turf/open/floor/plasteel/white, -/area/medical/patients_rooms/room_b) +/area/medical/medbay/aft) "cwp" = ( /obj/structure/chair/office/light{ dir = 8 }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/obj/effect/landmark/start/medical_doctor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/vending/wallmed{ - pixel_y = 28 +/obj/machinery/airalarm{ + pixel_y = 23 }, /turf/open/floor/plasteel/white, -/area/medical/patients_rooms/room_b) +/area/medical/medbay/aft) "cwq" = ( -/obj/structure/closet/secure_closet/personal/patient, -/obj/machinery/button/door{ - id = "isolb"; - name = "Privacy Shutters"; - pixel_y = 25 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -65525,19 +65504,19 @@ /obj/effect/turf_decal/tile/blue{ dir = 4 }, +/obj/machinery/chem_heater{ + pixel_x = 4 + }, /turf/open/floor/plasteel/white, -/area/medical/patients_rooms/room_b) +/area/medical/medbay/aft) "cwr" = ( -/obj/effect/spawner/structure/window, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/door/poddoor/preopen{ - id = "isolb"; - name = "privacy shutters" - }, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/firedoor, /turf/open/floor/plating, -/area/medical/patients_rooms/room_b) +/area/medical/medbay/aft) "cws" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -65962,65 +65941,53 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "cxe" = ( -/obj/structure/bed, -/obj/item/bedsheet/medical, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -23 - }, /obj/effect/turf_decal/tile/blue{ dir = 1 }, /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/chem_master, /turf/open/floor/plasteel/white, -/area/medical/patients_rooms/room_b) +/area/medical/medbay/aft) "cxf" = ( -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, /turf/open/floor/plasteel/white, -/area/medical/patients_rooms/room_b) +/area/medical/medbay/aft) "cxg" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ dir = 4 }, /turf/open/floor/plasteel/white, -/area/medical/patients_rooms/room_b) +/area/medical/medbay/aft) "cxh" = ( -/obj/machinery/door/airlock/medical{ - name = "Patient Room B"; - req_access_txt = "5" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/machinery/door/airlock/medical/glass{ + name = "Apothecary"; + req_access_txt = "5" + }, +/obj/machinery/door/firedoor, /turf/open/floor/plasteel/white, -/area/medical/patients_rooms/room_b) +/area/medical/medbay/aft) "cxi" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, /obj/effect/turf_decal/tile/blue{ dir = 1 }, @@ -66033,9 +66000,6 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, /turf/open/floor/plasteel/white, /area/medical/medbay/aft) "cxk" = ( @@ -105762,8 +105726,8 @@ css dux dux dux -dux -dux +cxU +cxU cxU cyO czP diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 15e8048926..7cab82149d 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -79,6 +79,8 @@ #define ATTACK_EFFECT_SMASH "smash" #define ATTACK_EFFECT_CLAW "claw" #define ATTACK_EFFECT_DISARM "disarm" +#define ATTACK_EFFECT_ASS_SLAP "ass_slap" +#define ATTACK_EFFECT_FACE_SLAP "face_slap" #define ATTACK_EFFECT_BITE "bite" #define ATTACK_EFFECT_MECHFIRE "mech_fire" #define ATTACK_EFFECT_MECHTOXIN "mech_toxin" diff --git a/code/__DEFINES/footsteps.dm b/code/__DEFINES/footsteps.dm index e66d518644..ef96b83cc8 100644 --- a/code/__DEFINES/footsteps.dm +++ b/code/__DEFINES/footsteps.dm @@ -6,6 +6,14 @@ #define FOOTSTEP_GRASS "grass" #define FOOTSTEP_WATER "water" #define FOOTSTEP_LAVA "lava" +//barefoot sounds +#define FOOTSTEP_WOOD_BAREFOOT "woodbarefoot" +#define FOOTSTEP_WOOD_CLAW "woodclaw" +#define FOOTSTEP_HARD_BAREFOOT "hardbarefoot" +#define FOOTSTEP_HARD_CLAW "hardclaw" +#define FOOTSTEP_CARPET_BAREFOOT "carpetbarefoot" +//misc footstep sounds +#define FOOTSTEP_GENERIC_HEAVY "heavy" /* @@ -63,4 +71,104 @@ GLOBAL_LIST_INIT(footstep, list( 'sound/effects/footstep/lava1.ogg', 'sound/effects/footstep/lava2.ogg', 'sound/effects/footstep/lava3.ogg'), 100, 0), -)) \ No newline at end of file +)) + +//bare footsteps lists +GLOBAL_LIST_INIT(barefootstep, list( + FOOTSTEP_WOOD_BAREFOOT = list(list( + 'sound/effects/footstep/woodbarefoot1.ogg', + 'sound/effects/footstep/woodbarefoot2.ogg', + 'sound/effects/footstep/woodbarefoot3.ogg', + 'sound/effects/footstep/woodbarefoot4.ogg', + 'sound/effects/footstep/woodbarefoot5.ogg'), 80, -1), + FOOTSTEP_HARD_BAREFOOT = list(list( + 'sound/effects/footstep/hardbarefoot1.ogg', + 'sound/effects/footstep/hardbarefoot2.ogg', + 'sound/effects/footstep/hardbarefoot3.ogg', + 'sound/effects/footstep/hardbarefoot4.ogg', + 'sound/effects/footstep/hardbarefoot5.ogg'), 80, -1), + FOOTSTEP_CARPET_BAREFOOT = list(list( + 'sound/effects/footstep/carpetbarefoot1.ogg', + 'sound/effects/footstep/carpetbarefoot2.ogg', + 'sound/effects/footstep/carpetbarefoot3.ogg', + 'sound/effects/footstep/carpetbarefoot4.ogg', + 'sound/effects/footstep/carpetbarefoot5.ogg'), 75, -2), + FOOTSTEP_SAND = list(list( + 'sound/effects/footstep/asteroid1.ogg', + 'sound/effects/footstep/asteroid2.ogg', + 'sound/effects/footstep/asteroid3.ogg', + 'sound/effects/footstep/asteroid4.ogg', + 'sound/effects/footstep/asteroid5.ogg'), 75, 0), + FOOTSTEP_GRASS = list(list( + 'sound/effects/footstep/grass1.ogg', + 'sound/effects/footstep/grass2.ogg', + 'sound/effects/footstep/grass3.ogg', + 'sound/effects/footstep/grass4.ogg'), 75, 0), + FOOTSTEP_WATER = list(list( + 'sound/effects/footstep/water1.ogg', + 'sound/effects/footstep/water2.ogg', + 'sound/effects/footstep/water3.ogg', + 'sound/effects/footstep/water4.ogg'), 100, 1), + FOOTSTEP_LAVA = list(list( + 'sound/effects/footstep/lava1.ogg', + 'sound/effects/footstep/lava2.ogg', + 'sound/effects/footstep/lava3.ogg'), 100, 0), +)) + +//claw footsteps lists +GLOBAL_LIST_INIT(clawfootstep, list( + FOOTSTEP_WOOD_CLAW = list(list( + 'sound/effects/footstep/woodclaw1.ogg', + 'sound/effects/footstep/woodclaw2.ogg', + 'sound/effects/footstep/woodclaw3.ogg', + 'sound/effects/footstep/woodclaw2.ogg', + 'sound/effects/footstep/woodclaw1.ogg'), 90, 1), + FOOTSTEP_HARD_CLAW = list(list( + 'sound/effects/footstep/hardclaw1.ogg', + 'sound/effects/footstep/hardclaw2.ogg', + 'sound/effects/footstep/hardclaw3.ogg', + 'sound/effects/footstep/hardclaw4.ogg', + 'sound/effects/footstep/hardclaw1.ogg'), 90, 1), + FOOTSTEP_CARPET_BAREFOOT = list(list( + 'sound/effects/footstep/carpetbarefoot1.ogg', + 'sound/effects/footstep/carpetbarefoot2.ogg', + 'sound/effects/footstep/carpetbarefoot3.ogg', + 'sound/effects/footstep/carpetbarefoot4.ogg', + 'sound/effects/footstep/carpetbarefoot5.ogg'), 75, -2), + FOOTSTEP_SAND = list(list( + 'sound/effects/footstep/asteroid1.ogg', + 'sound/effects/footstep/asteroid2.ogg', + 'sound/effects/footstep/asteroid3.ogg', + 'sound/effects/footstep/asteroid4.ogg', + 'sound/effects/footstep/asteroid5.ogg'), 75, 0), + FOOTSTEP_GRASS = list(list( + 'sound/effects/footstep/grass1.ogg', + 'sound/effects/footstep/grass2.ogg', + 'sound/effects/footstep/grass3.ogg', + 'sound/effects/footstep/grass4.ogg'), 75, 0), + FOOTSTEP_WATER = list(list( + 'sound/effects/footstep/water1.ogg', + 'sound/effects/footstep/water2.ogg', + 'sound/effects/footstep/water3.ogg', + 'sound/effects/footstep/water4.ogg'), 100, 1), + FOOTSTEP_LAVA = list(list( + 'sound/effects/footstep/lava1.ogg', + 'sound/effects/footstep/lava2.ogg', + 'sound/effects/footstep/lava3.ogg'), 100, 0), +)) + +//heavy footsteps list +GLOBAL_LIST_INIT(heavyfootstep, list( + FOOTSTEP_GENERIC_HEAVY = list(list( + 'sound/effects/footstep/heavy1.ogg', + 'sound/effects/footstep/heavy2.ogg'), 100, 2), + FOOTSTEP_WATER = list(list( + 'sound/effects/footstep/water1.ogg', + 'sound/effects/footstep/water2.ogg', + 'sound/effects/footstep/water3.ogg', + 'sound/effects/footstep/water4.ogg'), 100, 2), + FOOTSTEP_LAVA = list(list( + 'sound/effects/footstep/lava1.ogg', + 'sound/effects/footstep/lava2.ogg', + 'sound/effects/footstep/lava3.ogg'), 100, 0), +)) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 15eaadb2f2..8ff40c3ef9 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -67,7 +67,7 @@ #define islarva(A) (istype(A, /mob/living/carbon/alien/larva)) -#define isalienadult(A) (istype(A, /mob/living/carbon/alien/humanoid)) +#define isalienadult(A) (istype(A, /mob/living/carbon/alien/humanoid) || istype(A, /mob/living/simple_animal/hostile/alien)) #define isalienhunter(A) (istype(A, /mob/living/carbon/alien/humanoid/hunter)) @@ -123,6 +123,47 @@ #define isclown(A) (istype(A, /mob/living/simple_animal/hostile/retaliate/clown)) +GLOBAL_LIST_INIT(shoefootmob, typecacheof(list( + /mob/living/carbon/human/, + /mob/living/simple_animal/cow, + /mob/living/simple_animal/hostile/cat_butcherer, + /mob/living/simple_animal/hostile/faithless, + /mob/living/simple_animal/hostile/nanotrasen, + /mob/living/simple_animal/hostile/pirate, + /mob/living/simple_animal/hostile/russian, + /mob/living/simple_animal/hostile/syndicate, + /mob/living/simple_animal/hostile/wizard, + /mob/living/simple_animal/hostile/zombie, + /mob/living/simple_animal/hostile/retaliate/clown, + /mob/living/simple_animal/hostile/retaliate/spaceman, + /mob/living/simple_animal/hostile/retaliate/nanotrasenpeace, + /mob/living/simple_animal/hostile/retaliate/goat, + /mob/living/carbon/true_devil, + ))) + +GLOBAL_LIST_INIT(clawfootmob, typecacheof(list( + /mob/living/carbon/alien/humanoid, + /mob/living/simple_animal/hostile/alien, + /mob/living/simple_animal/pet/cat, + /mob/living/simple_animal/pet/dog, + /mob/living/simple_animal/pet/fox, + /mob/living/simple_animal/chicken, + /mob/living/simple_animal/hostile/bear, + /mob/living/simple_animal/hostile/jungle/mega_arachnid + ))) + +GLOBAL_LIST_INIT(barefootmob, typecacheof(list( + /mob/living/carbon/monkey, + /mob/living/simple_animal/pet/penguin, + /mob/living/simple_animal/hostile/gorilla, + /mob/living/simple_animal/hostile/jungle/mook + ))) + +GLOBAL_LIST_INIT(heavyfootmob, typecacheof(list( + /mob/living/simple_animal/hostile/megafauna, + /mob/living/simple_animal/hostile/jungle/leaper + ))) + //Misc mobs #define isobserver(A) (istype(A, /mob/dead/observer)) @@ -136,6 +177,15 @@ #define iseminence(A) (istype(A, /mob/camera/eminence)) +//Footstep helpers +#define isshoefoot(A) (is_type_in_typecache(A, GLOB.shoefootmob)) + +#define isclawfoot(A) (is_type_in_typecache(A, GLOB.clawfootmob)) + +#define isbarefoot(A) (is_type_in_typecache(A, GLOB.barefootmob)) + +#define isheavyfoot(A) (is_type_in_typecache(A, GLOB.heavyfootmob)) + //Objects #define isobj(A) istype(A, /obj) //override the byond proc because it returns true on children of /atom/movable that aren't objs diff --git a/code/__DEFINES/robots.dm b/code/__DEFINES/robots.dm index 9c81305241..0820d63247 100644 --- a/code/__DEFINES/robots.dm +++ b/code/__DEFINES/robots.dm @@ -35,6 +35,7 @@ #define CLEAN_BOT (1<<3) // Cleanbots #define MED_BOT (1<<4) // Medibots #define HONK_BOT (1<<5) // Honkbots & ED-Honks +#define FIRE_BOT (1<<6) // Firebots //AI notification defines #define NEW_BORG 1 diff --git a/code/datums/components/footstep.dm b/code/datums/components/footstep.dm index c93be4dae3..bfcc49f453 100644 --- a/code/datums/components/footstep.dm +++ b/code/datums/components/footstep.dm @@ -1,39 +1,105 @@ -/datum/component/footstep - var/steps = 0 - var/volume - var/e_range - -/datum/component/footstep/Initialize(volume_ = 0.5, e_range_ = -1) - if(!isliving(parent)) - return COMPONENT_INCOMPATIBLE - volume = volume_ - e_range = e_range_ - RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/play_footstep) - -/datum/component/footstep/proc/play_footstep() - var/turf/open/T = get_turf(parent) - if(!istype(T)) - return - var/mob/living/LM = parent - var/v = volume - var/e = e_range - if(!T.footstep || LM.lying || !LM.canmove || LM.resting || LM.buckled || LM.throwing || LM.movement_type & (VENTCRAWLING | FLYING)) - return - if(iscarbon(LM)) - var/mob/living/carbon/C = LM - if(!C.get_bodypart(BODY_ZONE_L_LEG) && !C.get_bodypart(BODY_ZONE_R_LEG)) - return - if(ishuman(C) && C.m_intent == MOVE_INTENT_WALK) - v /= 2 - e -= 5 - steps++ - if(steps >= 3) - steps = 0 - else - return - if(prob(80) && !LM.has_gravity(T)) // don't need to step as often when you hop around - return - playsound(T, pick(GLOB.footstep[T.footstep][1]), - GLOB.footstep[T.footstep][2] * v, - TRUE, - GLOB.footstep[T.footstep][3] + e) +/datum/component/footstep + var/steps = 0 + var/volume + var/e_range + +/datum/component/footstep/Initialize(volume_ = 0.5, e_range_ = -1) + if(!isliving(parent)) + return COMPONENT_INCOMPATIBLE + volume = volume_ + e_range = e_range_ + RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), .proc/play_footstep) + +/datum/component/footstep/proc/play_footstep() + var/turf/open/T = get_turf(parent) + if(!istype(T)) + return + + var/mob/living/LM = parent + var/v = volume + var/e = e_range + if(!T.footstep || LM.buckled || LM.lying || !LM.canmove || LM.resting || LM.buckled || LM.throwing || LM.movement_type & (VENTCRAWLING | FLYING)) + if (LM.lying && !(!T.footstep || LM.movement_type & (VENTCRAWLING | FLYING))) //play crawling sound if we're lying + playsound(T, 'sound/effects/footstep/crawl1.ogg', 15 * v) + return + + if(iscarbon(LM)) + var/mob/living/carbon/C = LM + if(!C.get_bodypart(BODY_ZONE_L_LEG) && !C.get_bodypart(BODY_ZONE_R_LEG)) + return + if(ishuman(C) && C.m_intent == MOVE_INTENT_WALK) + v /= 2 + e -= 5 + steps++ + + if(steps >= 3) + steps = 0 + + else + return + + if(prob(80) && !LM.has_gravity(T)) // don't need to step as often when you hop around + return + + //begin playsound shenanigans// + + //for barefooted non-clawed mobs like monkeys + if(isbarefoot(LM)) + playsound(T, pick(GLOB.barefootstep[T.barefootstep][1]), + GLOB.barefootstep[T.barefootstep][2] * v, + TRUE, + GLOB.barefootstep[T.barefootstep][3] + e) + return + + //for xenomorphs, dogs, and other clawed mobs + if(isclawfoot(LM)) + if(isalienadult(LM)) //xenos are stealthy and get quieter footsteps + v /= 3 + e -= 5 + + playsound(T, pick(GLOB.clawfootstep[T.clawfootstep][1]), + GLOB.clawfootstep[T.clawfootstep][2] * v, + TRUE, + GLOB.clawfootstep[T.clawfootstep][3] + e) + return + + //for megafauna and other large and imtimidating mobs such as the bloodminer + if(isheavyfoot(LM)) + playsound(T, pick(GLOB.heavyfootstep[T.heavyfootstep][1]), + GLOB.heavyfootstep[T.heavyfootstep][2] * v, + TRUE, + GLOB.heavyfootstep[T.heavyfootstep][3] + e) + return + + //for slimes + if(isslime(LM)) + playsound(T, 'sound/effects/footstep/slime1.ogg', 15 * v) + return + + //for (simple) humanoid mobs (clowns, russians, pirates, etc.) + if(isshoefoot(LM)) + if(!ishuman(LM)) + playsound(T, pick(GLOB.footstep[T.footstep][1]), + GLOB.footstep[T.footstep][2] * v, + TRUE, + GLOB.footstep[T.footstep][3] + e) + return + if(ishuman(LM)) //for proper humans, they're special + var/mob/living/carbon/human/H = LM + var/feetCover = (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)) || (H.w_uniform && (H.w_uniform.body_parts_covered & FEET)) + + if (H.dna.features["taur"] == "Naga" || H.dna.features["taur"] == "Tentacle") //are we a naga or tentacle taur creature + playsound(T, 'sound/effects/footstep/crawl1.ogg', 15 * v) + return + + if(H.shoes || feetCover) //are we wearing shoes + playsound(T, pick(GLOB.footstep[T.footstep][1]), + GLOB.footstep[T.footstep][2] * v, + TRUE, + GLOB.footstep[T.footstep][3] + e) + + if((!H.shoes && !feetCover)) //are we NOT wearing shoes + playsound(T, pick(GLOB.barefootstep[T.barefootstep][1]), + GLOB.barefootstep[T.barefootstep][2] * v, + TRUE, + GLOB.barefootstep[T.barefootstep][3] + e) \ No newline at end of file diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 5868ef4b1d..ba4a0ffae8 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -713,12 +713,12 @@ req_defib = FALSE /////////////////////////////////////////// -/////////Dedibrillators Disks////////////// +/////////Defibrillator Disks////////////// /////////////////////////////////////////// /obj/item/disk/medical name = "Defibrillator Upgrade Disk" - desc = "A blank defibrillator disk..." + desc = "A blank upgrade disk, made for a defibrillator" icon = 'modular_citadel/icons/obj/defib_disks.dmi' icon_state = "upgrade_disk" item_state = "heal_disk" @@ -726,25 +726,25 @@ /obj/item/disk/medical/defib_heal name = "Defibrillator Healing Disk" - desc = "A disk alowing for grater amounts of healing" + desc = "An upgrade which increases the healing power of the defibrillator" icon_state = "heal_disk" materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 6000, MAT_SILVER = 6000) /obj/item/disk/medical/defib_shock name = "Defibrillator Anti-Shock Disk" - desc = "A disk that helps agains shocking anyone, other then the intented target" + desc = "A safety upgrade that guarantees only the patient will get shocked" icon_state = "zap_disk" materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 6000, MAT_SILVER = 6000) /obj/item/disk/medical/defib_decay name = "Defibrillator Body-Decay Extender Disk" - desc = "A disk that helps defibrillators revive the longer decayed" + desc = "An upgrade allowing the defibrillator to work on more decayed bodies" icon_state = "body_disk" materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 16000, MAT_SILVER = 6000, MAT_TITANIUM = 2000) /obj/item/disk/medical/defib_speed - name = "Defibrllator Pre-Primer Disk" - desc = "A disk that cuts the time charg time in half for defibrillator use" + name = "Defibrillator Fast Charge Disk" + desc = "An upgrade to the defibrillator capacitors, which let it charge faster" icon_state = "fast_disk" materials = list(MAT_METAL=16000, MAT_GLASS = 8000, MAT_GOLD = 26000, MAT_SILVER = 26000) diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index fc268e2b3e..1a733fbff2 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -31,7 +31,7 @@ var/remote_door_id = "" - var/bot_access_flags = 0 //Bit flags. Selection: SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT + var/bot_access_flags = 0 //Bit flags. Selection: SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT var/spam_enabled = 0 //Enables "Send to All" Option var/obj/item/pda/host_pda = null @@ -65,7 +65,7 @@ name = "\improper BreatheDeep cartridge" icon_state = "cart-a" access = CART_ATMOS | CART_DRONEPHONE - bot_access_flags = FLOOR_BOT + bot_access_flags = FLOOR_BOT | FIRE_BOT /obj/item/cartridge/medical name = "\improper Med-U cartridge" @@ -112,7 +112,7 @@ /obj/item/cartridge/roboticist name = "\improper B.O.O.P. Remote Control cartridge" desc = "Packed with heavy duty triple-bot interlink!" - bot_access_flags = FLOOR_BOT | CLEAN_BOT | MED_BOT + bot_access_flags = FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT access = CART_DRONEPHONE /obj/item/cartridge/signal @@ -160,7 +160,7 @@ name = "\improper Power-On DELUXE cartridge" icon_state = "cart-ce" access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_ENGINE | CART_ATMOS | CART_DRONEPHONE - bot_access_flags = FLOOR_BOT + bot_access_flags = FLOOR_BOT | FIRE_BOT /obj/item/cartridge/cmo name = "\improper Med-U DELUXE cartridge" @@ -172,7 +172,7 @@ name = "\improper Signal Ace DELUXE cartridge" icon_state = "cart-rd" access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_REAGENT_SCANNER | CART_ATMOS | CART_DRONEPHONE - bot_access_flags = FLOOR_BOT | CLEAN_BOT | MED_BOT + bot_access_flags = FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT /obj/item/cartridge/rd/Initialize() . = ..() @@ -183,7 +183,7 @@ desc = "Now with 350% more value!" //Give the Captain...EVERYTHING! (Except Mime, Clown, and Syndie) icon_state = "cart-c" access = ~(CART_CLOWN | CART_MIME | CART_REMOTE_DOOR) - bot_access_flags = SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT + bot_access_flags = SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT | FIRE_BOT spam_enabled = 1 /obj/item/cartridge/captain/New() diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm index e0d6b553fd..ddbc668c05 100644 --- a/code/game/objects/items/extinguisher.dm +++ b/code/game/objects/items/extinguisher.dm @@ -71,6 +71,10 @@ sprite_name = "foam_extinguisher" precision = TRUE +/obj/item/extinguisher/proc/refill() + create_reagents(max_water, AMOUNT_VISIBLE) + reagents.add_reagent(chem, max_water) + /obj/item/extinguisher/suicide_act(mob/living/carbon/user) if (!safety && (reagents.total_volume >= 1)) user.visible_message("[user] puts the nozzle to [user.p_their()] mouth. It looks like [user.p_theyre()] trying to extinguish the spark of life!") @@ -183,7 +187,7 @@ W.reagents = R R.my_atom = W reagents.trans_to(W,1) - + //Make em move dat ass, hun addtimer(CALLBACK(src, /obj/item/extinguisher/proc/move_particles, water_particles), 2) @@ -243,3 +247,12 @@ user.visible_message("[user] empties out \the [src] onto the floor using the release valve.", "You quietly empty out \the [src] using its release valve.") +//firebot assembly +/obj/item/extinguisher/attackby(obj/O, mob/user, params) + if(istype(O, /obj/item/bodypart/l_arm/robot) || istype(O, /obj/item/bodypart/r_arm/robot)) + to_chat(user, "You add [O] to [src].") + qdel(O) + qdel(src) + user.put_in_hands(new /obj/item/bot_assembly/firebot) + else + ..() diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm index 53fb218755..673337518d 100644 --- a/code/game/objects/items/tanks/jetpack.dm +++ b/code/game/objects/items/tanks/jetpack.dm @@ -1,238 +1,239 @@ -/obj/item/tank/jetpack - name = "jetpack (empty)" - desc = "A tank of compressed gas for use as propulsion in zero-gravity areas. Use with caution." - icon_state = "jetpack" - item_state = "jetpack" - lefthand_file = 'icons/mob/inhands/equipment/jetpacks_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/jetpacks_righthand.dmi' - w_class = WEIGHT_CLASS_BULKY - distribute_pressure = ONE_ATMOSPHERE * O2STANDARD - actions_types = list(/datum/action/item_action/set_internals, /datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization) - var/gas_type = /datum/gas/oxygen - var/on = FALSE - var/stabilizers = FALSE - var/full_speed = TRUE // If the jetpack will have a speedboost in space/nograv or not - var/datum/effect_system/trail_follow/ion/ion_trail - -/obj/item/tank/jetpack/New() - ..() - if(gas_type) - air_contents.assert_gas(gas_type) - air_contents.gases[gas_type][MOLES] = (6 * ONE_ATMOSPHERE) * volume / (R_IDEAL_GAS_EQUATION * T20C) - - ion_trail = new - ion_trail.set_up(src) - -/obj/item/tank/jetpack/ui_action_click(mob/user, action) - if(istype(action, /datum/action/item_action/toggle_jetpack)) - cycle(user) - else if(istype(action, /datum/action/item_action/jetpack_stabilization)) - if(on) - stabilizers = !stabilizers - to_chat(user, "You turn the jetpack stabilization [stabilizers ? "on" : "off"].") - else - toggle_internals(user) - -/obj/item/tank/jetpack/proc/cycle(mob/user) - if(user.incapacitated()) - return - - if(!on) - turn_on() - to_chat(user, "You turn the jetpack on.") - else - turn_off() - to_chat(user, "You turn the jetpack off.") - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - -/obj/item/tank/jetpack/proc/turn_on() - on = TRUE - icon_state = "[initial(icon_state)]-on" - ion_trail.start() - -/obj/item/tank/jetpack/proc/turn_off() - on = FALSE - stabilizers = FALSE - icon_state = initial(icon_state) - ion_trail.stop() - -/obj/item/tank/jetpack/proc/allow_thrust(num, mob/living/user) - if(!on) - return - if((num < 0.005 || air_contents.total_moles() < num)) - turn_off() - return - - var/datum/gas_mixture/removed = air_contents.remove(num) - if(removed.total_moles() < 0.005) - turn_off() - return - - var/turf/T = get_turf(user) - T.assume_air(removed) - - return 1 - -/obj/item/tank/jetpack/suicide_act(mob/user) - if (istype(user, /mob/living/carbon/human/)) - var/mob/living/carbon/human/H = user - H.forcesay("WHAT THE FUCK IS CARBON DIOXIDE?") - H.visible_message("[user] is suffocating [user.p_them()]self with [src]! It looks like [user.p_they()] didn't read what that jetpack says!") - return (OXYLOSS) - else - ..() - -/obj/item/tank/jetpack/improvised - name = "improvised jetpack" - desc = "A jetpack made from two air tanks, a fire extinguisher and some atmospherics equipment. It doesn't look like it can hold much." - icon_state = "jetpack-improvised" - item_state = "jetpack-sec" - volume = 20 //normal jetpacks have 70 volume - gas_type = null //it starts empty - full_speed = FALSE //moves at hardsuit jetpack speeds - -/obj/item/tank/jetpack/improvised/allow_thrust(num, mob/living/user) - if(!on) - return - if((num < 0.005 || air_contents.total_moles() < num)) - turn_off() - return - if(rand(0,250) == 0) - to_chat(user, "You feel your jetpack's engines cut out.") - turn_off() - return - - var/datum/gas_mixture/removed = air_contents.remove(num) - if(removed.total_moles() < 0.005) - turn_off() - return - - var/turf/T = get_turf(user) - T.assume_air(removed) - - return 1 - -/obj/item/tank/jetpack/void - name = "void jetpack (oxygen)" - desc = "It works well in a void." - icon_state = "jetpack-void" - item_state = "jetpack-void" - full_speed = FALSE //Pre-hardsuit tech - -/obj/item/tank/jetpack/oxygen - name = "jetpack (oxygen)" - desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas. Use with caution." - icon_state = "jetpack" - item_state = "jetpack" - -/obj/item/tank/jetpack/oxygen/harness - name = "jet harness (oxygen)" - desc = "A lightweight tactical harness, used by those who don't want to be weighed down by traditional jetpacks." - icon_state = "jetpack-mini" - item_state = "jetpack-mini" - volume = 40 - throw_range = 7 - w_class = WEIGHT_CLASS_NORMAL - -/obj/item/tank/jetpack/oxygen/captain - name = "\improper Captain's jetpack" - desc = "A compact, lightweight jetpack containing a high amount of compressed oxygen." - icon_state = "jetpack-captain" - item_state = "jetpack-captain" - w_class = WEIGHT_CLASS_NORMAL - volume = 90 - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF //steal objective items are hard to destroy. - -/obj/item/tank/jetpack/oxygen/security - name = "security jetpack (oxygen)" - desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas by security forces." - icon_state = "jetpack-sec" - item_state = "jetpack-sec" - full_speed = FALSE - -/obj/item/tank/jetpack/carbondioxide - name = "jetpack (carbon dioxide)" - desc = "A tank of compressed carbon dioxide for use as propulsion in zero-gravity areas. Painted black to indicate that it should not be used as a source for internals." - icon_state = "jetpack-black" - item_state = "jetpack-black" - distribute_pressure = 0 - gas_type = /datum/gas/carbon_dioxide - -/obj/item/tank/jetpack/suit - name = "hardsuit jetpack upgrade" - desc = "A modular, compact set of thrusters designed to integrate with a hardsuit. It is fueled by a tank inserted into the suit's storage compartment." - icon_state = "jetpack-mining" - item_state = "jetpack-black" - w_class = WEIGHT_CLASS_NORMAL - actions_types = list(/datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization) - volume = 1 - slot_flags = null - gas_type = null - full_speed = FALSE - var/datum/gas_mixture/temp_air_contents - var/obj/item/tank/internals/tank = null - -/obj/item/tank/jetpack/suit/New() - ..() - STOP_PROCESSING(SSobj, src) - temp_air_contents = air_contents - -/obj/item/tank/jetpack/suit/attack_self() - return - -/obj/item/tank/jetpack/suit/cycle(mob/user) - if(!istype(loc, /obj/item/clothing/suit/space/hardsuit)) - to_chat(user, "\The [src] must be connected to a hardsuit!") - return - - var/mob/living/carbon/human/H = user - if(!istype(H.s_store, /obj/item/tank/internals)) - to_chat(user, "You need a tank in your suit storage!") - return - ..() - -/obj/item/tank/jetpack/suit/turn_on() - if(!istype(loc, /obj/item/clothing/suit/space/hardsuit) || !ishuman(loc.loc)) - return - var/mob/living/carbon/human/H = loc.loc - tank = H.s_store - air_contents = tank.air_contents - START_PROCESSING(SSobj, src) - ..() - -/obj/item/tank/jetpack/suit/turn_off() - tank = null - air_contents = temp_air_contents - STOP_PROCESSING(SSobj, src) - ..() - -/obj/item/tank/jetpack/suit/process() - if(!istype(loc, /obj/item/clothing/suit/space/hardsuit) || !ishuman(loc.loc)) - turn_off() - return - var/mob/living/carbon/human/H = loc.loc - if(!tank || tank != H.s_store) - turn_off() - return - ..() - -//Return a jetpack that the mob can use -//Back worn jetpacks, hardsuit internal packs, and so on. -//Used in Process_Spacemove() and wherever you want to check for/get a jetpack - -/mob/proc/get_jetpack() - return - -/mob/living/carbon/get_jetpack() - var/obj/item/tank/jetpack/J = back - if(istype(J)) - return J - -/mob/living/carbon/human/get_jetpack() - var/obj/item/tank/jetpack/J = ..() - if(!istype(J) && istype(wear_suit, /obj/item/clothing/suit/space/hardsuit)) - var/obj/item/clothing/suit/space/hardsuit/C = wear_suit - J = C.jetpack - return J +/obj/item/tank/jetpack + name = "jetpack (empty)" + desc = "A tank of compressed gas for use as propulsion in zero-gravity areas. Use with caution." + icon_state = "jetpack" + item_state = "jetpack" + lefthand_file = 'icons/mob/inhands/equipment/jetpacks_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/jetpacks_righthand.dmi' + w_class = WEIGHT_CLASS_BULKY + distribute_pressure = ONE_ATMOSPHERE * O2STANDARD + actions_types = list(/datum/action/item_action/set_internals, /datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization) + var/gas_type = /datum/gas/oxygen + var/on = FALSE + var/stabilizers = FALSE + var/full_speed = TRUE // If the jetpack will have a speedboost in space/nograv or not + var/datum/effect_system/trail_follow/ion/ion_trail + +/obj/item/tank/jetpack/New() + ..() + if(gas_type) + air_contents.assert_gas(gas_type) + air_contents.gases[gas_type][MOLES] = (6 * ONE_ATMOSPHERE) * volume / (R_IDEAL_GAS_EQUATION * T20C) + + ion_trail = new + ion_trail.set_up(src) + +/obj/item/tank/jetpack/ui_action_click(mob/user, action) + if(istype(action, /datum/action/item_action/toggle_jetpack)) + cycle(user) + else if(istype(action, /datum/action/item_action/jetpack_stabilization)) + if(on) + stabilizers = !stabilizers + to_chat(user, "You turn the jetpack stabilization [stabilizers ? "on" : "off"].") + else + toggle_internals(user) + +/obj/item/tank/jetpack/proc/cycle(mob/user) + if(user.incapacitated()) + return + + if(!on) + turn_on() + to_chat(user, "You turn the jetpack on.") + else + turn_off() + to_chat(user, "You turn the jetpack off.") + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() + +/obj/item/tank/jetpack/proc/turn_on() + on = TRUE + icon_state = "[initial(icon_state)]-on" + ion_trail.start() + +/obj/item/tank/jetpack/proc/turn_off() + on = FALSE + stabilizers = FALSE + icon_state = initial(icon_state) + ion_trail.stop() + +/obj/item/tank/jetpack/proc/allow_thrust(num, mob/living/user) + if(!on) + return + if((num < 0.005 || air_contents.total_moles() < num)) + turn_off() + return + + var/datum/gas_mixture/removed = air_contents.remove(num) + if(removed.total_moles() < 0.005) + turn_off() + return + + var/turf/T = get_turf(user) + T.assume_air(removed) + + return 1 + +/obj/item/tank/jetpack/suicide_act(mob/user) + if (istype(user, /mob/living/carbon/human/)) + var/mob/living/carbon/human/H = user + H.forcesay("WHAT THE FUCK IS CARBON DIOXIDE?") + H.visible_message("[user] is suffocating [user.p_them()]self with [src]! It looks like [user.p_they()] didn't read what that jetpack says!") + return (OXYLOSS) + else + ..() + +/obj/item/tank/jetpack/improvised + name = "improvised jetpack" + desc = "A jetpack made from two air tanks, a fire extinguisher and some atmospherics equipment. It doesn't look like it can hold much." + icon_state = "jetpack-improvised" + item_state = "jetpack-sec" + volume = 30 //normal jetpacks have 70 volume + gas_type = null //it starts empty + full_speed = FALSE //moves at hardsuit jetpack speeds + +/obj/item/tank/jetpack/improvised/allow_thrust(num, mob/living/user) + if(!on) + return + if((num < 0.005 || air_contents.total_moles() < num)) + turn_off() + return + if(rand(0,250) == 0) + to_chat(user, "You feel your jetpack's engines cut out.") + turn_off() + return + + var/datum/gas_mixture/removed = air_contents.remove(num) + if(removed.total_moles() < 0.005) + turn_off() + return + + var/turf/T = get_turf(user) + T.assume_air(removed) + + return 1 + +/obj/item/tank/jetpack/void + name = "void jetpack (oxygen)" + desc = "It works well in a void." + volume = 60 + icon_state = "jetpack-void" + item_state = "jetpack-void" + full_speed = FALSE //Old pre-hardsuit tech + +/obj/item/tank/jetpack/oxygen + name = "jetpack (oxygen)" + desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas. Use with caution." + icon_state = "jetpack" + item_state = "jetpack" + +/obj/item/tank/jetpack/oxygen/harness + name = "jet harness (oxygen)" + desc = "A lightweight tactical harness, used by those who don't want to be weighed down by traditional jetpacks." + icon_state = "jetpack-mini" + item_state = "jetpack-mini" + volume = 50 + throw_range = 7 + w_class = WEIGHT_CLASS_NORMAL + +/obj/item/tank/jetpack/oxygen/captain + name = "\improper Captain's jetpack" + desc = "A compact, lightweight jetpack containing a high amount of compressed oxygen." + icon_state = "jetpack-captain" + item_state = "jetpack-captain" + w_class = WEIGHT_CLASS_NORMAL + volume = 90 + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF //steal objective items are hard to destroy. + +/obj/item/tank/jetpack/oxygen/security + name = "security jetpack (oxygen)" + desc = "A tank of compressed oxygen for use as propulsion in zero-gravity areas by security forces." + icon_state = "jetpack-sec" + item_state = "jetpack-sec" + full_speed = FALSE + +/obj/item/tank/jetpack/carbondioxide + name = "jetpack (carbon dioxide)" + desc = "A tank of compressed carbon dioxide for use as propulsion in zero-gravity areas. Painted black to indicate that it should not be used as a source for internals." + icon_state = "jetpack-black" + item_state = "jetpack-black" + distribute_pressure = 0 + gas_type = /datum/gas/carbon_dioxide + +/obj/item/tank/jetpack/suit + name = "hardsuit jetpack upgrade" + desc = "A modular, compact set of thrusters designed to integrate with a hardsuit. It is fueled by a tank inserted into the suit's storage compartment." + icon_state = "jetpack-mining" + item_state = "jetpack-black" + w_class = WEIGHT_CLASS_NORMAL + actions_types = list(/datum/action/item_action/toggle_jetpack, /datum/action/item_action/jetpack_stabilization) + volume = 1 + slot_flags = null + gas_type = null + full_speed = FALSE + var/datum/gas_mixture/temp_air_contents + var/obj/item/tank/internals/tank = null + +/obj/item/tank/jetpack/suit/New() + ..() + STOP_PROCESSING(SSobj, src) + temp_air_contents = air_contents + +/obj/item/tank/jetpack/suit/attack_self() + return + +/obj/item/tank/jetpack/suit/cycle(mob/user) + if(!istype(loc, /obj/item/clothing/suit/space/hardsuit)) + to_chat(user, "\The [src] must be connected to a hardsuit!") + return + + var/mob/living/carbon/human/H = user + if(!istype(H.s_store, /obj/item/tank/internals)) + to_chat(user, "You need a tank in your suit storage!") + return + ..() + +/obj/item/tank/jetpack/suit/turn_on() + if(!istype(loc, /obj/item/clothing/suit/space/hardsuit) || !ishuman(loc.loc)) + return + var/mob/living/carbon/human/H = loc.loc + tank = H.s_store + air_contents = tank.air_contents + START_PROCESSING(SSobj, src) + ..() + +/obj/item/tank/jetpack/suit/turn_off() + tank = null + air_contents = temp_air_contents + STOP_PROCESSING(SSobj, src) + ..() + +/obj/item/tank/jetpack/suit/process() + if(!istype(loc, /obj/item/clothing/suit/space/hardsuit) || !ishuman(loc.loc)) + turn_off() + return + var/mob/living/carbon/human/H = loc.loc + if(!tank || tank != H.s_store) + turn_off() + return + ..() + +//Return a jetpack that the mob can use +//Back worn jetpacks, hardsuit internal packs, and so on. +//Used in Process_Spacemove() and wherever you want to check for/get a jetpack + +/mob/proc/get_jetpack() + return + +/mob/living/carbon/get_jetpack() + var/obj/item/tank/jetpack/J = back + if(istype(J)) + return J + +/mob/living/carbon/human/get_jetpack() + var/obj/item/tank/jetpack/J = ..() + if(!istype(J) && istype(wear_suit, /obj/item/clothing/suit/space/hardsuit)) + var/obj/item/clothing/suit/space/hardsuit/C = wear_suit + J = C.jetpack + return J diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index 63b5f4b160..fed922c7b4 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -7,6 +7,9 @@ var/wet var/footstep = null + var/barefootstep = null + var/clawfootstep = null + var/heavyfootstep = null /turf/open/ComponentInitialize() . = ..() @@ -27,6 +30,9 @@ icon = 'icons/turf/floors.dmi' icon_state = "floor" footstep = FOOTSTEP_FLOOR + barefootstep = FOOTSTEP_HARD_BAREFOOT + clawfootstep = FOOTSTEP_HARD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY tiled_dirt = TRUE /turf/open/indestructible/Melt() @@ -42,6 +48,9 @@ /turf/open/indestructible/sound name = "squeaky floor" footstep = null + barefootstep = null + clawfootstep = null + heavyfootstep = null var/sound /turf/open/indestructible/sound/Entered(var/mob/AM) @@ -61,6 +70,10 @@ icon = 'icons/turf/floors.dmi' icon_state = "cobble" baseturfs = /turf/open/indestructible/cobble + footstep = FOOTSTEP_FLOOR + barefootstep = FOOTSTEP_HARD_BAREFOOT + clawfootstep = FOOTSTEP_HARD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY tiled_dirt = FALSE /turf/open/indestructible/necropolis @@ -71,6 +84,9 @@ baseturfs = /turf/open/indestructible/necropolis initial_gas_mix = LAVALAND_DEFAULT_ATMOS footstep = FOOTSTEP_LAVA + barefootstep = FOOTSTEP_LAVA + clawfootstep = FOOTSTEP_LAVA + heavyfootstep = FOOTSTEP_LAVA tiled_dirt = FALSE /turf/open/indestructible/necropolis/Initialize() @@ -108,6 +124,9 @@ desc = "A floor made of invulnerable notebook paper." icon_state = "paperfloor" footstep = null + barefootstep = null + clawfootstep = null + heavyfootstep = null tiled_dirt = FALSE /turf/open/indestructible/binary @@ -116,6 +135,9 @@ baseturfs = /turf/open/indestructible/binary icon_state = "binary" footstep = null + barefootstep = null + clawfootstep = null + heavyfootstep = null /turf/open/indestructible/airblock icon_state = "bluespace" @@ -128,6 +150,9 @@ icon_state = "reebe" baseturfs = /turf/open/indestructible/clock_spawn_room footstep = FOOTSTEP_PLATING + barefootstep = FOOTSTEP_HARD_BAREFOOT + clawfootstep = FOOTSTEP_HARD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/open/indestructible/clock_spawn_room/Entered() ..() diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 4523cc5b67..b00efc7ed6 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -7,6 +7,9 @@ baseturfs = /turf/open/floor/plating footstep = FOOTSTEP_FLOOR + barefootstep = FOOTSTEP_HARD_BAREFOOT + clawfootstep = FOOTSTEP_HARD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY var/icon_regular_floor = "floor" //used to remember what icon the tile should have by default var/icon_plating = "plating" diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm index fc1dec2acb..7b45aa1fbb 100644 --- a/code/game/turfs/simulated/floor/fancy_floor.dm +++ b/code/game/turfs/simulated/floor/fancy_floor.dm @@ -13,6 +13,9 @@ floor_tile = /obj/item/stack/tile/wood broken_states = list("wood-broken", "wood-broken2", "wood-broken3", "wood-broken4", "wood-broken5", "wood-broken6", "wood-broken7") footstep = FOOTSTEP_WOOD + barefootstep = FOOTSTEP_WOOD_BAREFOOT + clawfootstep = FOOTSTEP_WOOD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY tiled_dirt = FALSE /turf/open/floor/wood/examine(mob/user) @@ -73,6 +76,9 @@ flags_1 = NONE bullet_bounce_sound = null footstep = FOOTSTEP_GRASS + barefootstep = FOOTSTEP_GRASS + clawfootstep = FOOTSTEP_GRASS + heavyfootstep = FOOTSTEP_GENERIC_HEAVY var/ore_type = /obj/item/stack/ore/glass var/turfverb = "uproot" tiled_dirt = FALSE @@ -103,6 +109,9 @@ slowdown = 2 bullet_sizzle = TRUE footstep = FOOTSTEP_SAND + barefootstep = FOOTSTEP_SAND + clawfootstep = FOOTSTEP_SAND + heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/open/floor/grass/snow/try_replace_tile(obj/item/stack/tile/T, mob/user, params) return @@ -136,6 +145,9 @@ turfverb = "dig up" slowdown = 0 footstep = FOOTSTEP_SAND + barefootstep = FOOTSTEP_SAND + clawfootstep = FOOTSTEP_SAND + heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/open/floor/grass/fakebasalt/Initialize() . = ..() @@ -156,6 +168,9 @@ flags_1 = NONE bullet_bounce_sound = null footstep = FOOTSTEP_CARPET + barefootstep = FOOTSTEP_CARPET_BAREFOOT + clawfootstep = FOOTSTEP_CARPET_BAREFOOT + heavyfootstep = FOOTSTEP_GENERIC_HEAVY tiled_dirt = FALSE /turf/open/floor/carpet/examine(mob/user) diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm index 91744f3fa8..bff955086c 100644 --- a/code/game/turfs/simulated/floor/misc_floor.dm +++ b/code/game/turfs/simulated/floor/misc_floor.dm @@ -141,6 +141,9 @@ icon_state = "plating" baseturfs = /turf/open/floor/clockwork footstep = FOOTSTEP_PLATING + barefootstep = FOOTSTEP_HARD_BAREFOOT + clawfootstep = FOOTSTEP_HARD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY var/uses_overlay = TRUE var/obj/effect/clockwork/overlay/floor/realappearence diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index e783b8a9a0..036f54c710 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -13,6 +13,9 @@ intact = FALSE baseturfs = /turf/open/space footstep = FOOTSTEP_PLATING + barefootstep = FOOTSTEP_HARD_BAREFOOT + clawfootstep = FOOTSTEP_HARD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY var/attachment_holes = TRUE diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm index c33612c9bc..d9966ee55c 100644 --- a/code/game/turfs/simulated/floor/plating/asteroid.dm +++ b/code/game/turfs/simulated/floor/plating/asteroid.dm @@ -10,6 +10,9 @@ icon_plating = "asteroid" postdig_icon_change = TRUE footstep = FOOTSTEP_SAND + barefootstep = FOOTSTEP_SAND + clawfootstep = FOOTSTEP_SAND + heavyfootstep = FOOTSTEP_GENERIC_HEAVY var/environment_type = "asteroid" var/turf_type = /turf/open/floor/plating/asteroid //Because caves do whacky shit to revert to normal var/floor_variance = 20 //probability floor has a different icon state @@ -333,6 +336,9 @@ icon_plating = "snow-ice" environment_type = "snow_cavern" footstep = FOOTSTEP_FLOOR + barefootstep = FOOTSTEP_HARD_BAREFOOT + clawfootstep = FOOTSTEP_HARD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/open/floor/plating/asteroid/snow/ice/burn_tile() return FALSE diff --git a/code/game/turfs/simulated/floor/plating/dirt.dm b/code/game/turfs/simulated/floor/plating/dirt.dm index dc865634f4..b9bcc0937b 100644 --- a/code/game/turfs/simulated/floor/plating/dirt.dm +++ b/code/game/turfs/simulated/floor/plating/dirt.dm @@ -9,6 +9,9 @@ planetary_atmos = TRUE attachment_holes = FALSE footstep = FOOTSTEP_SAND + barefootstep = FOOTSTEP_SAND + clawfootstep = FOOTSTEP_SAND + heavyfootstep = FOOTSTEP_GENERIC_HEAVY tiled_dirt = FALSE /turf/open/floor/plating/dirt/dark diff --git a/code/game/turfs/simulated/floor/plating/misc_plating.dm b/code/game/turfs/simulated/floor/plating/misc_plating.dm index f86ab3c03c..15b039193d 100644 --- a/code/game/turfs/simulated/floor/plating/misc_plating.dm +++ b/code/game/turfs/simulated/floor/plating/misc_plating.dm @@ -47,6 +47,9 @@ planetary_atmos = TRUE attachment_holes = FALSE footstep = FOOTSTEP_SAND + barefootstep = FOOTSTEP_SAND + clawfootstep = FOOTSTEP_SAND + heavyfootstep = FOOTSTEP_GENERIC_HEAVY tiled_dirt = FALSE /turf/open/floor/plating/ashplanet/Initialize() @@ -79,6 +82,9 @@ layer = MID_TURF_LAYER canSmoothWith = list(/turf/open/floor/plating/ashplanet/rocky, /turf/closed) footstep = FOOTSTEP_FLOOR + barefootstep = FOOTSTEP_HARD_BAREFOOT + clawfootstep = FOOTSTEP_HARD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/open/floor/plating/ashplanet/wateryrock gender = PLURAL @@ -87,6 +93,9 @@ icon_state = "wateryrock" slowdown = 2 footstep = FOOTSTEP_FLOOR + barefootstep = FOOTSTEP_HARD_BAREFOOT + clawfootstep = FOOTSTEP_HARD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/open/floor/plating/ashplanet/wateryrock/Initialize() icon_state = "[icon_state][rand(1, 9)]" @@ -100,6 +109,9 @@ attachment_holes = FALSE bullet_bounce_sound = null footstep = FOOTSTEP_SAND + barefootstep = FOOTSTEP_SAND + clawfootstep = FOOTSTEP_SAND + heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/open/floor/plating/beach/try_replace_tile(obj/item/stack/tile/T, mob/user, params) return @@ -141,6 +153,9 @@ name = "iron sand" desc = "Like sand, but more metal." footstep = FOOTSTEP_SAND + barefootstep = FOOTSTEP_SAND + clawfootstep = FOOTSTEP_SAND + heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/open/floor/plating/ironsand/Initialize() . = ..() @@ -165,6 +180,9 @@ attachment_holes = FALSE bullet_sizzle = TRUE footstep = FOOTSTEP_FLOOR + barefootstep = FOOTSTEP_HARD_BAREFOOT + clawfootstep = FOOTSTEP_HARD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/open/floor/plating/ice/Initialize() . = ..() @@ -202,6 +220,9 @@ attachment_holes = FALSE planetary_atmos = TRUE footstep = FOOTSTEP_SAND + barefootstep = FOOTSTEP_SAND + clawfootstep = FOOTSTEP_SAND + heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/open/floor/plating/snowed/cavern initial_gas_mix = "o2=0;n2=82;plasma=24;TEMP=120" diff --git a/code/game/turfs/simulated/floor/reinf_floor.dm b/code/game/turfs/simulated/floor/reinf_floor.dm index e677de8c5c..1a477d5d9a 100644 --- a/code/game/turfs/simulated/floor/reinf_floor.dm +++ b/code/game/turfs/simulated/floor/reinf_floor.dm @@ -7,6 +7,9 @@ heat_capacity = INFINITY floor_tile = /obj/item/stack/rods footstep = FOOTSTEP_PLATING + barefootstep = FOOTSTEP_HARD_BAREFOOT + clawfootstep = FOOTSTEP_HARD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY tiled_dirt = FALSE /turf/open/floor/engine/examine(mob/user) diff --git a/code/game/turfs/simulated/lava.dm b/code/game/turfs/simulated/lava.dm index b9e355b122..e24736ecf3 100644 --- a/code/game/turfs/simulated/lava.dm +++ b/code/game/turfs/simulated/lava.dm @@ -13,6 +13,9 @@ bullet_bounce_sound = 'sound/items/welder2.ogg' footstep = FOOTSTEP_LAVA + barefootstep = FOOTSTEP_LAVA + clawfootstep = FOOTSTEP_LAVA + heavyfootstep = FOOTSTEP_LAVA /turf/open/lava/ex_act(severity, target) contents_explosion(severity, target) diff --git a/code/game/turfs/simulated/water.dm b/code/game/turfs/simulated/water.dm index b46dd1d06c..708ca230b1 100644 --- a/code/game/turfs/simulated/water.dm +++ b/code/game/turfs/simulated/water.dm @@ -12,3 +12,6 @@ bullet_bounce_sound = null //needs a splashing sound one day. footstep = FOOTSTEP_WATER + barefootstep = FOOTSTEP_WATER + clawfootstep = FOOTSTEP_WATER + heavyfootstep = FOOTSTEP_WATER diff --git a/code/modules/antagonists/blob/blob/blobs/shield.dm b/code/modules/antagonists/blob/blob/blobs/shield.dm index d52c208c71..33e7e4392f 100644 --- a/code/modules/antagonists/blob/blob/blobs/shield.dm +++ b/code/modules/antagonists/blob/blob/blobs/shield.dm @@ -9,6 +9,7 @@ point_return = 4 atmosblock = TRUE armor = list("melee" = 25, "bullet" = 25, "laser" = 15, "energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) + var/weakened /obj/structure/blob/shield/scannerreport() if(atmosblock) @@ -25,10 +26,15 @@ name = "weakened strong blob" desc = "A wall of twitching tendrils." atmosblock = FALSE - armor = list("melee" = 15, "bullet" = 15, "laser" = 5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) + if(!weakened) + armor = armor.setRating("melee" = 15, "bullet" = 15, "laser" = 5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) + weakened = TRUE else icon_state = initial(icon_state) name = initial(name) desc = initial(desc) atmosblock = TRUE - air_update_turf(1) + if(weakened) + armor = armor.setRating("melee" = 25, "bullet" = 25, "laser" = 15, "energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) + weakened = FALSE + air_update_turf(1) \ No newline at end of file diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 6ada4629d3..c3858da6ad 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -189,6 +189,16 @@ time = 40 category = CAT_ROBOT +/datum/crafting_recipe/Firebot + name = "Firebot" + result = /mob/living/simple_animal/bot/firebot + reqs = list(/obj/item/extinguisher = 1, + /obj/item/bodypart/r_arm/robot = 1, + /obj/item/assembly/prox_sensor = 1, + /obj/item/clothing/head/hardhat/red = 1) + time = 40 + category = CAT_ROBOT + /datum/crafting_recipe/improvised_pneumatic_cannon //Pretty easy to obtain but name = "Pneumatic Cannon" result = /obj/item/pneumatic_cannon/ghetto @@ -731,7 +741,7 @@ /datum/crafting_recipe/goldenbox name = "Gold Plated Toolbox" - result = /obj/item/storage/toolbox/gold_fake + result = /obj/item/storage/toolbox/gold_fake reqs = list(/obj/item/stack/sheet/cardboard = 1, //so we dont null items in crafting /obj/item/stack/cable_coil = 10, /obj/item/stack/sheet/mineral/gold = 1, diff --git a/code/modules/events/pirates.dm b/code/modules/events/pirates.dm index 910e94f680..7256ddb6ea 100644 --- a/code/modules/events/pirates.dm +++ b/code/modules/events/pirates.dm @@ -48,8 +48,6 @@ if(!shuttle_spawned) spawn_shuttle() - - /datum/round_event/pirates/start() if(!paid_off && !shuttle_spawned) spawn_shuttle() @@ -150,7 +148,6 @@ to_chat(user,"You retrieve the siphoned credits!") credits_stored = 0 - /obj/machinery/shuttle_scrambler/proc/send_notification() priority_announce("Data theft signal detected, source registered on local gps units.") @@ -222,8 +219,7 @@ suit_type = /obj/item/clothing/suit/space helmet_type = /obj/item/clothing/head/helmet/space mask_type = /obj/item/clothing/mask/breath - storage_type = /obj/item/tank/internals/oxygen - + storage_type = /obj/item/tank/jetpack/void /obj/machinery/loot_locator name = "Booty Locator" @@ -454,4 +450,4 @@ /datum/export/pirate/cash/get_amount(obj/O) var/obj/item/stack/spacecash/C = O - return ..() * C.amount * C.value \ No newline at end of file + return ..() * C.amount * C.value diff --git a/code/modules/goonchat/browserassets/css/browserOutput.css b/code/modules/goonchat/browserassets/css/browserOutput.css index 6466a47e42..33884f8ef0 100644 --- a/code/modules/goonchat/browserassets/css/browserOutput.css +++ b/code/modules/goonchat/browserassets/css/browserOutput.css @@ -316,7 +316,9 @@ h1.alert, h2.alert {color: #000000;} .unconscious {color: #0000ff; font-weight: bold;} .suicide {color: #ff5050; font-style: italic;} .green {color: #03ff39;} -.nicegreen {color: #14a833;} +.nicegreen {color: #14a833;} +.userlove {color: #FF1493; font-style: italic; font-weight: bold; text-shadow: 0 0 6px #ff6dbc;} +.love {color: #ff006a; font-style: italic; text-shadow: 0 0 6px #ff6d6d;} .shadowling {color: #3b2769;} .cult {color: #960000;} diff --git a/code/modules/integrated_electronics/subtypes/converters.dm b/code/modules/integrated_electronics/subtypes/converters.dm index 668f49c98f..c323718c07 100644 --- a/code/modules/integrated_electronics/subtypes/converters.dm +++ b/code/modules/integrated_electronics/subtypes/converters.dm @@ -142,13 +142,14 @@ /obj/item/integrated_circuit/converter/concatenator name = "concatenator" - desc = "This can join up to 8 strings together to get one big string." + desc = "This can join up to 8 strings together to get a string with a maximum of 512 characters." complexity = 4 inputs = list() outputs = list("result" = IC_PINTYPE_STRING) activators = list("concatenate" = IC_PINTYPE_PULSE_IN, "on concatenated" = IC_PINTYPE_PULSE_OUT) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH var/number_of_pins = 8 + var/max_string_length = 512 /obj/item/integrated_circuit/converter/concatenator/Initialize() for(var/i = 1 to number_of_pins) @@ -157,26 +158,46 @@ /obj/item/integrated_circuit/converter/concatenator/do_work() var/result = null + var/spamprotection for(var/k in 1 to inputs.len) var/I = get_pin_data(IC_INPUT, k) if(!isnull(I)) + if((result ? length(result) : 0) + length(I) > max_string_length) + spamprotection = (result ? length(result) : 0) + length(I) + break result = result + I + if(spamprotection >= max_string_length*1.75 && assembly) + if(assembly.fingerprintslast) + var/mob/M = get_mob_by_key(assembly.fingerprintslast) + var/more = "" + if(M) + more = "[ADMIN_LOOKUPFLW(M)] " + message_admins("A concatenator circuit has greatly exceeded its [max_string_length] character limit with a total of [spamprotection] characters, and has been deleted. Assembly last touched by [more ? more : assembly.fingerprintslast].") + investigate_log("A concatenator circuit has greatly exceeded its [max_string_length] character limit with a total of [spamprotection] characters, and has been deleted. Assembly last touched by [assembly.fingerprintslast].", INVESTIGATE_CIRCUIT) + else + message_admins("A concatenator circuit has greatly exceeded its [max_string_length] character limit with a total of [spamprotection] characters, and has been deleted. No associated key.") + investigate_log("A concatenator circuit has greatly exceeded its [max_string_length] character limit with a total of [spamprotection] characters, and has been deleted. No associated key.", INVESTIGATE_CIRCUIT) + qdel(assembly) + return + set_pin_data(IC_OUTPUT, 1, result) push_data() activate_pin(2) /obj/item/integrated_circuit/converter/concatenator/small name = "small concatenator" - desc = "This can join up to 4 strings together to get one big string." + desc = "This can join up to 4 strings together to get a string with a maximum of 256 characters." complexity = 2 number_of_pins = 4 + max_string_length = 256 /obj/item/integrated_circuit/converter/concatenator/large name = "large concatenator" - desc = "This can join up to 16 strings together to get one very big string." + desc = "This can join up to 16 strings together to get a string with a maximum of 1024 characters." complexity = 6 number_of_pins = 16 + max_string_length = 1024 /obj/item/integrated_circuit/converter/separator name = "separator" diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 870dfc2ebc..d68c936909 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -300,6 +300,11 @@ GLOBAL_LIST_EMPTY(roundstart_races) else if(C.client) C.canbearoused = C.client.prefs.arousable + if(ishuman(C)) + var/mob/living/carbon/human/H = C + if(NOGENITALS in H.dna.species.species_traits) + H.give_genitals(TRUE) //call the clean up proc to delete anything on the mob then return. + // EDIT ENDS /datum/species/proc/on_species_loss(mob/living/carbon/human/C, datum/species/new_species, pref_load) @@ -1452,39 +1457,51 @@ GLOBAL_LIST_EMPTY(roundstart_races) /datum/species/proc/disarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) // CITADEL EDIT slap mouthy gits and booty - var/aim_for_mouth = user.zone_selected == "mouth" - var/target_on_help_and_unarmed = target.a_intent == INTENT_HELP && !target.get_active_held_item() + var/aim_for_mouth = user.zone_selected == "mouth" + var/target_on_help = target.a_intent == INTENT_HELP var/target_aiming_for_mouth = target.zone_selected == "mouth" var/target_restrained = target.restrained() - if(aim_for_mouth && ( target_on_help_and_unarmed || target_restrained || target_aiming_for_mouth)) - playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1) - user.visible_message("[user] slaps [target] in the face!", - "You slap [target] in the face! ",\ - "You hear a slap.") - if (!target.has_trait(TRAIT_NYMPHO)) - stop_wagging_tail(target) - return FALSE + var/same_dir = (target.dir & user.dir) var/aim_for_groin = user.zone_selected == "groin" var/target_aiming_for_groin = target.zone_selected == "groin" - if(aim_for_groin && (target_on_help_and_unarmed || target_restrained || target_aiming_for_groin)) + + if(target.check_block()) //END EDIT + target.visible_message("[target] blocks [user]'s disarm attempt!") + return 0 + else if(user.getStaminaLoss() >= STAMINA_SOFTCRIT) + to_chat(user, "You're too exhausted!") + return FALSE + + else if(aim_for_mouth && ( target_on_help || target_restrained || target_aiming_for_mouth)) playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1) - user.visible_message("[user] slaps [target]'s ass!", - "You slap [target]'s ass! ",\ - "You hear a slap.") + + user.visible_message( + "[user] slaps [target] in the face!", + "You slap [user == target ? "yourself" : target] in the face! ",\ + "You hear a slap." + ) + if (!target.has_trait(TRAIT_NYMPHO)) + stop_wagging_tail(target) + user.do_attack_animation(target, ATTACK_EFFECT_FACE_SLAP) + user.adjustStaminaLossBuffered(3) + return FALSE + else if(aim_for_groin && (target == user || target.lying || same_dir) && (target_on_help || target_restrained || target_aiming_for_groin)) + playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1) + user.visible_message( + "[user] slaps [target]'s ass!", + "You slap [user == target ? "your" : target + "'s"] ass! ",\ + "You hear a slap." + ) if (target.canbearoused) target.adjustArousalLoss(5) if (target.getArousalLoss() >= 100 && ishuman(target) && target.has_trait(TRAIT_NYMPHO) && target.has_dna()) target.mob_climax(forced_climax=TRUE) if (!target.has_trait(TRAIT_NYMPHO)) stop_wagging_tail(target) + user.do_attack_animation(target, ATTACK_EFFECT_ASS_SLAP) + user.adjustStaminaLossBuffered(3) return FALSE - else if(user.getStaminaLoss() >= STAMINA_SOFTCRIT) - to_chat(user, "You're too exhausted.") - return FALSE - else if(target.check_block()) //END EDIT - target.visible_message("[target] blocks [user]'s disarm attempt!") - return 0 - if(attacker_style && attacker_style.disarm_act(user,target)) + else if(attacker_style && attacker_style.disarm_act(user,target)) return 1 else user.do_attack_animation(target, ATTACK_EFFECT_DISARM) diff --git a/code/modules/mob/living/carbon/human/species_types/abductors.dm b/code/modules/mob/living/carbon/human/species_types/abductors.dm index 434f59e660..ad1f5c9190 100644 --- a/code/modules/mob/living/carbon/human/species_types/abductors.dm +++ b/code/modules/mob/living/carbon/human/species_types/abductors.dm @@ -3,7 +3,7 @@ id = "abductor" say_mod = "gibbers" sexes = FALSE - species_traits = list(NOBLOOD,NOEYES,NOGENITALS) + species_traits = list(NOBLOOD,NOEYES,NOGENITALS,NOAROUSAL) inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NOGUNS,TRAIT_NOHUNGER,TRAIT_NOBREATH) mutanttongue = /obj/item/organ/tongue/abductor var/scientist = FALSE // vars to not pollute spieces list with castes diff --git a/code/modules/mob/living/carbon/human/species_types/android.dm b/code/modules/mob/living/carbon/human/species_types/android.dm index 678d5397ee..9f2c07694c 100644 --- a/code/modules/mob/living/carbon/human/species_types/android.dm +++ b/code/modules/mob/living/carbon/human/species_types/android.dm @@ -2,7 +2,7 @@ name = "Android" id = "android" say_mod = "states" - species_traits = list(NOBLOOD,NOGENITALS) + species_traits = list(NOBLOOD,NOGENITALS,NOAROUSAL) inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_NOFIRE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_LIMBATTACHMENT) inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID) meat = null diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 87e9f950c4..b790ae0489 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -2,7 +2,7 @@ // Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck. name = "Golem" id = "iron golem" - species_traits = list(NOBLOOD,MUTCOLORS,NO_UNDERWEAR,NOGENITALS) + species_traits = list(NOBLOOD,MUTCOLORS,NO_UNDERWEAR,NOGENITALS,NOAROUSAL) inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER) inherent_biotypes = list(MOB_INORGANIC, MOB_HUMANOID) mutant_organs = list(/obj/item/organ/adamantine_resonator) diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm index 13199cdad7..7be0265cba 100644 --- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm @@ -9,7 +9,7 @@ nojumpsuit = TRUE say_mod = "poofs" //what does a mushroom sound like - species_traits = list(MUTCOLORS, NOEYES, NO_UNDERWEAR,NOGENITALS) + species_traits = list(MUTCOLORS, NOEYES, NO_UNDERWEAR,NOGENITALS,NOAROUSAL) inherent_traits = list(TRAIT_NOBREATH) speedmod = 1.5 //faster than golems but not by much 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 9716fc2e22..b574df7d79 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -38,7 +38,7 @@ burnmod = 1.5 blacklisted = TRUE no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM, SLOT_S_STORE) - species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYES,NOGENITALS) + species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYES,NOGENITALS,NOAROUSAL) inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER) mutanteyes = /obj/item/organ/eyes/night_vision/nightmare mutant_organs = list(/obj/item/organ/heart/nightmare) diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm index a72c196fdf..5c2b01a179 100644 --- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm +++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm @@ -6,7 +6,7 @@ blacklisted = 1 sexes = 0 meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton - species_traits = list(NOBLOOD,NOGENITALS) + species_traits = list(NOBLOOD,NOGENITALS,NOAROUSAL) inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NOHUNGER,TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_FAKEDEATH) inherent_biotypes = list(MOB_UNDEAD, MOB_HUMANOID) mutanttongue = /obj/item/organ/tongue/bone diff --git a/code/modules/mob/living/carbon/human/species_types/synths.dm b/code/modules/mob/living/carbon/human/species_types/synths.dm index f553367921..7e838c857f 100644 --- a/code/modules/mob/living/carbon/human/species_types/synths.dm +++ b/code/modules/mob/living/carbon/human/species_types/synths.dm @@ -3,7 +3,7 @@ id = "synth" say_mod = "beep boops" //inherited from a user's real species sexes = 0 - species_traits = list(NOTRANSSTING,NOGENITALS) //all of these + whatever we inherit from the real species + species_traits = list(NOTRANSSTING,NOGENITALS,NOAROUSAL) //all of these + whatever we inherit from the real species inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER,TRAIT_NOBREATH) inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID) dangerous_existence = 1 diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index 56d37f667c..9db21f13e0 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -505,3 +505,33 @@ to_chat(user, "You unbolt [src]'s energy swords") for(var/IS in 1 to swordamt) new /obj/item/melee/transforming/energy/sword/saber(Tsec) + +//Firebot Assembly +/obj/item/bot_assembly/firebot + name = "incomplete firebot assembly" + desc = "A fire extinguisher with an arm attached to it." + icon_state = "firebot_arm" + created_name = "Firebot" + +/obj/item/bot_assembly/firebot/attackby(obj/item/I, mob/user, params) + ..() + switch(build_step) + if(ASSEMBLY_FIRST_STEP) + if(istype(I, /obj/item/clothing/head/hardhat/red)) + if(!user.temporarilyRemoveItemFromInventory(I)) + return + to_chat(user,"You add the [I] to [src]!") + icon_state = "firebot_helmet" + desc = "An incomplete firebot assembly with a fire helmet." + qdel(I) + build_step++ + + if(ASSEMBLY_SECOND_STEP) + if(isprox(I)) + if(!can_finish_build(I, user)) + return + to_chat(user, "You add the [I] to [src]! Beep Boop!") + var/mob/living/simple_animal/bot/firebot/F = new(drop_location()) + F.name = created_name + qdel(I) + qdel(src) diff --git a/code/modules/mob/living/simple_animal/bot/firebot.dm b/code/modules/mob/living/simple_animal/bot/firebot.dm new file mode 100644 index 0000000000..d8c3bca72a --- /dev/null +++ b/code/modules/mob/living/simple_animal/bot/firebot.dm @@ -0,0 +1,325 @@ +//Firebot + +#define SPEECH_INTERVAL 300 // Time between idle speeches +#define DETECTED_VOICE_INTERVAL 300 // Time between fire detected callouts +#define FOAM_INTERVAL 50 // Time between deployment of fire fighting foam + +/mob/living/simple_animal/bot/firebot + name = "\improper Firebot" + desc = "A little fire extinguishing bot. He looks rather anxious." + icon = 'icons/mob/aibots.dmi' + icon_state = "firebot" + density = FALSE + anchored = FALSE + health = 25 + maxHealth = 25 + spacewalk = TRUE + + radio_key = /obj/item/encryptionkey/headset_eng + radio_channel = "Engineering" + bot_type = FIRE_BOT + model = "Firebot" + bot_core = /obj/machinery/bot_core/firebot + window_id = "autoextinguisher" + window_name = "Mobile Fire Extinguisher v1.0" + path_image_color = "#FFA500" + + var/atom/target_fire + var/atom/old_target_fire + + var/obj/item/extinguisher/internal_ext + + var/last_found = 0 + + var/speech_cooldown = 0 + var/detected_cooldown = 0 + var/foam_cooldown = 0 + + var/extinguish_people = TRUE + var/extinguish_fires = TRUE + var/stationary_mode = FALSE + +/mob/living/simple_animal/bot/firebot/Initialize() + . = ..() + update_icon() + var/datum/job/engineer/J = new/datum/job/engineer + access_card.access += J.get_access() + prev_access = access_card.access + + create_extinguisher() + +/mob/living/simple_animal/bot/firebot/bot_reset() + create_extinguisher() + +/mob/living/simple_animal/bot/firebot/proc/create_extinguisher() + internal_ext = new /obj/item/extinguisher(src) + internal_ext.safety = FALSE + internal_ext.precision = TRUE + internal_ext.max_water = INFINITY + internal_ext.refill() + +/mob/living/simple_animal/bot/firebot/UnarmedAttack(atom/A) + if(!on) + return + if(internal_ext) + internal_ext.afterattack(A, src) + else + return ..() + +/mob/living/simple_animal/bot/firebot/RangedAttack(atom/A) + if(!on) + return + if(internal_ext) + internal_ext.afterattack(A, src) + else + return ..() + +/mob/living/simple_animal/bot/firebot/turn_on() + . = ..() + update_icon() + +/mob/living/simple_animal/bot/firebot/turn_off() + ..() + update_icon() + +/mob/living/simple_animal/bot/firebot/bot_reset() + ..() + target_fire = null + old_target_fire = null + ignore_list = list() + anchored = FALSE + update_icon() + +/mob/living/simple_animal/bot/firebot/proc/soft_reset() + path = list() + target_fire = null + mode = BOT_IDLE + last_found = world.time + update_icon() + +/mob/living/simple_animal/bot/firebot/set_custom_texts() + text_hack = "You corrupt [name]'s safety protocols." + text_dehack = "You detect errors in [name] and reset his programming." + text_dehack_fail = "[name] is not responding to reset commands!" + +/mob/living/simple_animal/bot/firebot/get_controls(mob/user) + var/dat + dat += hack(user) + dat += showpai(user) + dat += "Mobile Fire Extinguisher v1.0

" + dat += "Status: [on ? "On" : "Off"]
" + dat += "Maintenance panel panel is [open ? "opened" : "closed"]
" + + dat += "Behaviour controls are [locked ? "locked" : "unlocked"]
" + if(!locked || issilicon(user) || IsAdminGhost(user)) + dat += "Extinguish Fires: [extinguish_fires ? "Yes" : "No"]
" + dat += "Extinguish People: [extinguish_people ? "Yes" : "No"]
" + dat += "Patrol Station: [auto_patrol ? "Yes" : "No"]
" + dat += "Stationary Mode: [stationary_mode ? "Yes" : "No"]
" + + return dat + +/mob/living/simple_animal/bot/firebot/emag_act(mob/user) + ..() + if(emagged == 1) + if(user) + to_chat(user, "[src] buzzes and beeps.") + audible_message("[src] buzzes oddly!") + playsound(src, "sparks", 75, TRUE) + if(user) + old_target_fire = user + extinguish_fires = FALSE + extinguish_people = TRUE + + internal_ext.chem = "clf3" //Refill the internal extinguisher with liquid fire + internal_ext.power = 3 + internal_ext.safety = FALSE + internal_ext.precision = FALSE + internal_ext.max_water = INFINITY + internal_ext.refill() + +/mob/living/simple_animal/bot/firebot/Topic(href, href_list) + if(..()) + return TRUE + + switch(href_list["operation"]) + if("extinguish_fires") + extinguish_fires = !extinguish_fires + if("extinguish_people") + extinguish_people = !extinguish_people + if("stationary_mode") + stationary_mode = !stationary_mode + + update_controls() + update_icon() + +/mob/living/simple_animal/bot/firebot/proc/is_burning(atom/target) + if(ismob(target)) + var/mob/living/M = target + if(M.on_fire || (emagged == 1 && !M.on_fire)) + return TRUE + + else if(isturf(target)) + var/turf/open/T = target + if(T.active_hotspot) + return TRUE + + return FALSE + +/mob/living/simple_animal/bot/firebot/handle_automated_action() + if(!..()) + return + + if(IsStun()) + old_target_fire = target_fire + target_fire = null + mode = BOT_IDLE + return + + if(prob(1) && target_fire == null) + var/list/messagevoice = list("No fires detected." = 'sound/voice/firebot/nofires.ogg', + "Only you can prevent station fires." = 'sound/voice/firebot/onlyyou.ogg', + "Temperature nominal." = 'sound/voice/firebot/tempnominal.ogg', + "Keep it cool." = 'sound/voice/firebot/keepitcool.ogg') + var/message = pick(messagevoice) + speak(message) + playsound(src, messagevoice[message], 50) + + // Couldn't reach the target, reset and try again ignoring the old one + if(frustration > 8) + old_target_fire = target_fire + soft_reset() + + // We extinguished our target or it was deleted + if(QDELETED(target_fire) || !is_burning(target_fire) || isdead(target_fire)) + target_fire = null + var/scan_range = (stationary_mode ? 1 : DEFAULT_SCAN_RANGE) + + if(extinguish_people) + target_fire = scan(/mob/living, old_target_fire, scan_range) // Scan for burning humans first + + if(target_fire == null && extinguish_fires) + target_fire = scan(/turf/open, old_target_fire, scan_range) // Scan for burning turfs second + + old_target_fire = target_fire + + // Target reached ENGAGE WATER CANNON + if(target_fire && (get_dist(src, target_fire) <= (emagged == 1 ? 1 : 2))) // Make the bot spray water from afar when not emagged + if((speech_cooldown + SPEECH_INTERVAL) < world.time) + if(ishuman(target_fire)) + speak("Stop, drop and roll!") + playsound(src, "sound/voice/firebot/stopdropnroll.ogg", 50, 0) + else + speak("Extinguishing!") + playsound(src, "sound/voice/firebot/extinguishing.ogg", 50, 0) + speech_cooldown = world.time + + flick("firebot1_use", src) + spray_water(target_fire, src) + + soft_reset() + + // Target ran away + else if(target_fire && path.len && (get_dist(target_fire,path[path.len]) > 2)) + path = list() + mode = BOT_IDLE + last_found = world.time + + else if(target_fire && stationary_mode) + soft_reset() + return + + if(target_fire && (get_dist(src, target_fire) > 2)) + + path = get_path_to(src, get_turf(target_fire), /turf/proc/Distance_cardinal, 0, 30, 1, id=access_card) + mode = BOT_MOVING + if(!path.len) + soft_reset() + + if(path.len > 0 && target_fire) + if(!bot_move(path[path.len])) + old_target_fire = target_fire + soft_reset() + return + + // We got a target but it's too far away from us + if(path.len > 8 && target_fire) + frustration++ + + if(auto_patrol && !target_fire && !stationary_mode) + if(mode == BOT_IDLE || mode == BOT_START_PATROL) + start_patrol() + + if(mode == BOT_PATROL) + bot_patrol() + + +//Look for burning people or turfs around the bot +/mob/living/simple_animal/bot/firebot/process_scan(atom/scan_target) + var/result + + if(scan_target == src) + return result + + if(is_burning(scan_target)) + if((detected_cooldown + DETECTED_VOICE_INTERVAL) < world.time) + speak("Fire detected!") + playsound(src, "sound/voice/firebot/detected.ogg", 50, 0) + detected_cooldown = world.time + result = scan_target + + return result + +/mob/living/simple_animal/bot/firebot/temperature_expose(datum/gas_mixture/air, temperature, volume) + if((temperature > T0C + 200 || temperature < BODYTEMP_COLD_DAMAGE_LIMIT) && foam_cooldown + FOAM_INTERVAL < world.time) + new /obj/effect/particle_effect/foam/firefighting(loc) + foam_cooldown = world.time + ..() + +/mob/living/simple_animal/bot/firebot/proc/spray_water(atom/target, mob/user) + if(stationary_mode) + flick("firebots_use", user) + else + flick("firebot1_use", user) + internal_ext.afterattack(target, user, null) + +/mob/living/simple_animal/bot/firebot/update_icon() + if(!on) + icon_state = "firebot0" + return + if(IsStun()) + icon_state = "firebots1" + else if(stationary_mode) //Bot has yellow light to indicate stationary mode. + icon_state = "firebots1" + else + icon_state = "firebot1" + + +/mob/living/simple_animal/bot/firebot/explode() + on = FALSE + visible_message("[src] blows apart!") + + var/atom/Tsec = drop_location() + + new /obj/item/assembly/prox_sensor(Tsec) + new /obj/item/clothing/head/hardhat/red(Tsec) + + var/turf/T = get_turf(Tsec) + + if(isopenturf(T)) + var/turf/open/theturf = T + theturf.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS) + + if(prob(50)) + drop_part(robot_arm, Tsec) + + do_sparks(3, TRUE, src) + ..() + +/obj/machinery/bot_core/firebot + req_one_access = list(ACCESS_CONSTRUCTION, ACCESS_ROBOTICS) + +#undef SPEECH_INTERVAL +#undef DETECTED_VOICE_INTERVAL +#undef FOAM_INTERVAL + diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index 2c45743c55..dd08a009d4 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -130,7 +130,7 @@ /mob/living/simple_animal/hostile/syndicate/melee/bullet_act(obj/item/projectile/Proj) if(!Proj) return - if(prob(50)) + if(prob(25)) return ..() else visible_message("[src] blocks [Proj] with its shield!") diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 034ccc4c39..2001c61e12 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -61,6 +61,8 @@ var/mood = "" // To show its face var/mutator_used = FALSE //So you can't shove a dozen mutators into a single slime var/force_stasis = FALSE + + do_footstep = TRUE var/static/regex/slime_name_regex = new("\\w+ (baby|adult) slime \\(\\d+\\)") ///////////TIME FOR SUBSPECIES diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm deleted file mode 100644 index 173fd5a813..0000000000 --- a/code/modules/research/designs/autolathe_designs.dm +++ /dev/null @@ -1,888 +0,0 @@ -/////////////////////////////////// -//////////Autolathe Designs /////// -/////////////////////////////////// - -/datum/design/bucket - name = "Bucket" - id = "bucket" - build_type = AUTOLATHE - materials = list(MAT_METAL = 200) - build_path = /obj/item/reagent_containers/glass/bucket - category = list("initial","Tools") - -/datum/design/crowbar - name = "Pocket Crowbar" - id = "crowbar" - build_type = AUTOLATHE - materials = list(MAT_METAL = 50) - build_path = /obj/item/crowbar - category = list("initial","Tools") - -/datum/design/flashlight - name = "Flashlight" - id = "flashlight" - build_type = AUTOLATHE - materials = list(MAT_METAL = 50, MAT_GLASS = 20) - build_path = /obj/item/flashlight - category = list("initial","Tools") - -/datum/design/extinguisher - name = "Fire Extinguisher" - id = "extinguisher" - build_type = AUTOLATHE - materials = list(MAT_METAL = 90) - build_path = /obj/item/extinguisher - category = list("initial","Tools") - -/datum/design/pocketfireextinguisher - name = "Pocket Fire Extinguisher" - id = "pocketfireextinguisher" - build_type = AUTOLATHE - materials = list(MAT_METAL = 50, MAT_GLASS = 40) - build_path = /obj/item/extinguisher/mini - category = list("initial","Tools") - -/datum/design/multitool - name = "Multitool" - id = "multitool" - build_type = AUTOLATHE - materials = list(MAT_METAL = 50, MAT_GLASS = 20) - build_path = /obj/item/multitool - category = list("initial","Tools") - -/datum/design/analyzer - name = "Analyzer" - id = "analyzer" - build_type = AUTOLATHE - materials = list(MAT_METAL = 30, MAT_GLASS = 20) - build_path = /obj/item/analyzer - category = list("initial","Tools") - -/datum/design/tscanner - name = "T-Ray Scanner" - id = "tscanner" - build_type = AUTOLATHE - materials = list(MAT_METAL = 150) - build_path = /obj/item/t_scanner - category = list("initial","Tools") - -/datum/design/weldingtool - name = "Welding Tool" - id = "welding_tool" - build_type = AUTOLATHE - materials = list(MAT_METAL = 70, MAT_GLASS = 20) - build_path = /obj/item/weldingtool - category = list("initial","Tools") - -/datum/design/mini_weldingtool - name = "Emergency Welding Tool" - id = "mini_welding_tool" - build_type = AUTOLATHE - materials = list(MAT_METAL = 30, MAT_GLASS = 10) - build_path = /obj/item/weldingtool/mini - category = list("initial","Tools") - -/datum/design/screwdriver - name = "Screwdriver" - id = "screwdriver" - build_type = AUTOLATHE - materials = list(MAT_METAL = 75) - build_path = /obj/item/screwdriver - category = list("initial","Tools") - -/datum/design/wirecutters - name = "Wirecutters" - id = "wirecutters" - build_type = AUTOLATHE - materials = list(MAT_METAL = 80) - build_path = /obj/item/wirecutters - category = list("initial","Tools") - -/datum/design/wrench - name = "Wrench" - id = "wrench" - build_type = AUTOLATHE - materials = list(MAT_METAL = 150) - build_path = /obj/item/wrench - category = list("initial","Tools") - -/datum/design/welding_helmet - name = "Welding Helmet" - id = "welding_helmet" - build_type = AUTOLATHE - materials = list(MAT_METAL = 1750, MAT_GLASS = 400) - build_path = /obj/item/clothing/head/welding - category = list("initial","Tools") - -/datum/design/cable_coil - name = "Cable Coil" - id = "cable_coil" - build_type = AUTOLATHE - materials = list(MAT_METAL = 10, MAT_GLASS = 5) - build_path = /obj/item/stack/cable_coil/random - category = list("initial","Tools") - maxstack = 30 - -/datum/design/toolbox - name = "Toolbox" - id = "tool_box" - build_type = AUTOLATHE - materials = list(MAT_METAL = 500) - build_path = /obj/item/storage/toolbox - category = list("initial","Tools") - -/datum/design/apc_board - name = "APC Module" - id = "power control" - build_type = AUTOLATHE | PROTOLATHE - materials = list(MAT_METAL = 100, MAT_GLASS = 100) - build_path = /obj/item/electronics/apc - category = list("initial", "Electronics") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/airlock_board - name = "Airlock Electronics" - id = "airlock_board" - build_type = AUTOLATHE | PROTOLATHE - materials = list(MAT_METAL = 50, MAT_GLASS = 50) - build_path = /obj/item/electronics/airlock - category = list("initial", "Electronics") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/firelock_board - name = "Firelock Circuitry" - id = "firelock_board" - build_type = AUTOLATHE | PROTOLATHE - materials = list(MAT_METAL = 50, MAT_GLASS = 50) - build_path = /obj/item/electronics/firelock - category = list("initial", "Electronics") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/airalarm_electronics - name = "Air Alarm Electronics" - id = "airalarm_electronics" - build_type = AUTOLATHE | PROTOLATHE - materials = list(MAT_METAL = 50, MAT_GLASS = 50) - build_path = /obj/item/electronics/airalarm - category = list("initial", "Electronics") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/firealarm_electronics - name = "Fire Alarm Electronics" - id = "firealarm_electronics" - build_type = AUTOLATHE | PROTOLATHE - materials = list(MAT_METAL = 50, MAT_GLASS = 50) - build_path = /obj/item/electronics/firealarm - category = list("initial", "Electronics") - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING - -/datum/design/camera - name = "Camera" - id = "camera" - build_type = AUTOLATHE - materials = list(MAT_METAL = 50, MAT_GLASS = 100) - build_path = /obj/item/camera - category = list("initial", "Misc") - -/datum/design/camera_film - name = "Camera Film Cartridge" - id = "camera_film" - build_type = AUTOLATHE - materials = list(MAT_METAL = 10, MAT_GLASS = 10) - build_path = /obj/item/camera_film - category = list("initial", "Misc") - -/datum/design/earmuffs - name = "Earmuffs" - id = "earmuffs" - build_type = AUTOLATHE - materials = list(MAT_METAL = 500, MAT_GLASS = 500) - build_path = /obj/item/clothing/ears/earmuffs - category = list("initial", "Misc") - -/datum/design/pipe_painter - name = "Pipe Painter" - id = "pipe_painter" - build_type = AUTOLATHE - materials = list(MAT_METAL = 5000, MAT_GLASS = 2000) - build_path = /obj/item/pipe_painter - category = list("initial", "Misc") - -/datum/design/airlock_painter - name = "Airlock Painter" - id = "airlock_painter" - build_type = AUTOLATHE - materials = list(MAT_METAL = 50, MAT_GLASS = 50) - build_path = /obj/item/airlock_painter - category = list("initial", "Misc") - -/datum/design/metal - name = "Metal" - id = "metal" - build_type = AUTOLATHE - materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT) - build_path = /obj/item/stack/sheet/metal - category = list("initial","Construction") - maxstack = 50 - -/datum/design/glass - name = "Glass" - id = "glass" - build_type = AUTOLATHE - materials = list(MAT_GLASS = MINERAL_MATERIAL_AMOUNT) - build_path = /obj/item/stack/sheet/glass - category = list("initial","Construction") - maxstack = 50 - -/datum/design/rglass - name = "Reinforced Glass" - id = "rglass" - build_type = AUTOLATHE | SMELTER | PROTOLATHE - materials = list(MAT_METAL = 1000, MAT_GLASS = MINERAL_MATERIAL_AMOUNT) - build_path = /obj/item/stack/sheet/rglass - category = list("initial","Construction","Stock Parts") - maxstack = 50 - -/datum/design/rods - name = "Metal Rod" - id = "rods" - build_type = AUTOLATHE - materials = list(MAT_METAL = 1000) - build_path = /obj/item/stack/rods - category = list("initial","Construction") - maxstack = 50 - -/datum/design/rcd_ammo - name = "Compressed Matter Cartridge" - id = "rcd_ammo" - build_type = AUTOLATHE - materials = list(MAT_METAL = 12000, MAT_GLASS=8000) - build_path = /obj/item/rcd_ammo - category = list("initial","Construction") - -/datum/design/kitchen_knife - name = "Kitchen Knife" - id = "kitchen_knife" - build_type = AUTOLATHE - materials = list(MAT_METAL = 12000) - build_path = /obj/item/kitchen/knife - category = list("initial","Dinnerware") - -/datum/design/fork - name = "Fork" - id = "fork" - build_type = AUTOLATHE - materials = list(MAT_METAL = 80) - build_path = /obj/item/kitchen/fork - category = list("initial","Dinnerware") - -/datum/design/tray - name = "Tray" - id = "tray" - build_type = AUTOLATHE - materials = list(MAT_METAL = 3000) - build_path = /obj/item/storage/bag/tray - category = list("initial","Dinnerware") - -/datum/design/bowl - name = "Bowl" - id = "bowl" - build_type = AUTOLATHE - materials = list(MAT_GLASS = 500) - build_path = /obj/item/reagent_containers/glass/bowl - category = list("initial","Dinnerware") - -/datum/design/drinking_glass - name = "Drinking Glass" - id = "drinking_glass" - build_type = AUTOLATHE - materials = list(MAT_GLASS = 500) - build_path = /obj/item/reagent_containers/food/drinks/drinkingglass - category = list("initial","Dinnerware") - -/datum/design/shot_glass - name = "Shot Glass" - id = "shot_glass" - build_type = AUTOLATHE - materials = list(MAT_GLASS = 100) - build_path = /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass - category = list("initial","Dinnerware") - -/datum/design/shaker - name = "Shaker" - id = "shaker" - build_type = AUTOLATHE - materials = list(MAT_METAL = 1500) - build_path = /obj/item/reagent_containers/food/drinks/shaker - category = list("initial","Dinnerware") - -/datum/design/cultivator - name = "Cultivator" - id = "cultivator" - build_type = AUTOLATHE - materials = list(MAT_METAL=50) - build_path = /obj/item/cultivator - category = list("initial","Misc") - -/datum/design/plant_analyzer - name = "Plant Analyzer" - id = "plant_analyzer" - build_type = AUTOLATHE - materials = list(MAT_METAL = 30, MAT_GLASS = 20) - build_path = /obj/item/plant_analyzer - category = list("initial","Misc") - -/datum/design/shovel - name = "Shovel" - id = "shovel" - build_type = AUTOLATHE - materials = list(MAT_METAL = 50) - build_path = /obj/item/shovel - category = list("initial","Misc") - -/datum/design/spade - name = "Spade" - id = "spade" - build_type = AUTOLATHE - materials = list(MAT_METAL = 50) - build_path = /obj/item/shovel/spade - category = list("initial","Misc") - -/datum/design/hatchet - name = "Hatchet" - id = "hatchet" - build_type = AUTOLATHE - materials = list(MAT_METAL = 15000) - build_path = /obj/item/hatchet - category = list("initial","Misc") - -/datum/design/foilhat - name = "Tinfoil Hat" - id = "tinfoil_hat" - build_type = AUTOLATHE - materials = list(MAT_METAL = 5500) - build_path = /obj/item/clothing/head/foilhat - category = list("hacked", "Misc") - -/datum/design/scalpel - name = "Scalpel" - id = "scalpel" - build_type = AUTOLATHE - materials = list(MAT_METAL = 4000, MAT_GLASS = 1000) - build_path = /obj/item/scalpel - category = list("initial", "Medical") - -/datum/design/circular_saw - name = "Circular Saw" - id = "circular_saw" - build_type = AUTOLATHE - materials = list(MAT_METAL = 10000, MAT_GLASS = 6000) - build_path = /obj/item/circular_saw - category = list("initial", "Medical") - -/datum/design/surgicaldrill - name = "Surgical Drill" - id = "surgicaldrill" - build_type = AUTOLATHE - materials = list(MAT_METAL = 10000, MAT_GLASS = 6000) - build_path = /obj/item/surgicaldrill - category = list("initial", "Medical") - -/datum/design/retractor - name = "Retractor" - id = "retractor" - build_type = AUTOLATHE - materials = list(MAT_METAL = 6000, MAT_GLASS = 3000) - build_path = /obj/item/retractor - category = list("initial", "Medical") - -/datum/design/cautery - name = "Cautery" - id = "cautery" - build_type = AUTOLATHE - materials = list(MAT_METAL = 2500, MAT_GLASS = 750) - build_path = /obj/item/cautery - category = list("initial", "Medical") - -/datum/design/hemostat - name = "Hemostat" - id = "hemostat" - build_type = AUTOLATHE - materials = list(MAT_METAL = 5000, MAT_GLASS = 2500) - build_path = /obj/item/hemostat - category = list("initial", "Medical") - -/datum/design/beaker - name = "Beaker" - id = "beaker" - build_type = AUTOLATHE - materials = list(MAT_GLASS = 500) - build_path = /obj/item/reagent_containers/glass/beaker - category = list("initial", "Medical") - -/datum/design/large_beaker - name = "Large Beaker" - id = "large_beaker" - build_type = AUTOLATHE - materials = list(MAT_GLASS = 2500) - build_path = /obj/item/reagent_containers/glass/beaker/large - category = list("initial", "Medical") - -/datum/design/healthanalyzer - name = "Health Analyzer" - id = "healthanalyzer" - build_type = AUTOLATHE | PROTOLATHE - materials = list(MAT_METAL = 500, MAT_GLASS = 50) - build_path = /obj/item/healthanalyzer - category = list("initial", "Medical") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - -/datum/design/pillbottle - name = "Pill Bottle" - id = "pillbottle" - build_type = AUTOLATHE - materials = list(MAT_METAL = 20, MAT_GLASS = 100) - build_path = /obj/item/storage/pill_bottle - category = list("initial", "Medical") - -/datum/design/beanbag_slug - name = "Beanbag Slug" - id = "beanbag_slug" - build_type = AUTOLATHE - materials = list(MAT_METAL = 250) - build_path = /obj/item/ammo_casing/shotgun/beanbag - category = list("initial", "Security") - -/datum/design/rubbershot - name = "Rubber Shot" - id = "rubber_shot" - build_type = AUTOLATHE - materials = list(MAT_METAL = 4000) - build_path = /obj/item/ammo_casing/shotgun/rubbershot - category = list("initial", "Security") - -/datum/design/c38 - name = "Speed Loader (.38 rubber)" - id = "c38" - build_type = AUTOLATHE - materials = list(MAT_METAL = 20000) - build_path = /obj/item/ammo_box/c38 - category = list("initial", "Security") - -/datum/design/recorder - name = "Universal Recorder" - id = "recorder" - build_type = AUTOLATHE - materials = list(MAT_METAL = 60, MAT_GLASS = 30) - build_path = /obj/item/taperecorder/empty - category = list("initial", "Misc") - -/datum/design/tape - name = "Tape" - id = "tape" - build_type = AUTOLATHE - materials = list(MAT_METAL = 20, MAT_GLASS = 5) - build_path = /obj/item/tape/random - category = list("initial", "Misc") - -/datum/design/igniter - name = "Igniter" - id = "igniter" - build_type = AUTOLATHE - materials = list(MAT_METAL = 500, MAT_GLASS = 50) - build_path = /obj/item/assembly/igniter - category = list("initial", "Misc") - -/datum/design/signaler - name = "Remote Signaling Device" - id = "signaler" - build_type = AUTOLATHE - materials = list(MAT_METAL = 400, MAT_GLASS = 120) - build_path = /obj/item/assembly/signaler - category = list("initial", "T-Comm") - -/datum/design/radio_headset - name = "Radio Headset" - id = "radio_headset" - build_type = AUTOLATHE - materials = list(MAT_METAL = 75) - build_path = /obj/item/radio/headset - category = list("initial", "T-Comm") - -/datum/design/bounced_radio - name = "Station Bounced Radio" - id = "bounced_radio" - build_type = AUTOLATHE - materials = list(MAT_METAL = 75, MAT_GLASS = 25) - build_path = /obj/item/radio/off - category = list("initial", "T-Comm") - -/datum/design/intercom_frame - name = "Intercom Frame" - id = "intercom_frame" - build_type = AUTOLATHE - materials = list(MAT_METAL = 75, MAT_GLASS = 25) - build_path = /obj/item/wallframe/intercom - category = list("initial", "T-Comm") - -/datum/design/infrared_emitter - name = "Infrared Emitter" - id = "infrared_emitter" - build_type = AUTOLATHE - materials = list(MAT_METAL = 1000, MAT_GLASS = 500) - build_path = /obj/item/assembly/infra - category = list("initial", "Misc") - -/datum/design/health_sensor - name = "Health Sensor" - id = "health_sensor" - build_type = AUTOLATHE - materials = list(MAT_METAL = 800, MAT_GLASS = 200) - build_path = /obj/item/assembly/health - category = list("initial", "Medical") - -/datum/design/timer - name = "Timer" - id = "timer" - build_type = AUTOLATHE - materials = list(MAT_METAL = 500, MAT_GLASS = 50) - build_path = /obj/item/assembly/timer - category = list("initial", "Misc") - -/datum/design/voice_analyser - name = "Voice Analyser" - id = "voice_analyser" - build_type = AUTOLATHE - materials = list(MAT_METAL = 500, MAT_GLASS = 50) - build_path = /obj/item/assembly/voice - category = list("initial", "Misc") - -/datum/design/light_tube - name = "Light Tube" - id = "light_tube" - build_type = AUTOLATHE - materials = list(MAT_GLASS = 100) - build_path = /obj/item/light/tube - category = list("initial", "Construction") - -/datum/design/light_bulb - name = "Light Bulb" - id = "light_bulb" - build_type = AUTOLATHE - materials = list(MAT_GLASS = 100) - build_path = /obj/item/light/bulb - category = list("initial", "Construction") - -/datum/design/camera_assembly - name = "Camera Assembly" - id = "camera_assembly" - build_type = AUTOLATHE - materials = list(MAT_METAL = 400, MAT_GLASS = 250) - build_path = /obj/item/wallframe/camera - category = list("initial", "Construction") - -/datum/design/newscaster_frame - name = "Newscaster Frame" - id = "newscaster_frame" - build_type = AUTOLATHE - materials = list(MAT_METAL = 14000, MAT_GLASS = 8000) - build_path = /obj/item/wallframe/newscaster - category = list("initial", "Construction") - -/datum/design/syringe - name = "Syringe" - id = "syringe" - build_type = AUTOLATHE - materials = list(MAT_METAL = 10, MAT_GLASS = 20) - build_path = /obj/item/reagent_containers/syringe - category = list("initial", "Medical") - -/datum/design/prox_sensor - name = "Proximity Sensor" - id = "prox_sensor" - build_type = AUTOLATHE - materials = list(MAT_METAL = 800, MAT_GLASS = 200) - build_path = /obj/item/assembly/prox_sensor - category = list("initial", "Misc") - -/datum/design/foam_dart - name = "Box of Foam Darts" - id = "foam_dart" - build_type = AUTOLATHE - materials = list(MAT_METAL = 500) - build_path = /obj/item/ammo_box/foambox - category = list("initial", "Misc") - -//hacked autolathe recipes -/datum/design/flamethrower - name = "Flamethrower" - id = "flamethrower" - build_type = AUTOLATHE - materials = list(MAT_METAL = 500) - build_path = /obj/item/flamethrower/full - category = list("hacked", "Security") - -/datum/design/rcd - name = "Rapid Construction Device (RCD)" - id = "rcd" - build_type = AUTOLATHE - materials = list(MAT_METAL = 30000) - build_path = /obj/item/construction/rcd - category = list("hacked", "Construction") - -/datum/design/rpd - name = "Rapid Pipe Dispenser (RPD)" - id = "rpd" - build_type = AUTOLATHE - materials = list(MAT_METAL = 75000, MAT_GLASS = 37500) - build_path = /obj/item/pipe_dispenser - category = list("hacked", "Construction") - -/datum/design/electropack - name = "Electropack" - id = "electropack" - build_type = AUTOLATHE - materials = list(MAT_METAL = 10000, MAT_GLASS = 2500) - build_path = /obj/item/electropack - category = list("hacked", "Tools") - -/datum/design/large_welding_tool - name = "Industrial Welding Tool" - id = "large_welding_tool" - build_type = AUTOLATHE - materials = list(MAT_METAL = 70, MAT_GLASS = 60) - build_path = /obj/item/weldingtool/largetank - category = list("hacked", "Tools") - -/datum/design/handcuffs - name = "Handcuffs" - id = "handcuffs" - build_type = AUTOLATHE - materials = list(MAT_METAL = 500) - build_path = /obj/item/restraints/handcuffs - category = list("hacked", "Security") - -/datum/design/receiver - name = "Modular Receiver" - id = "receiver" - build_type = AUTOLATHE - materials = list(MAT_METAL = 15000) - build_path = /obj/item/weaponcrafting/receiver - category = list("hacked", "Security") - -/datum/design/shotgun_slug - name = "Shotgun Slug" - id = "shotgun_slug" - build_type = AUTOLATHE - materials = list(MAT_METAL = 4000) - build_path = /obj/item/ammo_casing/shotgun - category = list("hacked", "Security") - -/datum/design/buckshot_shell - name = "Buckshot Shell" - id = "buckshot_shell" - build_type = AUTOLATHE - materials = list(MAT_METAL = 4000) - build_path = /obj/item/ammo_casing/shotgun/buckshot - category = list("hacked", "Security") - -/datum/design/shotgun_dart - name = "Shotgun Dart" - id = "shotgun_dart" - build_type = AUTOLATHE - materials = list(MAT_METAL = 4000) - build_path = /obj/item/ammo_casing/shotgun/dart - category = list("hacked", "Security") - -/datum/design/incendiary_slug - name = "Incendiary Slug" - id = "incendiary_slug" - build_type = AUTOLATHE - materials = list(MAT_METAL = 4000) - build_path = /obj/item/ammo_casing/shotgun/incendiary - category = list("hacked", "Security") - -/datum/design/riot_dart - name = "Foam Riot Dart" - id = "riot_dart" - build_type = AUTOLATHE - materials = list(MAT_METAL = 1000) //Discount for making individually - no box = less metal! - build_path = /obj/item/ammo_casing/caseless/foam_dart/riot - category = list("hacked", "Security") - -/datum/design/riot_darts - name = "Foam Riot Dart Box" - id = "riot_darts" - build_type = AUTOLATHE - materials = list(MAT_METAL = 50000) //Comes with 40 darts - build_path = /obj/item/ammo_box/foambox/riot - category = list("hacked", "Security") - -/datum/design/a357 - name = "Speed Loader (.357)" - id = "a357" - build_type = AUTOLATHE - materials = list(MAT_METAL = 30000) - build_path = /obj/item/ammo_box/a357 - category = list("hacked", "Security") - -/datum/design/c10mm - name = "Ammo Box (10mm)" - id = "c10mm" - build_type = AUTOLATHE - materials = list(MAT_METAL = 30000) - build_path = /obj/item/ammo_box/c10mm - category = list("hacked", "Security") - -/datum/design/c45 - name = "Ammo Box (.45)" - id = "c45" - build_type = AUTOLATHE - materials = list(MAT_METAL = 30000) - build_path = /obj/item/ammo_box/c45 - category = list("hacked", "Security") - -/datum/design/c9mm - name = "Ammo Box (9mm)" - id = "c9mm" - build_type = AUTOLATHE - materials = list(MAT_METAL = 30000) - build_path = /obj/item/ammo_box/c9mm - category = list("hacked", "Security") - -/datum/design/cleaver - name = "Butcher's Cleaver" - id = "cleaver" - build_type = AUTOLATHE - materials = list(MAT_METAL = 18000) - build_path = /obj/item/kitchen/knife/butcher - category = list("hacked", "Dinnerware") - -/datum/design/spraycan - name = "Spraycan" - id = "spraycan" - build_type = AUTOLATHE - materials = list(MAT_METAL = 100, MAT_GLASS = 100) - build_path = /obj/item/toy/crayon/spraycan - category = list("initial", "Tools") - -/datum/design/desttagger - name = "Destination Tagger" - id = "desttagger" - build_type = AUTOLATHE - materials = list(MAT_METAL = 250, MAT_GLASS = 125) - build_path = /obj/item/destTagger - category = list("initial", "Electronics") - -/datum/design/handlabeler - name = "Hand Labeler" - id = "handlabel" - build_type = AUTOLATHE - materials = list(MAT_METAL = 150, MAT_GLASS = 125) - build_path = /obj/item/hand_labeler - category = list("initial", "Electronics") - -/datum/design/geiger - name = "Geiger Counter" - id = "geigercounter" - build_type = AUTOLATHE - materials = list(MAT_METAL = 150, MAT_GLASS = 150) - build_path = /obj/item/geiger_counter - category = list("initial", "Tools") - -/datum/design/turret_control_frame - name = "Turret Control Frame" - id = "turret_control" - build_type = AUTOLATHE - materials = list(MAT_METAL = 12000) - build_path = /obj/item/wallframe/turret_control - category = list("initial", "Construction") - -/datum/design/conveyor_belt - name = "Conveyor Belt" - id = "conveyor_belt" - build_type = AUTOLATHE - materials = list(MAT_METAL = 5000) - build_path = /obj/item/conveyor_construct - category = list("initial", "Construction") - -/datum/design/conveyor_switch - name = "Conveyor Belt Switch" - id = "conveyor_switch" - build_type = AUTOLATHE - materials = list(MAT_METAL = 450, MAT_GLASS = 190) - build_path = /obj/item/conveyor_switch_construct - category = list("initial", "Construction") - -/datum/design/laptop - name = "Laptop Frame" - id = "laptop" - build_type = AUTOLATHE - materials = list(MAT_METAL = 10000, MAT_GLASS = 1000) - build_path = /obj/item/modular_computer/laptop/buildable - category = list("initial","Misc") - -/datum/design/tablet - name = "Tablet Frame" - id = "tablet" - build_type = AUTOLATHE - materials = list(MAT_METAL = 2000, MAT_GLASS = 1000) - build_path = /obj/item/modular_computer/tablet - category = list("initial","Misc") - -/datum/design/slime_scanner - name = "Slime Scanner" - id = "slime_scanner" - build_type = AUTOLATHE - materials = list(MAT_METAL = 300, MAT_GLASS = 200) - build_path = /obj/item/slime_scanner - category = list("initial", "Misc") - -/datum/design/pet_carrier - name = "Pet Carrier" - id = "pet_carrier" - build_type = AUTOLATHE - materials = list(MAT_METAL = 7500, MAT_GLASS = 100) - build_path = /obj/item/pet_carrier - category = list("initial", "Misc") - -/datum/design/miniature_power_cell - name = "Light Fixture Battery" - id = "miniature_power_cell" - build_type = AUTOLATHE - materials = list(MAT_GLASS = 20) - build_path = /obj/item/stock_parts/cell/emergency_light - category = list("initial", "Electronics") - -/datum/design/packageWrap - name = "Package Wrapping" - id = "packagewrap" - build_type = AUTOLATHE - materials = list(MAT_METAL = 200, MAT_GLASS = 200) - build_path = /obj/item/stack/packageWrap - category = list("initial", "Misc") - maxstack = 30 - -/datum/design/holodisk - name = "Holodisk" - id = "holodisk" - build_type = AUTOLATHE - materials = list(MAT_METAL = 100, MAT_GLASS = 100) - build_path = /obj/item/disk/holodisk - category = list("initial", "Misc") - -/datum/design/lock_collar - name = "Lockable Collar" - id = "lock_collar" - build_type = AUTOLATHE - materials = list(MAT_METAL = 1200, MAT_GLASS = 100) - build_path = /obj/item/clothing/neck/petcollar/locked - category = list("initial", "Misc") - -/datum/design/collar_key - name = "Collar Key" - id = "collar_key" - build_type = AUTOLATHE - materials = list(MAT_METAL = 300, MAT_GLASS = 150) - build_path = /obj/item/key/collar - category = list("initial", "Misc") diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm new file mode 100644 index 0000000000..1ae1d3813b --- /dev/null +++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_construction.dm @@ -0,0 +1,108 @@ +/////////////////////////////////// +//////////Autolathe Designs /////// +/////////////////////////////////// + + +//////////////// +///Construction// +//////////////// + +/datum/design/rods + name = "Metal Rod" + id = "rods" + build_type = AUTOLATHE + materials = list(MAT_METAL = 1000) + build_path = /obj/item/stack/rods + category = list("initial","Construction") + maxstack = 50 + +/datum/design/metal + name = "Metal" + id = "metal" + build_type = AUTOLATHE + materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT) + build_path = /obj/item/stack/sheet/metal + category = list("initial","Construction") + maxstack = 50 + +/datum/design/glass + name = "Glass" + id = "glass" + build_type = AUTOLATHE + materials = list(MAT_GLASS = MINERAL_MATERIAL_AMOUNT) + build_path = /obj/item/stack/sheet/glass + category = list("initial","Construction") + maxstack = 50 + +/datum/design/rglass + name = "Reinforced Glass" + id = "rglass" + build_type = AUTOLATHE | SMELTER | PROTOLATHE + materials = list(MAT_METAL = 1000, MAT_GLASS = MINERAL_MATERIAL_AMOUNT) + build_path = /obj/item/stack/sheet/rglass + category = list("initial","Construction","Stock Parts") + maxstack = 50 + +/datum/design/light_tube + name = "Light Tube" + id = "light_tube" + build_type = AUTOLATHE + materials = list(MAT_GLASS = 100) + build_path = /obj/item/light/tube + category = list("initial", "Construction") + +/datum/design/light_bulb + name = "Light Bulb" + id = "light_bulb" + build_type = AUTOLATHE + materials = list(MAT_GLASS = 100) + build_path = /obj/item/light/bulb + category = list("initial", "Construction") + +/datum/design/camera_assembly + name = "Camera Assembly" + id = "camera_assembly" + build_type = AUTOLATHE + materials = list(MAT_METAL = 400, MAT_GLASS = 250) + build_path = /obj/item/wallframe/camera + category = list("initial", "Construction") + +/datum/design/newscaster_frame + name = "Newscaster Frame" + id = "newscaster_frame" + build_type = AUTOLATHE + materials = list(MAT_METAL = 14000, MAT_GLASS = 8000) + build_path = /obj/item/wallframe/newscaster + category = list("initial", "Construction") + +/datum/design/turret_control_frame + name = "Turret Control Frame" + id = "turret_control" + build_type = AUTOLATHE + materials = list(MAT_METAL = 12000) + build_path = /obj/item/wallframe/turret_control + category = list("initial", "Construction") + +/datum/design/conveyor_belt + name = "Conveyor Belt" + id = "conveyor_belt" + build_type = AUTOLATHE + materials = list(MAT_METAL = 5000) + build_path = /obj/item/conveyor_construct + category = list("initial", "Construction") + +/datum/design/conveyor_switch + name = "Conveyor Belt Switch" + id = "conveyor_switch" + build_type = AUTOLATHE + materials = list(MAT_METAL = 450, MAT_GLASS = 190) + build_path = /obj/item/conveyor_switch_construct + category = list("initial", "Construction") + +/datum/design/rcd_ammo + name = "Compressed Matter Cartridge" + id = "rcd_ammo" + build_type = AUTOLATHE + materials = list(MAT_METAL = 12000, MAT_GLASS=8000) + build_path = /obj/item/rcd_ammo + category = list("initial","Construction") diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_electronics.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_electronics.dm new file mode 100644 index 0000000000..5b247efe74 --- /dev/null +++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_electronics.dm @@ -0,0 +1,76 @@ +/////////////////////////////////// +//////////Autolathe Designs /////// +/////////////////////////////////// + +//////////////// +///Electronics// +//////////////// + +/datum/design/apc_board + name = "APC Module" + id = "power control" + build_type = AUTOLATHE | PROTOLATHE + materials = list(MAT_METAL = 100, MAT_GLASS = 100) + build_path = /obj/item/electronics/apc + category = list("initial", "Electronics") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/airlock_board + name = "Airlock Electronics" + id = "airlock_board" + build_type = AUTOLATHE | PROTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 50) + build_path = /obj/item/electronics/airlock + category = list("initial", "Electronics") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/firelock_board + name = "Firelock Circuitry" + id = "firelock_board" + build_type = AUTOLATHE | PROTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 50) + build_path = /obj/item/electronics/firelock + category = list("initial", "Electronics") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/airalarm_electronics + name = "Air Alarm Electronics" + id = "airalarm_electronics" + build_type = AUTOLATHE | PROTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 50) + build_path = /obj/item/electronics/airalarm + category = list("initial", "Electronics") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/firealarm_electronics + name = "Fire Alarm Electronics" + id = "firealarm_electronics" + build_type = AUTOLATHE | PROTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 50) + build_path = /obj/item/electronics/firealarm + category = list("initial", "Electronics") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + +/datum/design/desttagger + name = "Destination Tagger" + id = "desttagger" + build_type = AUTOLATHE + materials = list(MAT_METAL = 250, MAT_GLASS = 125) + build_path = /obj/item/destTagger + category = list("initial", "Electronics") + +/datum/design/handlabeler + name = "Hand Labeler" + id = "handlabel" + build_type = AUTOLATHE + materials = list(MAT_METAL = 150, MAT_GLASS = 125) + build_path = /obj/item/hand_labeler + category = list("initial", "Electronics") + +/datum/design/miniature_power_cell + name = "Light Fixture Battery" + id = "miniature_power_cell" + build_type = AUTOLATHE + materials = list(MAT_GLASS = 20) + build_path = /obj/item/stock_parts/cell/emergency_light + category = list("initial", "Electronics") \ No newline at end of file diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm new file mode 100644 index 0000000000..27852b2798 --- /dev/null +++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm @@ -0,0 +1,179 @@ +/////////////////////////////////// +//////////Autolathe Designs /////// +/////////////////////////////////// +//////////////// +////Dinnerware// +//////////////// + +/datum/design/kitchen_knife + name = "Kitchen Knife" + id = "kitchen_knife" + build_type = AUTOLATHE + materials = list(MAT_METAL = 12000) + build_path = /obj/item/kitchen/knife + category = list("initial","Dinnerware") + +/datum/design/fork + name = "Fork" + id = "fork" + build_type = AUTOLATHE + materials = list(MAT_METAL = 80) + build_path = /obj/item/kitchen/fork + category = list("initial","Dinnerware") + +/datum/design/tray + name = "Tray" + id = "tray" + build_type = AUTOLATHE + materials = list(MAT_METAL = 3000) + build_path = /obj/item/storage/bag/tray + category = list("initial","Dinnerware") + +/datum/design/bowl + name = "Bowl" + id = "bowl" + build_type = AUTOLATHE + materials = list(MAT_GLASS = 500) + build_path = /obj/item/reagent_containers/glass/bowl + category = list("initial","Dinnerware") + +/datum/design/drinking_glass + name = "Drinking Glass" + id = "drinking_glass" + build_type = AUTOLATHE + materials = list(MAT_GLASS = 500) + build_path = /obj/item/reagent_containers/food/drinks/drinkingglass + category = list("initial","Dinnerware") + +/datum/design/shot_glass + name = "Shot Glass" + id = "shot_glass" + build_type = AUTOLATHE + materials = list(MAT_GLASS = 100) + build_path = /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass + category = list("initial","Dinnerware") + +/datum/design/shaker + name = "Shaker" + id = "shaker" + build_type = AUTOLATHE + materials = list(MAT_METAL = 1500) + build_path = /obj/item/reagent_containers/food/drinks/shaker + category = list("initial","Dinnerware") + +//////////// +///Medical// +//////////// + +/datum/design/scalpel + name = "Scalpel" + id = "scalpel" + build_type = AUTOLATHE + materials = list(MAT_METAL = 4000, MAT_GLASS = 1000) + build_path = /obj/item/scalpel + category = list("initial", "Medical") + +/datum/design/circular_saw + name = "Circular Saw" + id = "circular_saw" + build_type = AUTOLATHE + materials = list(MAT_METAL = 10000, MAT_GLASS = 6000) + build_path = /obj/item/circular_saw + category = list("initial", "Medical") + +/datum/design/surgicaldrill + name = "Surgical Drill" + id = "surgicaldrill" + build_type = AUTOLATHE + materials = list(MAT_METAL = 10000, MAT_GLASS = 6000) + build_path = /obj/item/surgicaldrill + category = list("initial", "Medical") + +/datum/design/retractor + name = "Retractor" + id = "retractor" + build_type = AUTOLATHE + materials = list(MAT_METAL = 6000, MAT_GLASS = 3000) + build_path = /obj/item/retractor + category = list("initial", "Medical") + +/datum/design/cautery + name = "Cautery" + id = "cautery" + build_type = AUTOLATHE + materials = list(MAT_METAL = 2500, MAT_GLASS = 750) + build_path = /obj/item/cautery + category = list("initial", "Medical") + +/datum/design/hemostat + name = "Hemostat" + id = "hemostat" + build_type = AUTOLATHE + materials = list(MAT_METAL = 5000, MAT_GLASS = 2500) + build_path = /obj/item/hemostat + category = list("initial", "Medical") + +/datum/design/beaker + name = "Beaker" + id = "beaker" + build_type = AUTOLATHE + materials = list(MAT_GLASS = 500) + build_path = /obj/item/reagent_containers/glass/beaker + category = list("initial", "Medical") + +/datum/design/large_beaker + name = "Large Beaker" + id = "large_beaker" + build_type = AUTOLATHE + materials = list(MAT_GLASS = 2500) + build_path = /obj/item/reagent_containers/glass/beaker/large + category = list("initial", "Medical") + +/datum/design/healthanalyzer + name = "Health Analyzer" + id = "healthanalyzer" + build_type = AUTOLATHE | PROTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 50) + build_path = /obj/item/healthanalyzer + category = list("initial", "Medical") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL + +/datum/design/pillbottle + name = "Pill Bottle" + id = "pillbottle" + build_type = AUTOLATHE + materials = list(MAT_METAL = 20, MAT_GLASS = 100) + build_path = /obj/item/storage/pill_bottle + category = list("initial", "Medical") + +/datum/design/syringe + name = "Syringe" + id = "syringe" + build_type = AUTOLATHE + materials = list(MAT_METAL = 10, MAT_GLASS = 20) + build_path = /obj/item/reagent_containers/syringe + category = list("initial", "Medical") + +/datum/design/health_sensor + name = "Health Sensor" + id = "health_sensor" + build_type = AUTOLATHE + materials = list(MAT_METAL = 800, MAT_GLASS = 200) + build_path = /obj/item/assembly/health + category = list("initial", "Medical") + +/datum/design/hypovialsmall + name = "Hypovial" + id = "hypovial" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500) + build_path = /obj/item/reagent_containers/glass/bottle/vial/small + category = list("initial","Medical") + +/datum/design/hypoviallarge + name = "Large Hypovial" + id = "large_hypovial" + build_type = AUTOLATHE + materials = list(MAT_METAL = 2500) + build_path = /obj/item/reagent_containers/glass/bottle/vial/large + category = list("initial","Medical") diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm new file mode 100644 index 0000000000..e5e3a6bb4f --- /dev/null +++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_sec_and_hacked.dm @@ -0,0 +1,186 @@ +/////////////////////////////////// +//////////Autolathe Designs /////// +/////////////////////////////////// +///////////// +////Secgear// +///////////// + +/datum/design/beanbag_slug + name = "Beanbag Slug" + id = "beanbag_slug" + build_type = AUTOLATHE + materials = list(MAT_METAL = 250) + build_path = /obj/item/ammo_casing/shotgun/beanbag + category = list("initial", "Security") + +/datum/design/rubbershot + name = "Rubber Shot" + id = "rubber_shot" + build_type = AUTOLATHE + materials = list(MAT_METAL = 4000) + build_path = /obj/item/ammo_casing/shotgun/rubbershot + category = list("initial", "Security") + +/datum/design/c38 + name = "Speed Loader (.38 rubber)" + id = "c38" + build_type = AUTOLATHE + materials = list(MAT_METAL = 20000) + build_path = /obj/item/ammo_box/c38 + category = list("initial", "Security") + +///////////////// +///Hacked Gear // +///////////////// + +/datum/design/large_welding_tool + name = "Industrial Welding Tool" + id = "large_welding_tool" + build_type = AUTOLATHE + materials = list(MAT_METAL = 70, MAT_GLASS = 60) + build_path = /obj/item/weldingtool/largetank + category = list("hacked", "Tools") + +/datum/design/flamethrower + name = "Flamethrower" + id = "flamethrower" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500) + build_path = /obj/item/flamethrower/full + category = list("hacked", "Security") + +/datum/design/rcd + name = "Rapid Construction Device (RCD)" + id = "rcd" + build_type = AUTOLATHE + materials = list(MAT_METAL = 30000) + build_path = /obj/item/construction/rcd + category = list("hacked", "Construction") + +/datum/design/rpd + name = "Rapid Pipe Dispenser (RPD)" + id = "rpd" + build_type = AUTOLATHE + materials = list(MAT_METAL = 75000, MAT_GLASS = 37500) + build_path = /obj/item/pipe_dispenser + category = list("hacked", "Construction") + +/datum/design/handcuffs + name = "Handcuffs" + id = "handcuffs" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500) + build_path = /obj/item/restraints/handcuffs + category = list("hacked", "Security") + +/datum/design/receiver + name = "Modular Receiver" + id = "receiver" + build_type = AUTOLATHE + materials = list(MAT_METAL = 15000) + build_path = /obj/item/weaponcrafting/receiver + category = list("hacked", "Security") + +/datum/design/shotgun_slug + name = "Shotgun Slug" + id = "shotgun_slug" + build_type = AUTOLATHE + materials = list(MAT_METAL = 4000) + build_path = /obj/item/ammo_casing/shotgun + category = list("hacked", "Security") + +/datum/design/buckshot_shell + name = "Buckshot Shell" + id = "buckshot_shell" + build_type = AUTOLATHE + materials = list(MAT_METAL = 4000) + build_path = /obj/item/ammo_casing/shotgun/buckshot + category = list("hacked", "Security") + +/datum/design/shotgun_dart + name = "Shotgun Dart" + id = "shotgun_dart" + build_type = AUTOLATHE + materials = list(MAT_METAL = 4000) + build_path = /obj/item/ammo_casing/shotgun/dart + category = list("hacked", "Security") + +/datum/design/incendiary_slug + name = "Incendiary Slug" + id = "incendiary_slug" + build_type = AUTOLATHE + materials = list(MAT_METAL = 4000) + build_path = /obj/item/ammo_casing/shotgun/incendiary + category = list("hacked", "Security") + +/datum/design/riot_dart + name = "Foam Riot Dart" + id = "riot_dart" + build_type = AUTOLATHE + materials = list(MAT_METAL = 1000) //Discount for making individually - no box = less metal! + build_path = /obj/item/ammo_casing/caseless/foam_dart/riot + category = list("hacked", "Security") + +/datum/design/riot_darts + name = "Foam Riot Dart Box" + id = "riot_darts" + build_type = AUTOLATHE + materials = list(MAT_METAL = 50000) //Comes with 40 darts + build_path = /obj/item/ammo_box/foambox/riot + category = list("hacked", "Security") + +/datum/design/a357 + name = "Speed Loader (.357)" + id = "a357" + build_type = AUTOLATHE + materials = list(MAT_METAL = 30000) + build_path = /obj/item/ammo_box/a357 + category = list("hacked", "Security") + +/datum/design/c10mm + name = "Ammo Box (10mm)" + id = "c10mm" + build_type = AUTOLATHE + materials = list(MAT_METAL = 30000) + build_path = /obj/item/ammo_box/c10mm + category = list("hacked", "Security") + +/datum/design/c45 + name = "Ammo Box (.45)" + id = "c45" + build_type = AUTOLATHE + materials = list(MAT_METAL = 30000) + build_path = /obj/item/ammo_box/c45 + category = list("hacked", "Security") + +/datum/design/c9mm + name = "Ammo Box (9mm)" + id = "c9mm" + build_type = AUTOLATHE + materials = list(MAT_METAL = 30000) + build_path = /obj/item/ammo_box/c9mm + category = list("hacked", "Security") + +/datum/design/electropack + name = "Electropack" + id = "electropack" + build_type = AUTOLATHE + materials = list(MAT_METAL = 10000, MAT_GLASS = 2500) + build_path = /obj/item/electropack + category = list("hacked", "Security") + +/datum/design/cleaver + name = "Butcher's Cleaver" + id = "cleaver" + build_type = AUTOLATHE + materials = list(MAT_METAL = 18000) + build_path = /obj/item/kitchen/knife/butcher + category = list("hacked", "Dinnerware") + +/datum/design/foilhat + name = "Tinfoil Hat" + id = "tinfoil_hat" + build_type = AUTOLATHE + materials = list(MAT_METAL = 5500) + build_path = /obj/item/clothing/head/foilhat + category = list("hacked", "Misc") \ No newline at end of file diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_tcomms_and_misc.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_tcomms_and_misc.dm new file mode 100644 index 0000000000..29d28b7132 --- /dev/null +++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_tcomms_and_misc.dm @@ -0,0 +1,251 @@ +/////////////////////////////////// +//////////Autolathe Designs /////// +/////////////////////////////////// +///////////// +////T-Comms// +///////////// + +/datum/design/signaler + name = "Remote Signaling Device" + id = "signaler" + build_type = AUTOLATHE + materials = list(MAT_METAL = 400, MAT_GLASS = 120) + build_path = /obj/item/assembly/signaler + category = list("initial", "T-Comm") + +/datum/design/radio_headset + name = "Radio Headset" + id = "radio_headset" + build_type = AUTOLATHE + materials = list(MAT_METAL = 75) + build_path = /obj/item/radio/headset + category = list("initial", "T-Comm") + +/datum/design/bounced_radio + name = "Station Bounced Radio" + id = "bounced_radio" + build_type = AUTOLATHE + materials = list(MAT_METAL = 75, MAT_GLASS = 25) + build_path = /obj/item/radio/off + category = list("initial", "T-Comm") + +/datum/design/intercom_frame + name = "Intercom Frame" + id = "intercom_frame" + build_type = AUTOLATHE + materials = list(MAT_METAL = 75, MAT_GLASS = 25) + build_path = /obj/item/wallframe/intercom + category = list("initial", "T-Comm") + +///////////// +////MISC///// +///////////// + +/datum/design/camera + name = "Camera" + id = "camera" + build_type = AUTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 100) + build_path = /obj/item/camera + category = list("initial", "Misc") + +/datum/design/camera_film + name = "Camera Film Cartridge" + id = "camera_film" + build_type = AUTOLATHE + materials = list(MAT_METAL = 10, MAT_GLASS = 10) + build_path = /obj/item/camera_film + category = list("initial", "Misc") + +/datum/design/earmuffs + name = "Earmuffs" + id = "earmuffs" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 500) + build_path = /obj/item/clothing/ears/earmuffs + category = list("initial", "Misc") + +/datum/design/pipe_painter + name = "Pipe Painter" + id = "pipe_painter" + build_type = AUTOLATHE + materials = list(MAT_METAL = 5000, MAT_GLASS = 2000) + build_path = /obj/item/pipe_painter + category = list("initial", "Misc") + +/datum/design/airlock_painter + name = "Airlock Painter" + id = "airlock_painter" + build_type = AUTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 50) + build_path = /obj/item/airlock_painter + category = list("initial", "Misc") + +/datum/design/cultivator + name = "Cultivator" + id = "cultivator" + build_type = AUTOLATHE + materials = list(MAT_METAL=50) + build_path = /obj/item/cultivator + category = list("initial","Misc") + +/datum/design/plant_analyzer + name = "Plant Analyzer" + id = "plant_analyzer" + build_type = AUTOLATHE + materials = list(MAT_METAL = 30, MAT_GLASS = 20) + build_path = /obj/item/plant_analyzer + category = list("initial","Misc") + +/datum/design/shovel + name = "Shovel" + id = "shovel" + build_type = AUTOLATHE + materials = list(MAT_METAL = 50) + build_path = /obj/item/shovel + category = list("initial","Misc") + +/datum/design/spade + name = "Spade" + id = "spade" + build_type = AUTOLATHE + materials = list(MAT_METAL = 50) + build_path = /obj/item/shovel/spade + category = list("initial","Misc") + +/datum/design/hatchet + name = "Hatchet" + id = "hatchet" + build_type = AUTOLATHE + materials = list(MAT_METAL = 15000) + build_path = /obj/item/hatchet + category = list("initial","Misc") + +/datum/design/recorder + name = "Universal Recorder" + id = "recorder" + build_type = AUTOLATHE + materials = list(MAT_METAL = 60, MAT_GLASS = 30) + build_path = /obj/item/taperecorder/empty + category = list("initial", "Misc") + +/datum/design/tape + name = "Tape" + id = "tape" + build_type = AUTOLATHE + materials = list(MAT_METAL = 20, MAT_GLASS = 5) + build_path = /obj/item/tape/random + category = list("initial", "Misc") + +/datum/design/igniter + name = "Igniter" + id = "igniter" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 50) + build_path = /obj/item/assembly/igniter + category = list("initial", "Misc") + +/datum/design/infrared_emitter + name = "Infrared Emitter" + id = "infrared_emitter" + build_type = AUTOLATHE + materials = list(MAT_METAL = 1000, MAT_GLASS = 500) + build_path = /obj/item/assembly/infra + category = list("initial", "Misc") + +/datum/design/timer + name = "Timer" + id = "timer" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 50) + build_path = /obj/item/assembly/timer + category = list("initial", "Misc") + +/datum/design/voice_analyser + name = "Voice Analyser" + id = "voice_analyser" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500, MAT_GLASS = 50) + build_path = /obj/item/assembly/voice + category = list("initial", "Misc") + +/datum/design/prox_sensor + name = "Proximity Sensor" + id = "prox_sensor" + build_type = AUTOLATHE + materials = list(MAT_METAL = 800, MAT_GLASS = 200) + build_path = /obj/item/assembly/prox_sensor + category = list("initial", "Misc") + +/datum/design/foam_dart + name = "Box of Foam Darts" + id = "foam_dart" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500) + build_path = /obj/item/ammo_box/foambox + category = list("initial", "Misc") + +/datum/design/laptop + name = "Laptop Frame" + id = "laptop" + build_type = AUTOLATHE + materials = list(MAT_METAL = 10000, MAT_GLASS = 1000) + build_path = /obj/item/modular_computer/laptop/buildable + category = list("initial","Misc") + +/datum/design/tablet + name = "Tablet Frame" + id = "tablet" + build_type = AUTOLATHE + materials = list(MAT_METAL = 2000, MAT_GLASS = 1000) + build_path = /obj/item/modular_computer/tablet + category = list("initial","Misc") + +/datum/design/slime_scanner + name = "Slime Scanner" + id = "slime_scanner" + build_type = AUTOLATHE + materials = list(MAT_METAL = 300, MAT_GLASS = 200) + build_path = /obj/item/slime_scanner + category = list("initial", "Misc") + +/datum/design/pet_carrier + name = "Pet Carrier" + id = "pet_carrier" + build_type = AUTOLATHE + materials = list(MAT_METAL = 7500, MAT_GLASS = 100) + build_path = /obj/item/pet_carrier + category = list("initial", "Misc") + +/datum/design/packageWrap + name = "Package Wrapping" + id = "packagewrap" + build_type = AUTOLATHE + materials = list(MAT_METAL = 200, MAT_GLASS = 200) + build_path = /obj/item/stack/packageWrap + category = list("initial", "Misc") + maxstack = 30 + +/datum/design/holodisk + name = "Holodisk" + id = "holodisk" + build_type = AUTOLATHE + materials = list(MAT_METAL = 100, MAT_GLASS = 100) + build_path = /obj/item/disk/holodisk + category = list("initial", "Misc") + +/datum/design/lock_collar + name = "Lockable Collar" + id = "lock_collar" + build_type = AUTOLATHE + materials = list(MAT_METAL = 1200, MAT_GLASS = 100) + build_path = /obj/item/clothing/neck/petcollar/locked + category = list("initial", "Misc") + +/datum/design/collar_key + name = "Collar Key" + id = "collar_key" + build_type = AUTOLATHE + materials = list(MAT_METAL = 300, MAT_GLASS = 150) + build_path = /obj/item/key/collar + category = list("initial", "Misc") \ No newline at end of file diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm new file mode 100644 index 0000000000..435af80aea --- /dev/null +++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_tools.dm @@ -0,0 +1,150 @@ +/////////////////////////////////// +//////////Autolathe Designs /////// +/////////////////////////////////// +/////////// +///Tools // +/////////// +/datum/design/bucket + name = "Bucket" + id = "bucket" + build_type = AUTOLATHE + materials = list(MAT_METAL = 200) + build_path = /obj/item/reagent_containers/glass/bucket + category = list("initial","Tools") + +/datum/design/crowbar + name = "Pocket Crowbar" + id = "crowbar" + build_type = AUTOLATHE + materials = list(MAT_METAL = 50) + build_path = /obj/item/crowbar + category = list("initial","Tools") + +/datum/design/flashlight + name = "Flashlight" + id = "flashlight" + build_type = AUTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 20) + build_path = /obj/item/flashlight + category = list("initial","Tools") + +/datum/design/extinguisher + name = "Fire Extinguisher" + id = "extinguisher" + build_type = AUTOLATHE + materials = list(MAT_METAL = 90) + build_path = /obj/item/extinguisher + category = list("initial","Tools") + +/datum/design/pocketfireextinguisher + name = "Pocket Fire Extinguisher" + id = "pocketfireextinguisher" + build_type = AUTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 40) + build_path = /obj/item/extinguisher/mini + category = list("initial","Tools") + +/datum/design/multitool + name = "Multitool" + id = "multitool" + build_type = AUTOLATHE + materials = list(MAT_METAL = 50, MAT_GLASS = 20) + build_path = /obj/item/multitool + category = list("initial","Tools") + +/datum/design/analyzer + name = "Analyzer" + id = "analyzer" + build_type = AUTOLATHE + materials = list(MAT_METAL = 30, MAT_GLASS = 20) + build_path = /obj/item/analyzer + category = list("initial","Tools") + +/datum/design/tscanner + name = "T-Ray Scanner" + id = "tscanner" + build_type = AUTOLATHE + materials = list(MAT_METAL = 150) + build_path = /obj/item/t_scanner + category = list("initial","Tools") + +/datum/design/weldingtool + name = "Welding Tool" + id = "welding_tool" + build_type = AUTOLATHE + materials = list(MAT_METAL = 70, MAT_GLASS = 20) + build_path = /obj/item/weldingtool + category = list("initial","Tools") + +/datum/design/mini_weldingtool + name = "Emergency Welding Tool" + id = "mini_welding_tool" + build_type = AUTOLATHE + materials = list(MAT_METAL = 30, MAT_GLASS = 10) + build_path = /obj/item/weldingtool/mini + category = list("initial","Tools") + +/datum/design/screwdriver + name = "Screwdriver" + id = "screwdriver" + build_type = AUTOLATHE + materials = list(MAT_METAL = 75) + build_path = /obj/item/screwdriver + category = list("initial","Tools") + +/datum/design/wirecutters + name = "Wirecutters" + id = "wirecutters" + build_type = AUTOLATHE + materials = list(MAT_METAL = 80) + build_path = /obj/item/wirecutters + category = list("initial","Tools") + +/datum/design/wrench + name = "Wrench" + id = "wrench" + build_type = AUTOLATHE + materials = list(MAT_METAL = 150) + build_path = /obj/item/wrench + category = list("initial","Tools") + +/datum/design/welding_helmet + name = "Welding Helmet" + id = "welding_helmet" + build_type = AUTOLATHE + materials = list(MAT_METAL = 1750, MAT_GLASS = 400) + build_path = /obj/item/clothing/head/welding + category = list("initial","Tools") + +/datum/design/cable_coil + name = "Cable Coil" + id = "cable_coil" + build_type = AUTOLATHE + materials = list(MAT_METAL = 10, MAT_GLASS = 5) + build_path = /obj/item/stack/cable_coil/random + category = list("initial","Tools") + maxstack = 30 + +/datum/design/toolbox + name = "Toolbox" + id = "tool_box" + build_type = AUTOLATHE + materials = list(MAT_METAL = 500) + build_path = /obj/item/storage/toolbox + category = list("initial","Tools") + +/datum/design/spraycan + name = "Spraycan" + id = "spraycan" + build_type = AUTOLATHE + materials = list(MAT_METAL = 100, MAT_GLASS = 100) + build_path = /obj/item/toy/crayon/spraycan + category = list("initial", "Tools") + +/datum/design/geiger + name = "Geiger Counter" + id = "geigercounter" + build_type = AUTOLATHE + materials = list(MAT_METAL = 150, MAT_GLASS = 150) + build_path = /obj/item/geiger_counter + category = list("initial", "Tools") \ No newline at end of file diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index aea3a3755f..9005b1cd30 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -196,8 +196,8 @@ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/defib_heal - name = "Defibrillartor Healing disk" - desc = "A disk allowing for greater amounts of healing" + name = "Defibrillator Healing disk" + desc = "An upgrade which increases the healing power of the defibrillator" id = "defib_heal" build_type = PROTOLATHE materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 6000, MAT_SILVER = 6000) @@ -207,8 +207,8 @@ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/defib_shock - name = "Defibrillartor Anit-Shock Disk" - desc = "A disk that helps agains shocking anyone, other then the intented target" + name = "Defibrillator Anti-Shock Disk" + desc = "A safety upgrade that guarantees only the patient will get shocked" id = "defib_shock" build_type = PROTOLATHE materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 6000, MAT_SILVER = 6000) @@ -218,8 +218,8 @@ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/defib_decay - name = "Defibrillartor Body-Decay extender Disk" - desc = "A disk that helps defibrillator revive the longer decayed dead" + name = "Defibrillator Body-Decay Extender Disk" + desc = "An upgrade allowing the defibrillator to work on more decayed bodies" id = "defib_decay" build_type = PROTOLATHE materials = list(MAT_METAL=16000, MAT_GLASS = 18000, MAT_GOLD = 16000, MAT_SILVER = 6000, MAT_TITANIUM = 2000) @@ -229,8 +229,8 @@ departmental_flags = DEPARTMENTAL_FLAG_MEDICAL /datum/design/defib_speed - name = "Defibrllartor Pre-Primer Disk" - desc = "A disk that cuts the time charg time in half for defibrillator use" + name = "Defibrillator Fast Charge Disk" + desc = "An upgrade to the defibrillator capacitors, which let it charge faster" id = "defib_speed" build_type = PROTOLATHE build_path = /obj/item/disk/medical/defib_speed diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index aa091d181c..e25dced31c 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -102,8 +102,8 @@ /datum/techweb_node/adv_defibrillator_tec id = "adv_defibrillator_tec" - display_name = "Adv Defibrillator tec" - description = "More ways to bring back the freshly dead." + display_name = "Defibrillator Upgrades" + description = "More ways to bring back the newly dead." prereq_ids = list("adv_biotech", "exp_surgery", "adv_engi", "adv_power") design_ids = list("defib_decay", "defib_shock", "defib_heal", "defib_speed") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index dfdf0fde69..71b659b73f 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -385,6 +385,8 @@ . = list() var/image_dir = 0 + var/icon_gender = (body_gender == FEMALE) ? "f" : "m" //gender of the icon, if applicable + if(dropped) image_dir = SOUTH if(dmg_overlay_type) @@ -393,8 +395,11 @@ if(burnstate) . += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_0[burnstate]", -DAMAGE_LAYER, image_dir) if(body_markings && status != BODYPART_ROBOTIC) - if(use_digitigrade == NOT_DIGITIGRADE) - . += image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) + if(!use_digitigrade) + if(BODY_ZONE_CHEST) + . += image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir) + else + . += image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) else . += image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) @@ -417,8 +422,6 @@ limb.icon_state = "[animal_origin]_[body_zone]" return - var/icon_gender = (body_gender == FEMALE) ? "f" : "m" //gender of the icon, if applicable - if((body_zone != BODY_ZONE_HEAD && body_zone != BODY_ZONE_CHEST)) should_draw_gender = FALSE @@ -454,7 +457,10 @@ marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) else if(!use_digitigrade) - marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) + if(body_zone == BODY_ZONE_CHEST) + marking = image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir) + else + marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) else marking = image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) . += marking @@ -494,7 +500,10 @@ marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) else if(!use_digitigrade) - marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) + if(body_zone == BODY_ZONE_CHEST) + marking = image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir) + else + marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) else marking = image(body_markings_icon, "[body_markings]_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) . += marking diff --git a/html/changelogs/AutoChangeLog-pr-8296.yml b/html/changelogs/AutoChangeLog-pr-8296.yml new file mode 100644 index 0000000000..78db7ccb0d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8296.yml @@ -0,0 +1,5 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - balance: "25% < --- 50% For NPC blocking bullshit +ided: Yes" diff --git a/html/changelogs/AutoChangeLog-pr-8325.yml b/html/changelogs/AutoChangeLog-pr-8325.yml new file mode 100644 index 0000000000..1e665e7917 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8325.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - code_imp: "made it look nice" diff --git a/html/changelogs/AutoChangeLog-pr-8384.yml b/html/changelogs/AutoChangeLog-pr-8384.yml new file mode 100644 index 0000000000..f98b473e6c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8384.yml @@ -0,0 +1,6 @@ +author: "Nero1024" +delete-after: True +changes: + - soundadd: "Bare feet will now make the correct footstep sounds." + - soundadd: "Other mobs will make the correct footstep sounds." + - soundadd: "Crawling/dragging sounds for downed/incapacitated mobs" diff --git a/html/changelogs/AutoChangeLog-pr-8397.yml b/html/changelogs/AutoChangeLog-pr-8397.yml new file mode 100644 index 0000000000..28ed98666f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8397.yml @@ -0,0 +1,5 @@ +author: "WhiteHusky" +delete-after: True +changes: + - tweak: "Changed the styling of arousal messages to use pink-ish colors." + - bugfix: "The orgasm moodlet message new-lines properly." diff --git a/html/changelogs/AutoChangeLog-pr-8398.yml b/html/changelogs/AutoChangeLog-pr-8398.yml new file mode 100644 index 0000000000..a7ce2fbe2d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8398.yml @@ -0,0 +1,6 @@ +author: "BurgerBB" +delete-after: True +changes: + - balance: "Ass slapping only works if you're actually behind the target. Ass slapping now respects disarm blocking. You can no longer face/ass slap someone on an intent other than help, unless they are also face/ass slapping." + - bugfix: "Fixed ass and face slapping grammar." + - rscadd: "Adds meh effects for ass and face slapping." diff --git a/html/changelogs/AutoChangeLog-pr-8399.yml b/html/changelogs/AutoChangeLog-pr-8399.yml new file mode 100644 index 0000000000..5c71d19faa --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8399.yml @@ -0,0 +1,4 @@ +author: "Poojawa" +delete-after: True +changes: + - rscadd: "Large maps have had a patient room transformed into micro chemistry stations with nothing else in them. They've been labelled 'Apothecary' rooms and are accessible by doctors." diff --git a/html/changelogs/AutoChangeLog-pr-8407.yml b/html/changelogs/AutoChangeLog-pr-8407.yml new file mode 100644 index 0000000000..5f1d9d0729 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8407.yml @@ -0,0 +1,6 @@ +author: "Poojawa" +delete-after: True +changes: + - rscadd: "females now have female defined sprites" + - bugfix: "Slime legs have had their excess pixels adjusted" + - bugfix: "Mammal normal legs are more in line with human legs now" diff --git a/html/changelogs/AutoChangeLog-pr-8409.yml b/html/changelogs/AutoChangeLog-pr-8409.yml new file mode 100644 index 0000000000..01f69bf437 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8409.yml @@ -0,0 +1,4 @@ +author: "Poojawa" +delete-after: True +changes: + - bugfix: "fixed species like abductors and golems getting the fat tiddy or pingas" diff --git a/html/changelogs/AutoChangeLog-pr-8411.yml b/html/changelogs/AutoChangeLog-pr-8411.yml new file mode 100644 index 0000000000..4d4a122cf2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8411.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - balance: "2 -> 3" diff --git a/html/changelogs/AutoChangeLog-pr-8413.yml b/html/changelogs/AutoChangeLog-pr-8413.yml new file mode 100644 index 0000000000..01de909a3b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8413.yml @@ -0,0 +1,5 @@ +author: "Useroth" +delete-after: True +changes: + - bugfix: "The space hotel dorms are now properly boltable with the buttons inside." + - bugfix: "Makes the booze-o-mat hacked by default. Alternative to https://github.com/Citadel-Station-13/Citadel-Station-13/pull/8350." diff --git a/html/changelogs/AutoChangeLog-pr-8417.yml b/html/changelogs/AutoChangeLog-pr-8417.yml new file mode 100644 index 0000000000..2a6eaa6237 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8417.yml @@ -0,0 +1,5 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - rscadd: "Added a few jet packs to the space queens men" + - tweak: "volume of jet packs" diff --git a/html/changelogs/AutoChangeLog-pr-8420.yml b/html/changelogs/AutoChangeLog-pr-8420.yml new file mode 100644 index 0000000000..60c8543647 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8420.yml @@ -0,0 +1,5 @@ +author: "deathride58" +delete-after: True +changes: + - bugfix: "Shield blobs no longer become completely invulnerable to all forms of damage after reaching a \"\"\"weakened\"\"\" state" + - tweak: "Taken care of what appeared to have been an oversight where shield blobs don't recover their armor after becoming weakened." diff --git a/html/changelogs/AutoChangeLog-pr-8429.yml b/html/changelogs/AutoChangeLog-pr-8429.yml new file mode 100644 index 0000000000..0769af85aa --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8429.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - bugfix: "Nerfed concatenators by limiting the amount of characters they're able to output" diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 70a5a71652..29086033c8 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/mob/aibots.dmi b/icons/mob/aibots.dmi index 913a0dff02..f4049abc41 100644 Binary files a/icons/mob/aibots.dmi and b/icons/mob/aibots.dmi differ diff --git a/icons/mob/human_parts_greyscale.dmi b/icons/mob/human_parts_greyscale.dmi index 50c143b9cb..f49a27fda4 100644 Binary files a/icons/mob/human_parts_greyscale.dmi and b/icons/mob/human_parts_greyscale.dmi differ diff --git a/modular_citadel/code/datums/mood_events/generic_positive_events.dm b/modular_citadel/code/datums/mood_events/generic_positive_events.dm index 4c581d8184..717fe5a47d 100644 --- a/modular_citadel/code/datums/mood_events/generic_positive_events.dm +++ b/modular_citadel/code/datums/mood_events/generic_positive_events.dm @@ -21,7 +21,7 @@ timeout = 3000 /datum/mood_event/orgasm - description = "I came!" //funny meme haha + description = "I came!\n" //funny meme haha mood_change = 3 timeout = 1000 diff --git a/modular_citadel/code/modules/arousal/arousal.dm b/modular_citadel/code/modules/arousal/arousal.dm index 307cdff29f..ef9201af60 100644 --- a/modular_citadel/code/modules/arousal/arousal.dm +++ b/modular_citadel/code/modules/arousal/arousal.dm @@ -222,17 +222,17 @@ fluid_source = G.linked_organ.reagents total_fluids = fluid_source.total_volume if(mb_time) - src.visible_message("[src] starts to [G.masturbation_verb] [p_their()] [G.name].", \ - "You start to [G.masturbation_verb] your [G.name].", \ - "You start to [G.masturbation_verb] your [G.name].") + src.visible_message("[src] starts to [G.masturbation_verb] [p_their()] [G.name].", \ + "You start to [G.masturbation_verb] your [G.name].", \ + "You start to [G.masturbation_verb] your [G.name].") if(do_after(src, mb_time, target = src)) if(total_fluids > 5) fluid_source.reaction(src.loc, TOUCH, 1, 0) fluid_source.clear_reagents() - src.visible_message("[src] orgasms, cumming[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""]!", \ - "You cum[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""].", \ - "You have relieved yourself.") + src.visible_message("[src] orgasms, cumming[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""]!", \ + "You cum[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""].", \ + "You have relieved yourself.") SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm) if(G.can_climax) setArousalLoss(min_arousal) @@ -260,16 +260,16 @@ else total_fluids = fluid_source.total_volume if(mb_time) //as long as it's not instant, give a warning - src.visible_message("[src] looks like they're about to cum.", \ - "You feel yourself about to orgasm.", \ - "You feel yourself about to orgasm.") + src.visible_message("[src] looks like they're about to cum.", \ + "You feel yourself about to orgasm.", \ + "You feel yourself about to orgasm.") if(do_after(src, mb_time, target = src)) if(total_fluids > 5) fluid_source.reaction(src.loc, TOUCH, 1, 0) fluid_source.clear_reagents() - src.visible_message("[src] orgasms[istype(src.loc, /turf/open/floor) ? ", spilling onto [src.loc]" : ""], using [p_their()] [G.name]!", \ - "You climax[istype(src.loc, /turf/open/floor) ? ", spilling onto [src.loc]" : ""] with your [G.name].", \ - "You climax using your [G.name].") + src.visible_message("[src] orgasms[istype(src.loc, /turf/open/floor) ? ", spilling onto [src.loc]" : ""], using [p_their()] [G.name]!", \ + "You climax[istype(src.loc, /turf/open/floor) ? ", spilling onto [src.loc]" : ""] with your [G.name].", \ + "You climax using your [G.name].") SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm) if(G.can_climax) setArousalLoss(min_arousal) @@ -288,9 +288,9 @@ fluid_source = G.linked_organ.reagents total_fluids = fluid_source.total_volume if(mb_time) //Skip warning if this is an instant climax. - src.visible_message("[src] is about to climax with [L]!", \ - "You're about to climax with [L]!", \ - "You're preparing to climax with someone!") + src.visible_message("[src] is about to climax with [L]!", \ + "You're about to climax with [L]!", \ + "You're preparing to climax with someone!") if(spillage) if(do_after(src, mb_time, target = src) && in_range(src, L)) fluid_source.trans_to(L, total_fluids*G.fluid_transfer_factor) @@ -298,9 +298,9 @@ if(total_fluids > 5) fluid_source.reaction(L.loc, TOUCH, 1, 0) fluid_source.clear_reagents() - src.visible_message("[src] climaxes with [L][spillage ? ", overflowing and spilling":""], using [p_their()] [G.name]!", \ - "You orgasm with [L][spillage ? ", spilling out of them":""], using your [G.name].", \ - "You have climaxed with someone[spillage ? ", spilling out of them":""], using your [G.name].") + src.visible_message("[src] climaxes with [L][spillage ? ", overflowing and spilling":""], using [p_their()] [G.name]!", \ + "You orgasm with [L][spillage ? ", spilling out of them":""], using your [G.name].", \ + "You have climaxed with someone[spillage ? ", spilling out of them":""], using your [G.name].") SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm) SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm) if(G.can_climax) @@ -309,9 +309,9 @@ if(do_after(src, mb_time, target = src) && in_range(src, L)) fluid_source.trans_to(L, total_fluids) total_fluids = 0 - src.visible_message("[src] climaxes with [L], [p_their()] [G.name] spilling nothing!", \ - "You ejaculate with [L], your [G.name] spilling nothing.", \ - "You have climaxed inside someone, your [G.name] spilling nothing.") + src.visible_message("[src] climaxes with [L], [p_their()] [G.name] spilling nothing!", \ + "You ejaculate with [L], your [G.name] spilling nothing.", \ + "You have climaxed inside someone, your [G.name] spilling nothing.") SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm) SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm) if(G.can_climax) @@ -335,14 +335,14 @@ // to_chat(src, "You need a container to do this!") // return - src.visible_message("[src] starts to [G.masturbation_verb] their [G.name] over [container].", \ - "You start to [G.masturbation_verb] your [G.name] over [container].", \ - "You start to [G.masturbation_verb] your [G.name] over something.") + src.visible_message("[src] starts to [G.masturbation_verb] their [G.name] over [container].", \ + "You start to [G.masturbation_verb] your [G.name] over [container].", \ + "You start to [G.masturbation_verb] your [G.name] over something.") if(do_after(src, mb_time, target = src) && in_range(src, container)) fluid_source.trans_to(container, total_fluids) - src.visible_message("[src] uses [p_their()] [G.name] to fill [container]!", \ - "You used your [G.name] to fill [container].", \ - "You have relieved some pressure.") + src.visible_message("[src] uses [p_their()] [G.name] to fill [container]!", \ + "You used your [G.name] to fill [container].", \ + "You have relieved some pressure.") SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "orgasm", /datum/mood_event/orgasm) if(G.can_climax) setArousalLoss(min_arousal) diff --git a/modular_citadel/code/modules/arousal/organs/genitals.dm b/modular_citadel/code/modules/arousal/organs/genitals.dm index d13c2f6a97..591bb6f1de 100644 --- a/modular_citadel/code/modules/arousal/organs/genitals.dm +++ b/modular_citadel/code/modules/arousal/organs/genitals.dm @@ -133,12 +133,12 @@ //proc to give a player their genitals and stuff when they log in /mob/living/carbon/human/proc/give_genitals(clean=0)//clean will remove all pre-existing genitals. proc will then give them any genitals that are enabled in their DNA - if (NOGENITALS in dna.species.species_traits) - return if(clean) var/obj/item/organ/genital/GtoClean for(GtoClean in internal_organs) qdel(GtoClean) + if (NOGENITALS in dna.species.species_traits) + return //Order should be very important. FIRST vagina, THEN testicles, THEN penis, as this affects the order they are rendered in. if(dna.features["has_breasts"]) give_breasts() diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm index 8af0dc2013..8d08937f55 100644 --- a/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm +++ b/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon_energy.dm @@ -9,7 +9,7 @@ icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' icon_state = "mag-casing-live" projectile_type = /obj/item/projectile/bullet/magrifle - energy_cost = 300 + energy_cost = 200 /obj/item/ammo_casing/caseless/mag_e/anlmagm_e desc = "A large, specialized ferromagnetic slug designed with a less-than-lethal payload." @@ -17,7 +17,7 @@ icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' icon_state = "mag-casing-live" projectile_type = /obj/item/projectile/bullet/nlmagrifle - energy_cost = 300 + energy_cost = 200 /obj/item/ammo_casing/caseless/mag_e/amags desc = "A ferromagnetic slug intended to be launched out of a compatible weapon." @@ -25,7 +25,7 @@ icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' icon_state = "mag-casing-live" projectile_type = /obj/item/projectile/bullet/mags - energy_cost = 200 + energy_cost = 125 /obj/item/ammo_casing/caseless/mag_e/anlmags desc = "A specialized ferromagnetic slug designed with a less-than-lethal payload." @@ -33,7 +33,7 @@ icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' icon_state = "mag-casing-live" projectile_type = /obj/item/projectile/bullet/nlmags - energy_cost = 200 + energy_cost = 125 ///magazines/// @@ -53,14 +53,13 @@ ammo_type = /obj/item/ammo_casing/caseless/mag_e/amagm_e max_ammo = 24 - /obj/item/ammo_box/magazine/mmag_e/small name = "magpistol magazine (non-lethal disabler)" icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' icon_state = "nlmagmag" ammo_type = /obj/item/ammo_casing/caseless/mag_e/anlmags caliber = "mag_e" - max_ammo = 15 + max_ammo = 16 multiple_sprites = 2 /obj/item/ammo_box/magazine/mmag_e/small/lethal @@ -68,6 +67,7 @@ icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' icon_state = "smallmagmag" ammo_type = /obj/item/ammo_casing/caseless/mag_e/amags + max_ammo = 16 ///cells/// @@ -218,7 +218,6 @@ pin = null spawnwithmagazine = FALSE - ///magpistol/// /obj/item/gun/ballistic/automatic/pistol/mag_e @@ -278,7 +277,6 @@ if(!dead_cell) cell.give(cell.maxcharge) - /obj/item/gun/ballistic/automatic/pistol/mag_e/update_icon() ..() if(magazine) @@ -288,7 +286,6 @@ cut_overlays() icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" - /obj/item/gun/ballistic/automatic/pistol/mag_e/nopin pin = null spawnwithmagazine = FALSE diff --git a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm index 061f941043..3da35d9c6d 100644 --- a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm +++ b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm @@ -104,7 +104,7 @@ M.emote(pick("moan","blush")) if(prob(5)) var/aroused_message = pick("You feel frisky.", "You're having trouble suppressing your urges.", "You feel in the mood.") - to_chat(M, "[aroused_message]") + to_chat(M, "[aroused_message]") ..() /datum/reagent/drug/aphrodisiacplus @@ -133,7 +133,7 @@ aroused_message = pick("You need to fuck someone!", "You're bursting with sexual tension!", "You can't get sex off your mind!") else aroused_message = pick("You feel a bit hot.", "You feel strong sexual urges.", "You feel in the mood.", "You're ready to go down on someone.") - to_chat(M, "[aroused_message]") + to_chat(M, "[aroused_message]") ..() /datum/reagent/drug/aphrodisiacplus/addiction_act_stage2(mob/living/M) diff --git a/modular_citadel/code/modules/research/designs/autolathe_designs.dm b/modular_citadel/code/modules/research/designs/autolathe_designs.dm deleted file mode 100755 index 55b83a2262..0000000000 --- a/modular_citadel/code/modules/research/designs/autolathe_designs.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/design/hypovialsmall - name = "Hypovial" - id = "hypovial" - build_type = AUTOLATHE - materials = list(MAT_METAL = 500) - build_path = /obj/item/reagent_containers/glass/bottle/vial/small - category = list("initial","Medical") - -/datum/design/hypoviallarge - name = "Large Hypovial" - id = "large_hypovial" - build_type = AUTOLATHE - materials = list(MAT_METAL = 2500) - build_path = /obj/item/reagent_containers/glass/bottle/vial/large - category = list("initial","Medical") diff --git a/modular_citadel/icons/mob/mam_markings.dmi b/modular_citadel/icons/mob/mam_markings.dmi index ceecf12d2e..3575f38e1c 100644 Binary files a/modular_citadel/icons/mob/mam_markings.dmi and b/modular_citadel/icons/mob/mam_markings.dmi differ diff --git a/modular_citadel/icons/mob/markings_notmammals.dmi b/modular_citadel/icons/mob/markings_notmammals.dmi index 316d1d1af8..59b10e93aa 100644 Binary files a/modular_citadel/icons/mob/markings_notmammals.dmi and b/modular_citadel/icons/mob/markings_notmammals.dmi differ diff --git a/modular_citadel/icons/mob/mutant_bodyparts.dmi b/modular_citadel/icons/mob/mutant_bodyparts.dmi index 1ed73d2709..5f72d1013b 100644 Binary files a/modular_citadel/icons/mob/mutant_bodyparts.dmi and b/modular_citadel/icons/mob/mutant_bodyparts.dmi differ diff --git a/sound/effects/footstep/carpetbarefoot1.ogg b/sound/effects/footstep/carpetbarefoot1.ogg new file mode 100644 index 0000000000..81615d2970 Binary files /dev/null and b/sound/effects/footstep/carpetbarefoot1.ogg differ diff --git a/sound/effects/footstep/carpetbarefoot2.ogg b/sound/effects/footstep/carpetbarefoot2.ogg new file mode 100644 index 0000000000..d1c7e1627e Binary files /dev/null and b/sound/effects/footstep/carpetbarefoot2.ogg differ diff --git a/sound/effects/footstep/carpetbarefoot3.ogg b/sound/effects/footstep/carpetbarefoot3.ogg new file mode 100644 index 0000000000..13ecb3398b Binary files /dev/null and b/sound/effects/footstep/carpetbarefoot3.ogg differ diff --git a/sound/effects/footstep/carpetbarefoot4.ogg b/sound/effects/footstep/carpetbarefoot4.ogg new file mode 100644 index 0000000000..31850250be Binary files /dev/null and b/sound/effects/footstep/carpetbarefoot4.ogg differ diff --git a/sound/effects/footstep/carpetbarefoot5.ogg b/sound/effects/footstep/carpetbarefoot5.ogg new file mode 100644 index 0000000000..e9a44765b1 Binary files /dev/null and b/sound/effects/footstep/carpetbarefoot5.ogg differ diff --git a/sound/effects/footstep/crawl1.ogg b/sound/effects/footstep/crawl1.ogg new file mode 100644 index 0000000000..61a73a58d0 Binary files /dev/null and b/sound/effects/footstep/crawl1.ogg differ diff --git a/sound/effects/footstep/hardbarefoot1.ogg b/sound/effects/footstep/hardbarefoot1.ogg new file mode 100644 index 0000000000..2614872191 Binary files /dev/null and b/sound/effects/footstep/hardbarefoot1.ogg differ diff --git a/sound/effects/footstep/hardbarefoot2.ogg b/sound/effects/footstep/hardbarefoot2.ogg new file mode 100644 index 0000000000..7d89d96105 Binary files /dev/null and b/sound/effects/footstep/hardbarefoot2.ogg differ diff --git a/sound/effects/footstep/hardbarefoot3.ogg b/sound/effects/footstep/hardbarefoot3.ogg new file mode 100644 index 0000000000..639751fab0 Binary files /dev/null and b/sound/effects/footstep/hardbarefoot3.ogg differ diff --git a/sound/effects/footstep/hardbarefoot4.ogg b/sound/effects/footstep/hardbarefoot4.ogg new file mode 100644 index 0000000000..9cf363a18c Binary files /dev/null and b/sound/effects/footstep/hardbarefoot4.ogg differ diff --git a/sound/effects/footstep/hardbarefoot5.ogg b/sound/effects/footstep/hardbarefoot5.ogg new file mode 100644 index 0000000000..72ebeca84d Binary files /dev/null and b/sound/effects/footstep/hardbarefoot5.ogg differ diff --git a/sound/effects/footstep/hardclaw1.ogg b/sound/effects/footstep/hardclaw1.ogg new file mode 100644 index 0000000000..1d66eb4d49 Binary files /dev/null and b/sound/effects/footstep/hardclaw1.ogg differ diff --git a/sound/effects/footstep/hardclaw2.ogg b/sound/effects/footstep/hardclaw2.ogg new file mode 100644 index 0000000000..a6a7951d77 Binary files /dev/null and b/sound/effects/footstep/hardclaw2.ogg differ diff --git a/sound/effects/footstep/hardclaw3.ogg b/sound/effects/footstep/hardclaw3.ogg new file mode 100644 index 0000000000..a2e5462199 Binary files /dev/null and b/sound/effects/footstep/hardclaw3.ogg differ diff --git a/sound/effects/footstep/hardclaw4.ogg b/sound/effects/footstep/hardclaw4.ogg new file mode 100644 index 0000000000..bd845a8782 Binary files /dev/null and b/sound/effects/footstep/hardclaw4.ogg differ diff --git a/sound/effects/footstep/heavy1.ogg b/sound/effects/footstep/heavy1.ogg new file mode 100644 index 0000000000..bfc80a4270 Binary files /dev/null and b/sound/effects/footstep/heavy1.ogg differ diff --git a/sound/effects/footstep/heavy2.ogg b/sound/effects/footstep/heavy2.ogg new file mode 100644 index 0000000000..514e3ac3e2 Binary files /dev/null and b/sound/effects/footstep/heavy2.ogg differ diff --git a/sound/effects/footstep/slime1.ogg b/sound/effects/footstep/slime1.ogg new file mode 100644 index 0000000000..a83b7646f1 Binary files /dev/null and b/sound/effects/footstep/slime1.ogg differ diff --git a/sound/effects/footstep/woodbarefoot1.ogg b/sound/effects/footstep/woodbarefoot1.ogg new file mode 100644 index 0000000000..bb66da770e Binary files /dev/null and b/sound/effects/footstep/woodbarefoot1.ogg differ diff --git a/sound/effects/footstep/woodbarefoot2.ogg b/sound/effects/footstep/woodbarefoot2.ogg new file mode 100644 index 0000000000..67397d868e Binary files /dev/null and b/sound/effects/footstep/woodbarefoot2.ogg differ diff --git a/sound/effects/footstep/woodbarefoot3.ogg b/sound/effects/footstep/woodbarefoot3.ogg new file mode 100644 index 0000000000..113a89003a Binary files /dev/null and b/sound/effects/footstep/woodbarefoot3.ogg differ diff --git a/sound/effects/footstep/woodbarefoot4.ogg b/sound/effects/footstep/woodbarefoot4.ogg new file mode 100644 index 0000000000..ccc2e82075 Binary files /dev/null and b/sound/effects/footstep/woodbarefoot4.ogg differ diff --git a/sound/effects/footstep/woodbarefoot5.ogg b/sound/effects/footstep/woodbarefoot5.ogg new file mode 100644 index 0000000000..6fbce27109 Binary files /dev/null and b/sound/effects/footstep/woodbarefoot5.ogg differ diff --git a/sound/effects/footstep/woodclaw1.ogg b/sound/effects/footstep/woodclaw1.ogg new file mode 100644 index 0000000000..181403b93f Binary files /dev/null and b/sound/effects/footstep/woodclaw1.ogg differ diff --git a/sound/effects/footstep/woodclaw2.ogg b/sound/effects/footstep/woodclaw2.ogg new file mode 100644 index 0000000000..29b04a9554 Binary files /dev/null and b/sound/effects/footstep/woodclaw2.ogg differ diff --git a/sound/effects/footstep/woodclaw3.ogg b/sound/effects/footstep/woodclaw3.ogg new file mode 100644 index 0000000000..9f4ac6d334 Binary files /dev/null and b/sound/effects/footstep/woodclaw3.ogg differ diff --git a/sound/voice/firebot/detected.ogg b/sound/voice/firebot/detected.ogg new file mode 100644 index 0000000000..e5acfa10c7 Binary files /dev/null and b/sound/voice/firebot/detected.ogg differ diff --git a/sound/voice/firebot/extinguishing.ogg b/sound/voice/firebot/extinguishing.ogg new file mode 100644 index 0000000000..d7b44b7fce Binary files /dev/null and b/sound/voice/firebot/extinguishing.ogg differ diff --git a/sound/voice/firebot/keepitcool.ogg b/sound/voice/firebot/keepitcool.ogg new file mode 100644 index 0000000000..e04c94337a Binary files /dev/null and b/sound/voice/firebot/keepitcool.ogg differ diff --git a/sound/voice/firebot/nofires.ogg b/sound/voice/firebot/nofires.ogg new file mode 100644 index 0000000000..962f18d135 Binary files /dev/null and b/sound/voice/firebot/nofires.ogg differ diff --git a/sound/voice/firebot/onlyyou.ogg b/sound/voice/firebot/onlyyou.ogg new file mode 100644 index 0000000000..e8eb3cdf2e Binary files /dev/null and b/sound/voice/firebot/onlyyou.ogg differ diff --git a/sound/voice/firebot/stopdropnroll.ogg b/sound/voice/firebot/stopdropnroll.ogg new file mode 100644 index 0000000000..9e6b1c1bb6 Binary files /dev/null and b/sound/voice/firebot/stopdropnroll.ogg differ diff --git a/sound/voice/firebot/tempnominal.ogg b/sound/voice/firebot/tempnominal.ogg new file mode 100644 index 0000000000..9eaa984cd6 Binary files /dev/null and b/sound/voice/firebot/tempnominal.ogg differ diff --git a/tgstation.dme b/tgstation.dme index ec265f1aea..4d74c8a95f 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1226,13 +1226,13 @@ #include "code\modules\antagonists\clockcult\clock_scriptures\scripture_scripts.dm" #include "code\modules\antagonists\clockcult\clock_structures\_trap_object.dm" #include "code\modules\antagonists\clockcult\clock_structures\ark_of_the_clockwork_justicar.dm" -#include "code\modules\antagonists\clockcult\clock_structures\stargazer.dm" #include "code\modules\antagonists\clockcult\clock_structures\clockwork_obelisk.dm" #include "code\modules\antagonists\clockcult\clock_structures\eminence_spire.dm" #include "code\modules\antagonists\clockcult\clock_structures\heralds_beacon.dm" #include "code\modules\antagonists\clockcult\clock_structures\mania_motor.dm" #include "code\modules\antagonists\clockcult\clock_structures\ocular_warden.dm" #include "code\modules\antagonists\clockcult\clock_structures\ratvar_the_clockwork_justicar.dm" +#include "code\modules\antagonists\clockcult\clock_structures\stargazer.dm" #include "code\modules\antagonists\clockcult\clock_structures\taunting_trail.dm" #include "code\modules\antagonists\clockcult\clock_structures\wall_gear.dm" #include "code\modules\antagonists\clockcult\clock_structures\trap_triggers\lever.dm" @@ -2078,6 +2078,7 @@ #include "code\modules\mob\living\simple_animal\bot\cleanbot.dm" #include "code\modules\mob\living\simple_animal\bot\construction.dm" #include "code\modules\mob\living\simple_animal\bot\ed209bot.dm" +#include "code\modules\mob\living\simple_animal\bot\firebot.dm" #include "code\modules\mob\living\simple_animal\bot\floorbot.dm" #include "code\modules\mob\living\simple_animal\bot\honkbot.dm" #include "code\modules\mob\living\simple_animal\bot\medbot.dm" @@ -2501,7 +2502,12 @@ #include "code\modules\research\server.dm" #include "code\modules\research\stock_parts.dm" #include "code\modules\research\designs\AI_module_designs.dm" -#include "code\modules\research\designs\autolathe_designs.dm" +#include "code\modules\research\designs\autolathe_desings\autolathe_designs_construction.dm" +#include "code\modules\research\designs\autolathe_desings\autolathe_designs_electronics.dm" +#include "code\modules\research\designs\autolathe_desings\autolathe_designs_medical_and_dinnerware.dm" +#include "code\modules\research\designs\autolathe_desings\autolathe_designs_sec_and_hacked.dm" +#include "code\modules\research\designs\autolathe_desings\autolathe_designs_tcomms_and_misc.dm" +#include "code\modules\research\designs\autolathe_desings\autolathe_designs_tools.dm" #include "code\modules\research\designs\biogenerator_designs.dm" #include "code\modules\research\designs\bluespace_designs.dm" #include "code\modules\research\designs\comp_board_designs.dm" @@ -2991,7 +2997,6 @@ #include "modular_citadel\code\modules\reagents\reagent container\hypovial.dm" #include "modular_citadel\code\modules\reagents\reagents\cit_reagents.dm" #include "modular_citadel\code\modules\recycling\disposal\bin.dm" -#include "modular_citadel\code\modules\research\designs\autolathe_designs.dm" #include "modular_citadel\code\modules\research\designs\autoylathe_designs.dm" #include "modular_citadel\code\modules\research\designs\machine_designs.dm" #include "modular_citadel\code\modules\research\designs\weapon_designs.dm"