diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index 8d3aa08493..acb1da7b02 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -17,7 +17,7 @@ Pipelines + Other Objects -> Pipe network var/nodealert = 0 var/power_rating //the maximum amount of power the machine can use to do work, affects how powerful the machine is, in Watts - layer = PIPES_LAYER + layer = ATMOS_LAYER plane = PLATING_PLANE var/pipe_flags = PIPING_DEFAULT_LAYER_ONLY // Allow other layers by exception basis. @@ -202,12 +202,12 @@ Pipelines + Other Objects -> Pipe network if(PIPING_LAYER_SCRUBBER) icon_state = "[icon_state]-scrubbers" connect_types = CONNECT_TYPE_SCRUBBER - layer = 2.38 + layer = PIPES_SCRUBBER_LAYER icon_connect_type = "-scrubbers" if(PIPING_LAYER_SUPPLY) icon_state = "[icon_state]-supply" connect_types = CONNECT_TYPE_SUPPLY - layer = 2.39 + layer = PIPES_SUPPLY_LAYER icon_connect_type = "-supply" if(pipe_flags & PIPING_ALL_LAYER) connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER diff --git a/code/ATMOSPHERICS/pipes/cap.dm b/code/ATMOSPHERICS/pipes/cap.dm index 4658b9c40c..a03ce16af5 100644 --- a/code/ATMOSPHERICS/pipes/cap.dm +++ b/code/ATMOSPHERICS/pipes/cap.dm @@ -79,7 +79,7 @@ icon_state = "cap-scrubbers" connect_types = CONNECT_TYPE_SCRUBBER piping_layer = PIPING_LAYER_SCRUBBER - layer = 2.38 + layer = PIPES_SCRUBBER_LAYER icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -89,7 +89,7 @@ icon_state = "cap-supply" connect_types = CONNECT_TYPE_SUPPLY piping_layer = PIPING_LAYER_SUPPLY - layer = 2.39 + layer = PIPES_SUPPLY_LAYER icon_connect_type = "-supply" color = PIPE_COLOR_BLUE @@ -104,7 +104,7 @@ icon_state = "cap-f-scrubbers" connect_types = CONNECT_TYPE_SCRUBBER piping_layer = PIPING_LAYER_SCRUBBER - layer = 2.38 + layer = PIPES_SCRUBBER_LAYER icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -114,6 +114,6 @@ icon_state = "cap-f-supply" connect_types = CONNECT_TYPE_SUPPLY piping_layer = PIPING_LAYER_SUPPLY - layer = 2.39 + layer = PIPES_SUPPLY_LAYER icon_connect_type = "-supply" color = PIPE_COLOR_BLUE diff --git a/code/ATMOSPHERICS/pipes/he_pipes.dm b/code/ATMOSPHERICS/pipes/he_pipes.dm index fe6580b1ce..2d77e3a4ca 100644 --- a/code/ATMOSPHERICS/pipes/he_pipes.dm +++ b/code/ATMOSPHERICS/pipes/he_pipes.dm @@ -12,7 +12,7 @@ construction_type = /obj/item/pipe/binary/bendable pipe_state = "he" - layer = 2.41 + layer = PIPES_HE_LAYER var/initialize_directions_he var/surface = 2 //surface area in m^2 var/icon_temperature = T20C //stop small changes in temperature causing an icon refresh diff --git a/code/ATMOSPHERICS/pipes/manifold.dm b/code/ATMOSPHERICS/pipes/manifold.dm index bca6dd3379..524d420d39 100644 --- a/code/ATMOSPHERICS/pipes/manifold.dm +++ b/code/ATMOSPHERICS/pipes/manifold.dm @@ -18,7 +18,6 @@ var/obj/machinery/atmospherics/node3 level = 1 - layer = 2.4 //under wires with their 2.44 /obj/machinery/atmospherics/pipe/manifold/New() ..() @@ -166,7 +165,7 @@ icon_state = "map-scrubbers" connect_types = CONNECT_TYPE_SCRUBBER piping_layer = PIPING_LAYER_SCRUBBER - layer = 2.38 + layer = PIPES_SCRUBBER_LAYER icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -176,7 +175,7 @@ icon_state = "map-supply" connect_types = CONNECT_TYPE_SUPPLY piping_layer = PIPING_LAYER_SUPPLY - layer = 2.39 + layer = PIPES_SUPPLY_LAYER icon_connect_type = "-supply" color = PIPE_COLOR_BLUE @@ -212,7 +211,7 @@ icon_state = "map-scrubbers" connect_types = CONNECT_TYPE_SCRUBBER piping_layer = PIPING_LAYER_SCRUBBER - layer = 2.38 + layer = PIPES_SCRUBBER_LAYER icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -222,7 +221,7 @@ icon_state = "map-supply" connect_types = CONNECT_TYPE_SUPPLY piping_layer = PIPING_LAYER_SUPPLY - layer = 2.39 + layer = PIPES_SUPPLY_LAYER icon_connect_type = "-supply" color = PIPE_COLOR_BLUE diff --git a/code/ATMOSPHERICS/pipes/manifold4w.dm b/code/ATMOSPHERICS/pipes/manifold4w.dm index 88adc47d62..0cc022423b 100644 --- a/code/ATMOSPHERICS/pipes/manifold4w.dm +++ b/code/ATMOSPHERICS/pipes/manifold4w.dm @@ -19,7 +19,6 @@ var/obj/machinery/atmospherics/node4 level = 1 - layer = 2.4 //under wires with their 2.44 /obj/machinery/atmospherics/pipe/manifold4w/New() ..() @@ -168,7 +167,7 @@ icon_state = "map_4way-scrubbers" connect_types = CONNECT_TYPE_SCRUBBER piping_layer = PIPING_LAYER_SCRUBBER - layer = 2.38 + layer = PIPES_SCRUBBER_LAYER icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -178,7 +177,7 @@ icon_state = "map_4way-supply" connect_types = CONNECT_TYPE_SUPPLY piping_layer = PIPING_LAYER_SUPPLY - layer = 2.39 + layer = PIPES_SUPPLY_LAYER icon_connect_type = "-supply" color = PIPE_COLOR_BLUE @@ -214,7 +213,7 @@ icon_state = "map_4way-scrubbers" connect_types = CONNECT_TYPE_SCRUBBER piping_layer = PIPING_LAYER_SCRUBBER - layer = 2.38 + layer = PIPES_SCRUBBER_LAYER icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -224,7 +223,7 @@ icon_state = "map_4way-supply" connect_types = CONNECT_TYPE_SUPPLY piping_layer = PIPING_LAYER_SUPPLY - layer = 2.39 + layer = PIPES_SUPPLY_LAYER icon_connect_type = "-supply" color = PIPE_COLOR_BLUE diff --git a/code/ATMOSPHERICS/pipes/pipe_base.dm b/code/ATMOSPHERICS/pipes/pipe_base.dm index 4e852ed0c8..19b05e8b71 100644 --- a/code/ATMOSPHERICS/pipes/pipe_base.dm +++ b/code/ATMOSPHERICS/pipes/pipe_base.dm @@ -7,7 +7,7 @@ var/datum/pipeline/parent var/volume = 0 - layer = 2.4 //under wires with their 2.44 + layer = PIPES_LAYER use_power = 0 pipe_flags = 0 // Does not have PIPING_DEFAULT_LAYER_ONLY flag. diff --git a/code/ATMOSPHERICS/pipes/simple.dm b/code/ATMOSPHERICS/pipes/simple.dm index 77290e5d8a..6aee81807e 100644 --- a/code/ATMOSPHERICS/pipes/simple.dm +++ b/code/ATMOSPHERICS/pipes/simple.dm @@ -173,7 +173,7 @@ icon_state = "intact-scrubbers" connect_types = CONNECT_TYPE_SCRUBBER piping_layer = PIPING_LAYER_SCRUBBER - layer = 2.38 + layer = PIPES_SCRUBBER_LAYER icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -183,7 +183,7 @@ icon_state = "intact-supply" connect_types = CONNECT_TYPE_SUPPLY piping_layer = PIPING_LAYER_SUPPLY - layer = 2.39 + layer = PIPES_SUPPLY_LAYER icon_connect_type = "-supply" color = PIPE_COLOR_BLUE @@ -219,7 +219,7 @@ icon_state = "intact-scrubbers" connect_types = CONNECT_TYPE_SCRUBBER piping_layer = PIPING_LAYER_SCRUBBER - layer = 2.38 + layer = PIPES_SCRUBBER_LAYER icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -229,7 +229,7 @@ icon_state = "intact-supply" connect_types = CONNECT_TYPE_SUPPLY piping_layer = PIPING_LAYER_SUPPLY - layer = 2.39 + layer = PIPES_SUPPLY_LAYER icon_connect_type = "-supply" color = PIPE_COLOR_BLUE diff --git a/code/ATMOSPHERICS/pipes/tank.dm b/code/ATMOSPHERICS/pipes/tank.dm index c96f4ddf1d..751c9ed607 100644 --- a/code/ATMOSPHERICS/pipes/tank.dm +++ b/code/ATMOSPHERICS/pipes/tank.dm @@ -11,6 +11,7 @@ volume = 10000 //in liters, 1 meters by 1 meters by 2 meters ~tweaked it a little to simulate a pressure tank without needing to recode them yet var/start_pressure = 75*ONE_ATMOSPHERE //Vorestation edit + layer = ATMOS_LAYER level = 1 dir = SOUTH initialize_directions = SOUTH diff --git a/code/__defines/_planes+layers.dm b/code/__defines/_planes+layers.dm index a044b16c85..ad2962547c 100644 --- a/code/__defines/_planes+layers.dm +++ b/code/__defines/_planes+layers.dm @@ -40,10 +40,6 @@ What is the naming convention for planes or layers? */ -#define PLANE_ADMIN1 -92 //Purely for shenanigans -#define PLANE_ADMIN2 -91 //And adminbuse -#define PLANE_ADMIN3 -90 //And generating salt - #define SPACE_PLANE -82 // Reserved for use in space/parallax #define PARALLAX_PLANE -80 // Reserved for use in space/parallax @@ -57,8 +53,9 @@ What is the naming convention for planes or layers? #define SPACE_PLANE -43 // Space turfs themselves #define PLATING_PLANE -44 // Plating #define DISPOSAL_LAYER 2.1 // Under objects, even when planeswapped - #define WIRES_LAYER 2.2 // Under objects, even when planeswapped - #define PIPES_LAYER 2.3 // Under objects, even when planeswapped + #define PIPES_LAYER 2.2 // Under objects, even when planeswapped + #define WIRES_LAYER 2.3 // Under objects, even when planeswapped + #define ATMOS_LAYER 2.4 // Pipe-like atmos machinery that goes on the floor, like filters. #define ABOVE_UTILITY 2.5 // Above stuff like pipes and wires #define TURF_PLANE -45 // Turfs themselves, most flooring #define ABOVE_TURF_LAYER 2.1 // Snow and such @@ -105,7 +102,8 @@ What is the naming convention for planes or layers? #define HUD_LAYER 20 // Above lighting, but below obfuscation. For in-game HUD effects (whereas SCREEN_LAYER is for abstract/OOC things like inventory slots) #define SCREEN_LAYER 22 // Mob HUD/effects layer - + +#define PLANE_ADMIN1 3 //Purely for shenanigans (below lighting) #define PLANE_PLANETLIGHTING 4 //Lighting on planets #define PLANE_LIGHTING 5 //Where the lighting (and darkness) lives #define PLANE_LIGHTING_ABOVE 6 //For glowy eyes etc. that shouldn't be affected by darkness @@ -127,6 +125,8 @@ What is the naming convention for planes or layers? #define PLANE_MESONS 30 //Stuff seen with mesons, like open ceilings. This is 30 for downstreams. +#define PLANE_ADMIN2 33 //Purely for shenanigans (above lighting) + //Fullscreen overlays under inventory #define PLANE_FULLSCREEN 90 //Blindness, mesons, druggy, etc #define OBFUSCATION_LAYER 5 //Where images covering the view for eyes are put @@ -143,6 +143,8 @@ What is the naming convention for planes or layers? #define LAYER_HUD_ABOVE 4 //Things that reside above items (highlights) #define PLANE_PLAYER_HUD_ITEMS 96 //Separate layer with which to apply colorblindness +#define PLANE_ADMIN3 99 //Purely for shenanigans (above HUD) + ////////////////////////// /atom/proc/hud_layerise() diff --git a/code/__defines/construction.dm b/code/__defines/construction.dm index 837ad7ed38..2bae550a22 100644 --- a/code/__defines/construction.dm +++ b/code/__defines/construction.dm @@ -28,7 +28,7 @@ #define PIPE_BENDABLE 1 //6 directions: N/S, E/W, N/E, N/W, S/E, S/W #define PIPE_TRINARY 2 //4 directions: N/E/S, E/S/W, S/W/N, W/N/E #define PIPE_TRIN_M 3 //8 directions: N->S+E, S->N+E, N->S+W, S->N+W, E->W+S, W->E+S, E->W+N, W->E+N -#define PIPE_DIRECTIONAL 4 //4 directions: N, S, E, W +#define PIPE_DIRECTIONAL 4 //4 directions: N, S, E, W #define PIPE_ONEDIR 5 //1 direction: N/S/E/W #define PIPE_UNARY_FLIPPABLE 6 //8 directions: N, S, E, W, N-flipped, S-flipped, E-flipped, W-flipped #define PIPE_TRIN_T 7 //8 directions: N->S+E, S->N+E, N->S+W, S->N+W, E->W+S, W->E+S, E->W+N, W->E+N @@ -45,6 +45,11 @@ #define PIPING_LAYER_SCRUBBER 3 #define PIPING_LAYER_DEFAULT PIPING_LAYER_REGULAR +// We offset the layer values of the different pipe types to ensure they look nice +#define PIPES_SCRUBBER_LAYER (PIPES_LAYER - 0.02) +#define PIPES_SUPPLY_LAYER (PIPES_LAYER - 0.01) +#define PIPES_HE_LAYER (PIPES_LAYER + 0.01) + // Pipe flags #define PIPING_ALL_LAYER 1 //intended to connect with all layers, check for all instead of just one. #define PIPING_ONE_PER_TURF 2 //can only be built if nothing else with this flag is on the tile already. diff --git a/code/datums/helper_datums/teleport_vr.dm b/code/datums/helper_datums/teleport_vr.dm index 1cb73d6ad9..eba2570c18 100644 --- a/code/datums/helper_datums/teleport_vr.dm +++ b/code/datums/helper_datums/teleport_vr.dm @@ -1,13 +1,17 @@ /datum/teleport/proc/try_televore() //Destination is in a belly - if(isbelly(destination.loc)) + if(isbelly(destination.loc) && isliving(teleatom)) + var/mob/living/L = teleatom var/obj/belly/B = destination.loc - + + if(!L.can_be_drop_prey) //Overloading this as a pref for 'want to be unexpectedly eaten' + return FALSE + teleatom.forceMove(get_turf(B)) //So we can splash the sound and sparks and everything. playSpecials(destination,effectout,soundout) teleatom.forceMove(B) - return 1 + return TRUE //No fun! - return 0 + return FALSE \ No newline at end of file diff --git a/code/datums/supplypacks/costumes_vr.dm b/code/datums/supplypacks/costumes_vr.dm new file mode 100644 index 0000000000..fd8921ba77 --- /dev/null +++ b/code/datums/supplypacks/costumes_vr.dm @@ -0,0 +1,264 @@ +/datum/supply_packs/costumes/xenowear_vr + name = "Xenowear crate" + contains = list( + /obj/item/clothing/shoes/footwraps, + /obj/item/clothing/shoes/boots/jackboots/toeless, + /obj/item/clothing/shoes/boots/workboots/toeless, + /obj/item/clothing/suit/tajaran/furs, + /obj/item/clothing/head/tajaran/scarf, + /obj/item/clothing/suit/unathi/robe, + /obj/item/clothing/suit/unathi/mantle, + /obj/item/clothing/under/permit, + /obj/item/clothing/under/vox/vox_casual, + /obj/item/clothing/under/vox/vox_robes, + /obj/item/clothing/under/harness, + /obj/item/clothing/under/skirt/loincloth, + /obj/item/clothing/gloves/vox + ) + cost = 100 + containertype = /obj/structure/closet/crate + containername = "Xenowear crate" + +/datum/supply_packs/costumes/tesh_smocks_vr + name = "Teshari smocks" + contains = list( + /obj/item/clothing/under/seromi/smock, + /obj/item/clothing/under/seromi/smock/rainbow, + /obj/item/clothing/under/seromi/smock/red, + /obj/item/clothing/under/seromi/smock/white, + /obj/item/clothing/under/seromi/smock/yellow + ) + cost = 25 + containertype = /obj/structure/closet/crate + containername = "Teshari smocks crate" + +/datum/supply_packs/randomised/costumes/tesh_coats_vr + name = "Teshari undercoats" + num_contained = 4 + contains = list( + /obj/item/clothing/under/seromi/undercoat/blue_grey, + /obj/item/clothing/under/seromi/undercoat/brown_grey, + /obj/item/clothing/under/seromi/undercoat/green_grey, + /obj/item/clothing/under/seromi/undercoat/lightgrey_grey, + /obj/item/clothing/under/seromi/undercoat/orange, + /obj/item/clothing/under/seromi/undercoat/orange_grey, + /obj/item/clothing/under/seromi/undercoat/pink_grey, + /obj/item/clothing/under/seromi/undercoat/purple_grey, + /obj/item/clothing/under/seromi/undercoat/rainbow, + /obj/item/clothing/under/seromi/undercoat/red_grey, + /obj/item/clothing/under/seromi/undercoat/white_grey, + /obj/item/clothing/under/seromi/undercoat/yellow_grey + ) + cost = 20 + containertype = /obj/structure/closet/crate + containername = "Teshari undercoats crate" + +/datum/supply_packs/randomised/costumes/tesh_coats_b_vr + name = "Teshari undercoats (black)" + num_contained = 4 + contains = list( + /obj/item/clothing/under/seromi/undercoat/black, + /obj/item/clothing/under/seromi/undercoat/black_blue, + /obj/item/clothing/under/seromi/undercoat/black_brown, + /obj/item/clothing/under/seromi/undercoat/black_green, + /obj/item/clothing/under/seromi/undercoat/black_grey, + /obj/item/clothing/under/seromi/undercoat/black_lightgrey, + /obj/item/clothing/under/seromi/undercoat/black_midgrey, + /obj/item/clothing/under/seromi/undercoat/black_orange, + /obj/item/clothing/under/seromi/undercoat/black_pink, + /obj/item/clothing/under/seromi/undercoat/black_purple, + /obj/item/clothing/under/seromi/undercoat/black_red, + /obj/item/clothing/under/seromi/undercoat/black_white, + /obj/item/clothing/under/seromi/undercoat/black_yellow + ) + cost = 20 + containertype = /obj/structure/closet/crate + containername = "Teshari undercoats crate" + +/datum/supply_packs/randomised/costumes/tesh_cloaks_vr + name = "Teshari cloaks" + num_contained = 4 + contains = list( + /obj/item/clothing/suit/storage/seromi/cloak/blue_grey, + /obj/item/clothing/suit/storage/seromi/cloak/brown_grey, + /obj/item/clothing/suit/storage/seromi/cloak/green_grey, + /obj/item/clothing/suit/storage/seromi/cloak/lightgrey_grey, + /obj/item/clothing/suit/storage/seromi/cloak/orange, + /obj/item/clothing/suit/storage/seromi/cloak/orange_grey, + /obj/item/clothing/suit/storage/seromi/cloak/pink_grey, + /obj/item/clothing/suit/storage/seromi/cloak/purple_grey, + /obj/item/clothing/suit/storage/seromi/cloak/rainbow, + /obj/item/clothing/suit/storage/seromi/cloak/red_grey, + /obj/item/clothing/suit/storage/seromi/cloak/white_grey, + /obj/item/clothing/suit/storage/seromi/cloak/yellow_grey + ) + cost = 40 + containertype = /obj/structure/closet/crate + containername = "Teshari cloaks crate" + +/datum/supply_packs/randomised/costumes/tesh_cloaks_b_vr + name = "Teshari cloaks (black)" + num_contained = 4 + contains = list( + /obj/item/clothing/suit/storage/seromi/cloak/black, + /obj/item/clothing/suit/storage/seromi/cloak/black_blue, + /obj/item/clothing/suit/storage/seromi/cloak/black_brown, + /obj/item/clothing/suit/storage/seromi/cloak/black_green, + /obj/item/clothing/suit/storage/seromi/cloak/black_grey, + /obj/item/clothing/suit/storage/seromi/cloak/black_lightgrey, + /obj/item/clothing/suit/storage/seromi/cloak/black_midgrey, + /obj/item/clothing/suit/storage/seromi/cloak/black_orange, + /obj/item/clothing/suit/storage/seromi/cloak/black_pink, + /obj/item/clothing/suit/storage/seromi/cloak/black_purple, + /obj/item/clothing/suit/storage/seromi/cloak/black_red, + /obj/item/clothing/suit/storage/seromi/cloak/black_white, + /obj/item/clothing/suit/storage/seromi/cloak/black_yellow + ) + cost = 40 + containertype = /obj/structure/closet/crate + containername = "Teshari cloaks crate" + +/datum/supply_packs/costumes/utility_vr + name = "Utility uniforms" + contains = list( + /obj/item/clothing/under/utility, + /obj/item/clothing/under/utility/blue, + /obj/item/clothing/under/utility/grey + ) + cost = 30 + containertype = /obj/structure/closet/crate + containername = "Utility uniforms crate" + +/datum/supply_packs/costumes/skirts_vr + name = "Skirts crate" + contains = list( + /obj/item/clothing/under/skirt, + /obj/item/clothing/under/skirt/blue, + /obj/item/clothing/under/skirt/denim, + /obj/item/clothing/under/skirt/khaki, + /obj/item/clothing/under/skirt/outfit, + /obj/item/clothing/under/skirt/red, + /obj/item/clothing/under/skirt/swept, + /obj/item/clothing/under/skirt/outfit/plaid_blue, + /obj/item/clothing/under/skirt/outfit/plaid_purple, + /obj/item/clothing/under/skirt/outfit/plaid_red + ) + cost = 40 + containertype = /obj/structure/closet/crate + containername = "Skirts crate" + +/datum/supply_packs/costumes/varsity_vr + name = "Varsity jackets" + contains = list( + /obj/item/clothing/suit/varsity, + /obj/item/clothing/suit/varsity/blue, + /obj/item/clothing/suit/varsity/brown, + /obj/item/clothing/suit/varsity/green, + /obj/item/clothing/suit/varsity/purple, + /obj/item/clothing/suit/varsity/red + ) + cost = 60 + containertype = /obj/structure/closet/crate + containername = "Varsity jackets crate" + +/datum/supply_packs/randomised/costumes/leathergear_vr + name = "Leather gear" + num_contained = 5 + contains = list( + /obj/item/clothing/suit/leathercoat, + /obj/item/clothing/suit/storage/leather_jacket_alt, + /obj/item/clothing/suit/storage/toggle/leather_jacket, + /obj/item/clothing/suit/storage/toggle/leather_jacket/sleeveless, + /obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen, + /obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen/sleeveless, + /obj/item/clothing/under/pants/chaps, + /obj/item/clothing/under/pants/chaps/black, + /obj/item/clothing/under/harness, + /obj/item/clothing/shoes/leather, + /obj/item/clothing/shoes/boots/jungle, + /obj/item/clothing/shoes/boots/jackboots, + /obj/item/clothing/shoes/boots/cowboy, + /obj/item/clothing/shoes/boots/cowboy/classic, + /obj/item/clothing/shoes/boots/cowboy/snakeskin, + /obj/item/clothing/accessory/chaps, + /obj/item/clothing/accessory/chaps/black, + /obj/item/clothing/accessory/collar/spike, + /obj/item/clothing/gloves/fingerless, + /obj/item/clothing/gloves/botanic_leather, + /obj/item/clothing/head/cowboy_hat, + /obj/item/clothing/head/cowboy_hat/black + ) + cost = 50 + containertype = /obj/structure/closet/crate + containername = "Leather gear crate" + +/datum/supply_packs/costumes/eyewear_vr + name = "Eyewear crate" + contains = list( + /obj/item/clothing/glasses/eyepatch, + /obj/item/clothing/glasses/fakesunglasses, + /obj/item/clothing/glasses/fakesunglasses/aviator, + /obj/item/clothing/glasses/fluff/science_proper, + /obj/item/clothing/glasses/fluff/spiffygogs, + /obj/item/clothing/glasses/gglasses, + /obj/item/clothing/glasses/monocle, + /obj/item/clothing/glasses/regular, + /obj/item/clothing/glasses/regular/hipster, + /obj/item/clothing/glasses/regular/scanners, + /obj/item/clothing/glasses/threedglasses + ) + cost = 50 + containertype = /obj/structure/closet/crate + containername = "Eyewear crate" + +/datum/supply_packs/randomised/costumes/gloves_vr + name = "Gloves crate" + num_contained = 4 + contains = list( + /obj/item/clothing/gloves/black, + /obj/item/clothing/gloves/blue, + /obj/item/clothing/gloves/botanic_leather, + /obj/item/clothing/gloves/brown, + /obj/item/clothing/gloves/evening, + /obj/item/clothing/gloves/fingerless, + /obj/item/clothing/gloves/fyellow, + /obj/item/clothing/gloves/green, + /obj/item/clothing/gloves/grey, + /obj/item/clothing/gloves/light_brown, + /obj/item/clothing/gloves/orange, + /obj/item/clothing/gloves/purple, + /obj/item/clothing/gloves/rainbow, + /obj/item/clothing/gloves/red, + /obj/item/clothing/gloves/white + ) + cost = 40 + containertype = /obj/structure/closet/crate + containername = "Gloves crate" + +/datum/supply_packs/randomised/costumes/boots_vr + name = "Boots crate" + num_contained = 3 + contains = list( + /obj/item/clothing/shoes/boots/workboots, + /obj/item/clothing/shoes/boots/cowboy, + /obj/item/clothing/shoes/boots/cowboy/classic, + /obj/item/clothing/shoes/boots/cowboy/snakeskin, + /obj/item/clothing/shoes/boots/duty, + /obj/item/clothing/shoes/boots/jackboots, + /obj/item/clothing/shoes/boots/jungle, + /obj/item/clothing/shoes/boots/winter + ) + cost = 60 + containertype = /obj/structure/closet/crate + containername = "Boots crate" + +/datum/supply_packs/costumes/taurbags + name = "Saddlebags crate" + contains = list( + /obj/item/weapon/storage/backpack/saddlebag_common, + /obj/item/weapon/storage/backpack/saddlebag_common/robust, + /obj/item/weapon/storage/backpack/saddlebag_common/vest + ) + cost = 60 + containertype = /obj/structure/closet/crate + containername = "Saddlebags crate" \ No newline at end of file diff --git a/code/datums/supplypacks/hospitality_vr.dm b/code/datums/supplypacks/hospitality_vr.dm new file mode 100644 index 0000000000..1f69ef1151 --- /dev/null +++ b/code/datums/supplypacks/hospitality_vr.dm @@ -0,0 +1,84 @@ +/datum/supply_packs/randomised/hospitality/burgers_vr + num_contained = 5 + contains = list( + /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger, + /obj/item/weapon/reagent_containers/food/snacks/cheeseburger, + /obj/item/weapon/reagent_containers/food/snacks/jellyburger, + /obj/item/weapon/reagent_containers/food/snacks/tofuburger, + /obj/item/weapon/reagent_containers/food/snacks/fishburger + ) + name = "Burger crate" + cost = 25 + containertype = /obj/structure/closet/crate/freezer + containername = "Burger crate" +/* +/datum/supply_packs/randomised/hospitality/bakery_vr + num_contained = 5 + contains = list( + /obj/item/weapon/reagent_containers/food/snacks/baguette, + /obj/item/weapon/reagent_containers/food/snacks/appletart, + /obj/item/weapon/reagent_containers/food/snacks/berrymuffin, + /obj/item/weapon/reagent_containers/food/snacks/bunbun, + /obj/item/weapon/reagent_containers/food/snacks/cherrypie, + /obj/item/weapon/reagent_containers/food/snacks/cookie, + /obj/item/weapon/reagent_containers/food/snacks/croissant, + /obj/item/weapon/reagent_containers/food/snacks/donut/normal, + /obj/item/weapon/reagent_containers/food/snacks/donut/jelly, + /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly, + /obj/item/weapon/reagent_containers/food/snacks/muffin, + /obj/item/weapon/reagent_containers/food/snacks/pie, + /obj/item/weapon/reagent_containers/food/snacks/plump_pie, + /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit, + /obj/item/weapon/reagent_containers/food/snacks/poppypretzel, + /obj/item/weapon/reagent_containers/food/snacks/sugarcookie, + /obj/item/weapon/reagent_containers/food/snacks/waffles + ) + name = "Bakery products crate" + cost = 25 + containertype = /obj/structure/closet/crate/freezer + containername = "Bakery products crate" + +/datum/supply_packs/randomised/hospitality/cakes_vr + num_contained = 2 + contains = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake + ) + name = "Cake crate" + cost = 100 + containertype = /obj/structure/closet/crate/freezer + containername = "Cake crate" + +/datum/supply_packs/randomised/hospitality/mexican_vr + num_contained = 5 + contains = list( + /obj/item/weapon/reagent_containers/food/snacks/cheeseburrito, + /obj/item/weapon/reagent_containers/food/snacks/enchiladas, + /obj/item/weapon/reagent_containers/food/snacks/meatburrito, + /obj/item/weapon/reagent_containers/food/snacks/taco + ) + name = "Mexican takeout crate" + cost = 50 + containertype = /obj/structure/closet/crate/freezer + containername = "Mexican takeout crate" +*/ +/datum/supply_packs/randomised/hospitality/asian_vr + num_contained = 5 + contains = list( + /obj/item/weapon/reagent_containers/food/snacks/generalschicken, + /obj/item/weapon/reagent_containers/food/snacks/hotandsoursoup + ) + name = "Chinese takeout crate" + cost = 50 + containertype = /obj/structure/closet/crate/freezer + containername = "Chinese takeout crate" + +/datum/supply_packs/randomised/hospitality/pizza + cost = 50 \ No newline at end of file diff --git a/code/datums/supplypacks/recreation_vr.dm b/code/datums/supplypacks/recreation_vr.dm index e95094428e..8f0d775797 100644 --- a/code/datums/supplypacks/recreation_vr.dm +++ b/code/datums/supplypacks/recreation_vr.dm @@ -38,4 +38,33 @@ ) cost = 50 containertype = /obj/structure/closet/crate - containername = "wolfgirl cosplay crate" \ No newline at end of file + containername = "wolfgirl cosplay crate" + +/datum/supply_packs/randomised/recreation/figures_vr + name = "Action figures crate" + num_contained = 5 + contains = list( + /obj/random/action_figure + ) + cost = 200 + containertype = /obj/structure/closet/crate + containername = "Action figures crate" + +/datum/supply_packs/recreation/characters_vr + name = "Tabletop miniatures" + contains = list( + /obj/item/weapon/storage/box/characters + ) + containertype = /obj/structure/closet/crate + containername = "Tabletop miniatures crate" + cost = 50 + +/datum/supply_packs/randomised/recreation/plushies_vr + name = "Plushies crate" + num_contained = 3 + contains = list( + /obj/random/plushie + ) + cost = 60 + containertype = /obj/structure/closet/crate + containername = "Plushies crate" \ No newline at end of file diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index d4fa56d495..bbecbe5f97 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -282,6 +282,7 @@ area/space/atmosalert() /area/shuttle/trade name = "\improper Trade Station" icon_state = "red" + dynamic_lighting = 0 /area/shuttle/trade/centcom name = "\improper Trade Shuttle CentCom" diff --git a/code/game/atoms_movable_vr.dm b/code/game/atoms_movable_vr.dm new file mode 100644 index 0000000000..d529122029 --- /dev/null +++ b/code/game/atoms_movable_vr.dm @@ -0,0 +1,2 @@ +/atom/movable/proc/Bump_vr(var/atom/A, yes) + return diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 77ee16063e..84cbb4d904 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -140,6 +140,7 @@ SpinAnimation() /obj/effect/meteor/Bump(atom/A) + if(attempt_vr(src,"Bump_vr",list(A))) return //VOREStation Edit - allows meteors to be deflected by baseball bats if(A) if(A.handle_meteor_impact(src)) // Used for special behaviour when getting hit specifically by a meteor, like a shield. ram_turf(get_turf(A)) diff --git a/code/game/gamemodes/meteor/meteors_vr.dm b/code/game/gamemodes/meteor/meteors_vr.dm new file mode 100644 index 0000000000..6c24416b39 --- /dev/null +++ b/code/game/gamemodes/meteor/meteors_vr.dm @@ -0,0 +1,10 @@ +/obj/effect/meteor/Bump_vr(atom/A)//BATTER UP + if(istype(A, /mob/living/carbon)) + var/mob/living/carbon/batter = A + var/obj/item/I = batter.get_active_hand() + if(!batter.stat && istype(I, /obj/item/weapon/material/twohanded/baseballbat)) + batter.do_attack_animation(src) + batter.visible_message("[batter] deflects [src] with [I]]! Home run!", "You deflect [src] with [I]! Home run!") + walk_away(src, batter, 100, 1) + return TRUE + return diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index 92004f9afe..84d00eff04 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -1,6 +1,7 @@ /obj/machinery/portable_atmospherics name = "atmoalter" use_power = 0 + layer = OBJ_LAYER // These are mobile, best not be under everything. var/datum/gas_mixture/air_contents = new var/obj/machinery/atmospherics/portables_connector/connected_port diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 2f0fce2bd3..bdf4e95fe0 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -271,6 +271,8 @@ /obj/machinery/computer/arcade/battle/emag_act(var/charges, var/mob/user) if(!emagged) + to_chat(user, span("notice","You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Hyper-Lethal Mode.")) + temp = "If you die in the game, you die for real!" player_hp = 30 player_mp = 10 @@ -399,18 +401,18 @@ dat += "
You ran out of food and starved." if(emagged) user.nutrition = 0 //yeah you pretty hongry - user << "Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor." + to_chat(user, span("danger", "Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor.")) if(fuel <= 0) dat += "
You ran out of fuel, and drift, slowly, into a star." if(emagged) var/mob/living/M = user M.adjust_fire_stacks(5) - M.IgniteMob() //flew into a star, so you're on fire - user << "You feel an immense wave of heat emanate from \the [src]. Your skin bursts into flames." + M.IgniteMob() //flew into a star, so you're on fire + to_chat(user,span("danger", "You feel an immense wave of heat emanate from \the [src]. Your skin bursts into flames.")) dat += "

