diff --git a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm b/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm index f0f2d8a6c5..c47534925f 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm @@ -460,7 +460,7 @@ /area/ruin/powered/beach) "cz" = ( /obj/effect/turf_decal/sand, -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/plating/beach/sand, /area/ruin/powered/beach) "cR" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm b/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm index 408fe6ff1d..87137f7d14 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm @@ -896,7 +896,7 @@ /area/ruin/powered/clownplanet) "dR" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/indestructible/sound{ icon_state = "bananium"; name = "bananium floor"; diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm index de78fed108..ec1ce79bd8 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm @@ -809,7 +809,7 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "cF" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/closed/wall/mineral/titanium/nodiagonal, /area/ruin/powered/animal_hospital) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm index aed9b30686..3cae12bfe1 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm @@ -1071,7 +1071,7 @@ /area/ruin/unpowered/ash_walkers) "cE" = ( /obj/structure/stone_tile/surrounding/cracked, -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/ash_walkers) "cF" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm index 49ae2cb4f5..722cc92d78 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm @@ -275,7 +275,7 @@ }, /area/ruin/powered/snow_biodome) "bS" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/plating/asteroid/snow{ initial_gas_mix = "o2=22;n2=82;TEMP=180" }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm index ed4aee469d..875cfdc35d 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm @@ -163,7 +163,7 @@ /turf/open/floor/plasteel/cult{ initial_gas_mix = "o2=14;n2=23;TEMP=300" }, -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/closed/wall/mineral/cult, /area/ruin/unpowered) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm index 66d7173097..773fc01f51 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm @@ -104,7 +104,7 @@ /turf/open/floor/plating, /area/ruin/unpowered) "r" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/closed/wall/rust, /area/ruin/unpowered) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm index 0c40aa2881..ab1d5764e1 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm @@ -29,7 +29,7 @@ /turf/open/floor/engine/cult, /area/ruin/unpowered) "i" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/engine/cult, /area/ruin/unpowered) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm index 97b44df094..3b1c555805 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm @@ -85,7 +85,7 @@ /turf/open/floor/plasteel/freezer, /area/ruin/powered/gluttony) "D" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/plasteel/freezer, /area/ruin/powered/gluttony) "R" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm index fa1e394751..c993ecbb63 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm @@ -285,7 +285,7 @@ /turf/open/floor/plating, /area/ruin/powered/golem_ship) "Y" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/mineral/titanium/purple, /area/ruin/powered/golem_ship) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm index 3d67d7b474..c81c510b9e 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm @@ -123,7 +123,7 @@ /turf/open/floor/engine/cult, /area/ruin/powered/greed) "z" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/engine/cult, /area/ruin/powered/greed) "J" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm index 896f13b1bb..2749e39f1f 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm @@ -180,7 +180,7 @@ }, /area/ruin/powered) "L" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/plating/asteroid/basalt, /area/ruin/powered) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm index 44c41f5b85..f14495c95c 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm @@ -342,7 +342,7 @@ /area/ruin/unpowered) "S" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/wood{ baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_pride.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_pride.dmm index b1dedc0cb3..38b5f5f64d 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_pride.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_pride.dmm @@ -65,7 +65,7 @@ /turf/open/floor/mineral/silver, /area/ruin/powered/pride) "u" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/mineral/silver, /area/ruin/powered/pride) "G" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm index cb2686fe89..01ac536230 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm @@ -262,7 +262,7 @@ /turf/open/floor/plasteel/freezer, /area/ruin/powered/seedvault) "Z" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/closed/wall/r_wall, /area/ruin/powered/seedvault) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm index 89a8b50c39..5ae4227813 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm @@ -42,7 +42,7 @@ }, /area/ruin/unpowered) "h" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/sepia{ blocks_air = 0; slowdown = 10 diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm index 3392d60307..8d40c16d58 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm @@ -169,7 +169,7 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "B" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/closed/wall/mineral/titanium/survival/pod, /area/ruin/powered) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_swarmer_crash.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_swarmer_crash.dmm index a794b58db8..3962947551 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_swarmer_crash.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_swarmer_crash.dmm @@ -22,7 +22,7 @@ /turf/open/floor/mineral/plastitanium, /area/ruin/unpowered) "g" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/closed/wall/mineral/plastitanium, /area/ruin/unpowered) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm index be96830ca4..2893f3481f 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -1285,7 +1285,7 @@ }, /area/ruin/powered/syndicate_lava_base) "dd" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/plasteel/vault{ dir = 5 }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm index 22d341c7df..0c4dd60fb8 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm @@ -105,7 +105,7 @@ "s" = ( /obj/structure/table/optable/abductor, /obj/item/weapon/cautery/alien, -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/plating/abductor{ initial_gas_mix = "o2=16;n2=23;TEMP=300" }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm index d139ee641b..fed94448d0 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm @@ -269,7 +269,7 @@ "W" = ( /obj/structure/alien/weeds, /obj/structure/alien/resin/wall, -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/xenonest) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm.rej b/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm.rej new file mode 100644 index 0000000000..365cc7fdda --- /dev/null +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm.rej @@ -0,0 +1,10 @@ +diff a/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm (rejected hunks) +@@ -269,7 +269,7 @@ + "W" = ( + /obj/structure/alien/weeds, + /obj/structure/alien/resin/wall, +-/obj/effect/baseturf_helper, ++/obj/effect/baseturf_helper/lava_land/surface, + /turf/open/floor/plating/asteroid/basalt/lava_land_surface, + /area/ruin/unpowered/xenonest) + diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 72f9a75ebd..d1014775e4 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -18280,7 +18280,7 @@ /area/security/prison) "aLB" = ( /obj/structure/table, -/obj/item/trash/deadmouse{ +/obj/item/weapon/reagent_containers/food/snacks/deadmouse{ pixel_y = 5 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -25012,6 +25012,10 @@ dir = 1; icon_state = "pipe-c" }, +/obj/structure/fireaxecabinet{ + pixel_x = -32; + pixel_y = 0 + }, /turf/open/floor/plasteel/caution{ icon_state = "caution"; dir = 8 @@ -29567,10 +29571,10 @@ "bgT" = ( /obj/machinery/computer/atmos_control/tank{ frequency = 1441; - input_tag = "co2_in"; - name = "Carbon Dioxide Supply Control"; - output_tag = "co2_out"; - sensors = list("co2_sensor" = "Tank") + input_tag = "n2o_in"; + name = "Nitrous Oxide Supply Control"; + output_tag = "n2o_out"; + sensors = list("n2o_sensor" = "Tank") }, /obj/structure/window/reinforced{ dir = 8 @@ -138458,7 +138462,7 @@ aRf aSV aUs aIU -aIU +aSV aIU aSV aSV diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm index 4c00524717..9b97eef1d5 100644 --- a/_maps/map_files/Mining/Lavaland.dmm +++ b/_maps/map_files/Mining/Lavaland.dmm @@ -1,4 +1,4 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( /turf/closed/indestructible/riveted/boss, /area/lavaland/surface/outdoors) @@ -1241,6 +1241,7 @@ d2 = 4; icon_state = "1-4" }, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/circuit, /area/mine/maintenance) "dy" = ( @@ -3399,17 +3400,27 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "Wt" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/closed/wall, /area/mine/laborcamp/security) "Wu" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/closed/wall, /area/mine/laborcamp) "Ww" = ( -/obj/effect/baseturf_helper, +/obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/plasteel, /area/mine/living_quarters) +"Wx" = ( +/obj/effect/baseturf_helper/lava_land/surface, +/turf/open/floor/plasteel/brown{ + dir = 4 + }, +/area/mine/eva) +"Wy" = ( +/obj/effect/baseturf_helper/lava_land/surface, +/turf/open/floor/plasteel, +/area/mine/production) (1,1,1) = {" aa @@ -19057,7 +19068,7 @@ cI cP cn bP -bP +Wy bP bP eD @@ -19570,7 +19581,7 @@ bf cK bq bq -dt +br bq dV el @@ -20335,7 +20346,7 @@ bf bp bu bI -bW +Wx cr bf ad diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index b4b78673a1..62f613dbf5 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -21075,7 +21075,7 @@ "aTX" = ( /obj/structure/kitchenspike, /obj/item/device/assembly/mousetrap, -/obj/item/trash/deadmouse, +/obj/item/weapon/reagent_containers/food/snacks/deadmouse, /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/kitchen) "aTY" = ( @@ -28572,7 +28572,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/item/trash/deadmouse, +/obj/item/weapon/reagent_containers/food/snacks/deadmouse, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -39250,7 +39250,7 @@ /area/maintenance/department/engine) "bGL" = ( /obj/structure/closet/masks, -/obj/item/trash/deadmouse, +/obj/item/weapon/reagent_containers/food/snacks/deadmouse, /obj/effect/landmark/revenantspawn, /turf/open/floor/plating, /area/maintenance/department/engine) diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm new file mode 100644 index 0000000000..2d6ba0d946 --- /dev/null +++ b/code/__DEFINES/food.dm @@ -0,0 +1,12 @@ +#define MEAT 1 +#define VEGETABLES 2 +#define RAW 4 +#define JUNKFOOD 8 +#define GRAIN 16 +#define FRUIT 32 +#define DAIRY 64 +#define FRIED 128 +#define ALCOHOL 256 +#define SUGAR 512 +#define GROSS 1024 +#define TOXIC 2048 diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 4342766be7..cca88750b5 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -441,3 +441,8 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE #define BEAT_NONE 0 #define BEAT_CHANNEL 150 + +//http://www.byond.com/docs/ref/info.html#/atom/var/mouse_opacity +#define MOUSE_OPACITY_TRANSPARENT 0 +#define MOUSE_OPACITY_ICON 1 +#define MOUSE_OPACITY_OPAQUE 2 diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 2b0e8ee74a..bff067dce1 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -65,6 +65,12 @@ #define NUTRITION_LEVEL_HUNGRY 250 #define NUTRITION_LEVEL_STARVING 150 +//Disgust levels for humans +#define DISGUST_LEVEL_MAXEDOUT 150 +#define DISGUST_LEVEL_DISGUSTED 75 +#define DISGUST_LEVEL_VERYGROSS 50 +#define DISGUST_LEVEL_GROSS 25 + //Slime evolution threshold. Controls how fast slimes can split/grow #define SLIME_EVOLUTION_THRESHOLD 10 diff --git a/code/__DEFINES/server_tools.dm b/code/__DEFINES/server_tools.dm index 4624c5914f..a4afa58a87 100644 --- a/code/__DEFINES/server_tools.dm +++ b/code/__DEFINES/server_tools.dm @@ -4,6 +4,9 @@ #define IRC_STATUS_THROTTLE 5 +#define PR_ANNOUNCEMENTS_PER_ROUND 5 //The number of unique PR announcements allowed per round + //This makes sure that a single person can only spam 3 reopens and 3 closes before being ignored + //keep these in sync with TGS3 #define SERVICE_WORLD_PARAM "server_service" #define SERVICE_PR_TEST_JSON "..\\..\\prtestjob.json" @@ -17,7 +20,7 @@ #define SERVICE_CMD_NAME_CHECK "namecheck" #define SERVICE_CMD_ADMIN_WHO "adminwho" -//#define SERVICE_CMD_PARAM_KEY //defined in __compile_options.dm +#define SERVICE_CMD_PARAM_KEY "serviceCommsKey" #define SERVICE_CMD_PARAM_COMMAND "command" #define SERVICE_CMD_PARAM_MESSAGE "message" #define SERVICE_CMD_PARAM_TARGET "target" diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 36a81e90e2..7df96c3da2 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -537,3 +537,18 @@ if(!istype(the_matrix) || the_matrix.len != 20) return "#ffffffff" return rgb(the_matrix[1]*255, the_matrix[6]*255, the_matrix[11]*255, the_matrix[16]*255) + +/proc/type2parent(child) + var/string_type = "[child]" + var/last_slash = findlasttext(string_type, "/") + if(last_slash == 1) + switch(child) + if(/datum) + return null + if(/obj || /mob) + return /atom/movable + if(/area || /turf) + return /atom + else + return /datum + return text2path(copytext(string_type, 1, last_slash)) \ No newline at end of file diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 964c956eca..a669f1b4f5 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -69,8 +69,6 @@ #error You need version 511 or higher #endif - #define SERVICE_CMD_PARAM_KEY "serviceCommsKey" - //Update this whenever the db schema changes //make sure you add an update to the schema_version stable in the db changelog #define DB_MAJOR_VERSION 3 diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 079873030d..037ae47d98 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -434,7 +434,7 @@ icon = 'icons/mob/screen_gen.dmi' icon_state = "flash" plane = CLICKCATCHER_PLANE - mouse_opacity = 2 + mouse_opacity = MOUSE_OPACITY_OPAQUE screen_loc = "CENTER" /obj/screen/click_catcher/proc/UpdateGreed(view_size_x = 7, view_size_y = 7) diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index e1f1410837..69deb2cb58 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -92,7 +92,7 @@ icon_state = "default" name = "Alert" desc = "Something seems to have gone wrong with this alert, so report this bug please" - mouse_opacity = 1 + mouse_opacity = MOUSE_OPACITY_ICON var/timeout = 0 //If set to a number, this alert will clear itself after that many deciseconds var/severity = 0 var/alerttooltipstyle = "" @@ -166,6 +166,21 @@ desc = "You're severely malnourished. The hunger pains make moving around a chore." icon_state = "starving" +/obj/screen/alert/gross + name = "Grossed out." + desc = "That was kind of gross..." + icon_state = "gross" + +/obj/screen/alert/verygross + name = "Very grossed out." + desc = "I'm not feeling very well.." + icon_state = "gross2" + +/obj/screen/alert/disgusted + name = "DISGUSTED" + desc = "ABSOLUTELY DISGUSTIN'" + icon_state = "gross3" + /obj/screen/alert/hot name = "Too Hot" desc = "You're flaming hot! Get somewhere cooler and take off any insulating clothing like a fire suit." diff --git a/code/_onclick/hud/blob_overmind.dm b/code/_onclick/hud/blob_overmind.dm index c3cc3851dc..d6dc5f8a0a 100644 --- a/code/_onclick/hud/blob_overmind.dm +++ b/code/_onclick/hud/blob_overmind.dm @@ -130,7 +130,7 @@ blobpwrdisplay.name = "blob power" blobpwrdisplay.icon_state = "block" blobpwrdisplay.screen_loc = ui_health - blobpwrdisplay.mouse_opacity = 0 + blobpwrdisplay.mouse_opacity = MOUSE_OPACITY_TRANSPARENT blobpwrdisplay.layer = ABOVE_HUD_LAYER blobpwrdisplay.plane = ABOVE_HUD_PLANE infodisplay += blobpwrdisplay diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index 9031983875..6c18ad0e07 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -67,7 +67,7 @@ screen_loc = "CENTER-7,CENTER-7" layer = FULLSCREEN_LAYER plane = FULLSCREEN_PLANE - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/severity = 0 var/show_when_dead = FALSE diff --git a/code/_onclick/hud/parallax.dm b/code/_onclick/hud/parallax.dm index 74f8761863..f364bac76f 100755 --- a/code/_onclick/hud/parallax.dm +++ b/code/_onclick/hud/parallax.dm @@ -243,7 +243,7 @@ blend_mode = BLEND_ADD plane = PLANE_SPACE_PARALLAX screen_loc = "CENTER-7,CENTER-7" - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /obj/screen/parallax_layer/Initialize(mapload, view) diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm index 33f35eab57..f0c56b84ac 100644 --- a/code/_onclick/hud/plane_master.dm +++ b/code/_onclick/hud/plane_master.dm @@ -26,13 +26,13 @@ name = "lighting plane master" plane = LIGHTING_PLANE blend_mode = BLEND_MULTIPLY - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /obj/screen/plane_master/parallax name = "parallax plane master" plane = PLANE_SPACE_PARALLAX blend_mode = BLEND_MULTIPLY - mouse_opacity = FALSE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /obj/screen/plane_master/parallax_white name = "parallax whitifier plane master" diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 01b163f8da..13717b576f 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -33,7 +33,7 @@ /obj/screen/text icon = null icon_state = null - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT screen_loc = "CENTER-7,CENTER-7" maptext_height = 480 maptext_width = 480 @@ -468,7 +468,7 @@ name = "dmg" blend_mode = BLEND_MULTIPLY screen_loc = "CENTER-7,CENTER-7" - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT layer = UI_DAMAGE_LAYER plane = FULLSCREEN_PLANE @@ -494,7 +494,7 @@ name = "blob health" icon_state = "block" screen_loc = ui_internal - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /obj/screen/healths/blob/naut name = "health" @@ -511,13 +511,13 @@ icon = 'icons/mob/guardian.dmi' icon_state = "base" screen_loc = ui_health - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /obj/screen/healths/clock icon = 'icons/mob/actions.dmi' icon_state = "bg_clock" screen_loc = ui_health - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /obj/screen/healths/clock/gear icon = 'icons/mob/clockwork_mobs.dmi' @@ -529,13 +529,13 @@ icon = 'icons/mob/actions.dmi' icon_state = "bg_revenant" screen_loc = ui_health - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /obj/screen/healths/construct icon = 'icons/mob/screen_construct.dmi' icon_state = "artificer_health0" screen_loc = ui_construct_health - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /obj/screen/healthdoll name = "health doll" diff --git a/code/citadel/cit_arousal.dm b/code/citadel/cit_arousal.dm index cf47dab1da..6005758144 100644 --- a/code/citadel/cit_arousal.dm +++ b/code/citadel/cit_arousal.dm @@ -181,224 +181,364 @@ else to_chat(src, "You aren't aroused enough for that.") + +//These are various procs that we'll use later, split up for readability instead of having one, huge proc. +//For all of these, we assume the arguments given are proper and have been checked beforehand. +/mob/living/carbon/human/proc/mob_masturbate(obj/item/organ/genital/G, mb_time = 30) //Masturbation, keep it gender-neutral + var/total_fluids = 0 + var/datum/reagents/fluid_source = null + + if(G.producing) //Can it produce its own fluids, such as breasts? + fluid_source = G.reagents + else + if(!G.linked_organ) + to_chat(src, "Your [G.name] is unable to produce it's own fluids, it's missing the organs for it.") + return + 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].") + + 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.") + if(G.can_climax) + setArousalLoss(min_arousal) + + +/mob/living/carbon/human/proc/mob_climax_outside(obj/item/organ/genital/G, mb_time = 30) //This is used for forced orgasms and other hands-free climaxes + var/total_fluids = 0 + var/datum/reagents/fluid_source = null + var/unable_to_come = FALSE + + if(G.producing) //Can it produce its own fluids, such as breasts? + fluid_source = G.reagents + total_fluids = fluid_source.total_volume + else + if(!G.linked_organ) + unable_to_come = TRUE + else + fluid_source = G.linked_organ.reagents + total_fluids = fluid_source.total_volume + + if(unable_to_come) + src.visible_message("[src] shudders, their [G.name] unable to cum.", \ + "Your [G.name] cannot cum, giving no relief.", \ + "Your [G.name] cannot cum, giving no relief.") + 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.") + 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].") + if(G.can_climax) + setArousalLoss(min_arousal) + + +/mob/living/carbon/human/proc/mob_climax_partner(obj/item/organ/genital/G, mob/living/L, spillage = TRUE, mb_time = 30) //Used for climaxing with any living thing + var/total_fluids = 0 + var/datum/reagents/fluid_source = null + + if(G.producing) //Can it produce its own fluids, such as breasts? + fluid_source = G.reagents + else + if(!G.linked_organ) + to_chat(src, "Your [G.name] is unable to produce it's own fluids, it's missing the organs for it.") + return + 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!") + 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) + total_fluids -= total_fluids*G.fluid_transfer_factor + 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].") + if(G.can_climax) + setArousalLoss(min_arousal) + else //knots and other non-spilling orgasms + 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.") + if(G.can_climax) + setArousalLoss(min_arousal) + + +/mob/living/carbon/human/proc/mob_fill_container(obj/item/organ/genital/G, obj/item/weapon/reagent_containers/container, mb_time = 30) //For beaker-filling, beware the bartender + var/total_fluids = 0 + var/datum/reagents/fluid_source = null + + if(G.producing) //Can it produce its own fluids, such as breasts? + fluid_source = G.reagents + else + if(!G.linked_organ) + to_chat(src, "Your [G.name] is unable to produce it's own fluids, it's missing the organs for it.") + return + fluid_source = G.linked_organ.reagents + total_fluids = fluid_source.total_volume + + //if(!container) //Something weird happened + // 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.") + 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.") + if(G.can_climax) + setArousalLoss(min_arousal) + +/mob/living/carbon/human/proc/pick_masturbate_genitals() + var/obj/item/organ/genital/ret_organ + var/list/genitals_list = list() + var/list/worn_stuff = get_equipped_items() + + for(var/obj/item/organ/genital/G in internal_organs) + if(G.can_masturbate_with) //filter out what you can't masturbate with + if(G.is_exposed(worn_stuff)) //Nude or through_clothing + genitals_list += G + if(genitals_list.len) + ret_organ = input(src, "with what?", "Masturbate", null) as null|obj in genitals_list + return ret_organ + return null //error stuff + + +/mob/living/carbon/human/proc/pick_climax_genitals() + var/obj/item/organ/genital/ret_organ + var/list/genitals_list = list() + var/list/worn_stuff = get_equipped_items() + + for(var/obj/item/organ/genital/G in internal_organs) + if(G.can_climax) //filter out what you can't masturbate with + if(G.is_exposed(worn_stuff)) //Nude or through_clothing + genitals_list += G + if(genitals_list.len) + ret_organ = input(src, "with what?", "Climax", null) as null|obj in genitals_list + return ret_organ + return null //error stuff + + +/mob/living/carbon/human/proc/pick_partner() + var/list/partners = list() + if(src.pulling) + partners += src.pulling //Yes, even objects for now + if(src.pulledby) + partners += src.pulledby + //Now we got both of them, let's check if they're proper + for(var/I in partners) + if(isliving(I)) + if(iscarbon(I)) + var/mob/living/carbon/C = I + if(!C.exposed_genitals.len) //Nothing through_clothing + if(!C.is_groin_exposed()) //No pants undone + if(!C.is_chest_exposed()) //No chest exposed + partners -= I //Then not proper, remove them + else + partners -= I //No fucking objects + //NOW the list should only contain correct partners + if(!partners.len) + return null //No one left. + return input(src, "With whom?", "Sexual partner", null) in partners //pick one, default to null + +/mob/living/carbon/human/proc/pick_climax_container() + var/obj/item/weapon/reagent_containers/SC = null + var/list/containers_list = list() + + for(var/obj/item/weapon/reagent_containers/container in held_items) + if(container.is_open_container() || istype(container, /obj/item/weapon/reagent_containers/food/snacks)) + containers_list += container + + if(containers_list.len) + SC = input(src, "Into or onto what?(Cancel for nowhere)", null) as null|obj in containers_list + if(SC) + if(in_range(src, SC)) + return SC + return null //If nothing correct, give null. + + +//Here's the main proc itself /mob/living/carbon/human/mob_climax(forced_climax=FALSE) //Forced is instead of the other proc, makes you cum if you have the tools for it, ignoring restraints if(mb_cd_timer > world.time) if(!forced_climax) //Don't spam the message to the victim if forced to come too fast to_chat(src, "You need to wait [round((mb_cd_timer - world.time)/(20))] seconds before you can do that again!") return mb_cd_timer = (world.time + mb_cd_length) - var/list/genitals_list = list() - var/obj/item/organ/genital/SG = null//originally selected_genital - var/list/containers_list = list() - var/obj/item/weapon/reagent_containers/SC = null - var/datum/reagents/fluid_source = null - var/into_container = 0 - var/free_hands = get_num_arms() //arms was only used to know if we had ANY at all - var/total_cum = 0 - var/finished = 0 - var/mb_time = 30 + + if(canbearoused && has_dna()) if(stat==2) to_chat(src, "You can't do that while dead!") return if(forced_climax) //Something forced us to cum, this is not a masturbation thing and does not progress to the other checks - for(var/obj/item/organ/genital/G in internal_organs) - if(G.can_masturbate_with) //All capable genitals will orgasm with this - var/unable_to_come = FALSE - switch(G.type) - if(/obj/item/organ/genital/penis) - var/obj/item/organ/genital/penis/P = G - if(!P.linked_balls) - unable_to_come = TRUE - else - fluid_source = P.linked_balls.reagents + for(var/obj/item/organ/O in internal_organs) + if(istype(O, /obj/item/organ/genital)) + var/obj/item/organ/genital/G = O + if(!G.can_climax) //Skip things like wombs and testicles + continue + var/mob/living/partner + var/check_target + var/list/worn_stuff = get_equipped_items() + if(G.is_exposed(worn_stuff)) + if(src.pulling) //Are we pulling someone? Priority target, we can't be making option menus for this, has to be quick + if(isliving(src.pulling)) //Don't fuck objects + check_target = src.pulling + if(src.pulledby && !check_target) //prioritise pulled over pulledby + if(isliving(src.pulledby)) + check_target = src.pulledby + //Now we should have a partner, or else we have to come alone + if(check_target) + if(iscarbon(check_target)) //carbons can have clothes + var/mob/living/carbon/C = check_target + if(C.exposed_genitals.len || C.is_groin_exposed() || C.is_chest_exposed()) //Are they naked enough? + partner = C + else //A cat is fine too + partner = check_target + if(partner) //Did they pass the clothing checks? + mob_climax_partner(G, partner, mb_time = 0) //Instant climax due to forced + continue //You've climaxed once with this organ, continue on + //not exposed OR if no partner was found while exposed, climax alone + mob_climax_outside(G, mb_time = 0) //removed climax timer for sudden, forced orgasms + //Now all genitals that could climax, have. + //Since this was a forced climax, we do not need to continue with the other stuff + return + //If we get here, then this is not a forced climax and we gotta check a few things. - if(/obj/item/organ/genital/vagina) - var/obj/item/organ/genital/vagina/V = G - if(!V.linked_womb) - unable_to_come = TRUE - else - fluid_source = V.linked_womb.reagents - else //Weird, undefined genitalia behaviour - unable_to_come = TRUE - - if(unable_to_come) - src.visible_message("[src] shudders, their [G.name] unable to cum.", \ - "Your [G.name] cannot cum, giving no relief.", \ - "Your [G.name] cannot cum, giving no relief.") - else - if(fluid_source) - total_cum = fluid_source.total_volume - 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_cum > 5) - fluid_source.reaction(src.loc, TOUCH, 1, 0) - fluid_source.clear_reagents() - fluid_source = null //cleanup so this can be used for the next genitalia - - src.visible_message("[src] orgasms, cumming[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""]!", \ - "You're forced to cum[istype(src.loc, /turf/open/floor) ? " onto [src.loc]" : ""] with your [G].", \ - "Your [G] have been forced to climax.") - finished = 1 - if(finished) - setArousalLoss(min_arousal) - return //Do not proceed to masturbating if all genitals have been forced to orgasm. - if(stat==1) //Sleeping people can be forced chemically or with electrical stimulants, for example. + if(stat==1) //No sleep-masturbation, you're unconscious. to_chat(src, "You must be conscious to do that!") return - if(restrained()) - to_chat(src, "You can't do that while restrained!") - return - if(getArousalLoss() < 33)//flat number instead of percentage + if(getArousalLoss() < 33) //flat number instead of percentage to_chat(src, "You aren't aroused enough for that!") return - if(!is_groin_exposed()) - to_chat(src, "You need to undress, first!") - return - if(!free_hands) - to_chat(src, "You need at least one free arm.") - return - for(var/helditem in held_items)//how many hands are free - if(isobj(helditem)) - free_hands-- - if(free_hands <= 0) - to_chat(src, "You need at least one free hand.") - return - for(var/obj/item/organ/genital/G in internal_organs) - if(G.can_masturbate_with)//filter out what you can't masturbate with - genitals_list += G - if(genitals_list.len) - SG = input(src, "with what?", "Masturbate") as null|obj in genitals_list - if(SG) - for(var/obj/item/weapon/reagent_containers/container in held_items) - if(container.is_open_container() || istype(container, /obj/item/weapon/reagent_containers/food/snacks/pie)) - containers_list += container - if(containers_list.len) - SC = input(src, "Into or onto what?(Cancel for nowhere)", "Masturbate") as null|obj in containers_list - if(SC) - if(in_range(src, SC)) - into_container = 1 - SG.update() - switch(SG.type) - //Penis - if(/obj/item/organ/genital/penis) - var/obj/item/organ/genital/penis/P = SG - if(!P.linked_balls) - to_chat(src, "You need a pair of testicles to do this.") - return - fluid_source = P.linked_balls.reagents - total_cum = fluid_source.total_volume - if(into_container)//into a glass or beaker or whatever - src.visible_message("[src] starts [pick("jerking off","stroking")] their [SG.name] over [SC].", \ - "You start jerking off over [SC.name].", \ - "You start masturbating.") - if(do_after(src, mb_time, target = src) && in_range(src, SC)) - fluid_source.trans_to(SC, total_cum) - src.visible_message("[src] orgasms, [pick("cumming into", "emptying themself into")] [SC]!", \ - "You cum into [SC].", \ - "You have relieved yourself.") - finished = 1 - else //Not in a container - if(src.pulling) - if(iscarbon(src.pulling)) - var/mob/living/carbon/C = src.pulling - if(!C.is_groin_exposed()) - to_chat(src, "You must undress someone to climax inside them.") - return - if(isliving(src.pulling)) //Gotta be alive to fuck it, don't wanna have to code fucking objects that ain't containers... - var/mob/living/partner = src.pulling - src.visible_message("[src] is about to climax inside [partner]!", \ - "You're about to climax inside [partner]!", \ - "You're preparing to climax inside someone!") - switch(grab_state) - if(GRAB_PASSIVE) - if(do_after(src, mb_time, target = src) && in_range(src, partner)) - var/spillage = 0.5 //Leaks a bit on passive grab - var/did_spill = FALSE - fluid_source.trans_to(partner, total_cum*(1-spillage)) - total_cum = total_cum*spillage - if(total_cum > 5) - fluid_source.reaction(partner.loc, TOUCH, 1, 0) - did_spill = TRUE - fluid_source.clear_reagents() + //Ok, now we check what they want to do. + var/choice = input(src, "Select sexual activity", "Sexual activity:") in list("Masturbate", "Climax alone", "Climax with partner", "Fill container") - src.visible_message("[src] ejaculates inside [partner][did_spill ? ", overflowing and spilling":""]!", \ - "You ejaculate inside [partner][did_spill ? ", spilling out of them":""].", \ - "You have climaxed inside someone[did_spill ? ", spilling out of them":""].") - finished = 1 - else //Aggressive or higher - if(do_after(src, mb_time, target = src) && in_range(src, partner)) - var/spillage = 0.0 //Leakproofing seals - fluid_source.trans_to(partner, total_cum*(1-spillage)) - total_cum = total_cum*spillage - if(total_cum > 5) - fluid_source.reaction(partner.loc, TOUCH, 1, 0) - fluid_source.clear_reagents() + switch(choice) + if("Masturbate") + if(restrained(TRUE)) //TRUE ignores grabs + to_chat(src, "You can't do that while restrained!") + return + var/free_hands = get_num_arms() + if(!free_hands) + to_chat(src, "You need at least one free arm.") + return + for(var/helditem in held_items)//how many hands are free + if(isobj(helditem)) + free_hands-- + if(free_hands <= 0) + to_chat(src, "You're holding too many things.") + return + //We got hands, let's pick an organ + var/obj/item/organ/genital/picked_organ + picked_organ = pick_masturbate_genitals() + if(picked_organ) + mob_masturbate(picked_organ) + return + else //They either lack organs that can masturbate, or they didn't pick one. + to_chat(src, "You cannot masturbate without choosing genitals.") + return - src.visible_message("[src] ejaculates inside [partner], spilling nothing!", \ - "You ejaculate inside [partner], spilling nothing.", \ - "You have climaxed inside someone, spilling nothing.") - finished = 1 - //Don't care, not coding you fucking a unanchored girder - else //No pulling, or pulling non-living things - src.visible_message("[src] starts [pick("jerking off","stroking")] their [SG].", \ - "You start masturbating.", \ - "You start masturbating.") - if(do_after(src, mb_time, target = src)) - if(total_cum > 5) - fluid_source.reaction(src.loc, TOUCH, 1, 0) - fluid_source.clear_reagents() + if("Climax alone") + if(restrained(TRUE)) //TRUE ignores grabs + to_chat(src, "You can't do that while restrained!") + return + var/free_hands = get_num_arms() + if(!free_hands) + to_chat(src, "You need at least one free arm.") + return + for(var/helditem in held_items)//how many hands are free + if(isobj(helditem)) + free_hands-- + if(free_hands <= 0) + to_chat(src, "You're holding too many things.") + return + //We got hands, let's pick an organ + var/obj/item/organ/genital/picked_organ + picked_organ = pick_climax_genitals() + if(picked_organ) + mob_climax_outside(picked_organ) + return + else //They either lack organs that can masturbate, or they didn't pick one. + to_chat(src, "You cannot climax without choosing genitals.") + return - 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.") - finished = 1 + if("Climax with partner") + //We need no hands, we can be restrained and so on, so let's pick an organ + var/obj/item/organ/genital/picked_organ + picked_organ = pick_climax_genitals() + if(picked_organ) + var/mob/living/partner = pick_partner() //Get someone + if(partner) + var/spillage = input(src, "Would your fluids spill outside?", "Choose overflowing option", "Yes") as anything in list("Yes", "No") + if(spillage == "Yes") + mob_climax_partner(picked_organ, partner, TRUE) + else + mob_climax_partner(picked_organ, partner, FALSE) + return + else + to_chat(src, "You cannot do this alone.") + return + else //They either lack organs that can masturbate, or they didn't pick one. + to_chat(src, "You cannot climax without choosing genitals.") + return - if(/obj/item/organ/genital/vagina) - var/obj/item/organ/genital/vagina/V = SG - if(!V.linked_womb) - to_chat(src, "You need a womb to do this.") - return - fluid_source = V.linked_womb.reagents - total_cum = fluid_source.total_volume - if(into_container)//into a glass or beaker or whatever - src.visible_message("[src] starts fingering their [SG.name] over [SC].", \ - "You start fingering over [SC.name].", \ - "You start masturbating.") - if(do_after(src, mb_time, target = src) && in_range(src, SC)) - fluid_source.trans_to(SC, total_cum) - src.visible_message("[src] orgasms, [pick("cumming into", "emptying themself into")] [SC]!", \ - "You cum into [SC].", \ - "You have relieved yourself.") - finished = 1 - - else//not into a container - src.visible_message("[src] starts fingering their vagina.", \ - "You start fingering your vagina.", \ - "You start masturbating.") - if(do_after(src, mb_time, target = src)) - if(total_cum > 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.") - finished = 1 - - else//backup message, just in case - src.visible_message("[src] starts masturbating!", \ - "You start masturbating.") - if(do_after(src, mb_time, target = src)) - src.visible_message("[src] [pick("relieves themself!", "shudders and moans in orgasm!")]", \ - "You have relieved yourself.") - finished = 1 - if(finished) - setArousalLoss(min_arousal) - - else - to_chat(src, "You have no genitals!") - return + if("Fill container") + //We'll need hands and no restraints. + if(restrained(TRUE)) //TRUE ignores grabs + to_chat(src, "You can't do that while restrained!") + return + var/free_hands = get_num_arms() + if(!free_hands) + to_chat(src, "You need at least one free arm.") + return + for(var/helditem in held_items)//how many hands are free + if(isobj(helditem)) + free_hands-- + if(free_hands <= 0) + to_chat(src, "You're holding too many things.") + return + //We got hands, let's pick an organ + var/obj/item/organ/genital/picked_organ + picked_organ = pick_climax_genitals() //Gotta be climaxable, not just masturbation, to fill with fluids. + if(picked_organ) + //Good, got an organ, time to pick a container + var/obj/item/weapon/reagent_containers/fluid_container = pick_climax_container() + if(fluid_container) + mob_fill_container(picked_organ, fluid_container) + return + else + to_chat(src, "You cannot do this without anything to fill.") + return + else //They either lack organs that can climax, or they didn't pick one. + to_chat(src, "You cannot fill anything without choosing genitals.") + return + else //Somehow another option was taken, maybe something interrupted the selection or it was cancelled + return //Just end it in that case. diff --git a/code/citadel/cit_reagents.dm b/code/citadel/cit_reagents.dm index 428729d30f..4a0e91479b 100644 --- a/code/citadel/cit_reagents.dm +++ b/code/citadel/cit_reagents.dm @@ -153,14 +153,13 @@ if(prob(33)) if(M.getArousalLoss() >= 100 && ishuman(M) && M.has_dna()) var/mob/living/carbon/human/H = M - to_chat(H, "Your libido is going haywire!") - H.mob_climax(forced_climax=TRUE) + if(prob(50)) //Less spam + to_chat(H, "Your libido is going haywire!") + H.mob_climax(forced_climax=TRUE) if(M.min_arousal < 50) M.min_arousal += 1 - to_chat(M, "You're having a hard time thinkin about things other than sex!") if(M.min_arousal < M.max_arousal) M.min_arousal += 1 - to_chat(M, "You feel your libido permanently increasing.") M.adjustArousalLoss(2) ..() @@ -197,10 +196,8 @@ if(prob(33)) if(M.min_arousal > 0) M.min_arousal -= 1 - to_chat(M, "You feel your libido returning to more normal levels.") if(M.min_arousal > 50) M.min_arousal -= 1 - to_chat(M, "You feel like your overactive libido is calming down.") M.adjustArousalLoss(-2) ..() diff --git a/code/citadel/organs/breasts.dm b/code/citadel/organs/breasts.dm index ce45b88cfb..dda5e248ee 100644 --- a/code/citadel/organs/breasts.dm +++ b/code/citadel/organs/breasts.dm @@ -1,5 +1,5 @@ /obj/item/organ/genital/breasts - name = "Breasts" + name = "breasts" desc = "Female milk producing organs." icon_state = "breasts" icon = 'code/citadel/icons/breasts.dmi' @@ -11,6 +11,10 @@ var/amount = 2 producing = TRUE shape = "pair" + can_masturbate_with = TRUE + masturbation_verb = "massage" + can_climax = TRUE + fluid_transfer_factor =0.5 /obj/item/organ/genital/breasts/Initialize() . = ..() @@ -54,4 +58,10 @@ var/mob/living/carbon/human/H = owner // only human mobs have skin_tone, which we need. color = "#[skintone2hex(H.skin_tone)]" else - color = "#[owner.dna.features["breasts_color"]]" \ No newline at end of file + color = "#[owner.dna.features["breasts_color"]]" + +/obj/item/organ/genital/breasts/is_exposed() + . = ..() + if(.) + return TRUE + return owner.is_chest_exposed() \ No newline at end of file diff --git a/code/citadel/organs/eggsack.dm b/code/citadel/organs/eggsack.dm index 718a353b87..1486310d61 100644 --- a/code/citadel/organs/eggsack.dm +++ b/code/citadel/organs/eggsack.dm @@ -7,7 +7,7 @@ slot = "testicles" color = null //don't use the /genital color since it already is colored w_class = 3 - var/internal = TRUE + internal = TRUE var/egg_girth = EGG_GIRTH_DEF var/cum_mult = CUM_RATE_MULT var/cum_rate = CUM_RATE diff --git a/code/citadel/organs/genitals.dm b/code/citadel/organs/genitals.dm index 6bd86e7146..1f46778aaf 100644 --- a/code/citadel/organs/genitals.dm +++ b/code/citadel/organs/genitals.dm @@ -3,7 +3,10 @@ var/shape = "human" var/sensitivity = 1 var/list/genital_flags = list() - var/can_masturbate_with = 0 + var/can_masturbate_with = FALSE + var/masturbation_verb = "masturbate" + var/can_climax = FALSE + var/fluid_transfer_factor = 0.0 //How much would a partner get in them if they climax using this? var/size = 2 //can vary between num or text, just used in icon_state strings var/fluid_id = null var/fluid_max_volume = 50 @@ -13,6 +16,9 @@ var/producing = FALSE var/aroused_state = FALSE //Boolean used in icon_state strings var/aroused_amount = 50 //This is a num from 0 to 100 for arousal percentage for when to use arousal state icons. + var/obj/item/organ/genital/linked_organ + var/through_clothes = FALSE + var/internal = FALSE /obj/item/organ/genital/Initialize() . = ..() @@ -34,6 +40,52 @@ update_appearance() update_link() +//exposure and through-clothing code +/mob/living/carbon + var/list/exposed_genitals = list() //Keeping track of them so we don't have to iterate through every genitalia and see if exposed + +/obj/item/organ/genital/proc/is_exposed() + if(!owner) + return FALSE + if(internal) + return FALSE + if(through_clothes) + return TRUE + +/obj/item/organ/genital/proc/toggle_through_clothes() + if(through_clothes) + through_clothes = FALSE + owner.exposed_genitals -= src + else + through_clothes = TRUE + owner.exposed_genitals += src + if(ishuman(owner)) //recast to use update genitals proc + var/mob/living/carbon/human/H = owner + H.update_genitals() + +/mob/living/carbon/verb/toggle_genitals() + set category = "IC" + set name = "Expose/Hide genitals" + set desc = "Allows you to toggle which genitals should show through clothes or not." + + var/list/genital_list = list() + for(var/obj/item/organ/O in internal_organs) + if(istype(O, /obj/item/organ/genital)) + var/obj/item/organ/genital/G = O + if(!G.internal) + genital_list += G + if(!genital_list.len) //There is nothing to expose + return + //Full list of exposable genitals created + var/obj/item/organ/genital/picked_organ + picked_organ = input(src, "Expose/Hide genitals", "Choose which genitalia to expose/hide", null) in genital_list + if(picked_organ) + picked_organ.toggle_through_clothes() + return + + + + /obj/item/organ/genital/proc/update_size() /obj/item/organ/genital/proc/update_appearance() @@ -41,6 +93,9 @@ /obj/item/organ/genital/proc/update_link() /obj/item/organ/genital/proc/remove_ref() + if(linked_organ) + linked_organ.linked_organ = null + linked_organ = null /obj/item/organ/genital/Insert(mob/living/carbon/M, special = 0) ..() @@ -58,21 +113,21 @@ var/obj/item/organ/genital/GtoClean for(GtoClean in internal_organs) qdel(GtoClean) - - if(dna.features["has_cock"]) - give_penis() - if(dna.features["has_balls"]) - give_balls() - else if(dna.features["has_ovi"]) - give_ovipositor() - if(dna.features["has_eggsack"]) - give_eggsack() + //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() if(dna.features["has_vag"]) give_vagina() - if(dna.features["has_womb"]) - give_womb() + if(dna.features["has_womb"]) + give_womb() + if(dna.features["has_balls"]) + give_balls() + if(dna.features["has_cock"]) + give_penis() + if(dna.features["has_ovi"]) + give_ovipositor() + if(dna.features["has_eggsack"]) + give_eggsack() /mob/living/carbon/human/proc/give_penis() if(!dna) @@ -208,17 +263,15 @@ if(H.disabilities & HUSK) return //start scanning for genitals - var/list/worn_stuff = H.get_equipped_items()//cache this list so it's not built again - if(H.is_groin_exposed(worn_stuff)) - //ORDER is important here. Vaginas first, theoretical testes after, and penis LAST. - //The latter is always drawn on top of the former. - if(H.has_vagina()) - genitals_to_add += H.getorganslot("vagina") - if(H.has_penis()) - genitals_to_add += H.getorganslot("penis") - if(H.is_chest_exposed(worn_stuff)) - if(H.has_breasts()) - genitals_to_add += H.getorganslot("breasts") + //var/list/worn_stuff = H.get_equipped_items()//cache this list so it's not built again + + for(var/obj/item/organ/O in H.internal_organs) + if(istype(O, /obj/item/organ/genital)) + var/obj/item/organ/genital/G = O + if(G.is_exposed()) //Checks appropriate clothing slot and if it's through_clothes + genitals_to_add += H.getorganslot(G.slot) + //Now we added all genitals that aren't internal and should be rendered + var/image/I //start applying overlays for(var/layer in relevant_layers) diff --git a/code/citadel/organs/penis.dm b/code/citadel/organs/penis.dm index 9e2ce00666..7348e8c969 100644 --- a/code/citadel/organs/penis.dm +++ b/code/citadel/organs/penis.dm @@ -1,21 +1,23 @@ /obj/item/organ/genital/penis - name = "Penis" - desc = "A male reproductive organ." - icon_state = "penis" - icon = 'code/citadel/icons/penis.dmi' - zone = "groin" - slot = "penis" - w_class = 3 - can_masturbate_with = 1 - size = 2 //arbitrary value derived from length and girth for sprites. - var/length = 6 //inches + name = "penis" + desc = "A male reproductive organ." + icon_state = "penis" + icon = 'code/citadel/icons/penis.dmi' + zone = "groin" + slot = "penis" + w_class = 3 + can_masturbate_with = TRUE + masturbation_verb = "stroke" + can_climax = TRUE + fluid_transfer_factor = 0.5 + size = 2 //arbitrary value derived from length and girth for sprites. + var/length = 6 //inches var/cached_length //used to detect a change in length - var/girth = 0 - var/girth_ratio = COCK_GIRTH_RATIO_DEF //0.73; check citadel_defines.dm - var/knot_girth_ratio = KNOT_GIRTH_RATIO_DEF - var/list/dickflags = list() - var/list/knotted_types = list("knotted", "barbknot") - var/obj/item/organ/genital/testicles/linked_balls + var/girth = 0 + var/girth_ratio = COCK_GIRTH_RATIO_DEF //0.73; check citadel_defines.dm + var/knot_girth_ratio = KNOT_GIRTH_RATIO_DEF + var/list/dickflags = list() + var/list/knotted_types = list("knotted", "barbknot") /obj/item/organ/genital/penis/update_size() if(length == cached_length) @@ -55,15 +57,16 @@ /obj/item/organ/genital/penis/update_link() if(owner) - linked_balls = (owner.getorganslot("testicles")) - if(linked_balls) - linked_balls.linked_penis = src + linked_organ = (owner.getorganslot("testicles")) + if(linked_organ) + linked_organ.linked_organ = src else - if(linked_balls) - linked_balls.linked_penis = null - linked_balls = null + if(linked_organ) + linked_organ.linked_organ = null + linked_organ = null -/obj/item/organ/genital/penis/remove_ref() - if(linked_balls) - linked_balls.linked_penis = null - linked_balls = null +/obj/item/organ/genital/penis/is_exposed() + . = ..() + if(.) + return TRUE + return owner.is_groin_exposed() \ No newline at end of file diff --git a/code/citadel/organs/testicles.dm b/code/citadel/organs/testicles.dm index a759aeab52..bb3ade6048 100644 --- a/code/citadel/organs/testicles.dm +++ b/code/citadel/organs/testicles.dm @@ -1,18 +1,17 @@ /obj/item/organ/genital/testicles - name = "Testicles" + name = "testicles" desc = "A male reproductive organ." icon_state = "testicles" icon = 'code/citadel/icons/penis.dmi' zone = "groin" slot = "testicles" w_class = 3 - var/internal = FALSE + internal = TRUE size = BALLS_SIZE_DEF var/sack_size = BALLS_SACK_SIZE_DEF fluid_id = "semen" producing = TRUE var/sent_full_message = 1 //defaults to 1 since they're full to start - var/obj/item/organ/genital/penis/linked_penis /obj/item/organ/genital/testicles/Initialize() . = ..() @@ -33,20 +32,20 @@ return FALSE sent_full_message = 0 update_link() - if(!linked_penis) + if(!linked_organ) return FALSE reagents.isolate_reagent(fluid_id)//remove old reagents if it changed and just clean up generally reagents.add_reagent(fluid_id, (fluid_mult * fluid_rate))//generate the cum /obj/item/organ/genital/testicles/update_link() if(owner && !QDELETED(src)) - linked_penis = (owner.getorganslot("penis")) - if(linked_penis) - linked_penis.linked_balls = src + linked_organ = (owner.getorganslot("penis")) + if(linked_organ) + linked_organ.linked_organ = src else - if(linked_penis) - linked_penis.linked_balls = null - linked_penis = null + if(linked_organ) + linked_organ.linked_organ = null + linked_organ = null /obj/item/organ/genital/testicles/proc/send_full_message(msg = "Your balls finally feel full, again.") if(owner && istext(msg)) diff --git a/code/citadel/organs/vagina.dm b/code/citadel/organs/vagina.dm index fa1f00bda2..f170ced9b6 100644 --- a/code/citadel/organs/vagina.dm +++ b/code/citadel/organs/vagina.dm @@ -1,12 +1,15 @@ /obj/item/organ/genital/vagina - name = "Vagina" + name = "vagina" desc = "A female reproductive organ." icon = 'code/citadel/icons/vagina.dmi' icon_state = "vagina" zone = "groin" slot = "vagina" size = 1 //There is only 1 size right now - can_masturbate_with = 1 + can_masturbate_with = TRUE + masturbation_verb = "finger" + can_climax = TRUE + fluid_transfer_factor = 0.1 //Yes, some amount is exposed to you, go get your AIDS w_class = 3 var/cap_length = 8//D E P T H (cap = capacity) var/cap_girth = 12 @@ -15,7 +18,6 @@ var/clit_diam = 0.25 var/clit_len = 0.25 var/list/vag_types = list("tentacle", "dentata", "hairy") - var/obj/item/organ/genital/womb/linked_womb /obj/item/organ/genital/vagina/update_appearance() @@ -56,15 +58,16 @@ /obj/item/organ/genital/vagina/update_link() if(owner) - linked_womb = (owner.getorganslot("womb")) - if(linked_womb) - linked_womb.linked_vag = src + linked_organ = (owner.getorganslot("womb")) + if(linked_organ) + linked_organ.linked_organ = src else - if(linked_womb) - linked_womb.linked_vag = null - linked_womb = null + if(linked_organ) + linked_organ.linked_organ = null + linked_organ = null -/obj/item/organ/genital/vagina/remove_ref() - if(linked_womb) - linked_womb.linked_vag = null - linked_womb = null +/obj/item/organ/genital/vagina/is_exposed() + . = ..() + if(.) + return TRUE + return owner.is_groin_exposed() \ No newline at end of file diff --git a/code/citadel/organs/womb.dm b/code/citadel/organs/womb.dm index 3ebe5c2f98..433f005623 100644 --- a/code/citadel/organs/womb.dm +++ b/code/citadel/organs/womb.dm @@ -1,15 +1,15 @@ /obj/item/organ/genital/womb - name = "Womb" + name = "womb" desc = "A female reproductive organ." icon = 'code/citadel/icons/vagina.dmi' icon_state = "womb" zone = "groin" slot = "womb" w_class = 3 - var/internal = FALSE + internal = TRUE fluid_id = "femcum" producing = TRUE - var/obj/item/organ/genital/vagina/linked_vag + /obj/item/organ/genital/womb/Initialize() . = ..() @@ -24,25 +24,20 @@ /obj/item/organ/genital/womb/proc/generate_femcum() reagents.maximum_volume = fluid_max_volume update_link() - if(!linked_vag) + if(!linked_organ) return FALSE reagents.isolate_reagent(fluid_id)//remove old reagents if it changed and just clean up generally reagents.add_reagent(fluid_id, (fluid_mult * fluid_rate))//generate the cum /obj/item/organ/genital/womb/update_link() if(owner) - linked_vag = (owner.getorganslot("vagina")) - if(linked_vag) - linked_vag.linked_womb = src + linked_organ = (owner.getorganslot("vagina")) + if(linked_organ) + linked_organ.linked_organ = src else - if(linked_vag) - linked_vag.linked_womb = null - linked_vag = null - -/obj/item/organ/genital/womb/remove_ref() - if(linked_vag) - linked_vag.linked_womb = null - linked_vag = null + if(linked_organ) + linked_organ.linked_organ = null + linked_organ = null /obj/item/organ/genital/womb/Destroy() return ..() diff --git a/code/controllers/subsystem/disease.dm b/code/controllers/subsystem/disease.dm index 451bd05606..c75063c256 100644 --- a/code/controllers/subsystem/disease.dm +++ b/code/controllers/subsystem/disease.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(disease) name = "Disease" - flags = SS_NO_FIRE + flags = SS_NO_FIRE | SS_NO_INIT var/list/active_diseases = list() //List of Active disease in all mobs; purely for quick referencing. var/list/diseases @@ -13,4 +13,4 @@ SUBSYSTEM_DEF(disease) diseases = subtypesof(/datum/disease) /datum/controller/subsystem/disease/stat_entry(msg) - ..("P:[active_diseases.len]") \ No newline at end of file + ..("P:[active_diseases.len]") diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index c7c50f4d04..d196c9cb10 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -283,7 +283,7 @@ SUBSYSTEM_DEF(ticker) SSshuttle.lockdown = TRUE //initialise our cinematic screen object - cinematic = new /obj/screen{icon='icons/effects/station_explosion.dmi';icon_state="station_intact";layer=21;mouse_opacity=0;screen_loc="1,0";}(src) + cinematic = new /obj/screen{icon='icons/effects/station_explosion.dmi';icon_state="station_intact";layer=21;mouse_opacity = MOUSE_OPACITY_TRANSPARENT;screen_loc="1,0";}(src) for(var/mob/M in GLOB.mob_list) M.notransform = TRUE //stop everything moving @@ -300,7 +300,7 @@ SUBSYSTEM_DEF(ticker) if("nuclear emergency") //Nuke wasn't on station when it blew up flick("intro_nuke",cinematic) sleep(35) - SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) station_explosion_detonation(bomb) flick("station_intact_fade_red",cinematic) cinematic.icon_state = "summary_nukefail" @@ -329,13 +329,13 @@ SUBSYSTEM_DEF(ticker) else flick("intro_nuke",cinematic) sleep(35) - SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) station_explosion_detonation(bomb) if(NUKE_MISS_STATION || NUKE_SYNDICATE_BASE) //nuke was nowhere nearby //TODO: a really distant explosion animation sleep(50) - SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) station_explosion_detonation(bomb) actually_blew_up = station_missed == NUKE_SYNDICATE_BASE //don't kill everyone on station if it detonated off station else //station was destroyed @@ -346,28 +346,28 @@ SUBSYSTEM_DEF(ticker) flick("intro_nuke",cinematic) sleep(35) flick("station_explode_fade_red",cinematic) - SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) station_explosion_detonation(bomb) cinematic.icon_state = "summary_nukewin" if("AI malfunction") //Malf (screen,explosion,summary) flick("intro_malf",cinematic) sleep(76) flick("station_explode_fade_red",cinematic) - SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) station_explosion_detonation(bomb) //TODO: If we ever decide to actually detonate the vault bomb cinematic.icon_state = "summary_malf" if("blob") //Station nuked (nuke,explosion,summary) flick("intro_nuke",cinematic) sleep(35) flick("station_explode_fade_red",cinematic) - SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) station_explosion_detonation(bomb) //TODO: no idea what this case could be cinematic.icon_state = "summary_selfdes" if("cult") //Station nuked (nuke,explosion,summary) flick("intro_nuke",cinematic) sleep(35) flick("station_explode_fade_red",cinematic) - SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) station_explosion_detonation(bomb) //TODO: no idea what this case could be cinematic.icon_state = "summary_cult" if("no_core") //Nuke failed to detonate as it had no core @@ -381,7 +381,7 @@ SUBSYSTEM_DEF(ticker) flick("intro_nuke",cinematic) sleep(35) flick("station_explode_fade_red", cinematic) - SEND_SOUND(world, sound('sound/effects/explosionfar.ogg')) + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) station_explosion_detonation(bomb) cinematic.icon_state = "summary_selfdes" //If its actually the end of the round, wait for it to end. diff --git a/code/datums/beam.dm b/code/datums/beam.dm index fa38e1530d..3276a5f5b9 100644 --- a/code/datums/beam.dm +++ b/code/datums/beam.dm @@ -141,7 +141,7 @@ afterDraw() /obj/effect/ebeam - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT anchored = TRUE var/datum/beam/owner diff --git a/code/datums/components/component.dm b/code/datums/components/component.dm index 20e2a6e9ac..92ac9a4767 100644 --- a/code/datums/components/component.dm +++ b/code/datums/components/component.dm @@ -1,25 +1,70 @@ /datum/component var/enabled = TRUE var/dupe_mode = COMPONENT_DUPE_HIGHLANDER + var/dupe_type var/list/signal_procs var/datum/parent /datum/component/New(datum/P, ...) + parent = P + var/list/arguments = args.Copy() + arguments.Cut(1, 2) + Initialize(arglist(arguments)) + var/dm = dupe_mode if(dm != COMPONENT_DUPE_ALLOWED) - var/datum/component/old = P.GetExactComponent(type) - if(old) - switch(dm) - if(COMPONENT_DUPE_HIGHLANDER) - InheritComponent(old, FALSE) - qdel(old) - if(COMPONENT_DUPE_UNIQUE) - old.InheritComponent(src, TRUE) - qdel(src) - return + var/dt = dupe_type + var/datum/component/old + if(!dt) + old = P.GetExactComponent(type) + else + old = P.GetComponent(dt) + switch(dm) + if(COMPONENT_DUPE_UNIQUE) + old.InheritComponent(src, TRUE) + parent = null //prevent COMPONENT_REMOVING signal + qdel(src) + return + if(COMPONENT_DUPE_HIGHLANDER) + InheritComponent(old, FALSE) + qdel(old) + + //let the others know P.SendSignal(COMSIG_COMPONENT_ADDED, src) - LAZYADD(P.datum_components, src) - parent = P + + //lazy init the parent's dc list + var/list/dc = P.datum_components + if(!dc) + P.datum_components = dc = list() + + //set up the typecache + var/our_type = type + for(var/I in _GetInverseTypeList(our_type)) + var/test = dc[I] + if(test) //already another component of this type here + var/list/components_of_type + if(!islist(test)) + components_of_type = list(test) + dc[I] = components_of_type + else + components_of_type = test + if(I == our_type) //exact match, take priority + var/inserted = FALSE + for(var/J in 1 to components_of_type.len) + var/datum/component/C = components_of_type[J] + if(C.type != our_type) //but not over other exact matches + components_of_type.Insert(J, I) + inserted = TRUE + break + if(!inserted) + components_of_type += src + else //indirect match, back of the line with ya + components_of_type += src + else //only component of this type, no list + dc[I] = src + +/datum/component/proc/Initialize(...) + return /datum/component/Destroy() enabled = FALSE @@ -33,7 +78,20 @@ /datum/component/proc/_RemoveNoSignal() var/datum/P = parent if(P) - LAZYREMOVE(P.datum_components, src) + var/list/dc = P.datum_components + var/our_type = type + for(var/I in _GetInverseTypeList(our_type)) + var/list/components_of_type = dc[I] + if(islist(components_of_type)) // + var/list/subtracted = components_of_type - src + if(subtracted.len == 1) //only 1 guy left + dc[I] = subtracted[1] //make him special + else + dc[I] = subtracted + else //just us + dc -= I + if(!dc.len) + P.datum_components = null parent = null /datum/component/proc/RegisterSignal(sig_type, proc_on_self, override = FALSE) @@ -66,36 +124,66 @@ /datum/component/proc/OnTransfer(datum/new_parent) return +/datum/component/proc/AfterComponentActivated() + return + +/datum/component/proc/_GetInverseTypeList(current_type) + . = list(current_type) + while (current_type != /datum/component) + current_type = type2parent(current_type) + . += current_type + /datum/proc/SendSignal(sigtype, ...) var/list/comps = datum_components . = FALSE - for(var/I in comps) - var/datum/component/C = I - if(!C.enabled) - continue - if(C.ReceiveSignal(arglist(args))) + if(!comps) + return + var/target = comps[/datum/component] + if(!islist(target)) + var/datum/component/C = target + if(C.enabled && C.ReceiveSignal(arglist(args))) ComponentActivated(C) - . = TRUE + C.AfterComponentActivated() + return TRUE + else + for(var/I in target) + var/datum/component/C = I + if(!C.enabled) + continue + if(C.ReceiveSignal(arglist(args))) + ComponentActivated(C) + . = TRUE /datum/proc/ComponentActivated(datum/component/C) return /datum/proc/GetComponent(c_type) - for(var/I in datum_components) - if(istype(I, c_type)) - return I + var/list/dc = datum_components + if(!dc) + return null + . = dc[c_type] + if(islist(.)) + return .[1] /datum/proc/GetExactComponent(c_type) - for(var/I in datum_components) - var/datum/component/C = I + var/list/dc = datum_components + if(!dc) + return null + var/datum/component/C = dc[c_type] + if(C) + if(islist(C)) + C = C[1] if(C.type == c_type) - return I + return C + return null /datum/proc/GetComponents(c_type) - . = list() - for(var/I in datum_components) - if(istype(I, c_type)) - . += I + var/list/dc = datum_components + if(!dc) + return null + . = dc[c_type] + if(!islist(.)) + return list(.) /datum/proc/AddComponent(new_type, ...) var/nt = new_type @@ -103,6 +191,11 @@ var/datum/component/C = new nt(arglist(args)) return QDELING(C) ? GetComponent(new_type) : C +/datum/proc/LoadComponent(component_type, ...) + . = GetComponent(component_type) + if(!.) + return AddComponent(arglist(args)) + /datum/proc/TakeComponent(datum/component/C) if(!C) return diff --git a/code/datums/components/component.dm.rej b/code/datums/components/component.dm.rej new file mode 100644 index 0000000000..3cf20d57b0 --- /dev/null +++ b/code/datums/components/component.dm.rej @@ -0,0 +1 @@ +- \ No newline at end of file diff --git a/code/datums/diseases/_MobProcs.dm b/code/datums/diseases/_MobProcs.dm index 84d177a390..6d26246c38 100644 --- a/code/datums/diseases/_MobProcs.dm +++ b/code/datums/diseases/_MobProcs.dm @@ -43,7 +43,7 @@ SSdisease.active_diseases += DD //Add it to the active diseases list, now that it's actually in a mob and being processed. //Copy properties over. This is so edited diseases persist. - var/list/skipped = list("affected_mob","holder","carrier","stage","type","parent_type","vars","transformed") + var/list/skipped = list("affected_mob","holder","carrier","stage","type","parent_type","vars","transformed","symptoms") for(var/V in DD.vars) if(V in skipped) continue diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index e8ddfdc3d7..7f09ffa48c 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -57,9 +57,7 @@ symptoms = GenerateSymptoms(0, 2) else for(var/datum/symptom/S in D.symptoms) - var/datum/symptom/new_symp = new S.type - new_symp.name = S.name - new_symp.neutered = S.neutered + var/datum/symptom/new_symp = S.Copy() symptoms += new_symp Refresh() diff --git a/code/datums/mind.dm b/code/datums/mind.dm index d943e417e5..a31aab8607 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -400,7 +400,15 @@ if (assigned_role in GLOB.command_positions) text += "HEAD|loyal|employee|headrev|rev" else if (src in SSticker.mode.head_revolutionaries) - text += "head|loyal|employee|HEADREV|rev" + var/last_healthy_headrev = TRUE + for(var/I in SSticker.mode.head_revolutionaries) + if(I == src) + continue + var/mob/M = I + if(M.z == ZLEVEL_STATION && !M.stat) + last_healthy_headrev = FALSE + break + text += "head|loyal|employee|[last_healthy_headrev ? "LAST " : ""]HEADREV|rev" text += "
Flash: give" var/list/L = current.get_contents() diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 524ea9ba2b..f72dafdbac 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -7,7 +7,7 @@ icon = 'icons/turf/areas.dmi' icon_state = "unknown" layer = AREA_LAYER - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT invisibility = INVISIBILITY_LIGHTING var/map_name // Set in New(); preserves the name set by the map maker, even if renamed by the Blueprints. @@ -242,7 +242,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) for(var/area/RA in related) if (RA.fire) RA.fire = 0 - RA.mouse_opacity = 0 + RA.mouse_opacity = MOUSE_OPACITY_TRANSPARENT RA.updateicon() RA.ModifyFiredoors(TRUE) for(var/obj/machinery/firealarm/F in RA) @@ -293,7 +293,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) /area/proc/set_fire_alarm_effect() fire = 1 updateicon() - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /area/proc/readyalert() if(name == "Space") @@ -313,12 +313,12 @@ GLOBAL_LIST_EMPTY(teleportlocs) if (!( src.party )) src.party = 1 src.updateicon() - src.mouse_opacity = 0 + src.mouse_opacity = MOUSE_OPACITY_TRANSPARENT /area/proc/partyreset() if (src.party) src.party = 0 - src.mouse_opacity = 0 + src.mouse_opacity = MOUSE_OPACITY_TRANSPARENT src.updateicon() for(var/obj/machinery/door/firedoor/D in src) if(!D.welded) diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm index 7fa09f3978..247b660dbc 100644 --- a/code/game/gamemodes/blob/overmind.dm +++ b/code/game/gamemodes/blob/overmind.dm @@ -4,7 +4,7 @@ desc = "The overmind. It controls the blob." icon = 'icons/mob/blob.dmi' icon_state = "marker" - mouse_opacity = 1 + mouse_opacity = MOUSE_OPACITY_ICON move_on_shuttle = 1 see_in_dark = 8 invisibility = INVISIBILITY_OBSERVER diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm index f6bf8539e0..389888ac28 100644 --- a/code/game/gamemodes/blob/powers.dm +++ b/code/game/gamemodes/blob/powers.dm @@ -175,7 +175,7 @@ SEND_SOUND(blobber, sound('sound/effects/attackblob.ogg')) to_chat(blobber, "You are a blobbernaut!") to_chat(blobber, "You are powerful, hard to kill, and slowly regenerate near nodes and cores, but will slowly die if not near the blob or if the factory that made you is killed.") - to_chat(blobber, "You can communicate with other blobbernauts and GLOB.overminds via :b") + to_chat(blobber, "You can communicate with other blobbernauts and overminds via :b") to_chat(blobber, "Your overmind's blob reagent is: [blob_reagent_datum.name]!") to_chat(blobber, "The [blob_reagent_datum.name] reagent [blob_reagent_datum.shortdesc ? "[blob_reagent_datum.shortdesc]" : "[blob_reagent_datum.description]"]") if(blobber) diff --git a/code/game/gamemodes/blob/powers.dm.rej b/code/game/gamemodes/blob/powers.dm.rej new file mode 100644 index 0000000000..27dc764a75 --- /dev/null +++ b/code/game/gamemodes/blob/powers.dm.rej @@ -0,0 +1,10 @@ +diff a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm (rejected hunks) +@@ -175,7 +175,7 @@ + SEND_SOUND(blobber, sound('sound/effects/attackblob.ogg')) + to_chat(blobber, "You are a blobbernaut!") + to_chat(blobber, "You are powerful, hard to kill, and slowly regenerate near nodes and cores, but will slowly die if not near the blob or if the factory that made you is killed.") +- to_chat(blobber, "You can communicate with other blobbernauts and GLOB.overminds via :b") ++ to_chat(blobber, "You can communicate with other blobbernauts and overminds via :b") + to_chat(blobber, "Your overmind's blob reagent is: [blob_reagent_datum.name]!") + to_chat(blobber, "The [blob_reagent_datum.name] reagent [blob_reagent_datum.shortdesc ? "[blob_reagent_datum.shortdesc]" : "[blob_reagent_datum.description]"]") + if(blobber) diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index 9bce7319f8..f6cdd64bb6 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -24,6 +24,7 @@ M.changeNext_move(CLICK_CD_MELEE) var/a = pick("gently stroke", "nuzzle", "affectionatly pet", "cuddle") M.visible_message("[M] [a]s [src]!", "You [a] [src]!") + to_chat(overmind, "[M] [a]s you!") playsound(src, 'sound/effects/blobattack.ogg', 50, 1) //SQUISH SQUISH diff --git a/code/game/gamemodes/clock_cult/clock_effects/clock_overlay.dm b/code/game/gamemodes/clock_cult/clock_effects/clock_overlay.dm index 0d7a5b799c..e8cba1a39d 100644 --- a/code/game/gamemodes/clock_cult/clock_effects/clock_overlay.dm +++ b/code/game/gamemodes/clock_cult/clock_effects/clock_overlay.dm @@ -1,6 +1,6 @@ //an "overlay" used by clockwork walls and floors to appear normal to mesons. /obj/effect/clockwork/overlay - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/atom/linked /obj/effect/clockwork/overlay/examine(mob/user) diff --git a/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm b/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm index 72ed326b26..0770c62bec 100644 --- a/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm +++ b/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm @@ -130,13 +130,19 @@ playsound(src, 'sound/effects/empulse.ogg', 50, 1) playsound(linked_gateway, 'sound/effects/empulse.ogg', 50, 1) transform = matrix() * 1.5 - animate(src, transform = matrix() / 1.5, time = 10, flags = ANIMATION_END_NOW) linked_gateway.transform = matrix() * 1.5 - animate(linked_gateway, transform = matrix() / 1.5, time = 10, flags = ANIMATION_END_NOW) A.forceMove(get_turf(linked_gateway)) if(!no_cost) uses = max(0, uses - 1) linked_gateway.uses = max(0, linked_gateway.uses - 1) + if(!uses) + animate(src, transform = matrix() * 0.1, time = 10, flags = ANIMATION_END_NOW) + animate(linked_gateway, transform = matrix() * 0.1, time = 10, flags = ANIMATION_END_NOW) + density = FALSE + linked_gateway.density = FALSE + else + animate(src, transform = matrix() / 1.5, time = 10, flags = ANIMATION_END_NOW) + animate(linked_gateway, transform = matrix() / 1.5, time = 10, flags = ANIMATION_END_NOW) addtimer(CALLBACK(src, .proc/check_uses), 10) return TRUE diff --git a/code/game/gamemodes/clock_cult/clock_structures/ark_of_the_clockwork_justicar.dm b/code/game/gamemodes/clock_cult/clock_structures/ark_of_the_clockwork_justicar.dm index 144e378304..2174f04dcb 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/ark_of_the_clockwork_justicar.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/ark_of_the_clockwork_justicar.dm @@ -4,7 +4,7 @@ desc = "A massive, thrumming rip in spacetime." clockwork_desc = "A portal to the Celestial Derelict. Massive and intimidating, it is the only thing that can both transport Ratvar and withstand the massive amount of energy he emits." max_integrity = 500 - mouse_opacity = 2 + mouse_opacity = MOUSE_OPACITY_OPAQUE icon = 'icons/effects/clockwork_effects.dmi' icon_state = "nothing" density = FALSE @@ -68,7 +68,7 @@ if(!purpose_fulfilled) var/area/gate_area = get_area(src) hierophant_message("An Ark of the Clockwork Justicar has fallen at [gate_area.map_name]!") - send_to_playing_players(sound(null, 0, channel = CHANNEL_JUSTICAR_ARK)) + sound_to_playing_players(channel = CHANNEL_JUSTICAR_ARK, S = sound(null, 0)) var/was_stranded = SSshuttle.emergency.mode == SHUTTLE_STRANDED SSshuttle.clearHostileEnvironment(src) if(!was_stranded && !purpose_fulfilled) @@ -87,7 +87,7 @@ resistance_flags |= INDESTRUCTIBLE countdown.stop() visible_message("[src] begins to pulse uncontrollably... you might want to run!") - send_to_playing_players(sound('sound/effects/clockcult_gateway_disrupted.ogg', 0, channel = CHANNEL_JUSTICAR_ARK, volume = 50)) + sound_to_playing_players(volume = 50, channel = CHANNEL_JUSTICAR_ARK, S = sound('sound/effects/clockcult_gateway_disrupted.ogg', 0)) make_glow() glow.icon_state = "clockwork_gateway_disrupted" resistance_flags |= INDESTRUCTIBLE @@ -208,7 +208,7 @@ if(still_needs_components()) if(!first_sound_played) priority_announce("Massive energy anomaly detected on short-range scanners. Attempting to triangulate location...", "Anomaly Alert") - send_to_playing_players(sound('sound/effects/clockcult_gateway_charging.ogg', 1, channel = CHANNEL_JUSTICAR_ARK, volume = 10)) + sound_to_playing_players(volume = 10, channel = CHANNEL_JUSTICAR_ARK, S = sound('sound/effects/clockcult_gateway_charging.ogg', 1)) first_sound_played = TRUE make_glow() glow.icon_state = "clockwork_gateway_components" @@ -228,7 +228,8 @@ switch(progress_in_seconds) if(-INFINITY to GATEWAY_REEBE_FOUND) if(!second_sound_played) - send_to_playing_players(sound('sound/effects/clockcult_gateway_charging.ogg', 1, channel = CHANNEL_JUSTICAR_ARK, volume = 30)) + new /obj/effect/temp_visual/decoy/fading/threesecond(loc, glow) + sound_to_playing_players(volume = 30, channel = CHANNEL_JUSTICAR_ARK, S = sound('sound/effects/clockcult_gateway_charging.ogg', 1)) second_sound_played = TRUE make_glow() glow.icon_state = "clockwork_gateway_charging" @@ -236,13 +237,15 @@ if(!third_sound_played) var/area/gate_area = get_area(src) priority_announce("Location of massive energy anomaly has been triangulated. Location: [gate_area.map_name].", "Anomaly Alert") - send_to_playing_players(sound('sound/effects/clockcult_gateway_active.ogg', 1, channel = CHANNEL_JUSTICAR_ARK, volume = 35)) + new /obj/effect/temp_visual/decoy/fading/threesecond(loc, glow) + sound_to_playing_players(volume = 35, channel = CHANNEL_JUSTICAR_ARK, S = sound('sound/effects/clockcult_gateway_active.ogg', 1)) third_sound_played = TRUE make_glow() glow.icon_state = "clockwork_gateway_active" if(GATEWAY_RATVAR_COMING to GATEWAY_RATVAR_ARRIVAL) if(!fourth_sound_played) - send_to_playing_players(sound('sound/effects/clockcult_gateway_closing.ogg', 1, channel = CHANNEL_JUSTICAR_ARK, volume = 40)) + new /obj/effect/temp_visual/decoy/fading/threesecond(loc, glow) + sound_to_playing_players(volume = 40, channel = CHANNEL_JUSTICAR_ARK, S = sound('sound/effects/clockcult_gateway_closing.ogg', 1)) fourth_sound_played = TRUE make_glow() glow.icon_state = "clockwork_gateway_closing" @@ -252,20 +255,20 @@ resistance_flags |= INDESTRUCTIBLE purpose_fulfilled = TRUE make_glow() - animate(glow, transform = matrix() * 1.5, alpha = 255, time = 125) - send_to_playing_players(sound('sound/effects/ratvar_rises.ogg', 0, channel = CHANNEL_JUSTICAR_ARK)) //End the sounds + animate(glow, transform = matrix() * 3, time = 125) + sound_to_playing_players('sound/effects/ratvar_rises.ogg', channel = CHANNEL_JUSTICAR_ARK) //End the sounds sleep(125) - make_glow() - animate(glow, transform = matrix() * 3, alpha = 0, time = 5) var/turf/startpoint = get_turf(src) - QDEL_IN(src, 3) - sleep(3) + make_glow() + glow.transform = matrix() * 4.5 + animate(glow, transform = matrix() * 0.1, time = 10) + QDEL_IN(src, 10) GLOB.clockwork_gateway_activated = TRUE new/obj/structure/destructible/clockwork/massive/ratvar(startpoint) send_to_playing_players("\"[text2ratvar("See Engine's mercy")]!\"\n\ \"[text2ratvar("Observe Engine's design skills")]!\"\n\"[text2ratvar("Behold Engine's light")]!!\"\n\ \"[text2ratvar("Gaze upon Engine's power")].\"") - send_to_playing_players('sound/magic/clockwork/invoke_general.ogg') + sound_to_playing_players('sound/effects/empulse.ogg') var/x0 = startpoint.x var/y0 = startpoint.y for(var/I in spiral_range_turfs(255, startpoint)) diff --git a/code/game/gamemodes/clock_cult/clock_structures/prolonging_prism.dm b/code/game/gamemodes/clock_cult/clock_structures/prolonging_prism.dm index aae18ba175..cf730189e3 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/prolonging_prism.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/prolonging_prism.dm @@ -130,6 +130,6 @@ if(hex_combo) //YOU BUILT A HEXAGON hex_combo.pixel_x = -16 hex_combo.pixel_y = -16 - hex_combo.mouse_opacity = 0 + hex_combo.mouse_opacity = MOUSE_OPACITY_TRANSPARENT hex_combo.plane = GAME_PLANE new /obj/effect/temp_visual/ratvar/prolonging_prism(T, hex_combo) diff --git a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm b/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm index c8b81a8ef0..c604e106f3 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm @@ -23,12 +23,12 @@ for(var/obj/O in GLOB.all_clockwork_objects) O.ratvar_act() START_PROCESSING(SSobj, src) + INVOKE_ASYNC(SSshuttle.emergency, /obj/docking_port/mobile/emergency.proc/request, null, 0, null, FALSE, 0) send_to_playing_players("\"[text2ratvar("ONCE AGAIN MY LIGHT SHALL SHINE ACROSS THIS PATHETIC REALM")]!!\"") sound_to_playing_players('sound/effects/ratvar_reveal.ogg') var/mutable_appearance/alert_overlay = mutable_appearance('icons/effects/clockwork_effects.dmi', "ratvar_alert") var/area/A = get_area(src) notify_ghosts("The Justiciar's light calls to you! Reach out to Ratvar in [A.name] to be granted a shell to spread his glory!", null, source = src, alert_overlay = alert_overlay) - INVOKE_ASYNC(SSshuttle.emergency, /obj/docking_port/mobile/emergency.proc/request, null, 0, null, FALSE, 0) /obj/structure/destructible/clockwork/massive/ratvar/Destroy() GLOB.ratvar_awakens-- diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 4c80f53b94..7810df2a9a 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -476,7 +476,7 @@ structure_check() searches for nearby cultist structures required for the invoca //BEGIN THE SUMMONING used = TRUE ..() - send_to_playing_players('sound/effects/dimensional_rend.ogg') + sound_to_playing_players('sound/effects/dimensional_rend.ogg') var/turf/T = get_turf(src) sleep(40) if(src) diff --git a/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm b/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm index 90ea06fbd5..794b1bfa8e 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/dispenser.dm @@ -13,8 +13,8 @@ //TODO : replace with presets or spectrum return rgb(rand(0,255),rand(0,255),rand(0,255)) -/obj/machinery/abductor/gland_dispenser/New() - ..() +/obj/machinery/abductor/gland_dispenser/Initialize() + . = ..() gland_types = subtypesof(/obj/item/organ/heart/gland) gland_types = shuffle(gland_types) gland_colors = new/list(gland_types.len) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index d36cab4881..941e0bf081 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -85,9 +85,8 @@ . = ..() var/obj/machinery/nuclearbomb/existing = locate("syndienuke") in GLOB.nuke_list if(existing) - qdel(src) - throw EXCEPTION("Attempted to spawn a syndicate nuke while one already exists at [existing.loc.x],[existing.loc.y],[existing.loc.z]") - return 0 + stack_trace("Attempted to spawn a syndicate nuke while one already exists at [existing.loc.x],[existing.loc.y],[existing.loc.z]") + return INITIALIZE_HINT_QDEL tag = "syndienuke" /obj/machinery/nuclearbomb/attackby(obj/item/I, mob/user, params) diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm index d50af412a4..80400fee05 100644 --- a/code/game/machinery/Beacon.dm +++ b/code/game/machinery/Beacon.dm @@ -11,8 +11,8 @@ idle_power_usage = 0 var/obj/item/device/radio/beacon/Beacon -/obj/machinery/bluespace_beacon/New() - ..() +/obj/machinery/bluespace_beacon/Initialize() + . = ..() var/turf/T = loc Beacon = new /obj/item/device/radio/beacon Beacon.invisibility = INVISIBILITY_MAXIMUM @@ -21,9 +21,7 @@ hide(T.intact) /obj/machinery/bluespace_beacon/Destroy() - if(Beacon) - qdel(Beacon) - Beacon = null + QDEL_NULL(Beacon) return ..() // update the invisibility and icon diff --git a/code/game/machinery/PDApainter.dm b/code/game/machinery/PDApainter.dm index 39f360e316..836287c9df 100644 --- a/code/game/machinery/PDApainter.dm +++ b/code/game/machinery/PDApainter.dm @@ -27,12 +27,16 @@ return -/obj/machinery/pdapainter/New() - ..() - var/blocked = list(/obj/item/device/pda/ai/pai, /obj/item/device/pda/ai, /obj/item/device/pda/heads, - /obj/item/device/pda/clear, /obj/item/device/pda/syndicate) - - for(var/P in typesof(/obj/item/device/pda)-blocked) +/obj/machinery/pdapainter/Initialize() + . = ..() + var/list/blocked = list( + /obj/item/device/pda/ai/pai, + /obj/item/device/pda/ai, + /obj/item/device/pda/heads, + /obj/item/device/pda/clear, + /obj/item/device/pda/syndicate) + + for(var/P in typesof(/obj/item/device/pda) - blocked) var/obj/item/device/pda/D = new P //D.name = "PDA Style [colorlist.len+1]" //Gotta set the name, otherwise it all comes up as "PDA" @@ -41,9 +45,7 @@ src.colorlist += D /obj/machinery/pdapainter/Destroy() - if(storedpda) - qdel(storedpda) - storedpda = null + QDEL_NULL(storedpda) return ..() /obj/machinery/pdapainter/on_deconstruction() diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 7171718dce..a14989c199 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -13,6 +13,7 @@ density = FALSE anchored = TRUE state_open = TRUE + circuit = /obj/item/weapon/circuitboard/machine/sleeper var/efficiency = 1 var/min_health = -25 var/list/available_chems @@ -26,24 +27,11 @@ var/list/chem_buttons //Used when emagged to scramble which chem is used, eg: antitoxin -> morphine var/scrambled_chems = FALSE //Are chem buttons scrambled? used as a warning -/obj/machinery/sleeper/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/sleeper(null) - B.apply_default_parts(src) +/obj/machinery/sleeper/Initialize() + . = ..() update_icon() reset_chem_buttons() -/obj/item/weapon/circuitboard/machine/sleeper - name = "Sleeper (Machine Board)" - build_path = /obj/machinery/sleeper - origin_tech = "programming=3;biotech=2;engineering=3" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/console_screen = 1, - /obj/item/stack/sheet/glass = 1) - /obj/machinery/sleeper/RefreshParts() var/E for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/_machinery.dm similarity index 98% rename from code/game/machinery/machinery.dm rename to code/game/machinery/_machinery.dm index cf51158356..f9d530feac 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -123,12 +123,18 @@ Class Procs: var/interact_open = FALSE // Can the machine be interacted with when in maint/when the panel is open. var/interact_offline = 0 // Can the machine be interacted with while de-powered. var/speed_process = 0 // Process as fast as possible? + var/obj/item/weapon/circuitboard/circuit // Circuit to be created and inserted when the machinery is created /obj/machinery/Initialize() if(!armor) armor = list(melee = 25, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 70) . = ..() GLOB.machines += src + + if(ispath(circuit, /obj/item/weapon/circuitboard)) + circuit = new circuit + circuit.apply_default_parts(src) + if(!speed_process) START_PROCESSING(SSmachines, src) else diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index 5b5c9bee34..b1fddc8a76 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -7,7 +7,6 @@ GLOBAL_LIST_EMPTY(announcement_systems) desc = "An automated announcement system that handles minor announcements over the radio." icon = 'icons/obj/machines/telecomms.dmi' icon_state = "AAS_On" - var/obj/item/device/radio/headset/radio verb_say = "coldly states" verb_ask = "queries" @@ -16,6 +15,9 @@ GLOBAL_LIST_EMPTY(announcement_systems) idle_power_usage = 20 active_power_usage = 50 + circuit = /obj/item/weapon/circuitboard/machine/announcement_system + + var/obj/item/device/radio/headset/radio var/arrival = "%PERSON has signed up as %RANK" var/arrivalToggle = 1 var/newhead = "%PERSON, %RANK, is the department head." @@ -25,24 +27,12 @@ GLOBAL_LIST_EMPTY(announcement_systems) var/pinklight = "Light_Pink" var/errorlight = "Error_Red" -/obj/machinery/announcement_system/New() - ..() +/obj/machinery/announcement_system/Initialize() + . = ..() GLOB.announcement_systems += src radio = new /obj/item/device/radio/headset/ai(src) - - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/announcement_system(null) - B.apply_default_parts(src) - update_icon() -/obj/item/weapon/circuitboard/machine/announcement_system - name = "Announcement System (Machine Board)" - build_path = /obj/machinery/announcement_system - origin_tech = "programming=3;bluespace=3;magnets=2" - req_components = list( - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/console_screen = 1) - /obj/machinery/announcement_system/update_icon() if(is_operational()) icon_state = (panel_open ? "AAS_On_Open" : "AAS_On") diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index db491bf52c..53d8acd0a2 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -7,9 +7,13 @@ desc = "It produces items using metal and glass." icon_state = "autolathe" density = TRUE + anchored = TRUE + use_power = IDLE_POWER_USE + idle_power_usage = 10 + active_power_usage = 100 + circuit = /obj/item/weapon/circuitboard/machine/autolathe var/operating = FALSE - anchored = TRUE var/list/L = list() var/list/LL = list() var/hacked = FALSE @@ -18,9 +22,7 @@ var/hack_wire var/disable_wire var/shock_wire - use_power = IDLE_POWER_USE - idle_power_usage = 10 - active_power_usage = 100 + var/busy = FALSE var/prod_coeff = 1 @@ -45,30 +47,16 @@ "Imported" ) -/obj/machinery/autolathe/New() - ..() +/obj/machinery/autolathe/Initialize() materials = new /datum/material_container(src, list(MAT_METAL, MAT_GLASS)) - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/autolathe(null) - B.apply_default_parts(src) - wires = new /datum/wires/autolathe(src) files = new /datum/research/autolathe(src) matching_designs = list() - -/obj/item/weapon/circuitboard/machine/autolathe - name = "Autolathe (Machine Board)" - build_path = /obj/machinery/autolathe - origin_tech = "engineering=2;programming=2" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 3, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/console_screen = 1) + return ..() /obj/machinery/autolathe/Destroy() - qdel(wires) - wires = null - qdel(materials) - materials = null + QDEL_NULL(wires) + QDEL_NULL(materials) return ..() /obj/machinery/autolathe/interact(mob/user) diff --git a/code/game/machinery/bank_machine.dm b/code/game/machinery/bank_machine.dm index 0ebae75da6..de07fc9c2d 100644 --- a/code/game/machinery/bank_machine.dm +++ b/code/game/machinery/bank_machine.dm @@ -9,8 +9,8 @@ var/radio_channel = "Common" var/minimum_time_between_warnings = 400 -/obj/machinery/computer/bank_machine/Initialize(mapload) - ..() +/obj/machinery/computer/bank_machine/Initialize() + . = ..() radio = new(src) radio.subspace_transmission = TRUE radio.canhear_range = 0 diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 9fdcea6aaf..8e5c83183d 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -17,6 +17,8 @@ icon_state = "pod_0" req_access = list(ACCESS_CLONING) //FOR PREMATURE UNLOCKING. verb_say = "states" + circuit = /obj/item/weapon/circuitboard/machine/clonepod + var/heal_level //The clone is released once its health reaches this level. var/obj/machinery/computer/cloning/connected = null //So we remember the connected clone machine. var/mess = FALSE //Need to clean out it if it's full of exploded clone. @@ -46,8 +48,6 @@ /obj/machinery/clonepod/Initialize() . = ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/clonepod(null) - B.apply_default_parts(src) countdown = new(src) @@ -59,16 +59,11 @@ /obj/machinery/clonepod/Destroy() go_out() - qdel(radio) - radio = null - qdel(countdown) - countdown = null + QDEL_NULL(radio) + QDEL_NULL(countdown) if(connected) connected.DetachCloner(src) - for(var/i in unattached_flesh) - qdel(i) - LAZYCLEARLIST(unattached_flesh) - unattached_flesh = null + QDEL_LIST(unattached_flesh) . = ..() /obj/machinery/clonepod/RefreshParts() @@ -84,16 +79,6 @@ if(heal_level > 100) heal_level = 100 -/obj/item/weapon/circuitboard/machine/clonepod - name = "Clone Pod (Machine Board)" - build_path = /obj/machinery/clonepod - origin_tech = "programming=2;biotech=2" - req_components = list( - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/scanning_module = 2, - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/stack/sheet/glass = 1) - //The return of data disks?? Just for transferring between genetics machine/cloning machine. //TO-DO: Make the genetics machine accept them. /obj/item/weapon/disk/data diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index 02ef157de9..ab4eb941b7 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -4,8 +4,8 @@ icon_screen = "crew" icon_keyboard = "med_key" circuit = /obj/item/weapon/circuitboard/computer/operating - var/mob/living/carbon/human/patient = null - var/obj/structure/table/optable/table = null + var/mob/living/carbon/human/patient + var/obj/structure/table/optable/table light_color = LIGHT_COLOR_BLUE diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/_computer.dm similarity index 84% rename from code/game/machinery/computer/computer.dm rename to code/game/machinery/computer/_computer.dm index d4dc73a2e6..85c02f6d37 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/_computer.dm @@ -1,142 +1,129 @@ -/obj/machinery/computer - name = "computer" - icon = 'icons/obj/computer.dmi' - icon_state = "computer" - density = TRUE - anchored = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 300 - active_power_usage = 300 - max_integrity = 200 - integrity_failure = 100 - armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 40, acid = 20) - var/obj/item/weapon/circuitboard/computer/circuit = null // if circuit==null, computer can't disassembly - var/processing = FALSE - var/brightness_on = 2 - var/icon_keyboard = "generic_key" - var/icon_screen = "generic" - var/clockwork = FALSE - -/obj/machinery/computer/New(location, obj/item/weapon/circuitboard/C) - ..(location) - if(C && istype(C)) - circuit = C - //Some machines, oldcode arcades mostly, new themselves, so circuit - //can already be an instance of a type and trying to new that will - //cause a runtime - else if(ispath(circuit)) - circuit = new circuit(null) - -/obj/machinery/computer/Destroy() - if(circuit) - qdel(circuit) - circuit = null - return ..() - -/obj/machinery/computer/Initialize() - . = ..() - power_change() - -/obj/machinery/computer/process() - if(stat & (NOPOWER|BROKEN)) - return 0 - return 1 - -/obj/machinery/computer/ratvar_act() - if(!clockwork) - clockwork = TRUE - icon_screen = "ratvar[rand(1, 4)]" - icon_keyboard = "ratvar_key[rand(1, 6)]" - icon_state = "ratvarcomputer[rand(1, 4)]" - update_icon() - -/obj/machinery/computer/narsie_act() - if(clockwork && clockwork != initial(clockwork)) //if it's clockwork but isn't normally clockwork - clockwork = FALSE - icon_screen = initial(icon_screen) - icon_keyboard = initial(icon_keyboard) - icon_state = initial(icon_state) - update_icon() - -/obj/machinery/computer/update_icon() - cut_overlays() - if(stat & NOPOWER) - add_overlay("[icon_keyboard]_off") - return - add_overlay(icon_keyboard) - if(stat & BROKEN) - add_overlay("[icon_state]_broken") - else - add_overlay(icon_screen) - -/obj/machinery/computer/power_change() - ..() - if(stat & NOPOWER) - set_light(0) - else - set_light(brightness_on) - update_icon() - return - -/obj/machinery/computer/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/screwdriver) && circuit && !(flags&NODECONSTRUCT)) - playsound(src.loc, I.usesound, 50, 1) - to_chat(user, " You start to disconnect the monitor...") - if(do_after(user, 20*I.toolspeed, target = src)) - deconstruct(TRUE, user) - else - return ..() - -/obj/machinery/computer/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - if(stat & BROKEN) - playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) - else - playsound(src.loc, 'sound/effects/glasshit.ogg', 75, 1) - if(BURN) - playsound(src.loc, 'sound/items/welder.ogg', 100, 1) - -/obj/machinery/computer/obj_break(damage_flag) - if(circuit && !(flags & NODECONSTRUCT)) //no circuit, no breaking - if(!(stat & BROKEN)) - playsound(loc, 'sound/effects/glassbr3.ogg', 100, 1) - stat |= BROKEN - update_icon() - -/obj/machinery/computer/emp_act(severity) - switch(severity) - if(1) - if(prob(50)) - obj_break("energy") - if(2) - if(prob(10)) - obj_break("energy") - ..() - -/obj/machinery/computer/deconstruct(disassembled = TRUE, mob/user) - on_deconstruction() - if(!(flags & NODECONSTRUCT)) - if(circuit) //no circuit, no computer frame - var/obj/structure/frame/computer/A = new /obj/structure/frame/computer(src.loc) - A.circuit = circuit - A.anchored = TRUE - if(stat & BROKEN) - if(user) - to_chat(user, "The broken glass falls out.") - else - playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) - new /obj/item/weapon/shard(src.loc) - new /obj/item/weapon/shard(src.loc) - A.state = 3 - A.icon_state = "3" - else - if(user) - to_chat(user, "You disconnect the monitor.") - A.state = 4 - A.icon_state = "4" - circuit = null - for(var/obj/C in src) - C.forceMove(loc) - - qdel(src) +/obj/machinery/computer + name = "computer" + icon = 'icons/obj/computer.dmi' + icon_state = "computer" + density = TRUE + anchored = TRUE + use_power = IDLE_POWER_USE + idle_power_usage = 300 + active_power_usage = 300 + max_integrity = 200 + integrity_failure = 100 + armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 40, acid = 20) + var/processing = FALSE + var/brightness_on = 2 + var/icon_keyboard = "generic_key" + var/icon_screen = "generic" + var/clockwork = FALSE + +/obj/machinery/computer/Initialize(mapload, obj/item/weapon/circuitboard/C) + . = ..() + power_change() + +/obj/machinery/computer/Destroy() + QDEL_NULL(circuit) + return ..() + +/obj/machinery/computer/process() + if(stat & (NOPOWER|BROKEN)) + return 0 + return 1 + +/obj/machinery/computer/ratvar_act() + if(!clockwork) + clockwork = TRUE + icon_screen = "ratvar[rand(1, 4)]" + icon_keyboard = "ratvar_key[rand(1, 6)]" + icon_state = "ratvarcomputer[rand(1, 4)]" + update_icon() + +/obj/machinery/computer/narsie_act() + if(clockwork && clockwork != initial(clockwork)) //if it's clockwork but isn't normally clockwork + clockwork = FALSE + icon_screen = initial(icon_screen) + icon_keyboard = initial(icon_keyboard) + icon_state = initial(icon_state) + update_icon() + +/obj/machinery/computer/update_icon() + cut_overlays() + if(stat & NOPOWER) + add_overlay("[icon_keyboard]_off") + return + add_overlay(icon_keyboard) + if(stat & BROKEN) + add_overlay("[icon_state]_broken") + else + add_overlay(icon_screen) + +/obj/machinery/computer/power_change() + ..() + if(stat & NOPOWER) + set_light(0) + else + set_light(brightness_on) + update_icon() + return + +/obj/machinery/computer/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver) && circuit && !(flags&NODECONSTRUCT)) + playsound(src.loc, I.usesound, 50, 1) + to_chat(user, " You start to disconnect the monitor...") + if(do_after(user, 20*I.toolspeed, target = src)) + deconstruct(TRUE, user) + else + return ..() + +/obj/machinery/computer/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + switch(damage_type) + if(BRUTE) + if(stat & BROKEN) + playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) + else + playsound(src.loc, 'sound/effects/glasshit.ogg', 75, 1) + if(BURN) + playsound(src.loc, 'sound/items/welder.ogg', 100, 1) + +/obj/machinery/computer/obj_break(damage_flag) + if(circuit && !(flags & NODECONSTRUCT)) //no circuit, no breaking + if(!(stat & BROKEN)) + playsound(loc, 'sound/effects/glassbr3.ogg', 100, 1) + stat |= BROKEN + update_icon() + +/obj/machinery/computer/emp_act(severity) + switch(severity) + if(1) + if(prob(50)) + obj_break("energy") + if(2) + if(prob(10)) + obj_break("energy") + ..() + +/obj/machinery/computer/deconstruct(disassembled = TRUE, mob/user) + on_deconstruction() + if(!(flags & NODECONSTRUCT)) + if(circuit) //no circuit, no computer frame + var/obj/structure/frame/computer/A = new /obj/structure/frame/computer(src.loc) + A.circuit = circuit + A.anchored = TRUE + if(stat & BROKEN) + if(user) + to_chat(user, "The broken glass falls out.") + else + playsound(src.loc, 'sound/effects/hit_on_shattered_glass.ogg', 70, 1) + new /obj/item/weapon/shard(src.loc) + new /obj/item/weapon/shard(src.loc) + A.state = 3 + A.icon_state = "3" + else + if(user) + to_chat(user, "You disconnect the monitor.") + A.state = 4 + A.icon_state = "4" + circuit = null + for(var/obj/C in src) + C.forceMove(loc) + + qdel(src) diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm index 134c28571e..45c4142f09 100644 --- a/code/game/machinery/computer/apc_control.dm +++ b/code/game/machinery/computer/apc_control.dm @@ -16,9 +16,9 @@ var/auth_id = "\[NULL\]" /obj/machinery/computer/apc_control/Initialize() + . = ..() apcs = list() //To avoid BYOND making the list run through a ton of procs filters = list("Name" = null, "Charge Above" = null, "Charge Below" = null, "Responsive" = null) - ..() /obj/machinery/computer/apc_control/process() apcs = list() //Clear the list every tick diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 286de0bcb8..ad48c9a12c 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -51,21 +51,17 @@ /obj/machinery/computer/arcade/proc/Reset() return -/obj/machinery/computer/arcade/New() - ..() +/obj/machinery/computer/arcade/Initialize() + . = ..() // If it's a generic arcade machine, pick a random arcade // circuit board for it and make the new machine if(!circuit) var/choice = pick(subtypesof(/obj/item/weapon/circuitboard/computer/arcade)) var/obj/item/weapon/circuitboard/CB = new choice() new CB.build_path(loc, CB) - qdel(src) - -/obj/machinery/computer/arcade/Initialize() - . = ..() + return INITIALIZE_HINT_QDEL Reset() - #define PULSE_MEDAL "Jackpot" /obj/machinery/computer/arcade/proc/prizevend() @@ -78,11 +74,9 @@ new prizeselect(src) var/atom/movable/prize = pick(contents) - visible_message( - "[src] dispenses a [prize]!", - "You hear a chime and a clunk.") + visible_message("[src] dispenses a [prize]!", "You hear a chime and a clunk.") - prize.loc = loc + prize.forceMove(get_turf(src)) #undef PULSE_MEDAL /obj/machinery/computer/arcade/emp_act(severity) @@ -157,7 +151,6 @@ popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(icon, icon_state)) popup.open() - return /obj/machinery/computer/arcade/battle/Topic(href, href_list) if(..()) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 889fda3dd8..a53b270130 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -142,320 +142,4 @@ new /obj/item/weapon/shard(loc) if(state >= 3) new /obj/item/stack/cable_coil(loc , 5) - ..() - - -/obj/item/weapon/circuitboard - name = "circuit board" - icon = 'icons/obj/module.dmi' - icon_state = "id_mod" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - origin_tech = "programming=2" - materials = list(MAT_GLASS=1000) - w_class = WEIGHT_CLASS_SMALL - var/build_path = null - -/obj/item/weapon/circuitboard/computer/turbine_computer - name = "Turbine Computer (Computer Board)" - build_path = /obj/machinery/computer/turbine_computer - origin_tech = "programming=4;engineering=4;powerstorage=4" -/obj/item/weapon/circuitboard/computer/launchpad_console - name = "Launchpad Control Console (Computer Board)" - build_path = /obj/machinery/computer/launchpad - origin_tech = "programming=3;bluespace=3;plasmatech=2" -/obj/item/weapon/circuitboard/computer/message_monitor - name = "Message Monitor (Computer Board)" - build_path = /obj/machinery/computer/message_monitor - origin_tech = "programming=2" -/obj/item/weapon/circuitboard/computer/security - name = "Security Cameras (Computer Board)" - build_path = /obj/machinery/computer/security - origin_tech = "programming=2;combat=2" -/obj/item/weapon/circuitboard/computer/xenobiology - name = "circuit board (Xenobiology Console)" - build_path = /obj/machinery/computer/camera_advanced/xenobio - origin_tech = "programming=3;biotech=3" -/obj/item/weapon/circuitboard/computer/base_construction - name = "circuit board (Aux Mining Base Construction Console)" - build_path = /obj/machinery/computer/camera_advanced/base_construction - origin_tech = "programming=3;engineering=3" -/obj/item/weapon/circuitboard/computer/aiupload - name = "AI Upload (Computer Board)" - build_path = /obj/machinery/computer/upload/ai - origin_tech = "programming=4;engineering=4" -/obj/item/weapon/circuitboard/computer/borgupload - name = "Cyborg Upload (Computer Board)" - build_path = /obj/machinery/computer/upload/borg - origin_tech = "programming=4;engineering=4" -/obj/item/weapon/circuitboard/computer/med_data - name = "Medical Records Console (Computer Board)" - build_path = /obj/machinery/computer/med_data - origin_tech = "programming=2;biotech=2" -/obj/item/weapon/circuitboard/computer/pandemic - name = "PanD.E.M.I.C. 2200 (Computer Board)" - build_path = /obj/machinery/computer/pandemic - origin_tech = "programming=2;biotech=2" -/obj/item/weapon/circuitboard/computer/scan_consolenew - name = "DNA Machine (Computer Board)" - build_path = /obj/machinery/computer/scan_consolenew - origin_tech = "programming=2;biotech=2" -/obj/item/weapon/circuitboard/computer/communications - name = "Communications (Computer Board)" - build_path = /obj/machinery/computer/communications - origin_tech = "programming=3;magnets=3" - var/lastTimeUsed = 0 - -/obj/item/weapon/circuitboard/computer/card - name = "ID Console (Computer Board)" - build_path = /obj/machinery/computer/card - origin_tech = "programming=3" -/obj/item/weapon/circuitboard/computer/card/centcom - name = "CentCom ID Console (Computer Board)" - build_path = /obj/machinery/computer/card/centcom - -/obj/item/weapon/circuitboard/computer/card/minor - name = "Department Management Console (Computer Board)" - build_path = /obj/machinery/computer/card/minor - var/target_dept = 1 - var/list/dept_list = list("General","Security","Medical","Science","Engineering") - -/obj/item/weapon/circuitboard/computer/card/minor/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/screwdriver)) - target_dept = (target_dept == dept_list.len) ? 1 : (target_dept + 1) - to_chat(user, "You set the board to \"[dept_list[target_dept]]\".") - else - return ..() - -/obj/item/weapon/circuitboard/computer/card/minor/examine(user) - ..() - to_chat(user, "Currently set to \"[dept_list[target_dept]]\".") - -//obj/item/weapon/circuitboard/computer/shield -// name = "Shield Control (Computer Board)" -// build_path = /obj/machinery/computer/stationshield -/obj/item/weapon/circuitboard/computer/teleporter - name = "Teleporter (Computer Board)" - build_path = /obj/machinery/computer/teleporter - origin_tech = "programming=3;bluespace=3;plasmatech=3" -/obj/item/weapon/circuitboard/computer/secure_data - name = "Security Records Console (Computer Board)" - build_path = /obj/machinery/computer/secure_data - origin_tech = "programming=2;combat=2" -/obj/item/weapon/circuitboard/computer/stationalert - name = "Station Alerts (Computer Board)" - build_path = /obj/machinery/computer/station_alert -/*/obj/item/weapon/circuitboard/computer/atmospheresiphonswitch - name = "Atmosphere siphon control (Computer Board)" - build_path = /obj/machinery/computer/atmosphere/siphonswitch*/ -/obj/item/weapon/circuitboard/computer/atmos_control - name = "Atmospheric Monitor (Computer Board)" - build_path = /obj/machinery/computer/atmos_control -/obj/item/weapon/circuitboard/computer/atmos_control/tank - name = "Tank Control (Computer Board)" - build_path = /obj/machinery/computer/atmos_control/tank - origin_tech = "programming=2;engineering=3;materials=2" -/obj/item/weapon/circuitboard/computer/atmos_alert - name = "Atmospheric Alert (Computer Board)" - build_path = /obj/machinery/computer/atmos_alert -/obj/item/weapon/circuitboard/computer/pod - name = "Massdriver control (Computer Board)" - build_path = /obj/machinery/computer/pod -/obj/item/weapon/circuitboard/computer/robotics - name = "Robotics Control (Computer Board)" - build_path = /obj/machinery/computer/robotics - origin_tech = "programming=3" -/obj/item/weapon/circuitboard/computer/cloning - name = "Cloning (Computer Board)" - build_path = /obj/machinery/computer/cloning - origin_tech = "programming=2;biotech=2" -/obj/item/weapon/circuitboard/computer/arcade/battle - name = "Arcade Battle (Computer Board)" - build_path = /obj/machinery/computer/arcade/battle - origin_tech = "programming=1" -/obj/item/weapon/circuitboard/computer/arcade/orion_trail - name = "Orion Trail (Computer Board)" - build_path = /obj/machinery/computer/arcade/orion_trail - origin_tech = "programming=1" -/obj/item/weapon/circuitboard/computer/turbine_control - name = "Turbine control (Computer Board)" - build_path = /obj/machinery/computer/turbine_computer -/obj/item/weapon/circuitboard/computer/solar_control - name = "Solar Control (Computer Board)" //name fixed 250810 - build_path = /obj/machinery/power/solar_control - origin_tech = "programming=2;powerstorage=2" -/obj/item/weapon/circuitboard/computer/powermonitor - name = "Power Monitor (Computer Board)" //name fixed 250810 - build_path = /obj/machinery/computer/monitor - origin_tech = "programming=2;powerstorage=2" -/obj/item/weapon/circuitboard/computer/olddoor - name = "DoorMex (Computer Board)" - build_path = /obj/machinery/computer/pod/old -/obj/item/weapon/circuitboard/computer/syndicatedoor - name = "ProComp Executive (Computer Board)" - build_path = /obj/machinery/computer/pod/old/syndicate -/obj/item/weapon/circuitboard/computer/swfdoor - name = "Magix (Computer Board)" - build_path = /obj/machinery/computer/pod/old/swf -/obj/item/weapon/circuitboard/computer/prisoner - name = "Prisoner Management Console (Computer Board)" - build_path = /obj/machinery/computer/prisoner -/obj/item/weapon/circuitboard/computer/gulag_teleporter_console - name = "Labor Camp teleporter console (Computer Board)" - build_path = /obj/machinery/computer/gulag_teleporter_computer - -/obj/item/weapon/circuitboard/computer/rdconsole - name = "R&D Console (Computer Board)" - build_path = /obj/machinery/computer/rdconsole/core - -/obj/item/weapon/circuitboard/computer/rdconsole/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/screwdriver)) - if(build_path == /obj/machinery/computer/rdconsole/core) - name = "R&D Console - Robotics (Computer Board)" - build_path = /obj/machinery/computer/rdconsole/robotics - to_chat(user, "Access protocols successfully updated.") - else - name = "R&D Console (Computer Board)" - build_path = /obj/machinery/computer/rdconsole/core - to_chat(user, "Defaulting access protocols.") - else - return ..() - -/obj/item/weapon/circuitboard/computer/mecha_control - name = "Exosuit Control Console (Computer Board)" - build_path = /obj/machinery/computer/mecha -/obj/item/weapon/circuitboard/computer/rdservercontrol - name = "R&D Server Control (Computer Board)" - build_path = /obj/machinery/computer/rdservercontrol -/obj/item/weapon/circuitboard/computer/crew - name = "Crew Monitoring Console (Computer Board)" - build_path = /obj/machinery/computer/crew - origin_tech = "programming=2;biotech=2" -/obj/item/weapon/circuitboard/computer/mech_bay_power_console - name = "Mech Bay Power Control Console (Computer Board)" - build_path = /obj/machinery/computer/mech_bay_power_console - origin_tech = "programming=3;powerstorage=3" - -/obj/item/weapon/circuitboard/computer/cargo - name = "Supply Console (Computer Board)" - build_path = /obj/machinery/computer/cargo - origin_tech = "programming=3" - var/contraband = FALSE - var/emagged = FALSE - -/obj/item/weapon/circuitboard/computer/cargo/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/device/multitool)) - if(!emagged) - contraband = !contraband - to_chat(user, "Receiver spectrum set to [contraband ? "Broad" : "Standard"].") - else - to_chat(user, "The spectrum chip is unresponsive.") - else if(istype(I, /obj/item/weapon/card/emag)) - if(!emagged) - contraband = TRUE - emagged = TRUE - to_chat(user, "You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.") - else - return ..() - - -/obj/item/weapon/circuitboard/computer/cargo/request - name = "Supply Request Console (Computer Board)" - build_path = /obj/machinery/computer/cargo/request -/obj/item/weapon/circuitboard/computer/stockexchange - name = "circuit board (Stock Exchange Console)" - build_path = /obj/machinery/computer/stockexchange - origin_tech = "programming=3" - -/obj/item/weapon/circuitboard/computer/operating - name = "Operating Computer (Computer Board)" - build_path = /obj/machinery/computer/operating - origin_tech = "programming=2;biotech=3" -/obj/item/weapon/circuitboard/computer/mining - name = "Outpost Status Display (Computer Board)" - build_path = /obj/machinery/computer/security/mining -/obj/item/weapon/circuitboard/computer/comm_monitor - name = "Telecommunications Monitor (Computer Board)" - build_path = /obj/machinery/computer/telecomms/monitor - origin_tech = "programming=3;magnets=3;bluespace=2" -/obj/item/weapon/circuitboard/computer/comm_server - name = "Telecommunications Server Monitor (Computer Board)" - build_path = /obj/machinery/computer/telecomms/server - origin_tech = "programming=3;magnets=3;bluespace=2" - -/obj/item/weapon/circuitboard/computer/shuttle - name = "Shuttle (Computer Board)" - build_path = /obj/machinery/computer/shuttle - var/shuttleId - var/possible_destinations = "" - -/obj/item/weapon/circuitboard/computer/shuttle/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/device/multitool)) - var/chosen_id = round(input(usr, "Choose an ID number (-1 for reset):", "Input an Integer", null) as num|null) - if(chosen_id >= 0) - shuttleId = chosen_id - else - shuttleId = initial(shuttleId) - else - return ..() - -/obj/item/weapon/circuitboard/computer/labor_shuttle - name = "Labor Shuttle (Computer Board)" - build_path = /obj/machinery/computer/shuttle/labor -/obj/item/weapon/circuitboard/computer/labor_shuttle/one_way - name = "Prisoner Shuttle Console (Computer Board)" - build_path = /obj/machinery/computer/shuttle/labor/one_way -/obj/item/weapon/circuitboard/computer/ferry - name = "Transport Ferry (Computer Board)" - build_path = /obj/machinery/computer/shuttle/ferry -/obj/item/weapon/circuitboard/computer/ferry/request - name = "Transport Ferry Console (Computer Board)" - build_path = /obj/machinery/computer/shuttle/ferry/request -/obj/item/weapon/circuitboard/computer/mining_shuttle - name = "Mining Shuttle (Computer Board)" - build_path = /obj/machinery/computer/shuttle/mining -/obj/item/weapon/circuitboard/computer/white_ship - name = "White Ship (Computer Board)" - build_path = /obj/machinery/computer/shuttle/white_ship -/obj/item/weapon/circuitboard/computer/auxillary_base - name = "Auxillary Base Management Console (Computer Board)" - build_path = /obj/machinery/computer/auxillary_base -/obj/item/weapon/circuitboard/computer/holodeck// Not going to let people get this, but it's just here for future - name = "Holodeck Control (Computer Board)" - build_path = /obj/machinery/computer/holodeck - origin_tech = "programming=4" -/obj/item/weapon/circuitboard/computer/aifixer - name = "AI Integrity Restorer (Computer Board)" - build_path = /obj/machinery/computer/aifixer - origin_tech = "programming=2;biotech=2" -/*/obj/item/weapon/circuitboard/computer/prison_shuttle - name = "Prison Shuttle (Computer Board)" - build_path = /obj/machinery/computer/prison_shuttle*/ -/obj/item/weapon/circuitboard/computer/slot_machine - name = "Slot Machine (Computer Board)" - build_path = /obj/machinery/computer/slot_machine - origin_tech = "programming=1" - -/obj/item/weapon/circuitboard/computer/libraryconsole - name = "Library Visitor Console (Computer Board)" - build_path = /obj/machinery/computer/libraryconsole - origin_tech = "programming=1" - -/obj/item/weapon/circuitboard/computer/libraryconsole/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/screwdriver)) - if(build_path == /obj/machinery/computer/libraryconsole/bookmanagement) - name = "Library Visitor Console (Computer Board)" - build_path = /obj/machinery/computer/libraryconsole - to_chat(user, "Defaulting access protocols.") - else - name = "Book Inventory Management Console (Computer Board)" - build_path = /obj/machinery/computer/libraryconsole/bookmanagement - to_chat(user, "Access protocols successfully updated.") - else - return ..() - -/obj/item/weapon/circuitboard/computer/apc_control - name = "\improper Power Flow Control Console (Computer Board)" - build_path = /obj/machinery/computer/apc_control - origin_tech = "programming=3;engineering=3;powerstorage=2" + ..() \ No newline at end of file diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 7330f2d072..480d446830 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -571,8 +571,8 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) icon_screen = "idminor" circuit = /obj/item/weapon/circuitboard/computer/card/minor -/obj/machinery/computer/card/minor/New() - ..() +/obj/machinery/computer/card/minor/Initialize() + . = ..() var/obj/item/weapon/circuitboard/computer/card/minor/typed_circuit = circuit if(target_dept) typed_circuit.target_dept = target_dept diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index a4caa68480..6b76b3c98e 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -20,7 +20,7 @@ light_color = LIGHT_COLOR_BLUE /obj/machinery/computer/cloning/Initialize() - ..() + . = ..() updatemodules(TRUE) /obj/machinery/computer/cloning/Destroy() diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 75a73a5067..eef44384d2 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -41,9 +41,9 @@ return FALSE return TRUE -/obj/machinery/computer/communications/New() +/obj/machinery/computer/communications/Initialize() + . = ..() GLOB.shuttle_caller_list += src - ..() /obj/machinery/computer/communications/process() if(..()) diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index 27c0f50e7b..de18b51543 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -53,17 +53,13 @@ else return ..() -/obj/machinery/computer/scan_consolenew/New() - ..() - - spawn(5) - for(dir in list(NORTH,EAST,SOUTH,WEST)) - connected = locate(/obj/machinery/dna_scannernew, get_step(src, dir)) - if(!isnull(connected)) - break - injectorready = world.time + INJECTOR_TIMEOUT - return - return +/obj/machinery/computer/scan_consolenew/Initialize() + . = ..() + for(dir in list(NORTH,EAST,SOUTH,WEST)) + connected = locate(/obj/machinery/dna_scannernew, get_step(src, dir)) + if(!isnull(connected)) + break + injectorready = world.time + INJECTOR_TIMEOUT /obj/machinery/computer/scan_consolenew/attack_hand(mob/user) if(..()) diff --git a/code/game/machinery/computer/gulag_teleporter.dm b/code/game/machinery/computer/gulag_teleporter.dm index 07bfb4b6dd..4b7fccc221 100644 --- a/code/game/machinery/computer/gulag_teleporter.dm +++ b/code/game/machinery/computer/gulag_teleporter.dm @@ -15,9 +15,9 @@ light_color = LIGHT_COLOR_RED -/obj/machinery/computer/gulag_teleporter_computer/New() - ..() - addtimer(CALLBACK(src, .proc/scan_machinery), 5) +/obj/machinery/computer/gulag_teleporter_computer/Initialize() + . = ..() + scan_machinery() /obj/machinery/computer/gulag_teleporter_computer/Destroy() if(id) diff --git a/code/game/machinery/computer/monastery_shuttle.dm b/code/game/machinery/computer/monastery_shuttle.dm index e64d784a1f..ac2e9c9e78 100644 --- a/code/game/machinery/computer/monastery_shuttle.dm +++ b/code/game/machinery/computer/monastery_shuttle.dm @@ -5,7 +5,3 @@ shuttleId = "pod1" possible_destinations = "monastery_shuttle_asteroid;monastery_shuttle_station" no_destination_swap = TRUE - -/obj/item/weapon/circuitboard/computer/shuttle/monastery_shuttle - name = "Monastery Shuttle (Computer Board)" - build_path = /obj/machinery/computer/shuttle/monastery_shuttle diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm new file mode 100644 index 0000000000..f184d78a1b --- /dev/null +++ b/code/game/machinery/computer/teleporter.dm @@ -0,0 +1,212 @@ +/obj/machinery/computer/teleporter + name = "teleporter control console" + desc = "Used to control a linked teleportation Hub and Station." + icon_screen = "teleport" + icon_keyboard = "teleport_key" + light_color = LIGHT_COLOR_BLUE + circuit = /obj/item/weapon/circuitboard/computer/teleporter + var/obj/item/device/gps/locked + var/regime_set = "Teleporter" + var/id + var/obj/machinery/teleport/station/power_station + var/calibrating + var/turf/target //Used for one-time-use teleport cards (such as clown planet coordinates.) + //Setting this to 1 will set src.locked to null after a player enters the portal and will not allow hand-teles to open portals to that location. + +/obj/machinery/computer/teleporter/Initialize() + . = ..() + id = "[rand(1000, 9999)]" + link_power_station() + +/obj/machinery/computer/teleporter/Destroy() + if (power_station) + power_station.teleporter_console = null + power_station = null + return ..() + +/obj/machinery/computer/teleporter/proc/link_power_station() + if(power_station) + return + for(dir in GLOB.cardinals) + power_station = locate(/obj/machinery/teleport/station, get_step(src, dir)) + if(power_station) + break + return power_station + +/obj/machinery/computer/teleporter/attackby(obj/I, mob/living/user, params) + if(istype(I, /obj/item/device/gps)) + var/obj/item/device/gps/L = I + if(L.locked_location && !(stat & (NOPOWER|BROKEN))) + if(!user.transferItemToLoc(L, src)) + to_chat(user, "\the [I] is stuck to your hand, you cannot put it in \the [src]!") + return + locked = L + to_chat(user, "You insert the GPS device into the [name]'s slot.") + else + return ..() + +/obj/machinery/computer/teleporter/attack_ai(mob/user) + return attack_hand(user) + +/obj/machinery/computer/teleporter/attack_hand(mob/user) + if(..()) + return + interact(user) + +/obj/machinery/computer/teleporter/interact(mob/user) + var/data = "

Teleporter Status

" + if(!power_station) + data += "
No power station linked.
" + else if(!power_station.teleporter_hub) + data += "
No hub linked.
" + else + data += "
Current regime: [regime_set]
" + data += "Current target: [(!target) ? "None" : "[get_area(target)] [(regime_set != "Gate") ? "" : "Teleporter"]"]
" + if(calibrating) + data += "Calibration: In Progress" + else if(power_station.teleporter_hub.calibrated || power_station.teleporter_hub.accurate >= 3) + data += "Calibration: Optimal" + else + data += "Calibration: Sub-Optimal" + data += "

" + + data += "Change regime
" + data += "Set target
" + if(locked) + data += "
Get target from memory
" + data += "Eject GPS device
" + else + data += "
Get target from memory
" + data += "Eject GPS device
" + + data += "
Calibrate Hub" + + var/datum/browser/popup = new(user, "teleporter", name, 400, 400) + popup.set_content(data) + popup.open() + +/obj/machinery/computer/teleporter/Topic(href, href_list) + if(..()) + return + + if(href_list["eject"]) + eject() + updateDialog() + return + + if(!check_hub_connection()) + say("Error: Unable to detect hub.") + return + if(calibrating) + say("Error: Calibration in progress. Stand by.") + return + + if(href_list["regimeset"]) + power_station.engaged = 0 + power_station.teleporter_hub.update_icon() + power_station.teleporter_hub.calibrated = 0 + reset_regime() + if(href_list["settarget"]) + power_station.engaged = 0 + power_station.teleporter_hub.update_icon() + power_station.teleporter_hub.calibrated = 0 + set_target(usr) + if(href_list["locked"]) + power_station.engaged = 0 + power_station.teleporter_hub.update_icon() + power_station.teleporter_hub.calibrated = 0 + target = get_turf(locked.locked_location) + if(href_list["calibrate"]) + if(!target) + say("Error: No target set to calibrate to.") + return + if(power_station.teleporter_hub.calibrated || power_station.teleporter_hub.accurate >= 3) + say("Hub is already calibrated!") + return + say("Processing hub calibration to target...") + + calibrating = 1 + spawn(50 * (3 - power_station.teleporter_hub.accurate)) //Better parts mean faster calibration + calibrating = 0 + if(check_hub_connection()) + power_station.teleporter_hub.calibrated = 1 + say("Calibration complete.") + else + say("Error: Unable to detect hub.") + updateDialog() + + updateDialog() + +/obj/machinery/computer/teleporter/proc/check_hub_connection() + if(!power_station) + return FALSE + if(!power_station.teleporter_hub) + return FALSE + return TRUE + +/obj/machinery/computer/teleporter/proc/reset_regime() + target = null + if(regime_set == "Teleporter") + regime_set = "Gate" + else + regime_set = "Teleporter" + +/obj/machinery/computer/teleporter/proc/eject() + if(locked) + locked.forceMove(get_turf(src)) + locked = null + +/obj/machinery/computer/teleporter/proc/set_target(mob/user) + var/list/L = list() + var/list/areaindex = list() + if(regime_set == "Teleporter") + for(var/obj/item/device/radio/beacon/R in GLOB.teleportbeacons) + var/turf/T = get_turf(R) + if(!T) + continue + if(T.z == ZLEVEL_CENTCOM || T.z > ZLEVEL_SPACEMAX) + continue + L[avoid_assoc_duplicate_keys(T.loc.name, areaindex)] = R + + for(var/obj/item/weapon/implant/tracking/I in GLOB.tracked_implants) + if(!I.imp_in || !ismob(I.loc)) + continue + else + var/mob/M = I.loc + if(M.stat == DEAD) + if(M.timeofdeath + 6000 < world.time) + continue + var/turf/T = get_turf(M) + if(!T) + continue + if(T.z == ZLEVEL_CENTCOM) + continue + L[avoid_assoc_duplicate_keys(M.real_name, areaindex)] = I + + var/desc = input("Please select a location to lock in.", "Locking Computer") as null|anything in L + target = L[desc] + + else + var/list/S = power_station.linked_stations + if(!S.len) + to_chat(user, "No connected stations located.") + return + for(var/obj/machinery/teleport/station/R in S) + var/turf/T = get_turf(R) + if(!T || !R.teleporter_hub || !R.teleporter_console) + continue + if(T.z == ZLEVEL_CENTCOM || T.z > ZLEVEL_SPACEMAX) + continue + L[avoid_assoc_duplicate_keys(T.loc.name, areaindex)] = R + var/desc = input("Please select a station to lock in.", "Locking Computer") as null|anything in L + target = L[desc] + if(target) + var/obj/machinery/teleport/station/trg = target + trg.linked_stations |= power_station + trg.stat &= ~NOPOWER + if(trg.teleporter_hub) + trg.teleporter_hub.stat &= ~NOPOWER + trg.teleporter_hub.update_icon() + if(trg.teleporter_console) + trg.teleporter_console.stat &= ~NOPOWER + trg.teleporter_console.update_icon() \ No newline at end of file diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 199e925f2d..1ff66314f2 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -259,52 +259,4 @@ for(var/X in components) var/obj/item/I = X I.forceMove(loc) - ..() - - - -//Machine Frame Circuit Boards -/*Common Parts: Parts List: Ignitor, Timer, Infra-red laser, Infra-red sensor, t_scanner, Capacitor, Valve, sensor unit, -micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells. -*/ - -/obj/item/weapon/circuitboard/machine - var/list/req_components = null - // Components required by the machine. - // Example: list(/obj/item/weapon/stock_parts/matter_bin = 5) - var/list/def_components = null - // Default replacements for req_components, to be used in apply_default_parts instead of req_components types - // Example: list(/obj/item/weapon/stock_parts/matter_bin = /obj/item/weapon/stock_parts/matter_bin/super) - -/obj/item/weapon/circuitboard/machine/proc/apply_default_parts(obj/machinery/M) - if(!req_components) - return - - M.component_parts = list(src) // List of components always contains a board - loc = null - - for(var/comp_path in req_components) - var/comp_amt = req_components[comp_path] - if(!comp_amt) - continue - - if(def_components && def_components[comp_path]) - comp_path = def_components[comp_path] - - if(ispath(comp_path, /obj/item/stack)) - M.component_parts += new comp_path(null, comp_amt) - else - for(var/i in 1 to comp_amt) - M.component_parts += new comp_path(null) - - M.RefreshParts() - - -/obj/item/weapon/circuitboard/machine/abductor - name = "alien board (Report This)" - icon_state = "abductor_mod" - origin_tech = "programming=5;abductor=3" - -/obj/item/weapon/circuitboard/machine/clockwork - name = "clockwork board (Report This)" - icon_state = "clock_mod" + ..() \ No newline at end of file diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index 5100ece31f..2891d47d91 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -50,7 +50,7 @@ songs += T /obj/machinery/disco/Initialize() - ..() + . = ..() selection = songs[1] diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index 20bb81e0b8..80f73b3027 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -4,32 +4,17 @@ icon = 'icons/obj/Cryogenic2.dmi' icon_state = "scanner" density = TRUE - var/locked = FALSE anchored = TRUE use_power = IDLE_POWER_USE idle_power_usage = 50 active_power_usage = 300 occupant_typecache = list(/mob/living, /obj/item/bodypart/head, /obj/item/organ/brain) + circuit = /obj/item/weapon/circuitboard/machine/clonescanner + var/locked = FALSE var/damage_coeff var/scan_level var/precision_coeff -/obj/machinery/dna_scannernew/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/clonescanner(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/clonescanner - name = "Cloning Scanner (Machine Board)" - build_path = /obj/machinery/dna_scannernew - origin_tech = "programming=2;biotech=2" - req_components = list( - /obj/item/weapon/stock_parts/scanning_module = 1, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/stack/sheet/glass = 1, - /obj/item/stack/cable_coil = 2) - /obj/machinery/dna_scannernew/RefreshParts() scan_level = 0 damage_coeff = 0 diff --git a/code/game/machinery/doors/alarmlock.dm b/code/game/machinery/doors/alarmlock.dm index 4a92c935b4..3733c71844 100644 --- a/code/game/machinery/doors/alarmlock.dm +++ b/code/game/machinery/doors/alarmlock.dm @@ -21,7 +21,7 @@ return ..() /obj/machinery/door/airlock/alarmlock/Initialize() - ..() + . = ..() SSradio.remove_object(src, air_frequency) air_connection = SSradio.add_object(src, air_frequency, GLOB.RADIO_TO_AIRALARM) open() diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 4e39255109..4c0d4a1804 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -45,7 +45,7 @@ Radio.listening = 0 /obj/machinery/door_timer/Initialize() - ..() + . = ..() if(id != null) for(var/obj/machinery/door/window/brigdoor/M in urange(20, src)) if (M.id == id) diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index d87f326c58..f610531be1 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -26,7 +26,7 @@ var/list/affecting_areas /obj/machinery/door/firedoor/Initialize() - ..() + . = ..() CalculateAffectingAreas() /obj/machinery/door/firedoor/examine(mob/user) diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index 3dbf7888de..5adc8d1da3 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -11,8 +11,8 @@ GLOBAL_LIST_EMPTY(doppler_arrays) var/max_dist = 100 verb_say = "states coldly" -/obj/machinery/doppler_array/New() - ..() +/obj/machinery/doppler_array/Initialize() + . = ..() GLOB.doppler_arrays += src /obj/machinery/doppler_array/Destroy() diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm index c01cea0de3..4336571f56 100644 --- a/code/game/machinery/droneDispenser.dm +++ b/code/game/machinery/droneDispenser.dm @@ -24,6 +24,7 @@ var/datum/material_container/materials var/list/using_materials + var/starting_amount = 0 var/metal_cost = 1000 var/glass_cost = 1000 var/power_used = 1000 @@ -52,34 +53,27 @@ var/break_message = "lets out a tinny alarm before falling dark." var/break_sound = 'sound/machines/warning-buzzer.ogg' -/obj/machinery/droneDispenser/New() - ..() - obj_integrity = max_integrity - materials = new(src, list(MAT_METAL, MAT_GLASS), - MINERAL_MATERIAL_AMOUNT*MAX_STACK_SIZE*2) - +/obj/machinery/droneDispenser/Initialize() + . = ..() + materials = new(src, list(MAT_METAL, MAT_GLASS), MINERAL_MATERIAL_AMOUNT*MAX_STACK_SIZE*2) + materials.insert_amount(starting_amount) using_materials = list(MAT_METAL=metal_cost, MAT_GLASS=glass_cost) /obj/machinery/droneDispenser/Destroy() - qdel(materials) - . = ..() + QDEL_NULL(materials) + return ..() -/obj/machinery/droneDispenser/preloaded/New() - ..() - materials.insert_amount(5000) +/obj/machinery/droneDispenser/preloaded + starting_amount = 5000 /obj/machinery/droneDispenser/syndrone //Please forgive me name = "syndrone shell dispenser" - desc = "A suspicious machine that will create Syndicate \ - exterminator drones when supplied with metal and glass. Disgusting." + desc = "A suspicious machine that will create Syndicate exterminator drones when supplied with metal and glass. Disgusting." dispense_type = /obj/item/drone_shell/syndrone //If we're gonna be a jackass, go the full mile - 10 second recharge timer cooldownTime = 100 end_create_message = "dispenses a suspicious drone shell." - -/obj/machinery/droneDispenser/syndrone/New() - ..() - materials.insert_amount(25000) + starting_amount = 25000 /obj/machinery/droneDispenser/syndrone/badass //Please forgive me name = "badass syndrone shell dispenser" @@ -101,10 +95,7 @@ metal_cost = 2000 glass_cost = 2000 power_used = 2000 - -/obj/machinery/droneDispenser/snowflake/preloaded/New() - ..() - materials.insert_amount(10000) + starting_amount = 10000 // An example of a custom drone dispenser. // This one requires no materials and creates basic hivebots diff --git a/code/game/machinery/embedded_controller/airlock_controller.dm b/code/game/machinery/embedded_controller/airlock_controller.dm index fb50bc8314..be027a89c8 100644 --- a/code/game/machinery/embedded_controller/airlock_controller.dm +++ b/code/game/machinery/embedded_controller/airlock_controller.dm @@ -220,7 +220,7 @@ var/sanitize_external /obj/machinery/embedded_controller/radio/airlock_controller/Initialize(mapload) - ..() + . = ..() if(!mapload) return diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index 3c6f0ad13a..ee0b8f287c 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -77,7 +77,7 @@ return ..() /obj/machinery/embedded_controller/radio/Initialize() - ..() + . = ..() set_frequency(frequency) /obj/machinery/embedded_controller/radio/post_signal(datum/signal/signal) diff --git a/code/game/machinery/embedded_controller/simple_vent_controller.dm b/code/game/machinery/embedded_controller/simple_vent_controller.dm index 5959939673..063e81354c 100644 --- a/code/game/machinery/embedded_controller/simple_vent_controller.dm +++ b/code/game/machinery/embedded_controller/simple_vent_controller.dm @@ -52,8 +52,7 @@ var/airpump_tag /obj/machinery/embedded_controller/radio/simple_vent_controller/Initialize(mapload) - ..() - + . = ..() if(!mapload) return var/datum/computer/file/embedded_program/simple_vent_controller/new_prog = new diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index beaa0919ef..8a0b86d034 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -5,15 +5,15 @@ desc = "A wall-mounted flashbulb device." icon = 'icons/obj/stationobjs.dmi' icon_state = "mflash1" - var/obj/item/device/assembly/flash/handheld/bulb = null + max_integrity = 250 + integrity_failure = 100 + anchored = TRUE + var/obj/item/device/assembly/flash/handheld/bulb var/id = null var/range = 2 //this is roughly the size of brig cell var/last_flash = 0 //Don't want it getting spammed like regular flashes var/strength = 100 //How knocked down targets are when flashed. var/base_state = "mflash" - max_integrity = 250 - integrity_failure = 100 - anchored = TRUE /obj/machinery/flasher/portable //Portable version of the flasher. Only flashes when anchored name = "portable flasher" @@ -24,19 +24,17 @@ base_state = "pflash" density = TRUE -/obj/machinery/flasher/New(loc, ndir = 0, built = 0) - ..() // ..() is EXTREMELY IMPORTANT, never forget to add it +/obj/machinery/flasher/Initialize(mapload, ndir = 0, built = 0) + . = ..() // ..() is EXTREMELY IMPORTANT, never forget to add it if(built) setDir(ndir) pixel_x = (dir & 3)? 0 : (dir == 4 ? -28 : 28) pixel_y = (dir & 3)? (dir ==1 ? -28 : 28) : 0 else - bulb = new /obj/item/device/assembly/flash/handheld(src) + bulb = new(src) /obj/machinery/flasher/Destroy() - if(bulb) - qdel(bulb) - bulb = null + QDEL_NULL(bulb) return ..() /obj/machinery/flasher/power_change() diff --git a/code/game/machinery/gulag_teleporter.dm b/code/game/machinery/gulag_teleporter.dm index 81ffc18836..6970db7c12 100644 --- a/code/game/machinery/gulag_teleporter.dm +++ b/code/game/machinery/gulag_teleporter.dm @@ -17,25 +17,23 @@ The console is located at computer/gulag_teleporter.dm use_power = IDLE_POWER_USE idle_power_usage = 200 active_power_usage = 5000 + circuit = /obj/item/weapon/circuitboard/machine/gulag_teleporter var/locked = FALSE var/jumpsuit_type = /obj/item/clothing/under/rank/prisoner var/shoes_type = /obj/item/clothing/shoes/sneakers/orange - var/obj/machinery/gulag_item_reclaimer/linked_reclaimer = null - var/list/required_items + var/obj/machinery/gulag_item_reclaimer/linked_reclaimer + var/static/list/telegulag_required_items = typecacheof(list( + /obj/item/weapon/implant, + /obj/item/clothing/suit/space/eva/plasmaman, + /obj/item/clothing/under/plasmaman, + /obj/item/clothing/head/helmet/space/plasmaman, + /obj/item/weapon/tank/internals, + /obj/item/clothing/mask/breath, + /obj/item/clothing/mask/gas)) -/obj/machinery/gulag_teleporter/New() - ..() - required_items = typecacheof(list( - /obj/item/weapon/implant, - /obj/item/clothing/suit/space/eva/plasmaman, - /obj/item/clothing/under/plasmaman, - /obj/item/clothing/head/helmet/space/plasmaman, - /obj/item/weapon/tank/internals, - /obj/item/clothing/mask/breath, - /obj/item/clothing/mask/gas)) - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/gulag_teleporter(null) - B.apply_default_parts(src) - addtimer(CALLBACK(src, .proc/locate_reclaimer), 5) +/obj/machinery/gulag_teleporter/Initialize() + . = ..() + locate_reclaimer() /obj/machinery/gulag_teleporter/Destroy() if(linked_reclaimer) @@ -46,7 +44,6 @@ The console is located at computer/gulag_teleporter.dm ..() update_icon() - /obj/machinery/gulag_teleporter/interact(mob/user) if(locked) to_chat(user, "[src] is locked.") @@ -138,7 +135,7 @@ The console is located at computer/gulag_teleporter.dm linked_reclaimer.stored_items[occupant] = list() var/mob/living/mob_occupant = occupant for(var/obj/item/W in mob_occupant) - if(!is_type_in_typecache(W, required_items) && mob_occupant.temporarilyRemoveItemFromInventory(W)) + if(!is_type_in_typecache(W, telegulag_required_items) && mob_occupant.temporarilyRemoveItemFromInventory(W)) if(istype(W, /obj/item/weapon/restraints/handcuffs)) W.forceMove(get_turf(src)) continue diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index e8606238d4..4a0cf3a23a 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -40,6 +40,7 @@ Possible to do for anyone motivated enough: active_power_usage = 100 max_integrity = 300 armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 0) + circuit = /obj/item/weapon/circuitboard/machine/holopad var/list/masters = list()//List of living mobs that use the holopad var/last_request = 0 //to prevent request spam. ~Carn var/holo_range = 5 // Change to change how far the AI can move away from the holopad before deactivating. @@ -51,8 +52,6 @@ Possible to do for anyone motivated enough: /obj/machinery/holopad/Initialize() . = ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/holopad(null) - B.apply_default_parts(src) holopads += src /obj/machinery/holopad/Destroy() @@ -293,7 +292,7 @@ Possible to do for anyone motivated enough: Hologram.Impersonation = user Hologram.copy_known_languages_from(user,replace = TRUE) - Hologram.mouse_opacity = 0//So you can't click on it. + Hologram.mouse_opacity = MOUSE_OPACITY_TRANSPARENT//So you can't click on it. Hologram.layer = FLY_LAYER//Above all the other objects/mobs. Or the vast majority of them. Hologram.anchored = TRUE//So space wind cannot drag it. Hologram.name = "[user.name] (Hologram)"//If someone decides to right click. @@ -384,11 +383,5 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ return Impersonation.examine(user) return ..() -/obj/item/weapon/circuitboard/machine/holopad - name = "AI Holopad (Machine Board)" - build_path = /obj/machinery/holopad - origin_tech = "programming=1" - req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) - #undef HOLOPAD_PASSIVE_POWER_USAGE #undef HOLOGRAM_POWER_USAGE diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index 0210659eb9..0e450533fa 100644 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -36,8 +36,8 @@ location.hotspot_expose(1000,500,1) return 1 -/obj/machinery/igniter/New() - ..() +/obj/machinery/igniter/Initialize() + . = ..() icon_state = "igniter[on]" /obj/machinery/igniter/power_change() @@ -61,15 +61,14 @@ anchored = TRUE resistance_flags = FIRE_PROOF -/obj/machinery/sparker/New() - ..() +/obj/machinery/sparker/Initialize() + . = ..() spark_system = new /datum/effect_system/spark_spread spark_system.set_up(2, 1, src) spark_system.attach(src) /obj/machinery/sparker/Destroy() - qdel(spark_system) - spark_system = null + QDEL_NULL(spark_system) return ..() /obj/machinery/sparker/power_change() diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index bca6c51559..45b891ce30 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -15,7 +15,7 @@ /obj/item/weapon/reagent_containers/glass) /obj/machinery/iv_drip/Initialize() - ..() + . = ..() update_icon() drip_containers = typecacheof(drip_containers) diff --git a/code/game/machinery/iv_drip.dm.rej b/code/game/machinery/iv_drip.dm.rej new file mode 100644 index 0000000000..4c8aa8206c --- /dev/null +++ b/code/game/machinery/iv_drip.dm.rej @@ -0,0 +1,10 @@ +diff a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm (rejected hunks) +@@ -15,7 +15,7 @@ + /obj/item/weapon/reagent_containers/glass) + + /obj/machinery/iv_drip/Initialize() +- ..() ++ . = ..() + update_icon() + drip_containers = typecacheof(drip_containers) + diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm index 931ec8a984..1155dfa577 100644 --- a/code/game/machinery/launch_pad.dm +++ b/code/game/machinery/launch_pad.dm @@ -8,6 +8,7 @@ use_power = TRUE idle_power_usage = 200 active_power_usage = 2500 + circuit = /obj/item/weapon/circuitboard/machine/launchpad var/stationary = TRUE //to prevent briefcase pad deconstruction and such var/display_name = "Launchpad" var/teleport_speed = 35 @@ -17,20 +18,6 @@ var/x_offset = 0 var/y_offset = 0 -/obj/machinery/launchpad/Initialize() - . = ..() - var/obj/item/weapon/circuitboard/machine/launchpad/B = new - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/launchpad - name = "Bluespace Launchpad (Machine Board)" - build_path = /obj/machinery/launchpad - origin_tech = "programming=3;engineering=3;plasmatech=2;bluespace=3" - req_components = list( - /obj/item/weapon/ore/bluespace_crystal = 1, - /obj/item/weapon/stock_parts/manipulator = 1) - def_components = list(/obj/item/weapon/ore/bluespace_crystal = /obj/item/weapon/ore/bluespace_crystal/artificial) - /obj/machinery/launchpad/RefreshParts() var/E = -1 //to make default parts have the base value for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) @@ -171,9 +158,7 @@ qdel(src) /obj/machinery/launchpad/briefcase/Destroy() - if(!QDELETED(briefcase)) - qdel(briefcase) - briefcase = null + QDEL_NULL(briefcase) return ..() /obj/machinery/launchpad/briefcase/isAvailable() diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index a09adf6155..a979ba6398 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -12,7 +12,7 @@ // luminosity = 1 /obj/machinery/light_switch/Initialize() - ..() + . = ..() area = get_area(src) if(otherarea) diff --git a/code/game/machinery/limbgrower.dm b/code/game/machinery/limbgrower.dm index 60fd945a12..ec0c6eb4d7 100644 --- a/code/game/machinery/limbgrower.dm +++ b/code/game/machinery/limbgrower.dm @@ -11,21 +11,20 @@ icon_state = "limbgrower_idleoff" density = TRUE container_type = OPENCONTAINER - - var/operating = FALSE anchored = TRUE use_power = IDLE_POWER_USE - var/disabled = 0 idle_power_usage = 10 active_power_usage = 100 + circuit = /obj/item/weapon/circuitboard/machine/limbgrower + + var/operating = FALSE + var/disabled = FALSE var/busy = FALSE var/prod_coeff = 1 - var/datum/design/being_built var/datum/research/files var/selected_category var/screen = 1 - var/list/categories = list( "human", "lizard", @@ -33,22 +32,11 @@ "special" ) -/obj/machinery/limbgrower/New() - ..() +/obj/machinery/limbgrower/Initialize() + . = ..() create_reagents(0) - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/limbgrower(null) - B.apply_default_parts(src) files = new /datum/research/limbgrower(src) -/obj/item/weapon/circuitboard/machine/limbgrower - name = "Limb Grower (Machine Board)" - build_path = /obj/machinery/limbgrower - origin_tech = "programming=2;biotech=2" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/reagent_containers/glass/beaker = 2, - /obj/item/weapon/stock_parts/console_screen = 1) - /obj/machinery/limbgrower/interact(mob/user) if(!is_operational()) return diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index f7c9725f36..d0d40e7233 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -5,7 +5,6 @@ // This was created for firing ranges, but I suppose this could have other applications - Doohl /obj/machinery/magnetic_module - icon = 'icons/obj/objects.dmi' icon_state = "floor_magnet-f" name = "electromagnetic generator" @@ -29,22 +28,21 @@ var/center_y = 0 var/max_dist = 20 // absolute value of center_x,y cannot exceed this integer -/obj/machinery/magnetic_module/New() +/obj/machinery/magnetic_module/Initialize() ..() var/turf/T = loc hide(T.intact) center = T + SSradio.add_object(src, freq, GLOB.RADIO_MAGNETS) + return INITIALIZE_HINT_LATELOAD - spawn(10) // must wait for map loading to finish - SSradio.add_object(src, freq, GLOB.RADIO_MAGNETS) - - spawn() - magnetic_process() +/obj/machinery/magnetic_module/LateInitialize() + magnetic_process() /obj/machinery/magnetic_module/Destroy() SSradio.remove_object(src, freq) - . = ..() center = null + return ..() // update the invisibility and icon /obj/machinery/magnetic_module/hide(intact) @@ -216,27 +214,22 @@ var/datum/radio_frequency/radio_connection -/obj/machinery/magnetic_controller/New() +/obj/machinery/magnetic_controller/Initialize() ..() - if(autolink) for(var/obj/machinery/magnetic_module/M in GLOB.machines) if(M.freq == frequency && M.code == code) magnets.Add(M) - - spawn(45) // must wait for map loading to finish - radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_MAGNETS) - - if(path) // check for default path filter_path() // renders rpath + radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_MAGNETS) /obj/machinery/magnetic_controller/Destroy() SSradio.remove_object(src, frequency) magnets = null rpath = null - . = ..() + return ..() /obj/machinery/magnetic_controller/process() if(magnets.len == 0 && autolink) diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index a10c4976aa..2b5a1f08b0 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -22,8 +22,8 @@ req_access = list(ACCESS_ENGINE, ACCESS_ROBOTICS) -/obj/machinery/navbeacon/New() - ..() +/obj/machinery/navbeacon/Initialize() + . = ..() set_codes() diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index ec0aaf2bcd..9883236d64 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -197,16 +197,15 @@ GLOBAL_LIST_EMPTY(allCasters) name = "security newscaster" securityCaster = 1 -/obj/machinery/newscaster/New(loc, ndir, building) - ..() +/obj/machinery/newscaster/Initialize(mapload, ndir, building) + . = ..() if(building) setDir(ndir) pixel_x = (dir & 3)? 0 : (dir == 4 ? -32 : 32) pixel_y = (dir & 3)? (dir ==1 ? -32 : 32) : 0 GLOB.allCasters += src - for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters) - unit_no++ + unit_no = GLOB.allCasters.len update_icon() /obj/machinery/newscaster/Destroy() diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index f31bde299c..2e090e7c4f 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -72,8 +72,8 @@ var/obj/machinery/turretid/cp = null -/obj/machinery/porta_turret/New(loc) - ..() +/obj/machinery/porta_turret/Initialize() + . = ..() if(!base) base = src update_icon() @@ -143,18 +143,13 @@ /obj/machinery/porta_turret/Destroy() //deletes its own cover with it - if(cover) - qdel(cover) - cover = null + QDEL_NULL(cover) base = null if(cp) cp.turrets -= src cp = null - if(stored_gun) - qdel(stored_gun) - stored_gun = null - qdel(spark_system) - spark_system = null + QDEL_NULL(stored_gun) + QDEL_NULL(spark_system) return ..() @@ -602,8 +597,8 @@ /obj/machinery/porta_turret/aux_base/interact(mob/user) //Controlled solely from the base console. return -/obj/machinery/porta_turret/aux_base/New() - ..() +/obj/machinery/porta_turret/aux_base/Initialize() + . = ..() cover.name = name cover.desc = desc @@ -650,8 +645,8 @@ var/list/obj/machinery/porta_turret/turrets = list() resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF -/obj/machinery/turretid/New(loc, ndir = 0, built = 0) - ..() +/obj/machinery/turretid/Initialize(mapload, ndir = 0, built = 0) + . = ..() if(built) setDir(ndir) locked = FALSE @@ -664,7 +659,7 @@ return ..() /obj/machinery/turretid/Initialize(mapload) //map-placed turrets autolink turrets - ..() + . = ..() if(!mapload) return if(control_area && istext(control_area)) @@ -682,7 +677,8 @@ T.cp = src /obj/machinery/turretid/attackby(obj/item/I, mob/user, params) - if(stat & BROKEN) return + if(stat & BROKEN) + return if (istype(I, /obj/item/device/multitool)) var/obj/item/device/multitool/M = I diff --git a/code/game/machinery/porta_turret/portable_turret.dm.rej b/code/game/machinery/porta_turret/portable_turret.dm.rej new file mode 100644 index 0000000000..0f16ca5ef3 --- /dev/null +++ b/code/game/machinery/porta_turret/portable_turret.dm.rej @@ -0,0 +1,10 @@ +diff a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm (rejected hunks) +@@ -664,7 +659,7 @@ + return ..() + + /obj/machinery/turretid/Initialize(mapload) //map-placed turrets autolink turrets +- ..() ++ . = ..() + if(!mapload) + return + diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm index b05ecdea70..f0d793732b 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -8,28 +8,13 @@ idle_power_usage = 200 active_power_usage = 5000 unique_rename = 1 + circuit = /obj/item/weapon/circuitboard/machine/quantumpad var/teleport_cooldown = 400 //30 seconds base due to base parts var/teleport_speed = 50 var/last_teleport //to handle the cooldown var/teleporting = 0 //if it's in the process of teleporting var/power_efficiency = 1 - var/obj/machinery/quantumpad/linked_pad = null - -/obj/machinery/quantumpad/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/quantumpad(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/quantumpad - name = "Quantum Pad (Machine Board)" - build_path = /obj/machinery/quantumpad - origin_tech = "programming=3;engineering=3;plasmatech=3;bluespace=4" - req_components = list( - /obj/item/weapon/ore/bluespace_crystal = 1, - /obj/item/weapon/stock_parts/capacitor = 1, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/stack/cable_coil = 1) - def_components = list(/obj/item/weapon/ore/bluespace_crystal = /obj/item/weapon/ore/bluespace_crystal/artificial) + var/obj/machinery/quantumpad/linked_pad /obj/machinery/quantumpad/RefreshParts() var/E = 0 diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 437fb3eb27..72b03bc7b5 100755 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -7,20 +7,14 @@ use_power = IDLE_POWER_USE idle_power_usage = 4 active_power_usage = 250 + circuit = /obj/item/weapon/circuitboard/machine/recharger var/obj/item/charging = null - var/static/list/allowed_devices = typecacheof(list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/ammo_box/magazine/recharge, /obj/item/device/modular_computer)) var/recharge_coeff = 1 - -/obj/machinery/recharger/Initialize() - . = ..() - var/obj/item/weapon/circuitboard/machine/recharger/B = new() - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/recharger - name = "Weapon Recharger (Machine Board)" - build_path = /obj/machinery/recharger - origin_tech = "powerstorage=4;engineering=3;materials=4" - req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) + var/static/list/allowed_devices = typecacheof(list( + /obj/item/weapon/gun/energy, + /obj/item/weapon/melee/baton, + /obj/item/ammo_box/magazine/recharge, + /obj/item/device/modular_computer)) /obj/machinery/recharger/RefreshParts() for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 90854e5f74..8d69d6a37d 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -8,27 +8,15 @@ idle_power_usage = 5 active_power_usage = 1000 req_access = list(ACCESS_ROBOTICS) + state_open = TRUE + circuit = /obj/item/weapon/circuitboard/machine/cyborgrecharger var/recharge_speed var/repairs - state_open = TRUE -/obj/machinery/recharge_station/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/cyborgrecharger(null) - B.apply_default_parts(src) +/obj/machinery/recharge_station/Initialize() + . = ..() update_icon() -/obj/item/weapon/circuitboard/machine/cyborgrecharger - name = "Cyborg Recharger (Machine Board)" - build_path = /obj/machinery/recharge_station - origin_tech = "powerstorage=3;engineering=3" - req_components = list( - /obj/item/weapon/stock_parts/capacitor = 2, - /obj/item/weapon/stock_parts/cell = 1, - /obj/item/weapon/stock_parts/manipulator = 1) - def_components = list( - /obj/item/weapon/stock_parts/cell = /obj/item/weapon/stock_parts/cell/high) - /obj/machinery/recharge_station/RefreshParts() recharge_speed = 0 repairs = 0 diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index f853407df8..07251f6cf0 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -8,6 +8,7 @@ layer = ABOVE_ALL_MOB_LAYER // Overhead anchored = TRUE density = TRUE + circuit = /obj/item/weapon/circuitboard/machine/recycler var/safety_mode = FALSE // Temporarily stops machine if it detects a mob var/icon_name = "grinder-o" var/blood = 0 @@ -18,20 +19,10 @@ var/eat_victim_items = TRUE var/item_recycle_sound = 'sound/items/welder.ogg' -/obj/machinery/recycler/New() - ..() +/obj/machinery/recycler/Initialize() materials = new /datum/material_container(src, list(MAT_METAL, MAT_GLASS, MAT_PLASMA, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM)) - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/recycler(null) - B.apply_default_parts(src) update_icon() - -/obj/item/weapon/circuitboard/machine/recycler - name = "Recycler (Machine Board)" - build_path = /obj/machinery/recycler - origin_tech = "programming=2;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1) + return ..() /obj/machinery/recycler/RefreshParts() var/amt_made = 0 diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 4ca6592b21..efcf10dcb6 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -88,7 +88,7 @@ GLOBAL_LIST_EMPTY(allConsoles) icon_state = "req_comp0" /obj/machinery/requests_console/Initialize() - ..() + . = ..() name = "\improper [department] requests console" GLOB.allConsoles += src switch(departmentType) diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index 729d84973d..4079db2018 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -58,7 +58,7 @@ desc = "A weak shield summoned by cultists to protect them while they carry out delicate rituals" color = "#FF0000" max_integrity = 20 - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /obj/structure/emergency_shield/invoker/emp_act(severity) return diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index e72e65f99a..71036c735f 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -34,7 +34,7 @@ light_color = LIGHT_COLOR_BROWN /obj/machinery/computer/slot_machine/Initialize() - ..() + . = ..() jackpots = rand(1, 4) //false hope plays = rand(75, 200) diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 70481ad299..033310e55d 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -12,6 +12,7 @@ desc = "Made by Space Amish using traditional space techniques, this heater/cooler is guaranteed not to set the station on fire." max_integrity = 250 armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 100, fire = 80, acid = 10) + circuit = /obj/item/weapon/circuitboard/machine/space_heater var/obj/item/weapon/stock_parts/cell/cell var/on = FALSE var/mode = HEATER_MODE_STANDBY @@ -26,22 +27,11 @@ /obj/machinery/space_heater/get_cell() return cell -/obj/machinery/space_heater/New() - ..() +/obj/machinery/space_heater/Initialize() + . = ..() cell = new(src) - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/space_heater(null) - B.apply_default_parts(src) update_icon() -/obj/item/weapon/circuitboard/machine/space_heater - name = "Space Heater (Machine Board)" - build_path = /obj/machinery/space_heater - origin_tech = "programming=2;engineering=2;plasmatech=2" - req_components = list( - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/capacitor = 1, - /obj/item/stack/cable_coil = 3) - /obj/machinery/space_heater/on_construction() qdel(cell) cell = null diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 4475a85594..f625de8c5c 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -101,8 +101,8 @@ mask_type = /obj/item/clothing/mask/breath storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double -/obj/machinery/suit_storage_unit/New() - ..() +/obj/machinery/suit_storage_unit/Initialize() + . = ..() wires = new /datum/wires/suit_storage_unit(src) if(suit_type) suit = new suit_type(src) @@ -115,18 +115,10 @@ update_icon() /obj/machinery/suit_storage_unit/Destroy() - if(suit) - qdel(suit) - suit = null - if(helmet) - qdel(helmet) - helmet = null - if(mask) - qdel(mask) - mask = null - if(storage) - qdel(storage) - storage = null + QDEL_NULL(suit) + QDEL_NULL(helmet) + QDEL_NULL(mask) + QDEL_NULL(storage) return ..() /obj/machinery/suit_storage_unit/update_icon() diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 56c4038a76..4e96eb661d 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -82,22 +82,19 @@ countdown.stop() STOP_PROCESSING(SSfastprocess, src) -/obj/machinery/syndicatebomb/New() +/obj/machinery/syndicatebomb/Initialize() + . = ..() wires = new /datum/wires/syndicatebomb(src) - if(src.payload) + if(payload) payload = new payload(src) update_icon() countdown = new(src) - ..() /obj/machinery/syndicatebomb/Destroy() - qdel(wires) - wires = null - if(countdown) - qdel(countdown) - countdown = null + QDEL_NULL(wires) + QDEL_NULL(countdown) STOP_PROCESSING(SSfastprocess, src) - . = ..() + return ..() /obj/machinery/syndicatebomb/examine(mob/user) ..() diff --git a/code/game/machinery/telecomms/machines/broadcaster.dm b/code/game/machinery/telecomms/machines/broadcaster.dm index 286630a777..66783ee062 100644 --- a/code/game/machinery/telecomms/machines/broadcaster.dm +++ b/code/game/machinery/telecomms/machines/broadcaster.dm @@ -17,8 +17,7 @@ GLOBAL_VAR_INIT(message_delay, 0) // To make sure restarting the recentmessages use_power = IDLE_POWER_USE idle_power_usage = 25 machinetype = 5 - /*heatgen = 0 - delay = 7*/ + circuit = /obj/item/weapon/circuitboard/machine/telecomms/broadcaster /obj/machinery/telecomms/broadcaster/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) // Don't broadcast rejected signals @@ -82,22 +81,6 @@ GLOBAL_VAR_INIT(message_delay, 0) // To make sure restarting the recentmessages /* --- Do a snazzy animation! --- */ flick("broadcaster_send", src) -/obj/machinery/telecomms/broadcaster/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/broadcaster(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/telecomms/broadcaster - name = "Subspace Broadcaster (Machine Board)" - build_path = /obj/machinery/telecomms/broadcaster - origin_tech = "programming=2;engineering=2;bluespace=1" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/subspace/filter = 1, - /obj/item/weapon/stock_parts/subspace/crystal = 1, - /obj/item/weapon/stock_parts/micro_laser = 2) - /obj/machinery/telecomms/broadcaster/Destroy() // In case message_delay is left on 1, otherwise it won't reset the list and people can't say the same thing twice anymore. if(GLOB.message_delay) diff --git a/code/game/machinery/telecomms/machines/bus.dm b/code/game/machinery/telecomms/machines/bus.dm index fb2f06aca7..52437afb66 100644 --- a/code/game/machinery/telecomms/machines/bus.dm +++ b/code/game/machinery/telecomms/machines/bus.dm @@ -17,8 +17,8 @@ use_power = IDLE_POWER_USE idle_power_usage = 50 machinetype = 2 - //heatgen = 20 netspeed = 40 + circuit = /obj/item/weapon/circuitboard/machine/telecomms/bus var/change_frequency = 0 /obj/machinery/telecomms/bus/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) @@ -49,24 +49,6 @@ if(can_send) break -/obj/machinery/telecomms/bus/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/bus(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/telecomms/bus - name = "Bus Mainframe (Machine Board)" - build_path = /obj/machinery/telecomms/bus - origin_tech = "programming=2;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/subspace/filter = 1) - - - - - //Preset Buses /obj/machinery/telecomms/bus/preset_one @@ -93,10 +75,10 @@ freq_listening = list(GLOB.ENG_FREQ) autolinkers = list("processor4", "engineering", "common") -/obj/machinery/telecomms/bus/preset_four/New() +/obj/machinery/telecomms/bus/preset_four/Initialize() + . = ..() for(var/i = 1441, i < 1489, i += 2) freq_listening |= i - ..() /obj/machinery/telecomms/bus/preset_one/birdstation name = "Bus" diff --git a/code/game/machinery/telecomms/machines/hub.dm b/code/game/machinery/telecomms/machines/hub.dm index 656eb4a522..41d59e1e77 100644 --- a/code/game/machinery/telecomms/machines/hub.dm +++ b/code/game/machinery/telecomms/machines/hub.dm @@ -18,10 +18,9 @@ use_power = IDLE_POWER_USE idle_power_usage = 80 machinetype = 7 - //heatgen = 40 long_range_link = 1 netspeed = 40 - + circuit = /obj/item/weapon/circuitboard/machine/telecomms/hub /obj/machinery/telecomms/hub/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) if(is_freq_listening(signal)) @@ -33,23 +32,6 @@ relay_information(signal, "/obj/machinery/telecomms/relay", 1) relay_information(signal, "/obj/machinery/telecomms/broadcaster", 1) // Send it to a broadcaster. -/obj/machinery/telecomms/hub/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/hub(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/telecomms/hub - name = "Hub Mainframe (Machine Board)" - build_path = /obj/machinery/telecomms/hub - origin_tech = "programming=2;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/subspace/filter = 2) - - - - //Preset HUB /obj/machinery/telecomms/hub/preset diff --git a/code/game/machinery/telecomms/machines/processor.dm b/code/game/machinery/telecomms/machines/processor.dm index 5680c880b3..8d1494ff61 100644 --- a/code/game/machinery/telecomms/machines/processor.dm +++ b/code/game/machinery/telecomms/machines/processor.dm @@ -16,8 +16,7 @@ use_power = IDLE_POWER_USE idle_power_usage = 30 machinetype = 3 - //heatgen = 100 - //delay = 5 + circuit = /obj/item/weapon/circuitboard/machine/telecomms/processor var/process_mode = 1 // 1 = Uncompress Signals, 0 = Compress Signals /obj/machinery/telecomms/processor/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) @@ -35,24 +34,6 @@ signal.data["slow"] += rand(5, 10) // slow the signal down relay_information(signal, "/obj/machinery/telecomms/server") -/obj/machinery/telecomms/processor/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/processor(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/telecomms/processor - name = "Processor Unit (Machine Board)" - build_path = /obj/machinery/telecomms/processor - origin_tech = "programming=2;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 3, - /obj/item/weapon/stock_parts/subspace/filter = 1, - /obj/item/weapon/stock_parts/subspace/treatment = 2, - /obj/item/weapon/stock_parts/subspace/analyzer = 1, - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/subspace/amplifier = 1) - - //Preset Processors /obj/machinery/telecomms/processor/preset_one diff --git a/code/game/machinery/telecomms/machines/receiver.dm b/code/game/machinery/telecomms/machines/receiver.dm index af218fd663..0614668f3a 100644 --- a/code/game/machinery/telecomms/machines/receiver.dm +++ b/code/game/machinery/telecomms/machines/receiver.dm @@ -16,7 +16,7 @@ use_power = IDLE_POWER_USE idle_power_usage = 30 machinetype = 1 - //heatgen = 0 + circuit = /obj/item/weapon/circuitboard/machine/telecomms/receiver /obj/machinery/telecomms/receiver/receive_signal(datum/signal/signal) @@ -50,25 +50,6 @@ return 0 return 1 - -/obj/machinery/telecomms/receiver/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/receiver(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/telecomms/receiver - name = "Subspace Receiver (Machine Board)" - build_path = /obj/machinery/telecomms/receiver - origin_tech = "programming=2;engineering=2;bluespace=1" - req_components = list( - /obj/item/weapon/stock_parts/subspace/ansible = 1, - /obj/item/weapon/stock_parts/subspace/filter = 1, - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/weapon/stock_parts/micro_laser = 1) - - - - //Preset Receivers //--PRESET LEFT--// @@ -89,10 +70,10 @@ freq_listening = list(GLOB.COMM_FREQ, GLOB.ENG_FREQ, GLOB.SEC_FREQ) //command, engineering, security //Common and other radio frequencies for people to freely use -/obj/machinery/telecomms/receiver/preset_right/New() +/obj/machinery/telecomms/receiver/preset_right/Initialize() + . = ..() for(var/i = 1441, i < 1489, i += 2) freq_listening |= i - ..() /obj/machinery/telecomms/receiver/preset_left/birdstation name = "Receiver" diff --git a/code/game/machinery/telecomms/machines/relay.dm b/code/game/machinery/telecomms/machines/relay.dm index 5bc97d54c7..4dee1e8078 100644 --- a/code/game/machinery/telecomms/machines/relay.dm +++ b/code/game/machinery/telecomms/machines/relay.dm @@ -15,9 +15,9 @@ use_power = IDLE_POWER_USE idle_power_usage = 30 machinetype = 8 - //heatgen = 0 netspeed = 5 long_range_link = 1 + circuit = /obj/item/weapon/circuitboard/machine/telecomms/relay var/broadcasting = 1 var/receiving = 1 @@ -45,22 +45,6 @@ return FALSE return receiving -/obj/machinery/telecomms/relay/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/relay(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/telecomms/relay - name = "Relay Mainframe (Machine Board)" - build_path = /obj/machinery/telecomms/relay - origin_tech = "programming=2;engineering=2;bluespace=2" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/subspace/filter = 2) - - - //Preset Relay /obj/machinery/telecomms/relay/preset diff --git a/code/game/machinery/telecomms/machines/server.dm b/code/game/machinery/telecomms/machines/server.dm index cd8e433cea..703bd378dd 100644 --- a/code/game/machinery/telecomms/machines/server.dm +++ b/code/game/machinery/telecomms/machines/server.dm @@ -16,7 +16,7 @@ use_power = IDLE_POWER_USE idle_power_usage = 15 machinetype = 4 - //heatgen = 50 + circuit = /obj/item/weapon/circuitboard/machine/telecomms/server var/list/log_entries = list() var/list/stored_names = list() var/list/TrafficActions = list() @@ -32,20 +32,9 @@ var/obj/item/device/radio/headset/server_radio = null var/last_signal = 0 // Last time it sent a signal -/obj/machinery/telecomms/server/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/telecomms/server(null) - B.apply_default_parts(src) - server_radio = new() - -/obj/item/weapon/circuitboard/machine/telecomms/server - name = "Telecommunication Server (Machine Board)" - build_path = /obj/machinery/telecomms/server - origin_tech = "programming=2;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/subspace/filter = 1) +/obj/machinery/telecomms/server/Initialize() + . = ..() + server_radio = new /obj/machinery/telecomms/server/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) if(signal.data["message"]) @@ -135,8 +124,8 @@ /obj/machinery/telecomms/server/presets network = "tcommsat" -/obj/machinery/telecomms/server/presets/New() - ..() +/obj/machinery/telecomms/server/presets/Initialize() + . = ..() name = id @@ -167,10 +156,10 @@ //Common and other radio frequencies for people to freely use // 1441 to 1489 -/obj/machinery/telecomms/server/presets/common/New() +/obj/machinery/telecomms/server/presets/common/Initialize() + . = ..() for(var/i = 1441, i < 1489, i += 2) freq_listening |= i - ..() /obj/machinery/telecomms/server/presets/command id = "Command Server" @@ -187,6 +176,6 @@ freq_listening = list(GLOB.SEC_FREQ) autolinkers = list("security") -/obj/machinery/telecomms/server/presets/common/birdstation/New() - ..() +/obj/machinery/telecomms/server/presets/common/birdstation/Initialize() + . = ..() freq_listening = list() diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 48bb5bb5ab..62f53f73ad 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -16,6 +16,7 @@ GLOBAL_LIST_EMPTY(telecomms_list) /obj/machinery/telecomms icon = 'icons/obj/machines/telecomms.dmi' + critical_machine = TRUE var/list/links = list() // list of machines this machine is linked to var/traffic = 0 // value increases as traffic increases var/netspeed = 5 // how much traffic to lose per tick (50 gigabytes/second * netspeed) @@ -31,7 +32,6 @@ GLOBAL_LIST_EMPTY(telecomms_list) var/long_range_link = 0 // Can you link it across Z levels or on the otherside of the map? (Relay & Hub) var/hide = 0 // Is it a hidden machine? var/listening_level = 0 // 0 = auto set in New() - this is the z level that the machine is listening to. - critical_machine = TRUE /obj/machinery/telecomms/proc/relay_information(datum/signal/signal, filter, copysig, amount = 20) @@ -144,7 +144,7 @@ GLOBAL_LIST_EMPTY(telecomms_list) listening_level = position.z /obj/machinery/telecomms/Initialize(mapload) - ..() + . = ..() if(mapload && autolinkers.len) // Links nearby machines if(!long_range_link) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index b737b7e77e..b1edee8325 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -1,221 +1,3 @@ -/obj/machinery/computer/teleporter - name = "teleporter control console" - desc = "Used to control a linked teleportation Hub and Station." - icon_screen = "teleport" - icon_keyboard = "teleport_key" - circuit = /obj/item/weapon/circuitboard/computer/teleporter - var/obj/item/device/gps/locked = null - var/regime_set = "Teleporter" - var/id = null - var/obj/machinery/teleport/station/power_station - var/calibrating - var/turf/target //Used for one-time-use teleport cards (such as clown planet coordinates.) - //Setting this to 1 will set src.locked to null after a player enters the portal and will not allow hand-teles to open portals to that location. - - light_color = LIGHT_COLOR_BLUE - -/obj/machinery/computer/teleporter/New() - src.id = "[rand(1000, 9999)]" - ..() - -/obj/machinery/computer/teleporter/Initialize() - ..() - link_power_station() - -/obj/machinery/computer/teleporter/Destroy() - if (power_station) - power_station.teleporter_console = null - power_station = null - return ..() - -/obj/machinery/computer/teleporter/proc/link_power_station() - if(power_station) - return - for(dir in list(NORTH,EAST,SOUTH,WEST)) - power_station = locate(/obj/machinery/teleport/station, get_step(src, dir)) - if(power_station) - break - return power_station - -/obj/machinery/computer/teleporter/attackby(obj/I, mob/living/user, params) - if(istype(I, /obj/item/device/gps)) - var/obj/item/device/gps/L = I - if(L.locked_location && !(stat & (NOPOWER|BROKEN))) - if(!user.transferItemToLoc(L, src)) - to_chat(user, "\the [I] is stuck to your hand, you cannot put it in \the [src]!") - return - locked = L - to_chat(user, "You insert the GPS device into the [name]'s slot.") - else - return ..() - -/obj/machinery/computer/teleporter/attack_ai(mob/user) - src.attack_hand(user) - -/obj/machinery/computer/teleporter/attack_hand(mob/user) - if(..()) - return - interact(user) - -/obj/machinery/computer/teleporter/interact(mob/user) - var/data = "

Teleporter Status

" - if(!power_station) - data += "
No power station linked.
" - else if(!power_station.teleporter_hub) - data += "
No hub linked.
" - else - data += "
Current regime: [regime_set]
" - data += "Current target: [(!target) ? "None" : "[get_area(target)] [(regime_set != "Gate") ? "" : "Teleporter"]"]
" - if(calibrating) - data += "Calibration: In Progress" - else if(power_station.teleporter_hub.calibrated || power_station.teleporter_hub.accurate >= 3) - data += "Calibration: Optimal" - else - data += "Calibration: Sub-Optimal" - data += "

" - - data += "Change regime
" - data += "Set target
" - if(locked) - data += "
Get target from memory
" - data += "Eject GPS device
" - else - data += "
Get target from memory
" - data += "Eject GPS device
" - - data += "
Calibrate Hub" - - var/datum/browser/popup = new(user, "teleporter", name, 400, 400) - popup.set_content(data) - popup.open() - return - -/obj/machinery/computer/teleporter/Topic(href, href_list) - if(..()) - return - - if(href_list["eject"]) - eject() - updateDialog() - return - - if(!check_hub_connection()) - say("Error: Unable to detect hub.") - return - if(calibrating) - say("Error: Calibration in progress. Stand by.") - return - - if(href_list["regimeset"]) - power_station.engaged = 0 - power_station.teleporter_hub.update_icon() - power_station.teleporter_hub.calibrated = 0 - reset_regime() - if(href_list["settarget"]) - power_station.engaged = 0 - power_station.teleporter_hub.update_icon() - power_station.teleporter_hub.calibrated = 0 - set_target(usr) - if(href_list["locked"]) - power_station.engaged = 0 - power_station.teleporter_hub.update_icon() - power_station.teleporter_hub.calibrated = 0 - target = get_turf(locked.locked_location) - if(href_list["calibrate"]) - if(!target) - say("Error: No target set to calibrate to.") - return - if(power_station.teleporter_hub.calibrated || power_station.teleporter_hub.accurate >= 3) - say("Hub is already calibrated!") - return - say("Processing hub calibration to target...") - - calibrating = 1 - spawn(50 * (3 - power_station.teleporter_hub.accurate)) //Better parts mean faster calibration - calibrating = 0 - if(check_hub_connection()) - power_station.teleporter_hub.calibrated = 1 - say("Calibration complete.") - else - say("Error: Unable to detect hub.") - updateDialog() - - updateDialog() - -/obj/machinery/computer/teleporter/proc/check_hub_connection() - if(!power_station) - return - if(!power_station.teleporter_hub) - return - return 1 - -/obj/machinery/computer/teleporter/proc/reset_regime() - target = null - if(regime_set == "Teleporter") - regime_set = "Gate" - else - regime_set = "Teleporter" - -/obj/machinery/computer/teleporter/proc/eject() - if(locked) - locked.loc = loc - locked = null - -/obj/machinery/computer/teleporter/proc/set_target(mob/user) - var/list/L = list() - var/list/areaindex = list() - if(regime_set == "Teleporter") - for(var/obj/item/device/radio/beacon/R in GLOB.teleportbeacons) - var/turf/T = get_turf(R) - if(!T) - continue - if(T.z == ZLEVEL_CENTCOM || T.z > ZLEVEL_SPACEMAX) - continue - L[avoid_assoc_duplicate_keys(T.loc.name, areaindex)] = R - - for(var/obj/item/weapon/implant/tracking/I in GLOB.tracked_implants) - if(!I.imp_in || !ismob(I.loc)) - continue - else - var/mob/M = I.loc - if(M.stat == DEAD) - if(M.timeofdeath + 6000 < world.time) - continue - var/turf/T = get_turf(M) - if(!T) - continue - if(T.z == ZLEVEL_CENTCOM) - continue - L[avoid_assoc_duplicate_keys(M.real_name, areaindex)] = I - - var/desc = input("Please select a location to lock in.", "Locking Computer") as null|anything in L - target = L[desc] - - else - var/list/S = power_station.linked_stations - if(!S.len) - to_chat(user, "No connected stations located.") - return - for(var/obj/machinery/teleport/station/R in S) - var/turf/T = get_turf(R) - if(!T || !R.teleporter_hub || !R.teleporter_console) - continue - if(T.z == ZLEVEL_CENTCOM || T.z > ZLEVEL_SPACEMAX) - continue - L[avoid_assoc_duplicate_keys(T.loc.name, areaindex)] = R - var/desc = input("Please select a station to lock in.", "Locking Computer") as null|anything in L - target = L[desc] - if(target) - var/obj/machinery/teleport/station/trg = target - trg.linked_stations |= power_station - trg.stat &= ~NOPOWER - if(trg.teleporter_hub) - trg.teleporter_hub.stat &= ~NOPOWER - trg.teleporter_hub.update_icon() - if(trg.teleporter_console) - trg.teleporter_console.stat &= ~NOPOWER - trg.teleporter_console.update_icon() - /obj/machinery/teleport name = "teleport" icon = 'icons/obj/machines/teleporter.dmi' @@ -226,29 +8,16 @@ name = "teleporter hub" desc = "It's the hub of a teleporting machine." icon_state = "tele0" - var/accurate = 0 use_power = IDLE_POWER_USE idle_power_usage = 10 active_power_usage = 2000 + circuit = /obj/item/weapon/circuitboard/machine/teleporter_hub + var/accurate = FALSE var/obj/machinery/teleport/station/power_station var/calibrated //Calibration prevents mutation -/obj/machinery/teleport/hub/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/teleporter_hub(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/teleporter_hub - name = "Teleporter Hub (Machine Board)" - build_path = /obj/machinery/teleport/hub - origin_tech = "programming=3;engineering=4;bluespace=4;materials=4" - req_components = list( - /obj/item/weapon/ore/bluespace_crystal = 3, - /obj/item/weapon/stock_parts/matter_bin = 1) - def_components = list(/obj/item/weapon/ore/bluespace_crystal = /obj/item/weapon/ore/bluespace_crystal/artificial) - /obj/machinery/teleport/hub/Initialize() - ..() + . = ..() link_power_station() /obj/machinery/teleport/hub/Destroy() @@ -327,8 +96,8 @@ /obj/machinery/teleport/hub/proc/is_ready() . = !panel_open && !(stat & (BROKEN|NOPOWER)) && power_station && power_station.engaged && !(power_station.stat & (BROKEN|NOPOWER)) -/obj/machinery/teleport/hub/syndicate/New() - ..() +/obj/machinery/teleport/hub/syndicate/Initialize() + . = ..() component_parts += new /obj/item/weapon/stock_parts/matter_bin/super(null) RefreshParts() @@ -337,32 +106,18 @@ name = "station" desc = "The power control station for a bluespace teleporter. Used for toggling power, and can activate a test-fire to prevent malfunctions." icon_state = "controller" - var/engaged = 0 use_power = IDLE_POWER_USE idle_power_usage = 10 active_power_usage = 2000 + circuit = /obj/item/weapon/circuitboard/machine/teleporter_station + var/engaged = FALSE var/obj/machinery/computer/teleporter/teleporter_console var/obj/machinery/teleport/hub/teleporter_hub var/list/linked_stations = list() var/efficiency = 0 -/obj/machinery/teleport/station/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/teleporter_station(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/teleporter_station - name = "Teleporter Station (Machine Board)" - build_path = /obj/machinery/teleport/station - origin_tech = "programming=4;engineering=4;bluespace=4;plasmatech=3" - req_components = list( - /obj/item/weapon/ore/bluespace_crystal = 2, - /obj/item/weapon/stock_parts/capacitor = 2, - /obj/item/weapon/stock_parts/console_screen = 1) - def_components = list(/obj/item/weapon/ore/bluespace_crystal = /obj/item/weapon/ore/bluespace_crystal/artificial) - /obj/machinery/teleport/station/Initialize() - ..() + . = ..() link_console_and_hub() /obj/machinery/teleport/station/RefreshParts() diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index 3215727740..79428fce6f 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -22,7 +22,7 @@ . = ..() new /obj/machinery/conveyor/auto(locate(x - 1, y, z), WEST) new /obj/machinery/conveyor/auto(loc, WEST) - new /obj/machinery/conveyor/auto(locate(x + 1, y, z), WEST) + new /obj/machinery/conveyor/auto(locate(x + 1, y, z), WEST) countdown = new(src) countdown.start() @@ -33,9 +33,7 @@ to_chat(user, "It will be ready in [max(0, seconds_remaining)] seconds.") /obj/machinery/transformer/Destroy() - if(countdown) - qdel(countdown) - countdown = null + QDEL_NULL(countdown) . = ..() /obj/machinery/transformer/power_change() diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 486081a4c6..15877eea39 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -24,6 +24,7 @@ max_integrity = 300 integrity_failure = 100 armor = list(melee = 20, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 70) + circuit = /obj/item/weapon/circuitboard/machine/vendor var/active = 1 //No sales pitches if off! var/vend_ready = 1 //Are we ready to vend?? Is it time?? @@ -60,12 +61,13 @@ var/refill_count = 3 //The number of canisters the vending machine uses /obj/machinery/vending/Initialize() - . = ..() + var/build_inv = FALSE + if(!refill_canister) + circuit = null + build_inv = TRUE + . = ..() wires = new /datum/wires/vending(src) - if(refill_canister) //constructable vending machine - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/vendor(null) - B.apply_default_parts(src) - else + if(build_inv) //non-constructable vending machine build_inventory(products) build_inventory(contraband, 1) build_inventory(premium, 0, 1) @@ -77,46 +79,6 @@ last_slogan = world.time + rand(0, slogan_delay) power_change() -/obj/item/weapon/circuitboard/machine/vendor - name = "Booze-O-Mat Vendor (Machine Board)" - build_path = /obj/machinery/vending/boozeomat - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/vending_refill/boozeomat = 3) - - var/list/names_paths = list(/obj/machinery/vending/boozeomat = "Booze-O-Mat", - /obj/machinery/vending/coffee = "Solar's Best Hot Drinks", - /obj/machinery/vending/snack = "Getmore Chocolate Corp", - /obj/machinery/vending/cola = "Robust Softdrinks", - /obj/machinery/vending/cigarette = "ShadyCigs Deluxe", - /obj/machinery/vending/autodrobe = "AutoDrobe", - /obj/machinery/vending/clothing = "ClothesMate", - /obj/machinery/vending/medical = "NanoMed Plus", - /obj/machinery/vending/wallmed = "NanoMed") - -/obj/item/weapon/circuitboard/machine/vendor/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/screwdriver)) - var/position = names_paths.Find(build_path) - position = (position == names_paths.len) ? 1 : (position + 1) - var/typepath = names_paths[position] - - to_chat(user, "You set the board to \"[names_paths[typepath]]\".") - set_type(typepath) - else - return ..() - -/obj/item/weapon/circuitboard/machine/vendor/proc/set_type(var/obj/machinery/vending/typepath) - build_path = typepath - name = "[names_paths[build_path]] Vendor (Machine Board)" - req_components = list(initial(typepath.refill_canister) = initial(typepath.refill_count)) - -/obj/item/weapon/circuitboard/machine/vendor/apply_default_parts(obj/machinery/M) - for(var/typepath in names_paths) - if(istype(M, typepath)) - set_type(typepath) - break - ..() - /obj/machinery/vending/Destroy() QDEL_NULL(wires) QDEL_NULL(coin) @@ -125,9 +87,7 @@ /obj/machinery/vending/snack/Destroy() for(var/obj/item/weapon/reagent_containers/food/snacks/S in contents) - S.loc = get_turf(src) - qdel(wires) - wires = null + S.forceMove(get_turf(src)) return ..() /obj/machinery/vending/RefreshParts() //Better would be to make constructable child @@ -795,7 +755,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C desc = "Uh oh!" /obj/machinery/vending/cola/random/Initialize() - ..() + . = ..() var/T = pick(subtypesof(/obj/machinery/vending/cola) - /obj/machinery/vending/cola/random) new T(get_turf(src)) qdel(src) diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index 11b5a075fc..7db5321b9e 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -17,6 +17,7 @@ dir = EAST icon = 'icons/mecha/mech_bay.dmi' icon_state = "recharge_port" + circuit = /obj/item/weapon/circuitboard/machine/mech_recharger var/obj/mecha/recharging_mech var/obj/machinery/computer/mech_bay_power_console/recharge_console var/max_charge = 50 @@ -24,20 +25,10 @@ var/repairability = 0 var/turf/recharging_turf = null -/obj/machinery/mech_bay_recharge_port/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/mech_recharger(null) - B.apply_default_parts(src) +/obj/machinery/mech_bay_recharge_port/Initialize() + . = ..() recharging_turf = get_step(loc, dir) -/obj/item/weapon/circuitboard/machine/mech_recharger - name = "Mechbay Recharger (Machine Board)" - build_path = /obj/machinery/mech_bay_recharge_port - origin_tech = "programming=3;powerstorage=3;engineering=3" - req_components = list( - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/capacitor = 5) - /obj/machinery/mech_bay_recharge_port/RefreshParts() var/MC for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) @@ -149,5 +140,5 @@ add_overlay("recharge_comp_on") /obj/machinery/computer/mech_bay_power_console/Initialize() - ..() + . = ..() reconnect() diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 7c28f5d95b..9865175486 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -9,6 +9,7 @@ idle_power_usage = 20 active_power_usage = 5000 req_access = list(ACCESS_ROBOTICS) + circuit = /obj/item/weapon/circuitboard/machine/mechfab var/time_coeff = 1 var/component_coeff = 1 var/datum/material_container/materials @@ -34,22 +35,10 @@ "Misc" ) -/obj/machinery/mecha_part_fabricator/New() - ..() +/obj/machinery/mecha_part_fabricator/Initialize() files = new /datum/research(src) //Setup the research data holder. materials = new(src, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE)) - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/mechfab(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/mechfab - name = "Exosuit Fabricator (Machine Board)" - build_path = /obj/machinery/mecha_part_fabricator - origin_tech = "programming=2;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 2, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/console_screen = 1) + return ..() /obj/machinery/mecha_part_fabricator/RefreshParts() var/T = 0 diff --git a/code/game/objects/effects/anomalies.dm b/code/game/objects/effects/anomalies.dm index 2bf3b525ac..3692af855b 100644 --- a/code/game/objects/effects/anomalies.dm +++ b/code/game/objects/effects/anomalies.dm @@ -238,7 +238,7 @@ blueeffect.icon_state = "shieldsparkles" blueeffect.layer = FLASH_LAYER blueeffect.plane = FULLSCREEN_PLANE - blueeffect.mouse_opacity = 0 + blueeffect.mouse_opacity = MOUSE_OPACITY_TRANSPARENT M.client.screen += blueeffect sleep(20) M.client.screen -= blueeffect diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm index 98a9782600..35c32b26e6 100644 --- a/code/game/objects/effects/decals/cleanable/misc.dm +++ b/code/game/objects/effects/decals/cleanable/misc.dm @@ -30,7 +30,7 @@ name = "dirt" desc = "Someone should clean that up." icon_state = "dirt" - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /obj/effect/decal/cleanable/flour name = "flour" diff --git a/code/game/objects/effects/effect_system/effect_system.dm b/code/game/objects/effects/effect_system/effect_system.dm index 6c841080d5..20b59b678e 100644 --- a/code/game/objects/effects/effect_system/effect_system.dm +++ b/code/game/objects/effects/effect_system/effect_system.dm @@ -8,7 +8,7 @@ would spawn and follow the beaker, even if it is carried or thrown. /obj/effect/particle_effect name = "particle effect" - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT pass_flags = PASSTABLE | PASSGRILLE /obj/effect/particle_effect/New() diff --git a/code/game/objects/effects/effect_system/effects_explosion.dm b/code/game/objects/effects/effect_system/effects_explosion.dm index 24674e96a6..8e7f2dfd12 100644 --- a/code/game/objects/effects/effect_system/effects_explosion.dm +++ b/code/game/objects/effects/effect_system/effects_explosion.dm @@ -27,7 +27,7 @@ icon_state = "explosion" opacity = 1 anchored = TRUE - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT pixel_x = -32 pixel_y = -32 diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index 48260e02e1..7e48e919ca 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -12,7 +12,7 @@ anchored = TRUE density = FALSE layer = WALL_OBJ_LAYER - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/amount = 3 animate_movement = 0 var/metal = 0 diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index 46fe4e5e8e..f09ae53e31 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -11,7 +11,7 @@ opacity = 0 layer = FLY_LAYER anchored = TRUE - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT animate_movement = 0 var/amount = 4 var/lifetime = 5 diff --git a/code/game/objects/effects/effect_system/effects_water.dm b/code/game/objects/effects/effect_system/effects_water.dm index 7e746f7866..4c84c97650 100644 --- a/code/game/objects/effects/effect_system/effects_water.dm +++ b/code/game/objects/effects/effect_system/effects_water.dm @@ -4,7 +4,7 @@ name = "water" icon_state = "extinguish" var/life = 15 - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /obj/effect/particle_effect/water/New() diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index a9798800a0..edff2653ca 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -46,7 +46,7 @@ /obj/item/trash/cheesie = 1, /obj/item/trash/candy = 1, /obj/item/trash/chips = 1, - /obj/item/trash/deadmouse = 1, + /obj/item/weapon/reagent_containers/food/snacks/deadmouse = 1, /obj/item/trash/pistachios = 1, /obj/item/trash/plate = 1, /obj/item/trash/popcorn = 1, diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index dc293bf4a4..b0049fc3fd 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -188,12 +188,15 @@ name = mimiced_atom.name appearance = mimiced_atom.appearance setDir(mimiced_atom.dir) - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /obj/effect/temp_visual/decoy/fading/Initialize(mapload, atom/mimiced_atom) . = ..() animate(src, alpha = 0, time = duration) +/obj/effect/temp_visual/decoy/fading/threesecond + duration = 40 + /obj/effect/temp_visual/decoy/fading/fivesecond duration = 50 @@ -394,7 +397,7 @@ if(warp_color) color = list(warp_color, warp_color, warp_color, list(0,0,0)) set_light(1.4, 1, warp_color) - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/matrix/skew = transform skew = skew.Turn(180) skew = skew.Interpolate(transform, 0.5) diff --git a/code/game/objects/effects/temporary_visuals/temporary_visual.dm b/code/game/objects/effects/temporary_visuals/temporary_visual.dm index 1eb427cfb6..6a1bbc4437 100644 --- a/code/game/objects/effects/temporary_visuals/temporary_visual.dm +++ b/code/game/objects/effects/temporary_visuals/temporary_visual.dm @@ -3,7 +3,7 @@ icon_state = "nothing" anchored = TRUE layer = ABOVE_MOB_LAYER - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/duration = 10 //in deciseconds var/randomdir = TRUE var/timerid diff --git a/code/game/objects/items/devices/forcefieldprojector.dm b/code/game/objects/items/devices/forcefieldprojector.dm index 5c67e520cb..e3fb16ee81 100644 --- a/code/game/objects/items/devices/forcefieldprojector.dm +++ b/code/game/objects/items/devices/forcefieldprojector.dm @@ -77,7 +77,7 @@ layer = ABOVE_ALL_MOB_LAYER anchored = TRUE density = TRUE - mouse_opacity = 2 + mouse_opacity = MOUSE_OPACITY_OPAQUE resistance_flags = INDESTRUCTIBLE CanAtmosPass = ATMOS_PASS_DENSITY armor = list(melee = 0, bullet = 25, laser = 50, energy = 50, bomb = 25, bio = 100, rad = 100, fire = 100, acid = 100) diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index dc2cc108d5..9d3a0c7705 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -12,7 +12,7 @@ novariants = FALSE GLOBAL_LIST_INIT(human_recipes, list( \ - new/datum/stack_recipe("bloated human costume", /obj/item/clothing/suit/hooded/bloated_human, 5, on_floor = 1), \ + new/datum/stack_recipe("bloated human costume", /obj/item/clothing/suit/hooded/bloated_human, 5), \ )) /obj/item/stack/sheet/animalhide/human/Initialize(mapload, new_amount, merge = TRUE) @@ -33,7 +33,7 @@ GLOBAL_LIST_INIT(human_recipes, list( \ icon_state = "sheet-corgi" GLOBAL_LIST_INIT(corgi_recipes, list ( \ - new/datum/stack_recipe("corgi costume", /obj/item/clothing/suit/hooded/ian_costume, 3, on_floor = 1), \ + new/datum/stack_recipe("corgi costume", /obj/item/clothing/suit/hooded/ian_costume, 3), \ )) /obj/item/stack/sheet/animalhide/corgi/Initialize(mapload, new_amount, merge = TRUE) @@ -53,8 +53,8 @@ GLOBAL_LIST_INIT(corgi_recipes, list ( \ icon_state = "sheet-monkey" GLOBAL_LIST_INIT(monkey_recipes, list ( \ - new/datum/stack_recipe("monkey mask", /obj/item/clothing/mask/gas/monkeymask, 1, on_floor = 1), \ - new/datum/stack_recipe("monkey suit", /obj/item/clothing/suit/monkeysuit, 2, on_floor = 1), \ + new/datum/stack_recipe("monkey mask", /obj/item/clothing/mask/gas/monkeymask, 1), \ + new/datum/stack_recipe("monkey suit", /obj/item/clothing/suit/monkeysuit, 2), \ )) /obj/item/stack/sheet/animalhide/monkey/Initialize(mapload, new_amount, merge = TRUE) @@ -74,8 +74,8 @@ GLOBAL_LIST_INIT(monkey_recipes, list ( \ icon_state = "sheet-xeno" GLOBAL_LIST_INIT(xeno_recipes, list ( \ - new/datum/stack_recipe("alien helmet", /obj/item/clothing/head/xenos, 1, on_floor = 1), \ - new/datum/stack_recipe("alien suit", /obj/item/clothing/suit/xenos, 2, on_floor = 1), \ + new/datum/stack_recipe("alien helmet", /obj/item/clothing/head/xenos, 1), \ + new/datum/stack_recipe("alien suit", /obj/item/clothing/suit/xenos, 2), \ )) /obj/item/stack/sheet/animalhide/xeno/Initialize(mapload, new_amount, merge = TRUE) @@ -161,7 +161,7 @@ GLOBAL_LIST_INIT(leather_recipes, list ( \ GLOBAL_LIST_INIT(sinew_recipes, list ( \ - new/datum/stack_recipe("sinew restraints", /obj/item/weapon/restraints/handcuffs/sinew, 1, on_floor = 1), \ + new/datum/stack_recipe("sinew restraints", /obj/item/weapon/restraints/handcuffs/sinew, 1), \ )) /obj/item/stack/sheet/sinew/Initialize(mapload, new_amount, merge = TRUE) diff --git a/code/game/objects/items/weapons/circuitboards/circuitboard.dm b/code/game/objects/items/weapons/circuitboards/circuitboard.dm new file mode 100644 index 0000000000..e15cdf930b --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/circuitboard.dm @@ -0,0 +1,55 @@ +//File with the circuitboard and circuitboard/machine class definitions and procs + + +// Circuitboard + +/obj/item/weapon/circuitboard + name = "circuit board" + icon = 'icons/obj/module.dmi' + icon_state = "id_mod" + item_state = "electronic" + lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' + origin_tech = "programming=2" + materials = list(MAT_GLASS=1000) + w_class = WEIGHT_CLASS_SMALL + var/build_path = null + +/obj/item/weapon/circuitboard/proc/apply_default_parts(obj/machinery/M) + return + +// Circuitboard/machine +/*Common Parts: Parts List: Ignitor, Timer, Infra-red laser, Infra-red sensor, t_scanner, Capacitor, Valve, sensor unit, +micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells. +*/ + +/obj/item/weapon/circuitboard/machine + var/list/req_components // Components required by the machine. + // Example: list(/obj/item/weapon/stock_parts/matter_bin = 5) + + var/list/def_components // Default replacements for req_components, to be used in apply_default_parts instead of req_components types + // Example: list(/obj/item/weapon/stock_parts/matter_bin = /obj/item/weapon/stock_parts/matter_bin/super) + +// Applies the default parts defined by the circuit board when the machine is created +/obj/item/weapon/circuitboard/machine/apply_default_parts(obj/machinery/M) + if(!req_components) + return + + M.component_parts = list(src) // List of components always contains a board + loc = null + + for(var/comp_path in req_components) + var/comp_amt = req_components[comp_path] + if(!comp_amt) + continue + + if(def_components && def_components[comp_path]) + comp_path = def_components[comp_path] + + if(ispath(comp_path, /obj/item/stack)) + M.component_parts += new comp_path(null, comp_amt) + else + for(var/i in 1 to comp_amt) + M.component_parts += new comp_path(null) + + M.RefreshParts() diff --git a/code/game/objects/items/weapons/circuitboards/computer_circuitboards.dm b/code/game/objects/items/weapons/circuitboards/computer_circuitboards.dm new file mode 100644 index 0000000000..17e5dbf597 --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/computer_circuitboards.dm @@ -0,0 +1,369 @@ +/obj/item/weapon/circuitboard/computer/turbine_computer + name = "Turbine Computer (Computer Board)" + build_path = /obj/machinery/computer/turbine_computer + origin_tech = "programming=4;engineering=4;powerstorage=4" + +/obj/item/weapon/circuitboard/computer/launchpad_console + name = "Launchpad Control Console (Computer Board)" + build_path = /obj/machinery/computer/launchpad + origin_tech = "programming=3;bluespace=3;plasmatech=2" + +/obj/item/weapon/circuitboard/computer/message_monitor + name = "Message Monitor (Computer Board)" + build_path = /obj/machinery/computer/message_monitor + origin_tech = "programming=2" + +/obj/item/weapon/circuitboard/computer/security + name = "Security Cameras (Computer Board)" + build_path = /obj/machinery/computer/security + origin_tech = "programming=2;combat=2" + +/obj/item/weapon/circuitboard/computer/xenobiology + name = "circuit board (Xenobiology Console)" + build_path = /obj/machinery/computer/camera_advanced/xenobio + origin_tech = "programming=3;biotech=3" + +/obj/item/weapon/circuitboard/computer/base_construction + name = "circuit board (Aux Mining Base Construction Console)" + build_path = /obj/machinery/computer/camera_advanced/base_construction + origin_tech = "programming=3;engineering=3" + +/obj/item/weapon/circuitboard/computer/aiupload + name = "AI Upload (Computer Board)" + build_path = /obj/machinery/computer/upload/ai + origin_tech = "programming=4;engineering=4" + +/obj/item/weapon/circuitboard/computer/borgupload + name = "Cyborg Upload (Computer Board)" + build_path = /obj/machinery/computer/upload/borg + origin_tech = "programming=4;engineering=4" + +/obj/item/weapon/circuitboard/computer/med_data + name = "Medical Records Console (Computer Board)" + build_path = /obj/machinery/computer/med_data + origin_tech = "programming=2;biotech=2" + +/obj/item/weapon/circuitboard/computer/pandemic + name = "PanD.E.M.I.C. 2200 (Computer Board)" + build_path = /obj/machinery/computer/pandemic + origin_tech = "programming=2;biotech=2" + +/obj/item/weapon/circuitboard/computer/scan_consolenew + name = "DNA Machine (Computer Board)" + build_path = /obj/machinery/computer/scan_consolenew + origin_tech = "programming=2;biotech=2" + +/obj/item/weapon/circuitboard/computer/communications + name = "Communications (Computer Board)" + build_path = /obj/machinery/computer/communications + origin_tech = "programming=3;magnets=3" + var/lastTimeUsed = 0 + +/obj/item/weapon/circuitboard/computer/card + name = "ID Console (Computer Board)" + build_path = /obj/machinery/computer/card + origin_tech = "programming=3" + +/obj/item/weapon/circuitboard/computer/card/centcom + name = "CentCom ID Console (Computer Board)" + build_path = /obj/machinery/computer/card/centcom + +/obj/item/weapon/circuitboard/computer/card/minor + name = "Department Management Console (Computer Board)" + build_path = /obj/machinery/computer/card/minor + var/target_dept = 1 + var/list/dept_list = list("General","Security","Medical","Science","Engineering") + +/obj/item/weapon/circuitboard/computer/card/minor/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver)) + target_dept = (target_dept == dept_list.len) ? 1 : (target_dept + 1) + to_chat(user, "You set the board to \"[dept_list[target_dept]]\".") + else + return ..() + +/obj/item/weapon/circuitboard/computer/card/minor/examine(user) + ..() + to_chat(user, "Currently set to \"[dept_list[target_dept]]\".") + +//obj/item/weapon/circuitboard/computer/shield +// name = "Shield Control (Computer Board)" +// build_path = /obj/machinery/computer/stationshield +/obj/item/weapon/circuitboard/computer/teleporter + name = "Teleporter (Computer Board)" + build_path = /obj/machinery/computer/teleporter + origin_tech = "programming=3;bluespace=3;plasmatech=3" + +/obj/item/weapon/circuitboard/computer/secure_data + name = "Security Records Console (Computer Board)" + build_path = /obj/machinery/computer/secure_data + origin_tech = "programming=2;combat=2" + +/obj/item/weapon/circuitboard/computer/stationalert + name = "Station Alerts (Computer Board)" + build_path = /obj/machinery/computer/station_alert + +/obj/item/weapon/circuitboard/computer/atmos_control + name = "Atmospheric Monitor (Computer Board)" + build_path = /obj/machinery/computer/atmos_control + +/obj/item/weapon/circuitboard/computer/atmos_control/tank + name = "Tank Control (Computer Board)" + build_path = /obj/machinery/computer/atmos_control/tank + origin_tech = "programming=2;engineering=3;materials=2" + +/obj/item/weapon/circuitboard/computer/atmos_alert + name = "Atmospheric Alert (Computer Board)" + build_path = /obj/machinery/computer/atmos_alert + +/obj/item/weapon/circuitboard/computer/pod + name = "Massdriver control (Computer Board)" + build_path = /obj/machinery/computer/pod + +/obj/item/weapon/circuitboard/computer/robotics + name = "Robotics Control (Computer Board)" + build_path = /obj/machinery/computer/robotics + origin_tech = "programming=3" + +/obj/item/weapon/circuitboard/computer/cloning + name = "Cloning (Computer Board)" + build_path = /obj/machinery/computer/cloning + origin_tech = "programming=2;biotech=2" + +/obj/item/weapon/circuitboard/computer/arcade/battle + name = "Arcade Battle (Computer Board)" + build_path = /obj/machinery/computer/arcade/battle + origin_tech = "programming=1" + +/obj/item/weapon/circuitboard/computer/arcade/orion_trail + name = "Orion Trail (Computer Board)" + build_path = /obj/machinery/computer/arcade/orion_trail + origin_tech = "programming=1" + +/obj/item/weapon/circuitboard/computer/turbine_control + name = "Turbine control (Computer Board)" + build_path = /obj/machinery/computer/turbine_computer + +/obj/item/weapon/circuitboard/computer/solar_control + name = "Solar Control (Computer Board)" //name fixed 250810 + build_path = /obj/machinery/power/solar_control + origin_tech = "programming=2;powerstorage=2" + +/obj/item/weapon/circuitboard/computer/powermonitor + name = "Power Monitor (Computer Board)" //name fixed 250810 + build_path = /obj/machinery/computer/monitor + origin_tech = "programming=2;powerstorage=2" + +/obj/item/weapon/circuitboard/computer/olddoor + name = "DoorMex (Computer Board)" + build_path = /obj/machinery/computer/pod/old + +/obj/item/weapon/circuitboard/computer/syndicatedoor + name = "ProComp Executive (Computer Board)" + build_path = /obj/machinery/computer/pod/old/syndicate + +/obj/item/weapon/circuitboard/computer/swfdoor + name = "Magix (Computer Board)" + build_path = /obj/machinery/computer/pod/old/swf + +/obj/item/weapon/circuitboard/computer/prisoner + name = "Prisoner Management Console (Computer Board)" + build_path = /obj/machinery/computer/prisoner +/obj/item/weapon/circuitboard/computer/gulag_teleporter_console + name = "Labor Camp teleporter console (Computer Board)" + build_path = /obj/machinery/computer/gulag_teleporter_computer + +/obj/item/weapon/circuitboard/computer/rdconsole + name = "R&D Console (Computer Board)" + build_path = /obj/machinery/computer/rdconsole/core + +/obj/item/weapon/circuitboard/computer/rdconsole/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver)) + if(build_path == /obj/machinery/computer/rdconsole/core) + name = "R&D Console - Robotics (Computer Board)" + build_path = /obj/machinery/computer/rdconsole/robotics + to_chat(user, "Access protocols successfully updated.") + else + name = "R&D Console (Computer Board)" + build_path = /obj/machinery/computer/rdconsole/core + to_chat(user, "Defaulting access protocols.") + else + return ..() + +/obj/item/weapon/circuitboard/computer/mecha_control + name = "Exosuit Control Console (Computer Board)" + build_path = /obj/machinery/computer/mecha + +/obj/item/weapon/circuitboard/computer/rdservercontrol + name = "R&D Server Control (Computer Board)" + build_path = /obj/machinery/computer/rdservercontrol + +/obj/item/weapon/circuitboard/computer/crew + name = "Crew Monitoring Console (Computer Board)" + build_path = /obj/machinery/computer/crew + origin_tech = "programming=2;biotech=2" + +/obj/item/weapon/circuitboard/computer/mech_bay_power_console + name = "Mech Bay Power Control Console (Computer Board)" + build_path = /obj/machinery/computer/mech_bay_power_console + origin_tech = "programming=3;powerstorage=3" + +/obj/item/weapon/circuitboard/computer/cargo + name = "Supply Console (Computer Board)" + build_path = /obj/machinery/computer/cargo + origin_tech = "programming=3" + var/contraband = FALSE + var/emagged = FALSE + +/obj/item/weapon/circuitboard/computer/cargo/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/device/multitool)) + if(!emagged) + contraband = !contraband + to_chat(user, "Receiver spectrum set to [contraband ? "Broad" : "Standard"].") + else + to_chat(user, "The spectrum chip is unresponsive.") + else if(istype(I, /obj/item/weapon/card/emag)) + if(!emagged) + contraband = TRUE + emagged = TRUE + to_chat(user, "You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.") + else + return ..() + + +/obj/item/weapon/circuitboard/computer/cargo/request + name = "Supply Request Console (Computer Board)" + build_path = /obj/machinery/computer/cargo/request + +/obj/item/weapon/circuitboard/computer/stockexchange + name = "circuit board (Stock Exchange Console)" + build_path = /obj/machinery/computer/stockexchange + origin_tech = "programming=3" + +/obj/item/weapon/circuitboard/computer/operating + name = "Operating Computer (Computer Board)" + build_path = /obj/machinery/computer/operating + origin_tech = "programming=2;biotech=3" + +/obj/item/weapon/circuitboard/computer/mining + name = "Outpost Status Display (Computer Board)" + build_path = /obj/machinery/computer/security/mining + +/obj/item/weapon/circuitboard/computer/comm_monitor + name = "Telecommunications Monitor (Computer Board)" + build_path = /obj/machinery/computer/telecomms/monitor + origin_tech = "programming=3;magnets=3;bluespace=2" + +/obj/item/weapon/circuitboard/computer/comm_server + name = "Telecommunications Server Monitor (Computer Board)" + build_path = /obj/machinery/computer/telecomms/server + origin_tech = "programming=3;magnets=3;bluespace=2" + +/obj/item/weapon/circuitboard/computer/shuttle + name = "Shuttle (Computer Board)" + build_path = /obj/machinery/computer/shuttle + var/shuttleId + var/possible_destinations = "" + +/obj/item/weapon/circuitboard/computer/shuttle/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/device/multitool)) + var/chosen_id = round(input(usr, "Choose an ID number (-1 for reset):", "Input an Integer", null) as num|null) + if(chosen_id >= 0) + shuttleId = chosen_id + else + shuttleId = initial(shuttleId) + else + return ..() + +/obj/item/weapon/circuitboard/computer/labor_shuttle + name = "Labor Shuttle (Computer Board)" + build_path = /obj/machinery/computer/shuttle/labor + +/obj/item/weapon/circuitboard/computer/labor_shuttle/one_way + name = "Prisoner Shuttle Console (Computer Board)" + build_path = /obj/machinery/computer/shuttle/labor/one_way + +/obj/item/weapon/circuitboard/computer/ferry + name = "Transport Ferry (Computer Board)" + build_path = /obj/machinery/computer/shuttle/ferry + +/obj/item/weapon/circuitboard/computer/ferry/request + name = "Transport Ferry Console (Computer Board)" + build_path = /obj/machinery/computer/shuttle/ferry/request + +/obj/item/weapon/circuitboard/computer/mining_shuttle + name = "Mining Shuttle (Computer Board)" + build_path = /obj/machinery/computer/shuttle/mining + +/obj/item/weapon/circuitboard/computer/white_ship + name = "White Ship (Computer Board)" + build_path = /obj/machinery/computer/shuttle/white_ship + +/obj/item/weapon/circuitboard/computer/auxillary_base + name = "Auxillary Base Management Console (Computer Board)" + build_path = /obj/machinery/computer/auxillary_base + +/obj/item/weapon/circuitboard/computer/holodeck// Not going to let people get this, but it's just here for future + name = "Holodeck Control (Computer Board)" + build_path = /obj/machinery/computer/holodeck + origin_tech = "programming=4" + +/obj/item/weapon/circuitboard/computer/aifixer + name = "AI Integrity Restorer (Computer Board)" + build_path = /obj/machinery/computer/aifixer + origin_tech = "programming=2;biotech=2" + +/obj/item/weapon/circuitboard/computer/slot_machine + name = "Slot Machine (Computer Board)" + build_path = /obj/machinery/computer/slot_machine + origin_tech = "programming=1" + +/obj/item/weapon/circuitboard/computer/libraryconsole + name = "Library Visitor Console (Computer Board)" + build_path = /obj/machinery/computer/libraryconsole + origin_tech = "programming=1" + +/obj/item/weapon/circuitboard/computer/libraryconsole/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver)) + if(build_path == /obj/machinery/computer/libraryconsole/bookmanagement) + name = "Library Visitor Console (Computer Board)" + build_path = /obj/machinery/computer/libraryconsole + to_chat(user, "Defaulting access protocols.") + else + name = "Book Inventory Management Console (Computer Board)" + build_path = /obj/machinery/computer/libraryconsole/bookmanagement + to_chat(user, "Access protocols successfully updated.") + else + return ..() + +/obj/item/weapon/circuitboard/computer/apc_control + name = "\improper Power Flow Control Console (Computer Board)" + build_path = /obj/machinery/computer/apc_control + origin_tech = "programming=3;engineering=3;powerstorage=2" + +/obj/item/weapon/circuitboard/computer/shuttle/monastery_shuttle + name = "Monastery Shuttle (Computer Board)" + build_path = /obj/machinery/computer/shuttle/monastery_shuttle + +/obj/item/weapon/circuitboard/computer/syndicate_shuttle + name = "Syndicate Shuttle (Computer Board)" + build_path = /obj/machinery/computer/shuttle/syndicate + var/challenge = FALSE + var/moved = FALSE + +/obj/item/weapon/circuitboard/computer/syndicate_shuttle/Initialize() + . = ..() + GLOB.syndicate_shuttle_boards += src + +/obj/item/weapon/circuitboard/computer/syndicate_shuttle/Destroy() + GLOB.syndicate_shuttle_boards -= src + return ..() + +/obj/item/weapon/circuitboard/computer/bsa_control + name = "Bluespace Artillery Controls (Computer Board)" + build_path = /obj/machinery/computer/bsa_control + origin_tech = "engineering=2;combat=2;bluespace=2" + +/obj/item/weapon/circuitboard/computer/sat_control + name = "Satellite Network Control (Computer Board)" + build_path = /obj/machinery/computer/sat_control + origin_tech = "engineering=3" \ No newline at end of file diff --git a/code/game/objects/items/weapons/circuitboards/machine_circuitboards.dm b/code/game/objects/items/weapons/circuitboards/machine_circuitboards.dm new file mode 100644 index 0000000000..adaf7623b9 --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/machine_circuitboards.dm @@ -0,0 +1,723 @@ +/obj/item/weapon/circuitboard/machine/sleeper + name = "Sleeper (Machine Board)" + build_path = /obj/machinery/sleeper + origin_tech = "programming=3;biotech=2;engineering=3" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/stack/sheet/glass = 1) + +/obj/item/weapon/circuitboard/machine/announcement_system + name = "Announcement System (Machine Board)" + build_path = /obj/machinery/announcement_system + origin_tech = "programming=3;bluespace=3;magnets=2" + req_components = list( + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/console_screen = 1) + +/obj/item/weapon/circuitboard/machine/autolathe + name = "Autolathe (Machine Board)" + build_path = /obj/machinery/autolathe + origin_tech = "engineering=2;programming=2" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 3, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/console_screen = 1) + +/obj/item/weapon/circuitboard/machine/clonepod + name = "Clone Pod (Machine Board)" + build_path = /obj/machinery/clonepod + origin_tech = "programming=2;biotech=2" + req_components = list( + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/scanning_module = 2, + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/stack/sheet/glass = 1) + +/obj/item/weapon/circuitboard/machine/abductor + name = "alien board (Report This)" + icon_state = "abductor_mod" + origin_tech = "programming=5;abductor=3" + +/obj/item/weapon/circuitboard/machine/clockwork + name = "clockwork board (Report This)" + icon_state = "clock_mod" + +/obj/item/weapon/circuitboard/machine/clonescanner + name = "Cloning Scanner (Machine Board)" + build_path = /obj/machinery/dna_scannernew + origin_tech = "programming=2;biotech=2" + req_components = list( + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/stack/sheet/glass = 1, + /obj/item/stack/cable_coil = 2) + +/obj/item/weapon/circuitboard/machine/holopad + name = "AI Holopad (Machine Board)" + build_path = /obj/machinery/holopad + origin_tech = "programming=1" + req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) + +/obj/item/weapon/circuitboard/machine/launchpad + name = "Bluespace Launchpad (Machine Board)" + build_path = /obj/machinery/launchpad + origin_tech = "programming=3;engineering=3;plasmatech=2;bluespace=3" + req_components = list( + /obj/item/weapon/ore/bluespace_crystal = 1, + /obj/item/weapon/stock_parts/manipulator = 1) + def_components = list(/obj/item/weapon/ore/bluespace_crystal = /obj/item/weapon/ore/bluespace_crystal/artificial) + +/obj/item/weapon/circuitboard/machine/limbgrower + name = "Limb Grower (Machine Board)" + build_path = /obj/machinery/limbgrower + origin_tech = "programming=2;biotech=2" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/reagent_containers/glass/beaker = 2, + /obj/item/weapon/stock_parts/console_screen = 1) + +/obj/item/weapon/circuitboard/machine/quantumpad + name = "Quantum Pad (Machine Board)" + build_path = /obj/machinery/quantumpad + origin_tech = "programming=3;engineering=3;plasmatech=3;bluespace=4" + req_components = list( + /obj/item/weapon/ore/bluespace_crystal = 1, + /obj/item/weapon/stock_parts/capacitor = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/stack/cable_coil = 1) + def_components = list(/obj/item/weapon/ore/bluespace_crystal = /obj/item/weapon/ore/bluespace_crystal/artificial) + +/obj/item/weapon/circuitboard/machine/recharger + name = "Weapon Recharger (Machine Board)" + build_path = /obj/machinery/recharger + origin_tech = "powerstorage=4;engineering=3;materials=4" + req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) + +/obj/item/weapon/circuitboard/machine/cyborgrecharger + name = "Cyborg Recharger (Machine Board)" + build_path = /obj/machinery/recharge_station + origin_tech = "powerstorage=3;engineering=3" + req_components = list( + /obj/item/weapon/stock_parts/capacitor = 2, + /obj/item/weapon/stock_parts/cell = 1, + /obj/item/weapon/stock_parts/manipulator = 1) + def_components = list(/obj/item/weapon/stock_parts/cell = /obj/item/weapon/stock_parts/cell/high) + +/obj/item/weapon/circuitboard/machine/recycler + name = "Recycler (Machine Board)" + build_path = /obj/machinery/recycler + origin_tech = "programming=2;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1) + +/obj/item/weapon/circuitboard/machine/space_heater + name = "Space Heater (Machine Board)" + build_path = /obj/machinery/space_heater + origin_tech = "programming=2;engineering=2;plasmatech=2" + req_components = list( + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/capacitor = 1, + /obj/item/stack/cable_coil = 3) + +/obj/item/weapon/circuitboard/machine/telecomms/broadcaster + name = "Subspace Broadcaster (Machine Board)" + build_path = /obj/machinery/telecomms/broadcaster + origin_tech = "programming=2;engineering=2;bluespace=1" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/subspace/filter = 1, + /obj/item/weapon/stock_parts/subspace/crystal = 1, + /obj/item/weapon/stock_parts/micro_laser = 2) + +/obj/item/weapon/circuitboard/machine/telecomms/bus + name = "Bus Mainframe (Machine Board)" + build_path = /obj/machinery/telecomms/bus + origin_tech = "programming=2;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/subspace/filter = 1) + +/obj/item/weapon/circuitboard/machine/telecomms/hub + name = "Hub Mainframe (Machine Board)" + build_path = /obj/machinery/telecomms/hub + origin_tech = "programming=2;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/subspace/filter = 2) + +/obj/item/weapon/circuitboard/machine/telecomms/processor + name = "Processor Unit (Machine Board)" + build_path = /obj/machinery/telecomms/processor + origin_tech = "programming=2;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 3, + /obj/item/weapon/stock_parts/subspace/filter = 1, + /obj/item/weapon/stock_parts/subspace/treatment = 2, + /obj/item/weapon/stock_parts/subspace/analyzer = 1, + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/subspace/amplifier = 1) + +/obj/item/weapon/circuitboard/machine/telecomms/receiver + name = "Subspace Receiver (Machine Board)" + build_path = /obj/machinery/telecomms/receiver + origin_tech = "programming=2;engineering=2;bluespace=1" + req_components = list( + /obj/item/weapon/stock_parts/subspace/ansible = 1, + /obj/item/weapon/stock_parts/subspace/filter = 1, + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/weapon/stock_parts/micro_laser = 1) + +/obj/item/weapon/circuitboard/machine/telecomms/relay + name = "Relay Mainframe (Machine Board)" + build_path = /obj/machinery/telecomms/relay + origin_tech = "programming=2;engineering=2;bluespace=2" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/subspace/filter = 2) + +/obj/item/weapon/circuitboard/machine/telecomms/server + name = "Telecommunication Server (Machine Board)" + build_path = /obj/machinery/telecomms/server + origin_tech = "programming=2;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/subspace/filter = 1) + +/obj/item/weapon/circuitboard/machine/teleporter_hub + name = "Teleporter Hub (Machine Board)" + build_path = /obj/machinery/teleport/hub + origin_tech = "programming=3;engineering=4;bluespace=4;materials=4" + req_components = list( + /obj/item/weapon/ore/bluespace_crystal = 3, + /obj/item/weapon/stock_parts/matter_bin = 1) + def_components = list(/obj/item/weapon/ore/bluespace_crystal = /obj/item/weapon/ore/bluespace_crystal/artificial) + +/obj/item/weapon/circuitboard/machine/teleporter_station + name = "Teleporter Station (Machine Board)" + build_path = /obj/machinery/teleport/station + origin_tech = "programming=4;engineering=4;bluespace=4;plasmatech=3" + req_components = list( + /obj/item/weapon/ore/bluespace_crystal = 2, + /obj/item/weapon/stock_parts/capacitor = 2, + /obj/item/weapon/stock_parts/console_screen = 1) + def_components = list(/obj/item/weapon/ore/bluespace_crystal = /obj/item/weapon/ore/bluespace_crystal/artificial) + +/obj/item/weapon/circuitboard/machine/vendor + name = "Booze-O-Mat Vendor (Machine Board)" + build_path = /obj/machinery/vending/boozeomat + origin_tech = "programming=1" + req_components = list( + /obj/item/weapon/vending_refill/boozeomat = 3) + + var/static/list/vending_names_paths = list(/obj/machinery/vending/boozeomat = "Booze-O-Mat", + /obj/machinery/vending/coffee = "Solar's Best Hot Drinks", + /obj/machinery/vending/snack = "Getmore Chocolate Corp", + /obj/machinery/vending/cola = "Robust Softdrinks", + /obj/machinery/vending/cigarette = "ShadyCigs Deluxe", + /obj/machinery/vending/autodrobe = "AutoDrobe", + /obj/machinery/vending/clothing = "ClothesMate", + /obj/machinery/vending/medical = "NanoMed Plus", + /obj/machinery/vending/wallmed = "NanoMed") + +/obj/item/weapon/circuitboard/machine/vendor/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver)) + var/position = vending_names_paths.Find(build_path) + position = (position == vending_names_paths.len) ? 1 : (position + 1) + var/typepath = vending_names_paths[position] + + to_chat(user, "You set the board to \"[vending_names_paths[typepath]]\".") + set_type(typepath) + else + return ..() + +/obj/item/weapon/circuitboard/machine/vendor/proc/set_type(obj/machinery/vending/typepath) + build_path = typepath + name = "[vending_names_paths[build_path]] Vendor (Machine Board)" + req_components = list(initial(typepath.refill_canister) = initial(typepath.refill_count)) + +/obj/item/weapon/circuitboard/machine/vendor/apply_default_parts(obj/machinery/M) + for(var/typepath in vending_names_paths) + if(istype(M, typepath)) + set_type(typepath) + break + return ..() + +/obj/item/weapon/circuitboard/machine/mech_recharger + name = "Mechbay Recharger (Machine Board)" + build_path = /obj/machinery/mech_bay_recharge_port + origin_tech = "programming=3;powerstorage=3;engineering=3" + req_components = list( + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/capacitor = 5) + +/obj/item/weapon/circuitboard/machine/mechfab + name = "Exosuit Fabricator (Machine Board)" + build_path = /obj/machinery/mecha_part_fabricator + origin_tech = "programming=2;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 2, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/console_screen = 1) + +/obj/item/weapon/circuitboard/machine/cryo_tube + name = "Cryotube (Machine Board)" + build_path = /obj/machinery/atmospherics/components/unary/cryo_cell + origin_tech = "programming=4;biotech=3;engineering=4;plasmatech=3" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/stack/sheet/glass = 2) + +/obj/item/weapon/circuitboard/machine/thermomachine + name = "Thermomachine (Machine Board)" + desc = "You can use a screwdriver to switch between heater and freezer." + origin_tech = "programming=3;plasmatech=3" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 2, + /obj/item/weapon/stock_parts/micro_laser = 2, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/console_screen = 1) + +/obj/item/weapon/circuitboard/machine/thermomachine/Initialize() + . = ..() + if(prob(50)) + name = "Freezer (Machine Board)" + build_path = /obj/machinery/atmospherics/components/unary/thermomachine/freezer + else + name = "Heater (Machine Board)" + build_path = /obj/machinery/atmospherics/components/unary/thermomachine/heater + +#define FREEZER /obj/item/weapon/circuitboard/machine/thermomachine/freezer +#define HEATER /obj/item/weapon/circuitboard/machine/thermomachine/heater + +/obj/item/weapon/circuitboard/machine/thermomachine/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver)) + var/obj/item/weapon/circuitboard/new_type + var/new_setting + switch(build_path) + if(FREEZER) + new_type = HEATER + new_setting = "Heater" + if(HEATER) + new_type = FREEZER + new_setting = "Freezer" + name = initial(new_type.name) + build_path = initial(new_type.build_path) + playsound(user, I.usesound, 50, 1) + to_chat(user, "You change the circuitboard setting to \"[new_setting]\".") + else + return ..() + +#undef FREEZER +#undef HEATER + +/obj/item/weapon/circuitboard/machine/thermomachine/heater + name = "Heater (Machine Board)" + build_path = /obj/machinery/atmospherics/components/unary/thermomachine/heater + +/obj/item/weapon/circuitboard/machine/thermomachine/freezer + name = "Freezer (Machine Board)" + build_path = /obj/machinery/atmospherics/components/unary/thermomachine/freezer + +/obj/item/weapon/circuitboard/machine/deep_fryer + name = "circuit board (Deep Fryer)" + build_path = /obj/machinery/deepfryer + origin_tech = "programming=1" + req_components = list(/obj/item/weapon/stock_parts/micro_laser = 1) + +/obj/item/weapon/circuitboard/machine/gibber + name = "Gibber (Machine Board)" + build_path = /obj/machinery/gibber + origin_tech = "programming=2;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1) + +/obj/item/weapon/circuitboard/machine/monkey_recycler + name = "Monkey Recycler (Machine Board)" + build_path = /obj/machinery/monkey_recycler + origin_tech = "programming=1;biotech=2" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1) + +/obj/item/weapon/circuitboard/machine/processor + name = "Food Processor (Machine Board)" + build_path = /obj/machinery/processor + origin_tech = "programming=1" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1) + +/obj/item/weapon/circuitboard/machine/processor/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver)) + if(build_path == /obj/machinery/processor) + name = "Slime Processor (Machine Board)" + build_path = /obj/machinery/processor/slime + to_chat(user, "Name protocols successfully updated.") + else + name = "Food Processor (Machine Board)" + build_path = /obj/machinery/processor + to_chat(user, "Defaulting name protocols.") + else + return ..() + +/obj/item/weapon/circuitboard/machine/processor/slime + name = "Slime Processor (Machine Board)" + build_path = /obj/machinery/processor/slime + +/obj/item/weapon/circuitboard/machine/smartfridge + name = "Smartfridge (Machine Board)" + build_path = /obj/machinery/smartfridge + origin_tech = "programming=1" + req_components = list(/obj/item/weapon/stock_parts/matter_bin = 1) + var/static/list/fridges_name_paths = list(/obj/machinery/smartfridge = "plant produce", + /obj/machinery/smartfridge/food = "food", + /obj/machinery/smartfridge/drinks = "drinks", + /obj/machinery/smartfridge/extract = "slimes", + /obj/machinery/smartfridge/chemistry = "chems", + /obj/machinery/smartfridge/chemistry/virology = "viruses", + /obj/machinery/smartfridge/disks = "disks") + +/obj/item/weapon/circuitboard/machine/smartfridge/Initialize(mapload, new_type) + if(new_type) + build_path = new_type + return ..() + +/obj/item/weapon/circuitboard/machine/smartfridge/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver)) + var/position = fridges_name_paths.Find(build_path, fridges_name_paths) + position = (position == fridges_name_paths.len) ? 1 : (position + 1) + build_path = fridges_name_paths[position] + to_chat(user, "You set the board to [fridges_name_paths[build_path]].") + else + return ..() + +/obj/item/weapon/circuitboard/machine/smartfridge/examine(mob/user) + ..() + to_chat(user, "[src] is set to [fridges_name_paths[build_path]]. You can use a screwdriver to reconfigure it.") + +/obj/item/weapon/circuitboard/machine/biogenerator + name = "Biogenerator (Machine Board)" + build_path = /obj/machinery/biogenerator + origin_tech = "programming=2;biotech=3;materials=3" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/stack/cable_coil = 1, + /obj/item/weapon/stock_parts/console_screen = 1) + +/obj/item/weapon/circuitboard/machine/plantgenes + name = "Plant DNA Manipulator (Machine Board)" + build_path = /obj/machinery/plantgenes + origin_tech = "programming=3;biotech=3" + req_components = list( + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/weapon/stock_parts/scanning_module = 1) + +/obj/item/weapon/circuitboard/machine/plantgenes/vault + name = "alien board (Plant DNA Manipulator)" + icon_state = "abductor_mod" + origin_tech = "programming=5;biotech=5" + // It wasn't made by actual abductors race, so no abductor tech here. + def_components = list( + /obj/item/weapon/stock_parts/manipulator = /obj/item/weapon/stock_parts/manipulator/femto, + /obj/item/weapon/stock_parts/micro_laser = /obj/item/weapon/stock_parts/micro_laser/quadultra, + /obj/item/weapon/stock_parts/scanning_module = /obj/item/weapon/stock_parts/scanning_module/triphasic) + + +/obj/item/weapon/circuitboard/machine/hydroponics + name = "Hydroponics Tray (Machine Board)" + build_path = /obj/machinery/hydroponics/constructable + origin_tech = "programming=1;biotech=2" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 2, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/console_screen = 1) + +/obj/item/weapon/circuitboard/machine/seed_extractor + name = "Seed Extractor (Machine Board)" + build_path = /obj/machinery/seed_extractor + origin_tech = "programming=1" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1) + +/obj/item/weapon/circuitboard/machine/ore_redemption + name = "Ore Redemption (Machine Board)" + build_path = /obj/machinery/mineral/ore_redemption + origin_tech = "programming=1;engineering=2" + req_components = list( + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/device/assembly/igniter = 1) + +/obj/item/weapon/circuitboard/machine/mining_equipment_vendor + name = "Mining Equipment Vendor (Machine Board)" + build_path = /obj/machinery/mineral/equipment_vendor + origin_tech = "programming=1;engineering=3" + req_components = list( + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/weapon/stock_parts/matter_bin = 3) + +/obj/item/weapon/circuitboard/machine/mining_equipment_vendor/golem + name = "Golem Ship Equipment Vendor (Machine Board)" + build_path = /obj/machinery/mineral/equipment_vendor/golem + +/obj/item/weapon/circuitboard/machine/ntnet_relay + name = "NTNet Relay (Machine Board)" + build_path = /obj/machinery/ntnet_relay + origin_tech = "programming=3;bluespace=3;magnets=2" + req_components = list( + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/subspace/filter = 1) + +/obj/item/weapon/circuitboard/machine/pacman + name = "PACMAN-type Generator (Machine Board)" + build_path = /obj/machinery/power/port_gen/pacman + origin_tech = "programming=2;powerstorage=3;plasmatech=3;engineering=3" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/capacitor = 1) + +/obj/item/weapon/circuitboard/machine/pacman/super + name = "SUPERPACMAN-type Generator (Machine Board)" + build_path = /obj/machinery/power/port_gen/pacman/super + origin_tech = "programming=3;powerstorage=4;engineering=4" + +/obj/item/weapon/circuitboard/machine/pacman/mrs + name = "MRSPACMAN-type Generator (Machine Board)" + build_path = /obj/machinery/power/port_gen/pacman/mrs + origin_tech = "programming=3;powerstorage=4;engineering=4;plasmatech=4" + +/obj/item/weapon/circuitboard/machine/rtg + name = "RTG (Machine Board)" + build_path = /obj/machinery/power/rtg + origin_tech = "programming=2;materials=4;powerstorage=3;engineering=2" + req_components = list( + /obj/item/stack/cable_coil = 5, + /obj/item/weapon/stock_parts/capacitor = 1, + /obj/item/stack/sheet/mineral/uranium = 10) // We have no Pu-238, and this is the closest thing to it. + +/obj/item/weapon/circuitboard/machine/rtg/advanced + name = "Advanced RTG (Machine Board)" + build_path = /obj/machinery/power/rtg/advanced + origin_tech = "programming=3;materials=5;powerstorage=4;engineering=3;plasmatech=3" + req_components = list( + /obj/item/stack/cable_coil = 5, + /obj/item/weapon/stock_parts/capacitor = 1, + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/stack/sheet/mineral/uranium = 10, + /obj/item/stack/sheet/mineral/plasma = 5) + +/obj/item/weapon/circuitboard/machine/abductor/core + name = "alien board (Void Core)" + build_path = /obj/machinery/power/rtg/abductor + origin_tech = "programming=5;abductor=5;powerstorage=8;engineering=8" + req_components = list( + /obj/item/weapon/stock_parts/capacitor = 1, + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/cell/infinite/abductor = 1) + def_components = list( + /obj/item/weapon/stock_parts/capacitor = /obj/item/weapon/stock_parts/capacitor/quadratic, + /obj/item/weapon/stock_parts/micro_laser = /obj/item/weapon/stock_parts/micro_laser/quadultra) + +/obj/item/weapon/circuitboard/machine/emitter + name = "Emitter (Machine Board)" + build_path = /obj/machinery/power/emitter + origin_tech = "programming=3;powerstorage=4;engineering=4" + req_components = list( + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/manipulator = 1) + +/obj/item/weapon/circuitboard/machine/smes + name = "SMES (Machine Board)" + build_path = /obj/machinery/power/smes + origin_tech = "programming=3;powerstorage=3;engineering=3" + req_components = list( + /obj/item/stack/cable_coil = 5, + /obj/item/weapon/stock_parts/cell = 5, + /obj/item/weapon/stock_parts/capacitor = 1) + def_components = list(/obj/item/weapon/stock_parts/cell = /obj/item/weapon/stock_parts/cell/high/empty) + +/obj/item/weapon/circuitboard/machine/tesla_coil + name = "Tesla Coil (Machine Board)" + build_path = /obj/machinery/power/tesla_coil + origin_tech = "programming=3;magnets=3;powerstorage=3" + req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) + +/obj/item/weapon/circuitboard/machine/grounding_rod + name = "Grounding Rod (Machine Board)" + build_path = /obj/machinery/power/grounding_rod + origin_tech = "programming=3;powerstorage=3;magnets=3;plasmatech=2" + req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) + +/obj/item/weapon/circuitboard/machine/power_compressor + name = "Power Compressor (Machine Board)" + build_path = /obj/machinery/power/compressor + origin_tech = "programming=4;powerstorage=4;engineering=4" + req_components = list( + /obj/item/stack/cable_coil = 5, + /obj/item/weapon/stock_parts/manipulator = 6) + +/obj/item/weapon/circuitboard/machine/power_turbine + name = "Power Turbine (Machine Board)" + build_path = /obj/machinery/power/turbine + origin_tech = "programming=4;powerstorage=4;engineering=4" + req_components = list( + /obj/item/stack/cable_coil = 5, + /obj/item/weapon/stock_parts/capacitor = 6) + +/obj/item/weapon/circuitboard/machine/chem_dispenser + name = "Portable Chem Dispenser (Machine Board)" + build_path = /obj/machinery/chem_dispenser/constructable + origin_tech = "materials=4;programming=4;plasmatech=4;biotech=3" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 2, + /obj/item/weapon/stock_parts/capacitor = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/weapon/stock_parts/cell = 1) + def_components = list(/obj/item/weapon/stock_parts/cell = /obj/item/weapon/stock_parts/cell/high) + +/obj/item/weapon/circuitboard/machine/chem_heater + name = "Chemical Heater (Machine Board)" + build_path = /obj/machinery/chem_heater + origin_tech = "programming=2;engineering=2;biotech=2" + req_components = list( + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/console_screen = 1) + +/obj/item/weapon/circuitboard/machine/chem_master + name = "ChemMaster 3000 (Machine Board)" + build_path = /obj/machinery/chem_master + origin_tech = "materials=3;programming=2;biotech=3" + req_components = list( + /obj/item/weapon/reagent_containers/glass/beaker = 2, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/console_screen = 1) + +/obj/item/weapon/circuitboard/machine/chem_master/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/screwdriver)) + var/new_name = "ChemMaster" + var/new_path = /obj/machinery/chem_master + + if(build_path == /obj/machinery/chem_master) + new_name = "CondiMaster" + new_path = /obj/machinery/chem_master/condimaster + + build_path = new_path + name = "[new_name] 3000 (Machine Board)" + to_chat(user, "You change the circuit board setting to \"[new_name]\".") + else + return ..() + +/obj/item/weapon/circuitboard/machine/chem_master/condi + name = "CondiMaster 3000 (Machine Board)" + build_path = /obj/machinery/chem_master/condimaster + +/obj/item/weapon/circuitboard/machine/circuit_imprinter + name = "Circuit Imprinter (Machine Board)" + build_path = /obj/machinery/r_n_d/circuit_imprinter + origin_tech = "engineering=2;programming=2" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/reagent_containers/glass/beaker = 2) + +/obj/item/weapon/circuitboard/machine/destructive_analyzer + name = "Destructive Analyzer (Machine Board)" + build_path = /obj/machinery/r_n_d/destructive_analyzer + origin_tech = "magnets=2;engineering=2;programming=2" + req_components = list( + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/manipulator = 1, + /obj/item/weapon/stock_parts/micro_laser = 1) + +/obj/item/weapon/circuitboard/machine/experimentor + name = "E.X.P.E.R.I-MENTOR (Machine Board)" + build_path = /obj/machinery/r_n_d/experimentor + origin_tech = "magnets=1;engineering=1;programming=1;biotech=1;bluespace=2" + req_components = list( + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/weapon/stock_parts/micro_laser = 2) + +/obj/item/weapon/circuitboard/machine/protolathe + name = "Protolathe (Machine Board)" + build_path = /obj/machinery/r_n_d/protolathe + origin_tech = "engineering=2;programming=2" + req_components = list( + /obj/item/weapon/stock_parts/matter_bin = 2, + /obj/item/weapon/stock_parts/manipulator = 2, + /obj/item/weapon/reagent_containers/glass/beaker = 2) + +/obj/item/weapon/circuitboard/machine/rdserver + name = "R&D Server (Machine Board)" + build_path = /obj/machinery/r_n_d/server + origin_tech = "programming=3" + req_components = list( + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/scanning_module = 1) + +/obj/item/weapon/circuitboard/machine/bsa/back + name = "Bluespace Artillery Generator (Machine Board)" + build_path = /obj/machinery/bsa/back + origin_tech = "engineering=2;combat=2;bluespace=2" //No freebies! + req_components = list( + /obj/item/weapon/stock_parts/capacitor/quadratic = 5, + /obj/item/stack/cable_coil = 2) + +/obj/item/weapon/circuitboard/machine/bsa/middle + name = "Bluespace Artillery Fusor (Machine Board)" + build_path = /obj/machinery/bsa/middle + origin_tech = "engineering=2;combat=2;bluespace=2" + req_components = list( + /obj/item/weapon/ore/bluespace_crystal = 20, + /obj/item/stack/cable_coil = 2) + +/obj/item/weapon/circuitboard/machine/bsa/front + name = "Bluespace Artillery Bore (Machine Board)" + build_path = /obj/machinery/bsa/front + origin_tech = "engineering=2;combat=2;bluespace=2" + req_components = list( + /obj/item/weapon/stock_parts/manipulator/femto = 5, + /obj/item/stack/cable_coil = 2) + +/obj/item/weapon/circuitboard/machine/dna_vault + name = "DNA Vault (Machine Board)" + build_path = /obj/machinery/dna_vault + origin_tech = "engineering=2;combat=2;bluespace=2" //No freebies! + req_components = list( + /obj/item/weapon/stock_parts/capacitor/super = 5, + /obj/item/weapon/stock_parts/manipulator/pico = 5, + /obj/item/stack/cable_coil = 2) + +/obj/item/weapon/circuitboard/machine/microwave + name = "Microwave (Machine Board)" + build_path = /obj/machinery/microwave + origin_tech = "programming=2;magnets=2" + req_components = list( + /obj/item/weapon/stock_parts/micro_laser = 1, + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/stack/sheet/glass = 1) \ No newline at end of file diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 0dcdf1d7b6..0db6f10438 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -547,7 +547,3 @@ beakers += B1 beakers += B2 - -#undef EMPTY -#undef WIRED -#undef READY diff --git a/code/game/objects/items/weapons/implants/implantchair.dm b/code/game/objects/items/weapons/implants/implantchair.dm index 487b70f8f2..ccfbae5e96 100644 --- a/code/game/objects/items/weapons/implants/implantchair.dm +++ b/code/game/objects/items/weapons/implants/implantchair.dm @@ -20,15 +20,13 @@ var/special = FALSE var/special_name = "special function" -/obj/machinery/implantchair/New() - ..() +/obj/machinery/implantchair/Initialize() + . = ..() open_machine() update_icon() -/obj/machinery/implantchair/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ - datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state) - +/obj/machinery/implantchair/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "implantchair", name, 375, 280, master_ui, state) diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index dff48b6d41..5c245bf4c0 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -377,5 +377,5 @@ max_combined_w_class = 200 w_class = WEIGHT_CLASS_TINY preposition = "in" - can_hold = list(/obj/item/slime_extract, /obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/reagent_containers/blood, /obj/item/weapon/reagent_containers/hypospray/medipen, /obj/item/trash/deadmouse, /obj/item/weapon/reagent_containers/food/snacks/monkeycube) + can_hold = list(/obj/item/slime_extract, /obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/reagent_containers/blood, /obj/item/weapon/reagent_containers/hypospray/medipen, /obj/item/weapon/reagent_containers/food/snacks/deadmouse, /obj/item/weapon/reagent_containers/food/snacks/monkeycube) resistance_flags = FLAMMABLE diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index cc4bee233b..226cea104f 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -196,7 +196,7 @@ if(display_contents_with_number) for(var/datum/numbered_display/ND in display_contents) - ND.sample_object.mouse_opacity = 2 + ND.sample_object.mouse_opacity = MOUSE_OPACITY_OPAQUE ND.sample_object.screen_loc = "[cx]:16,[cy]:16" ND.sample_object.maptext = "[(ND.number > 1)? "[ND.number]" : ""]" ND.sample_object.layer = ABOVE_HUD_LAYER @@ -207,7 +207,7 @@ cy-- else for(var/obj/O in contents) - O.mouse_opacity = 2 //This is here so storage items that spawn with contents correctly have the "click around item to equip" + O.mouse_opacity = MOUSE_OPACITY_OPAQUE //This is here so storage items that spawn with contents correctly have the "click around item to equip" O.screen_loc = "[cx]:16,[cy]:16" O.maptext = "" O.layer = ABOVE_HUD_LAYER @@ -350,7 +350,7 @@ orient2hud(usr) for(var/mob/M in can_see_contents()) show_to(M) - W.mouse_opacity = 2 //So you can click on the area around the item to equip it, instead of having to pixel hunt + W.mouse_opacity = MOUSE_OPACITY_OPAQUE //So you can click on the area around the item to equip it, instead of having to pixel hunt update_icon() return 1 diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm index 9eac23c55c..64fa2ee68e 100644 --- a/code/game/objects/items/weapons/tanks/watertank.dm +++ b/code/game/objects/items/weapons/tanks/watertank.dm @@ -319,7 +319,7 @@ desc = "A compacted ball of expansive resin, used to repair the atmosphere in a room, or seal off breaches." icon = 'icons/effects/effects.dmi' icon_state = "frozen_smoke_capsule" - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT pass_flags = PASSTABLE /obj/effect/resin_container/proc/Smoke() diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 9a25da9019..f6b044a0da 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -321,6 +321,6 @@ icon_state = "direction_bridge" /obj/structure/sign/logo - name = "station logo" - desc = "A sign: SPACE STATION 13." - icon_state = "ss13sign-1" \ No newline at end of file + name = "nanotrasen logo" + desc = "The Nanotrasen corporate logo." + icon_state = "ss13sign-1" diff --git a/code/game/objects/structures/signs.dm.rej b/code/game/objects/structures/signs.dm.rej new file mode 100644 index 0000000000..51eea8f290 --- /dev/null +++ b/code/game/objects/structures/signs.dm.rej @@ -0,0 +1,11 @@ +diff a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm (rejected hunks) +@@ -326,6 +326,6 @@ + icon_state = "direction_bridge" + + /obj/structure/sign/logo +- name = "station logo" +- desc = "A sign: SPACE STATION 13." ++ name = "nanotrasen logo" ++ desc = "The Nanotrasen corporate logo." + icon_state = "nanotrasen_sign1" +\ No newline at end of file diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index c0b2ceaaf3..e0f98e03d1 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -209,7 +209,7 @@ icon_state = "mist" layer = FLY_LAYER anchored = TRUE - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /obj/machinery/shower/attack_hand(mob/M) diff --git a/code/game/sound.dm b/code/game/sound.dm index ff35915b08..86fdceb3c3 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -80,12 +80,13 @@ SEND_SOUND(src, S) -/proc/sound_to_playing_players(sound, volume = 100, vary) - sound = get_sfx(sound) - for(var/M in GLOB.player_list) - if(ismob(M) && !isnewplayer(M)) - var/mob/MO = M - MO.playsound_local(MO, sound, volume, vary, pressure_affected = FALSE) +/proc/sound_to_playing_players(soundin, volume = 100, vary = FALSE, frequency = 0, falloff = FALSE, channel = 0, pressure_affected = FALSE, sound/S) + if(!S) + S = sound(get_sfx(soundin)) + for(var/m in GLOB.player_list) + if(ismob(m) && !isnewplayer(m)) + var/mob/M = m + M.playsound_local(M, null, volume, vary, frequency, falloff, channel, pressure_affected, S) /proc/open_sound_channel() var/static/next_channel = 1 //loop through the available 1024 - (the ones we reserve) channels and pray that its not still being used diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm index 9d6f6ade00..6cb00dba89 100644 --- a/code/game/turfs/simulated/floor/plating/asteroid.dm +++ b/code/game/turfs/simulated/floor/plating/asteroid.dm @@ -104,7 +104,18 @@ return /turf/open/floor/plating/asteroid/singularity_pull(S, current_size) - return + if(dug) + return + switch(current_size) + if(STAGE_THREE) + if(!prob(30)) + gets_dug() + if(STAGE_FOUR) + if(prob(50)) + gets_dug() + else + if(current_size >= STAGE_FIVE && prob(70)) + gets_dug() /turf/open/floor/plating/asteroid/basalt diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 63f01a60bd..99167b247a 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -163,6 +163,12 @@ ..() if(explosion_level && AM.ex_check(explosion_id)) AM.ex_act(explosion_level) + + // If an opaque movable atom moves around we need to potentially update visibility. + if (AM.opacity) + has_opaque_atom = TRUE // Make sure to do this before reconsider_lights(), incase we're on instant updates. Guaranteed to be on in this case. + reconsider_lights() + /turf/open/Entered(atom/movable/AM) ..() diff --git a/code/game/turfs/turf.dm.rej b/code/game/turfs/turf.dm.rej index 1eafa7e8ae..d58adb0f78 100644 --- a/code/game/turfs/turf.dm.rej +++ b/code/game/turfs/turf.dm.rej @@ -1,10 +1 @@ -diff a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm (rejected hunks) -@@ -323,7 +323,7 @@ - M.take_damage(damage*2, BRUTE, "melee", 1) - - /turf/proc/Bless() -- flags |= NOJAUNT -+ flags_1 |= NOJAUNT_1 - - /turf/storage_contents_dump_act(obj/item/storage/src_object, mob/user) - if(src_object.contents.len) +garbage \ No newline at end of file diff --git a/code/game/world.dm b/code/game/world.dm new file mode 100644 index 0000000000..f5b45a46ca --- /dev/null +++ b/code/game/world.dm @@ -0,0 +1,292 @@ +/world/New() + log_world("World loaded at [time_stamp()]") + + SetupExternalRSC() + + GLOB.config_error_log = GLOB.world_href_log = GLOB.world_runtime_log = GLOB.world_attack_log = GLOB.world_game_log = file("data/logs/config_error.log") //temporary file used to record errors with loading config, moved to log directory once logging is set bl + + make_datum_references_lists() //initialises global lists for referencing frequently used datums (so that we only ever do it once) + + config = new + + CheckSchemaVersion() + SetRoundID() + + SetupLogs() + + if(!RunningService()) //tgs2 support + GLOB.revdata.DownloadPRDetails() + + load_motd() + load_admins() + LoadVerbs(/datum/verbs/menu) + if(config.usewhitelist) + load_whitelist() + LoadBans() + + GLOB.timezoneOffset = text2num(time2text(0,"hh")) * 36000 + + Master.Initialize(10, FALSE) + + if(config.irc_announce_new_game) + IRCBroadcast("New round starting on [SSmapping.config.map_name]!") + +/world/proc/SetupExternalRSC() +#if (PRELOAD_RSC == 0) + external_rsc_urls = world.file2list("config/external_rsc_urls.txt","\n") + var/i=1 + while(i<=external_rsc_urls.len) + if(external_rsc_urls[i]) + i++ + else + external_rsc_urls.Cut(i,i+1) +#endif + +/world/proc/CheckSchemaVersion() + if(config.sql_enabled) + if(SSdbcore.Connect()) + log_world("Database connection established.") + var/datum/DBQuery/query_db_version = SSdbcore.NewQuery("SELECT major, minor FROM [format_table_name("schema_revision")] ORDER BY date DESC LIMIT 1") + query_db_version.Execute() + if(query_db_version.NextRow()) + var/db_major = text2num(query_db_version.item[1]) + var/db_minor = text2num(query_db_version.item[2]) + if(db_major < DB_MAJOR_VERSION || db_minor < DB_MINOR_VERSION) + message_admins("Database schema ([db_major].[db_minor]) is behind latest schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") + log_sql("Database schema ([db_major].[db_minor]) is behind latest schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") + else + message_admins("Could not get schema version from database") + else + log_world("Your server failed to establish a connection with the database.") + +/world/proc/SetRoundID() + if(config.sql_enabled) + if(SSdbcore.Connect()) + var/datum/DBQuery/query_round_start = SSdbcore.NewQuery("INSERT INTO [format_table_name("round")] (start_datetime, server_ip, server_port) VALUES (Now(), INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]')") + query_round_start.Execute() + var/datum/DBQuery/query_round_last_id = SSdbcore.NewQuery("SELECT LAST_INSERT_ID()") + query_round_last_id.Execute() + if(query_round_last_id.NextRow()) + GLOB.round_id = query_round_last_id.item[1] + +/world/proc/SetupLogs() + GLOB.log_directory = "data/logs/[time2text(world.realtime, "YYYY/MM/DD")]/round-" + if(GLOB.round_id) + GLOB.log_directory += "[GLOB.round_id]" + else + GLOB.log_directory += "[replacetext(time_stamp(), ":", ".")]" + GLOB.world_game_log = file("[GLOB.log_directory]/game.log") + GLOB.world_attack_log = file("[GLOB.log_directory]/attack.log") + GLOB.world_runtime_log = file("[GLOB.log_directory]/runtime.log") + GLOB.world_href_log = file("[GLOB.log_directory]/hrefs.html") + WRITE_FILE(GLOB.world_game_log, "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------") + WRITE_FILE(GLOB.world_attack_log, "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------") + WRITE_FILE(GLOB.world_runtime_log, "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------") + GLOB.changelog_hash = md5('html/changelog.html') //used for telling if the changelog has changed recently + if(fexists(GLOB.config_error_log)) + fcopy(GLOB.config_error_log, "[GLOB.log_directory]/config_error.log") + fdel(GLOB.config_error_log) + + if(GLOB.round_id) + log_game("Round ID: [GLOB.round_id]") + +/world/Topic(T, addr, master, key) + var/list/input = params2list(T) + + var/pinging = ("ping" in input) + var/playing = ("players" in input) + + if(!pinging && !playing && config && config.log_world_topic) + WRITE_FILE(GLOB.world_game_log, "TOPIC: \"[T]\", from:[addr], master:[master], key:[key]") + + if(input[SERVICE_CMD_PARAM_KEY]) + return ServiceCommand(input) + var/key_valid = (global.comms_allowed && input["key"] == global.comms_key) + + if(pinging) + var/x = 1 + for (var/client/C in GLOB.clients) + x++ + return x + + else if(playing) + var/n = 0 + for(var/mob/M in GLOB.player_list) + if(M.client) + n++ + return n + + else if("ircstatus" in input) //tgs2 support + var/static/last_irc_status = 0 + if(world.time - last_irc_status < 50) + return + var/list/adm = get_admin_counts() + var/list/allmins = adm["total"] + var/status = "Admins: [allmins.len] (Active: [english_list(adm["present"])] AFK: [english_list(adm["afk"])] Stealth: [english_list(adm["stealth"])] Skipped: [english_list(adm["noflags"])]). " + status += "Players: [GLOB.clients.len] (Active: [get_active_player_count(0,1,0)]). Mode: [SSticker.mode.name]." + send2irc("Status", status) + last_irc_status = world.time + + else if("status" in input) + var/list/s = list() + s["version"] = GLOB.game_version + s["mode"] = GLOB.master_mode + s["respawn"] = config ? GLOB.abandon_allowed : 0 + s["enter"] = GLOB.enter_allowed + s["vote"] = config.allow_vote_mode + s["ai"] = config.allow_ai + s["host"] = host ? host : null + s["active_players"] = get_active_player_count() + s["players"] = GLOB.clients.len + s["revision"] = GLOB.revdata.commit + s["revision_date"] = GLOB.revdata.date + + var/list/adm = get_admin_counts() + var/list/presentmins = adm["present"] + var/list/afkmins = adm["afk"] + s["admins"] = presentmins.len + afkmins.len //equivalent to the info gotten from adminwho + s["gamestate"] = SSticker.current_state + + s["map_name"] = SSmapping.config.map_name + + if(key_valid && SSticker.HasRoundStarted()) + s["real_mode"] = SSticker.mode.name + // Key-authed callers may know the truth behind the "secret" + + s["security_level"] = get_security_level() + s["round_duration"] = SSticker ? round((world.time-SSticker.round_start_time)/10) : 0 + // Amount of world's ticks in seconds, useful for calculating round duration + + if(SSshuttle && SSshuttle.emergency) + s["shuttle_mode"] = SSshuttle.emergency.mode + // Shuttle status, see /__DEFINES/stat.dm + s["shuttle_timer"] = SSshuttle.emergency.timeLeft() + // Shuttle timer, in seconds + + return list2params(s) + + else if("announce" in input) + if(!key_valid) + return "Bad Key" + else + AnnouncePR(input["announce"], json_decode(input["payload"])) + + else if("crossmessage" in input) + if(!key_valid) + return + else + if(input["crossmessage"] == "Ahelp") + relay_msg_admins("HELP: [input["source"]] [input["message_sender"]]: [input["message"]]") + if(input["crossmessage"] == "Comms_Console") + minor_announce(input["message"], "Incoming message from [input["message_sender"]]") + for(var/obj/machinery/computer/communications/CM in GLOB.machines) + CM.overrideCooldown() + if(input["crossmessage"] == "News_Report") + minor_announce(input["message"], "Breaking Update From [input["message_sender"]]") + + else if("adminmsg" in input) //tgs2 support + if(!key_valid) + return "Bad Key" + else + return IrcPm(input["adminmsg"],input["msg"],input["sender"]) + + else if("namecheck" in input) //tgs2 support + if(!key_valid) + return "Bad Key" + else + log_admin("IRC Name Check: [input["sender"]] on [input["namecheck"]]") + message_admins("IRC name checking on [input["namecheck"]] from [input["sender"]]") + return keywords_lookup(input["namecheck"],1) + else if("adminwho" in input) //tgs2 support + if(!key_valid) + return "Bad Key" + else + return ircadminwho() + else if("server_hop" in input) + show_server_hop_transfer_screen(input["server_hop"]) + +/world/proc/AnnouncePR(announcement, list/payload) + var/static/list/PRcounts = list() //PR id -> number of times announced this round + var/id = "[payload["pull_request"]["id"]]" + if(!PRcounts[id]) + PRcounts[id] = 1 + else + ++PRcounts[id] + if(PRcounts[id] > PR_ANNOUNCEMENTS_PER_ROUND) + return + + var/final_composed = "PR: [announcement]" + for(var/client/C in GLOB.clients) + C.AnnouncePR(final_composed) + +/world/Reboot(reason = 0, fast_track = FALSE) + ServiceReboot() //handles alternative actions if necessary + if (reason || fast_track) //special reboot, do none of the normal stuff + if (usr) + log_admin("[key_name(usr)] Has requested an immediate world restart via client side debugging tools") + message_admins("[key_name_admin(usr)] Has requested an immediate world restart via client side debugging tools") + to_chat(world, "Rebooting World immediately due to host request") + else + to_chat(world, "Rebooting world...") + Master.Shutdown() //run SS shutdowns + log_world("World rebooted at [time_stamp()]") + ..() + +/world/proc/load_motd() + GLOB.join_motd = file2text("config/motd.txt") + "
" + GLOB.revdata.GetTestMergeInfo() + +/world/proc/update_status() + var/s = "" + + if (config && config.server_name) + s += "[config.server_name] — " + + s += "[station_name()]"; + s += " (" + s += "" //Change this to wherever you want the hub to link to. + s += "Default" //Replace this with something else. Or ever better, delete it and uncomment the game version. + s += "" + s += ")" + + var/list/features = list() + + if(GLOB.master_mode) + features += GLOB.master_mode + + if (!GLOB.enter_allowed) + features += "closed" + + features += GLOB.abandon_allowed ? "respawn" : "no respawn" + + if (config && config.allow_vote_mode) + features += "vote" + + if (config && config.allow_ai) + features += "AI allowed" + + var/n = 0 + for (var/mob/M in GLOB.player_list) + if (M.client) + n++ + + if (n > 1) + features += "~[n] players" + else if (n > 0) + features += "~[n] player" + + if (!host && config && config.hostedby) + features += "hosted by [config.hostedby]" + + if (features) + s += ": [jointext(features, ", ")]" + + status = s + +/world/proc/update_hub_visibility(new_visibility) + if(new_visibility == GLOB.hub_visibility) + return + GLOB.hub_visibility = new_visibility + if(GLOB.hub_visibility) + hub_password = "kMZy3U5jJHSiBQjr" + else + hub_password = "SORRYNOPASSWORD" diff --git a/code/modules/VR/vr_sleeper.dm b/code/modules/VR/vr_sleeper.dm index a095840b09..a83ced850e 100644 --- a/code/modules/VR/vr_sleeper.dm +++ b/code/modules/VR/vr_sleeper.dm @@ -52,8 +52,7 @@ /obj/machinery/vr_sleeper/Destroy() open_machine() cleanup_vr_human() - qdel(sparks) - sparks = null + QDEL_NULL(sparks) return ..() diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index a839b35b3c..b99f9228b9 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -12,6 +12,7 @@ GLOBAL_LIST_INIT(admin_verbs_default, world.AVerbsDefault()) /client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/ /client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/ /client/proc/secrets, + /client/proc/toggle_hear_radio, /*allows admins to hide all radio output*/ /client/proc/reload_admins, /client/proc/reestablish_db_connection, /*reattempt a connection to the database*/ /client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/ @@ -456,7 +457,7 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list( mob.invisibility = INVISIBILITY_MAXIMUM //JUST IN CASE mob.alpha = 0 //JUUUUST IN CASE mob.name = " " - mob.mouse_opacity = 0 + mob.mouse_opacity = MOUSE_OPACITY_TRANSPARENT log_admin("[key_name(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]") message_admins("[key_name_admin(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]") SSblackbox.add_details("admin_verb","Stealth Mode") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 66438d1fac..ad87a8e417 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -505,12 +505,13 @@ GLOBAL_PROTECT(AdminProcCallCount) var/list/areas_with_LS = list() var/list/areas_with_intercom = list() var/list/areas_with_camera = list() + var/list/station_areas_blacklist = typecacheof(list(/area/holodeck/rec_center, /area/shuttle, /area/engine/supermatter, /area/science/test_area, /area/space, /area/solar, /area/mine, /area/ruin)) for(var/area/A in world) if(on_station) var/turf/picked = safepick(get_area_turfs(A.type)) if(picked && (picked.z == ZLEVEL_STATION)) - if(!(A.type in areas_all)) + if(!(A.type in areas_all) && !is_type_in_typecache(A, station_areas_blacklist)) areas_all.Add(A.type) else if(!(A.type in areas_all)) areas_all.Add(A.type) diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm index 12d012e3f8..a39a9059f3 100644 --- a/code/modules/atmospherics/environmental/LINDA_fire.dm +++ b/code/modules/atmospherics/environmental/LINDA_fire.dm @@ -45,7 +45,7 @@ //This is the icon for fire on turfs, also helps for nurturing small fires until they are full tile /obj/effect/hotspot anchored = TRUE - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT icon = 'icons/effects/fire.dmi' icon_state = "1" layer = ABOVE_OPEN_TURF_LAYER diff --git a/code/modules/atmospherics/gasmixtures/gas_types.dm b/code/modules/atmospherics/gasmixtures/gas_types.dm index 60364086a5..2135b9fbd0 100644 --- a/code/modules/atmospherics/gasmixtures/gas_types.dm +++ b/code/modules/atmospherics/gasmixtures/gas_types.dm @@ -95,7 +95,7 @@ GLOBAL_LIST_INIT(hardcoded_gases, list("o2","n2","co2","plasma")) //the main fou /obj/effect/overlay/gas icon = 'icons/effects/tile_effects.dmi' - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT layer = FLY_LAYER appearance_flags = TILE_BOUND diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index b55ed7e84f..9cc914057d 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -9,9 +9,10 @@ max_integrity = 350 armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 30, acid = 30) layer = ABOVE_WINDOW_LAYER + state_open = FALSE + circuit = /obj/item/weapon/circuitboard/machine/cryo_tube var/on = FALSE - state_open = FALSE var/autoeject = FALSE var/volume = 100 @@ -35,8 +36,6 @@ /obj/machinery/atmospherics/components/unary/cryo_cell/Initialize() . = ..() initialize_directions = dir - var/obj/item/weapon/circuitboard/machine/cryo_tube/B = new - B.apply_default_parts(src) radio = new(src) radio.keyslot = new radio_key @@ -44,16 +43,6 @@ radio.canhear_range = 0 radio.recalculateChannels() -/obj/item/weapon/circuitboard/machine/cryo_tube - name = "Cryotube (Machine Board)" - build_path = /obj/machinery/atmospherics/components/unary/cryo_cell - origin_tech = "programming=4;biotech=3;engineering=4;plasmatech=3" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/console_screen = 1, - /obj/item/stack/sheet/glass = 2) - /obj/machinery/atmospherics/components/unary/cryo_cell/on_construction() ..(dir, dir) @@ -69,11 +58,8 @@ conduction_coefficient = initial(conduction_coefficient) * C /obj/machinery/atmospherics/components/unary/cryo_cell/Destroy() - qdel(radio) - radio = null - if(beaker) - qdel(beaker) - beaker = null + QDEL_NULL(radio) + QDEL_NULL(beaker) return ..() /obj/machinery/atmospherics/components/unary/cryo_cell/contents_explosion(severity, target) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 32789011ae..9a981ae81b 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -10,6 +10,7 @@ max_integrity = 300 armor = list(melee = 0, bullet = 0, laser = 0, energy = 100, bomb = 0, bio = 100, rad = 100, fire = 80, acid = 30) layer = OBJ_LAYER + circuit = /obj/item/weapon/circuitboard/machine/thermomachine var/on = FALSE var/min_temperature = 0 @@ -18,49 +19,9 @@ var/heat_capacity = 0 var/interactive = TRUE // So mapmakers can disable interaction. -/obj/machinery/atmospherics/components/unary/thermomachine/New() - ..() - initialize_directions = dir - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/thermomachine(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/thermomachine - name = "Thermomachine (Machine Board)" - desc = "You can use a screwdriver to switch between heater and freezer." - origin_tech = "programming=3;plasmatech=3" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 2, - /obj/item/weapon/stock_parts/micro_laser = 2, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/machine/thermomachine/Initialize() +/obj/machinery/atmospherics/components/unary/thermomachine/Initialize() . = ..() - if(prob(50)) - name = "Freezer (Machine Board)" - build_path = /obj/machinery/atmospherics/components/unary/thermomachine/freezer - else - name = "Heater (Machine Board)" - build_path = /obj/machinery/atmospherics/components/unary/thermomachine/heater - -/obj/item/weapon/circuitboard/machine/thermomachine/attackby(obj/item/I, mob/user, params) - var/obj/item/weapon/circuitboard/machine/freezer = /obj/item/weapon/circuitboard/machine/thermomachine/freezer - var/obj/item/weapon/circuitboard/machine/heater = /obj/item/weapon/circuitboard/machine/thermomachine/heater - var/obj/item/weapon/circuitboard/machine/newtype - - if(istype(I, /obj/item/weapon/screwdriver)) - var/new_setting = "Heater" - playsound(src.loc, I.usesound, 50, 1) - if(build_path == initial(heater.build_path)) - newtype = freezer - new_setting = "Freezer" - else - newtype = heater - name = initial(newtype.name) - build_path = initial(newtype.build_path) - to_chat(user, "You change the circuitboard setting to \"[new_setting]\".") - else - return ..() + initialize_directions = dir /obj/machinery/atmospherics/components/unary/thermomachine/on_construction() ..(dir,dir) @@ -202,15 +163,7 @@ icon_state_open = "freezer-o" max_temperature = T20C min_temperature = 170 - -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/thermomachine/freezer(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/thermomachine/freezer - name = "Freezer (Machine Board)" - build_path = /obj/machinery/atmospherics/components/unary/thermomachine/freezer + circuit = /obj/item/weapon/circuitboard/machine/thermomachine/freezer /obj/machinery/atmospherics/components/unary/thermomachine/freezer/RefreshParts() ..() @@ -227,15 +180,7 @@ icon_state_open = "heater-o" max_temperature = 140 min_temperature = T20C - -/obj/machinery/atmospherics/components/unary/thermomachine/heater/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/thermomachine/heater(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/thermomachine/heater - name = "Heater (Machine Board)" - build_path = /obj/machinery/atmospherics/components/unary/thermomachine/heater + circuit = /obj/item/weapon/circuitboard/machine/thermomachine/heater /obj/machinery/atmospherics/components/unary/thermomachine/heater/RefreshParts() ..() diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm index 26c27c7be4..cca108757a 100644 --- a/code/modules/atmospherics/machinery/portable/pump.dm +++ b/code/modules/atmospherics/machinery/portable/pump.dm @@ -16,7 +16,7 @@ volume = 1000 /obj/machinery/portable_atmospherics/pump/Initialize() - ..() + . = ..() pump = new(src, FALSE) pump.on = TRUE pump.stat = 0 @@ -26,8 +26,7 @@ var/turf/T = get_turf(src) T.assume_air(air_contents) air_update_turf() - qdel(pump) - pump = null + QDEL_NULL(pump) return ..() /obj/machinery/portable_atmospherics/pump/update_icon() diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index 38e9b1f68a..8bcbc3a892 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -30,13 +30,11 @@ var/reset_path = /obj/effect/ctf/flag_reset /obj/item/weapon/twohanded/ctf/Destroy() - if(reset) - qdel(reset) - reset = null - . = ..() + QDEL_NULL(reset) + return ..() /obj/item/weapon/twohanded/ctf/Initialize() - ..() + . = ..() SET_SECONDARY_FLAG(src, SLOWS_WHILE_IN_HAND) if(!reset) reset = new reset_path(get_turf(src)) diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index e533d625cc..9983219e2e 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -22,7 +22,7 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation) switch(dir) if(SOUTH,SOUTHEAST,SOUTHWEST) density = FALSE - ..() + return ..() /obj/machinery/gateway/proc/toggleoff() for(var/obj/machinery/gateway/G in linked) @@ -75,10 +75,13 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation) /obj/machinery/gateway/proc/toggleon(mob/user) return FALSE -/obj/machinery/gateway/centerstation/New() - ..() +/obj/machinery/gateway/centerstation/Initialize() + . = ..() if(!GLOB.the_gateway) GLOB.the_gateway = src + update_icon() + wait = world.time + config.gateway_delay //+ thirty minutes default + awaygate = locate(/obj/machinery/gateway/centeraway) /obj/machinery/gateway/centerstation/Destroy() if(GLOB.the_gateway == src) @@ -96,12 +99,6 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation) var/obj/machinery/gateway/centeraway/awaygate = null can_link = TRUE -/obj/machinery/gateway/centerstation/Initialize() - ..() - update_icon() - wait = world.time + config.gateway_delay //+ thirty minutes default - awaygate = locate(/obj/machinery/gateway/centeraway) - /obj/machinery/gateway/centerstation/update_icon() if(active) icon_state = "oncenter" @@ -182,7 +179,7 @@ GLOBAL_DATUM(the_gateway, /obj/machinery/gateway/centerstation) /obj/machinery/gateway/centeraway/Initialize() - ..() + . = ..() update_icon() stationgate = locate(/obj/machinery/gateway/centerstation) diff --git a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm index 7926cfc34d..cd48386d62 100644 --- a/code/modules/cargo/console.dm +++ b/code/modules/cargo/console.dm @@ -18,8 +18,8 @@ circuit = /obj/item/weapon/circuitboard/computer/cargo/request requestonly = TRUE -/obj/machinery/computer/cargo/New() - ..() +/obj/machinery/computer/cargo/Initialize() + . = ..() var/obj/item/weapon/circuitboard/computer/cargo/board = circuit contraband = board.contraband emagged = board.emagged diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 263b5c5d30..c9fe711b00 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -1778,9 +1778,7 @@ name = "Shield System Control Board" cost = 5000 special = TRUE - contains = list( - /obj/item/weapon/circuitboard/machine/computer/sat_control - ) + contains = list(/obj/item/weapon/circuitboard/computer/sat_control) crate_name= "shield control board crate" /datum/supply_pack/misc/bicycle diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 20b4440b97..637c3e2bec 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -72,9 +72,9 @@ to_chat(src, "Your previous action was ignored because you've done too many in a second") return - //Logs all hrefs - WRITE_FILE(GLOB.world_href_log, "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
") - + //Logs all hrefs, except chat pings + if(!(href_list["_src_"] == "chat" && href_list["proc"] == "ping" && LAZYLEN(href_list) == 2)) + WRITE_FILE(GLOB.world_href_log, "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
") // Admin PM if(href_list["priv_msg"]) cmd_admin_pm(href_list["priv_msg"],null) diff --git a/code/modules/client/client_procs.dm.rej b/code/modules/client/client_procs.dm.rej new file mode 100644 index 0000000000..2b656938c4 --- /dev/null +++ b/code/modules/client/client_procs.dm.rej @@ -0,0 +1,10 @@ +diff a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm (rejected hunks) +@@ -73,7 +73,7 @@ + return + + //Logs all hrefs, except chat pings +- if(href_list["proc"] != "ping") ++ if(!(href_list["_src_"] == "chat" && href_list["proc"] == "ping" && LAZYLEN(href_list) == 2)) + WRITE_FILE(GLOB.world_href_log, "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
") + + // Admin PM diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 4c23db3f86..9104b3d767 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -431,7 +431,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("snout" in pref_species.mutant_bodyparts) dat += "Snout: [features["snout"]]
" if("horns" in pref_species.mutant_bodyparts) - dat += "Snout: [features["horns"]]
" + dat += "Horns: [features["horns"]]
" if("frills" in pref_species.mutant_bodyparts) dat += "Frills: [features["frills"]]
" if("spines" in pref_species.mutant_bodyparts) diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index 3127bdef4c..bfaa8a55c6 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -245,7 +245,7 @@ anchored = TRUE invisibility = INVISIBILITY_ABSTRACT opacity = 0 - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/mob/holder = null var/phase_time = 0 var/phase_time_length = 3 diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index dc318cd2a1..5fe3d018fb 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -314,7 +314,7 @@ anchored = TRUE density = FALSE layer = SPACEVINE_LAYER - mouse_opacity = 2 //Clicking anywhere on the turf is good enough + mouse_opacity = MOUSE_OPACITY_OPAQUE //Clicking anywhere on the turf is good enough pass_flags = PASSTABLE | PASSGRILLE max_integrity = 50 var/energy = 0 diff --git a/code/modules/fields/peaceborg_dampener.dm b/code/modules/fields/peaceborg_dampener.dm index cedce76369..a480459f38 100644 --- a/code/modules/fields/peaceborg_dampener.dm +++ b/code/modules/fields/peaceborg_dampener.dm @@ -54,7 +54,7 @@ var/obj/effect/abstract/proximity_checker/advanced/F = edge_turfs[T] F.appearance = I.appearance F.invisibility = 0 - F.mouse_opacity = 0 + F.mouse_opacity = MOUSE_OPACITY_TRANSPARENT F.layer = 5 /datum/proximity_monitor/advanced/peaceborg_dampener/cleanup_edge_turf(turf/T) diff --git a/code/modules/fields/turf_objects.dm b/code/modules/fields/turf_objects.dm index e50be26ff1..c1efef1ed4 100644 --- a/code/modules/fields/turf_objects.dm +++ b/code/modules/fields/turf_objects.dm @@ -7,7 +7,7 @@ alpha = 0 invisibility = INVISIBILITY_ABSTRACT flags = ABSTRACT|ON_BORDER - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/datum/proximity_monitor/advanced/parent = null /obj/effect/abstract/proximity_checker/advanced/Initialize(mapload, _monitor) diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index 8f567c6a5c..14ed6280c4 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -31,7 +31,7 @@ if(!canconsume(M, user)) return 0 - + if (!is_open_container()) to_chat(user, "[src]'s lid hasn't been opened!") return 0 @@ -47,7 +47,9 @@ return // The drink might be empty after the delay, such as by spam-feeding M.visible_message("[user] feeds the contents of [src] to [M].", "[user] feeds the contents of [src] to [M].") add_logs(user, M, "fed", reagentlist(src)) + var/fraction = min(gulp_size/reagents.total_volume, 1) + checkLiked(fraction, M) reagents.reaction(M, INGEST, fraction) reagents.trans_to(M, gulp_size) playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1) @@ -56,7 +58,7 @@ /obj/item/weapon/reagent_containers/food/drinks/afterattack(obj/target, mob/user , proximity) if(!proximity) return if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. - + if (!is_open_container()) to_chat(user, "[target]'s tab isn't open!") return @@ -97,10 +99,10 @@ to_chat(user, "You heat [src] with [I].") reagents.handle_reactions() ..() - - + + //////////////////////////////////////////////////////////////////////////////// @@ -200,19 +202,24 @@ name = "Dutch Hot Coco" desc = "Made in Space South America." list_reagents = list("hot_coco" = 30, "sugar" = 5) + foodtype = SUGAR + resistance_flags = FREEZE_PROOF + /obj/item/weapon/reagent_containers/food/drinks/dry_ramen name = "Cup Ramen" desc = "Just add 10ml of water, self heats! A taste that reminds you of your school years." icon_state = "ramen" list_reagents = list("dry_ramen" = 30) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/drinks/beer name = "Space Beer" desc = "Beer. In space." icon_state = "beer" list_reagents = list("beer" = 30) + foodtype = GRAIN | ALCOHOL /obj/item/weapon/reagent_containers/food/drinks/ale name = "Magm-Ale" @@ -220,6 +227,7 @@ icon_state = "alebottle" item_state = "beer" list_reagents = list("ale" = 30) + foodtype = GRAIN | ALCOHOL /obj/item/weapon/reagent_containers/food/drinks/sillycup name = "paper cup" @@ -248,26 +256,32 @@ icon_state = "orangebox" name = "orange juice box" desc = "A great source of vitamins. Stay healthy!" + foodtype = FRUIT if("milk") icon_state = "milkbox" name = "carton of milk" desc = "An excellent source of calcium for growing space explorers." + foodtype = DAIRY if("applejuice") icon_state = "juicebox" name = "apple juice box" desc = "Sweet apple juice. Don't be late for school!" + foodtype = FRUIT if("grapejuice") icon_state = "grapebox" name = "grape juice box" desc = "Tasty grape juice in a fun little container. Non-alcoholic!" + foodtype = FRUIT if("chocolate_milk") icon_state = "chocolatebox" name = "carton of chocolate milk" desc = "Milk for cool kids!" + foodtype = SUGAR if("eggnog") icon_state = "nog2" name = "carton of eggnog" desc = "For enjoying the most wonderful time of the year." + foodtype = MEAT else icon_state = "juicebox" name = "small carton" @@ -334,7 +348,7 @@ righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' container_type = 0 spillable = FALSE - + /obj/item/weapon/reagent_containers/food/drinks/soda_cans/attack(mob/M, mob/user) if(M == user && !src.reagents.total_volume && user.a_intent == INTENT_HARM && user.zone_selected == "head") user.visible_message("[user] crushes the can of [src] on [user.p_their()] forehead!", "You crush the can of [src] on your forehead.") @@ -343,7 +357,7 @@ crushed_can.icon_state = icon_state qdel(src) ..() - + /obj/item/weapon/reagent_containers/food/drinks/soda_cans/attack_self(mob/user) if(!is_open_container()) @@ -359,12 +373,14 @@ desc = "Cola. in space." icon_state = "cola" list_reagents = list("cola" = 30) + foodtype = SUGAR /obj/item/weapon/reagent_containers/food/drinks/soda_cans/tonic name = "T-Borg's Tonic Water" desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." icon_state = "tonic" list_reagents = list("tonic" = 50) + foodtype = ALCOHOL /obj/item/weapon/reagent_containers/food/drinks/soda_cans/sodawater name = "Soda Water" @@ -377,6 +393,7 @@ desc = "You wanted ORANGE. It gave you Lemon Lime." icon_state = "lemon-lime" list_reagents = list("lemon_lime" = 30) + foodtype = FRUIT /obj/item/weapon/reagent_containers/food/drinks/soda_cans/lemon_lime/New() ..() @@ -387,30 +404,35 @@ desc = "Tastes like a hull breach in your mouth." icon_state = "space-up" list_reagents = list("space_up" = 30) + foodtype = SUGAR | JUNKFOOD /obj/item/weapon/reagent_containers/food/drinks/soda_cans/starkist name = "Star-kist" desc = "The taste of a star in liquid form. And, a bit of tuna...?" icon_state = "starkist" list_reagents = list("cola" = 15, "orangejuice" = 15) + foodtype = SUGAR | FRUIT | JUNKFOOD /obj/item/weapon/reagent_containers/food/drinks/soda_cans/space_mountain_wind name = "Space Mountain Wind" desc = "Blows right through you like a space wind." icon_state = "space_mountain_wind" list_reagents = list("spacemountainwind" = 30) + foodtype = SUGAR | JUNKFOOD /obj/item/weapon/reagent_containers/food/drinks/soda_cans/thirteenloko name = "Thirteen Loko" desc = "The CMO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkenness, or even death. Please Drink Responsibly." icon_state = "thirteen_loko" list_reagents = list("thirteenloko" = 30) + foodtype = SUGAR | JUNKFOOD /obj/item/weapon/reagent_containers/food/drinks/soda_cans/dr_gibb name = "Dr. Gibb" desc = "A delicious mixture of 42 different flavors." icon_state = "dr_gibb" list_reagents = list("dr_gibb" = 30) + foodtype = SUGAR | JUNKFOOD /obj/item/weapon/reagent_containers/food/drinks/soda_cans/pwr_game name = "Pwr Game" @@ -423,6 +445,7 @@ desc = "~Shake me up some of that Shambler's Juice!~" icon_state = "shamblers" list_reagents = list("shamblers" = 30) + foodtype = SUGAR | JUNKFOOD /obj/item/weapon/reagent_containers/food/drinks/soda_cans/air name = "Canned Air" diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index dd9d914f18..73e20811e7 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -13,6 +13,7 @@ righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' var/const/duration = 13 //Directly relates to the 'knockdown' duration. Lowered by armor (i.e. helmets) var/isGlass = 1 //Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it + foodtype = ALCOHOL /obj/item/weapon/reagent_containers/food/drinks/bottle/throw_impact(atom/target,mob/thrower) ..() @@ -174,6 +175,7 @@ desc = "A bottle filled with nothing." icon_state = "bottleofnothing" list_reagents = list("nothing" = 100) + foodtype = NONE /obj/item/weapon/reagent_containers/food/drinks/bottle/patron name = "Wrapp Artiste Patron" @@ -192,6 +194,7 @@ desc = "A flask of the chaplain's holy water." icon_state = "holyflask" list_reagents = list("holywater" = 100) + foodtype = NONE /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater/hell desc = "A flask of holy water...it's been sitting in the Necropolis a while though." @@ -208,6 +211,7 @@ desc = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936, HONK." icon_state = "kahluabottle" list_reagents = list("kahlua" = 100) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager name = "College Girl Goldschlager" @@ -226,6 +230,7 @@ desc = "A faint aura of unease and asspainery surrounds the bottle." icon_state = "winebottle" list_reagents = list("wine" = 100) + foodtype = FRUIT | ALCOHOL /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe name = "Extra-Strong Absinthe" @@ -285,6 +290,7 @@ desc = "An alcoholic beverage from Space China, made by infusing lizard tails in ethanol. Inexplicably popular among command staff." icon_state = "lizardwine" list_reagents = list("lizardwine" = 100) + foodtype = FRUIT | ALCOHOL /obj/item/weapon/reagent_containers/food/drinks/bottle/hcider name = "Jian Hard Cider" @@ -310,6 +316,7 @@ righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' isGlass = 0 list_reagents = list("orangejuice" = 100) + foodtype = FRUIT /obj/item/weapon/reagent_containers/food/drinks/bottle/cream name = "Milk Cream" @@ -320,6 +327,7 @@ righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' isGlass = 0 list_reagents = list("cream" = 100) + foodtype = DAIRY /obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice name = "Tomato Juice" @@ -330,6 +338,7 @@ righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' isGlass = 0 list_reagents = list("tomatojuice" = 100) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice name = "Lime Juice" @@ -340,6 +349,7 @@ righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' isGlass = 0 list_reagents = list("limejuice" = 100) + foodtype = FRUIT ////////////////////////// MOLOTOV /////////////////////// diff --git a/code/modules/food_and_drinks/food.dm b/code/modules/food_and_drinks/food.dm index 9d39e51e63..2a7ce2e8ec 100644 --- a/code/modules/food_and_drinks/food.dm +++ b/code/modules/food_and_drinks/food.dm @@ -6,8 +6,26 @@ volume = 50 //Sets the default container amount for all food items. container_type = INJECTABLE resistance_flags = FLAMMABLE + var/foodtype = NONE + var/last_check_time /obj/item/weapon/reagent_containers/food/New() ..() pixel_x = rand(-5, 5) //Randomizes postion slightly. - pixel_y = rand(-5, 5) \ No newline at end of file + pixel_y = rand(-5, 5) + + +/obj/item/weapon/reagent_containers/food/proc/checkLiked(var/fraction, mob/M) + if(last_check_time + 50 < world.time) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(foodtype & H.dna.species.toxic_food) + to_chat(H,"What the hell was that thing?!") + H.adjust_disgust(25 + 30 * fraction) + else if(foodtype & H.dna.species.disliked_food) + to_chat(H,"That didn't taste very good...") + H.adjust_disgust(11 + 15 * fraction) + else if(foodtype & H.dna.species.liked_food) + to_chat(H,"I love this taste!") + H.adjust_disgust(-5 + -2.5 * fraction) + last_check_time = world.time diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index 31baa1bd90..03de5129f6 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -53,6 +53,7 @@ ingredients += S mix_filling_color(S) S.reagents.trans_to(src,min(S.reagents.total_volume, 15)) //limit of 15, we don't want our custom food to be completely filled by just one ingredient with large reagent volume. + foodtype |= S.foodtype update_overlays(S) to_chat(user, "You add the [I.name] to the [name].") update_name(S) @@ -158,6 +159,7 @@ ingredients_placement = INGREDIENTS_STACKPLUSTOP icon = 'icons/obj/food/burgerbread.dmi' icon_state = "bun" + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/customizable/bread @@ -167,6 +169,7 @@ slices_num = 5 icon = 'icons/obj/food/burgerbread.dmi' icon_state = "tofubread" + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/customizable/cake @@ -176,6 +179,7 @@ slices_num = 5 icon = 'icons/obj/food/piecake.dmi' icon_state = "plaincake" + foodtype = GRAIN | DAIRY /obj/item/weapon/reagent_containers/food/snacks/customizable/kebab @@ -187,7 +191,6 @@ ingMax = 6 icon_state = "rod" - /obj/item/weapon/reagent_containers/food/snacks/customizable/pasta name = "spaghetti" desc = "Noodles. With stuff. Delicious." @@ -195,6 +198,7 @@ ingMax = 6 icon = 'icons/obj/food/pizzaspaghetti.dmi' icon_state = "spaghettiboiled" + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/customizable/pie @@ -202,6 +206,7 @@ ingMax = 6 icon = 'icons/obj/food/piecake.dmi' icon_state = "pie" + foodtype = GRAIN | DAIRY /obj/item/weapon/reagent_containers/food/snacks/customizable/pizza @@ -213,6 +218,7 @@ slices_num = 6 icon = 'icons/obj/food/pizzaspaghetti.dmi' icon_state = "pizzamargherita" + foodtype = GRAIN | DAIRY /obj/item/weapon/reagent_containers/food/snacks/customizable/salad @@ -231,6 +237,7 @@ icon = 'icons/obj/food/burgerbread.dmi' icon_state = "breadslice" var/finished = 0 + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich/initialize_custom_food(obj/item/weapon/reagent_containers/BASE, obj/item/I, mob/user) icon_state = BASE.icon_state diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 8964e7ebaa..c5a737232e 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -70,7 +70,6 @@ if(junkiness && M.satiety < -150 && M.nutrition > NUTRITION_LEVEL_STARVING + 50 ) to_chat(M, "You don't feel like eating any more junk food at the moment.") return 0 - else if(fullness <= 50) to_chat(M, "You hungrily [eatverb] some of \the [src] and gobble it down!") else if(fullness > 50 && fullness < 150) @@ -107,12 +106,13 @@ M.satiety -= junkiness playsound(M.loc,'sound/items/eatfood.ogg', rand(10,50), 1) if(reagents.total_volume) - var/fraction = min(bitesize/reagents.total_volume, 1) + var/fraction = min(bitesize / reagents.total_volume, 1) reagents.reaction(M, INGEST, fraction) reagents.trans_to(M, bitesize) bitecount++ On_Consume() - return 1 + checkLiked(fraction, M) + return 1 return 0 diff --git a/code/modules/food_and_drinks/food/snacks/dough.dm b/code/modules/food_and_drinks/food/snacks/dough.dm index 73e99c9d1d..9ef2390002 100644 --- a/code/modules/food_and_drinks/food/snacks/dough.dm +++ b/code/modules/food_and_drinks/food/snacks/dough.dm @@ -11,6 +11,7 @@ list_reagents = list("nutriment" = 6) w_class = WEIGHT_CLASS_NORMAL tastes = list("dough" = 1) + foodtype = GRAIN // Dough + rolling pin = flat dough @@ -38,6 +39,7 @@ list_reagents = list("nutriment" = 6) w_class = WEIGHT_CLASS_NORMAL tastes = list("dough" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/pizzabread name = "pizza bread" @@ -48,6 +50,7 @@ list_reagents = list("nutriment" = 7) w_class = WEIGHT_CLASS_NORMAL tastes = list("bread" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/doughslice @@ -58,6 +61,7 @@ cooked_type = /obj/item/weapon/reagent_containers/food/snacks/bun filling_color = "#CD853F" tastes = list("dough" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/bun @@ -69,6 +73,7 @@ custom_food_type = /obj/item/weapon/reagent_containers/food/snacks/customizable/burger filling_color = "#CD853F" tastes = list("bun" = 1) // the bun tastes of bun. + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/cakebatter name = "cake batter" @@ -79,6 +84,7 @@ list_reagents = list("nutriment" = 9) w_class = WEIGHT_CLASS_NORMAL tastes = list("batter" = 1) + foodtype = GRAIN | DAIRY // Cake batter + rolling pin = pie dough /obj/item/weapon/reagent_containers/food/snacks/cakebatter/attackby(obj/item/I, mob/user, params) @@ -103,6 +109,7 @@ list_reagents = list("nutriment" = 9) w_class = WEIGHT_CLASS_NORMAL tastes = list("dough" = 1) + foodtype = GRAIN | DAIRY /obj/item/weapon/reagent_containers/food/snacks/rawpastrybase name = "raw pastry base" @@ -113,6 +120,7 @@ filling_color = "#CD853F" list_reagents = list("nutriment" = 1) tastes = list("raw pastry" = 1) + foodtype = GRAIN | DAIRY /obj/item/weapon/reagent_containers/food/snacks/pastrybase name = "pastry base" @@ -122,4 +130,4 @@ list_reagents = list("nutriment" = 1) filling_color = "#CD853F" tastes = list("pastry" = 1) - + foodtype = GRAIN | DAIRY diff --git a/code/modules/food_and_drinks/food/snacks/meat.dm b/code/modules/food_and_drinks/food/snacks/meat.dm index c1b5a55ac0..78d5ab9ac9 100644 --- a/code/modules/food_and_drinks/food/snacks/meat.dm +++ b/code/modules/food_and_drinks/food/snacks/meat.dm @@ -14,6 +14,7 @@ slices_num = 3 filling_color = "#FF0000" tastes = list("meat" = 1) + foodtype = MEAT | RAW /obj/item/weapon/reagent_containers/food/snacks/meat/slab/initialize_slice(obj/item/weapon/reagent_containers/food/snacks/meat/rawcutlet/slice, reagents_per_slice) ..() @@ -36,6 +37,7 @@ cooked_type = /obj/item/weapon/reagent_containers/food/snacks/meat/steak/plain/human slice_path = /obj/item/weapon/reagent_containers/food/snacks/meat/rawcutlet/plain/human tastes = list("tender meat" = 1) + foodtype = MEAT | RAW | GROSS /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/initialize_slice(obj/item/weapon/reagent_containers/food/snacks/meat/rawcutlet/plain/human/slice, reagents_per_slice) ..() @@ -62,6 +64,7 @@ list_reagents = list("nutriment" = 3, "slimejelly" = 3) filling_color = "#00FFFF" tastes = list("slime" = 1, "jelly" = 1) + foodtype = MEAT | RAW | TOXIC /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem icon_state = "golemmeat" @@ -69,35 +72,41 @@ list_reagents = list("nutriment" = 3, "iron" = 3) filling_color = "#A9A9A9" tastes = list("rock" = 1) + foodtype = MEAT | RAW | GROSS /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem/adamantine icon_state = "agolemmeat" desc = "From the slime pen to the rune to the kitchen, science." filling_color = "#66CDAA" + foodtype = MEAT | RAW | GROSS /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/lizard icon_state = "lizardmeat" desc = "Delicious dino damage" filling_color = "#6B8E23" tastes = list("meat" = 4, "scales" = 1) + foodtype = MEAT | RAW /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/plant icon_state = "plantmeat" desc = "All the joys of healthy eating with all the fun of cannibalism." filling_color = "#E9967A" tastes = list("salad" = 1, "wood" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/shadow icon_state = "shadowmeat" desc = "Ow, the edge" filling_color = "#202020" tastes = list("darkness" = 1, "meat" = 1) + foodtype = MEAT | RAW /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/fly icon_state = "flymeat" desc = "Nothing says tasty like maggot filled radioactive mutant flesh." list_reagents = list("nutriment" = 3, "uranium" = 3) tastes = list("maggots" = 1, "the inside of a reactor" = 1) + foodtype = MEAT | RAW | GROSS /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton name = "-bone" @@ -106,6 +115,7 @@ filling_color = "#F0F0F0" tastes = list("bone" = 1) slice_path = null //can't slice a bone into cutlets + foodtype = GROSS /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie name = " meat (rotten)" @@ -113,6 +123,7 @@ desc = "Halfway to becoming fertilizer for your garden." filling_color = "#6B8E23" tastes = list("brains" = 1, "meat" = 1) + foodtype = RAW | MEAT | TOXIC @@ -122,22 +133,27 @@ /obj/item/weapon/reagent_containers/food/snacks/meat/slab/synthmeat name = "synthmeat" desc = "A synthetic slab of meat." + foodtype = RAW | MEAT //hurr durr chemicals we're harmed in the production of this meat thus its non-vegan. /obj/item/weapon/reagent_containers/food/snacks/meat/slab/meatproduct name = "meat product" desc = "A slab of station reclaimed and chemically processed meat product." + foodtype = RAW | MEAT /obj/item/weapon/reagent_containers/food/snacks/meat/slab/monkey name = "monkey meat" + foodtype = RAW | MEAT /obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi name = "corgi meat" desc = "Tastes like... well you know..." tastes = list("meat" = 4, "a fondness for wearing hats" = 1) + foodtype = RAW | MEAT | GROSS /obj/item/weapon/reagent_containers/food/snacks/meat/slab/pug name = "pug meat" desc = "Tastes like... well you know..." + foodtype = RAW | MEAT | GROSS /obj/item/weapon/reagent_containers/food/snacks/meat/slab/killertomato name = "killer tomato meat" @@ -148,6 +164,7 @@ cooked_type = /obj/item/weapon/reagent_containers/food/snacks/meat/steak/killertomato slice_path = /obj/item/weapon/reagent_containers/food/snacks/meat/rawcutlet/killertomato tastes = list("tomato" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/meat/slab/bear name = "bear meat" @@ -158,6 +175,7 @@ cooked_type = /obj/item/weapon/reagent_containers/food/snacks/meat/steak/bear slice_path = /obj/item/weapon/reagent_containers/food/snacks/meat/rawcutlet/bear tastes = list("meat" = 1, "salmon" = 1) + foodtype = RAW | MEAT /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno @@ -170,6 +188,7 @@ cooked_type = /obj/item/weapon/reagent_containers/food/snacks/meat/steak/xeno slice_path = /obj/item/weapon/reagent_containers/food/snacks/meat/rawcutlet/xeno tastes = list("meat" = 1, "acid" = 1) + foodtype = RAW | MEAT /obj/item/weapon/reagent_containers/food/snacks/meat/slab/spider name = "spider meat" @@ -180,6 +199,7 @@ cooked_type = /obj/item/weapon/reagent_containers/food/snacks/meat/steak/spider slice_path = /obj/item/weapon/reagent_containers/food/snacks/meat/rawcutlet/spider tastes = list("cobwebs" = 1) + foodtype = RAW | MEAT | TOXIC /obj/item/weapon/reagent_containers/food/snacks/meat/slab/goliath @@ -188,6 +208,7 @@ list_reagents = list("nutriment" = 3, "toxin" = 5) icon_state = "goliathmeat" tastes = list("meat" = 1) + foodtype = RAW | MEAT | TOXIC /obj/item/weapon/reagent_containers/food/snacks/meat/slab/goliath/burn() visible_message("[src] finishes cooking!") @@ -202,6 +223,7 @@ icon_state = "meatwheat_clump" bitesize = 4 tastes = list("meat" = 1, "wheat" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/meat/rawbacon name = "raw piece of bacon" @@ -212,6 +234,7 @@ list_reagents = list("nutriment" = 1) filling_color = "#B22222" tastes = list("bacon" = 1) + foodtype = RAW | MEAT /obj/item/weapon/reagent_containers/food/snacks/meat/bacon name = "piece of bacon" @@ -221,6 +244,7 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 1) filling_color = "#854817" tastes = list("bacon" = 1) + foodtype = MEAT ////////////////////////////////////// MEAT STEAKS /////////////////////////////////////////////////////////// @@ -233,16 +257,20 @@ bonus_reagents = list("nutriment" = 2, "vitamin" = 1) trash = /obj/item/trash/plate filling_color = "#B22222" + foodtype = MEAT tastes = list("meat" = 1) /obj/item/weapon/reagent_containers/food/snacks/meat/steak/plain + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/meat/steak/plain/human tastes = list("tender meat" = 1) + foodtype = MEAT | GROSS /obj/item/weapon/reagent_containers/food/snacks/meat/steak/killertomato name = "killer tomato steak" tastes = list("tomato" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/meat/steak/bear name = "bear steak" @@ -263,6 +291,7 @@ icon_state = "goliathsteak" trash = null tastes = list("meat" = 1, "rock" = 1) + foodtype = MEAT //////////////////////////////// MEAT CUTLETS /////////////////////////////////////////////////////// @@ -278,6 +307,7 @@ filling_color = "#B22222" tastes = list("meat" = 1) var/meat_type = "meat" + foodtype = MEAT | RAW /obj/item/weapon/reagent_containers/food/snacks/meat/rawcutlet/initialize_cooked_food(obj/item/weapon/reagent_containers/food/snacks/S, cooking_efficiency) ..() @@ -285,10 +315,12 @@ /obj/item/weapon/reagent_containers/food/snacks/meat/rawcutlet/plain + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/meat/rawcutlet/plain/human cooked_type = /obj/item/weapon/reagent_containers/food/snacks/meat/cutlet/plain/human tastes = list("tender meat" = 1) + foodtype = MEAT | RAW | GROSS /obj/item/weapon/reagent_containers/food/snacks/meat/rawcutlet/plain/human/initialize_cooked_food(obj/item/weapon/reagent_containers/food/snacks/S, cooking_efficiency) ..() @@ -301,6 +333,7 @@ name = "raw killer tomato cutlet" cooked_type = /obj/item/weapon/reagent_containers/food/snacks/meat/cutlet/killertomato tastes = list("tomato" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/meat/rawcutlet/bear name = "raw bear cutlet" @@ -328,15 +361,18 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 1) filling_color = "#B22222" tastes = list("meat" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/meat/cutlet/plain /obj/item/weapon/reagent_containers/food/snacks/meat/cutlet/plain/human tastes = list("tender meat" = 1) + foodtype = MEAT | GROSS /obj/item/weapon/reagent_containers/food/snacks/meat/cutlet/killertomato name = "killer tomato cutlet" tastes = list("tomato" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/meat/cutlet/bear name = "bear cutlet" diff --git a/code/modules/food_and_drinks/food/snacks_bread.dm b/code/modules/food_and_drinks/food/snacks_bread.dm index b76b896803..16d11c5f29 100644 --- a/code/modules/food_and_drinks/food/snacks_bread.dm +++ b/code/modules/food_and_drinks/food/snacks_bread.dm @@ -4,6 +4,7 @@ volume = 80 slices_num = 5 tastes = list("bread" = 10) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/breadslice @@ -14,6 +15,7 @@ list_reagents = list("nutriment" = 2) slot_flags = SLOT_HEAD customfoodfilling = 0 //to avoid infinite bread-ception + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/store/bread/plain name = "bread" @@ -24,12 +26,14 @@ custom_food_type = /obj/item/weapon/reagent_containers/food/snacks/customizable/bread slice_path = /obj/item/weapon/reagent_containers/food/snacks/breadslice/plain tastes = list("bread" = 10) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/breadslice/plain name = "bread slice" desc = "A slice of home." icon_state = "breadslice" customfoodfilling = 1 + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/store/bread/meat name = "meatbread loaf" @@ -39,11 +43,13 @@ bonus_reagents = list("nutriment" = 5, "vitamin" = 10) list_reagents = list("nutriment" = 30, "vitamin" = 5) tastes = list("bread" = 10, "meat" = 10) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/breadslice/meat name = "meatbread slice" desc = "A slice of delicious meatbread." icon_state = "meatbreadslice" + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/store/bread/xenomeat name = "xenomeatbread loaf" @@ -53,6 +59,7 @@ bonus_reagents = list("nutriment" = 5, "vitamin" = 10) list_reagents = list("nutriment" = 30, "vitamin" = 5) tastes = list("bread" = 10, "acid" = 10) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/breadslice/xenomeat name = "xenomeatbread slice" @@ -60,6 +67,7 @@ icon_state = "xenobreadslice" filling_color = "#32CD32" list_reagents = list("nutriment" = 6, "vitamin" = 1) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/store/bread/spidermeat name = "spider meat loaf" @@ -69,6 +77,7 @@ bonus_reagents = list("nutriment" = 5, "vitamin" = 10) list_reagents = list("nutriment" = 30, "toxin" = 15, "vitamin" = 5) tastes = list("bread" = 10, "cobwebs" = 5) + foodtype = GRAIN | MEAT | TOXIC /obj/item/weapon/reagent_containers/food/snacks/breadslice/spidermeat name = "spider meat bread slice" @@ -76,6 +85,7 @@ icon_state = "xenobreadslice" filling_color = "#7CFC00" list_reagents = list("nutriment" = 6, "toxin" = 3, "vitamin" = 1) + foodtype = GRAIN | MEAT | TOXIC /obj/item/weapon/reagent_containers/food/snacks/store/bread/banana name = "banana-nut bread" @@ -85,6 +95,7 @@ bonus_reagents = list("nutriment" = 5, "banana" = 20) list_reagents = list("nutriment" = 20, "banana" = 20) tastes = list("bread" = 10) // bananjuice will also flavour + foodtype = GRAIN | FRUIT /obj/item/weapon/reagent_containers/food/snacks/breadslice/banana @@ -93,6 +104,7 @@ icon_state = "bananabreadslice" filling_color = "#FFD700" list_reagents = list("nutriment" = 4, "banana" = 4) + foodtype = GRAIN | FRUIT /obj/item/weapon/reagent_containers/food/snacks/store/bread/tofu name = "Tofubread" @@ -102,6 +114,7 @@ bonus_reagents = list("nutriment" = 5, "vitamin" = 10) list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("bread" = 10, "tofu" = 10) + foodtype = GRAIN | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/breadslice/tofu name = "tofubread slice" @@ -109,6 +122,7 @@ icon_state = "tofubreadslice" filling_color = "#FF8C00" list_reagents = list("nutriment" = 4, "vitamin" = 1) + foodtype = GRAIN | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/store/bread/creamcheese name = "cream cheese bread" @@ -118,6 +132,7 @@ bonus_reagents = list("nutriment" = 5, "vitamin" = 5) list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("bread" = 10, "cheese" = 10) + foodtype = GRAIN | DAIRY /obj/item/weapon/reagent_containers/food/snacks/breadslice/creamcheese name = "cream cheese bread slice" @@ -125,6 +140,7 @@ icon_state = "creamcheesebreadslice" filling_color = "#FF8C00" list_reagents = list("nutriment" = 4, "vitamin" = 1) + foodtype = GRAIN | DAIRY /obj/item/weapon/reagent_containers/food/snacks/store/bread/mimana name = "mimana bread" @@ -134,6 +150,7 @@ bonus_reagents = list("nutriment" = 5, "vitamin" = 5) list_reagents = list("nutriment" = 20, "mutetoxin" = 5, "nothing" = 5, "vitamin" = 5) tastes = list("bread" = 10, "silence" = 10) + foodtype = GRAIN | FRUIT /obj/item/weapon/reagent_containers/food/snacks/breadslice/mimana name = "mimana bread slice" @@ -141,11 +158,13 @@ icon_state = "mimanabreadslice" filling_color = "#C0C0C0" list_reagents = list("nutriment" = 2, "mutetoxin" = 1, "nothing" = 1, "vitamin" = 1) + foodtype = GRAIN | FRUIT /obj/item/weapon/reagent_containers/food/snacks/breadslice/custom name = "bread slice" icon_state = "tofubreadslice" filling_color = "#FFFFFF" + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/baguette name = "baguette" @@ -157,6 +176,7 @@ bitesize = 3 w_class = WEIGHT_CLASS_NORMAL tastes = list("bread" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/deepfryholder name = "Deep Fried Foods Holder Obj" diff --git a/code/modules/food_and_drinks/food/snacks_burgers.dm b/code/modules/food_and_drinks/food/snacks_burgers.dm index 16e96435d2..5c1f3b0da3 100644 --- a/code/modules/food_and_drinks/food/snacks_burgers.dm +++ b/code/modules/food_and_drinks/food/snacks_burgers.dm @@ -5,11 +5,13 @@ bitesize = 3 list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("bun" = 4) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/burger/plain name = "burger" desc = "The cornerstone of every nutritious breakfast." bonus_reagents = list("vitamin" = 1) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/burger/human var/subjectname = "" @@ -17,6 +19,7 @@ name = "human burger" desc = "A bloody burger." bonus_reagents = list("vitamin" = 4) + foodtype = MEAT | GRAIN | GROSS /obj/item/weapon/reagent_containers/food/snacks/burger/human/CheckParts(list/parts_list) ..() @@ -35,6 +38,7 @@ name = "corgi burger" desc = "You monster." bonus_reagents = list("vitamin" = 1) + foodtype = GRAIN | MEAT | GROSS /obj/item/weapon/reagent_containers/food/snacks/burger/appendix name = "appendix burger" @@ -42,6 +46,7 @@ bonus_reagents = list("nutriment" = 6, "vitamin" = 6) icon_state = "appendixburger" tastes = list("bun" = 4, "grass" = 2) + foodtype = GRAIN | MEAT | GROSS /obj/item/weapon/reagent_containers/food/snacks/burger/fish name = "fillet -o- carp sandwich" @@ -49,6 +54,7 @@ icon_state = "fishburger" bonus_reagents = list("nutriment" = 2, "vitamin" = 3) tastes = list("bun" = 4, "fish" = 4) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/burger/tofu name = "tofu burger" @@ -56,6 +62,7 @@ icon_state = "tofuburger" bonus_reagents = list("nutriment" = 2, "vitamin" = 2) tastes = list("bun" = 4, "tofu" = 4) + foodtype = GRAIN | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/burger/roburger name = "roburger" @@ -64,6 +71,7 @@ bonus_reagents = list("nutriment" = 2, "nanomachines" = 2, "vitamin" = 5) list_reagents = list("nutriment" = 6, "nanomachines" = 5, "vitamin" = 1) tastes = list("bun" = 4, "lettuce" = 2, "sludge" = 1) + foodtype = GRAIN | TOXIC /obj/item/weapon/reagent_containers/food/snacks/burger/roburgerbig name = "roburger" @@ -73,6 +81,7 @@ bonus_reagents = list("nutriment" = 5, "nanomachines" = 70, "vitamin" = 10) list_reagents = list("nutriment" = 6, "nanomachines" = 70, "vitamin" = 5) tastes = list("bun" = 4, "lettuce" = 2, "sludge" = 1) + foodtype = GRAIN | TOXIC /obj/item/weapon/reagent_containers/food/snacks/burger/xeno name = "xenoburger" @@ -80,24 +89,28 @@ icon_state = "xburger" bonus_reagents = list("nutriment" = 2, "vitamin" = 6) tastes = list("bun" = 4, "acid" = 4) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/burger/bearger name = "bearger" desc = "Best served rawr." icon_state = "bearger" bonus_reagents = list("nutriment" = 3, "vitamin" = 6) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/burger/clown name = "clown burger" desc = "This tastes funny..." icon_state = "clownburger" bonus_reagents = list("nutriment" = 4, "vitamin" = 6, "banana" = 6) + foodtype = GRAIN | FRUIT /obj/item/weapon/reagent_containers/food/snacks/burger/mime name = "mime burger" desc = "Its taste defies language." icon_state = "mimeburger" bonus_reagents = list("nutriment" = 4, "vitamin" = 6, "nothing" = 6) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/burger/brain name = "brainburger" @@ -106,6 +119,7 @@ bonus_reagents = list("nutriment" = 6, "mannitol" = 6, "vitamin" = 5) list_reagents = list("nutriment" = 6, "mannitol" = 5, "vitamin" = 1) tastes = list("bun" = 4, "brains" = 2) + foodtype = GRAIN | MEAT | GROSS /obj/item/weapon/reagent_containers/food/snacks/burger/ghost name = "ghost burger" @@ -113,6 +127,7 @@ alpha = 125 bonus_reagents = list("nutriment" = 5, "vitamin" = 12) tastes = list("bun" = 4, "ectoplasm" = 2) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/burger/red name = "red burger" @@ -120,6 +135,7 @@ icon_state = "cburger" color = "#DA0000FF" bonus_reagents = list("redcrayonpowder" = 10, "vitamin" = 5) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/burger/orange name = "orange burger" @@ -127,6 +143,7 @@ icon_state = "cburger" color = "#FF9300FF" bonus_reagents = list("orangecrayonpowder" = 10, "vitamin" = 5) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/burger/yellow name = "yellow burger" @@ -134,6 +151,7 @@ icon_state = "cburger" color = "#FFF200FF" bonus_reagents = list("yellowcrayonpowder" = 10, "vitamin" = 5) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/burger/green name = "green burger" @@ -141,6 +159,7 @@ icon_state = "cburger" color = "#A8E61DFF" bonus_reagents = list("greencrayonpowder" = 10, "vitamin" = 5) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/burger/blue name = "blue burger" @@ -148,6 +167,7 @@ icon_state = "cburger" color = "#00B7EFFF" bonus_reagents = list("bluecrayonpowder" = 10, "vitamin" = 5) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/burger/purple name = "purple burger" @@ -155,6 +175,7 @@ icon_state = "cburger" color = "#DA00FFFF" bonus_reagents = list("purplecrayonpowder" = 10, "vitamin" = 5) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/burger/spell name = "spell burger" @@ -162,6 +183,7 @@ icon_state = "spellburger" bonus_reagents = list("nutriment" = 6, "vitamin" = 10) tastes = list("bun" = 4, "magic" = 2) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/burger/bigbite name = "big bite burger" @@ -170,20 +192,24 @@ bonus_reagents = list("vitamin" = 6) list_reagents = list("nutriment" = 10, "vitamin" = 2) w_class = WEIGHT_CLASS_NORMAL + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/burger/jelly name = "jelly burger" desc = "Culinary delight..?" icon_state = "jellyburger" tastes = list("bun" = 4, "jelly" = 2) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/burger/jelly/slime bonus_reagents = list("slimejelly" = 5, "vitamin" = 5) list_reagents = list("nutriment" = 6, "slimejelly" = 5, "vitamin" = 1) + foodtype = GRAIN | TOXIC /obj/item/weapon/reagent_containers/food/snacks/burger/jelly/cherry bonus_reagents = list("cherryjelly" = 5, "vitamin" = 5) list_reagents = list("nutriment" = 6, "cherryjelly" = 5, "vitamin" = 1) + foodtype = GRAIN | FRUIT /obj/item/weapon/reagent_containers/food/snacks/burger/superbite name = "super bite burger" @@ -195,6 +221,7 @@ bitesize = 7 volume = 100 tastes = list("bun" = 4, "type two diabetes" = 10) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/burger/fivealarm name = "five alarm burger" @@ -202,18 +229,21 @@ icon_state = "fivealarmburger" bonus_reagents = list("nutriment" = 2, "vitamin" = 5) list_reagents = list("nutriment" = 6, "capsaicin" = 5, "condensedcapsaicin" = 5, "vitamin" = 1) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/burger/rat name = "rat burger" desc = "Pretty much what you'd expect..." icon_state = "ratburger" bonus_reagents = list("nutriment" = 1, "vitamin" = 1) + foodtype = GRAIN | MEAT | GROSS /obj/item/weapon/reagent_containers/food/snacks/burger/baseball name = "home run baseball burger" desc = "It's still warm. The steam coming off of it looks like baseball." icon_state = "baseball" bonus_reagents = list("nutriment" = 1, "vitamin" = 1) + foodtype = GRAIN | GROSS /obj/item/weapon/reagent_containers/food/snacks/burger/baconburger name = "bacon burger" @@ -221,3 +251,4 @@ icon_state = "baconburger" bonus_reagents = list("nutriment" = 8, "vitamin" = 1) tastes = list("bun" = 4, "bacon" = 2) + foodtype = GRAIN | MEAT \ No newline at end of file diff --git a/code/modules/food_and_drinks/food/snacks_cake.dm b/code/modules/food_and_drinks/food/snacks_cake.dm index 2cac29be96..674c273de6 100644 --- a/code/modules/food_and_drinks/food/snacks_cake.dm +++ b/code/modules/food_and_drinks/food/snacks_cake.dm @@ -6,6 +6,7 @@ volume = 80 list_reagents = list("nutriment" = 20, "vitamin" = 5) tastes = list("cake" = 1) + foodtype = GRAIN | DAIRY /obj/item/weapon/reagent_containers/food/snacks/cakeslice icon = 'icons/obj/food/piecake.dmi' @@ -13,6 +14,7 @@ list_reagents = list("nutriment" = 4, "vitamin" = 1) customfoodfilling = 0 //to avoid infinite cake-ception tastes = list("cake" = 1) + foodtype = GRAIN | DAIRY /obj/item/weapon/reagent_containers/food/snacks/store/cake/plain name = "vanilla cake" @@ -21,6 +23,7 @@ custom_food_type = /obj/item/weapon/reagent_containers/food/snacks/customizable/cake bonus_reagents = list("nutriment" = 10, "vitamin" = 2) tastes = list("vanilla" = 1, "sweetness" = 2,"cake" = 5) + foodtype = GRAIN | DAIRY | SUGAR /obj/item/weapon/reagent_containers/food/snacks/cakeslice/plain name = "vanilla cake slice" @@ -29,6 +32,7 @@ filling_color = "#FFD700" customfoodfilling = 1 tastes = list("vanilla" = 1, "sweetness" = 2,"cake" = 5) + foodtype = GRAIN | DAIRY | SUGAR /obj/item/weapon/reagent_containers/food/snacks/store/cake/carrot name = "carrot cake" @@ -39,6 +43,7 @@ bonus_reagents = list("nutriment" = 3, "oculine" = 5, "vitamin" = 10) list_reagents = list("nutriment" = 20, "oculine" = 10, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1) + foodtype = GRAIN | DAIRY | VEGETABLES | SUGAR /obj/item/weapon/reagent_containers/food/snacks/cakeslice/carrot name = "carrot cake slice" @@ -47,6 +52,7 @@ filling_color = "#FFA500" list_reagents = list("nutriment" = 4, "oculine" = 2, "vitamin" = 1) tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1) + foodtype = GRAIN | DAIRY | VEGETABLES | SUGAR /obj/item/weapon/reagent_containers/food/snacks/store/cake/brain @@ -58,6 +64,7 @@ bonus_reagents = list("nutriment" = 5, "mannitol" = 10, "vitamin" = 10) list_reagents = list("nutriment" = 20, "mannitol" = 10, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 2, "brains" = 1) + foodtype = GRAIN | DAIRY | MEAT | GROSS | SUGAR /obj/item/weapon/reagent_containers/food/snacks/cakeslice/brain @@ -67,6 +74,7 @@ filling_color = "#FF69B4" list_reagents = list("nutriment" = 4, "mannitol" = 2, "vitamin" = 1) tastes = list("cake" = 5, "sweetness" = 2, "brains" = 1) + foodtype = GRAIN | DAIRY | MEAT | GROSS | SUGAR /obj/item/weapon/reagent_containers/food/snacks/store/cake/cheese name = "cheese cake" @@ -76,6 +84,7 @@ slices_num = 5 bonus_reagents = list("vitamin" = 10) tastes = list("cake" = 4, "cream cheese" = 3) + foodtype = GRAIN | DAIRY /obj/item/weapon/reagent_containers/food/snacks/cakeslice/cheese @@ -84,6 +93,7 @@ icon_state = "cheesecake_slice" filling_color = "#FFFACD" tastes = list("cake" = 4, "cream cheese" = 3) + foodtype = GRAIN | DAIRY /obj/item/weapon/reagent_containers/food/snacks/store/cake/orange @@ -94,6 +104,7 @@ slices_num = 5 bonus_reagents = list("nutriment" = 3, "vitamin" = 10) tastes = list("cake" = 5, "sweetness" = 2, "oranges" = 2) + foodtype = GRAIN | DAIRY | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/cakeslice/orange name = "orange cake slice" @@ -101,6 +112,7 @@ icon_state = "orangecake_slice" filling_color = "#FFA500" tastes = list("cake" = 5, "sweetness" = 2, "oranges" = 2) + foodtype = GRAIN | DAIRY | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/store/cake/lime name = "lime cake" @@ -110,6 +122,7 @@ slices_num = 5 bonus_reagents = list("nutriment" = 3, "vitamin" = 10) tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2) + foodtype = GRAIN | DAIRY | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/cakeslice/lime name = "lime cake slice" @@ -117,6 +130,7 @@ icon_state = "limecake_slice" filling_color = "#00FF00" tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2) + foodtype = GRAIN | DAIRY | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/store/cake/lemon @@ -127,6 +141,7 @@ slices_num = 5 bonus_reagents = list("nutriment" = 3, "vitamin" = 10) tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2) + foodtype = GRAIN | DAIRY | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/cakeslice/lemon @@ -135,6 +150,7 @@ icon_state = "lemoncake_slice" filling_color = "#FFEE00" tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2) + foodtype = GRAIN | DAIRY | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/store/cake/chocolate @@ -145,6 +161,7 @@ slices_num = 5 bonus_reagents = list("nutriment" = 3, "vitamin" = 10) tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4) + foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR /obj/item/weapon/reagent_containers/food/snacks/cakeslice/chocolate @@ -153,6 +170,7 @@ icon_state = "chocolatecake_slice" filling_color = "#A0522D" tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4) + foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR /obj/item/weapon/reagent_containers/food/snacks/store/cake/birthday @@ -164,6 +182,7 @@ bonus_reagents = list("nutriment" = 7, "sprinkles" = 10, "vitamin" = 5) list_reagents = list("nutriment" = 20, "sprinkles" = 10, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 1) + foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR /obj/item/weapon/reagent_containers/food/snacks/cakeslice/birthday name = "birthday cake slice" @@ -172,6 +191,7 @@ filling_color = "#DC143C" list_reagents = list("nutriment" = 4, "sprinkles" = 2, "vitamin" = 1) tastes = list("cake" = 5, "sweetness" = 1) + foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR /obj/item/weapon/reagent_containers/food/snacks/store/cake/apple @@ -182,6 +202,7 @@ slices_num = 5 bonus_reagents = list("nutriment" = 3, "vitamin" = 10) tastes = list("cake" = 5, "sweetness" = 1, "apple" = 1) + foodtype = GRAIN | DAIRY | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/cakeslice/apple name = "apple cake slice" @@ -189,11 +210,13 @@ icon_state = "applecakeslice" filling_color = "#FF4500" tastes = list("cake" = 5, "sweetness" = 1, "apple" = 1) + foodtype = GRAIN | DAIRY | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/cakeslice/custom name = "cake slice" icon_state = "plaincake_slice" filling_color = "#FFFFFF" + foodtype = GRAIN | DAIRY /obj/item/weapon/reagent_containers/food/snacks/store/cake/slimecake name = "Slime cake" @@ -202,6 +225,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/slimecake bonus_reagents = list("nutriment" = 1, "vitamin" = 3) tastes = list("cake" = 5, "sweetness" = 1, "slime" = 1) + foodtype = GRAIN | DAIRY | SUGAR /obj/item/weapon/reagent_containers/food/snacks/cakeslice/slimecake name = "slime cake slice" @@ -209,6 +233,7 @@ icon_state = "slimecake_slice" filling_color = "#00FFFF" tastes = list("cake" = 5, "sweetness" = 1, "slime" = 1) + foodtype = GRAIN | DAIRY | SUGAR /obj/item/weapon/reagent_containers/food/snacks/store/cake/pumpkinspice name = "pumpkin spice cake" @@ -217,6 +242,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/pumpkinspice bonus_reagents = list("nutriment" = 3, "vitamin" = 5) tastes = list("cake" = 5, "sweetness" = 1, "pumpkin" = 1) + foodtype = GRAIN | DAIRY | VEGETABLES | SUGAR /obj/item/weapon/reagent_containers/food/snacks/cakeslice/pumpkinspice name = "pumpkin spice cake slice" @@ -224,3 +250,5 @@ icon_state = "pumpkinspicecakeslice" filling_color = "#FFD700" tastes = list("cake" = 5, "sweetness" = 1, "pumpkin" = 1) + + foodtype = GRAIN | DAIRY | VEGETABLES | SUGAR diff --git a/code/modules/food_and_drinks/food/snacks_egg.dm b/code/modules/food_and_drinks/food/snacks_egg.dm index a0b2b34740..68cdcb7b7e 100644 --- a/code/modules/food_and_drinks/food/snacks_egg.dm +++ b/code/modules/food_and_drinks/food/snacks_egg.dm @@ -9,6 +9,7 @@ list_reagents = list("nutriment" = 4, "sugar" = 2, "cocoa" = 2) filling_color = "#A0522D" tastes = list("chocolate" = 4, "sweetness" = 1) + foodtype = JUNKFOOD | SUGAR /obj/item/weapon/reagent_containers/food/snacks/egg name = "egg" @@ -18,6 +19,7 @@ cooked_type = /obj/item/weapon/reagent_containers/food/snacks/boiledegg filling_color = "#F0E68C" tastes = list("egg" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom) if(!..()) //was it caught by a mob? @@ -90,6 +92,7 @@ filling_color = "#FFFFF0" list_reagents = list("nutriment" = 3) tastes = list("egg" = 4, "salt" = 1, "pepper" = 1) + foodtype = MEAT | FRIED /obj/item/weapon/reagent_containers/food/snacks/boiledegg name = "boiled egg" @@ -99,6 +102,7 @@ filling_color = "#FFFFF0" list_reagents = list("nutriment" = 2, "vitamin" = 1) tastes = list("egg" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/omelette //FUCK THIS name = "omelette du fromage" @@ -110,6 +114,7 @@ bitesize = 1 w_class = WEIGHT_CLASS_NORMAL tastes = list("egg" = 1, "cheese" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/omelette/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/kitchen/fork)) @@ -138,3 +143,5 @@ w_class = WEIGHT_CLASS_NORMAL list_reagents = list("nutriment" = 6, "vitamin" = 4) tastes = list("egg" = 1, "bacon" = 1, "bun" = 1) + + foodtype = MEAT diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm index e050ecd72b..4c9e69ed45 100644 --- a/code/modules/food_and_drinks/food/snacks_meat.dm +++ b/code/modules/food_and_drinks/food/snacks_meat.dm @@ -13,6 +13,7 @@ filling_color = "#CD853F" list_reagents = list("nutriment" = 6, "capsaicin" = 1) tastes = list("fish" = 4, "batter" = 1, "hot peppers" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/carpmeat name = "carp fillet" @@ -22,6 +23,7 @@ bitesize = 6 filling_color = "#FA8072" tastes = list("fish" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/carpmeat/New() ..() @@ -40,6 +42,7 @@ bitesize = 1 filling_color = "#CD853F" tastes = list("fish" = 1, "breadcrumbs" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/fishandchips name = "fish and chips" @@ -49,6 +52,7 @@ list_reagents = list("nutriment" = 6) filling_color = "#FA8072" tastes = list("fish" = 1, "chips" = 1) + foodtype = MEAT | VEGETABLES | FRIED ////////////////////////////////////////////MEATS AND ALIKE//////////////////////////////////////////// @@ -59,6 +63,7 @@ list_reagents = list("nutriment" = 2) filling_color = "#F0E68C" tastes = list("tofu" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/spiderleg name = "spider leg" @@ -68,6 +73,7 @@ cooked_type = /obj/item/weapon/reagent_containers/food/snacks/boiledspiderleg filling_color = "#000000" tastes = list("cobwebs" = 1) + foodtype = MEAT | TOXIC /obj/item/weapon/reagent_containers/food/snacks/cornedbeef name = "corned beef and cabbage" @@ -77,6 +83,7 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 4) list_reagents = list("nutriment" = 5) tastes = list("meat" = 1, "cabbage" = 1) + foodtype = MEAT | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/bearsteak name = "Filet migrawr" @@ -86,6 +93,7 @@ bonus_reagents = list("nutriment" = 2, "vitamin" = 6) list_reagents = list("nutriment" = 2, "vitamin" = 5, "manlydorf" = 5) tastes = list("meat" = 1, "salmon" = 1) + foodtype = MEAT | ALCOHOL /obj/item/weapon/reagent_containers/food/snacks/faggot name = "faggot" @@ -94,6 +102,7 @@ list_reagents = list("nutriment" = 4, "vitamin" = 1) filling_color = "#800000" tastes = list("meat" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/sausage name = "sausage" @@ -103,6 +112,7 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 1) list_reagents = list("nutriment" = 6, "vitamin" = 1) tastes = list("meat" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/sausage/New() ..() @@ -114,30 +124,35 @@ w_class = WEIGHT_CLASS_NORMAL list_reagents = list("nutriment" = 8) tastes = list("meat" = 3, "metal" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/kebab/human name = "human-kebab" desc = "A human meat, on a stick." bonus_reagents = list("nutriment" = 1, "vitamin" = 6) tastes = list("tender meat" = 3, "metal" = 1) + foodtype = MEAT | GROSS /obj/item/weapon/reagent_containers/food/snacks/kebab/monkey name = "meat-kebab" desc = "Delicious meat, on a stick." bonus_reagents = list("nutriment" = 1, "vitamin" = 2) tastes = list("meat" = 3, "metal" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/kebab/tofu name = "tofu-kebab" desc = "Vegan meat, on a stick." bonus_reagents = list("nutriment" = 1) tastes = list("tofu" = 3, "metal" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/kebab/tail name = "lizard-tail kebab" desc = "Severed lizard tail on a stick." bonus_reagents = list("nutriment" = 1, "vitamin" = 4) tastes = list("meat" = 8, "metal" = 4, "scales" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/rawkhinkali name = "raw khinkali" @@ -146,6 +161,7 @@ list_reagents = list("nutriment" = 1, "vitamin" = 1) cooked_type = /obj/item/weapon/reagent_containers/food/snacks/khinkali tastes = list("meat" = 1, "onions" = 1, "garlic" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/khinkali name = "khinkali" @@ -155,6 +171,7 @@ bitesize = 3 filling_color = "#F0F0F0" tastes = list("meat" = 1, "onions" = 1, "garlic" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/monkeycube name = "monkey cube" @@ -164,6 +181,7 @@ list_reagents = list("nutriment" = 2) filling_color = "#CD853F" tastes = list("the jungle" = 1, "bananas" = 1) + foodtype = MEAT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand() visible_message("[src] expands!") @@ -179,6 +197,7 @@ filling_color = "#FFA07A" list_reagents = list("nutriment" = 8, "capsaicin" = 6) tastes = list("hot peppers" = 1, "meat" = 3, "cheese" = 1, "sour cream" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat name = "stewed soy meat" @@ -189,6 +208,7 @@ list_reagents = list("nutriment" = 8) filling_color = "#D2691E" tastes = list("soy" = 1, "vegetables" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat/New() ..() @@ -203,6 +223,7 @@ list_reagents = list("nutriment" = 3, "capsaicin" = 2) filling_color = "#000000" tastes = list("hot peppers" = 1, "cobwebs" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/spidereggsham name = "green eggs and ham" @@ -214,6 +235,7 @@ bitesize = 4 filling_color = "#7FFF00" tastes = list("meat" = 1, "the colour green" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/sashimi name = "carp sashimi" @@ -223,6 +245,7 @@ list_reagents = list("nutriment" = 6, "capsaicin" = 5) filling_color = "#FA8072" tastes = list("fish" = 1, "hot peppers" = 1) + foodtype = MEAT | TOXIC /obj/item/weapon/reagent_containers/food/snacks/nugget name = "chicken nugget" @@ -230,6 +253,7 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 1) list_reagents = list("nutriment" = 2) tastes = list("\"chicken\"" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/nugget/New() ..() diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm index 3cce0f46c9..8ebdbe00a0 100644 --- a/code/modules/food_and_drinks/food/snacks_other.dm +++ b/code/modules/food_and_drinks/food/snacks_other.dm @@ -10,6 +10,7 @@ list_reagents = list("nutriment" = 15, "vitamin" = 5) w_class = WEIGHT_CLASS_NORMAL tastes = list("cheese" = 1) + foodtype = DAIRY /obj/item/weapon/reagent_containers/food/snacks/cheesewedge name = "cheese wedge" @@ -18,6 +19,7 @@ filling_color = "#FFD700" list_reagents = list("nutriment" = 3, "vitamin" = 1) tastes = list("cheese" = 1) + foodtype = DAIRY /obj/item/weapon/reagent_containers/food/snacks/watermelonslice name = "watermelon slice" @@ -25,6 +27,7 @@ icon_state = "watermelonslice" filling_color = "#FF1493" tastes = list("watermelon" = 1) + foodtype = FRUIT /obj/item/weapon/reagent_containers/food/snacks/candy_corn name = "candy corn" @@ -33,6 +36,7 @@ list_reagents = list("nutriment" = 4, "sugar" = 2) filling_color = "#FF8C00" tastes = list("candy corn" = 1) + foodtype = JUNKFOOD | SUGAR /obj/item/weapon/reagent_containers/food/snacks/chocolatebar name = "chocolate bar" @@ -41,6 +45,7 @@ list_reagents = list("nutriment" = 2, "sugar" = 2, "cocoa" = 2) filling_color = "#A0522D" tastes = list("chocolate" = 1) + foodtype = JUNKFOOD | SUGAR /obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice name = "huge mushroom slice" @@ -48,6 +53,7 @@ icon_state = "hugemushroomslice" list_reagents = list("nutriment" = 3, "vitamin" = 1) tastes = list("mushroom" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/popcorn name = "popcorn" @@ -58,6 +64,7 @@ bitesize = 0.1 //this snack is supposed to be eating during looooong time. And this it not dinner food! --rastaf0 filling_color = "#FFEFD5" tastes = list("popcorn" = 3, "butter" = 1) + foodtype = JUNKFOOD /obj/item/weapon/reagent_containers/food/snacks/popcorn/New() ..() @@ -71,6 +78,7 @@ list_reagents = list("nutriment" = 6) filling_color = "#D2B48C" tastes = list("potato" = 1) + foodtype = VEGETABLES | DAIRY /obj/item/weapon/reagent_containers/food/snacks/fries name = "space fries" @@ -80,6 +88,7 @@ list_reagents = list("nutriment" = 4) filling_color = "#FFD700" tastes = list("fries" = 3, "salt" = 1) + foodtype = VEGETABLES | GRAIN | FRIED /obj/item/weapon/reagent_containers/food/snacks/tatortot name = "tator tot" @@ -88,6 +97,7 @@ list_reagents = list("nutriment" = 4) filling_color = "FFD700" tastes = list("potato" = 3, "valids" = 1) + foodtype = FRIED | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/soydope name = "soy dope" @@ -97,6 +107,7 @@ list_reagents = list("nutriment" = 2) filling_color = "#DEB887" tastes = list("soy" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/cheesyfries name = "cheesy fries" @@ -107,6 +118,7 @@ list_reagents = list("nutriment" = 6) filling_color = "#FFD700" tastes = list("fries" = 3, "cheese" = 1) + foodtype = VEGETABLES | GRAIN /obj/item/weapon/reagent_containers/food/snacks/badrecipe name = "burned mess" @@ -114,6 +126,7 @@ icon_state = "badrecipe" list_reagents = list("bad_food" = 30) filling_color = "#8B4513" + foodtype = GROSS /obj/item/weapon/reagent_containers/food/snacks/carrotfries name = "carrot fries" @@ -123,6 +136,7 @@ list_reagents = list("nutriment" = 3, "oculine" = 3, "vitamin" = 2) filling_color = "#FFA500" tastes = list("carrots" = 3, "salt" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/candiedapple name = "candied apple" @@ -133,6 +147,7 @@ list_reagents = list("nutriment" = 3, "sugar" = 2) filling_color = "#FF4500" tastes = list("apple" = 2, "sweetness" = 2) + foodtype = JUNKFOOD | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/mint name = "mint" @@ -142,6 +157,7 @@ trash = /obj/item/trash/plate list_reagents = list("minttoxin" = 1) filling_color = "#800000" + foodtype = TOXIC | SUGAR /obj/item/weapon/reagent_containers/food/snacks/eggwrap name = "egg wrap" @@ -151,6 +167,7 @@ list_reagents = list("nutriment" = 5) filling_color = "#F0E68C" tastes = list("egg" = 1) + foodtype = MEAT | GRAIN /obj/item/weapon/reagent_containers/food/snacks/beans name = "tin of beans" @@ -160,6 +177,7 @@ list_reagents = list("nutriment" = 10) filling_color = "#B22222" tastes = list("beans" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/spidereggs name = "spider eggs" @@ -168,6 +186,7 @@ list_reagents = list("nutriment" = 2, "toxin" = 2) filling_color = "#008000" tastes = list("cobwebs" = 1) + foodtype = MEAT | TOXIC /obj/item/weapon/reagent_containers/food/snacks/chococoin name = "chocolate coin" @@ -177,6 +196,7 @@ list_reagents = list("nutriment" = 3, "cocoa" = 1) filling_color = "#A0522D" tastes = list("chocolate" = 1) + foodtype = JUNKFOOD | SUGAR /obj/item/weapon/reagent_containers/food/snacks/fudgedice name = "fudge dice" @@ -187,6 +207,7 @@ filling_color = "#A0522D" trash = /obj/item/weapon/dice/fudge tastes = list("fudge" = 1) + foodtype = JUNKFOOD | SUGAR /obj/item/weapon/reagent_containers/food/snacks/chocoorange name = "chocolate orange" @@ -196,6 +217,7 @@ list_reagents = list("nutriment" = 3, "sugar" = 1) filling_color = "#A0522D" tastes = list("chocolate" = 3, "oranges" = 1) + foodtype = JUNKFOOD | SUGAR /obj/item/weapon/reagent_containers/food/snacks/eggplantparm name = "eggplant parmigiana" @@ -206,6 +228,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 2) filling_color = "#BA55D3" tastes = list("eggplant" = 3, "cheese" = 1) + foodtype = VEGETABLES | DAIRY /obj/item/weapon/reagent_containers/food/snacks/tortilla name = "tortilla" @@ -215,6 +238,7 @@ list_reagents = list("nutriment" = 3, "vitamin" = 1) filling_color = "#FFEFD5" tastes = list("tortilla" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/burrito name = "burrito" @@ -224,6 +248,7 @@ list_reagents = list("nutriment" = 4, "vitamin" = 1) filling_color = "#FFEFD5" tastes = list("torilla" = 2, "meat" = 3) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/cheesyburrito name = "cheesy burrito" @@ -233,6 +258,7 @@ list_reagents = list("nutriment" = 4, "vitamin" = 2) filling_color = "#FFD800" tastes = list("torilla" = 2, "meat" = 3, "cheese" = 1) + foodtype = GRAIN | MEAT | DAIRY /obj/item/weapon/reagent_containers/food/snacks/carneburrito name = "carne asada burrito" @@ -242,6 +268,7 @@ list_reagents = list("nutriment" = 5, "vitamin" = 1) filling_color = "#A0522D" tastes = list("torilla" = 2, "meat" = 4) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/fuegoburrito name = "fuego plasma burrito" @@ -251,6 +278,7 @@ list_reagents = list("nutriment" = 4, "capsaicin" = 5, "vitamin" = 3) filling_color = "#FF2000" tastes = list("torilla" = 2, "meat" = 3, "hot peppers" = 1) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/yakiimo name = "yaki imo" @@ -260,6 +288,7 @@ list_reagents = list("nutriment" = 5, "vitamin" = 4) filling_color = "#8B1105" tastes = list("sweet potato" = 1) + foodtype = GRAIN | VEGETABLES | SUGAR /obj/item/weapon/reagent_containers/food/snacks/roastparsnip name = "roast parsnip" @@ -269,6 +298,7 @@ list_reagents = list("nutriment" = 3, "vitamin" = 4) filling_color = "#FF5500" tastes = list("parsnip" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/melonfruitbowl name = "melon fruit bowl" @@ -279,6 +309,7 @@ filling_color = "#FF5500" w_class = WEIGHT_CLASS_NORMAL tastes = list("melon" = 1) + foodtype = FRUIT /obj/item/weapon/reagent_containers/food/snacks/spacefreezy name = "space freezy" @@ -288,6 +319,7 @@ list_reagents = list("nutriment" = 6, "bluecherryjelly" = 5, "vitamin" = 4) filling_color = "#87CEFA" tastes = list("blue cherries" = 2, "ice cream" = 2) + foodtype = FRUIT | DAIRY /obj/item/weapon/reagent_containers/food/snacks/sundae name = "sundae" @@ -297,6 +329,7 @@ list_reagents = list("nutriment" = 6, "banana" = 5, "vitamin" = 2) filling_color = "#FFFACD" tastes = list("ice cream" = 1, "banana" = 1) + foodtype = FRUIT | DAIRY | SUGAR /obj/item/weapon/reagent_containers/food/snacks/honkdae name = "honkdae" @@ -306,6 +339,7 @@ list_reagents = list("nutriment" = 6, "banana" = 10, "vitamin" = 4) filling_color = "#FFFACD" tastes = list("ice cream" = 1, "banana" = 1, "a bad joke" = 1) + foodtype = FRUIT | DAIRY | SUGAR /obj/item/weapon/reagent_containers/food/snacks/nachos name = "nachos" @@ -315,6 +349,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 2) filling_color = "#F4A460" tastes = list("nachos" = 1) + foodtype = VEGETABLES | FRIED /obj/item/weapon/reagent_containers/food/snacks/cheesynachos name = "cheesy nachos" @@ -324,6 +359,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 3) filling_color = "#FFD700" tastes = list("nachos" = 2, "cheese" = 1) + foodtype = VEGETABLES | FRIED | DAIRY /obj/item/weapon/reagent_containers/food/snacks/cubannachos name = "cuban nachos" @@ -333,6 +369,7 @@ list_reagents = list("nutriment" = 7, "capsaicin" = 8, "vitamin" = 4) filling_color = "#DC143C" tastes = list("nachos" = 2, "hot pepper" = 1) + foodtype = VEGETABLES | FRIED | DAIRY /obj/item/weapon/reagent_containers/food/snacks/melonkeg name = "melon keg" @@ -344,6 +381,7 @@ volume = 80 bitesize = 5 tastes = list("grain alcohol" = 1, "fruit" = 1) + foodtype = FRUIT | ALCOHOL /obj/item/weapon/reagent_containers/food/snacks/honeybar name = "honey nut bar" @@ -353,6 +391,7 @@ list_reagents = list("nutriment" = 5, "honey" = 5) filling_color = "#F2CE91" tastes = list("oats" = 3, "nuts" = 2, "honey" = 1) + foodtype = FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/stuffedlegion name = "stuffed legion" @@ -361,6 +400,7 @@ bonus_reagents = list("vitamin" = 3, "capsaicin" = 1, "tricordrazine" = 5) list_reagents = list("nutriment" = 5, "vitamin" = 5, "capsaicin" = 2, "tricordrazine" = 10) tastes = list("death" = 2, "rock" = 1, "meat" = 1, "hot peppers" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/powercrepe @@ -376,6 +416,7 @@ attack_verb = list("slapped", "slathered") w_class = WEIGHT_CLASS_BULKY tastes = list("cherry" = 1, "crepe" = 1) + foodtype = GRAIN | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/lollipop name = "lollipop" @@ -386,6 +427,7 @@ var/mutable_appearance/head var/headcolor = rgb(0, 0, 0) tastes = list("candy" = 1) + foodtype = JUNKFOOD | SUGAR /obj/item/weapon/reagent_containers/food/snacks/lollipop/New() ..() @@ -425,6 +467,7 @@ icon_state = "gumball" list_reagents = list("sugar" = 5, "bicaridine" = 2, "kelotane" = 2) //Kek tastes = list("candy") + foodtype = JUNKFOOD /obj/item/weapon/reagent_containers/food/snacks/gumball/New() ..() @@ -453,6 +496,7 @@ list_reagents = list("nutriment" = 4, "vitamin" = 2) filling_color = "F0D830" tastes = list("taco" = 4, "meat" = 2, "cheese" = 2, "lettuce" = 1) + foodtype = MEAT | DAIRY | GRAIN | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/taco/plain desc = "A traditional taco with meat and cheese, minus the rabbit food." @@ -460,6 +504,7 @@ bonus_reagents = list("nutriment" = 2, "vitamin" = 2) list_reagents = list("nutriment" = 3, "vitamin" = 1) tastes = list("taco" = 4, "meat" = 2, "cheese" = 2) + foodtype = MEAT | DAIRY | GRAIN /obj/item/weapon/reagent_containers/food/snacks/branrequests name = "Bran Requests Cereal" @@ -468,6 +513,7 @@ list_reagents = list("nutriment" = 3, "vitamin" = 2, "sodiumchloride" = 5) bonus_reagents = list("sodiumchloride" = 10) tastes = list("bran" = 4, "raisins" = 3, "salt" = 1) + foodtype = GRAIN | FRUIT /obj/item/weapon/reagent_containers/food/snacks/butter name = "stick of butter" @@ -476,6 +522,7 @@ list_reagents = list("nutriment" = 5) filling_color = "#FFD700" tastes = list("butter" = 1) + foodtype = DAIRY /obj/item/weapon/reagent_containers/food/snacks/onionrings name = "onion rings" @@ -484,4 +531,5 @@ list_reagents = list("nutriment" = 3) filling_color = "#C0C9A0" gender = PLURAL - tastes = list("batter" = 3, "onion" = 1) \ No newline at end of file + tastes = list("batter" = 3, "onion" = 1) + foodtype = VEGETABLES diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm index 6081838669..8f52a5b40d 100644 --- a/code/modules/food_and_drinks/food/snacks_pastry.dm +++ b/code/modules/food_and_drinks/food/snacks_pastry.dm @@ -12,6 +12,7 @@ var/extra_reagent = null filling_color = "#D2691E" tastes = list("donut" = 1) + foodtype = JUNKFOOD | GRAIN | FRIED | SUGAR /obj/item/weapon/reagent_containers/food/snacks/donut/Initialize() . = ..() @@ -47,6 +48,7 @@ bonus_reagents = list("sugar" = 1, "vitamin" = 1) extra_reagent = "berryjuice" tastes = list("jelly" = 1, "donut" = 3) + foodtype = JUNKFOOD | GRAIN | FRIED | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/donut/jelly/Initialize() . = ..() @@ -64,12 +66,14 @@ desc = "You jelly?" icon_state = "jdonut1" extra_reagent = "slimejelly" + foodtype = JUNKFOOD | GRAIN | FRIED | TOXIC | SUGAR /obj/item/weapon/reagent_containers/food/snacks/donut/jelly/cherryjelly name = "jelly donut" desc = "You jelly?" icon_state = "jdonut1" extra_reagent = "cherryjelly" + foodtype = JUNKFOOD | GRAIN | FRIED | FRUIT ////////////////////////////////////////////MUFFINS//////////////////////////////////////////// @@ -81,12 +85,14 @@ list_reagents = list("nutriment" = 6) filling_color = "#F4A460" tastes = list("muffin" = 1) + foodtype = GRAIN | SUGAR /obj/item/weapon/reagent_containers/food/snacks/muffin/berry name = "berry muffin" icon_state = "berrymuffin" desc = "A delicious and spongy little cake, with berries." tastes = list("muffin" = 3, "berry" = 1) + foodtype = GRAIN | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/muffin/booberry name = "booberry muffin" @@ -94,6 +100,7 @@ alpha = 125 desc = "My stomach is a graveyard! No living being can quench my bloodthirst!" tastes = list("muffin" = 3, "spookiness" = 1) + foodtype = GRAIN | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/chawanmushi name = "chawanmushi" @@ -103,6 +110,7 @@ list_reagents = list("nutriment" = 5) filling_color = "#FFE4E1" tastes = list("custard" = 1) + foodtype = GRAIN | MEAT | VEGETABLES ////////////////////////////////////////////WAFFLES//////////////////////////////////////////// @@ -115,6 +123,7 @@ list_reagents = list("nutriment" = 8, "vitamin" = 1) filling_color = "#D2691E" tastes = list("waffles" = 1) + foodtype = GRAIN | SUGAR /obj/item/weapon/reagent_containers/food/snacks/soylentgreen name = "\improper Soylent Green" @@ -125,6 +134,7 @@ list_reagents = list("nutriment" = 10, "vitamin" = 1) filling_color = "#9ACD32" tastes = list("waffles" = 7, "people" = 1) + foodtype = GRAIN | GROSS | MEAT /obj/item/weapon/reagent_containers/food/snacks/soylenviridians name = "\improper Soylent Virdians" @@ -135,6 +145,7 @@ list_reagents = list("nutriment" = 10, "vitamin" = 1) filling_color = "#9ACD32" tastes = list("waffles" = 7, "the colour green" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/rofflewaffles name = "roffle waffles" @@ -146,6 +157,7 @@ list_reagents = list("nutriment" = 8, "mushroomhallucinogen" = 2, "vitamin" = 2) filling_color = "#00BFFF" tastes = list("waffle" = 1, "mushrooms" = 1) + foodtype = GRAIN | VEGETABLES | TOXIC | SUGAR ////////////////////////////////////////////OTHER//////////////////////////////////////////// @@ -158,6 +170,7 @@ list_reagents = list("nutriment" = 1) filling_color = "#F0E68C" tastes = list("cookie" = 1) + foodtype = GRAIN | SUGAR /obj/item/weapon/reagent_containers/food/snacks/donkpocket name = "\improper Donk-pocket" @@ -167,6 +180,7 @@ cooked_type = /obj/item/weapon/reagent_containers/food/snacks/donkpocket/warm filling_color = "#CD853F" tastes = list("meat" = 2, "dough" = 2, "laziness" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/donkpocket/warm name = "warm Donk-pocket" @@ -174,6 +188,7 @@ bonus_reagents = list("omnizine" = 3) list_reagents = list("nutriment" = 4, "omnizine" = 3) tastes = list("meat" = 2, "dough" = 2, "laziness" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/dankpocket name = "\improper Dank-pocket" @@ -182,6 +197,7 @@ list_reagents = list("lipolicide" = 3, "space_drugs" = 3, "nutriment" = 4) filling_color = "#00FF00" tastes = list("meat" = 2, "dough" = 2) + foodtype = GRAIN | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/fortunecookie name = "fortune cookie" @@ -191,6 +207,7 @@ list_reagents = list("nutriment" = 3) filling_color = "#F4A460" tastes = list("cookie" = 1) + foodtype = GRAIN | SUGAR /obj/item/weapon/reagent_containers/food/snacks/poppypretzel name = "poppy pretzel" @@ -200,6 +217,7 @@ list_reagents = list("nutriment" = 5) filling_color = "#F0E68C" tastes = list("pretzel" = 1) + foodtype = GRAIN | SUGAR /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit name = "plump helmet biscuit" @@ -209,6 +227,7 @@ list_reagents = list("nutriment" = 5) filling_color = "#F0E68C" tastes = list("mushroom" = 1, "biscuit" = 1) + foodtype = GRAIN | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit/Initialize() var/fey = prob(10) @@ -229,6 +248,7 @@ list_reagents = list("nutriment" = 1) filling_color = "#F0E68C" tastes = list("cracker" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/hotdog name = "hotdog" @@ -239,6 +259,7 @@ list_reagents = list("nutriment" = 6, "ketchup" = 3, "vitamin" = 3) filling_color = "#8B0000" tastes = list("bun" = 3, "meat" = 2) + foodtype = GRAIN | MEAT | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/meatbun name = "meat bun" @@ -248,6 +269,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 2) filling_color = "#8B0000" tastes = list("bun" = 3, "meat" = 2) + foodtype = GRAIN | MEAT | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/khachapuri name = "khachapuri" @@ -256,6 +278,7 @@ list_reagents = list("nutriment" = 12, "vitamin" = 2) filling_color = "#FFFF4D" tastes = list("bread" = 1, "egg" = 1, "cheese" = 1) + foodtype = GRAIN | MEAT | DAIRY /obj/item/weapon/reagent_containers/food/snacks/sugarcookie @@ -266,6 +289,7 @@ list_reagents = list("nutriment" = 3, "sugar" = 3) filling_color = "#CD853F" tastes = list("sweetness" = 1) + foodtype = GRAIN | JUNKFOOD | SUGAR /obj/item/weapon/reagent_containers/food/snacks/chococornet name = "chocolate cornet" @@ -275,6 +299,7 @@ list_reagents = list("nutriment" = 5, "vitamin" = 1) filling_color = "#FFE4C4" tastes = list("biscuit" = 3, "chocolate" = 1) + foodtype = GRAIN | JUNKFOOD /obj/item/weapon/reagent_containers/food/snacks/oatmealcookie name = "oatmeal cookie" @@ -284,6 +309,7 @@ list_reagents = list("nutriment" = 5, "vitamin" = 1) filling_color = "#D2691E" tastes = list("cookie" = 2, "oat" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/raisincookie name = "raisin cookie" @@ -293,6 +319,7 @@ list_reagents = list("nutriment" = 5, "vitamin" = 1) filling_color = "#F0E68C" tastes = list("cookie" = 1, "raisins" = 1) + foodtype = GRAIN | FRUIT /obj/item/weapon/reagent_containers/food/snacks/cherrycupcake name = "cherry cupcake" @@ -302,6 +329,7 @@ list_reagents = list("nutriment" = 5, "vitamin" = 1) filling_color = "#F0E68C" tastes = list("cake" = 3, "cherry" = 1) + foodtype = GRAIN | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/bluecherrycupcake name = "blue cherry cupcake" @@ -311,6 +339,7 @@ list_reagents = list("nutriment" = 5, "vitamin" = 1) filling_color = "#F0E68C" tastes = list("cake" = 3, "blue cherry" = 1) + foodtype = GRAIN | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/honeybun name = "honey bun" @@ -320,3 +349,4 @@ list_reagents = list("nutriment" = 5, "honey" = 5) filling_color = "#F2CE91" tastes = list("pastry" = 1, "sweetness" = 1) + foodtype = GRAIN diff --git a/code/modules/food_and_drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm index 13f22851b1..46106ee715 100644 --- a/code/modules/food_and_drinks/food/snacks_pie.dm +++ b/code/modules/food_and_drinks/food/snacks_pie.dm @@ -7,6 +7,7 @@ volume = 80 list_reagents = list("nutriment" = 10, "vitamin" = 2) tastes = list("pie" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/pie/plain name = "plain pie" @@ -15,6 +16,7 @@ custom_food_type = /obj/item/weapon/reagent_containers/food/snacks/customizable/pie bonus_reagents = list("nutriment" = 8, "vitamin" = 1) tastes = list("pie" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/pie/cream name = "banana cream pie" @@ -24,6 +26,7 @@ bonus_reagents = list("nutriment" = 2, "vitamin" = 2) list_reagents = list("nutriment" = 6, "banana" = 5, "vitamin" = 2) tastes = list("pie" = 1) + foodtype = GRAIN | DAIRY | SUGAR /obj/item/weapon/reagent_containers/food/snacks/pie/cream/throw_impact(atom/hit_atom) . = ..() @@ -58,6 +61,7 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 2) list_reagents = list("nutriment" = 10, "berryjuice" = 5, "vitamin" = 2) tastes = list("pie" = 1, "blackberries" = 1) + foodtype = GRAIN | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/pie/bearypie name = "beary pie" @@ -66,6 +70,7 @@ bonus_reagents = list("nutriment" = 2, "vitamin" = 3) list_reagents = list("nutriment" = 2, "vitamin" = 3) tastes = list("pie" = 1, "meat" = 1, "salmon" = 1) + foodtype = GRAIN | SUGAR /obj/item/weapon/reagent_containers/food/snacks/pie/meatpie name = "meat-pie" @@ -73,6 +78,7 @@ desc = "An old barber recipe, very delicious!" bonus_reagents = list("nutriment" = 1, "vitamin" = 5) tastes = list("pie" = 1, "meat" = 1) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/pie/tofupie @@ -81,6 +87,7 @@ desc = "A delicious tofu pie." bonus_reagents = list("nutriment" = 1, "vitamin" = 2) tastes = list("pie" = 1, "tofu" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/pie/amanita_pie @@ -91,6 +98,7 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 4) list_reagents = list("nutriment" = 6, "amatoxin" = 3, "mushroomhallucinogen" = 1, "vitamin" = 4) tastes = list("pie" = 1, "mushroom" = 1) + foodtype = GRAIN | VEGETABLES | TOXIC | GROSS /obj/item/weapon/reagent_containers/food/snacks/pie/plump_pie @@ -99,6 +107,7 @@ icon_state = "plump_pie" bonus_reagents = list("nutriment" = 1, "vitamin" = 4) tastes = list("pie" = 1, "mushroom" = 1) + foodtype = GRAIN | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/pie/plump_pie/New() @@ -119,6 +128,7 @@ trash = /obj/item/trash/plate bonus_reagents = list("nutriment" = 1, "vitamin" = 5) tastes = list("pie" = 1, "meat" = 1, "acid" = 1) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/pie/applepie @@ -127,6 +137,7 @@ icon_state = "applepie" bonus_reagents = list("nutriment" = 1, "vitamin" = 3) tastes = list("pie" = 1, "apple" = 1) + foodtype = GRAIN | FRUIT | SUGAR @@ -136,6 +147,7 @@ icon_state = "cherrypie" bonus_reagents = list("nutriment" = 1, "vitamin" = 2) tastes = list("pie" = 7, "Nicole Paige Brooks" = 2) + foodtype = GRAIN | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/pie/pumpkinpie @@ -146,6 +158,7 @@ slices_num = 5 bonus_reagents = list("nutriment" = 1, "vitamin" = 5) tastes = list("pie" = 1, "pumpkin" = 1) + foodtype = GRAIN | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/pumpkinpieslice name = "pumpkin pie slice" @@ -156,6 +169,7 @@ filling_color = "#FFA500" list_reagents = list("nutriment" = 2) tastes = list("pie" = 1, "pumpkin" = 1) + foodtype = GRAIN | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/pie/appletart name = "golden apple streusel tart" @@ -164,6 +178,7 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 4) list_reagents = list("nutriment" = 8, "gold" = 5, "vitamin" = 4) tastes = list("pie" = 1, "apple" = 1, "expensive metal" = 1) + foodtype = GRAIN | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/pie/grapetart name = "grape tart" @@ -172,6 +187,7 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 4) list_reagents = list("nutriment" = 4, "vitamin" = 4) tastes = list("pie" = 1, "grape" = 1) + foodtype = GRAIN | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/pie/blumpkinpie name = "blumpkin pie" @@ -181,6 +197,7 @@ slices_num = 5 bonus_reagents = list("nutriment" = 3, "vitamin" = 6) tastes = list("pie" = 1, "a mouthful of pool water" = 1) + foodtype = GRAIN | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/blumpkinpieslice name = "blumpkin pie slice" @@ -191,6 +208,7 @@ filling_color = "#1E90FF" list_reagents = list("nutriment" = 2) tastes = list("pie" = 1, "a mouthful of pool water" = 1) + foodtype = GRAIN | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/pie/dulcedebatata name = "dulce de batata" @@ -200,6 +218,7 @@ slices_num = 5 bonus_reagents = list("nutriment" = 4, "vitamin" = 8) tastes = list("jelly" = 1, "sweet potato" = 1) + foodtype = GRAIN | VEGETABLES | SUGAR /obj/item/weapon/reagent_containers/food/snacks/dulcedebatataslice name = "dulce de batata slice" @@ -210,6 +229,7 @@ filling_color = "#8B4513" list_reagents = list("nutriment" = 2) tastes = list("jelly" = 1, "sweet potato" = 1) + foodtype = GRAIN | VEGETABLES | SUGAR /obj/item/weapon/reagent_containers/food/snacks/pie/frostypie name = "frosty pie" @@ -217,3 +237,4 @@ icon_state = "frostypie" bonus_reagents = list("nutriment" = 4, "vitamin" = 6) tastes = list("mint" = 1, "pie" = 1) + foodtype = GRAIN | FRUIT | SUGAR diff --git a/code/modules/food_and_drinks/food/snacks_pizza.dm b/code/modules/food_and_drinks/food/snacks_pizza.dm index ab476c1044..f171f15381 100644 --- a/code/modules/food_and_drinks/food/snacks_pizza.dm +++ b/code/modules/food_and_drinks/food/snacks_pizza.dm @@ -8,10 +8,12 @@ volume = 80 list_reagents = list("nutriment" = 30, "tomatojuice" = 6, "vitamin" = 5) tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1) + foodtype = GRAIN | DAIRY | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/pizzaslice icon = 'icons/obj/food/pizzaspaghetti.dmi' list_reagents = list("nutriment" = 5) + foodtype = GRAIN | DAIRY | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/pizza/margherita name = "margherita" @@ -20,6 +22,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/margherita bonus_reagents = list("nutriment" = 5, "vitamin" = 5) tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1) + foodtype = GRAIN | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/margherita name = "margherita slice" @@ -27,6 +30,7 @@ icon_state = "pizzamargheritaslice" filling_color = "#FFA500" tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1) + foodtype = GRAIN | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/pizza/meat name = "meatpizza" @@ -36,6 +40,7 @@ bonus_reagents = list("nutriment" = 5, "vitamin" = 8) list_reagents = list("nutriment" = 30, "tomatojuice" = 6, "vitamin" = 8) tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1) + foodtype = GRAIN | VEGETABLES| DAIRY | MEAT /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/meat name = "meatpizza slice" @@ -43,6 +48,7 @@ icon_state = "meatpizzaslice" filling_color = "#A52A2A" tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1) + foodtype = GRAIN | VEGETABLES | DAIRY | MEAT /obj/item/weapon/reagent_containers/food/snacks/pizza/mushroom name = "mushroom pizza" @@ -52,6 +58,7 @@ bonus_reagents = list("nutriment" = 5, "vitamin" = 5) list_reagents = list("nutriment" = 30, "vitamin" = 5) tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "mushroom" = 1) + foodtype = GRAIN | VEGETABLES | DAIRY /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/mushroom name = "mushroom pizza slice" @@ -59,6 +66,7 @@ icon_state = "mushroompizzaslice" filling_color = "#FFE4C4" tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "mushroom" = 1) + foodtype = GRAIN | VEGETABLES | DAIRY /obj/item/weapon/reagent_containers/food/snacks/pizza/vegetable name = "vegetable pizza" @@ -68,6 +76,7 @@ bonus_reagents = list("nutriment" = 5, "vitamin" = 5) list_reagents = list("nutriment" = 25, "tomatojuice" = 6, "oculine" = 12, "vitamin" = 5) tastes = list("crust" = 1, "tomato" = 2, "cheese" = 1, "carrot" = 1) + foodtype = GRAIN | VEGETABLES | DAIRY /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/vegetable name = "vegetable pizza slice" @@ -75,6 +84,7 @@ icon_state = "vegetablepizzaslice" filling_color = "#FFA500" tastes = list("crust" = 1, "tomato" = 2, "cheese" = 1, "carrot" = 1) + foodtype = GRAIN | VEGETABLES | DAIRY /obj/item/weapon/reagent_containers/food/snacks/pizza/donkpocket name = "donkpocket pizza" @@ -84,6 +94,7 @@ bonus_reagents = list("nutriment" = 5, "vitamin" = 5) list_reagents = list("nutriment" = 25, "tomatojuice" = 6, "omnizine" = 10, "vitamin" = 5) tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1, "laziness" = 1) + foodtype = GRAIN | VEGETABLES | DAIRY | MEAT | JUNKFOOD /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/donkpocket name = "donkpocket pizza slice" @@ -91,6 +102,7 @@ icon_state = "donkpocketpizzaslice" filling_color = "#FFA500" tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1, "laziness" = 1) + foodtype = GRAIN | VEGETABLES | DAIRY | MEAT | JUNKFOOD /obj/item/weapon/reagent_containers/food/snacks/pizza/dank name = "dank pizza" @@ -100,6 +112,7 @@ bonus_reagents = list("nutriment" = 2, "vitamin" = 6) list_reagents = list("nutriment" = 25, "doctorsdelight" = 5, "tomatojuice" = 6, "vitamin" = 5) tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1) + foodtype = GRAIN | VEGETABLES | FRUIT | DAIRY /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/dank name = "dank pizza slice" @@ -107,6 +120,7 @@ icon_state = "dankpizzaslice" filling_color = "#2E8B57" tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1) + foodtype = GRAIN | VEGETABLES | FRUIT | DAIRY /obj/item/weapon/reagent_containers/food/snacks/pizza/sassysage name = "sassysage pizza" @@ -115,6 +129,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/sassysage bonus_reagents = list("nutriment" = 6, "vitamin" = 6) tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1) + foodtype = GRAIN | VEGETABLES | DAIRY /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/sassysage name = "sassysage pizza slice" @@ -122,8 +137,10 @@ icon_state = "sassysagepizzaslice" filling_color = "#FF4500" tastes = list("crust" = 1, "tomato" = 1, "cheese" = 1, "meat" = 1) + foodtype = GRAIN | VEGETABLES | DAIRY /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/custom name = "pizza slice" icon_state = "pizzamargheritaslice" filling_color = "#FFFFFF" + foodtype = GRAIN | VEGETABLES diff --git a/code/modules/food_and_drinks/food/snacks_salad.dm b/code/modules/food_and_drinks/food/snacks_salad.dm index f167452ef0..324b69e53f 100644 --- a/code/modules/food_and_drinks/food/snacks_salad.dm +++ b/code/modules/food_and_drinks/food/snacks_salad.dm @@ -7,6 +7,7 @@ w_class = WEIGHT_CLASS_NORMAL list_reagents = list("nutriment" = 7, "vitamin" = 2) tastes = list("leaves" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/salad/New() ..() @@ -19,6 +20,7 @@ bonus_reagents = list("omnizine" = 2, "vitamin" = 6) list_reagents = list("nutriment" = 8, "omnizine" = 8, "vitamin" = 6) tastes = list("leaves" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/salad/herbsalad name = "herb salad" @@ -27,6 +29,7 @@ bonus_reagents = list("vitamin" = 4) list_reagents = list("nutriment" = 8, "vitamin" = 2) tastes = list("leaves" = 1, "apple" = 1) + foodtype = VEGETABLES | FRUIT /obj/item/weapon/reagent_containers/food/snacks/salad/validsalad name = "valid salad" @@ -35,6 +38,7 @@ bonus_reagents = list("doctorsdelight" = 5, "vitamin" = 4) list_reagents = list("nutriment" = 8, "doctorsdelight" = 5, "vitamin" = 2) tastes = list("leaves" = 1, "potato" = 1, "meat" = 1, "valids" = 1) + foodtype = VEGETABLES | MEAT | FRIED | JUNKFOOD | FRUIT /obj/item/weapon/reagent_containers/food/snacks/salad/oatmeal name = "oatmeal" @@ -43,6 +47,7 @@ bonus_reagents = list("nutriment" = 4, "vitamin" = 4) list_reagents = list("nutriment" = 7, "milk" = 10, "vitamin" = 2) tastes = list("oats" = 1, "milk" = 1) + foodtype = DAIRY | GRAIN /obj/item/weapon/reagent_containers/food/snacks/salad/fruit name = "fruit salad" @@ -50,6 +55,7 @@ icon_state = "fruitsalad" bonus_reagents = list("nutriment" = 2, "vitamin" = 4) tastes = list("fruit" = 1) + foodtype = FRUIT /obj/item/weapon/reagent_containers/food/snacks/salad/jungle name = "jungle salad" @@ -58,6 +64,7 @@ bonus_reagents = list("nutriment" = 4, "vitamin" = 4) list_reagents = list("nutriment" = 7, "banana" = 5, "vitamin" = 4) tastes = list("fruit" = 1, "the jungle" = 1) + foodtype = FRUIT /obj/item/weapon/reagent_containers/food/snacks/salad/citrusdelight name = "citrus delight" @@ -66,6 +73,7 @@ bonus_reagents = list("nutriment" = 4, "vitamin" = 4) list_reagents = list("nutriment" = 7, "vitamin" = 5) tastes = list("sourness" = 1, "leaves" = 1) + foodtype = FRUIT /obj/item/weapon/reagent_containers/food/snacks/salad/ricebowl name = "ricebowl" @@ -74,6 +82,7 @@ cooked_type = /obj/item/weapon/reagent_containers/food/snacks/salad/boiledrice list_reagents = list("nutriment" = 4) tastes = list("rice" = 1) + foodtype = GRAIN | RAW /obj/item/weapon/reagent_containers/food/snacks/salad/boiledrice name = "boiled rice" @@ -82,6 +91,7 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 1) list_reagents = list("nutriment" = 5, "vitamin" = 1) tastes = list("rice" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/salad/ricepudding name = "rice pudding" @@ -89,6 +99,7 @@ icon_state = "ricepudding" bonus_reagents = list("nutriment" = 4, "vitamin" = 2) tastes = list("rice" = 1, "sweetness" = 1) + foodtype = GRAIN | DAIRY /obj/item/weapon/reagent_containers/food/snacks/salad/ricepork name = "rice and pork" @@ -96,6 +107,7 @@ icon_state = "riceporkbowl" bonus_reagents = list("nutriment" = 4, "vitamin" = 4) tastes = list("rice" = 1, "meat" = 1) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/salad/eggbowl name = "egg bowl" @@ -103,3 +115,4 @@ icon_state = "eggbowl" bonus_reagents = list("nutriment" = 4, "vitamin" = 4) tastes = list("rice" = 1, "egg" = 1) + foodtype = GRAIN | MEAT //EGG = MEAT -NinjaNomNom 2017 diff --git a/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm b/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm index 9618ad2875..f1b9febf82 100644 --- a/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm +++ b/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm @@ -8,6 +8,7 @@ list_reagents = list("nutriment" = 6, "vitamin" = 1) cooked_type = /obj/item/weapon/reagent_containers/food/snacks/toastedsandwich tastes = list("meat" = 2, "cheese" = 1, "bread" = 2, "lettuce" = 1) + foodtype = GRAIN | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/toastedsandwich name = "toasted sandwich" @@ -18,6 +19,7 @@ bonus_reagents = list("nutriment" = 1, "carbon" = 2) list_reagents = list("nutriment" = 6, "carbon" = 2) tastes = list("toast" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/grilledcheese name = "grilled cheese sandwich" @@ -28,6 +30,7 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 1) list_reagents = list("nutriment" = 7, "vitamin" = 1) tastes = list("toast" = 1, "cheese" = 1) + foodtype = GRAIN | DAIRY /obj/item/weapon/reagent_containers/food/snacks/jellysandwich name = "jelly sandwich" @@ -37,14 +40,17 @@ trash = /obj/item/trash/plate bitesize = 3 tastes = list("bread" = 1, "jelly" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/slime bonus_reagents = list("slimejelly" = 5, "vitamin" = 2) list_reagents = list("nutriment" = 2, "slimejelly" = 5, "vitamin" = 2) + foodtype = GRAIN | TOXIC /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry bonus_reagents = list("cherryjelly" = 5, "vitamin" = 2) list_reagents = list("nutriment" = 2, "cherryjelly" = 5, "vitamin" = 2) + foodtype = GRAIN | FRUIT /obj/item/weapon/reagent_containers/food/snacks/icecreamsandwich name = "icecream sandwich" @@ -54,6 +60,7 @@ bonus_reagents = list("nutriment" = 1, "ice" = 2) list_reagents = list("nutriment" = 2, "ice" = 2) tastes = list("ice cream" = 1) + foodtype = GRAIN | DAIRY /obj/item/weapon/reagent_containers/food/snacks/notasandwich name = "not-a-sandwich" @@ -64,6 +71,7 @@ bonus_reagents = list("vitamin" = 6) list_reagents = list("nutriment" = 6, "vitamin" = 6) tastes = list("nothing suspicious" = 1) + foodtype = GRAIN | GROSS /obj/item/weapon/reagent_containers/food/snacks/jelliedtoast name = "jellied toast" @@ -73,14 +81,17 @@ trash = /obj/item/trash/plate bitesize = 3 tastes = list("toast" = 1, "jelly" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/cherry bonus_reagents = list("cherryjelly" = 5, "vitamin" = 2) list_reagents = list("nutriment" = 1, "cherryjelly" = 5, "vitamin" = 2) + foodtype = GRAIN | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/slime bonus_reagents = list("slimejelly" = 5, "vitamin" = 2) list_reagents = list("nutriment" = 1, "slimejelly" = 5, "vitamin" = 2) + foodtype = GRAIN | TOXIC | SUGAR /obj/item/weapon/reagent_containers/food/snacks/twobread name = "two bread" @@ -90,3 +101,4 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 2) list_reagents = list("nutriment" = 2, "vitamin" = 2) tastes = list("bread" = 2) + foodtype = GRAIN diff --git a/code/modules/food_and_drinks/food/snacks_soup.dm b/code/modules/food_and_drinks/food/snacks_soup.dm index e11231fdfc..2e7e538915 100644 --- a/code/modules/food_and_drinks/food/snacks_soup.dm +++ b/code/modules/food_and_drinks/food/snacks_soup.dm @@ -6,6 +6,7 @@ volume = 80 list_reagents = list("nutriment" = 8, "water" = 5, "vitamin" = 4) tastes = list("tasteless soup" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/soup/New() ..() @@ -27,6 +28,7 @@ if(wish_true) reagents.add_reagent("nutriment", 9) reagents.add_reagent("vitamin", 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/soup/meatball name = "meatball soup" @@ -34,6 +36,7 @@ icon_state = "meatballsoup" bonus_reagents = list("nutriment" = 1, "vitamin" = 5) tastes = list("meat" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/soup/slime name = "slime soup" @@ -42,6 +45,7 @@ bonus_reagents = list("nutriment" = 1, "slimejelly" = 5, "vitamin" = 5) list_reagents = list("nutriment" = 5, "slimejelly" = 5, "water" = 5, "vitamin" = 4) tastes = list("slime" = 1) + foodtype = TOXIC | SUGAR /obj/item/weapon/reagent_containers/food/snacks/soup/blood name = "tomato soup" @@ -50,6 +54,7 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 6) list_reagents = list("nutriment" = 2, "blood" = 10, "water" = 5, "vitamin" = 4) tastes = list("iron" = 1) + foodtype = GROSS /obj/item/weapon/reagent_containers/food/snacks/soup/wingfangchu name = "wing fang chu" @@ -59,6 +64,7 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 2) list_reagents = list("nutriment" = 6, "soysauce" = 5, "vitamin" = 2) tastes = list("soy" = 1) + foodtype = MEAT /obj/item/weapon/reagent_containers/food/snacks/soup/clownstears name = "clown's tears" @@ -67,6 +73,7 @@ bonus_reagents = list("nutriment" = 1, "banana" = 5, "vitamin" = 8) list_reagents = list("nutriment" = 4, "banana" = 5, "water" = 5, "vitamin" = 8) tastes = list("a bad joke" = 1) + foodtype = FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/soup/vegetable name = "vegetable soup" @@ -74,6 +81,7 @@ icon_state = "vegetablesoup" bonus_reagents = list("nutriment" = 1, "vitamin" = 4) tastes = list("vegetables" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/soup/nettle name = "nettle soup" @@ -81,6 +89,7 @@ icon_state = "nettlesoup" bonus_reagents = list("nutriment" = 1, "omnizine" = 5, "vitamin" = 5) tastes = list("nettles" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/soup/mystery name = "mystery soup" @@ -103,6 +112,7 @@ bonus_reagents = list("nutriment" = 1, "tomatojuice" = 2, "vitamin" = 2) list_reagents = list("nutriment" = 5, "capsaicin" = 1, "tomatojuice" = 2, "vitamin" = 2) tastes = list("hot peppers" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/soup/coldchili name = "cold chili" @@ -111,6 +121,7 @@ bonus_reagents = list("nutriment" = 1, "tomatojuice" = 2, "vitamin" = 2) list_reagents = list("nutriment" = 5, "frostoil" = 1, "tomatojuice" = 2, "vitamin" = 2) tastes = list("tomato" = 1, "mint" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/soup/monkeysdelight name = "monkey's delight" @@ -119,6 +130,7 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 5) list_reagents = list("nutriment" = 10, "banana" = 5, "vitamin" = 5) tastes = list("the jungle" = 1, "banana" = 1) + foodtype = FRUIT /obj/item/weapon/reagent_containers/food/snacks/soup/tomato name = "tomato soup" @@ -127,6 +139,7 @@ bonus_reagents = list("nutriment" = 1, "tomatojuice" = 10, "vitamin" = 3) list_reagents = list("nutriment" = 5, "tomatojuice" = 10, "vitamin" = 3) tastes = list("tomato" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/soup/tomato/eyeball name = "eyeball soup" @@ -134,6 +147,7 @@ icon_state = "eyeballsoup" bonus_reagents = list("nutriment" = 1, "liquidgibs" = 3) tastes = list("tomato" = 1, "squirming" = 1) + foodtype = MEAT | GROSS /obj/item/weapon/reagent_containers/food/snacks/soup/milo name = "milosoup" @@ -141,6 +155,7 @@ icon_state = "milosoup" bonus_reagents = list("nutriment" = 1, "vitamin" = 3) tastes = list("milo" = 1) // wtf is milo + foodtype = GROSS /obj/item/weapon/reagent_containers/food/snacks/soup/mushroom name = "chantrelle soup" @@ -149,12 +164,14 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 5) list_reagents = list("nutriment" = 8, "vitamin" = 4) tastes = list("mushroom" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/soup/beet name = "beet soup" desc = "Wait, how do you spell it again..?" icon_state = "beetsoup" bonus_reagents = list("nutriment" = 1, "vitamin" = 5) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/soup/beet/New() ..() @@ -170,6 +187,7 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 5) list_reagents = list("nutriment" = 6, "mushroomhallucinogen" = 6) tastes = list("jelly" = 1, "mushroom" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/soup/amanitajelly name = "amanita jelly" @@ -179,6 +197,7 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 5) list_reagents = list("nutriment" = 6, "mushroomhallucinogen" = 3, "amatoxin" = 6) tastes = list("jelly" = 1, "mushroom" = 1) + foodtype = VEGETABLES | TOXIC /obj/item/weapon/reagent_containers/food/snacks/soup/stew name = "stew" @@ -189,6 +208,7 @@ bitesize = 7 volume = 100 tastes = list("tomato" = 1, "carrot" = 1) + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/soup/sweetpotato name = "sweet potato soup" @@ -196,6 +216,7 @@ icon_state = "sweetpotatosoup" bonus_reagents = list("nutriment" = 4, "vitamin" = 5) tastes = list("sweet potato" = 1) + foodtype = VEGETABLES | SUGAR /obj/item/weapon/reagent_containers/food/snacks/soup/beet/red name = "red beet soup" @@ -203,3 +224,4 @@ icon_state = "redbeetsoup" bonus_reagents = list("nutriment" = 4, "vitamin" = 6) tastes = list("beet" = 1) + foodtype = VEGETABLES diff --git a/code/modules/food_and_drinks/food/snacks_spaghetti.dm b/code/modules/food_and_drinks/food/snacks_spaghetti.dm index 8cd4665918..e137d9702c 100644 --- a/code/modules/food_and_drinks/food/snacks_spaghetti.dm +++ b/code/modules/food_and_drinks/food/snacks_spaghetti.dm @@ -8,6 +8,7 @@ cooked_type = /obj/item/weapon/reagent_containers/food/snacks/boiledspaghetti filling_color = "#F0E68C" tastes = list("pasta" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/boiledspaghetti name = "boiled spaghetti" @@ -20,6 +21,7 @@ custom_food_type = /obj/item/weapon/reagent_containers/food/snacks/customizable/pasta filling_color = "#F0E68C" tastes = list("pasta" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/pastatomato name = "spaghetti" @@ -32,6 +34,7 @@ list_reagents = list("nutriment" = 6, "tomatojuice" = 10, "vitamin" = 4) filling_color = "#DC143C" tastes = list("pasta" = 1, "tomato" = 1) + foodtype = GRAIN | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/copypasta name = "copypasta" @@ -44,6 +47,7 @@ list_reagents = list("nutriment" = 12, "tomatojuice" = 20, "vitamin" = 8) filling_color = "#DC143C" tastes = list("pasta" = 1, "tomato" = 1) + foodtype = GRAIN | VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/meatballspaghetti name = "spaghetti and meatballs" @@ -55,6 +59,7 @@ list_reagents = list("nutriment" = 8, "vitamin" = 4) filling_color = "#F0E68C" tastes = list("pasta" = 1, "tomato" = 1, "meat" = 1) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/spesslaw name = "spesslaw" @@ -66,6 +71,7 @@ list_reagents = list("nutriment" = 8, "vitamin" = 6) filling_color = "#F0E68C" tastes = list("pasta" = 1, "tomato" = 1, "meat" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/chowmein name = "chow mein" @@ -76,6 +82,7 @@ bonus_reagents = list("nutriment" = 3, "vitamin" = 4) list_reagents = list("nutriment" = 7, "vitamin" = 6) tastes = list("noodle" = 1, "tomato" = 1) + foodtype = GRAIN /obj/item/weapon/reagent_containers/food/snacks/beefnoodle name = "beef noodle" @@ -85,6 +92,7 @@ trash = /obj/item/weapon/reagent_containers/glass/bowl bonus_reagents = list("nutriment" = 5, "vitamin" = 6, "liquidgibs" = 3) tastes = list("noodle" = 1, "meat" = 1) + foodtype = GRAIN | MEAT /obj/item/weapon/reagent_containers/food/snacks/butternoodles name = "butter noodles" @@ -94,3 +102,4 @@ trash = /obj/item/trash/plate bonus_reagents = list("nutriment" = 8, "vitamin" = 1) tastes = list("noodle" = 1, "butter" = 1) + foodtype = GRAIN | DAIRY diff --git a/code/modules/food_and_drinks/food/snacks_vend.dm b/code/modules/food_and_drinks/food/snacks_vend.dm index 200659ac0e..8485e879f9 100644 --- a/code/modules/food_and_drinks/food/snacks_vend.dm +++ b/code/modules/food_and_drinks/food/snacks_vend.dm @@ -11,6 +11,7 @@ junkiness = 25 filling_color = "#D2691E" tastes = list("candy" = 1) + foodtype = JUNKFOOD | SUGAR /obj/item/weapon/reagent_containers/food/snacks/sosjerky name = "\improper Scaredy's Private Reserve Beef Jerky" @@ -21,6 +22,7 @@ junkiness = 25 filling_color = "#8B0000" tastes = list("dried meat" = 1) + foodtype = JUNKFOOD | MEAT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/sosjerky/healthy name = "homemade beef jerky" @@ -38,6 +40,7 @@ junkiness = 20 filling_color = "#FFD700" tastes = list("salt" = 1, "crisps" = 1) + foodtype = JUNKFOOD | FRIED /obj/item/weapon/reagent_containers/food/snacks/no_raisin name = "4no raisins" @@ -48,12 +51,14 @@ junkiness = 25 filling_color = "#8B0000" tastes = list("dried raisins" = 1) + foodtype = JUNKFOOD | FRUIT | SUGAR /obj/item/weapon/reagent_containers/food/snacks/no_raisin/healthy name = "homemade raisins" desc = "homemade raisins, the best in all of spess." list_reagents = list("nutriment" = 3, "vitamin" = 2) junkiness = 0 + foodtype = FRUIT /obj/item/weapon/reagent_containers/food/snacks/spacetwinkie name = "space twinkie" @@ -62,6 +67,7 @@ list_reagents = list("sugar" = 4) junkiness = 25 filling_color = "#FFD700" + foodtype = JUNKFOOD | GRAIN | SUGAR /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers name = "cheesie honkers" @@ -72,6 +78,7 @@ junkiness = 25 filling_color = "#FFD700" tastes = list("cheese" = 5, "crisps" = 2) + foodtype = JUNKFOOD | DAIRY | SUGAR /obj/item/weapon/reagent_containers/food/snacks/syndicake name = "syndi-cakes" @@ -81,3 +88,4 @@ list_reagents = list("nutriment" = 4, "doctorsdelight" = 5) filling_color = "#F5F5DC" tastes = list("sweetness" = 3, "cake" = 1) + foodtype = GRAIN | FRUIT | VEGETABLES diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm index e21bda82ed..e2f38141f3 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm @@ -18,7 +18,7 @@ insert ascii eagle on american flag background here container_type = OPENCONTAINER var/obj/item/frying = null //What's being fried RIGHT NOW? var/cook_time = 0 - var/static/list/blacklisted_items = typecacheof(list( + var/static/list/deepfry_blacklisted_items = typecacheof(list( /obj/item/weapon/screwdriver, /obj/item/weapon/crowbar, /obj/item/weapon/wrench, @@ -28,14 +28,8 @@ insert ascii eagle on american flag background here /obj/item/weapon/reagent_containers/glass, /obj/item/weapon/storage/part_replacer)) -/obj/item/weapon/circuitboard/machine/deep_fryer - name = "circuit board (Deep Fryer)" - build_path = /obj/machinery/deepfryer - origin_tech = "programming=1" - req_components = list(/obj/item/weapon/stock_parts/micro_laser = 1) - -/obj/machinery/deepfryer/New() - ..() +/obj/machinery/deepfryer/Initialize() + . = ..() create_reagents(50) reagents.add_reagent("nutriment", 25) component_parts = list() @@ -62,7 +56,7 @@ insert ascii eagle on american flag background here else if(default_deconstruction_screwdriver(user, "fryer_off", "fryer_off" ,I)) //where's the open maint panel icon?! return else - if(is_type_in_typecache(I, blacklisted_items)) + if(is_type_in_typecache(I, deepfry_blacklisted_items)) . = ..() else if(user.drop_item() && !frying) to_chat(user, "You put [I] into [src].") @@ -112,6 +106,7 @@ insert ascii eagle on american flag background here S.name = "the physical manifestation of the very concept of fried foods" S.desc = "A heavily fried...something. Who can tell anymore?" S.filling_color = S.color + S.foodtype |= FRIED if(istype(frying, /obj/item/weapon/reagent_containers/food/snacks/)) qdel(frying) else diff --git a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm index 267b77f0c5..c657787f9d 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm @@ -18,17 +18,15 @@ container_type = OPENCONTAINER var/obj/item/weapon/reagent_containers/mixer -/obj/machinery/food_cart/New() - ..() +/obj/machinery/food_cart/Initialize() + . = ..() create_reagents(LIQUID_CAPACIY) reagents.set_reacting(FALSE) mixer = new /obj/item/weapon/reagent_containers(src, MIXER_CAPACITY) mixer.name = "Mixer" /obj/machinery/food_cart/Destroy() - if(mixer) - qdel(mixer) - mixer = null + QDEL_NULL(mixer) return ..() /obj/machinery/food_cart/attack_hand(mob/user) diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index 2d6bc81f0b..c3d4a1802b 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -6,58 +6,21 @@ icon_state = "grinder" density = TRUE anchored = TRUE + use_power = IDLE_POWER_USE + idle_power_usage = 2 + active_power_usage = 500 + circuit = /obj/item/weapon/circuitboard/machine/gibber + var/operating = FALSE //Is it on? var/dirty = 0 // Does it need cleaning? var/gibtime = 40 // Time from starting until meat appears var/meat_produced = 0 var/ignore_clothing = 0 - use_power = IDLE_POWER_USE - idle_power_usage = 2 - active_power_usage = 500 - -//auto-gibs anything that bumps into it -/obj/machinery/gibber/autogibber - var/turf/input_plate - -/obj/machinery/gibber/autogibber/Initialize() - . = ..() - for(var/i in GLOB.cardinals) - var/obj/machinery/mineral/input/input_obj = locate() in get_step(loc, i) - if(input_obj) - if(isturf(input_obj.loc)) - input_plate = input_obj.loc - qdel(input_obj) - break - - if(!input_plate) - CRASH("Didn't find an input plate.") - return - -/obj/machinery/gibber/autogibber/CollidedWith(atom/movable/AM) - if(!input_plate) - return - - if(ismob(AM)) - var/mob/M = AM - - if(M.loc == input_plate) - M.loc = src - M.gib() /obj/machinery/gibber/Initialize() . = ..() add_overlay("grjam") - var/obj/item/weapon/circuitboard/machine/gibber/B = new - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/gibber - name = "Gibber (Machine Board)" - build_path = /obj/machinery/gibber - origin_tech = "programming=2;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1) /obj/machinery/gibber/RefreshParts() var/gib_time = 40 @@ -234,3 +197,32 @@ pixel_x = initial(pixel_x) //return to its spot after shaking operating = FALSE update_icon() + +//auto-gibs anything that bumps into it +/obj/machinery/gibber/autogibber + var/turf/input_plate + +/obj/machinery/gibber/autogibber/Initialize() + . = ..() + for(var/i in GLOB.cardinals) + var/obj/machinery/mineral/input/input_obj = locate() in get_step(loc, i) + if(input_obj) + if(isturf(input_obj.loc)) + input_plate = input_obj.loc + qdel(input_obj) + break + + if(!input_plate) + CRASH("Didn't find an input plate.") + return + +/obj/machinery/gibber/autogibber/CollidedWith(atom/movable/AM) + if(!input_plate) + return + + if(ismob(AM)) + var/mob/M = AM + + if(M.loc == input_plate) + M.forceMove(src) + M.gib() \ No newline at end of file diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm index 95bbf1f138..d4fa73c74a 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm @@ -14,11 +14,19 @@ anchored = FALSE use_power = NO_POWER_USE layer = BELOW_OBJ_LAYER + container_type = OPENCONTAINER + max_integrity = 300 var/list/product_types = list() var/dispense_flavour = ICECREAM_VANILLA var/flavour_name = "vanilla" - container_type = OPENCONTAINER - max_integrity = 300 + var/static/list/icecream_vat_reagents = list( + "milk" = 5, + "flour" = 5, + "sugar" = 5, + "ice" = 5, + "cocoa" = 5, + "berryjuice" = 5, + "singulo" = 5) /obj/machinery/icecream_vat/proc/get_ingredient_list(type) switch(type) @@ -52,19 +60,14 @@ return "vanilla" -/obj/machinery/icecream_vat/New() - ..() +/obj/machinery/icecream_vat/Initialize() + . = ..() while(product_types.len < 6) product_types.Add(5) create_reagents() reagents.set_reacting(FALSE) - reagents.add_reagent("milk", 5) - reagents.add_reagent("flour", 5) - reagents.add_reagent("sugar", 5) - reagents.add_reagent("ice", 5) - reagents.add_reagent("cocoa", 5) - reagents.add_reagent("berryjuice", 5) - reagents.add_reagent("singulo", 5) + for(var/reagent in icecream_vat_reagents) + reagents.add_reagent(reagent, icecream_vat_reagents[reagent]) /obj/machinery/icecream_vat/attack_hand(mob/user) user.set_machine(src) @@ -177,6 +180,7 @@ var/ice_creamed = 0 var/cone_type bitesize = 3 + foodtype = DAIRY /obj/item/weapon/reagent_containers/food/snacks/icecream/Initialize() . = ..() diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm index 61c4b9eace..40a52b0d3b 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm @@ -9,6 +9,7 @@ use_power = IDLE_POWER_USE idle_power_usage = 5 active_power_usage = 100 + circuit = /obj/item/weapon/circuitboard/machine/microwave var/operating = FALSE // Is it on? var/dirty = 0 // = {0..100} Does it need cleaning? var/broken = 0 // ={0,1,2} How broken is it??? @@ -21,22 +22,9 @@ * Initialising ********************/ -/obj/machinery/microwave/New() +/obj/machinery/microwave/Initialize() + . = ..() create_reagents(100) - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/microwave(null) - B.apply_default_parts(src) - ..() - -/obj/item/weapon/circuitboard/machine/microwave - name = "Microwave (Machine Board)" - build_path = /obj/machinery/microwave - origin_tech = "programming=2;magnets=2" - req_components = list( - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/console_screen = 1, - /obj/item/stack/sheet/glass = 1) /obj/machinery/microwave/RefreshParts() var/E diff --git a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm index 5b695cfd4b..0a86f155a4 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm @@ -9,24 +9,11 @@ use_power = IDLE_POWER_USE idle_power_usage = 5 active_power_usage = 50 + circuit = /obj/item/weapon/circuitboard/machine/monkey_recycler var/grinded = 0 var/required_grind = 5 var/cube_production = 1 - -/obj/machinery/monkey_recycler/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/monkey_recycler(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/monkey_recycler - name = "Monkey Recycler (Machine Board)" - build_path = /obj/machinery/monkey_recycler - origin_tech = "programming=1;biotech=2" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1) - /obj/machinery/monkey_recycler/RefreshParts() var/req_grind = 5 var/cubes_made = 1 diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm index 71f8d727fc..018e6cfc79 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm @@ -7,44 +7,15 @@ layer = BELOW_OBJ_LAYER density = TRUE anchored = TRUE - var/broken = 0 - var/processing = FALSE use_power = IDLE_POWER_USE idle_power_usage = 5 active_power_usage = 50 + circuit = /obj/item/weapon/circuitboard/machine/processor + var/broken = FALSE + var/processing = FALSE var/rating_speed = 1 var/rating_amount = 1 -/obj/machinery/processor/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/processor(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/processor - name = "Food Processor (Machine Board)" - build_path = /obj/machinery/processor - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1) - -/obj/item/weapon/circuitboard/machine/processor - name = "Food Processor (Machine Board)" - build_path = /obj/machinery/processor - -/obj/item/weapon/circuitboard/machine/processor/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/screwdriver)) - if(build_path == /obj/machinery/processor) - name = "Slime Processor (Machine Board)" - build_path = /obj/machinery/processor/slime - to_chat(user, "Name protocols successfully updated.") - else - name = "Food Processor (Machine Board)" - build_path = /obj/machinery/processor - to_chat(user, "Defaulting name protocols.") - else - return ..() - /obj/machinery/processor/RefreshParts() for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) rating_amount = B.rating @@ -300,11 +271,7 @@ name = "Slime processor" desc = "An industrial grinder with a sticker saying appropriated for science department. Keep hands clear of intake area while operating." -/obj/machinery/processor/slime/New() - ..() +/obj/machinery/processor/slime/Initialize() + . = ..() var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/processor/slime(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/processor/slime - name = "Slime Processor (Machine Board)" - build_path = /obj/machinery/processor/slime + B.apply_default_parts(src) \ No newline at end of file diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index 2cb0631cb2..c1e1aa7b81 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -12,13 +12,14 @@ use_power = IDLE_POWER_USE idle_power_usage = 5 active_power_usage = 100 + circuit = /obj/item/weapon/circuitboard/machine/smartfridge var/max_n_of_items = 1500 var/icon_on = "smartfridge" var/icon_off = "smartfridge-off" var/list/initial_contents /obj/machinery/smartfridge/Initialize() - ..() + . = ..() create_reagents() reagents.set_reacting(FALSE) @@ -30,40 +31,6 @@ for(var/i in 1 to amount) load(new typekey(src)) - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/smartfridge(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/smartfridge - name = "Smartfridge (Machine Board)" - build_path = /obj/machinery/smartfridge - origin_tech = "programming=1" - req_components = list(/obj/item/weapon/stock_parts/matter_bin = 1) - var/static/list/fridges = list(/obj/machinery/smartfridge = "plant produce", - /obj/machinery/smartfridge/food = "food", - /obj/machinery/smartfridge/drinks = "drinks", - /obj/machinery/smartfridge/extract = "slimes", - /obj/machinery/smartfridge/chemistry = "chems", - /obj/machinery/smartfridge/chemistry/virology = "viruses", - /obj/machinery/smartfridge/disks = "disks") - -/obj/item/weapon/circuitboard/machine/smartfridge/New(loc, new_type) - if(new_type) - build_path = new_type - ..() - -/obj/item/weapon/circuitboard/machine/smartfridge/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/screwdriver)) - var/position = fridges.Find(build_path, fridges) - position = (position == fridges.len) ? 1 : (position + 1) - build_path = fridges[position] - to_chat(user, "You set the board to [fridges[build_path]].") - else - return ..() - -/obj/item/weapon/circuitboard/machine/smartfridge/examine(mob/user) - ..() - to_chat(user, "[src] is set to [fridges[build_path]]. You can use a screwdriver to reconfigure it.") - /obj/machinery/smartfridge/RefreshParts() for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) max_n_of_items = 1500 * B.rating @@ -255,8 +222,8 @@ icon_off = "drying_rack" var/drying = FALSE -/obj/machinery/smartfridge/drying_rack/New() - ..() +/obj/machinery/smartfridge/drying_rack/Initialize() + . = ..() if(component_parts && component_parts.len) component_parts.Cut() component_parts = null diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm index 17662feb6e..bfa8b8bebd 100644 --- a/code/modules/food_and_drinks/recipes/food_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm @@ -13,7 +13,7 @@ id = "tofu" required_reagents = list("soymilk" = 10) required_catalysts = list("enzyme" = 5) - mob_react=1 + mob_react = FALSE /datum/chemical_reaction/tofu/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) @@ -37,7 +37,7 @@ name = "Chocolate Bar" id = "chocolate_bar" required_reagents = list("chocolate_milk" = 4, "sugar" = 2) - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/chocolate_bar2/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) @@ -91,7 +91,7 @@ name = "synthmeat" id = "synthmeat" required_reagents = list("blood" = 5, "cryoxadone" = 1) - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/synthmeat/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm index 4a150faad7..313199c053 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm @@ -248,7 +248,7 @@ /datum/crafting_recipe/food/ratburger name = "Rat burger" reqs = list( - /obj/item/trash/deadmouse = 1, + /obj/item/weapon/reagent_containers/food/snacks/deadmouse = 1, /obj/item/weapon/reagent_containers/food/snacks/bun = 1 ) result = /obj/item/weapon/reagent_containers/food/snacks/burger/rat diff --git a/code/modules/goonchat/browserassets/css/browserOutput.css b/code/modules/goonchat/browserassets/css/browserOutput.css index 7c42972a10..36640db74e 100644 --- a/code/modules/goonchat/browserassets/css/browserOutput.css +++ b/code/modules/goonchat/browserassets/css/browserOutput.css @@ -371,6 +371,9 @@ h1.alert, h2.alert {color: #000000;} .swarmer {color: #2C75FF;} .resonate {color: #298F85;} +.love {color: #FF69Bf;} +.lovebold {color: #FF69Bf; font-weight: bold;} + .connectionClosed, .fatalError {background: red; color: white; padding: 5px;} .connectionClosed.restored {background: green;} .internal.boldnshit {color: blue; font-weight: bold;} diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index a5c05d4607..eec6634d0d 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -7,6 +7,7 @@ anchored = TRUE use_power = IDLE_POWER_USE idle_power_usage = 40 + circuit = /obj/item/weapon/circuitboard/machine/biogenerator var/processing = FALSE var/obj/item/weapon/reagent_containers/glass/beaker = null var/points = 0 @@ -18,17 +19,13 @@ var/list/show_categories = list("Food", "Botany Chemicals", "Leather and Cloth") var/list/timesFiveCategories = list("Food", "Botany Chemicals") -/obj/machinery/biogenerator/New() - ..() +/obj/machinery/biogenerator/Initialize() + . = ..() files = new /datum/research/biogenerator(src) create_reagents(1000) - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/biogenerator(null) - B.apply_default_parts(src) /obj/machinery/biogenerator/Destroy() - if(beaker) - qdel(beaker) - beaker = null + QDEL_NULL(beaker) return ..() /obj/machinery/biogenerator/contents_explosion(severity, target) @@ -43,16 +40,6 @@ update_icon() updateUsrDialog() -/obj/item/weapon/circuitboard/machine/biogenerator - name = "Biogenerator (Machine Board)" - build_path = /obj/machinery/biogenerator - origin_tech = "programming=2;biotech=3;materials=3" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/stack/cable_coil = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - /obj/machinery/biogenerator/RefreshParts() var/E = 0 var/P = 0 diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index eef8b6b27c..6e27e4f922 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -5,6 +5,7 @@ icon_state = "dnamod" density = TRUE anchored = TRUE + circuit = /obj/item/weapon/circuitboard/machine/plantgenes var/obj/item/seeds/seed var/obj/item/weapon/disk/plantgene/disk @@ -22,21 +23,6 @@ var/min_wchance = 67 var/min_wrate = 10 -/obj/machinery/plantgenes/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/plantgenes(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/plantgenes - name = "Plant DNA Manipulator (Machine Board)" - build_path = /obj/machinery/plantgenes - origin_tech = "programming=3;biotech=3" - req_components = list( - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/console_screen = 1, - /obj/item/weapon/stock_parts/scanning_module = 1) - /obj/machinery/plantgenes/RefreshParts() // Comments represent the max you can set per tier, respectively. seeds.dm [219] clamps these for us but we don't want to mislead the viewer. for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) if(M.rating > 3) @@ -421,23 +407,9 @@ seed.name = "experimental " + seed.name seed.icon_state = "seed-x" - - // Gene modder for seed vault ship, built with high tech alien parts. -/obj/machinery/plantgenes/seedvault/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/plantgenes/vault(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/plantgenes/vault - name = "alien board (Plant DNA Manipulator)" - icon_state = "abductor_mod" - origin_tech = "programming=5;biotech=5" - // It wasn't made by actual abductors race, so no abductor tech here. - def_components = list( - /obj/item/weapon/stock_parts/manipulator = /obj/item/weapon/stock_parts/manipulator/femto, - /obj/item/weapon/stock_parts/micro_laser = /obj/item/weapon/stock_parts/micro_laser/quadultra, - /obj/item/weapon/stock_parts/scanning_module = /obj/item/weapon/stock_parts/scanning_module/triphasic) +/obj/machinery/plantgenes/seedvault + circuit = /obj/item/weapon/circuitboard/machine/plantgenes/vault /* * Plant DNA disk diff --git a/code/modules/hydroponics/grown/ambrosia.dm b/code/modules/hydroponics/grown/ambrosia.dm index 51b8f3c43e..702302dadf 100644 --- a/code/modules/hydroponics/grown/ambrosia.dm +++ b/code/modules/hydroponics/grown/ambrosia.dm @@ -7,6 +7,7 @@ slot_flags = SLOT_HEAD filling_color = "#008000" bitesize_mod = 2 + foodtype = VEGETABLES // Ambrosia Vulgaris /obj/item/seeds/ambrosia diff --git a/code/modules/hydroponics/grown/apple.dm b/code/modules/hydroponics/grown/apple.dm index 4d4712e093..f5b4e7ab76 100644 --- a/code/modules/hydroponics/grown/apple.dm +++ b/code/modules/hydroponics/grown/apple.dm @@ -23,6 +23,7 @@ icon_state = "apple" filling_color = "#FF4500" bitesize = 100 // Always eat the apple in one bite + foodtype = FRUIT // Posioned Apple /obj/item/seeds/apple/poisoned @@ -33,6 +34,7 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/apple/poisoned seed = /obj/item/seeds/apple/poisoned + foodtype = FRUIT | TOXIC // Gold Apple /obj/item/seeds/apple/gold diff --git a/code/modules/hydroponics/grown/banana.dm b/code/modules/hydroponics/grown/banana.dm index 91b096bc38..e2dce252e7 100644 --- a/code/modules/hydroponics/grown/banana.dm +++ b/code/modules/hydroponics/grown/banana.dm @@ -23,6 +23,7 @@ trash = /obj/item/weapon/grown/bananapeel filling_color = "#FFFF00" bitesize = 5 + foodtype = FRUIT /obj/item/weapon/reagent_containers/food/snacks/grown/banana/suicide_act(mob/user) user.visible_message("[user] is aiming [src] at [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide!") diff --git a/code/modules/hydroponics/grown/beans.dm b/code/modules/hydroponics/grown/beans.dm index 277dfd0629..756c23ff14 100644 --- a/code/modules/hydroponics/grown/beans.dm +++ b/code/modules/hydroponics/grown/beans.dm @@ -25,6 +25,7 @@ icon_state = "soybeans" filling_color = "#F0E68C" bitesize_mod = 2 + foodtype = VEGETABLES // Koibean /obj/item/seeds/soya/koi @@ -45,4 +46,5 @@ desc = "Something about these seems fishy." icon_state = "koibeans" filling_color = "#F0E68C" - bitesize_mod = 2 \ No newline at end of file + bitesize_mod = 2 + foodtype = VEGETABLES diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm index 6ab8a98ac6..b12685557e 100644 --- a/code/modules/hydroponics/grown/berries.dm +++ b/code/modules/hydroponics/grown/berries.dm @@ -25,6 +25,7 @@ gender = PLURAL filling_color = "#FF00FF" bitesize_mod = 2 + foodtype = FRUIT // Poison Berries /obj/item/seeds/berry/poison @@ -44,6 +45,7 @@ desc = "Taste so good, you could die!" icon_state = "poisonberrypile" filling_color = "#C71585" + foodtype = FRUIT | TOXIC // Death Berries /obj/item/seeds/berry/death @@ -65,6 +67,7 @@ desc = "Taste so good, you could die!" icon_state = "deathberrypile" filling_color = "#708090" + foodtype = FRUIT | TOXIC // Glow Berries /obj/item/seeds/berry/glow @@ -88,6 +91,7 @@ icon_state = "glowberrypile" filling_color = "#7CFC00" origin_tech = "plasmatech=6" + foodtype = FRUIT // Cherries /obj/item/seeds/cherry @@ -117,6 +121,7 @@ gender = PLURAL filling_color = "#FF0000" bitesize_mod = 2 + foodtype = FRUIT // Blue Cherries /obj/item/seeds/cherry/blue @@ -137,6 +142,7 @@ icon_state = "bluecherry" filling_color = "#6495ED" bitesize_mod = 2 + foodtype = FRUIT // Grapes /obj/item/seeds/grape @@ -167,6 +173,7 @@ dried_type = /obj/item/weapon/reagent_containers/food/snacks/no_raisin/healthy filling_color = "#FF1493" bitesize_mod = 2 + foodtype = FRUIT // Green Grapes /obj/item/seeds/grape/green diff --git a/code/modules/hydroponics/grown/cannabis.dm b/code/modules/hydroponics/grown/cannabis.dm index 2788e0ba13..0afb4d4d9c 100644 --- a/code/modules/hydroponics/grown/cannabis.dm +++ b/code/modules/hydroponics/grown/cannabis.dm @@ -90,6 +90,7 @@ icon_state = "cannabis" filling_color = "#00FF00" bitesize_mod = 2 + foodtype = VEGETABLES //i dont really know what else weed could be to be honest /obj/item/weapon/reagent_containers/food/snacks/grown/cannabis/rainbow diff --git a/code/modules/hydroponics/grown/cereals.dm b/code/modules/hydroponics/grown/cereals.dm index 66c5a17a84..0a6e0d255d 100644 --- a/code/modules/hydroponics/grown/cereals.dm +++ b/code/modules/hydroponics/grown/cereals.dm @@ -21,6 +21,7 @@ icon_state = "wheat" filling_color = "#F0E68C" bitesize_mod = 2 + foodtype = GRAIN // Oat /obj/item/seeds/wheat/oat @@ -40,6 +41,7 @@ icon_state = "oat" filling_color = "#556B2F" bitesize_mod = 2 + foodtype = GRAIN // Rice /obj/item/seeds/wheat/rice @@ -60,6 +62,7 @@ icon_state = "rice" filling_color = "#FAFAD2" bitesize_mod = 2 + foodtype = GRAIN //Meatwheat - grows into synthetic meat /obj/item/seeds/wheat/meat @@ -79,6 +82,7 @@ filling_color = rgb(150, 0, 0) bitesize_mod = 2 seed = /obj/item/seeds/wheat/meat + foodtype = MEAT | GRAIN /obj/item/weapon/reagent_containers/food/snacks/grown/meatwheat/attack_self(mob/living/user) user.visible_message("[user] crushes [src] into meat.", "You crush [src] into something that resembles meat.") diff --git a/code/modules/hydroponics/grown/chili.dm b/code/modules/hydroponics/grown/chili.dm index 66bd823a89..9fa27e6476 100644 --- a/code/modules/hydroponics/grown/chili.dm +++ b/code/modules/hydroponics/grown/chili.dm @@ -25,6 +25,7 @@ icon_state = "chilipepper" filling_color = "#FF0000" bitesize_mod = 2 + foodtype = VEGETABLES // Ice Chili /obj/item/seeds/chili/ice @@ -49,6 +50,7 @@ filling_color = "#0000CD" bitesize_mod = 2 origin_tech = "biotech=4" + foodtype = VEGETABLES // Ghost Chili /obj/item/seeds/chili/ghost @@ -75,6 +77,7 @@ filling_color = "#F8F8FF" bitesize_mod = 4 origin_tech = "biotech=4;magnets=5" + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/grown/ghost_chili/attack_hand(mob/user) ..() diff --git a/code/modules/hydroponics/grown/citrus.dm b/code/modules/hydroponics/grown/citrus.dm index 133d0d71f4..a6e7ef9211 100644 --- a/code/modules/hydroponics/grown/citrus.dm +++ b/code/modules/hydroponics/grown/citrus.dm @@ -5,6 +5,7 @@ desc = "It's so sour, your face will twist." icon_state = "lime" bitesize_mod = 2 + foodtype = FRUIT // Lime /obj/item/seeds/lime @@ -104,6 +105,7 @@ desc = "Made for burning houses down." icon_state = "firelemon" bitesize_mod = 2 + foodtype = FRUIT /obj/item/weapon/reagent_containers/food/snacks/grown/firelemon/attack_self(mob/living/user) var/area/A = get_area(user) diff --git a/code/modules/hydroponics/grown/cocoa_vanilla.dm b/code/modules/hydroponics/grown/cocoa_vanilla.dm index 6e04bdaf97..35fb9b1eaf 100644 --- a/code/modules/hydroponics/grown/cocoa_vanilla.dm +++ b/code/modules/hydroponics/grown/cocoa_vanilla.dm @@ -25,6 +25,7 @@ icon_state = "cocoapod" filling_color = "#FFD700" bitesize_mod = 2 + foodtype = VEGETABLES // Vanilla Pod /obj/item/seeds/cocoapod/vanillapod @@ -43,4 +44,5 @@ name = "vanilla pod" desc = "Fattening... Mmmmm... vanilla." icon_state = "vanillapod" - filling_color = "#FFD700" \ No newline at end of file + filling_color = "#FFD700" + foodtype = VEGETABLES diff --git a/code/modules/hydroponics/grown/corn.dm b/code/modules/hydroponics/grown/corn.dm index 59e7a0c008..9c0a12bc4b 100644 --- a/code/modules/hydroponics/grown/corn.dm +++ b/code/modules/hydroponics/grown/corn.dm @@ -24,6 +24,7 @@ filling_color = "#FFFF00" trash = /obj/item/weapon/grown/corncob bitesize_mod = 2 + foodtype = VEGETABLES /obj/item/weapon/grown/corncob name = "corn cob" @@ -79,4 +80,4 @@ snap_pops -= 1 if(!snap_pops) new /obj/item/weapon/grown/corncob(user.loc) - qdel(src) \ No newline at end of file + qdel(src) diff --git a/code/modules/hydroponics/grown/eggplant.dm b/code/modules/hydroponics/grown/eggplant.dm index 8ec46ff77d..1cad3917f2 100644 --- a/code/modules/hydroponics/grown/eggplant.dm +++ b/code/modules/hydroponics/grown/eggplant.dm @@ -22,6 +22,7 @@ icon_state = "eggplant" filling_color = "#800080" bitesize_mod = 2 + foodtype = FRUIT // Egg-Plant /obj/item/seeds/eggplant/eggy @@ -41,4 +42,5 @@ icon_state = "eggyplant" trash = /obj/item/weapon/reagent_containers/food/snacks/egg filling_color = "#F8F8FF" - bitesize_mod = 2 \ No newline at end of file + bitesize_mod = 2 + foodtype = MEAT diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm index 881e47238e..9d1e3037ad 100644 --- a/code/modules/hydroponics/grown/flowers.dm +++ b/code/modules/hydroponics/grown/flowers.dm @@ -25,6 +25,7 @@ slot_flags = SLOT_HEAD filling_color = "#FF6347" bitesize_mod = 3 + foodtype = VEGETABLES | GROSS // Lily /obj/item/seeds/poppy/lily diff --git a/code/modules/hydroponics/grown/kudzu.dm b/code/modules/hydroponics/grown/kudzu.dm index 45269743a5..ad32be14d5 100644 --- a/code/modules/hydroponics/grown/kudzu.dm +++ b/code/modules/hydroponics/grown/kudzu.dm @@ -99,4 +99,5 @@ desc = "Pueraria Virallis: An invasive species with vines that rapidly creep and wrap around whatever they contact." icon_state = "kudzupod" filling_color = "#6B8E23" - bitesize_mod = 2 \ No newline at end of file + bitesize_mod = 2 + foodtype = VEGETABLES | GROSS diff --git a/code/modules/hydroponics/grown/melon.dm b/code/modules/hydroponics/grown/melon.dm index 4c6fa15b04..3cbbe49451 100644 --- a/code/modules/hydroponics/grown/melon.dm +++ b/code/modules/hydroponics/grown/melon.dm @@ -25,6 +25,7 @@ w_class = WEIGHT_CLASS_NORMAL filling_color = "#008000" bitesize_mod = 3 + foodtype = FRUIT // Holymelon /obj/item/seeds/watermelon/holy diff --git a/code/modules/hydroponics/grown/misc.dm b/code/modules/hydroponics/grown/misc.dm index f96f7d821b..54b53c9a95 100644 --- a/code/modules/hydroponics/grown/misc.dm +++ b/code/modules/hydroponics/grown/misc.dm @@ -54,6 +54,7 @@ icon_state = "cabbage" filling_color = "#90EE90" bitesize_mod = 2 + foodtype = VEGETABLES // Sugarcane @@ -79,6 +80,7 @@ icon_state = "sugarcane" filling_color = "#FFD700" bitesize_mod = 2 + foodtype = VEGETABLES | SUGAR // Gatfruit @@ -109,6 +111,7 @@ origin_tech = "combat=6" trash = /obj/item/weapon/gun/ballistic/revolver bitesize_mod = 2 + foodtype = FRUIT //Cherry Bombs /obj/item/seeds/cherry/bomb @@ -164,4 +167,4 @@ plantname = "Fruiting Cactus" product = /obj/item/weapon/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' - growthstages = 2 \ No newline at end of file + growthstages = 2 diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm index 18f6353ba2..088a9aa144 100644 --- a/code/modules/hydroponics/grown/mushrooms.dm +++ b/code/modules/hydroponics/grown/mushrooms.dm @@ -1,6 +1,7 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom name = "mushroom" bitesize_mod = 2 + foodtype = VEGETABLES // Reishi @@ -22,6 +23,9 @@ growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' reagents_add = list("morphine" = 0.35, "charcoal" = 0.35, "nutriment" = 0) + + + /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/reishi seed = /obj/item/seeds/reishi name = "reishi" @@ -29,7 +33,6 @@ icon_state = "reishi" filling_color = "#FF4500" - // Fly Amanita /obj/item/seeds/amanita name = "pack of fly amanita mycelium" diff --git a/code/modules/hydroponics/grown/potato.dm b/code/modules/hydroponics/grown/potato.dm index 12d8e46ccd..95cadfe979 100644 --- a/code/modules/hydroponics/grown/potato.dm +++ b/code/modules/hydroponics/grown/potato.dm @@ -25,6 +25,7 @@ icon_state = "potato" filling_color = "#E9967A" bitesize = 100 + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/grown/potato/wedges @@ -61,4 +62,4 @@ seed = /obj/item/seeds/potato/sweet name = "sweet potato" desc = "It's sweet." - icon_state = "sweetpotato" \ No newline at end of file + icon_state = "sweetpotato" diff --git a/code/modules/hydroponics/grown/pumpkin.dm b/code/modules/hydroponics/grown/pumpkin.dm index 1354edbcaa..4e7bc179d3 100644 --- a/code/modules/hydroponics/grown/pumpkin.dm +++ b/code/modules/hydroponics/grown/pumpkin.dm @@ -23,6 +23,7 @@ icon_state = "pumpkin" filling_color = "#FFA500" bitesize_mod = 2 + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(W.is_sharp()) @@ -52,3 +53,4 @@ icon_state = "blumpkin" filling_color = "#87CEFA" bitesize_mod = 2 + foodtype = VEGETABLES \ No newline at end of file diff --git a/code/modules/hydroponics/grown/root.dm b/code/modules/hydroponics/grown/root.dm index 7794148f0e..7a4547bd1d 100644 --- a/code/modules/hydroponics/grown/root.dm +++ b/code/modules/hydroponics/grown/root.dm @@ -21,6 +21,7 @@ icon_state = "carrot" filling_color = "#FFA500" bitesize_mod = 2 + foodtype = VEGETABLES /obj/item/weapon/reagent_containers/food/snacks/grown/carrot/attackby(obj/item/I, mob/user, params) if(I.is_sharp()) @@ -50,6 +51,7 @@ desc = "Closely related to carrots." icon_state = "parsnip" bitesize_mod = 2 + foodtype = VEGETABLES // White-Beet @@ -75,6 +77,7 @@ icon_state = "whitebeet" filling_color = "#F4A460" bitesize_mod = 2 + foodtype = VEGETABLES // Red Beet /obj/item/seeds/redbeet @@ -98,3 +101,4 @@ desc = "You can't beat red beet." icon_state = "redbeet" bitesize_mod = 2 + foodtype = VEGETABLES diff --git a/code/modules/hydroponics/grown/tomato.dm b/code/modules/hydroponics/grown/tomato.dm index 4a8faa6829..24780216a2 100644 --- a/code/modules/hydroponics/grown/tomato.dm +++ b/code/modules/hydroponics/grown/tomato.dm @@ -22,6 +22,7 @@ splat_type = /obj/effect/decal/cleanable/tomato_smudge filling_color = "#FF6347" bitesize_mod = 2 + foodtype = VEGETABLES // Blood Tomato /obj/item/seeds/tomato/blood @@ -43,7 +44,7 @@ splat_type = /obj/effect/gibspawner/generic filling_color = "#FF0000" origin_tech = "biotech=5" - + foodtype = VEGETABLES | GROSS // Blue Tomato /obj/item/seeds/tomato/blue diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 499fc4bd64..e05110657f 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -6,6 +6,7 @@ anchored = TRUE pixel_y = 8 unique_rename = 1 + circuit = /obj/item/weapon/circuitboard/machine/hydroponics var/waterlevel = 100 //The amount of water in the tray (max 100) var/maxwater = 100 //The maximum amount of water in the tray var/nutrilevel = 10 //The amount of nutrient in the tray (max 10) @@ -37,20 +38,6 @@ icon = 'icons/obj/hydroponics/equipment.dmi' icon_state = "hydrotray3" -/obj/machinery/hydroponics/constructable/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/hydroponics(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/hydroponics - name = "Hydroponics Tray (Machine Board)" - build_path = /obj/machinery/hydroponics/constructable - origin_tech = "programming=1;biotech=2" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 2, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - /obj/machinery/hydroponics/constructable/RefreshParts() var/tmp_capacity = 0 for (var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index 65fa87c658..ce067ed584 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -44,23 +44,11 @@ icon_state = "sextractor" density = TRUE anchored = TRUE + circuit = /obj/item/weapon/circuitboard/machine/seed_extractor var/piles = list() var/max_seeds = 1000 var/seed_multiplier = 1 -/obj/machinery/seed_extractor/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/seed_extractor(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/seed_extractor - name = "Seed Extractor (Machine Board)" - build_path = /obj/machinery/seed_extractor - origin_tech = "programming=1" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1) - /obj/machinery/seed_extractor/RefreshParts() for(var/obj/item/weapon/stock_parts/matter_bin/B in component_parts) max_seeds = 1000 * B.rating diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index c38c08ca0b..5c94ae750e 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -193,8 +193,8 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums libcomp_menu[page] = "" libcomp_menu[page] += "[C.author][C.title][C.category]\[Order\]\n" -/obj/machinery/computer/libraryconsole/bookmanagement/New() - ..() +/obj/machinery/computer/libraryconsole/bookmanagement/Initialize() + . = ..() if(circuit) circuit.name = "Book Inventory Management Console (Machine Board)" circuit.build_path = /obj/machinery/computer/libraryconsole/bookmanagement diff --git a/code/modules/lighting/lighting_object.dm b/code/modules/lighting/lighting_object.dm index b5d5a2bab1..d0fbf029b8 100644 --- a/code/modules/lighting/lighting_object.dm +++ b/code/modules/lighting/lighting_object.dm @@ -9,7 +9,7 @@ GLOBAL_LIST_EMPTY(all_lighting_objects) // Global list of lighting objects. icon_state = "transparent" color = LIGHTING_BASE_MATRIX plane = LIGHTING_PLANE - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT layer = LIGHTING_LAYER invisibility = INVISIBILITY_LIGHTING diff --git a/code/modules/lighting/lighting_turf.dm b/code/modules/lighting/lighting_turf.dm index 3aca57c4bf..fc03cfb8c0 100644 --- a/code/modules/lighting/lighting_turf.dm +++ b/code/modules/lighting/lighting_turf.dm @@ -95,14 +95,6 @@ has_opaque_atom = TRUE break -// If an opaque movable atom moves around we need to potentially update visibility. -/turf/Entered(var/atom/movable/Obj, var/atom/OldLoc) - . = ..() - - if (Obj && Obj.opacity) - has_opaque_atom = TRUE // Make sure to do this before reconsider_lights(), incase we're on instant updates. Guaranteed to be on in this case. - reconsider_lights() - /turf/Exited(var/atom/movable/Obj, var/atom/newloc) . = ..() diff --git a/code/modules/mining/aux_base.dm b/code/modules/mining/aux_base.dm index 90248bce2e..308f8743bc 100644 --- a/code/modules/mining/aux_base.dm +++ b/code/modules/mining/aux_base.dm @@ -26,10 +26,9 @@ interface with the mining shuttle at the landing site if a mobile beacon is also var/obj/item/device/gps/internal/base/locator circuit = /obj/item/weapon/circuitboard/computer/auxillary_base -/obj/machinery/computer/auxillary_base/New(location, obj/item/weapon/circuitboard/computer/shuttle/C) - ..() - locator = new /obj/item/device/gps/internal/base(src) - +/obj/machinery/computer/auxillary_base/Initialize() + . = ..() + locator = new(src) /obj/machinery/computer/auxillary_base/attack_hand(mob/user) if(..(user)) diff --git a/code/modules/mining/aux_base_camera.dm b/code/modules/mining/aux_base_camera.dm index 62702fc202..b64c6b9989 100644 --- a/code/modules/mining/aux_base_camera.dm +++ b/code/modules/mining/aux_base_camera.dm @@ -49,9 +49,9 @@ light_color = LIGHT_COLOR_PINK -/obj/machinery/computer/camera_advanced/base_construction/New() - ..() - RCD = new /obj/item/weapon/construction/rcd/internal(src) +/obj/machinery/computer/camera_advanced/base_construction/Initialize() + . = ..() + RCD = new(src) /obj/machinery/computer/camera_advanced/base_construction/Initialize(mapload) ..() diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index 96c7cbf6fe..981b97940c 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -199,18 +199,9 @@ max_n_of_items = 10 pixel_y = -4 flags = NODECONSTRUCT + var/empty = FALSE -/obj/machinery/smartfridge/survival_pod/empty - name = "dusty survival pod storage" - desc = "A heated storage unit. This one's seen better days." - -/obj/machinery/smartfridge/survival_pod/empty/Initialize(mapload) - ..(mapload, TRUE) - -/obj/machinery/smartfridge/survival_pod/accept_check(obj/item/O) - return isitem(O) - -/obj/machinery/smartfridge/survival_pod/Initialize(mapload, empty) +/obj/machinery/smartfridge/survival_pod/Initialize(mapload) . = ..() if(empty) return @@ -224,6 +215,14 @@ var/obj/item/device/instrument/guitar/G = new(src) load(G) +/obj/machinery/smartfridge/survival_pod/accept_check(obj/item/O) + return isitem(O) + +/obj/machinery/smartfridge/survival_pod/empty + name = "dusty survival pod storage" + desc = "A heated storage unit. This one's seen better days." + empty = TRUE + //Fans /obj/structure/fans icon = 'icons/obj/lavaland/survival_pod.dmi' diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index e9961d7b3b..4332343a9b 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -15,11 +15,11 @@ var/obj/item/device/radio/Radio //needed to send messages to sec radio -/obj/machinery/mineral/labor_claim_console/New() - ..() +/obj/machinery/mineral/labor_claim_console/Initialize() + . = ..() Radio = new/obj/item/device/radio(src) - Radio.listening = 0 - addtimer(CALLBACK(src, .proc/locate_stacking_machine), 7) + Radio.listening = FALSE + locate_stacking_machine() /obj/machinery/mineral/labor_claim_console/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/card/id/prisoner)) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 1dbe2fdce7..f7dabb40aa 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -249,7 +249,7 @@ blue.linked = src /obj/effect/warp_cube - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT /obj/effect/warp_cube/ex_act(severity, target) return diff --git a/code/modules/mining/machine_input_output_plates.dm b/code/modules/mining/machine_input_output_plates.dm index 79a514bcc2..b6f68d4c89 100644 --- a/code/modules/mining/machine_input_output_plates.dm +++ b/code/modules/mining/machine_input_output_plates.dm @@ -7,7 +7,8 @@ density = FALSE anchored = TRUE -/obj/machinery/mineral/input/New() +/obj/machinery/mineral/input/Initialize() + . = ..() icon_state = "blank" /obj/machinery/mineral/output @@ -17,7 +18,8 @@ density = FALSE anchored = TRUE -/obj/machinery/mineral/output/New() +/obj/machinery/mineral/output/Initialize() + . = ..() icon_state = "blank" /obj/machinery/mineral diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index 0232da4e83..e8d24e223f 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -11,6 +11,8 @@ input_dir = NORTH output_dir = SOUTH req_access = list(ACCESS_MINERAL_STOREROOM) + speed_process = 1 + circuit = /obj/item/weapon/circuitboard/machine/ore_redemption var/req_access_reclaim = ACCESS_MINING_STATION var/obj/item/weapon/card/id/inserted_id var/points = 0 @@ -18,7 +20,6 @@ var/sheet_per_ore = 1 var/point_upgrade = 1 var/list/ore_values = list(MAT_GLASS = 1, MAT_METAL = 1, MAT_PLASMA = 15, MAT_SILVER = 16, MAT_GOLD = 18, MAT_TITANIUM = 30, MAT_URANIUM = 30, MAT_DIAMOND = 50, MAT_BLUESPACE = 50, MAT_BANANIUM = 60) - speed_process = 1 var/message_sent = FALSE var/list/ore_buffer = list() var/datum/material_container/materials @@ -27,8 +28,6 @@ /obj/machinery/mineral/ore_redemption/Initialize() . = ..() - var/obj/item/weapon/circuitboard/machine/ore_redemption/B = new - B.apply_default_parts(src) materials = new(src, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE),INFINITY) files = new /datum/research/smelter(src) @@ -37,17 +36,6 @@ QDEL_NULL(files) return ..() -/obj/item/weapon/circuitboard/machine/ore_redemption - name = "Ore Redemption (Machine Board)" - build_path = /obj/machinery/mineral/ore_redemption - origin_tech = "programming=1;engineering=2" - req_components = list( - /obj/item/weapon/stock_parts/console_screen = 1, - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/device/assembly/igniter = 1) - /obj/machinery/mineral/ore_redemption/RefreshParts() var/ore_pickup_rate_temp = 15 var/point_upgrade_temp = 1 diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 875380aea8..80965d3cfc 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -7,6 +7,7 @@ icon_state = "mining" density = TRUE anchored = TRUE + circuit = /obj/item/weapon/circuitboard/machine/mining_equipment_vendor var/obj/item/weapon/card/id/inserted_id var/list/prize_list = list( //if you add something to this, please, for the love of god, use tabs and not spaces. new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 10), @@ -67,19 +68,6 @@ src.equipment_path = path src.cost = cost -/obj/machinery/mineral/equipment_vendor/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/mining_equipment_vendor(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/mining_equipment_vendor - name = "Mining Equipment Vendor (Machine Board)" - build_path = /obj/machinery/mineral/equipment_vendor - origin_tech = "programming=1;engineering=3" - req_components = list( - /obj/item/weapon/stock_parts/console_screen = 1, - /obj/item/weapon/stock_parts/matter_bin = 3) - /obj/machinery/mineral/equipment_vendor/power_change() ..() update_icon() @@ -207,9 +195,10 @@ /obj/machinery/mineral/equipment_vendor/golem name = "golem ship equipment vendor" + circuit = /obj/item/weapon/circuitboard/machine/mining_equipment_vendor/golem -/obj/machinery/mineral/equipment_vendor/golem/New() - ..() +/obj/machinery/mineral/equipment_vendor/golem/Initialize() + . = ..() desc += "\nIt seems a few selections have been added." prize_list += list( new /datum/data/mining_equipment("Extra Id", /obj/item/weapon/card/id/mining, 250), @@ -223,14 +212,6 @@ new /datum/data/mining_equipment("Royal Cape of the Liberator", /obj/item/weapon/bedsheet/rd/royal_cape, 500) ) - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/mining_equipment_vendor/golem(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/mining_equipment_vendor/golem - name = "Golem Ship Equipment Vendor (Machine Board)" - build_path = /obj/machinery/mineral/equipment_vendor/golem - - /**********************Mining Equipment Vendor Items**************************/ /**********************Mining Equipment Voucher**********************/ diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index 8029cc1416..aa2c85cb8f 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -9,7 +9,7 @@ icon_state = "mining_drone" icon_living = "mining_drone" status_flags = CANSTUN|CANKNOCKDOWN|CANPUSH - mouse_opacity = 1 + mouse_opacity = MOUSE_OPACITY_ICON faction = list("neutral") a_intent = INTENT_HARM atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm index 9a4eae0a41..0ee136f4a9 100644 --- a/code/modules/mining/mint.dm +++ b/code/modules/mining/mint.dm @@ -15,18 +15,16 @@ speed_process = 1 -/obj/machinery/mineral/mint/New() - ..() +/obj/machinery/mineral/mint/Initialize() + . = ..() materials = new /datum/material_container(src, list(MAT_METAL, MAT_PLASMA, MAT_SILVER, MAT_GOLD, MAT_URANIUM, MAT_DIAMOND, MAT_BANANIUM), max_amt = MINERAL_MATERIAL_AMOUNT*50) /obj/machinery/mineral/mint/Destroy() - qdel(materials) - materials = null + QDEL_NULL(materials) return ..() - /obj/machinery/mineral/mint/process() var/turf/T = get_step(src, input_dir) if(!T) diff --git a/code/modules/mob/camera/camera.dm b/code/modules/mob/camera/camera.dm index be0daebbd9..e058782be1 100644 --- a/code/modules/mob/camera/camera.dm +++ b/code/modules/mob/camera/camera.dm @@ -5,7 +5,7 @@ density = FALSE anchored = TRUE status_flags = GODMODE // You can't damage it. - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT see_in_dark = 7 invisibility = INVISIBILITY_ABSTRACT // No one can see us sight = SEE_SELF diff --git a/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm b/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm index 0b21852a8e..ab4b044cb9 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories_Citadel.dm @@ -122,7 +122,7 @@ /datum/sprite_accessory/tails/human/shark name = "Shark" icon_state = "shark" - color_src = 0 + color_src = MUTCOLORS icon = 'icons/mob/mam_bodyparts.dmi' /datum/sprite_accessory/tails/human/shark/datashark @@ -150,8 +150,7 @@ /datum/sprite_accessory/ears/wolf name = "Wolf" icon_state = "wolf" - hasinner = 1 - icon = 'icons/mob/mam_bodyparts.dmi' + extra = 1 /datum/sprite_accessory/tails/human/wolf name = "Wolf" @@ -191,6 +190,7 @@ /datum/sprite_accessory/mam_tails_animated icon = 'icons/mob/mam_bodyparts.dmi' + /datum/sprite_accessory/mam_tails_animated/none name = "None" @@ -326,7 +326,6 @@ /datum/sprite_accessory/mam_ears/husky name = "Husky" icon_state = "wolf" - hasinner = 1 icon = 'icons/mob/mam_bodyparts.dmi' extra = 1 @@ -390,7 +389,7 @@ /datum/sprite_accessory/mam_tails/shark name = "Shark" icon_state = "shark" - color_src = 0 + color_src = MUTCOLORS /datum/sprite_accessory/mam_tails_animated/shark name = "Shark" @@ -436,7 +435,7 @@ /datum/sprite_accessory/mam_ears/wolf name = "Wolf" icon_state = "wolf" - hasinner = 1 + extra = 1 /datum/sprite_accessory/mam_tails/wolf name = "Wolf" diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm index 44f8810b56..175e04dcac 100644 --- a/code/modules/mob/living/brain/posibrain.dm +++ b/code/modules/mob/living/brain/posibrain.dm @@ -37,7 +37,7 @@ GLOBAL_VAR(posibrain_notify_cooldown) /obj/item/device/mmi/posibrain/proc/ping_ghosts(msg, newlymade) if(newlymade || GLOB.posibrain_notify_cooldown <= world.time) - notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/effects/ghost2.ogg':null, enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE) + notify_ghosts("[name] [msg] in [get_area(src)]!", ghost_sound = !newlymade ? 'sound/misc/server-ready.ogg':null, enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK, flashwindow = FALSE) if(!newlymade) GLOB.posibrain_notify_cooldown = world.time + askDelay diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 9445803adf..56e3f0082a 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -171,6 +171,7 @@ if(thrown_thing) visible_message("[src] has thrown [thrown_thing].") + add_logs(src, thrown_thing, "has thrown") newtonian_move(get_dir(target, src)) thrown_thing.throw_at(target, thrown_thing.throw_range, thrown_thing.throw_speed, src) diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index fec1422ff1..a6055c7d70 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -11,6 +11,8 @@ var/obj/item/handcuffed = null //Whether or not the mob is handcuffed var/obj/item/legcuffed = null //Same as handcuffs but for legs. Bear traps use this. + var/disgust = 0 + //inventory slots var/obj/item/back = null var/obj/item/clothing/mask/wear_mask = null @@ -47,4 +49,4 @@ var/list/hand_bodyparts = list() //a collection of arms (or actually whatever the fug /bodyparts you monsters use to wreck my systems) var/icon_render_key = "" - var/static/list/limb_icon_cache = list() \ No newline at end of file + var/static/list/limb_icon_cache = list() diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 11c01bbbce..41ba685cc6 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -225,6 +225,14 @@ else msg += "[t_He] [t_is] quite chubby.\n" + switch(disgust) + if(DISGUST_LEVEL_GROSS to DISGUST_LEVEL_VERYGROSS) + msg += "[t_He] looks a bit grossed out.\n" + if(DISGUST_LEVEL_VERYGROSS to DISGUST_LEVEL_DISGUSTED) + msg += "[t_He] looks really grossed out.\n" + if(DISGUST_LEVEL_DISGUSTED to INFINITY) + msg += "[t_He] looks disgusted.\n" + if(blood_volume < BLOOD_VOLUME_SAFE) msg += "[t_He] [t_has] pale skin.\n" diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index a23f703185..df5a76b552 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -10,9 +10,9 @@ /datum/species - var/id = null // if the game needs to manually check your race to do something not included in a proc here, it will use this - var/limbs_id = null //this is used if you want to use a different species limb sprites. Mainly used for angels as they look like humans. - var/name = null // this is the fluff name. these will be left generic (such as 'Lizardperson' for the lizard race) so servers can change them to whatever + var/id // if the game needs to manually check your race to do something not included in a proc here, it will use this + var/limbs_id //this is used if you want to use a different species limb sprites. Mainly used for angels as they look like humans. + var/name // this is the fluff name. these will be left generic (such as 'Lizardperson' for the lizard race) so servers can change them to whatever var/roundstart = 0 // can this mob be chosen at roundstart? (assuming the config option is checked?) var/default_color = "#FFF" // if alien colors are disabled, this is the color that will be used by that race @@ -21,17 +21,21 @@ var/face_y_offset = 0 var/hair_y_offset = 0 - var/hair_color = null // this allows races to have specific hair colors... if null, it uses the H's hair/facial hair colors. if "mutcolor", it uses the H's mutant_color + var/hair_color // this allows races to have specific hair colors... if null, it uses the H's hair/facial hair colors. if "mutcolor", it uses the H's mutant_color var/hair_alpha = 255 // the alpha used by the hair. 255 is completely solid, 0 is transparent. + var/use_skintones = 0 // does it use skintones or not? (spoiler alert this is only used by humans) var/exotic_blood = "" // If your race wants to bleed something other than bog standard blood, change this to reagent id. var/exotic_bloodtype = "" //If your race uses a non standard bloodtype (A+, O-, AB-, etc) var/meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human //What the species drops on gibbing - var/skinned_type = null + var/skinned_type + var/liked_food = NONE + var/disliked_food = GROSS + var/toxic_food = TOXIC var/list/no_equip = list() // slots the race can't equip stuff to var/nojumpsuit = 0 // this is sorta... weird. it basically lets you equip stuff that usually needs jumpsuits without one, like belts and pockets and ids var/blacklisted = 0 //Flag to exclude from green slime core species. - var/dangerous_existence = null //A flag for transformation spells that tells them "hey if you turn a person into one of these without preperation, they'll probably die!" + var/dangerous_existence //A flag for transformation spells that tells them "hey if you turn a person into one of these without preperation, they'll probably die!" var/say_mod = "says" // affects the speech message var/list/default_features = list() // Default mutant bodyparts for this species. Don't forget to set one for every mutant bodypart you allow this species to have. var/list/mutant_bodyparts = list() // Parts of the body that are diferent enough from the standard human model that they cause clipping with some equipment @@ -67,23 +71,21 @@ var/obj/item/organ/eyes/mutanteyes = /obj/item/organ/eyes var/obj/item/organ/ears/mutantears = /obj/item/organ/ears + var/obj/item/mutanthands var/obj/item/organ/tongue/mutanttongue = /obj/item/organ/tongue - + var/obj/item/organ/liver/mutantliver var/obj/item/organ/stomach/mutantstomach - //Hands - var/obj/item/mutanthands = null - //Citadel snowflake var/fixed_mut_color2 = "" var/fixed_mut_color3 = "" var/whitelisted = 0 //Is this species restricted to certain players? var/whitelist = list() //List the ckeys that can use this species, if it's whitelisted.: list("John Doe", "poopface666", "SeeALiggerPullTheTrigger") Spaces & capitalization can be included or ignored entirely for each key as it checks for both. - /////////// - // PROCS // - /////////// +/////////// +// PROCS // +/////////// /datum/species/New() @@ -411,6 +413,7 @@ standing += wear_female_version(undershirt.icon_state, undershirt.icon, BODY_LAYER) else standing += mutable_appearance(undershirt.icon, undershirt.icon_state, -BODY_LAYER) + if(H.socks && H.get_num_legs() >= 2 && !(DIGITIGRADE in species_traits)) var/datum/sprite_accessory/socks/socks = GLOB.socks_list[H.socks] if(socks) @@ -1321,7 +1324,6 @@ target.apply_effect(40, KNOCKDOWN, target.run_armor_check(affecting, "melee", "Your armor prevents your fall!", "Your armor softens your fall!")) target.forcesay(GLOB.hit_appends) add_logs(user, target, "disarmed", " pushing them to the ground") - return if(randn <= 60) @@ -1329,7 +1331,6 @@ if(target.pulling) to_chat(target, "[user] has broken [target]'s grip on [target.pulling]!") target.stop_pulling() - else I = target.get_active_held_item() if(target.drop_item()) @@ -1587,6 +1588,7 @@ else H.throw_alert("temp", /obj/screen/alert/cold, 3) H.apply_damage(COLD_DAMAGE_LEVEL_3*coldmod, BURN) + else H.clear_alert("temp") @@ -1695,9 +1697,9 @@ return -//////// +//////////// //Stun// -//////// +//////////// /datum/species/proc/spec_stun(mob/living/carbon/human/H,amount) . = stunmod * amount diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm index 804f9bf3a2..07a6ddee47 100644 --- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm @@ -6,6 +6,8 @@ mutantliver = /obj/item/organ/liver/fly mutantstomach = /obj/item/organ/stomach/fly meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/fly + disliked_food = null + liked_food = GROSS /datum/species/fly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) if(chem.id == "pestkiller") diff --git a/code/modules/mob/living/carbon/human/species_types/humans.dm b/code/modules/mob/living/carbon/human/species_types/humans.dm index d7ff8df172..70df503ff4 100644 --- a/code/modules/mob/living/carbon/human/species_types/humans.dm +++ b/code/modules/mob/living/carbon/human/species_types/humans.dm @@ -1,25 +1,27 @@ -/datum/species/human - name = "Human" - id = "human" - default_color = "FFFFFF" - species_traits = list(MUTCOLORS_PARTSONLY,EYECOLOR,HAIR,FACEHAIR,LIPS) - mutant_bodyparts = list("tail_human", "ears", "taur") - default_features = list("tail_human" = "None", "ears" = "None", "taur" = "none") - use_skintones = 1 - skinned_type = /obj/item/stack/sheet/animalhide/human - - -/datum/species/human/qualifies_for_rank(rank, list/features) - return TRUE - -//Curiosity killed the cat's wagging tail. -/datum/species/human/spec_death(gibbed, mob/living/carbon/human/H) - if(H) - H.endTailWag() - -/datum/species/human/space_move(mob/living/carbon/human/H) - var/obj/item/device/flightpack/F = H.get_flightpack() - if(istype(F) && (F.flight) && F.allow_thrust(0.01, src)) +/datum/species/human + name = "Human" + id = "human" + default_color = "FFFFFF" + species_traits = list(MUTCOLORS_PARTSONLY,EYECOLOR,HAIR,FACEHAIR,LIPS) + mutant_bodyparts = list("tail_human", "ears", "taur") + default_features = list("tail_human" = "None", "ears" = "None", "taur" = "none") + use_skintones = 1 + skinned_type = /obj/item/stack/sheet/animalhide/human + disliked_food = GROSS | RAW + liked_food = JUNKFOOD | FRIED + + +/datum/species/human/qualifies_for_rank(rank, list/features) + return TRUE + +//Curiosity killed the cat's wagging tail. +/datum/species/human/spec_death(gibbed, mob/living/carbon/human/H) + if(H) + H.endTailWag() + +/datum/species/human/space_move(mob/living/carbon/human/H) + var/obj/item/device/flightpack/F = H.get_flightpack() + if(istype(F) && (F.flight) && F.allow_thrust(0.01, src)) return TRUE datum/species/human/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) @@ -28,4 +30,4 @@ datum/species/human/on_species_gain(mob/living/carbon/human/H, datum/species/old if(H.dna.features["tail_human"] == "Cat") var/tail = /obj/item/organ/tail/cat mutant_organs += tail - ..() \ No newline at end of file + ..() diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 59bf481369..4fa5193b40 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -9,6 +9,8 @@ exotic_blood = "slimejelly" damage_overlay_type = "" var/datum/action/innate/regenerate_limbs/regenerate_limbs + toxic_food = MEAT | DAIRY + liked_food = TOXIC /datum/species/jelly/on_species_loss(mob/living/carbon/C) if(regenerate_limbs) @@ -324,4 +326,4 @@ M.transfer_to(dupe) dupe.visible_message("[dupe] blinks and looks \ around.", - "...and move this one instead.") \ No newline at end of file + "...and move this one instead.") diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 8adc1f19f3..822bd03a21 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -16,6 +16,8 @@ meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/lizard skinned_type = /obj/item/stack/sheet/animalhide/lizard exotic_bloodtype = "L" + disliked_food = GRAIN | DAIRY + liked_food = GROSS | MEAT /datum/species/lizard/after_equip_job(datum/job/J, mob/living/carbon/human/H) H.grant_language(/datum/language/draconic) diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index 89bd803e12..028d277569 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -17,6 +17,8 @@ speedmod = 1 damage_overlay_type = ""//let's not show bloody wounds or burns over bones. var/internal_fire = FALSE //If the bones themselves are burning clothes won't help you much + disliked_food = FRUIT + liked_food = VEGETABLES /datum/species/plasmaman/spec_life(mob/living/carbon/human/H) var/datum/gas_mixture/environment = H.loc.return_air() diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index cdfa938456..10be1eb2b8 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -10,6 +10,8 @@ burnmod = 1.25 heatmod = 1.5 meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/plant + disliked_food = MEAT | DAIRY + liked_food = VEGETABLES | FRUIT | GRAIN /datum/species/pod/on_species_gain(mob/living/carbon/C, datum/species/old_species) . = ..() 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 df91f19bb0..8246d5a949 100644 --- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm +++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm @@ -8,4 +8,6 @@ meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NOHUNGER,EASYDISMEMBER,EASYLIMBATTACHMENT) mutant_organs = list(/obj/item/organ/tongue/bone) - damage_overlay_type = ""//let's not show bloody wounds or burns over bones. \ No newline at end of file + damage_overlay_type = ""//let's not show bloody wounds or burns over bones. + disliked_food = NONE + liked_food = GROSS | MEAT | RAW 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 3916f64fbb..c6fba442de 100644 --- a/code/modules/mob/living/carbon/human/species_types/synths.dm +++ b/code/modules/mob/living/carbon/human/species_types/synths.dm @@ -118,4 +118,4 @@ else return ..() else - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index e75f862f58..01c63db0c1 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -9,6 +9,8 @@ species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOBLOOD,RADIMMUNE,NOZOMBIE,EASYDISMEMBER,EASYLIMBATTACHMENT) mutant_organs = list(/obj/item/organ/tongue/zombie) var/static/list/spooks = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg') + disliked_food = NONE + liked_food = GROSS | MEAT | RAW /datum/species/zombie/infectious name = "Infectious Zombie" diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 1aef45aff8..a9d6bda10a 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -521,8 +521,21 @@ generate/load female uniform sprites matching all previously decided variables . += "-[gender]" + + var/is_taur = FALSE + var/mob/living/carbon/human/H = src + if(("taur" in H.dna.species.mutant_bodyparts) && (H.dna.features["taur"] != "None")) + is_taur = TRUE + + for(var/X in bodyparts) var/obj/item/bodypart/BP = X + + if(istype(BP, /obj/item/bodypart/r_leg) || istype(BP, /obj/item/bodypart/l_leg)) + if(is_taur) + continue + + . += "-[BP.body_zone]" if(BP.status == BODYPART_ORGANIC) . += "-organic" diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 5a618544f0..f1a6998523 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -431,4 +431,3 @@ adjustToxLoss(8) if(prob(30)) to_chat(src, "You feel confused and nauseous...")//actual symptoms of liver failure - diff --git a/code/modules/mob/living/carbon/status_procs.dm b/code/modules/mob/living/carbon/status_procs.dm index 0216c63942..ce14664a0e 100644 --- a/code/modules/mob/living/carbon/status_procs.dm +++ b/code/modules/mob/living/carbon/status_procs.dm @@ -63,6 +63,17 @@ clear_fullscreen("high") clear_alert("high") +/mob/living/carbon/adjust_disgust(amount) + var/old_disgust = disgust + if(amount>0) + disgust = min(disgust+amount, DISGUST_LEVEL_MAXEDOUT) + + else if(old_disgust) + disgust = max(disgust+amount, 0) + +/mob/living/carbon/set_disgust(amount) + if(amount >= 0) + disgust = amount /mob/living/carbon/cure_blind() if(disabilities & BLIND) diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index 46f9efad07..d2013f458d 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -234,11 +234,22 @@ if(limb_icon_cache[icon_render_key]) load_limb_from_cache() return + //Taur code goes here, since humans just inherit this proc + var/is_taur = FALSE + if(ishuman(src)) + var/mob/living/carbon/human/H = src + if(("taur" in H.dna.species.mutant_bodyparts) && (H.dna.features["taur"] != "None")) + is_taur = TRUE //GENERATE NEW LIMBS var/list/new_limbs = list() for(var/X in bodyparts) var/obj/item/bodypart/BP = X + + if(istype(BP, /obj/item/bodypart/r_leg) || istype(BP, /obj/item/bodypart/l_leg)) + if(is_taur) + continue + new_limbs += BP.get_limb_icon() if(new_limbs.len) overlays_standing[BODYPARTS_LAYER] = new_limbs diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 63a3c3dfa6..40219161c6 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -61,6 +61,7 @@ if(!gibbed) GLOB.dead_mob_list += src set_drugginess(0) + set_disgust(0) SetSleeping(0, 0) blind_eyes(1) reset_perspective(null) diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index ff37b85800..d81c4ae0cd 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -465,7 +465,6 @@ /datum/emote/living/spin key = "spin" key_third_person = "spins" - message = "spins around dizzily!" /datum/emote/living/spin/run_emote(mob/user) user.spin(20, 1) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 567061e1a4..16580ab64e 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -374,6 +374,7 @@ setBrainLoss(0) setStaminaLoss(0, 0) SetUnconscious(0, FALSE) + set_disgust(0) SetStun(0, FALSE) SetKnockdown(0, FALSE) SetSleeping(0, FALSE) @@ -550,6 +551,7 @@ if(!restrained(ignore_grab = 1) && pulledby) visible_message("[src] resists against [pulledby]'s grip!") resist_grab() + add_logs(pulledby, src, "resisted grab") return //unbuckling yourself @@ -587,6 +589,7 @@ if(pulledby.grab_state) if(prob(30/pulledby.grab_state)) visible_message("[src] has broken free of [pulledby]'s grip!") + add_logs(pulledby, src, "broke grab") pulledby.stop_pulling() return 0 if(moving_resist && client) //we resisted by trying to move diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 2cf7803294..a4c49ccc7e 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -89,7 +89,7 @@ var/armor = run_armor_check(zone, "melee", "Your armor has protected your [parse_zone(zone)].", "Your armor has softened hit to your [parse_zone(zone)].",I.armour_penetration) apply_damage(I.throwforce, dtype, zone, armor) if(I.thrownby) - add_logs(I.thrownby, src, "hit", I) + add_logs(I.thrownby, src, "threw and hit", I) else return 1 else @@ -150,6 +150,7 @@ var/grab_upgrade_time = 30 visible_message("[user] starts to tighten [user.p_their()] grip on [src]!", \ "[user] starts to tighten [user.p_their()] grip on you!") + add_logs(user, src, "attempted to strangle", addition="grab") if(!do_mob(user, src, grab_upgrade_time)) return 0 if(!user.pulling || user.pulling != src || user.grab_state != old_grab_state || user.a_intent != INTENT_GRAB) @@ -157,18 +158,20 @@ user.grab_state++ switch(user.grab_state) if(GRAB_AGGRESSIVE) - add_logs(user, src, "grabbed", addition="aggressively") + add_logs(user, src, "grabbed", addition="aggressive grab") visible_message("[user] has grabbed [src] aggressively!", \ "[user] has grabbed [src] aggressively!") drop_all_held_items() stop_pulling() if(GRAB_NECK) + add_logs(user, src, "grabbed", addition="neck grab") visible_message("[user] has grabbed [src] by the neck!",\ "[user] has grabbed you by the neck!") update_canmove() //we fall down if(!buckled && !density) Move(user.loc) if(GRAB_KILL) + add_logs(user, src, "strangled", addition="grab") visible_message("[user] is strangling [src]!", \ "[user] is strangling you!") update_canmove() //we fall down diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index c6dd372532..e3186005c7 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -4,7 +4,7 @@ var/obj/machinery/camera/current = null icon = 'icons/mob/pai.dmi' icon_state = "repairbot" - mouse_opacity = 2 + mouse_opacity = MOUSE_OPACITY_OPAQUE density = FALSE luminosity = 0 pass_flags = PASSTABLE | PASSMOB diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index 85add99704..eeeb39e44b 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -11,7 +11,7 @@ /mob/living/silicon/robot/proc/uneq_module(obj/item/O) if(!O) return 0 - O.mouse_opacity = 2 + O.mouse_opacity = MOUSE_OPACITY_OPAQUE if(istype(O, /obj/item/borg/sight)) var/obj/item/borg/sight/S = O sight_mode &= ~S.sight_mode diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 8df0780d97..532d0c6edb 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -122,7 +122,7 @@ I.forceMove(src) modules += I I.flags |= NODROP - I.mouse_opacity = 2 + I.mouse_opacity = MOUSE_OPACITY_OPAQUE if(nonstandard) added_modules += I if(requires_rebuild) diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 75a1759e1d..5728c8714c 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -43,7 +43,7 @@ /mob/living/simple_animal/mouse/death(gibbed, toast) if(!ckey) ..(1) - var/obj/item/trash/deadmouse/M = new(src.loc) + var/obj/item/weapon/reagent_containers/food/snacks/deadmouse/M = new(loc) M.icon_state = icon_dead M.name = name if(toast) @@ -101,8 +101,12 @@ response_harm = "splats" gold_core_spawnable = 0 -/obj/item/trash/deadmouse +/obj/item/weapon/reagent_containers/food/snacks/deadmouse name = "dead mouse" - desc = "It looks like somebody dropped the bass on it." + desc = "It looks like somebody dropped the bass on it. A lizard's favorite meal." icon = 'icons/mob/animal.dmi' icon_state = "mouse_gray_dead" + bitesize = 3 + eatverb = "devours" + list_reagents = list("nutriment" = 3, "vitamin" = 2) + foodtype = GROSS | MEAT | RAW diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index d70055779c..f59b5332da 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -32,7 +32,7 @@ move_to_delay = 0 obj_damage = 0 environment_smash = ENVIRONMENT_SMASH_NONE - mouse_opacity = 2 + mouse_opacity = MOUSE_OPACITY_OPAQUE pass_flags = PASSTABLE | PASSGRILLE | PASSMOB mob_size = MOB_SIZE_TINY movement_type = FLYING diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index fad110c955..bf40a95070 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -262,14 +262,14 @@ Difficulty: Very Hard return FALSE return TRUE -/obj/machinery/smartfridge/black_box/New() +/obj/machinery/smartfridge/black_box/Initialize() + . = ..() var/static/obj/machinery/smartfridge/black_box/current if(current && current != src) qdel(src, force=TRUE) return current = src ReadMemory() - . = ..() /obj/machinery/smartfridge/black_box/process() ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm index f9a6575d1e..fa79630c28 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm @@ -197,7 +197,7 @@ Difficulty: Medium return animate(src, alpha = 100, transform = matrix()*0.7, time = 7) swooping |= SWOOP_INVULNERABLE - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT sleep(7) var/list/flame_hit = list() while(swoop_duration > 0) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index dc20e97e0d..620dd19706 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -49,7 +49,7 @@ Difficulty: Medium elimination = 1 idle_vision_range = 13 appearance_flags = 0 - mouse_opacity = 1 + mouse_opacity = MOUSE_OPACITY_ICON /mob/living/simple_animal/hostile/megafauna/legion/Initialize() . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index 3e2be10d79..c214ee0490 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -44,7 +44,7 @@ anchored = TRUE mob_size = MOB_SIZE_LARGE layer = LARGE_MOB_LAYER //Looks weird with them slipping under mineral walls and cameras and shit otherwise - mouse_opacity = 2 // Easier to click on in melee, they're giant targets anyway + mouse_opacity = MOUSE_OPACITY_OPAQUE // Easier to click on in melee, they're giant targets anyway /mob/living/simple_animal/hostile/megafauna/Initialize(mapload) . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm index cf2dd5c1f9..fb91af84f6 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm @@ -8,7 +8,7 @@ icon_aggro = "Goliath_alert" icon_dead = "Goliath_dead" icon_gib = "syndicate_gib" - mouse_opacity = 2 + mouse_opacity = MOUSE_OPACITY_OPAQUE move_to_delay = 40 ranged = 1 ranged_cooldown_time = 120 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm index 7f38bebcfb..bfc7979cb3 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @@ -7,7 +7,7 @@ icon_aggro = "Hivelord_alert" icon_dead = "Hivelord_dead" icon_gib = "syndicate_gib" - mouse_opacity = 2 + mouse_opacity = MOUSE_OPACITY_OPAQUE move_to_delay = 14 ranged = 1 vision_range = 5 @@ -50,7 +50,7 @@ loot += crusher_loot //we don't butcher /mob/living/simple_animal/hostile/asteroid/hivelord/death(gibbed) - mouse_opacity = 1 + mouse_opacity = MOUSE_OPACITY_ICON ..(gibbed) //A fragile but rapidly produced creature @@ -63,7 +63,7 @@ icon_aggro = "Hivelordbrood" icon_dead = "Hivelordbrood" icon_gib = "syndicate_gib" - mouse_opacity = 2 + mouse_opacity = MOUSE_OPACITY_OPAQUE move_to_delay = 1 friendly = "buzzes near" vision_range = 10 diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index 74bfff8456..ceb6e814a7 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -22,7 +22,7 @@ faction = list("mushroom") environment_smash = ENVIRONMENT_SMASH_NONE stat_attack = 2 - mouse_opacity = 1 + mouse_opacity = MOUSE_OPACITY_ICON speed = 1 ventcrawler = VENTCRAWLER_ALWAYS robust_searching = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm index cff532b62b..8355bd2e27 100644 --- a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm +++ b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm @@ -33,7 +33,7 @@ /obj/effect/ebeam/vine name = "thick vine" - mouse_opacity = 1 + mouse_opacity = MOUSE_OPACITY_ICON desc = "A thick vine, painful to the touch." diff --git a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm index 8266903dfa..fff5781405 100644 --- a/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm +++ b/code/modules/mob/living/simple_animal/hostile/wumborian_fugu.dm @@ -8,7 +8,7 @@ icon_aggro = "Fugu" icon_dead = "Fugu_dead" icon_gib = "syndicate_gib" - mouse_opacity = 2 + mouse_opacity = MOUSE_OPACITY_OPAQUE move_to_delay = 5 friendly = "floats near" speak_emote = list("puffs") diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 0941ef9816..7f2ba4bdb2 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -327,6 +327,7 @@ if(AM.pulledby) if(!supress_message) visible_message("[src] has pulled [AM] from [AM.pulledby]'s grip.") + add_logs(AM, AM.pulledby, "pulled from", src) AM.pulledby.stop_pulling() //an object can't be pulled by two mobs at once. pulling = AM @@ -337,6 +338,7 @@ if(ismob(AM)) var/mob/M = AM + add_logs(src, M, "grabbed", addition="passive grab") if(!supress_message) visible_message("[src] has grabbed [M] passively!") if(!iscarbon(src)) diff --git a/code/modules/mob/status_procs.dm b/code/modules/mob/status_procs.dm index f25a01b9fe..bd938cf598 100644 --- a/code/modules/mob/status_procs.dm +++ b/code/modules/mob/status_procs.dm @@ -219,6 +219,14 @@ /mob/proc/set_drugginess(amount) return +/////////////////////////////////// GROSSED OUT //////////////////////////////////// + +/mob/proc/adjust_disgust(amount) + return + +/mob/proc/set_disgust(amount) + return + /////////////////////////////////// BLIND DISABILITY //////////////////////////////////// /mob/proc/cure_blind() //when we want to cure the BLIND disability only. diff --git a/code/modules/modular_computers/NTNet/NTNet_relay.dm b/code/modules/modular_computers/NTNet/NTNet_relay.dm index 18b96d033e..3b1d2c03fb 100644 --- a/code/modules/modular_computers/NTNet/NTNet_relay.dm +++ b/code/modules/modular_computers/NTNet/NTNet_relay.dm @@ -9,6 +9,7 @@ icon_state = "bus" anchored = TRUE density = TRUE + circuit = /obj/item/weapon/circuitboard/machine/ntnet_relay var/datum/ntnet/NTNet = null // This is mostly for backwards reference and to allow varedit modifications from ingame. var/enabled = 1 // Set to 0 if the relay was turned off var/dos_failure = 0 // Set to 1 if the relay failed due to (D)DoS attack @@ -95,18 +96,16 @@ /obj/machinery/ntnet_relay/attack_hand(mob/living/user) ui_interact(user) -/obj/machinery/ntnet_relay/New() +/obj/machinery/ntnet_relay/Initialize() uid = gl_uid gl_uid++ component_parts = list() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/ntnet_relay(null) - B.apply_default_parts(src) if(GLOB.ntnet_global) GLOB.ntnet_global.relays.Add(src) NTNet = GLOB.ntnet_global GLOB.ntnet_global.add_log("New quantum relay activated. Current amount of linked relays: [NTNet.relays.len]") - ..() + . = ..() /obj/machinery/ntnet_relay/Destroy() if(GLOB.ntnet_global) @@ -118,12 +117,4 @@ D.target = null D.error = "Connection to quantum relay severed" - return ..() - -/obj/item/weapon/circuitboard/machine/ntnet_relay - name = "NTNet Relay (Machine Board)" - build_path = /obj/machinery/ntnet_relay - origin_tech = "programming=3;bluespace=3;magnets=2" - req_components = list( - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/subspace/filter = 1) + return ..() \ No newline at end of file diff --git a/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm b/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm index 49dedd0cd3..76cacc00ef 100644 --- a/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm +++ b/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm @@ -11,7 +11,7 @@ It is possible to destroy the net by the occupant or someone else. density = TRUE//Can't pass through. opacity = 0//Can see through. - mouse_opacity = 1//So you can hit it with stuff. + mouse_opacity = MOUSE_OPACITY_ICON//So you can hit it with stuff. anchored = TRUE//Can't drag/grab the trapped mob. layer = ABOVE_ALL_MOB_LAYER max_integrity = 25 //How much health it has. diff --git a/code/modules/power/antimatter/control.dm b/code/modules/power/antimatter/control.dm index 3fcec8b3bf..d12dcc3623 100644 --- a/code/modules/power/antimatter/control.dm +++ b/code/modules/power/antimatter/control.dm @@ -29,8 +29,8 @@ var/stored_power = 0//Power to deploy per tick -/obj/machinery/power/am_control_unit/New() - ..() +/obj/machinery/power/am_control_unit/Initialize() + . = ..() linked_shielding = list() linked_cores = list() @@ -39,8 +39,7 @@ for(var/obj/machinery/am_shielding/AMS in linked_shielding) AMS.control_unit = null qdel(AMS) - qdel(fueljar) - fueljar = null + QDEL_NULL(fueljar) return ..() diff --git a/code/modules/power/monitor.dm b/code/modules/power/monitor.dm index 8437738586..ee613108d6 100644 --- a/code/modules/power/monitor.dm +++ b/code/modules/power/monitor.dm @@ -16,8 +16,8 @@ var/record_interval = 50 var/next_record = 0 -/obj/machinery/computer/monitor/New() - ..() +/obj/machinery/computer/monitor/Initialize() + . = ..() search() history["supply"] = list() history["demand"] = list() diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index c5fcc2b018..0dec9eaf09 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -54,11 +54,11 @@ /obj/machinery/power/port_gen/pacman name = "\improper P.A.C.M.A.N.-type portable generator" + circuit = /obj/item/weapon/circuitboard/machine/pacman var/sheets = 0 var/max_sheets = 100 var/sheet_name = "" var/sheet_path = /obj/item/stack/sheet/mineral/plasma - var/board_path = /obj/item/weapon/circuitboard/machine/pacman var/sheet_left = 0 // How much is left of the sheet var/time_per_sheet = 260 var/current_heat = 0 @@ -68,34 +68,12 @@ if(anchored) connect_to_network() -/obj/machinery/power/port_gen/pacman/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new board_path(null) - B.apply_default_parts(src) +/obj/machinery/power/port_gen/pacman/Initialize() + . = ..() var/obj/sheet = new sheet_path(null) sheet_name = sheet.name -/obj/item/weapon/circuitboard/machine/pacman - name = "PACMAN-type Generator (Machine Board)" - build_path = /obj/machinery/power/port_gen/pacman - origin_tech = "programming=2;powerstorage=3;plasmatech=3;engineering=3" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/capacitor = 1) - -/obj/item/weapon/circuitboard/machine/pacman/super - name = "SUPERPACMAN-type Generator (Machine Board)" - build_path = /obj/machinery/power/port_gen/pacman/super - origin_tech = "programming=3;powerstorage=4;engineering=4" - -/obj/item/weapon/circuitboard/machine/pacman/mrs - name = "MRSPACMAN-type Generator (Machine Board)" - build_path = "/obj/machinery/power/port_gen/pacman/mrs" - origin_tech = "programming=3;powerstorage=4;engineering=4;plasmatech=4" - /obj/machinery/power/port_gen/pacman/Destroy() DropFuel() return ..() @@ -294,10 +272,10 @@ name = "\improper S.U.P.E.R.P.A.C.M.A.N.-type portable generator" icon_state = "portgen1_0" base_icon = "portgen1" + circuit = /obj/item/weapon/circuitboard/machine/pacman/super sheet_path = /obj/item/stack/sheet/mineral/uranium power_gen = 15000 time_per_sheet = 85 - board_path = /obj/item/weapon/circuitboard/machine/pacman/super /obj/machinery/power/port_gen/pacman/super/overheat() explosion(src.loc, 3, 3, 3, -1) @@ -306,10 +284,10 @@ name = "\improper M.R.S.P.A.C.M.A.N.-type portable generator" base_icon = "portgen2" icon_state = "portgen2_0" + circuit = /obj/item/weapon/circuitboard/machine/pacman/mrs sheet_path = /obj/item/stack/sheet/mineral/diamond power_gen = 40000 time_per_sheet = 80 - board_path = /obj/item/weapon/circuitboard/machine/pacman/mrs /obj/machinery/power/port_gen/pacman/mrs/overheat() explosion(src.loc, 4, 4, 4, -1) diff --git a/code/modules/power/rtg.dm b/code/modules/power/rtg.dm index 9ec0e46da1..84fa86c180 100644 --- a/code/modules/power/rtg.dm +++ b/code/modules/power/rtg.dm @@ -9,6 +9,7 @@ density = TRUE anchored = TRUE use_power = NO_POWER_USE + circuit = /obj/item/weapon/circuitboard/machine/rtg // You can buckle someone to RTG, then open its panel. Fun stuff. can_buckle = TRUE @@ -16,23 +17,9 @@ buckle_requires_restraints = TRUE var/power_gen = 1000 // Enough to power a single APC. 4000 output with T4 capacitor. - var/board_path = /obj/item/weapon/circuitboard/machine/rtg + var/irradiate = TRUE // RTGs irradiate surroundings, but only when panel is open. -/obj/machinery/power/rtg/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new board_path(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/rtg - name = "RTG (Machine Board)" - build_path = /obj/machinery/power/rtg - origin_tech = "programming=2;materials=4;powerstorage=3;engineering=2" - req_components = list( - /obj/item/stack/cable_coil = 5, - /obj/item/weapon/stock_parts/capacitor = 1, - /obj/item/stack/sheet/mineral/uranium = 10) // We have no Pu-238, and this is the closest thing to it. - /obj/machinery/power/rtg/Initialize() . = ..() connect_to_network() @@ -68,20 +55,7 @@ /obj/machinery/power/rtg/advanced desc = "An advanced RTG capable of moderating isotope decay, increasing power output but reducing lifetime. It uses plasma-fueled radiation collectors to increase output even further." power_gen = 1250 // 2500 on T1, 10000 on T4. - board_path = /obj/item/weapon/circuitboard/machine/rtg/advanced - -/obj/item/weapon/circuitboard/machine/rtg/advanced - name = "Advanced RTG (Machine Board)" - build_path = /obj/machinery/power/rtg/advanced - origin_tech = "programming=3;materials=5;powerstorage=4;engineering=3;plasmatech=3" - req_components = list( - /obj/item/stack/cable_coil = 5, - /obj/item/weapon/stock_parts/capacitor = 1, - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/stack/sheet/mineral/uranium = 10, - /obj/item/stack/sheet/mineral/plasma = 5) - - + circuit = /obj/item/weapon/circuitboard/machine/rtg/advanced // Void Core, power source for Abductor ships and bases. // Provides a lot of power, but tends to explode when mistreated. @@ -91,25 +65,13 @@ icon = 'icons/obj/abductor.dmi' icon_state = "core" desc = "An alien power source that produces energy seemingly out of nowhere." - board_path = /obj/item/weapon/circuitboard/machine/abductor/core + circuit = /obj/item/weapon/circuitboard/machine/abductor/core power_gen = 20000 // 280 000 at T1, 400 000 at T4. Starts at T4. irradiate = FALSE // Green energy! can_buckle = FALSE pixel_y = 7 var/going_kaboom = FALSE // Is it about to explode? -/obj/item/weapon/circuitboard/machine/abductor/core - name = "alien board (Void Core)" - build_path = /obj/machinery/power/rtg/abductor - origin_tech = "programming=5;abductor=5;powerstorage=8;engineering=8" - req_components = list( - /obj/item/weapon/stock_parts/capacitor = 1, - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/cell/infinite/abductor = 1) - def_components = list( - /obj/item/weapon/stock_parts/capacitor = /obj/item/weapon/stock_parts/capacitor/quadratic, - /obj/item/weapon/stock_parts/micro_laser = /obj/item/weapon/stock_parts/micro_laser/quadultra) - /obj/machinery/power/rtg/abductor/proc/overload() if(going_kaboom) return diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 126012542b..553b932d53 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -21,8 +21,8 @@ GLOBAL_LIST_EMPTY(rad_collectors) /obj/machinery/power/rad_collector/anchored anchored = TRUE -/obj/machinery/power/rad_collector/New() - ..() +/obj/machinery/power/rad_collector/Initialize() + . = ..() GLOB.rad_collectors += src /obj/machinery/power/rad_collector/Destroy() diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 6e4942807f..1e4baee4be 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -3,20 +3,17 @@ desc = "A heavy-duty industrial laser, often used in containment fields and power generation.\nAlt-click to rotate it clockwise." icon = 'icons/obj/singularity.dmi' icon_state = "emitter" - var/icon_state_on = "emitter_+a" + anchored = FALSE density = TRUE req_access = list(ACCESS_ENGINE_EQUIP) - - // The following 3 vars are mostly for the prototype - var/manual = FALSE - var/charge = 0 - var/atom/target = null + circuit = /obj/item/weapon/circuitboard/machine/emitter use_power = NO_POWER_USE idle_power_usage = 10 active_power_usage = 300 + var/icon_state_on = "emitter_+a" var/active = 0 var/powered = 0 var/fire_delay = 100 @@ -33,6 +30,11 @@ var/datum/effect_system/spark_spread/sparks + // The following 3 vars are mostly for the prototype + var/manual = FALSE + var/charge = 0 + var/atom/target + /obj/machinery/power/emitter/anchored anchored = TRUE @@ -46,20 +48,16 @@ state = 2 use_power = FALSE -/obj/machinery/power/emitter/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/emitter(null) - B.apply_default_parts(src) +/obj/machinery/power/emitter/Initialize() + . = ..() RefreshParts() wires = new /datum/wires/emitter(src) + if(state == 2 && anchored) + connect_to_network() -/obj/item/weapon/circuitboard/machine/emitter - name = "Emitter (Machine Board)" - build_path = /obj/machinery/power/emitter - origin_tech = "programming=3;powerstorage=4;engineering=4" - req_components = list( - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/manipulator = 1) + sparks = new + sparks.attach(src) + sparks.set_up(5, TRUE, src) /obj/machinery/power/emitter/RefreshParts() var/max_firedelay = 120 @@ -100,15 +98,6 @@ else rotate() -/obj/machinery/power/emitter/Initialize() - . = ..() - if(state == 2 && anchored) - connect_to_network() - - sparks = new - sparks.attach(src) - sparks.set_up(5, TRUE, src) - /obj/machinery/power/emitter/Destroy() if(SSticker.IsRoundInProgress()) var/turf/T = get_turf(src) diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index af62860218..90566dffda 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -49,8 +49,8 @@ field_generator power level display add_overlay("+p[power_level]") -/obj/machinery/field/generator/New() - ..() +/obj/machinery/field/generator/Initialize() + . = ..() fields = list() connected_gens = list() diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index 697a80d7cd..b8b26e9447 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -19,10 +19,10 @@ var/powered = 0 mouse_opacity = 2 -/obj/machinery/particle_accelerator/control_box/New() +/obj/machinery/particle_accelerator/control_box/Initialize() + . = ..() wires = new /datum/wires/particle_accelerator/control_box(src) connected_parts = list() - ..() /obj/machinery/particle_accelerator/control_box/Destroy() if(active) @@ -31,8 +31,7 @@ var/obj/structure/particle_accelerator/part = CP part.master = null connected_parts.Cut() - qdel(wires) - wires = null + QDEL_NULL(wires) return ..() /obj/machinery/particle_accelerator/control_box/attack_hand(mob/user) diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm.rej b/code/modules/power/singularity/particle_accelerator/particle_control.dm.rej new file mode 100644 index 0000000000..c8e42a734f --- /dev/null +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm.rej @@ -0,0 +1,10 @@ +diff a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm (rejected hunks) +@@ -17,7 +17,7 @@ + var/active = 0 + var/strength = 0 + var/powered = 0 +- mouse_opacity = 2 ++ mouse_opacity = MOUSE_OPACITY_OPAQUE + + /obj/machinery/particle_accelerator/control_box/Initialize() + . = ..() diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 50f01f4259..452a793bd6 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -21,6 +21,7 @@ density = TRUE anchored = TRUE use_power = NO_POWER_USE + circuit = /obj/item/weapon/circuitboard/machine/smes var/capacity = 5e6 // maximum charge var/charge = 0 // actual charge @@ -43,36 +44,21 @@ if(!terminal) to_chat(user, "This SMES has no power terminal!") -/obj/machinery/power/smes/New() +/obj/machinery/power/smes/Initialize() ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/smes(null) - B.apply_default_parts(src) - - spawn(5) - dir_loop: - for(var/d in GLOB.cardinals) - var/turf/T = get_step(src, d) - for(var/obj/machinery/power/terminal/term in T) - if(term && term.dir == turn(d, 180)) - terminal = term - break dir_loop + dir_loop: + for(var/d in GLOB.cardinals) + var/turf/T = get_step(src, d) + for(var/obj/machinery/power/terminal/term in T) + if(term && term.dir == turn(d, 180)) + terminal = term + break dir_loop if(!terminal) stat |= BROKEN return terminal.master = src update_icon() - return - -/obj/item/weapon/circuitboard/machine/smes - name = "SMES (Machine Board)" - build_path = /obj/machinery/power/smes - origin_tech = "programming=3;powerstorage=3;engineering=3" - req_components = list( - /obj/item/stack/cable_coil = 5, - /obj/item/weapon/stock_parts/cell = 5, - /obj/item/weapon/stock_parts/capacitor = 1) - def_components = list(/obj/item/weapon/stock_parts/cell = /obj/item/weapon/stock_parts/cell/high/empty) /obj/machinery/power/smes/RefreshParts() var/IO = 0 diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index b00bcb0c28..1d795b3307 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -13,15 +13,16 @@ layer = WIRE_TERMINAL_LAYER //a bit above wires -/obj/machinery/power/terminal/New() - ..() - var/turf/T = src.loc - if(level==1) hide(T.intact) - return +/obj/machinery/power/terminal/Initialize() + . = ..() + var/turf/T = get_turf(src) + if(level == 1) + hide(T.intact) /obj/machinery/power/terminal/Destroy() if(master) master.disconnect_terminal() + master = null return ..() /obj/machinery/power/terminal/hide(i) diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm index ee135b13b5..01e8e18659 100644 --- a/code/modules/power/tesla/coil.dm +++ b/code/modules/power/tesla/coil.dm @@ -11,23 +11,17 @@ buckle_lying = FALSE buckle_requires_restraints = TRUE + circuit = /obj/item/weapon/circuitboard/machine/tesla_coil + var/power_loss = 2 var/input_power_multiplier = 1 var/zap_cooldown = 100 var/last_zap = 0 -/obj/machinery/power/tesla_coil/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/tesla_coil(null) - B.apply_default_parts(src) +/obj/machinery/power/tesla_coil/Initialize() + . = ..() wires = new /datum/wires/tesla_coil(src) -/obj/item/weapon/circuitboard/machine/tesla_coil - name = "Tesla Coil (Machine Board)" - build_path = /obj/machinery/power/tesla_coil - origin_tech = "programming=3;magnets=3;powerstorage=3" - req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) - /obj/machinery/power/tesla_coil/RefreshParts() var/power_multiplier = 0 zap_cooldown = 100 @@ -109,16 +103,7 @@ buckle_lying = FALSE buckle_requires_restraints = TRUE -/obj/machinery/power/grounding_rod/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/grounding_rod(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/grounding_rod - name = "Grounding Rod (Machine Board)" - build_path = /obj/machinery/power/grounding_rod - origin_tech = "programming=3;powerstorage=3;magnets=3;plasmatech=2" - req_components = list(/obj/item/weapon/stock_parts/capacitor = 1) + circuit = /obj/item/weapon/circuitboard/machine/grounding_rod /obj/machinery/power/grounding_rod/default_unfasten_wrench(mob/user, obj/item/weapon/wrench/W, time = 20) . = ..() diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index 650b320bdb..9137a8731a 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -18,8 +18,8 @@ var/sun_angle = 0 // sun angle as set by sun datum var/obj/machinery/power/solar_control/control = null -/obj/machinery/power/tracker/New(var/turf/loc, var/obj/item/solar_assembly/S) - ..(loc) +/obj/machinery/power/tracker/Initialize(mapload, obj/item/solar_assembly/S) + . = ..() Make(S) connect_to_network() diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index ea4dfd95db..ed7c6824eb 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -31,6 +31,7 @@ density = TRUE resistance_flags = FIRE_PROOF CanAtmosPass = ATMOS_PASS_DENSITY + circuit = /obj/item/weapon/circuitboard/machine/power_compressor var/obj/machinery/power/turbine/turbine var/datum/gas_mixture/gas_contained var/turf/inturf @@ -51,6 +52,7 @@ density = TRUE resistance_flags = FIRE_PROOF CanAtmosPass = ATMOS_PASS_DENSITY + circuit = /obj/item/weapon/circuitboard/machine/power_turbine var/opened = 0 var/obj/machinery/power/compressor/compressor var/turf/outturf @@ -68,25 +70,12 @@ // the inlet stage of the gas turbine electricity generator -/obj/machinery/power/compressor/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/power_compressor(null) - B.apply_default_parts(src) -// The inlet of the compressor is the direction it faces - +/obj/machinery/power/compressor/Initialize() + . = ..() + // The inlet of the compressor is the direction it faces gas_contained = new inturf = get_step(src, dir) -/obj/item/weapon/circuitboard/machine/power_compressor - name = "Power Compressor (Machine Board)" - build_path = /obj/machinery/power/compressor - origin_tech = "programming=4;powerstorage=4;engineering=4" - req_components = list( - /obj/item/stack/cable_coil = 5, - /obj/item/weapon/stock_parts/manipulator = 6) - -/obj/machinery/power/compressor/Initialize() - . = ..() locate_machinery() if(!turbine) stat |= BROKEN @@ -186,23 +175,10 @@ #define TURBGENQ 100000 #define TURBGENG 0.5 -/obj/machinery/power/turbine/New() - ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/power_turbine(null) - B.apply_default_parts(src) -// The outlet is pointed at the direction of the turbine component - outturf = get_step(src, dir) - -/obj/item/weapon/circuitboard/machine/power_turbine - name = "Power Turbine (Machine Board)" - build_path = /obj/machinery/power/turbine - origin_tech = "programming=4;powerstorage=4;engineering=4" - req_components = list( - /obj/item/stack/cable_coil = 5, - /obj/item/weapon/stock_parts/capacitor = 6) - /obj/machinery/power/turbine/Initialize() . = ..() +// The outlet is pointed at the direction of the turbine component + outturf = get_step(src, dir) locate_machinery() if(!compressor) stat |= BROKEN diff --git a/code/modules/projectiles/guns/beam_rifle.dm b/code/modules/projectiles/guns/beam_rifle.dm index 7617c57100..ac9508138c 100644 --- a/code/modules/projectiles/guns/beam_rifle.dm +++ b/code/modules/projectiles/guns/beam_rifle.dm @@ -714,7 +714,7 @@ light_power = 1 light_range = 2 light_color = "#00ffff" - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT flags = ABSTRACT appearance_flags = 0 diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 75435885b8..28d2cd7f45 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -6,7 +6,7 @@ anchored = TRUE flags = ABSTRACT pass_flags = PASSTABLE - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT hitsound = 'sound/weapons/pierce.ogg' var/hitsound_wall = "" diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index a062d5c614..54d17497f3 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -370,9 +370,8 @@ else if(cached_my_atom.type == C.required_container) matching_container = 1 - if (isliving(cached_my_atom)) //Makes it so certain chemical reactions don't occur in mobs - if (C.mob_react) - return + if (isliving(cached_my_atom) && !C.mob_react) //Makes it so certain chemical reactions don't occur in mobs + return if(!C.required_other) matching_other = 1 diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 3811512a02..716943e7f4 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -229,6 +229,7 @@ amount = 5 recharge_delay = 30 dispensable_reagents = list() + circuit = /obj/item/weapon/circuitboard/machine/chem_dispenser var/list/dispensable_reagent_tiers = list( list( "hydrogen", @@ -272,23 +273,6 @@ ) ) -/obj/machinery/chem_dispenser/constructable/Initialize() - . = ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/chem_dispenser(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/chem_dispenser - name = "Portable Chem Dispenser (Machine Board)" - build_path = /obj/machinery/chem_dispenser/constructable - origin_tech = "materials=4;programming=4;plasmatech=4;biotech=3" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 2, - /obj/item/weapon/stock_parts/capacitor = 1, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/console_screen = 1, - /obj/item/weapon/stock_parts/cell = 1) - def_components = list(/obj/item/weapon/stock_parts/cell = /obj/item/weapon/stock_parts/cell/high) - /obj/machinery/chem_dispenser/constructable/RefreshParts() var/time = 0 var/i diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index 3d1c2b4a9c..b43841c43b 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -7,24 +7,12 @@ use_power = IDLE_POWER_USE idle_power_usage = 40 resistance_flags = FIRE_PROOF | ACID_PROOF + circuit = /obj/item/weapon/circuitboard/machine/chem_heater var/obj/item/weapon/reagent_containers/beaker = null var/target_temperature = 300 var/heater_coefficient = 0.10 var/on = FALSE -/obj/machinery/chem_heater/Initialize() - . = ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/chem_heater(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/chem_heater - name = "Chemical Heater (Machine Board)" - build_path = /obj/machinery/chem_heater - origin_tech = "programming=2;engineering=2;biotech=2" - req_components = list( - /obj/item/weapon/stock_parts/micro_laser = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - /obj/machinery/chem_heater/RefreshParts() heater_coefficient = 0.10 for(var/obj/item/weapon/stock_parts/micro_laser/M in component_parts) diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index d902ed7b13..c0d5fef9cc 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -3,11 +3,13 @@ desc = "Used to separate chemicals and distribute them in a variety of forms." density = TRUE anchored = TRUE + layer = BELOW_OBJ_LAYER icon = 'icons/obj/chemical.dmi' icon_state = "mixer0" use_power = IDLE_POWER_USE idle_power_usage = 20 resistance_flags = FIRE_PROOF | ACID_PROOF + circuit = /obj/item/weapon/circuitboard/machine/chem_master var/obj/item/weapon/reagent_containers/beaker = null var/obj/item/weapon/storage/pill_bottle/bottle = null var/mode = 1 @@ -15,39 +17,12 @@ var/screen = "home" var/analyzeVars[0] var/useramount = 30 // Last used amount - layer = BELOW_OBJ_LAYER /obj/machinery/chem_master/Initialize() create_reagents(100) add_overlay("waitlight") - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/chem_master(null) - B.apply_default_parts(src) . = ..() -/obj/item/weapon/circuitboard/machine/chem_master - name = "ChemMaster 3000 (Machine Board)" - build_path = /obj/machinery/chem_master - origin_tech = "materials=3;programming=2;biotech=3" - req_components = list( - /obj/item/weapon/reagent_containers/glass/beaker = 2, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/console_screen = 1) - -/obj/item/weapon/circuitboard/machine/chem_master/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/screwdriver)) - var/new_name = "ChemMaster" - var/new_path = /obj/machinery/chem_master - - if(build_path == /obj/machinery/chem_master) - new_name = "CondiMaster" - new_path = /obj/machinery/chem_master/condimaster - - build_path = new_path - name = "[new_name] 3000 (Machine Board)" - to_chat(user, "You change the circuit board setting to \"[new_name]\".") - else - return ..() - /obj/machinery/chem_master/RefreshParts() reagents.maximum_volume = 0 for(var/obj/item/weapon/reagent_containers/glass/beaker/B in component_parts) @@ -360,7 +335,3 @@ name = "CondiMaster 3000" desc = "Used to create condiments and other cooking supplies." condi = 1 - -/obj/item/weapon/circuitboard/machine/chem_master/condi - name = "CondiMaster 3000 (Machine Board)" - build_path = /obj/machinery/chem_master/condimaster diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index adf7292a56..57a7f3445d 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -52,6 +52,7 @@ M.SetUnconscious(0, 0) M.silent = 0 M.dizziness = 0 + M.disgust = 0 M.drowsyness = 0 M.stuttering = 0 M.slurring = 0 diff --git a/code/modules/reagents/chemistry/recipes.dm b/code/modules/reagents/chemistry/recipes.dm index c13ff096e4..428c10e24a 100644 --- a/code/modules/reagents/chemistry/recipes.dm +++ b/code/modules/reagents/chemistry/recipes.dm @@ -10,7 +10,7 @@ var/required_other = 0 // an integer required for the reaction to happen var/secondary = 0 // set to nonzero if secondary reaction - var/mob_react = 0 //Determines if a chemical reaction can occur inside a mob + var/mob_react = TRUE //Determines if a chemical reaction can occur inside a mob var/required_temp = 0 var/is_cold_recipe = 0 // Set to 1 if you want the recipe to only react when it's BELOW the required temp. diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index 4151a2695e..01195333fb 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -51,7 +51,7 @@ name = "Solid Plasma" id = "solidplasma" required_reagents = list("iron" = 5, "frostoil" = 5, "plasma" = 20) - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/plasmasolidification/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) @@ -62,7 +62,7 @@ name = "Solid Gold" id = "solidgold" required_reagents = list("frostoil" = 5, "gold" = 20, "iron" = 1) - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/goldsolidification/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) @@ -80,7 +80,7 @@ id = "soapification" required_reagents = list("liquidgibs" = 10, "lye" = 10) // requires two scooped gib tiles required_temp = 374 - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/soapification/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) @@ -92,7 +92,7 @@ id = "candlefication" required_reagents = list("liquidgibs" = 5, "oxygen" = 5) // required_temp = 374 - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/candlefication/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) @@ -103,7 +103,7 @@ name = "Meatification" id = "meatification" required_reagents = list("liquidgibs" = 10, "nutriment" = 10, "carbon" = 10) - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/meatification/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) @@ -436,7 +436,7 @@ name = "Foam" id = "foam" required_reagents = list("fluorosurfactant" = 1, "water" = 1) - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/foam/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) @@ -453,7 +453,7 @@ name = "Metal Foam" id = "metalfoam" required_reagents = list("aluminium" = 3, "foaming_agent" = 1, "facid" = 1) - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/metalfoam/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) @@ -470,7 +470,7 @@ name = "Iron Foam" id = "ironlfoam" required_reagents = list("iron" = 3, "foaming_agent" = 1, "facid" = 1) - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/ironfoam/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index dcafef247b..8ca65a6588 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -140,10 +140,11 @@ name = "Meth explosion" id = "methboom1" results = list("methboom1" = 1) - required_temp = 420 //high enough to not blow up in the meth syringes + required_temp = 380 //slightly above the meth mix time. required_reagents = list("methamphetamine" = 1) strengthdiv = 6 modifier = 1 + mob_react = FALSE /datum/chemical_reaction/reagent_explosion/methsplosion/on_reaction(datum/reagents/holder, created_volume) var/turf/T = get_turf(holder.my_atom) @@ -154,7 +155,7 @@ /datum/chemical_reaction/reagent_explosion/methsplosion/methboom2 required_reagents = list("diethylamine" = 1, "iodine" = 1, "phosphorus" = 1, "hydrogen" = 1) //diethylamine is often left over from mixing the ephedrine. - required_temp = 420 + required_temp = 300 //room temperature, chilling it even a little will prevent the explosion results = list("methboom1" = 4) // this is ugly. Sorry goof. /datum/chemical_reaction/sorium @@ -269,7 +270,7 @@ required_reagents = list("smoke_powder" = 1) required_temp = 374 secondary = 1 - mob_react = 1 + mob_react = FALSE /datum/chemical_reaction/smoke_powder_smoke/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 132ebdf8fd..c3e1bd2c98 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -9,6 +9,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). desc = "Manufactures circuit boards for the construction of machines." icon_state = "circuit_imprinter" container_type = OPENCONTAINER + circuit = /obj/item/weapon/circuitboard/machine/circuit_imprinter var/datum/material_container/materials var/efficiency_coeff @@ -28,24 +29,13 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). ) /obj/machinery/r_n_d/circuit_imprinter/Initialize() - . = ..() materials = new(src, list(MAT_GLASS, MAT_GOLD, MAT_DIAMOND, MAT_METAL, MAT_BLUESPACE)) create_reagents(0) - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/circuit_imprinter(null) - B.apply_default_parts(src) - -/obj/machinery/r_n_d/circuit_imprinter/Destroy() - qdel(materials) return ..() -/obj/item/weapon/circuitboard/machine/circuit_imprinter - name = "Circuit Imprinter (Machine Board)" - build_path = /obj/machinery/r_n_d/circuit_imprinter - origin_tech = "engineering=2;programming=2" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 1, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/reagent_containers/glass/beaker = 2) +/obj/machinery/r_n_d/circuit_imprinter/Destroy() + QDEL_NULL(materials) + return ..() /obj/machinery/r_n_d/circuit_imprinter/RefreshParts() reagents.maximum_volume = 0 diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 71b9780c58..c6f2463b74 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -11,22 +11,9 @@ Note: Must be placed within 3 tiles of the R&D Console name = "destructive analyzer" desc = "Learn science by destroying things!" icon_state = "d_analyzer" + circuit = /obj/item/weapon/circuitboard/machine/destructive_analyzer var/decon_mod = 0 -/obj/machinery/r_n_d/destructive_analyzer/Initialize() - . = ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/destructive_analyzer(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/destructive_analyzer - name = "Destructive Analyzer (Machine Board)" - build_path = /obj/machinery/r_n_d/destructive_analyzer - origin_tech = "magnets=2;engineering=2;programming=2" - req_components = list( - /obj/item/weapon/stock_parts/scanning_module = 1, - /obj/item/weapon/stock_parts/manipulator = 1, - /obj/item/weapon/stock_parts/micro_laser = 1) - /obj/machinery/r_n_d/destructive_analyzer/RefreshParts() var/T = 0 for(var/obj/item/weapon/stock_parts/S in component_parts) diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 7e7b4c2b5b..fa1c59bfd6 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -25,6 +25,7 @@ density = TRUE anchored = TRUE use_power = IDLE_POWER_USE + circuit = /obj/item/weapon/circuitboard/machine/experimentor var/recentlyExperimented = 0 var/mob/trackedIan var/mob/trackedRuntime @@ -84,22 +85,11 @@ /obj/machinery/r_n_d/experimentor/Initialize() . = ..() - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/experimentor(null) - B.apply_default_parts(src) trackedIan = locate(/mob/living/simple_animal/pet/dog/corgi/Ian) in GLOB.mob_list trackedRuntime = locate(/mob/living/simple_animal/pet/cat/Runtime) in GLOB.mob_list SetTypeReactions() -/obj/item/weapon/circuitboard/machine/experimentor - name = "E.X.P.E.R.I-MENTOR (Machine Board)" - build_path = /obj/machinery/r_n_d/experimentor - origin_tech = "magnets=1;engineering=1;programming=1;biotech=1;bluespace=2" - req_components = list( - /obj/item/weapon/stock_parts/scanning_module = 1, - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/weapon/stock_parts/micro_laser = 2) - /obj/machinery/r_n_d/experimentor/RefreshParts() for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) if(resetTime > 0 && (resetTime - M.rating) >= 1) diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 84432e8e44..2691286771 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -12,6 +12,7 @@ Note: Must be placed west/left of and R&D console to function. desc = "Converts raw materials into useful objects." icon_state = "protolathe" container_type = OPENCONTAINER + circuit = /obj/item/weapon/circuitboard/machine/protolathe var/datum/material_container/materials var/efficiency_coeff @@ -32,23 +33,12 @@ Note: Must be placed west/left of and R&D console to function. /obj/machinery/r_n_d/protolathe/Initialize() - . = ..() create_reagents(0) materials = new(src, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE)) - var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/protolathe(null) - B.apply_default_parts(src) - -/obj/item/weapon/circuitboard/machine/protolathe - name = "Protolathe (Machine Board)" - build_path = /obj/machinery/r_n_d/protolathe - origin_tech = "engineering=2;programming=2" - req_components = list( - /obj/item/weapon/stock_parts/matter_bin = 2, - /obj/item/weapon/stock_parts/manipulator = 2, - /obj/item/weapon/reagent_containers/glass/beaker = 2) + return ..() /obj/machinery/r_n_d/protolathe/Destroy() - qdel(materials) + QDEL_NULL(materials) return ..() /obj/machinery/r_n_d/protolathe/RefreshParts() diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 5dc96be0a0..0ea18b2ff9 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -21,8 +21,7 @@ wires = new /datum/wires/r_n_d(src) /obj/machinery/r_n_d/Destroy() - qdel(wires) - wires = null + QDEL_NULL(wires) return ..() /obj/machinery/r_n_d/proc/shock(mob/user, prb) diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index d161929f2c..8fa7e64ffe 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -19,14 +19,6 @@ var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/rdserver(null) B.apply_default_parts(src) -/obj/item/weapon/circuitboard/machine/rdserver - name = "R&D Server (Machine Board)" - build_path = /obj/machinery/r_n_d/server - origin_tech = "programming=3" - req_components = list( - /obj/item/stack/cable_coil = 2, - /obj/item/weapon/stock_parts/scanning_module = 1) - /obj/machinery/r_n_d/server/Destroy() griefProtection() return ..() diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 24849b7b09..4b010c85b2 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -486,7 +486,7 @@ /obj/effect/golemrune/Initialize() . = ..() START_PROCESSING(SSobj, src) - notify_ghosts("Golem rune created in [get_area(src)].", 'sound/effects/ghost2.ogg', source = src) + notify_ghosts("Golem rune created in [get_area(src)].", 'sound/misc/server-ready.ogg', source = src) /obj/effect/golemrune/Destroy() STOP_PROCESSING(SSobj, src) @@ -554,7 +554,7 @@ layer = FLY_LAYER pixel_x = -64 pixel_y = -64 - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/mob/living/immune = list() // the one who creates the timestop is immune var/list/stopped_atoms = list() var/freezerange = 2 diff --git a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm index ebab6568d8..8c4772d434 100644 --- a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm +++ b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm @@ -72,7 +72,7 @@ layer = EDGED_TURF_LAYER pixel_x = -32 pixel_y = -32 - mouse_opacity = 0 + mouse_opacity = MOUSE_OPACITY_TRANSPARENT opacity = TRUE /obj/structure/opacity_blocker/singularity_pull() diff --git a/code/modules/ruins/objects_and_mobs/ruin_mapping_aids.dm b/code/modules/ruins/objects_and_mobs/ruin_mapping_aids.dm index 06fb2b9c04..68a34637b8 100644 --- a/code/modules/ruins/objects_and_mobs/ruin_mapping_aids.dm +++ b/code/modules/ruins/objects_and_mobs/ruin_mapping_aids.dm @@ -1,10 +1,10 @@ //These landmarks can be placed in rooms/ruins to set the baseturfs of every turf in the area. Easier than having potentially unlimited subtypes of every turf or having to manually edit the turfs in the map editor /obj/effect/baseturf_helper - name = "lava baseturf editor" + name = "baseturf editor" icon = 'icons/obj/weapons.dmi' icon_state = "syndballoon" - var/baseturf = /turf/open/lava/smooth/lava_land_surface + var/baseturf = null layer = POINT_LAYER /obj/effect/baseturf_helper/Initialize() @@ -13,4 +13,37 @@ for(var/turf/T in get_area_turfs(thearea, z)) if(T.baseturf != T.type) //Don't break indestructible walls and the like T.baseturf = baseturf - qdel(src) \ No newline at end of file + qdel(src) + + +/obj/effect/baseturf_helper/asteroid + name = "asteroid baseturf editor" + baseturf = /turf/open/floor/plating/asteroid + +/obj/effect/baseturf_helper/asteroid/airless + name = "asteroid airless baseturf editor" + baseturf = /turf/open/floor/plating/asteroid/airless + +/obj/effect/baseturf_helper/asteroid/basalt + name = "asteroid basalt baseturf editor" + baseturf = /turf/open/floor/plating/asteroid/basalt + +/obj/effect/baseturf_helper/asteroid/snow + name = "asteroid snow baseturf editor" + baseturf = /turf/open/floor/plating/asteroid/snow + +/obj/effect/baseturf_helper/beach/sand + name = "beach sand baseturf editor" + baseturf = /turf/open/floor/plating/beach/sand + +/obj/effect/baseturf_helper/beach/water + name = "water baseturf editor" + baseturf = /turf/open/floor/plating/beach/water + +/obj/effect/baseturf_helper/lava + name = "lava baseturf editor" + baseturf = /turf/open/lava/smooth + +/obj/effect/baseturf_helper/lava_land/surface + name = "lavaland baseturf editor" + baseturf = /turf/open/lava/smooth/lava_land_surface diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm index 0567ee5d51..8563c36ea4 100644 --- a/code/modules/security_levels/keycard_authentication.dm +++ b/code/modules/security_levels/keycard_authentication.dm @@ -24,8 +24,8 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new) /obj/machinery/keycard_auth/Destroy() GLOB.keycard_events.clearEvent("triggerEvent", ev) - qdel(ev) - . = ..() + QDEL_NULL(ev) + return ..() /obj/machinery/keycard_auth/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 179f1e7d0a..eba4bd74a8 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -10,9 +10,13 @@ var/admin_controlled var/no_destination_swap = 0 -/obj/machinery/computer/shuttle/Initialize(mapload, obj/item/weapon/circuitboard/computer/shuttle/C) - . = ..() - if(istype(C)) +/obj/machinery/computer/shuttle/Initialize() + ..() + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/computer/shuttle/LateInitialize() + if(istype(circuit, /obj/item/weapon/circuitboard/computer/shuttle)) + var/obj/item/weapon/circuitboard/computer/shuttle/C = circuit possible_destinations = C.possible_destinations shuttleId = C.shuttleId diff --git a/code/modules/shuttle/manipulator.dm b/code/modules/shuttle/manipulator.dm index 6fd9cb129e..6e2741a6d7 100644 --- a/code/modules/shuttle/manipulator.dm +++ b/code/modules/shuttle/manipulator.dm @@ -33,14 +33,10 @@ add_overlay(hologram_projection) add_overlay(hologram_ship) -/obj/machinery/shuttle_manipulator/ui_interact(mob/user, ui_key = "main", \ - datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, \ - datum/ui_state/state = GLOB.admin_state) - +/obj/machinery/shuttle_manipulator/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.admin_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "shuttle_manipulator", name, 800, 600, \ - master_ui, state) + ui = new(user, src, ui_key, "shuttle_manipulator", name, 800, 600, master_ui, state) ui.open() /proc/shuttlemode2str(mode) @@ -62,7 +58,7 @@ if(SHUTTLE_ENDGAME) . = "endgame" if(!.) - throw EXCEPTION("shuttlemode2str(): invalid mode [mode]") + CRASH("shuttlemode2str(): invalid mode [mode]") /obj/machinery/shuttle_manipulator/ui_data(mob/user) diff --git a/code/modules/shuttle/ripple.dm b/code/modules/shuttle/ripple.dm index a757a86430..06675c39a3 100644 --- a/code/modules/shuttle/ripple.dm +++ b/code/modules/shuttle/ripple.dm @@ -8,7 +8,7 @@ anchored = TRUE density = FALSE layer = RIPPLE_LAYER - mouse_opacity = 1 + mouse_opacity = MOUSE_OPACITY_ICON alpha = 0 duration = 3 * SHUTTLE_RIPPLE_TIME diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index 9c2c67d97c..149685532d 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -10,9 +10,9 @@ icon = 'icons/obj/machines/magic_emitter.dmi' icon_state = "wabbajack_statue" icon_state_on = "wabbajack_statue_on" + active = FALSE var/list/active_tables = list() var/tables_required = 2 - active = FALSE /obj/machinery/power/emitter/energycannon/magical/Initialize() . = ..() diff --git a/code/modules/shuttle/syndicate.dm b/code/modules/shuttle/syndicate.dm index 47eb22c397..1c1b0731be 100644 --- a/code/modules/shuttle/syndicate.dm +++ b/code/modules/shuttle/syndicate.dm @@ -25,20 +25,6 @@ board.moved = TRUE ..() -/obj/item/weapon/circuitboard/computer/syndicate_shuttle - name = "Syndicate Shuttle (Computer Board)" - build_path = /obj/machinery/computer/shuttle/syndicate - var/challenge = FALSE - var/moved = FALSE - -/obj/item/weapon/circuitboard/computer/syndicate_shuttle/Initialize() - . = ..() - GLOB.syndicate_shuttle_boards += src - -/obj/item/weapon/circuitboard/computer/syndicate_shuttle/Destroy() - GLOB.syndicate_shuttle_boards -= src - return ..() - /obj/machinery/computer/shuttle/syndicate/drop_pod name = "syndicate assault pod control" icon = 'icons/obj/terminals.dmi' diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm index 77a30b1884..453a8e097a 100644 --- a/code/modules/station_goals/bsa.dm +++ b/code/modules/station_goals/bsa.dm @@ -206,35 +206,6 @@ /obj/structure/filler/ex_act() return -/obj/item/weapon/circuitboard/machine/bsa/back - name = "Bluespace Artillery Generator (Machine Board)" - build_path = /obj/machinery/bsa/back - origin_tech = "engineering=2;combat=2;bluespace=2" //No freebies! - req_components = list( - /obj/item/weapon/stock_parts/capacitor/quadratic = 5, - /obj/item/stack/cable_coil = 2) - -/obj/item/weapon/circuitboard/machine/bsa/middle - name = "Bluespace Artillery Fusor (Machine Board)" - build_path = /obj/machinery/bsa/middle - origin_tech = "engineering=2;combat=2;bluespace=2" - req_components = list( - /obj/item/weapon/ore/bluespace_crystal = 20, - /obj/item/stack/cable_coil = 2) - -/obj/item/weapon/circuitboard/machine/bsa/front - name = "Bluespace Artillery Bore (Machine Board)" - build_path = /obj/machinery/bsa/front - origin_tech = "engineering=2;combat=2;bluespace=2" - req_components = list( - /obj/item/weapon/stock_parts/manipulator/femto = 5, - /obj/item/stack/cable_coil = 2) - -/obj/item/weapon/circuitboard/computer/bsa_control - name = "Bluespace Artillery Controls (Computer Board)" - build_path = /obj/machinery/computer/bsa_control - origin_tech = "engineering=2;combat=2;bluespace=2" - /obj/machinery/computer/bsa_control name = "bluespace artillery control" var/obj/machinery/bsa/full/cannon diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index 1ccb608fa0..1b6d11719f 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -118,16 +118,6 @@ dna[H.dna.uni_identity] = 1 to_chat(user, "Humanoid data added to local storage.") - -/obj/item/weapon/circuitboard/machine/dna_vault - name = "DNA Vault (Machine Board)" - build_path = /obj/machinery/dna_vault - origin_tech = "engineering=2;combat=2;bluespace=2" //No freebies! - req_components = list( - /obj/item/weapon/stock_parts/capacitor/super = 5, - /obj/item/weapon/stock_parts/manipulator/pico = 5, - /obj/item/stack/cable_coil = 2) - /obj/machinery/dna_vault name = "DNA Vault" desc = "Break glass in case of apocalypse." diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm index 1543f7615a..38fd5ad853 100644 --- a/code/modules/station_goals/shield.dm +++ b/code/modules/station_goals/shield.dm @@ -36,15 +36,10 @@ coverage |= view(A.kill_range,A) return coverage.len -/obj/item/weapon/circuitboard/machine/computer/sat_control - name = "Satellite Network Control (Computer Board)" - build_path = /obj/machinery/computer/sat_control - origin_tech = "engineering=3" - /obj/machinery/computer/sat_control name = "satellite control" desc = "Used to control the satellite network." - circuit = /obj/item/weapon/circuitboard/machine/computer/sat_control + circuit = /obj/item/weapon/circuitboard/computer/sat_control var/notice /obj/machinery/computer/sat_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) diff --git a/code/modules/stock_market/computer.dm b/code/modules/stock_market/computer.dm index 9cef9b3048..68b28d09be 100644 --- a/code/modules/stock_market/computer.dm +++ b/code/modules/stock_market/computer.dm @@ -11,8 +11,8 @@ light_color = LIGHT_COLOR_GREEN -/obj/machinery/computer/stockexchange/New() - ..() +/obj/machinery/computer/stockexchange/Initialize() + . = ..() logged_in = "[station_name()] Cargo Department" /obj/machinery/computer/stockexchange/proc/balance() diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 12fdadaeb1..d63eb283c5 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -74,6 +74,7 @@ icon_state = "appendix" icon = 'icons/obj/surgery.dmi' list_reagents = list("nutriment" = 5) + foodtype = RAW | MEAT | GROSS /obj/item/organ/Destroy() diff --git a/code/modules/surgery/organs/stomach.dm b/code/modules/surgery/organs/stomach.dm index 74bc7821b0..36cd28ac98 100755 --- a/code/modules/surgery/organs/stomach.dm +++ b/code/modules/surgery/organs/stomach.dm @@ -7,12 +7,53 @@ slot = "stomach" attack_verb = list("gored", "squished", "slapped", "digested") desc = "Onaka ga suite imasu." + var/disgust_metabolism = 1 /obj/item/organ/stomach/on_life() var/mob/living/carbon/human/H = owner if(istype(H)) H.dna.species.handle_digestion(H) + handle_disgust(H) + +/obj/item/organ/stomach/proc/handle_disgust(mob/living/carbon/human/H) + if(H.disgust) + var/pukeprob = 5 + 0.05 * H.disgust + if(H.disgust >= DISGUST_LEVEL_GROSS) + if(prob(10)) + H.stuttering += 1 + H.confused += 2 + if(prob(10) && !H.stat) + to_chat(H, "You feel kind of iffy...") + H.jitteriness = max(H.jitteriness - 3, 0) + if(H.disgust >= DISGUST_LEVEL_VERYGROSS) + if(prob(pukeprob)) //iT hAndLeS mOrE ThaN PukInG + H.confused += 2.5 + H.stuttering += 1 + H.vomit(10, 0, 1, 0, 1, 0) + H.Dizzy(5) + if(H.disgust >= DISGUST_LEVEL_DISGUSTED) + if(prob(25)) + H.blur_eyes(3) //We need to add more shit down here + + H.adjust_disgust(-0.5 * disgust_metabolism) + + switch(H.disgust) + if(0 to DISGUST_LEVEL_GROSS) + H.clear_alert("disgust") + if(DISGUST_LEVEL_GROSS to DISGUST_LEVEL_VERYGROSS) + H.throw_alert("disgust", /obj/screen/alert/gross) + if(DISGUST_LEVEL_VERYGROSS to DISGUST_LEVEL_DISGUSTED) + H.throw_alert("disgust", /obj/screen/alert/verygross) + if(DISGUST_LEVEL_DISGUSTED to INFINITY) + H.throw_alert("disgust", /obj/screen/alert/disgusted) + +/obj/item/organ/stomach/Remove(mob/living/carbon/M, special = 0) + var/mob/living/carbon/human/H = owner + if(istype(H)) + H.clear_alert("disgust") + + ..() /obj/item/organ/stomach/fly name = "insectoid stomach" @@ -21,5 +62,5 @@ /obj/item/organ/stomach/plasmaman name = "digestive crystal" - icon_state = "pstomach" + icon_state = "pstomach" desc = "A strange crystal that is responsible for metabolizing the unseen energy force that feeds plasmamen." diff --git a/code/world.dm b/code/world.dm index a0c5ae43f8..955d19c6c4 100644 --- a/code/world.dm +++ b/code/world.dm @@ -1,3 +1,7 @@ + +//This file is just for the necessary /world definition +//Try looking in game/world.dm + /world mob = /mob/dead/new_player turf = /turf/open/space/basic @@ -10,298 +14,3 @@ #ifdef GC_FAILURE_HARD_LOOKUP loop_checks = FALSE #endif - -/world/New() - log_world("World loaded at [time_stamp()]") - - SetupExternalRSC() - - GLOB.config_error_log = GLOB.world_href_log = GLOB.world_runtime_log = GLOB.world_attack_log = GLOB.world_game_log = file("data/logs/config_error.log") //temporary file used to record errors with loading config, moved to log directory once logging is set bl - - make_datum_references_lists() //initialises global lists for referencing frequently used datums (so that we only ever do it once) - - config = new - - CheckSchemaVersion() - SetRoundID() - - SetupLogs() - - if(!RunningService()) //tgs2 support - GLOB.revdata.DownloadPRDetails() - - load_motd() - load_admins() - LoadVerbs(/datum/verbs/menu) - if(config.usewhitelist) - load_whitelist() - LoadBans() - - GLOB.timezoneOffset = text2num(time2text(0,"hh")) * 36000 - - Master.Initialize(10, FALSE) - - if(config.irc_announce_new_game) - IRCBroadcast("New round starting on [SSmapping.config.map_name]!") - -/world/proc/SetupExternalRSC() -#if (PRELOAD_RSC == 0) - external_rsc_urls = world.file2list("config/external_rsc_urls.txt","\n") - var/i=1 - while(i<=external_rsc_urls.len) - if(external_rsc_urls[i]) - i++ - else - external_rsc_urls.Cut(i,i+1) -#endif - -/world/proc/CheckSchemaVersion() - if(config.sql_enabled) - if(SSdbcore.Connect()) - var/datum/DBQuery/query_db_version = SSdbcore.NewQuery("SELECT major, minor FROM [format_table_name("schema_revision")] ORDER BY date DESC LIMIT 1") - query_db_version.Execute() - if(query_db_version.NextRow()) - var/db_major = text2num(query_db_version.item[1]) - var/db_minor = text2num(query_db_version.item[2]) - if(db_major < DB_MAJOR_VERSION || db_minor < DB_MINOR_VERSION) - message_admins("Database schema ([db_major].[db_minor]) is behind latest schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") - log_sql("Database schema ([db_major].[db_minor]) is behind latest schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") - else - message_admins("Could not get schema version from database") - else - log_world("Your server failed to establish a connection with the database.") - -/world/proc/SetRoundID() - if(config.sql_enabled) - if(SSdbcore.Connect()) - var/datum/DBQuery/query_round_start = SSdbcore.NewQuery("INSERT INTO [format_table_name("round")] (start_datetime, server_ip, server_port) VALUES (Now(), INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]')") - query_round_start.Execute() - var/datum/DBQuery/query_round_last_id = SSdbcore.NewQuery("SELECT LAST_INSERT_ID()") - query_round_last_id.Execute() - if(query_round_last_id.NextRow()) - GLOB.round_id = query_round_last_id.item[1] - -/world/proc/SetupLogs() - GLOB.log_directory = "data/logs/[time2text(world.realtime, "YYYY/MM/DD")]/round-" - if(GLOB.round_id) - GLOB.log_directory += "[GLOB.round_id]" - else - GLOB.log_directory += "[replacetext(time_stamp(), ":", ".")]" - GLOB.world_game_log = file("[GLOB.log_directory]/game.log") - GLOB.world_attack_log = file("[GLOB.log_directory]/attack.log") - GLOB.world_runtime_log = file("[GLOB.log_directory]/runtime.log") - GLOB.world_href_log = file("[GLOB.log_directory]/hrefs.html") - GLOB.world_game_log << "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------" - GLOB.world_attack_log << "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------" - GLOB.world_runtime_log << "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------" - GLOB.changelog_hash = md5('html/changelog.html') //used for telling if the changelog has changed recently - if(fexists(GLOB.config_error_log)) - fcopy(GLOB.config_error_log, "[GLOB.log_directory]/config_error.log") - fdel(GLOB.config_error_log) - - if(GLOB.round_id) - log_game("Round ID: [GLOB.round_id]") - -/world/Topic(T, addr, master, key) - var/list/input = params2list(T) - - var/pinging = ("ping" in input) - var/playing = ("players" in input) - - if(!pinging && !playing && config && config.log_world_topic) - GLOB.world_game_log << "TOPIC: \"[T]\", from:[addr], master:[master], key:[key]" - - if(input[SERVICE_CMD_PARAM_KEY]) - return ServiceCommand(input) - var/key_valid = (global.comms_allowed && input["key"] == global.comms_key) - - if(pinging) - var/x = 1 - for (var/client/C in GLOB.clients) - x++ - return x - - else if(playing) - var/n = 0 - for(var/mob/M in GLOB.player_list) - if(M.client) - n++ - return n - - else if("ircstatus" in input) //tgs2 support - var/static/last_irc_status = 0 - if(world.time - last_irc_status < 50) - return - var/list/adm = get_admin_counts() - var/list/allmins = adm["total"] - var/status = "Admins: [allmins.len] (Active: [english_list(adm["present"])] AFK: [english_list(adm["afk"])] Stealth: [english_list(adm["stealth"])] Skipped: [english_list(adm["noflags"])]). " - status += "Players: [GLOB.clients.len] (Active: [get_active_player_count(0,1,0)]). Mode: [SSticker.mode.name]." - send2irc("Status", status) - last_irc_status = world.time - - else if("status" in input) - var/list/s = list() - s["version"] = GLOB.game_version - s["mode"] = GLOB.master_mode - s["respawn"] = config ? GLOB.abandon_allowed : 0 - s["enter"] = GLOB.enter_allowed - s["vote"] = config.allow_vote_mode - s["ai"] = config.allow_ai - s["host"] = host ? host : null - s["active_players"] = get_active_player_count() - s["players"] = GLOB.clients.len - s["revision"] = GLOB.revdata.commit - s["revision_date"] = GLOB.revdata.date - - var/list/adm = get_admin_counts() - var/list/presentmins = adm["present"] - var/list/afkmins = adm["afk"] - s["admins"] = presentmins.len + afkmins.len //equivalent to the info gotten from adminwho - s["gamestate"] = SSticker.current_state - - s["map_name"] = SSmapping.config.map_name - - if(key_valid && SSticker.HasRoundStarted()) - s["real_mode"] = SSticker.mode.name - // Key-authed callers may know the truth behind the "secret" - - s["security_level"] = get_security_level() - s["round_duration"] = SSticker ? round((world.time-SSticker.round_start_time)/10) : 0 - // Amount of world's ticks in seconds, useful for calculating round duration - - if(SSshuttle && SSshuttle.emergency) - s["shuttle_mode"] = SSshuttle.emergency.mode - // Shuttle status, see /__DEFINES/stat.dm - s["shuttle_timer"] = SSshuttle.emergency.timeLeft() - // Shuttle timer, in seconds - - return list2params(s) - - else if("announce" in input) - if(!key_valid) - return "Bad Key" - else - AnnouncePR(input["announce"], json_decode(input["payload"])) - - else if("crossmessage" in input) - if(!key_valid) - return - else - if(input["crossmessage"] == "Ahelp") - relay_msg_admins("HELP: [input["source"]] [input["message_sender"]]: [input["message"]]") - if(input["crossmessage"] == "Comms_Console") - minor_announce(input["message"], "Incoming message from [input["message_sender"]]") - for(var/obj/machinery/computer/communications/CM in GLOB.machines) - CM.overrideCooldown() - if(input["crossmessage"] == "News_Report") - minor_announce(input["message"], "Breaking Update From [input["message_sender"]]") - - else if("adminmsg" in input) //tgs2 support - if(!key_valid) - return "Bad Key" - else - return IrcPm(input["adminmsg"],input["msg"],input["sender"]) - - else if("namecheck" in input) //tgs2 support - if(!key_valid) - return "Bad Key" - else - log_admin("IRC Name Check: [input["sender"]] on [input["namecheck"]]") - message_admins("IRC name checking on [input["namecheck"]] from [input["sender"]]") - return keywords_lookup(input["namecheck"],1) - else if("adminwho" in input) //tgs2 support - if(!key_valid) - return "Bad Key" - else - return ircadminwho() - else if("server_hop" in input) - show_server_hop_transfer_screen(input["server_hop"]) - -#define PR_ANNOUNCEMENTS_PER_ROUND 5 //The number of unique PR announcements allowed per round - //This makes sure that a single person can only spam 3 reopens and 3 closes before being ignored - -/world/proc/AnnouncePR(announcement, list/payload) - var/static/list/PRcounts = list() //PR id -> number of times announced this round - var/id = "[payload["pull_request"]["id"]]" - if(!PRcounts[id]) - PRcounts[id] = 1 - else - ++PRcounts[id] - if(PRcounts[id] > PR_ANNOUNCEMENTS_PER_ROUND) - return - - var/final_composed = "PR: [announcement]" - for(var/client/C in GLOB.clients) - C.AnnouncePR(final_composed) - -/world/Reboot(reason = 0, fast_track = FALSE) - ServiceReboot() //handles alternative actions if necessary - if (reason || fast_track) //special reboot, do none of the normal stuff - if (usr) - log_admin("[key_name(usr)] Has requested an immediate world restart via client side debugging tools") - message_admins("[key_name_admin(usr)] Has requested an immediate world restart via client side debugging tools") - to_chat(world, "Rebooting World immediately due to host request") - else - to_chat(world, "Rebooting world...") - Master.Shutdown() //run SS shutdowns - log_world("World rebooted at [time_stamp()]") - ..() - -/world/proc/load_motd() - GLOB.join_motd = file2text("config/motd.txt") + "
" + GLOB.revdata.GetTestMergeInfo() - -/world/proc/update_status() - var/s = "" - - if (config && config.server_name) - s += "[config.server_name] — " - - s += "[station_name()]"; - s += " (" - s += "" //Change this to wherever you want the hub to link to. - s += "Default" //Replace this with something else. Or ever better, delete it and uncomment the game version. - s += "" - s += ")" - - var/list/features = list() - - if(GLOB.master_mode) - features += GLOB.master_mode - - if (!GLOB.enter_allowed) - features += "closed" - - features += GLOB.abandon_allowed ? "respawn" : "no respawn" - - if (config && config.allow_vote_mode) - features += "vote" - - if (config && config.allow_ai) - features += "AI allowed" - - var/n = 0 - for (var/mob/M in GLOB.player_list) - if (M.client) - n++ - - if (n > 1) - features += "~[n] players" - else if (n > 0) - features += "~[n] player" - - if (!host && config && config.hostedby) - features += "hosted by [config.hostedby]" - - if (features) - s += ": [jointext(features, ", ")]" - - status = s - -/world/proc/update_hub_visibility(new_visibility) - if(new_visibility == GLOB.hub_visibility) - return - GLOB.hub_visibility = new_visibility - if(GLOB.hub_visibility) - hub_password = "kMZy3U5jJHSiBQjr" - else - hub_password = "SORRYNOPASSWORD" diff --git a/code/world.dm.rej b/code/world.dm.rej index cde7698a21..e82c17e503 100644 --- a/code/world.dm.rej +++ b/code/world.dm.rej @@ -1,10 +1,301 @@ diff a/code/world.dm b/code/world.dm (rejected hunks) -@@ -59,7 +59,7 @@ - if(config.sql_enabled) - if(SSdbcore.Connect()) - log_world("Database connection established.") -- var/datum/DBQuery/query_db_version = SSdbcore.NewQuery("SELECT major, minor FROM [format_table_name("schema_version")] ORDER BY date DESC LIMIT 1") -+ var/datum/DBQuery/query_db_version = SSdbcore.NewQuery("SELECT major, minor FROM [format_table_name("schema_revision")] ORDER BY date DESC LIMIT 1") - query_db_version.Execute() - if(query_db_version.NextRow()) - var/db_major = query_db_version.item[1] +@@ -10,299 +13,3 @@ + #ifdef GC_FAILURE_HARD_LOOKUP + loop_checks = FALSE + #endif +- +-/world/New() +- log_world("World loaded at [time_stamp()]") +- +- SetupExternalRSC() +- +- GLOB.config_error_log = GLOB.world_href_log = GLOB.world_runtime_log = GLOB.world_attack_log = GLOB.world_game_log = file("data/logs/config_error.log") //temporary file used to record errors with loading config, moved to log directory once logging is set bl +- +- make_datum_references_lists() //initialises global lists for referencing frequently used datums (so that we only ever do it once) +- +- config = new +- +- CheckSchemaVersion() +- SetRoundID() +- +- SetupLogs() +- +- if(!RunningService()) //tgs2 support +- GLOB.revdata.DownloadPRDetails() +- +- load_motd() +- load_admins() +- LoadVerbs(/datum/verbs/menu) +- if(config.usewhitelist) +- load_whitelist() +- LoadBans() +- +- GLOB.timezoneOffset = text2num(time2text(0,"hh")) * 36000 +- +- Master.Initialize(10, FALSE) +- +- if(config.irc_announce_new_game) +- IRCBroadcast("New round starting on [SSmapping.config.map_name]!") +- +-/world/proc/SetupExternalRSC() +-#if (PRELOAD_RSC == 0) +- external_rsc_urls = world.file2list("config/external_rsc_urls.txt","\n") +- var/i=1 +- while(i<=external_rsc_urls.len) +- if(external_rsc_urls[i]) +- i++ +- else +- external_rsc_urls.Cut(i,i+1) +-#endif +- +-/world/proc/CheckSchemaVersion() +- if(config.sql_enabled) +- if(SSdbcore.Connect()) +- log_world("Database connection established.") +- var/datum/DBQuery/query_db_version = SSdbcore.NewQuery("SELECT major, minor FROM [format_table_name("schema_revision")] ORDER BY date DESC LIMIT 1") +- query_db_version.Execute() +- if(query_db_version.NextRow()) +- var/db_major = text2num(query_db_version.item[1]) +- var/db_minor = text2num(query_db_version.item[2]) +- if(db_major < DB_MAJOR_VERSION || db_minor < DB_MINOR_VERSION) +- message_admins("Database schema ([db_major].[db_minor]) is behind latest schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") +- log_sql("Database schema ([db_major].[db_minor]) is behind latest schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") +- else +- message_admins("Could not get schema version from database") +- else +- log_world("Your server failed to establish a connection with the database.") +- +-/world/proc/SetRoundID() +- if(config.sql_enabled) +- if(SSdbcore.Connect()) +- var/datum/DBQuery/query_round_start = SSdbcore.NewQuery("INSERT INTO [format_table_name("round")] (start_datetime, server_ip, server_port) VALUES (Now(), INET_ATON(IF('[world.internet_address]' LIKE '', '0', '[world.internet_address]')), '[world.port]')") +- query_round_start.Execute() +- var/datum/DBQuery/query_round_last_id = SSdbcore.NewQuery("SELECT LAST_INSERT_ID()") +- query_round_last_id.Execute() +- if(query_round_last_id.NextRow()) +- GLOB.round_id = query_round_last_id.item[1] +- +-/world/proc/SetupLogs() +- GLOB.log_directory = "data/logs/[time2text(world.realtime, "YYYY/MM/DD")]/round-" +- if(GLOB.round_id) +- GLOB.log_directory += "[GLOB.round_id]" +- else +- GLOB.log_directory += "[replacetext(time_stamp(), ":", ".")]" +- GLOB.world_game_log = file("[GLOB.log_directory]/game.log") +- GLOB.world_attack_log = file("[GLOB.log_directory]/attack.log") +- GLOB.world_runtime_log = file("[GLOB.log_directory]/runtime.log") +- GLOB.world_href_log = file("[GLOB.log_directory]/hrefs.html") +- GLOB.world_game_log << "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------" +- GLOB.world_attack_log << "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------" +- GLOB.world_runtime_log << "\n\nStarting up round ID [GLOB.round_id]. [time_stamp()]\n---------------------" +- GLOB.changelog_hash = md5('html/changelog.html') //used for telling if the changelog has changed recently +- if(fexists(GLOB.config_error_log)) +- fcopy(GLOB.config_error_log, "[GLOB.log_directory]/config_error.log") +- fdel(GLOB.config_error_log) +- +- if(GLOB.round_id) +- log_game("Round ID: [GLOB.round_id]") +- +-/world/Topic(T, addr, master, key) +- var/list/input = params2list(T) +- +- var/pinging = ("ping" in input) +- var/playing = ("players" in input) +- +- if(!pinging && !playing && config && config.log_world_topic) +- GLOB.world_game_log << "TOPIC: \"[T]\", from:[addr], master:[master], key:[key]" +- +- if(input[SERVICE_CMD_PARAM_KEY]) +- return ServiceCommand(input) +- var/key_valid = (global.comms_allowed && input["key"] == global.comms_key) +- +- if(pinging) +- var/x = 1 +- for (var/client/C in GLOB.clients) +- x++ +- return x +- +- else if(playing) +- var/n = 0 +- for(var/mob/M in GLOB.player_list) +- if(M.client) +- n++ +- return n +- +- else if("ircstatus" in input) //tgs2 support +- var/static/last_irc_status = 0 +- if(world.time - last_irc_status < 50) +- return +- var/list/adm = get_admin_counts() +- var/list/allmins = adm["total"] +- var/status = "Admins: [allmins.len] (Active: [english_list(adm["present"])] AFK: [english_list(adm["afk"])] Stealth: [english_list(adm["stealth"])] Skipped: [english_list(adm["noflags"])]). " +- status += "Players: [GLOB.clients.len] (Active: [get_active_player_count(0,1,0)]). Mode: [SSticker.mode.name]." +- send2irc("Status", status) +- last_irc_status = world.time +- +- else if("status" in input) +- var/list/s = list() +- s["version"] = GLOB.game_version +- s["mode"] = GLOB.master_mode +- s["respawn"] = config ? GLOB.abandon_allowed : 0 +- s["enter"] = GLOB.enter_allowed +- s["vote"] = config.allow_vote_mode +- s["ai"] = config.allow_ai +- s["host"] = host ? host : null +- s["active_players"] = get_active_player_count() +- s["players"] = GLOB.clients.len +- s["revision"] = GLOB.revdata.commit +- s["revision_date"] = GLOB.revdata.date +- +- var/list/adm = get_admin_counts() +- var/list/presentmins = adm["present"] +- var/list/afkmins = adm["afk"] +- s["admins"] = presentmins.len + afkmins.len //equivalent to the info gotten from adminwho +- s["gamestate"] = SSticker.current_state +- +- s["map_name"] = SSmapping.config.map_name +- +- if(key_valid && SSticker.HasRoundStarted()) +- s["real_mode"] = SSticker.mode.name +- // Key-authed callers may know the truth behind the "secret" +- +- s["security_level"] = get_security_level() +- s["round_duration"] = SSticker ? round((world.time-SSticker.round_start_time)/10) : 0 +- // Amount of world's ticks in seconds, useful for calculating round duration +- +- if(SSshuttle && SSshuttle.emergency) +- s["shuttle_mode"] = SSshuttle.emergency.mode +- // Shuttle status, see /__DEFINES/stat.dm +- s["shuttle_timer"] = SSshuttle.emergency.timeLeft() +- // Shuttle timer, in seconds +- +- return list2params(s) +- +- else if("announce" in input) +- if(!key_valid) +- return "Bad Key" +- else +- AnnouncePR(input["announce"], json_decode(input["payload"])) +- +- else if("crossmessage" in input) +- if(!key_valid) +- return +- else +- if(input["crossmessage"] == "Ahelp") +- relay_msg_admins("HELP: [input["source"]] [input["message_sender"]]: [input["message"]]") +- if(input["crossmessage"] == "Comms_Console") +- minor_announce(input["message"], "Incoming message from [input["message_sender"]]") +- for(var/obj/machinery/computer/communications/CM in GLOB.machines) +- CM.overrideCooldown() +- if(input["crossmessage"] == "News_Report") +- minor_announce(input["message"], "Breaking Update From [input["message_sender"]]") +- +- else if("adminmsg" in input) //tgs2 support +- if(!key_valid) +- return "Bad Key" +- else +- return IrcPm(input["adminmsg"],input["msg"],input["sender"]) +- +- else if("namecheck" in input) //tgs2 support +- if(!key_valid) +- return "Bad Key" +- else +- log_admin("IRC Name Check: [input["sender"]] on [input["namecheck"]]") +- message_admins("IRC name checking on [input["namecheck"]] from [input["sender"]]") +- return keywords_lookup(input["namecheck"],1) +- else if("adminwho" in input) //tgs2 support +- if(!key_valid) +- return "Bad Key" +- else +- return ircadminwho() +- else if("server_hop" in input) +- show_server_hop_transfer_screen(input["server_hop"]) +- +-#define PR_ANNOUNCEMENTS_PER_ROUND 5 //The number of unique PR announcements allowed per round +- //This makes sure that a single person can only spam 3 reopens and 3 closes before being ignored +- +-/world/proc/AnnouncePR(announcement, list/payload) +- var/static/list/PRcounts = list() //PR id -> number of times announced this round +- var/id = "[payload["pull_request"]["id"]]" +- if(!PRcounts[id]) +- PRcounts[id] = 1 +- else +- ++PRcounts[id] +- if(PRcounts[id] > PR_ANNOUNCEMENTS_PER_ROUND) +- return +- +- var/final_composed = "PR: [announcement]" +- for(var/client/C in GLOB.clients) +- C.AnnouncePR(final_composed) +- +-/world/Reboot(reason = 0, fast_track = FALSE) +- ServiceReboot() //handles alternative actions if necessary +- if (reason || fast_track) //special reboot, do none of the normal stuff +- if (usr) +- log_admin("[key_name(usr)] Has requested an immediate world restart via client side debugging tools") +- message_admins("[key_name_admin(usr)] Has requested an immediate world restart via client side debugging tools") +- to_chat(world, "Rebooting World immediately due to host request") +- else +- to_chat(world, "Rebooting world...") +- Master.Shutdown() //run SS shutdowns +- log_world("World rebooted at [time_stamp()]") +- ..() +- +-/world/proc/load_motd() +- GLOB.join_motd = file2text("config/motd.txt") + "
" + GLOB.revdata.GetTestMergeInfo() +- +-/world/proc/update_status() +- var/s = "" +- +- if (config && config.server_name) +- s += "[config.server_name] — " +- +- s += "[station_name()]"; +- s += " (" +- s += "" //Change this to wherever you want the hub to link to. +- s += "Default" //Replace this with something else. Or ever better, delete it and uncomment the game version. +- s += "" +- s += ")" +- +- var/list/features = list() +- +- if(GLOB.master_mode) +- features += GLOB.master_mode +- +- if (!GLOB.enter_allowed) +- features += "closed" +- +- features += GLOB.abandon_allowed ? "respawn" : "no respawn" +- +- if (config && config.allow_vote_mode) +- features += "vote" +- +- if (config && config.allow_ai) +- features += "AI allowed" +- +- var/n = 0 +- for (var/mob/M in GLOB.player_list) +- if (M.client) +- n++ +- +- if (n > 1) +- features += "~[n] players" +- else if (n > 0) +- features += "~[n] player" +- +- if (!host && config && config.hostedby) +- features += "hosted by [config.hostedby]" +- +- if (features) +- s += ": [jointext(features, ", ")]" +- +- status = s +- +-/world/proc/update_hub_visibility(new_visibility) +- if(new_visibility == GLOB.hub_visibility) +- return +- GLOB.hub_visibility = new_visibility +- if(GLOB.hub_visibility) +- hub_password = "kMZy3U5jJHSiBQjr" +- else +- hub_password = "SORRYNOPASSWORD" diff --git a/html/changelogs/AutoChangeLog-pr-2232.yml b/html/changelogs/AutoChangeLog-pr-2232.yml new file mode 100644 index 0000000000..8d82c65d9f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2232.yml @@ -0,0 +1,8 @@ +author: "Floyd (and sprites by Maya from Yogstation13)" +delete-after: True +changes: + - rscadd: "Makes rat edible. Only lizards really enjoy eating them, though." + - rscadd: "Adds food types to all food, which means you can no longer eat whatever the hell you want." + - rscadd: "Adds a disgust system, currently only used with food." + - rscadd: "Pukonium, makes whoever it is injected to disgusted." + - rscadd: "Makes pod people vegan, or well, carnivores. It depends on how you look at it, really." diff --git a/html/changelogs/AutoChangeLog-pr-2253.yml b/html/changelogs/AutoChangeLog-pr-2253.yml new file mode 100644 index 0000000000..142950f442 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2253.yml @@ -0,0 +1,4 @@ +author: "Floyd" +delete-after: True +changes: + - bugfix: "No longer does everyone look like a sick, nauseated weirdo!" diff --git a/html/changelogs/AutoChangeLog-pr-2357.yml b/html/changelogs/AutoChangeLog-pr-2357.yml new file mode 100644 index 0000000000..f63277f66f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2357.yml @@ -0,0 +1,8 @@ +author: "ktccd" +delete-after: True +changes: + - rscadd: "Breasts can now be used to masturbate/milk yourselves." + - rscadd: "You can now expose genitals through clothing using a verb in the IC tab." + - tweak: "Pressing the Arousal HUD symbol will now bring up several options to use. Pull or be pulled by someone who's exposed to have them appear as an option." + - tweak: "Made hexacamphor/hexacrocin less verbose and trigger forced climaxes less often to avoid incredible spam." + - tweak: "Being forced to orgasm while pulled or pulling someone now counts them as your selected partner." diff --git a/html/changelogs/AutoChangeLog-pr-2362.yml b/html/changelogs/AutoChangeLog-pr-2362.yml new file mode 100644 index 0000000000..5bdc603b06 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2362.yml @@ -0,0 +1,4 @@ +author: "More Robust Than You" +delete-after: True +changes: + - bugfix: "Fixes a typo in the blobbernaut spawn text" diff --git a/html/changelogs/AutoChangeLog-pr-2399.yml b/html/changelogs/AutoChangeLog-pr-2399.yml new file mode 100644 index 0000000000..2d162a5edf --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2399.yml @@ -0,0 +1,4 @@ +author: "More Robust Than You" +delete-after: True +changes: + - rscadd: "Blobs can now sense when they're being cuddled!" diff --git a/html/changelogs/AutoChangeLog-pr-2408.yml b/html/changelogs/AutoChangeLog-pr-2408.yml new file mode 100644 index 0000000000..92f33a9292 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2408.yml @@ -0,0 +1,4 @@ +author: "Xhuis" +delete-after: True +changes: + - soundadd: "The station's explosion now uses a new (or old) sound." diff --git a/html/changelogs/AutoChangeLog-pr-2428.yml b/html/changelogs/AutoChangeLog-pr-2428.yml new file mode 100644 index 0000000000..76adf39bcd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2428.yml @@ -0,0 +1,4 @@ +author: "Xhuis" +delete-after: True +changes: + - spellcheck: "The chat message has been removed from *spin. I hope you're happy." diff --git a/html/changelogs/AutoChangeLog-pr-2437.yml b/html/changelogs/AutoChangeLog-pr-2437.yml new file mode 100644 index 0000000000..1a54eed45e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2437.yml @@ -0,0 +1,5 @@ +author: "BeeSting12" +delete-after: True +changes: + - bugfix: "Deltastation's N2O console has been renamed to be an N2O console." + - tweak: "Deltastation's atmos now has a fire axe." diff --git a/html/changelogs/AutoChangeLog-pr-2438.yml b/html/changelogs/AutoChangeLog-pr-2438.yml new file mode 100644 index 0000000000..9195a11183 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2438.yml @@ -0,0 +1,4 @@ +author: "XDTM" +delete-after: True +changes: + - bugfix: "Viruses will now be able to affect more than one person at a time." diff --git a/html/changelogs/AutoChangeLog-pr-2439.yml b/html/changelogs/AutoChangeLog-pr-2439.yml new file mode 100644 index 0000000000..c92b5e2235 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2439.yml @@ -0,0 +1,4 @@ +author: "ShizCalev" +delete-after: True +changes: + - tweak: "The singularity will now dig up asteroids when in proximity of them. Please watch for flying debris." diff --git a/html/changelogs/AutoChangeLog-pr-2448.yml b/html/changelogs/AutoChangeLog-pr-2448.yml new file mode 100644 index 0000000000..40610a2afe --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2448.yml @@ -0,0 +1,4 @@ +author: "ktccd" +delete-after: True +changes: + - bugfix: "Taurs now rely on their taur-sprites to render legs, instead of rendering human legs on top of them. Mostly impacts driders and such uniquely legged individuals." diff --git a/icons/effects/96x96.dmi b/icons/effects/96x96.dmi index 102fc01000..e6315d6f48 100644 Binary files a/icons/effects/96x96.dmi and b/icons/effects/96x96.dmi differ diff --git a/icons/mob/mam_body_markings.dmi b/icons/mob/mam_body_markings.dmi index 737fa15c42..fdb97490c8 100644 Binary files a/icons/mob/mam_body_markings.dmi and b/icons/mob/mam_body_markings.dmi differ diff --git a/icons/mob/mam_bodyparts.dmi b/icons/mob/mam_bodyparts.dmi index c9f1ba70e8..7de9b40734 100644 Binary files a/icons/mob/mam_bodyparts.dmi and b/icons/mob/mam_bodyparts.dmi differ diff --git a/icons/obj/machines/telecomms.dmi b/icons/obj/machines/telecomms.dmi index 7f5f05e3af..4a6988f88e 100644 Binary files a/icons/obj/machines/telecomms.dmi and b/icons/obj/machines/telecomms.dmi differ diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index 8576be384b..7ad30fb7b5 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -161,4 +161,6 @@ h1.alert, h2.alert {color: #000000;} .monkey {color: #975032;} .swarmer {color: #2C75FF;} .resonate {color: #298F85;} +.love {color: #FF69Bf;} +.lovebold {color: #FF69Bf; font-weight: bold;} "} diff --git a/sound/effects/explosion_distant.ogg b/sound/effects/explosion_distant.ogg new file mode 100644 index 0000000000..d9976c51fe Binary files /dev/null and b/sound/effects/explosion_distant.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 185bc4f91d..ea4c83c1f7 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -37,6 +37,7 @@ #include "code\__DEFINES\DNA.dm" #include "code\__DEFINES\events.dm" #include "code\__DEFINES\flags.dm" +#include "code\__DEFINES\food.dm" #include "code\__DEFINES\hud.dm" #include "code\__DEFINES\inventory.dm" #include "code\__DEFINES\is_helpers.dm" @@ -374,6 +375,7 @@ #include "code\game\shuttle_engines.dm" #include "code\game\skincmd.dm" #include "code\game\sound.dm" +#include "code\game\world.dm" #include "code\game\area\ai_monitored.dm" #include "code\game\area\areas.dm" #include "code\game\area\Space_Station_13_areas.dm" @@ -548,6 +550,7 @@ #include "code\game\gamemodes\wizard\soulstone.dm" #include "code\game\gamemodes\wizard\spellbook.dm" #include "code\game\gamemodes\wizard\wizard.dm" +#include "code\game\machinery\_machinery.dm" #include "code\game\machinery\ai_slipper.dm" #include "code\game\machinery\airlock_control.dm" #include "code\game\machinery\announcement_system.dm" @@ -574,7 +577,6 @@ #include "code\game\machinery\launch_pad.dm" #include "code\game\machinery\lightswitch.dm" #include "code\game\machinery\limbgrower.dm" -#include "code\game\machinery\machinery.dm" #include "code\game\machinery\magnet.dm" #include "code\game\machinery\mass_driver.dm" #include "code\game\machinery\navbeacon.dm" @@ -605,6 +607,7 @@ #include "code\game\machinery\camera\motion.dm" #include "code\game\machinery\camera\presets.dm" #include "code\game\machinery\camera\tracking.dm" +#include "code\game\machinery\computer\_computer.dm" #include "code\game\machinery\computer\aifixer.dm" #include "code\game\machinery\computer\apc_control.dm" #include "code\game\machinery\computer\arcade.dm" @@ -616,7 +619,6 @@ #include "code\game\machinery\computer\card.dm" #include "code\game\machinery\computer\cloning.dm" #include "code\game\machinery\computer\communications.dm" -#include "code\game\machinery\computer\computer.dm" #include "code\game\machinery\computer\crew.dm" #include "code\game\machinery\computer\dna_console.dm" #include "code\game\machinery\computer\gulag_teleporter.dm" @@ -632,6 +634,7 @@ #include "code\game\machinery\computer\security.dm" #include "code\game\machinery\computer\station_alert.dm" #include "code\game\machinery\computer\telecrystalconsoles.dm" +#include "code\game\machinery\computer\teleporter.dm" #include "code\game\machinery\doors\airlock.dm" #include "code\game\machinery\doors\airlock_electronics.dm" #include "code\game\machinery\doors\airlock_types.dm" @@ -862,6 +865,9 @@ #include "code\game\objects\items\weapons\twohanded.dm" #include "code\game\objects\items\weapons\vending_items.dm" #include "code\game\objects\items\weapons\weaponry.dm" +#include "code\game\objects\items\weapons\circuitboards\circuitboard.dm" +#include "code\game\objects\items\weapons\circuitboards\computer_circuitboards.dm" +#include "code\game\objects\items\weapons\circuitboards\machine_circuitboards.dm" #include "code\game\objects\items\weapons\grenades\chem_grenade.dm" #include "code\game\objects\items\weapons\grenades\clusterbuster.dm" #include "code\game\objects\items\weapons\grenades\emgrenade.dm" diff --git a/tools/dmitool/dmitool.jar b/tools/dmitool/dmitool.jar index 4cfa49f36d..3e99778951 100644 Binary files a/tools/dmitool/dmitool.jar and b/tools/dmitool/dmitool.jar differ diff --git a/tools/dmitool/src/main/java/dmitool/IconState.java b/tools/dmitool/src/main/java/dmitool/IconState.java index 2a2202c71c..a214f5d621 100644 --- a/tools/dmitool/src/main/java/dmitool/IconState.java +++ b/tools/dmitool/src/main/java/dmitool/IconState.java @@ -189,6 +189,7 @@ public class IconState { px[i] = sl.clone(); } + int channelCount = in.imgInfo.alpha ? 4 : 3; Image[] images = new Image[frames*dirs]; for(int imageY=0; imageY LINES_LIMIT-1: break if counter+len(note) > LINE_LENGTH_LIM-2: - last_note_num = len(split_list)-1 - split_list[last_note_num] = split_list[last_note_num].rstrip(',') - split_list[last_note_num] += END_OF_LINE_CHAR + split_list[-1] = split_list[-1].rstrip(',') + split_list[-1] += END_OF_LINE_CHAR counter = 0 line_counter += 1 split_list.append(note)