OK...

" if(emagged) - user << "You're never going to make it to Orion..." + to_chat(user, span("danger", "You're never going to make it to Orion...")) user.death() emagged = 0 //removes the emagged status after you lose gameStatus = ORION_STATUS_START @@ -475,20 +477,20 @@ switch(event) if(ORION_TRAIL_RAIDERS) if(prob(50)) - usr << "You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?" + to_chat(usr, span("warning", "You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?")) M.hallucination += 30 else - usr << "Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there..." + to_chat(usr, span("danger", "Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there...")) M.take_organ_damage(25) if(ORION_TRAIL_ILLNESS) var/severity = rand(1,3) //pray to RNGesus. PRAY, PIGS if(severity == 1) - M << "You suddenly feel slightly nauseous." //got off lucky + to_chat(M, span("warning", "You suddenly feel slightly nauseous.")) //got off lucky if(severity == 2) - usr << "You suddenly feel extremely nauseous and hunch over until it passes." + to_chat(usr, span("warning", "You suddenly feel extremely nauseous and hunch over until it passes.")) M.Stun(3) if(severity >= 3) //you didn't pray hard enough - M << "An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit." + to_chat(M, span("warning", "An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit.")) spawn(30) if(istype(M,/mob/living/carbon/human)) var/mob/living/carbon/human/H = M @@ -499,12 +501,12 @@ src.visible_message("A sudden gust of powerful wind slams \the [M] into the floor!", "You hear a large fwooshing sound, followed by a bang.") M.take_organ_damage(15) else - M << "A violent gale blows past you, and you barely manage to stay standing!" + to_chat(M, span("warning", "A violent gale blows past you, and you barely manage to stay standing!")) if(ORION_TRAIL_COLLISION) //by far the most damaging event if(prob(90) && !hull) var/turf/simulated/floor/F = src.loc F.ChangeTurf(/turf/space) - src.visible_message("Something slams into the floor around \the [src], exposing it to space!", "You hear something crack and break.") + src.visible_message(span("danger", "Something slams into the floor around \the [src], exposing it to space!"), "You hear something crack and break.") else src.visible_message("Something slams into the floor around \the [src] - luckily, it didn't get through!", "You hear something crack.") if(ORION_TRAIL_MALFUNCTION) @@ -573,9 +575,9 @@ event() if(emagged) //has to be here because otherwise it doesn't work src.show_message("\The [src] states, 'YOU ARE EXPERIENCING A BLACKHOLE. BE TERRIFIED.","You hear something say, 'YOU ARE EXPERIENCING A BLACKHOLE. BE TERRFIED'") - usr << "Something draws you closer and closer to the machine." + to_chat(usr, span("warning", "Something draws you closer and closer to the machine.")) sleep(10) - usr << "This is really starting to hurt!" + to_chat(usr, span("danger", "This is really starting to hurt!")) var i; //spawning a literal blackhole would be fun, but a bit disruptive. for(i=0;i<4;i++) var/mob/living/L = usr @@ -1001,12 +1003,12 @@ /obj/machinery/computer/arcade/orion_trail/emag_act(mob/user) if(!emagged) - user << "You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode." + to_chat(user, span("notice", "You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode.")) name = "The Orion Trail: Realism Edition" desc = "Learn how our ancestors got to Orion, and try not to die in the process!" newgame() emagged = 1 - + return 1 /obj/item/weapon/orion_ship name = "model settler ship" @@ -1021,9 +1023,9 @@ if(!(in_range(user, src))) return if(!active) - user << "There's a little switch on the bottom. It's flipped down." + to_chat(user, span("notice", "There's a little switch on the bottom. It's flipped down.")) else - user << "There's a little switch on the bottom. It's flipped up." + to_chat(user, span("notice", "There's a little switch on the bottom. It's flipped up.")) /obj/item/weapon/orion_ship/attack_self(mob/user) if(active) @@ -1032,17 +1034,17 @@ message_admins("[key_name_admin(usr)] primed an explosive Orion ship for detonation.") log_game("[key_name(usr)] primed an explosive Orion ship for detonation.") - user << "You flip the switch on the underside of [src]." + to_chat(user, span("warning", "You flip the switch on the underside of [src].")) active = 1 - src.visible_message("[src] softly beeps and whirs to life!") + src.visible_message(span("notice", "[src] softly beeps and whirs to life!")) src.audible_message("\The [src] says, 'This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.'") sleep(20) - src.visible_message("[src] begins to vibrate...") + src.visible_message(span("warning", "[src] begins to vibrate...")) src.audible_message("\The [src] says, 'Uh, Port? Having some issues with our reactor, could you check it out? Over.'") sleep(30) src.audible_message("\The [src] says, 'Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-'") sleep(3.6) - src.visible_message("[src] explodes!") + src.visible_message(span("danger", "[src] explodes!")) explosion(src.loc, 1,2,4) qdel(src) diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index 5ce605afcc..b9bd4a6855 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -935,20 +935,11 @@ obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob) /obj/machinery/newscaster/proc/scan_user(mob/living/user as mob) if(istype(user,/mob/living/carbon/human)) //User is a human var/mob/living/carbon/human/human_user = user - if(human_user.wear_id) //Newscaster scans you - if(istype(human_user.wear_id, /obj/item/device/pda)) //autorecognition, woo! - var/obj/item/device/pda/P = human_user.wear_id - if(P.id) - scanned_user = GetNameAndAssignmentFromId(P.id) - else - scanned_user = "Unknown" - else if(istype(human_user.wear_id, /obj/item/weapon/card/id)) - var/obj/item/weapon/card/id/ID = human_user.wear_id - scanned_user = GetNameAndAssignmentFromId(ID) - else - scanned_user ="Unknown" + var/obj/item/weapon/card/id/I = human_user.GetIdCard() + if(I) + scanned_user = GetNameAndAssignmentFromId(I) else - scanned_user ="Unknown" + scanned_user = "Unknown" else var/mob/living/silicon/ai_user = user scanned_user = "[ai_user.name] ([ai_user.job])" diff --git a/code/game/machinery/painter_vr.dm b/code/game/machinery/painter_vr.dm new file mode 100644 index 0000000000..4130194012 --- /dev/null +++ b/code/game/machinery/painter_vr.dm @@ -0,0 +1,109 @@ +/obj/machinery/gear_painter + name = "Color Mate" + desc = "A machine to give your apparel a fresh new color! Recommended to use with white items for best results." + icon = 'icons/obj/vending_vr.dmi' + icon_state = "colormate" + density = 1 + anchored = 1 + var/list/processing = list() + var/activecolor = "#FFFFFF" + var/list/allowed_types = list( + /obj/item/clothing, + /obj/item/weapon/storage/backpack, + /obj/item/weapon/storage/belt + ) + +/obj/machinery/gear_painter/update_icon() + if(panel_open) + icon_state = "colormate_open" + else if(inoperable()) + icon_state = "colormate_off" + else if(processing.len) + icon_state = "colormate_active" + else + icon_state = "colormate" + +/obj/machinery/gear_painter/Destroy() + for(var/atom/movable/O in processing) + O.forceMove(drop_location()) + processing.Cut() + return ..() + +/obj/machinery/gear_painter/attackby(obj/item/W as obj, mob/user as mob) + if(processing.len) + to_chat(user, "The machine is already loaded.") + return + if(default_deconstruction_screwdriver(user, W)) + return + if(default_deconstruction_crowbar(user, W)) + return + if(default_unfasten_wrench(user, W, 40)) + return + + if(is_type_in_list(W, allowed_types) && !inoperable()) + user.visible_message("[user] inserts \the [W] into the Color Mate receptable.") + user.drop_from_inventory(W) + W.forceMove(src) + processing |= W + else + ..() + update_icon() + +/obj/machinery/gear_painter/attack_hand(mob/user as mob) + if(..()) + return + interact(user) + +/obj/machinery/gear_painter/interact(mob/user as mob) + if(inoperable()) + return + user.set_machine(src) + var/dat = "Color Mate Control Panel
" + if(!processing.len) + dat += "No item inserted." + else + for(var/atom/movable/O in processing) + dat += "Item inserted: [O]
" + dat += "Select new color.
" + dat += "Color: " + dat += "Apply new color.

" + dat += "Remove paintjob.

" + dat += "Eject item.

" + + var/datum/browser/menu = new(user, "colormate","Color Mate Control Panel", 400, 600, src) + menu.set_content(dat) + menu.open() + return + +/obj/machinery/gear_painter/Topic(href, href_list) + if(..()) + return + + usr.set_machine(src) + add_fingerprint(usr) + + if(href_list["close"]) + return + + if(href_list["select"]) + var/newcolor = input(usr, "Choose a color.", "", activecolor) as color|null + if(newcolor) + activecolor = newcolor + + if(href_list["paint"]) + for(var/atom/movable/O in processing) + O.color = activecolor + playsound(src.loc, 'sound/effects/spray3.ogg', 50, 1) + + if(href_list["clear"]) + for(var/atom/movable/O in processing) + O.color = initial(O.color) + playsound(src.loc, 'sound/effects/spray3.ogg', 50, 1) + + if(href_list["eject"]) + for(var/atom/movable/O in processing) + O.forceMove(drop_location()) + processing.Cut() + + update_icon() + updateUsrDialog() diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index b66e311d49..13a966f71b 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -862,7 +862,7 @@ /obj/item/weapon/reagent_containers/glass/bottle/stoxin = 4,/obj/item/weapon/reagent_containers/glass/bottle/toxin = 4, /obj/item/weapon/reagent_containers/syringe/antiviral = 4,/obj/item/weapon/reagent_containers/syringe = 12, /obj/item/device/healthanalyzer = 5,/obj/item/weapon/reagent_containers/glass/beaker = 4, /obj/item/weapon/reagent_containers/dropper = 2, - /obj/item/stack/medical/advanced/bruise_pack = 3, /obj/item/stack/medical/advanced/ointment = 3, /obj/item/stack/medical/splint = 2, + /obj/item/stack/medical/advanced/bruise_pack = 6, /obj/item/stack/medical/advanced/ointment = 6, /obj/item/stack/medical/splint = 4, /obj/item/weapon/storage/pill_bottle/carbon = 2) contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 3,/obj/item/weapon/reagent_containers/pill/stox = 4,/obj/item/weapon/reagent_containers/pill/antitox = 6) idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 2ad51ca887..f1a99a6090 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -46,11 +46,11 @@ if(colour != "#FFFFFF" && shadeColour != "#000000") colour = "#FFFFFF" shadeColour = "#000000" - to_chat(usr,"You will now draw in white and black with this crayon.") + to_chat(user, "You will now draw in white and black with this crayon.") else colour = "#000000" shadeColour = "#FFFFFF" - to_chat(usr,"You will now draw in black and white with this crayon.") + to_chat(user, "You will now draw in black and white with this crayon.") return /obj/item/weapon/pen/crayon/rainbow @@ -72,22 +72,22 @@ switch(drawtype) if("letter") drawtype = input("Choose the letter.", "Crayon scribbles") in list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z") - to_chat(usr,"You start drawing a letter on the [target.name].") + to_chat(user, "You start drawing a letter on the [target.name].") if("graffiti") - to_chat(usr,"You start drawing graffiti on the [target.name].") + to_chat(user, "You start drawing graffiti on the [target.name].") if("rune") - to_chat(usr,"You start drawing a rune on the [target.name].") + to_chat(user, "You start drawing a rune on the [target.name].") if("arrow") drawtype = input("Choose the arrow.", "Crayon scribbles") in list("left", "right", "up", "down") - to_chat(usr,"You start drawing an arrow on the [target.name].") + to_chat(user, "You start drawing an arrow on the [target.name].") if(instant || do_after(user, 50)) new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype) - to_chat(usr,"You finish drawing.") + to_chat(user, "You finish drawing.") target.add_fingerprint(user) // Adds their fingerprints to the floor the crayon is drawn on. if(uses) uses-- if(!uses) - to_chat(usr,"You used up your crayon!") + to_chat(user, "You used up your crayon!") qdel(src) return @@ -158,11 +158,11 @@ if(colour != "#FFFFFF" && shadeColour != "#000000") colour = "#FFFFFF" shadeColour = "#000000" - to_chat(usr,"You will now draw in white and black with this marker.") + to_chat(user, "You will now draw in white and black with this marker.") else colour = "#000000" shadeColour = "#FFFFFF" - to_chat(usr,"You will now draw in black and white with this marker.") + to_chat(user, "You will now draw in black and white with this marker.") return /obj/item/weapon/pen/crayon/marker/rainbow @@ -179,7 +179,7 @@ /obj/item/weapon/pen/crayon/marker/attack(mob/M as mob, mob/user as mob) if(M == user) - to_chat(usr,"You take a bite of the marker and swallow it.") + to_chat(user, "You take a bite of the marker and swallow it.") user.nutrition += 1 user.reagents.add_reagent("marker_ink",6) if(uses) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index eb62b5d674..7a665c0038 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -111,6 +111,7 @@ user.visible_message("\The [user] places a bandaid over \a [W.desc] on [M]'s [affecting.name].", \ "You place a bandaid over \a [W.desc] on [M]'s [affecting.name]." ) W.bandage() + // W.disinfect() // VOREStation - Tech1 should not disinfect used++ affecting.update_damages() if(used == amount) diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 4d567019ae..cee423a627 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -138,18 +138,18 @@ /obj/item/weapon/storage/backpack/dufflebag/syndie name = "black dufflebag" - desc = "A large dufflebag for holding extra tactical supplies." + desc = "A large dufflebag for holding extra tactical supplies. This one appears to be made out of lighter material than usual." icon_state = "duffle_syndie" slowdown = 0 /obj/item/weapon/storage/backpack/dufflebag/syndie/med name = "medical dufflebag" - desc = "A large dufflebag for holding extra tactical medical supplies." + desc = "A large dufflebag for holding extra tactical medical supplies. This one appears to be made out of lighter material than usual." icon_state = "duffle_syndiemed" /obj/item/weapon/storage/backpack/dufflebag/syndie/ammo name = "ammunition dufflebag" - desc = "A large dufflebag for holding extra weapons ammunition and supplies." + desc = "A large dufflebag for holding extra weapons ammunition and supplies. This one appears to be made out of lighter material than usual." icon_state = "duffle_syndieammo" /obj/item/weapon/storage/backpack/dufflebag/captain @@ -417,4 +417,4 @@ else H.visible_message("\The [src] decides not to unpack \the [src]!", \ "You decide not to unpack \the [src]!") - return \ No newline at end of file + return diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 762720e390..c1de372dc1 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -107,10 +107,10 @@ if(istype(W,/obj/item/weapon/pen/crayon)) switch(W:colourName) if("mime") - to_chat(usr,"This crayon is too sad to be contained in this box.") + to_chat(user, "This crayon is too sad to be contained in this box.") return if("rainbow") - to_chat(usr,"This crayon is too powerful to be contained in this box.") + to_chat(user, "This crayon is too powerful to be contained in this box.") return ..() @@ -149,10 +149,10 @@ if(istype(W,/obj/item/weapon/pen/crayon/marker)) switch(W:colourName) if("mime") - to_chat(usr,"This marker is too depressing to be contained in this box.") + to_chat(user, "This marker is too depressing to be contained in this box.") return if("rainbow") - to_chat(usr,"This marker is too childish to be contained in this box.") + to_chat(user, "This marker is too childish to be contained in this box.") return ..() diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index 02be9fdfaf..cb376787ab 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -10,6 +10,9 @@ /obj/item/weapon/card, /obj/item/clothing/mask/smokable/cigarette/, /obj/item/device/flashlight/pen, + /obj/item/device/tape, + /obj/item/weapon/cartridge, + /obj/item/device/encryptionkey, /obj/item/seeds, /obj/item/stack/medical, /obj/item/weapon/coin, @@ -18,13 +21,21 @@ /obj/item/weapon/implanter, /obj/item/weapon/flame/lighter, /obj/item/weapon/flame/match, + /obj/item/weapon/forensics, + /obj/item/weapon/glass_extra, + /obj/item/weapon/haircomb, + /obj/item/weapon/hand, + /obj/item/weapon/key, + /obj/item/weapon/lipstick, /obj/item/weapon/paper, /obj/item/weapon/pen, /obj/item/weapon/photo, /obj/item/weapon/reagent_containers/dropper, + /obj/item/weapon/sample, /obj/item/weapon/screwdriver, /obj/item/weapon/stamp, - /obj/item/clothing/accessory/permit + /obj/item/clothing/accessory/permit, + /obj/item/clothing/accessory/badge ) slot_flags = SLOT_ID diff --git a/code/game/turfs/flooring/flooring_premade.dm b/code/game/turfs/flooring/flooring_premade.dm index a83e200b8d..73c4053bfa 100644 --- a/code/game/turfs/flooring/flooring_premade.dm +++ b/code/game/turfs/flooring/flooring_premade.dm @@ -68,12 +68,26 @@ icon_state = "wood" initial_flooring = /decl/flooring/wood +/turf/simulated/floor/wood/broken + icon_state = "wood_broken0" // This gets changed when spawned. + +/turf/simulated/floor/wood/broken/initialize() + break_tile() + return ..() + /turf/simulated/floor/wood/sif name = "alien wooden floor" icon = 'icons/turf/flooring/wood.dmi' icon_state = "sifwood" initial_flooring = /decl/flooring/wood/sif +/turf/simulated/floor/wood/sif/broken + icon_state = "sifwood_broken0" // This gets changed when spawned. + +/turf/simulated/floor/wood/sif/broken/initialize() + break_tile() + return ..() + /turf/simulated/floor/grass name = "grass patch" icon = 'icons/turf/flooring/grass.dmi' diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm index 3c4856cf00..dc49c0d893 100644 --- a/code/game/turfs/simulated/floor_types.dm +++ b/code/game/turfs/simulated/floor_types.dm @@ -105,6 +105,7 @@ if(landed_holder && !interior_corner) var/mutable_appearance/landed_on = new(landed_holder) landed_on.layer = FLOAT_LAYER //Not turf + landed_on.plane = FLOAT_PLANE //Not turf us.underlays = list(landed_on) appearance = us return diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index 12c00aa708..772c1886a8 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -6,6 +6,10 @@ var/list/admin_ranks = list() //list of all ranks with associated rights var/previous_rights = 0 + //Clear profile access + for(var/A in world.GetConfig("admin")) + world.SetConfig("APP/admin", A, null) + //load text from file var/list/Lines = file2list("config/admin_ranks.txt") diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index 4f0cba95c4..2d74b43433 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -23,6 +23,8 @@ var/list/admin_datums = list() rank = initial_rank rights = initial_rights admin_datums[ckey] = src + if(rights & R_DEBUG) //grant profile access + world.SetConfig("APP/admin", ckey, "role=admin") /datum/admins/proc/associate(client/C) if(istype(C)) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index d4b09bfc21..bf7952ea61 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -425,6 +425,10 @@ Traitors and the like can also be revived with the previous role mostly intact. //For logging later var/admin = key_name_admin(src) var/player_key = picked_client.key + //VOREStation Add - Needed for persistence + var/picked_ckey = picked_client.ckey + var/picked_slot = picked_client.prefs.default_slot + //VOREStation Add End var/mob/living/carbon/human/new_character var/spawnloc @@ -471,6 +475,12 @@ Traitors and the like can also be revived with the previous role mostly intact. antag_data.add_antagonist(new_character.mind) antag_data.place_mob(new_character) + //VOREStation Add - Required for persistence + if(new_character.mind) + new_character.mind.loaded_from_ckey = picked_ckey + new_character.mind.loaded_from_slot = picked_slot + //VOREStation Add End + //If desired, apply equipment. if(equipment) if(charjob) diff --git a/code/modules/client/preference_setup/loadout/loadout_gloves_vr.dm b/code/modules/client/preference_setup/loadout/loadout_gloves_vr.dm index 56ea7626b0..c6c51f5bbd 100644 --- a/code/modules/client/preference_setup/loadout/loadout_gloves_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_gloves_vr.dm @@ -1,10 +1,10 @@ /datum/gear/gloves/goldring display_name = "wedding ring, gold" - path = /obj/item/clothing/gloves/weddingring + path = /obj/item/clothing/gloves/ring/wedding /datum/gear/gloves/silverring display_name = "wedding ring, silver" - path = /obj/item/clothing/gloves/weddingring/silver + path = /obj/item/clothing/gloves/ring/wedding/silver /datum/gear/gloves/colored display_name = "gloves, colorable" diff --git a/code/modules/clothing/gloves/miscellaneous_vr.dm b/code/modules/clothing/gloves/miscellaneous_vr.dm index aee86bff27..9507f70046 100644 --- a/code/modules/clothing/gloves/miscellaneous_vr.dm +++ b/code/modules/clothing/gloves/miscellaneous_vr.dm @@ -1,20 +1,3 @@ -/obj/item/clothing/gloves/weddingring - name = "golden wedding ring" - desc = "For showing your devotion to another person. It has a golden glimmer to it." - icon = 'icons/obj/clothing/gloves_vr.dmi' - icon_state = "wedring_g" - item_state = "wedring_g" - var/partnername = "" - -/obj/item/clothing/gloves/weddingring/attack_self(mob/user) - partnername = copytext(sanitize(input(user, "Would you like to change the holoengraving on the ring?", "Name your betrothed", "Bae") as null|text),1,MAX_NAME_LEN) - name = "[initial(name)] - [partnername]" - -/obj/item/clothing/gloves/weddingring/silver - name = "silver wedding ring" - icon_state = "wedring_s" - item_state = "wedring_s" - /obj/item/clothing/gloves/color desc = "A pair of gloves, they don't look special in any way." item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white") diff --git a/code/modules/clothing/rings/rings_vr.dm b/code/modules/clothing/rings/rings_vr.dm new file mode 100644 index 0000000000..56c72cc7c5 --- /dev/null +++ b/code/modules/clothing/rings/rings_vr.dm @@ -0,0 +1,17 @@ +/obj/item/clothing/gloves/ring/wedding + name = "golden wedding ring" + desc = "For showing your devotion to another person. It has a golden glimmer to it." + icon = 'icons/obj/clothing/gloves_vr.dmi' + icon_state = "wedring_g" + item_state = "wedring_g" + var/partnername = "" + +/obj/item/clothing/gloves/ring/wedding/attack_self(mob/user) + partnername = copytext(sanitize(input(user, "Would you like to change the holoengraving on the ring?", "Name your spouse", "Bae") as null|text),1,MAX_NAME_LEN) + name = "[initial(name)] - [partnername]" + +/obj/item/clothing/gloves/ring/wedding/silver + name = "silver wedding ring" + desc = "For showing your devotion to another person. It has a silver glimmer to it." + icon_state = "wedring_s" + item_state = "wedring_s" diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index e50c563aed..67c82dcf79 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -26,7 +26,9 @@ if(icon_override) if("[tmp_icon_state]_tie" in icon_states(icon_override)) tmp_icon_state = "[tmp_icon_state]_tie" - inv_overlay = image(icon = INV_ACCESSORIES_DEF_ICON, icon_state = tmp_icon_state, dir = SOUTH) + inv_overlay = image(icon = icon_override, icon_state = tmp_icon_state, dir = SOUTH) + else + inv_overlay = image(icon = INV_ACCESSORIES_DEF_ICON, icon_state = tmp_icon_state, dir = SOUTH) return inv_overlay /obj/item/clothing/accessory/proc/get_mob_overlay() @@ -387,4 +389,4 @@ /obj/item/clothing/accessory/bracelet/material/glass/New(var/newloc) ..(newloc, "glass") - ..() \ No newline at end of file + ..() diff --git a/code/modules/maps/tg/map_template.dm b/code/modules/maps/tg/map_template.dm index 5ffc507888..c6f9503a0a 100644 --- a/code/modules/maps/tg/map_template.dm +++ b/code/modules/maps/tg/map_template.dm @@ -13,6 +13,7 @@ var/list/global/map_templates = list() /datum/map_template var/name = "Default Template Name" var/desc = "Some text should go here. Maybe." + var/template_group = null // If this is set, no more than one template in the same group will be spawned, per submap seeding. var/width = 0 var/height = 0 var/mappath = null @@ -67,7 +68,7 @@ var/list/global/map_templates = list() admin_notice("Initializing newly created atom(s) in submap.", R_DEBUG) SSatoms.InitializeAtoms(atoms) - + admin_notice("Initializing atmos pipenets and machinery in submap.", R_DEBUG) SSmachines.setup_atmos_machinery(atmos_machines) @@ -190,6 +191,7 @@ var/list/global/map_templates = list() CHECK_TICK var/list/loaded_submap_names = list() + var/list/template_groups_used = list() // Used to avoid spawning three seperate versions of the same PoI. // Now lets start choosing some. while(budget > 0 && overall_sanity > 0) @@ -210,6 +212,14 @@ var/list/global/map_templates = list() // Can we afford it? if(chosen_template.cost > budget) + priority_submaps -= chosen_template + potential_submaps -= chosen_template + continue + + // Did we already place down a very similar submap? + if(chosen_template.template_group && chosen_template.template_group in template_groups_used) + priority_submaps -= chosen_template + potential_submaps -= chosen_template continue // If so, try to place it. @@ -242,14 +252,21 @@ var/list/global/map_templates = list() CHECK_TICK + // For pretty maploading statistics. if(loaded_submap_names[chosen_template.name]) loaded_submap_names[chosen_template.name] += 1 else loaded_submap_names[chosen_template.name] = 1 + // To avoid two 'related' similar submaps existing at the same time. + if(chosen_template.template_group) + template_groups_used += chosen_template.template_group + + // To deduct the cost. if(chosen_template.cost >= 0) budget -= chosen_template.cost + // Remove the submap from our options. if(chosen_template in priority_submaps) // Always remove priority submaps. priority_submaps -= chosen_template else if(!chosen_template.allow_duplicates) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 93a293dec6..b7af06c595 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -399,12 +399,9 @@ var/modified = 0 var/perpname = "wot" - if(wear_id) - var/obj/item/weapon/card/id/I = wear_id.GetID() - if(I) - perpname = I.registered_name - else - perpname = name + var/obj/item/weapon/card/id/I = GetIdCard() + if(I) + perpname = I.registered_name else perpname = name @@ -438,14 +435,11 @@ var/perpname = "wot" var/read = 0 - if(wear_id) - if(istype(wear_id,/obj/item/weapon/card/id)) - perpname = wear_id:registered_name - else if(istype(wear_id,/obj/item/device/pda)) - var/obj/item/device/pda/tempPda = wear_id - perpname = tempPda.owner + var/obj/item/weapon/card/id/I = GetIdCard() + if(I) + perpname = I.registered_name else - perpname = src.name + perpname = name for (var/datum/data/record/E in data_core.general) if (E.fields["name"] == perpname) for (var/datum/data/record/R in data_core.security) @@ -468,14 +462,11 @@ var/perpname = "wot" var/read = 0 - if(wear_id) - if(istype(wear_id,/obj/item/weapon/card/id)) - perpname = wear_id:registered_name - else if(istype(wear_id,/obj/item/device/pda)) - var/obj/item/device/pda/tempPda = wear_id - perpname = tempPda.owner + var/obj/item/weapon/card/id/I = GetIdCard() + if(I) + perpname = I.registered_name else - perpname = src.name + perpname = name for (var/datum/data/record/E in data_core.general) if (E.fields["name"] == perpname) for (var/datum/data/record/R in data_core.security) @@ -496,14 +487,11 @@ if (href_list["secrecordadd"]) if(hasHUD(usr,"security")) var/perpname = "wot" - if(wear_id) - if(istype(wear_id,/obj/item/weapon/card/id)) - perpname = wear_id:registered_name - else if(istype(wear_id,/obj/item/device/pda)) - var/obj/item/device/pda/tempPda = wear_id - perpname = tempPda.owner + var/obj/item/weapon/card/id/I = GetIdCard() + if(I) + perpname = I.registered_name else - perpname = src.name + perpname = name for (var/datum/data/record/E in data_core.general) if (E.fields["name"] == perpname) for (var/datum/data/record/R in data_core.security) @@ -527,14 +515,11 @@ var/perpname = "wot" var/modified = 0 - if(wear_id) - if(istype(wear_id,/obj/item/weapon/card/id)) - perpname = wear_id:registered_name - else if(istype(wear_id,/obj/item/device/pda)) - var/obj/item/device/pda/tempPda = wear_id - perpname = tempPda.owner + var/obj/item/weapon/card/id/I = GetIdCard() + if(I) + perpname = I.registered_name else - perpname = src.name + perpname = name for (var/datum/data/record/E in data_core.general) if (E.fields["name"] == perpname) @@ -566,14 +551,11 @@ var/perpname = "wot" var/read = 0 - if(wear_id) - if(istype(wear_id,/obj/item/weapon/card/id)) - perpname = wear_id:registered_name - else if(istype(wear_id,/obj/item/device/pda)) - var/obj/item/device/pda/tempPda = wear_id - perpname = tempPda.owner + var/obj/item/weapon/card/id/I = GetIdCard() + if(I) + perpname = I.registered_name else - perpname = src.name + perpname = name for (var/datum/data/record/E in data_core.general) if (E.fields["name"] == perpname) for (var/datum/data/record/R in data_core.medical) @@ -597,14 +579,11 @@ var/perpname = "wot" var/read = 0 - if(wear_id) - if(istype(wear_id,/obj/item/weapon/card/id)) - perpname = wear_id:registered_name - else if(istype(wear_id,/obj/item/device/pda)) - var/obj/item/device/pda/tempPda = wear_id - perpname = tempPda.owner + var/obj/item/weapon/card/id/I = GetIdCard() + if(I) + perpname = I.registered_name else - perpname = src.name + perpname = name for (var/datum/data/record/E in data_core.general) if (E.fields["name"] == perpname) for (var/datum/data/record/R in data_core.medical) @@ -625,14 +604,11 @@ if (href_list["medrecordadd"]) if(hasHUD(usr,"medical")) var/perpname = "wot" - if(wear_id) - if(istype(wear_id,/obj/item/weapon/card/id)) - perpname = wear_id:registered_name - else if(istype(wear_id,/obj/item/device/pda)) - var/obj/item/device/pda/tempPda = wear_id - perpname = tempPda.owner + var/obj/item/weapon/card/id/I = GetIdCard() + if(I) + perpname = I.registered_name else - perpname = src.name + perpname = name for (var/datum/data/record/E in data_core.general) if (E.fields["name"] == perpname) for (var/datum/data/record/R in data_core.medical) @@ -1184,7 +1160,7 @@ if(!(gender in species.genders)) gender = species.genders[1] - icon_state = lowertext(species.name) + //icon_state = lowertext(species.name) //Necessary? species.create_organs(src) @@ -1615,12 +1591,9 @@ if(hasHUD(user,"security")) //Try to find their name var/perpname - if(wear_id) - var/obj/item/weapon/card/id/I = wear_id.GetID() - if(I) - perpname = I.registered_name - else - perpname = name + var/obj/item/weapon/card/id/I = GetIdCard() + if(I) + perpname = I.registered_name else perpname = name //Try to find their record diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm index 692100d15f..610315275a 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm @@ -54,7 +54,6 @@ humanform = H updatehealth() refactory = locate() in humanform.internal_organs - verbs |= /mob/living/proc/nano_set_size verbs |= /mob/living/proc/ventcrawl verbs |= /mob/living/proc/hide else diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm index 6240c4a44d..7b7304b846 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm @@ -196,10 +196,14 @@ var/substance = matstack.material.name var/actually_added = refactory.add_stored_material(substance,howmuch*matstack.perunit) matstack.use(Ceiling(actually_added/matstack.perunit)) - if(actually_added < howmuch) + if(actually_added && actually_added < howmuch) to_chat(src,"Your refactory module is now full, so only [actually_added] units were stored.") - else + visible_message(src,"[src] nibbles some of the [substance] right off the stack!") + else if(actually_added) to_chat(src,"You store [actually_added] units of [substance].") + visible_message(src,"[src] devours some of the [substance] right off the stack!") + else + to_chat(src,"You're completely capped out on [substance]!") //// // Blob Form @@ -247,26 +251,28 @@ //// // Change size //// -/mob/living/proc/nano_set_size() +/mob/living/carbon/human/proc/nano_set_size() set name = "Adjust Volume" set category = "Abilities" set hidden = TRUE + var/mob/living/user = temporary_form || src + var/obj/item/organ/internal/nano/refactory/refactory = nano_get_refactory() //Missing the organ that does this if(!istype(refactory)) - to_chat(src,"You don't have a working refactory module!") + to_chat(user,"You don't have a working refactory module!") return var/nagmessage = "Adjust your mass to be a size between 25 to 200%. Up-sizing consumes metal, downsizing returns metal." - var/new_size = input(src, nagmessage, "Pick a Size", size_multiplier*100) as num|null + var/new_size = input(user, nagmessage, "Pick a Size", user.size_multiplier*100) as num|null if(!new_size || !IsInRange(new_size,25,200)) return var/size_factor = new_size/100 //Will be: -1.75 for 200->25, and 1.75 for 25->200 - var/sizediff = size_factor - size_multiplier + var/sizediff = size_factor - user.size_multiplier //Negative if shrinking, positive if growing //Will be (PLSC*2)*-1.75 to 1.75 @@ -276,17 +282,19 @@ //Sizing up if(cost > 0) if(refactory.use_stored_material("steel",cost)) - resize(size_factor) + user.resize(size_factor) else - to_chat(src,"That size change would cost [cost] steel, which you don't have.") + to_chat(user,"That size change would cost [cost] steel, which you don't have.") return //Sizing down (or not at all) if(cost <= 0) cost = abs(cost) var/actually_added = refactory.add_stored_material("steel",cost) - resize(size_factor) + user.resize(size_factor) if(actually_added != cost) - to_chat(src,"Unfortunately, [cost-actually_added] steel was lost due to lack of storage space.") + to_chat(user,"Unfortunately, [cost-actually_added] steel was lost due to lack of storage space.") + + user.visible_message("Black mist swirls around [user] as they change size.") /// /// /// A helper to reuse /mob/living/proc/nano_get_refactory(obj/item/organ/internal/nano/refactory/R) @@ -350,7 +358,7 @@ ability_name = "Change Volume" desc = "Alter your size by consuming steel to produce additional nanites, or regain steel by reducing your size and reclaiming them." icon_state = "volume" - to_call = /mob/living/proc/nano_set_size + to_call = /mob/living/carbon/human/proc/nano_set_size /obj/effect/protean_ability/reform_limb ability_name = "Ref - Single Limb" diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm index 80d62c1946..a37a0d921d 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm @@ -86,12 +86,13 @@ /mob/living/carbon/human/proc/nano_partswap, /mob/living/carbon/human/proc/nano_metalnom, /mob/living/carbon/human/proc/nano_blobform, - /mob/living/proc/nano_set_size, + /mob/living/carbon/human/proc/nano_set_size, /mob/living/carbon/human/proc/nano_change_fitting, //These verbs are displayed normally, /mob/living/carbon/human/proc/shapeshifter_select_hair, /mob/living/carbon/human/proc/shapeshifter_select_hair_colors, /mob/living/carbon/human/proc/shapeshifter_select_colour, - /mob/living/carbon/human/proc/shapeshifter_select_eye_colour + /mob/living/carbon/human/proc/shapeshifter_select_eye_colour, + /mob/living/carbon/human/proc/shapeshifter_select_gender ) var/global/list/abilities = list() @@ -204,7 +205,7 @@ // Various modifiers /datum/modifier/protean stacks = MODIFIER_STACK_FORBID - var/material_use = 100 + var/material_use = 150 var/material_name = DEFAULT_WALL_MATERIAL /datum/modifier/protean/on_applied() @@ -217,7 +218,7 @@ if(holder.temporary_form) to_chat(holder.temporary_form,on_expired_text) -/datum/modifier/protean/tick() +/datum/modifier/protean/check_if_valid() //No origin set if(!istype(origin)) expire() @@ -238,7 +239,6 @@ on_created_text = "You feel yourself accelerate, the metallic hydrogen increasing your speed temporarily." on_expired_text = "Your refactory finishes consuming the metallic hydrogen, and you return to normal speed." - material_use = 100 material_name = "mhydrogen" slowdown = -1 @@ -250,7 +250,6 @@ on_created_text = "You feel yourself become nearly impervious to physical attacks as plasteel nanites are made." on_expired_text = "Your refactory finishes consuming the plasteel, and you return to your normal nanites." - material_use = 100 material_name = "plasteel" incoming_brute_damage_percent = 0.5 @@ -262,7 +261,6 @@ on_created_text = "You feel yourself become more reflective, able to resist heat and fire better for a time." on_expired_text = "Your refactory finishes consuming the diamond, and you return to your normal nanites." - material_use = 100 material_name = "diamond" incoming_fire_damage_percent = 0.2 @@ -274,7 +272,6 @@ on_created_text = "You feel new nanites being produced from your stockpile of steel, healing you slowly." on_expired_text = "Your steel supply has either run out, or is no longer needed, and your healing stops." - material_use = 100 material_name = "steel" /datum/modifier/protean/steel/tick() @@ -303,4 +300,4 @@ src.name += " ([new_name])" desc += "\nVALID THROUGH END OF: [time2text(world.timeofday, "Month") +" "+ num2text(text2num(time2text(world.timeofday, "YYYY"))+544)]\nREGISTRANT: [new_name]" -#undef DAM_SCALE_FACTOR \ No newline at end of file +#undef DAM_SCALE_FACTOR diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 27b6d55ba8..6425081167 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -6,11 +6,12 @@ if (transforming) return + handle_modifiers() //VOREStation Edit - Needs to be done even if in nullspace. if(!loc) return var/datum/gas_mixture/environment = loc.return_air() - handle_modifiers() // Do this early since it might affect other things later. + //handle_modifiers() // Do this early since it might affect other things later. //VOREStation Edit handle_light() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 5c256e235a..2e0db163de 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1060,7 +1060,7 @@ default behaviour is: if(lying != lying_prev) lying_prev = lying update_transform() - + return canmove // Adds overlays for specific modifiers. @@ -1088,10 +1088,10 @@ default behaviour is: /mob/living/proc/is_sentient() return TRUE -/* //VOREStation Edit. We have a better system in place. + /mob/living/update_transform() // First, get the correct size. - var/desired_scale = icon_scale + var/desired_scale = size_multiplier //VOREStation edit for(var/datum/modifier/M in modifiers) if(!isnull(M.icon_scale_percent)) desired_scale *= M.icon_scale_percent @@ -1101,8 +1101,8 @@ default behaviour is: M.Scale(desired_scale) M.Translate(0, 16*(desired_scale-1)) src.transform = M - animate(src, transform = M, time = 10) -*/ //VOREStation Edit + //animate(src, transform = M, time = 10) //VOREStation edit + // This handles setting the client's color variable, which makes everything look a specific color. // This proc is here so it can be called without needing to check if the client exists, or if the client relogs. diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 450580fbb4..4c6d9312c4 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -314,6 +314,12 @@ else ma.icon_state = initial(icon_state) + //VOREStation edit start + var/vore_icon_state = update_vore_icon() + if(vore_icon_state) + ma.icon_state = vore_icon_state + //VOREStation edit end + if(has_hands) if(r_hand_sprite) ma.overlays += r_hand_sprite diff --git a/code/modules/mob/living/simple_animal/simple_animal_vr.dm b/code/modules/mob/living/simple_animal/simple_animal_vr.dm index 90d899fa08..faae913d44 100644 --- a/code/modules/mob/living/simple_animal/simple_animal_vr.dm +++ b/code/modules/mob/living/simple_animal/simple_animal_vr.dm @@ -44,21 +44,21 @@ var/obj/belly/B = belly for(var/mob/living/M in B) new_fullness += M.size_multiplier - new_fullness = round(new_fullness, 1) // Because intervals of 0.25 are going to make sprite artists cry. + new_fullness = round(new_fullness, 1) // Because intervals of 0.25 are going to make sprite artists cry. vore_fullness = min(vore_capacity, new_fullness) -/mob/living/simple_animal/update_icon() - . = ..() // Call sideways "parent" to decide state - if(vore_active) - update_fullness() - if(!vore_fullness) - return - else if(icon_state == icon_living && (vore_icons & SA_ICON_LIVING)) - icon_state = "[icon_state]-[vore_fullness]" - else if(icon_state == icon_dead && (vore_icons & SA_ICON_DEAD)) - icon_state = "[icon_state]-[vore_fullness]" - else if(icon_state == icon_rest && (vore_icons & SA_ICON_REST)) - icon_state = "[icon_state]-[vore_fullness]" +/mob/living/simple_animal/proc/update_vore_icon() + if(!vore_active) + return 0 + update_fullness() + if(!vore_fullness) + return 0 + else if((stat == CONSCIOUS) && (!icon_rest || !resting || !incapacitated(INCAPACITATION_DISABLED)) && (vore_icons & SA_ICON_LIVING)) + return "[icon_living]-[vore_fullness]" + else if(stat >= DEAD && (vore_icons & SA_ICON_DEAD)) + return "[icon_dead]-[vore_fullness]" + else if(((stat == UNCONSCIOUS) || resting || incapacitated(INCAPACITATION_DISABLED) ) && icon_rest && (vore_icons & SA_ICON_REST)) + return "[icon_rest]-[vore_fullness]" /mob/living/simple_animal/proc/will_eat(var/mob/living/M) if(client) //You do this yourself, dick! diff --git a/code/modules/mob/living/simple_animal/slime/ai.dm b/code/modules/mob/living/simple_animal/slime/ai.dm index b35ebb6e03..3a8718c997 100644 --- a/code/modules/mob/living/simple_animal/slime/ai.dm +++ b/code/modules/mob/living/simple_animal/slime/ai.dm @@ -5,9 +5,46 @@ return ..() +/mob/living/simple_animal/slime/Found(mob/living/L) + if(isliving(L)) + if(SA_attackable(L)) + if(L.faction == faction && !attack_same) + if(ishuman(L)) + var/mob/living/carbon/human/H = L + if(istype(H.species, /datum/species/monkey)) // istype() is so they'll eat the alien monkeys too. + return H // Monkeys are always food. + else + return + + if(L in friends) + return + + if(istype(L, /mob/living/simple_animal/slime)) + var/mob/living/simple_animal/slime/buddy = L + if(buddy.slime_color == src.slime_color || discipline || unity || buddy.unity) + return // Don't hurt same colored slimes. + else + return buddy //do hurt others + + if(ishuman(L)) + var/mob/living/carbon/human/H = L + if(istype(H.species, /datum/species/monkey)) // istype() is so they'll eat the alien monkeys too. + return H // Monkeys are always food. + + if(issilicon(L) || isbot(L)) + if(discipline && !rabid) + return // We're a good slime. For now at least. + return + return + /mob/living/simple_animal/slime/special_target_check(mob/living/L) - if(L.faction == faction && !attack_same) - return FALSE + if(L.faction == faction && !attack_same && !istype(L, /mob/living/simple_animal/slime)) + if(ishuman(L)) + var/mob/living/carbon/human/H = L + if(istype(H.species, /datum/species/monkey)) // istype() is so they'll eat the alien monkeys too. + return TRUE // Monkeys are always food. + else + return FALSE if(L in friends) return FALSE diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index 21e7c62820..691b880574 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -112,6 +112,11 @@ if(!speaker.client) return + //Are all slimes being referred to? + var/mass_order = 0 + if(findtext(message, "slimes")) + mass_order = 1 + // Say hello back. if(findtext(message, "hello") || findtext(message, "hi") || findtext(message, "greetings")) delayed_say(pick("Hello...", "Hi..."), speaker) @@ -165,13 +170,14 @@ var/list/valid_names = splittext(L.name, " ") // Should output list("John", "Doe") as an example. for(var/line in valid_names) // Check each part of someone's name. if(findtext(message, lowertext(line))) // If part of someone's name is in the command, the slime targets them if allowed to. - if(special_target_check(L)) - delayed_say("Okay... I attack \the [L]...", speaker) - LoseFollow() - set_target(L) - return - else - delayed_say("No... I won't attack \the [L].", speaker) - return - // If we're here, it couldn't find anyone with that name. - delayed_say("No... I don't know who to attack...", speaker) + if(!(mass_order && line == "slime")) //don't think random other slimes are target + if(special_target_check(L)) + delayed_say("Okay... I attack \the [L]...", speaker) + LoseFollow() + set_target(L, 1) + return + else + delayed_say("No... I won't attack \the [L].", speaker) + return + // If we're here, it couldn't find anyone with that name. + delayed_say("No... I don't know who to attack...", speaker) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 93b1f0e9c6..219074dc6c 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -356,10 +356,13 @@ baby.mutation_chance = mutation_chance baby.power_charge = round(power_charge / 4) baby.resentment = max(resentment - 1, 0) - baby.discipline = max(discipline - 1, 0) - baby.obedience = max(obedience - 1, 0) - baby.unity = unity + if(!istype(baby, /mob/living/simple_animal/slime/light_pink)) + baby.discipline = max(discipline - 1, 0) + baby.obedience = max(obedience - 1, 0) + if(!istype(baby, /mob/living/simple_animal/slime/rainbow)) + baby.unity = unity baby.faction = faction + baby.attack_same = attack_same baby.friends = friends.Copy() if(rabid) baby.enrage() diff --git a/code/modules/mob/living/simple_animal/slime/subtypes.dm b/code/modules/mob/living/simple_animal/slime/subtypes.dm index 486c04866f..d30bdf0d7d 100644 --- a/code/modules/mob/living/simple_animal/slime/subtypes.dm +++ b/code/modules/mob/living/simple_animal/slime/subtypes.dm @@ -120,7 +120,7 @@ /mob/living/simple_animal/slime/dark_purple desc = "This slime produces ever-coveted phoron. Risky to handle but very much worth it." - color = "#CC23FF" + color = "#660088" slime_color = "dark purple" coretype = /obj/item/slime_extract/dark_purple reagent_injected = "phoron" diff --git a/code/modules/mob/living/simple_animal/vore/badboi.dm b/code/modules/mob/living/simple_animal/vore/badboi.dm index 11ede1c105..735d593891 100644 --- a/code/modules/mob/living/simple_animal/vore/badboi.dm +++ b/code/modules/mob/living/simple_animal/vore/badboi.dm @@ -51,7 +51,7 @@ vore_active = TRUE vore_capacity = 1 vore_pounce_chance = 30 - vore_icons = SA_ICON_LIVING + vore_icons = SA_ICON_LIVING | SA_ICON_REST vore_stomach_name = "fuel processor" vore_stomach_flavor = "You have ended up in the fuel processor of this corrupted machine. This place was definitely not designed with safety and comfort in mind. The heated and cramped surroundings oozing potent fluids all over your form, eager to do nothing less than breaking you apart to fuel its rampage for the next few days... hours... minutes? Oh dear..." diff --git a/code/modules/mob/living/simple_animal/vore/otie.dm b/code/modules/mob/living/simple_animal/vore/otie.dm index 26057fc87b..766ed7a4ae 100644 --- a/code/modules/mob/living/simple_animal/vore/otie.dm +++ b/code/modules/mob/living/simple_animal/vore/otie.dm @@ -56,7 +56,7 @@ vore_active = 1 vore_capacity = 1 vore_pounce_chance = 20 - vore_icons = SA_ICON_LIVING + vore_icons = SA_ICON_LIVING | SA_ICON_REST /mob/living/simple_animal/otie/feral //gets the pet2tame feature. starts out hostile tho so get gamblin' name = "mutated feral otie" diff --git a/code/modules/mob/living/simple_animal/vore/panther.dm b/code/modules/mob/living/simple_animal/vore/panther.dm index 3e723e68fc..454ef4d927 100644 --- a/code/modules/mob/living/simple_animal/vore/panther.dm +++ b/code/modules/mob/living/simple_animal/vore/panther.dm @@ -32,4 +32,4 @@ vore_active = 1 vore_capacity = 2 vore_pounce_chance = 10 - vore_icons = SA_ICON_LIVING + vore_icons = SA_ICON_LIVING | SA_ICON_REST diff --git a/code/modules/mob/living/simple_animal/vore/zz_vore_overrides.dm b/code/modules/mob/living/simple_animal/vore/zz_vore_overrides.dm index c71cc1d36e..a8ce697d64 100644 --- a/code/modules/mob/living/simple_animal/vore/zz_vore_overrides.dm +++ b/code/modules/mob/living/simple_animal/vore/zz_vore_overrides.dm @@ -65,7 +65,7 @@ icon_state = "queen_s" icon_living = "queen_s" icon_dead = "queen_dead" - vore_icons = SA_ICON_LIVING + vore_icons = SA_ICON_LIVING | SA_ICON_REST old_x = -16 old_y = 0 default_pixel_x = -16 @@ -77,6 +77,7 @@ /mob/living/simple_animal/hostile/alien/sentinel/praetorian icon = 'icons/mob/vore64x64.dmi' + vore_icons = SA_ICON_LIVING | SA_ICON_REST /mob/living/simple_animal/hostile/alien/queen/empress/mother vore_icons = 0 // NO VORE SPRITES @@ -226,11 +227,20 @@ /mob/living/simple_animal/hostile/carp/holodeck vore_icons = 0 // NO VORE SPRITES + vore_digest_chance = 0 + vore_absorb_chance = 0 + // Override stuff for holodeck carp to make them not digest when set to safe! +/mob/living/simple_animal/hostile/carp/holodeck/init_vore() + . = ..() + var/safe = (faction == "neutral") + for(var/belly in vore_organs) + var/obj/belly/B = belly + B.digest_mode = safe ? DM_HOLD : vore_default_mode + /mob/living/simple_animal/hostile/carp/holodeck/set_safety(var/safe) . = ..() for(var/belly in vore_organs) var/obj/belly/B = belly B.digest_mode = safe ? DM_HOLD : vore_default_mode - B.digestchance = safe ? 0 : vore_digest_chance - B.absorbchance = safe ? 0 : vore_absorb_chance + \ No newline at end of file diff --git a/code/modules/multiz/pipes.dm b/code/modules/multiz/pipes.dm index 8d03c8f862..e2796ccff8 100644 --- a/code/modules/multiz/pipes.dm +++ b/code/modules/multiz/pipes.dm @@ -201,7 +201,7 @@ obj/machinery/atmospherics/pipe/zpipe/up/scrubbers desc = "A scrubbers pipe segment to connect upwards." connect_types = CONNECT_TYPE_SCRUBBER piping_layer = PIPING_LAYER_SCRUBBER - layer = 2.38 + layer = PIPES_SCRUBBER_LAYER icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -211,7 +211,7 @@ obj/machinery/atmospherics/pipe/zpipe/up/supply desc = "A supply pipe segment to connect upwards." connect_types = CONNECT_TYPE_SUPPLY piping_layer = PIPING_LAYER_SUPPLY - layer = 2.39 + layer = PIPES_SUPPLY_LAYER icon_connect_type = "-supply" color = PIPE_COLOR_BLUE @@ -221,7 +221,7 @@ obj/machinery/atmospherics/pipe/zpipe/down/scrubbers desc = "A scrubbers pipe segment to connect downwards." connect_types = CONNECT_TYPE_SCRUBBER piping_layer = PIPING_LAYER_SCRUBBER - layer = 2.38 + layer = PIPES_SCRUBBER_LAYER icon_connect_type = "-scrubbers" color = PIPE_COLOR_RED @@ -231,6 +231,6 @@ obj/machinery/atmospherics/pipe/zpipe/down/supply desc = "A supply pipe segment to connect downwards." connect_types = CONNECT_TYPE_SUPPLY piping_layer = PIPING_LAYER_SUPPLY - layer = 2.39 + layer = PIPES_SUPPLY_LAYER icon_connect_type = "-supply" color = PIPE_COLOR_BLUE diff --git a/code/modules/nifsoft/software/01_vision.dm b/code/modules/nifsoft/software/01_vision.dm index 2ce33c1c88..b0006888bd 100644 --- a/code/modules/nifsoft/software/01_vision.dm +++ b/code/modules/nifsoft/software/01_vision.dm @@ -102,7 +102,7 @@ a_drain = 0.1 access = access_engine tick_flags = NIF_ACTIVETICK - planes_enabled = list(VIS_FULLBRIGHT) + planes_enabled = list(VIS_FULLBRIGHT, VIS_MESONS) vision_flags = (NIF_V_MESONS) incompatible_with = list(NIF_MATERIAL,NIF_THERMALS,NIF_NIGHTVIS) diff --git a/code/modules/organs/subtypes/diona.dm b/code/modules/organs/subtypes/diona.dm index cdb963e35b..c0e4e60c98 100644 --- a/code/modules/organs/subtypes/diona.dm +++ b/code/modules/organs/subtypes/diona.dm @@ -50,7 +50,7 @@ /obj/item/organ/external/diona/arm name = "left upper tendril" - organ_tag = "l_arm" + organ_tag = BP_L_ARM icon_name = "l_arm" max_damage = 30 min_broken_damage = 20 @@ -61,13 +61,13 @@ /obj/item/organ/external/diona/arm/right name = "right upper tendril" - organ_tag = "r_arm" + organ_tag = BP_R_ARM icon_name = "r_arm" body_part = ARM_RIGHT /obj/item/organ/external/diona/leg name = "left lower tendril" - organ_tag = "l_leg" + organ_tag = BP_L_LEG icon_name = "l_leg" max_damage = 30 min_broken_damage = 20 @@ -79,50 +79,50 @@ /obj/item/organ/external/diona/leg/right name = "right lower tendril" - organ_tag = "r_leg" + organ_tag = BP_R_LEG icon_name = "r_leg" body_part = LEG_RIGHT icon_position = RIGHT /obj/item/organ/external/diona/foot name = "left foot" - organ_tag = "l_foot" + organ_tag = BP_L_FOOT icon_name = "l_foot" max_damage = 25 min_broken_damage = 10 w_class = ITEMSIZE_SMALL body_part = FOOT_LEFT icon_position = LEFT - parent_organ = "l_leg" + parent_organ = BP_R_LEG can_stand = 1 /obj/item/organ/external/diona/foot/right name = "right foot" - organ_tag = "r_foot" + organ_tag = BP_R_FOOT icon_name = "r_foot" body_part = FOOT_RIGHT icon_position = RIGHT - parent_organ = "r_leg" + parent_organ = BP_R_LEG joint = "right ankle" amputation_point = "right ankle" /obj/item/organ/external/diona/hand name = "left grasper" - organ_tag = "l_hand" + organ_tag = BP_L_HAND icon_name = "l_hand" max_damage = 25 min_broken_damage = 15 w_class = ITEMSIZE_SMALL body_part = HAND_LEFT - parent_organ = "l_arm" + parent_organ = BP_L_ARM can_grasp = 1 /obj/item/organ/external/diona/hand/right name = "right grasper" - organ_tag = "r_hand" + organ_tag = BP_R_HAND icon_name = "r_hand" body_part = HAND_RIGHT - parent_organ = "r_arm" + parent_organ = BP_R_ARM //DIONA ORGANS. /obj/item/organ/external/diona/removed() @@ -157,26 +157,32 @@ /obj/item/organ/internal/diona/strata name = "neural strata" parent_organ = BP_TORSO + organ_tag = O_STRATA /obj/item/organ/internal/diona/bladder name = "gas bladder" parent_organ = BP_HEAD + organ_tag = O_GBLADDER /obj/item/organ/internal/diona/polyp name = "polyp segment" parent_organ = BP_GROIN + organ_tag = O_POLYP /obj/item/organ/internal/diona/ligament name = "anchoring ligament" parent_organ = BP_GROIN + organ_tag = O_ANCHOR /obj/item/organ/internal/diona/node name = "receptor node" parent_organ = BP_HEAD + organ_tag = O_RESPONSE /obj/item/organ/internal/diona/nutrients name = O_NUTRIENT parent_organ = BP_TORSO + organ_tag = O_NUTRIENT // These are different to the standard diona organs as they have a purpose in other // species (absorbing radiation and light respectively) @@ -191,8 +197,8 @@ /obj/item/organ/internal/diona/node name = "response node" - parent_organ = "head" - organ_tag = "receptor node" + parent_organ = BP_HEAD + organ_tag = O_RESPONSE icon = 'icons/mob/alien.dmi' icon_state = "claw" diff --git a/code/modules/organs/subtypes/standard.dm b/code/modules/organs/subtypes/standard.dm index 35cdc6a51a..449d7c5137 100644 --- a/code/modules/organs/subtypes/standard.dm +++ b/code/modules/organs/subtypes/standard.dm @@ -72,7 +72,7 @@ owner.custom_pain("A jolt of pain surges through your [name]!",1) /obj/item/organ/external/arm - organ_tag = "l_arm" + organ_tag = BP_L_ARM name = "left arm" icon_name = "l_arm" max_damage = 80 @@ -98,13 +98,13 @@ if (. >= 2) if(prob(.)) owner.custom_pain("A jolt of pain surges through your [name]!",1) - if(organ_tag == "l_arm") //Specific level 2 'feature + if(organ_tag == BP_L_ARM) //Specific level 2 'feature owner.drop_l_hand() - else if(organ_tag == "r_arm") + else if(organ_tag == BP_R_ARM) owner.drop_r_hand() /obj/item/organ/external/arm/right - organ_tag = "r_arm" + organ_tag = BP_R_ARM name = "right arm" icon_name = "r_arm" body_part = ARM_RIGHT @@ -112,7 +112,7 @@ amputation_point = "right shoulder" /obj/item/organ/external/leg - organ_tag = "l_leg" + organ_tag = BP_L_LEG name = "left leg" icon_name = "l_leg" max_damage = 80 @@ -142,7 +142,7 @@ owner.Weaken(5) /obj/item/organ/external/leg/right - organ_tag = "r_leg" + organ_tag = BP_R_LEG name = "right leg" icon_name = "r_leg" body_part = LEG_RIGHT @@ -151,7 +151,7 @@ amputation_point = "right hip" /obj/item/organ/external/foot - organ_tag = "l_foot" + organ_tag = BP_L_FOOT name = "left foot" icon_name = "l_foot" max_damage = 50 @@ -159,7 +159,7 @@ w_class = ITEMSIZE_SMALL body_part = FOOT_LEFT icon_position = LEFT - parent_organ = "l_leg" + parent_organ = BP_L_LEG joint = "left ankle" amputation_point = "left ankle" can_stand = 1 @@ -186,24 +186,24 @@ owner.Weaken(5) /obj/item/organ/external/foot/right - organ_tag = "r_foot" + organ_tag = BP_R_FOOT name = "right foot" icon_name = "r_foot" body_part = FOOT_RIGHT icon_position = RIGHT - parent_organ = "r_leg" + parent_organ = BP_R_LEG joint = "right ankle" amputation_point = "right ankle" /obj/item/organ/external/hand - organ_tag = "l_hand" + organ_tag = BP_L_HAND name = "left hand" icon_name = "l_hand" max_damage = 50 min_broken_damage = 15 w_class = ITEMSIZE_SMALL body_part = HAND_LEFT - parent_organ = "l_arm" + parent_organ = BP_L_ARM joint = "left wrist" amputation_point = "left wrist" can_grasp = 1 @@ -229,17 +229,17 @@ if (. >= 2) if(prob(.)) owner.custom_pain("A jolt of pain surges through your [name]!",1) - if(organ_tag == "l_hand") //Specific level 2 'feature + if(organ_tag == BP_L_HAND) //Specific level 2 'feature owner.drop_l_hand() - else if(organ_tag == "r_hand") + else if(organ_tag == BP_R_HAND) owner.drop_r_hand() /obj/item/organ/external/hand/right - organ_tag = "r_hand" + organ_tag = BP_R_HAND name = "right hand" icon_name = "r_hand" body_part = HAND_RIGHT - parent_organ = "r_arm" + parent_organ = BP_R_ARM joint = "right wrist" amputation_point = "right wrist" diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 853705abed..5ad1e727da 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -53,7 +53,8 @@ var/list/possible_cable_coil_colours = list( icon_state = "0-1" var/d1 = 0 var/d2 = 1 - layer = 2.44 //Just below unary stuff, which is at 2.45 and above pipes, which are at 2.4 + plane = PLATING_PLANE + layer = WIRES_LAYER color = COLOR_RED var/obj/machinery/power/breakerbox/breaker_box diff --git a/code/modules/power/cable_ender.dm b/code/modules/power/cable_ender.dm index 3276855271..d6975091ea 100644 --- a/code/modules/power/cable_ender.dm +++ b/code/modules/power/cable_ender.dm @@ -8,7 +8,8 @@ icon = 'icons/obj/power_cond_heavy.dmi' name = "large power cable" desc = "This cable is tough. It cannot be cut with simple hand tools." - layer = 2.39 //Just below pipes, which are at 2.4 + plane = PLATING_PLANE + layer = PIPES_LAYER - 0.05 //Just below pipes color = null unacidable = 1 var/id = null diff --git a/code/modules/power/cable_heavyduty.dm b/code/modules/power/cable_heavyduty.dm index 99c91a6b74..a286517965 100644 --- a/code/modules/power/cable_heavyduty.dm +++ b/code/modules/power/cable_heavyduty.dm @@ -7,7 +7,8 @@ icon = 'icons/obj/power_cond_heavy.dmi' name = "large power cable" desc = "This cable is tough. It cannot be cut with simple hand tools." - layer = 2.39 //Just below pipes, which are at 2.4 + plane = PLATING_PLANE + layer = PIPES_LAYER - 0.05 //Just below pipes color = null /obj/structure/cable/heavyduty/attackby(obj/item/W, mob/user) diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index 0e9cf95eb6..94cf0ab21e 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -50,6 +50,7 @@ /obj/item/ammo_magazine/s38/rubber name = "speedloader (.38 rubber)" + icon_state = "T38" ammo_type = /obj/item/ammo_casing/a38r /obj/item/ammo_magazine/s38/emp @@ -493,6 +494,23 @@ max_ammo = 9 multiple_sprites = 1 +/obj/item/ammo_magazine/s44 + name = "speedloader (.44)" + icon_state = "44" + ammo_type = /obj/item/ammo_casing/a44 + matter = list(DEFAULT_WALL_MATERIAL = 1260) //metal costs are very roughly based around 1 .45 casing = 75 metal + caliber = ".44" + max_ammo = 6 + multiple_sprites = 1 + +/obj/item/ammo_magazine/s44/empty + initial_ammo = 0 + +/obj/item/ammo_magazine/s44/rubber + name = "speedloader (.44 rubber)" + icon_state = "R44" + ammo_type = /obj/item/ammo_casing/a44r + ///////// 7.62mm ///////// /obj/item/ammo_magazine/m762 diff --git a/code/modules/projectiles/ammunition/rounds.dm b/code/modules/projectiles/ammunition/rounds.dm index 330e11d89b..028d1cac1e 100644 --- a/code/modules/projectiles/ammunition/rounds.dm +++ b/code/modules/projectiles/ammunition/rounds.dm @@ -59,6 +59,12 @@ caliber = ".44" projectile_type = /obj/item/projectile/bullet/pistol/strong +/obj/item/ammo_casing/a44r + icon_state = "r-casing" + desc = "A .44 rubber bullet casing." + caliber = ".44" + projectile_type = /obj/item/projectile/bullet/pistol/rubber/strong + /* * .75 (aka Gyrojet Rockets, aka admin abuse) */ diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index aa3faa7468..55eefade82 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -58,6 +58,7 @@ var/move_delay = 1 var/fire_sound = 'sound/weapons/Gunshot.ogg' var/fire_sound_text = "gunshot" + var/fire_anim = null var/recoil = 0 //screen shake var/silenced = 0 var/muzzle_flash = 3 @@ -492,7 +493,7 @@ if(!(target && target.loc)) target = targloc //pointblank = 0 - + var/target_for_log if(ismob(target)) target_for_log = target @@ -533,6 +534,9 @@ //called after successfully firing /obj/item/weapon/gun/proc/handle_post_fire(mob/user, atom/target, var/pointblank=0, var/reflex=0) + if(fire_anim) + flick(fire_anim, src) + if(silenced) if(reflex) user.visible_message( diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index b33cf11950..481530856f 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -118,7 +118,6 @@ obj/item/weapon/gun/projectile/revolver/detective45/verb/rename_gun() return 1 - // Blade Runner pistol. /obj/item/weapon/gun/projectile/revolver/deckard name = "\improper Deckard .38" @@ -259,3 +258,24 @@ obj/item/weapon/gun/projectile/revolver/detective45/verb/rename_gun() to_chat(user, "\The [src] has a secondary barrel loaded with \a [to_print]") else to_chat(user, "\The [src] has a secondary barrel that is empty.") + + +//Ported from Bay +/obj/item/weapon/gun/projectile/revolver/webley + name = "service revolver" + desc = "A rugged top break revolver based on the Webley Mk. VI model, with modern improvements. Uses .44 magnum rounds." + icon_state = "webley2" + item_state = "webley2" + caliber = ".44" + origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) + handle_casings = CYCLE_CASINGS + max_shells = 6 + ammo_type = /obj/item/ammo_casing/a44 + +/obj/item/weapon/gun/projectile/revolver/webley/auto + name = "autorevolver" + icon_state = "mosley" + desc = "A shiny Mosley Autococker automatic revolver, with black accents. Marketed as the 'Revolver for the Modern Era'. Uses .44 magnum rounds." + fire_delay = 5.7 //Autorevolver. Also synced with the animation + fire_anim = "mosley_fire" + origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2) \ No newline at end of file diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index d47e729898..36a93a89b0 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -147,6 +147,14 @@ fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg' damage = 60 +/obj/item/projectile/bullet/pistol/rubber/strong //"rubber" bullets for revolvers and matebas + fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg' + damage = 10 + agony = 60 + embed_chance = 0 + sharp = 0 + check_armour = "melee" + /obj/item/projectile/bullet/pistol/rubber //"rubber" bullets name = "rubber bullet" damage = 5 diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index fdae51e647..07c8429bfb 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -663,6 +663,7 @@ var/dpdir = 0 // bitmask of pipe directions dir = 0 // dir will contain dominant direction for junction pipes var/health = 10 // health points 0-10 + plane = PLATING_PLANE layer = DISPOSAL_LAYER // slightly lower than wires and other pipes var/base_icon_state // initial icon state on map var/sortType = "" diff --git a/code/modules/research/designs_vr.dm b/code/modules/research/designs_vr.dm index b2f21d58c4..de86ebf872 100644 --- a/code/modules/research/designs_vr.dm +++ b/code/modules/research/designs_vr.dm @@ -1,11 +1,3 @@ -/datum/design/excavationdrill - name = "Excavation Drill" - desc = "Advanced archaeological drill combining ultrasonic excitation and bluespace manipulation to provide extreme precision. The silver tip is adjustable from 1 to 30 cm." - id = "excavationdrill" - req_tech = list(TECH_MATERIAL = 4, TECH_POWER = 3, TECH_ENGINEERING = 3, TECH_BLUESPACE = 3) //They were never used before. Now they'll be used. Hopefully. - build_type = PROTOLATHE - materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 1000, "silver" = 1000) - build_path = /obj/item/weapon/pickaxe/excavationdrill /* Make language great again /datum/design/item/implant/language name = "Language implant" diff --git a/code/modules/vore/appearance/sprite_accessories_vr.dm b/code/modules/vore/appearance/sprite_accessories_vr.dm index ecc8dc8ef3..1c8b9c8f12 100644 --- a/code/modules/vore/appearance/sprite_accessories_vr.dm +++ b/code/modules/vore/appearance/sprite_accessories_vr.dm @@ -976,7 +976,8 @@ /datum/sprite_accessory/tail/special/seromitailfeathered name = "seromi tail w/ feathers" desc = "" - icon_state = "seromitail_feathers_s" + icon_state = "seromitail_s" + extra_overlay = "seromitail_feathers_s" do_colouration = 1 color_blend_mode = ICON_MULTIPLY diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 466380b828..44c392eb43 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -1448,24 +1448,27 @@ //Destination beacon vore checking var/atom/real_dest = dT - var/televored = FALSE //UR GONNA GET VORED var/atom/real_loc = destination.loc if(isbelly(real_loc)) real_dest = real_loc - televored = TRUE if(isliving(real_loc)) var/mob/living/L = real_loc if(L.vore_selected) real_dest = L.vore_selected - televored = TRUE else if(L.vore_organs.len) real_dest = pick(L.vore_organs) - televored = TRUE - //Televore fluff stuff - if(televored) - to_chat(target,"\The [src] teleports you right into \a [lowertext(real_dest.name)]!") + //Confirm televore + var/televored = FALSE + if(isbelly(real_dest)) + var/obj/belly/B = real_dest + if(!target.can_be_drop_prey && B.owner != user) + to_chat(target,"\The [src] narrowly avoids teleporting you right into \a [lowertext(real_dest.name)]!") + real_dest = dT //Nevermind! + else + televored = TRUE + to_chat(target,"\The [src] teleports you right into \a [lowertext(real_dest.name)]!") //Phase-out effect phase_out(target,get_turf(target)) @@ -1496,7 +1499,7 @@ ready = 1 update_icon() - logged_events["[world.time]"] = "[user] teleported [target] to [real_dest] [televored ? "(Belly: [lowertext(real_loc.name)])" : null]" + logged_events["[world.time]"] = "[user] teleported [target] to [real_dest] [televored ? "(Belly: [lowertext(real_dest.name)])" : null]" /obj/item/device/perfect_tele/proc/phase_out(var/mob/M,var/turf/T) diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm index 28f398ff99..9e957955b8 100644 --- a/code/modules/vore/resizing/resize_vr.dm +++ b/code/modules/vore/resizing/resize_vr.dm @@ -64,7 +64,7 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2 /mob/living/proc/resize(var/new_size, var/animate = TRUE) if(size_multiplier == new_size) return 1 - + size_multiplier = new_size //Change size_multiplier so that other items can interact with them if(animate) var/change = new_size - size_multiplier diff --git a/code/modules/xenoarcheaology/tools/tools_pickaxe_vr.dm b/code/modules/xenoarcheaology/tools/tools_pickaxe_vr.dm index ffdb7dc2c9..3a1ff22b1c 100644 --- a/code/modules/xenoarcheaology/tools/tools_pickaxe_vr.dm +++ b/code/modules/xenoarcheaology/tools/tools_pickaxe_vr.dm @@ -21,47 +21,3 @@ /obj/item/weapon/pickaxe/hand icon = 'icons/obj/xenoarchaeology_vr.dmi' - -/obj/item/weapon/pickaxe/excavationdrill - name = "excavation drill" - icon = 'icons/obj/xenoarchaeology_vr.dmi' - icon_state = "excavationdrill0" - item_state = "syringe_0" - excavation_amount = 15 - digspeed = 30 - desc = "Advanced archaeological drill combining ultrasonic excitation and bluespace manipulation to provide extreme precision. The diamond tip is adjustable from 1 to 30 cms." - drill_sound = 'sound/weapons/thudswoosh.ogg' - drill_verb = "drilling" - force = 15.0 - w_class = ITEMSIZE_SMALL - attack_verb = list("drilled") - hitsound = 'sound/weapons/circsawhit.ogg' - -/obj/item/weapon/pickaxe/excavationdrill/attack_self(mob/user as mob) - var/depth = input("Put the desired depth (1-30 centimeters).", "Set Depth", 30) as num - if(depth>30 || depth<1) - user << "Invalid depth." - return - excavation_amount = depth - user << "You set the depth to [depth]cm." - if (depth<4) - icon_state = "excavationdrill0" - else if (depth >=4 && depth <8) - icon_state = "excavationdrill1" - else if (depth >=8 && depth <12) - icon_state = "excavationdrill2" - else if (depth >=12 && depth <16) - icon_state = "excavationdrill3" - else if (depth >=16 && depth <20) - icon_state = "excavationdrill4" - else if (depth >=20 && depth <24) - icon_state = "excavationdrill5" - else if (depth >=24 && depth <28) - icon_state = "excavationdrill6" - else - icon_state = "excavationdrill7" - -/obj/item/weapon/pickaxe/excavationdrill/examine(mob/user) - ..() - var/depth = excavation_amount - user << "It is currently set at [depth]cms." diff --git a/config/custom_items.txt b/config/custom_items.txt index 54b20862a4..d7c2e13450 100644 --- a/config/custom_items.txt +++ b/config/custom_items.txt @@ -734,12 +734,6 @@ character_name: Tasy Ruffles item_path: /obj/item/device/pda/clown } -{ -ckey: silvertalismen -character_name: Camilla -item_path: /obj/item/toy/plushie/farwa -} - { ckey: Swat43 character_name: Fortune Bloise diff --git a/html/changelog.html b/html/changelog.html index 3796656cc9..e81411a62c 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -53,6 +53,46 @@ -->
+

01 April 2018

+

Anewbe updated:

+ +

Cameron653 updated:

+ +

Heroman3003 updated:

+ +

MistyLuminescence updated:

+ +

Woodrat updated:

+ +

battlefieldCommander updated:

+ +

15 March 2018

Anewbe updated: