# Conflicts:
#	code/modules/clothing/gloves/miscellaneous_vr.dm
#	code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm
#	code/modules/vore/appearance/sprite_accessories_vr.dm
#	code/modules/vore/eating/bellymodes_vr.dm
#	config/custom_items.txt
#	config/example/motd.txt
#	icons/mob/human_face_or_vr.dmi
#	icons/mob/vore/taurs_vr.dmi
#	vorestation.dme
This commit is contained in:
Repede
2018-04-20 09:03:58 -04:00
458 changed files with 11146 additions and 5161 deletions

View File

@@ -17,7 +17,8 @@ Pipelines + Other Objects -> Pipe network
var/nodealert = 0 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 var/power_rating //the maximum amount of power the machine can use to do work, affects how powerful the machine is, in Watts
layer = 2.4 //under wires with their 2.44 layer = ATMOS_LAYER
plane = PLATING_PLANE
var/pipe_flags = PIPING_DEFAULT_LAYER_ONLY // Allow other layers by exception basis. var/pipe_flags = PIPING_DEFAULT_LAYER_ONLY // Allow other layers by exception basis.
var/connect_types = CONNECT_TYPE_REGULAR var/connect_types = CONNECT_TYPE_REGULAR
@@ -201,12 +202,12 @@ Pipelines + Other Objects -> Pipe network
if(PIPING_LAYER_SCRUBBER) if(PIPING_LAYER_SCRUBBER)
icon_state = "[icon_state]-scrubbers" icon_state = "[icon_state]-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER connect_types = CONNECT_TYPE_SCRUBBER
layer = 2.38 layer = PIPES_SCRUBBER_LAYER
icon_connect_type = "-scrubbers" icon_connect_type = "-scrubbers"
if(PIPING_LAYER_SUPPLY) if(PIPING_LAYER_SUPPLY)
icon_state = "[icon_state]-supply" icon_state = "[icon_state]-supply"
connect_types = CONNECT_TYPE_SUPPLY connect_types = CONNECT_TYPE_SUPPLY
layer = 2.39 layer = PIPES_SUPPLY_LAYER
icon_connect_type = "-supply" icon_connect_type = "-supply"
if(pipe_flags & PIPING_ALL_LAYER) if(pipe_flags & PIPING_ALL_LAYER)
connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER

View File

@@ -6,7 +6,6 @@
icon = 'icons/atmos/injector.dmi' icon = 'icons/atmos/injector.dmi'
icon_state = "map_injector" icon_state = "map_injector"
pipe_state = "injector" pipe_state = "injector"
layer = 3
name = "air injector" name = "air injector"
desc = "Passively injects air into its surroundings. Has a valve attached to it that can control flow rate." desc = "Passively injects air into its surroundings. Has a valve attached to it that can control flow rate."

View File

@@ -34,7 +34,8 @@ obj/machinery/atmospherics/pipe/mains_component
obj/machinery/atmospherics/mains_pipe obj/machinery/atmospherics/mains_pipe
icon = 'icons/obj/atmospherics/mainspipe.dmi' icon = 'icons/obj/atmospherics/mainspipe.dmi'
layer = 2.4 //under wires with their 2.5 layer = PIPES_LAYER
plane = PLATING_PLANE
var/volume = 0 var/volume = 0

View File

@@ -7,7 +7,6 @@
icon = 'icons/atmos/pipes.dmi' icon = 'icons/atmos/pipes.dmi'
icon_state = "" icon_state = ""
level = 2 level = 2
layer = 2.4 //under wires with their 2.44
volume = 35 volume = 35
@@ -80,7 +79,7 @@
icon_state = "cap-scrubbers" icon_state = "cap-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER connect_types = CONNECT_TYPE_SCRUBBER
piping_layer = PIPING_LAYER_SCRUBBER piping_layer = PIPING_LAYER_SCRUBBER
layer = 2.38 layer = PIPES_SCRUBBER_LAYER
icon_connect_type = "-scrubbers" icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED color = PIPE_COLOR_RED
@@ -90,7 +89,7 @@
icon_state = "cap-supply" icon_state = "cap-supply"
connect_types = CONNECT_TYPE_SUPPLY connect_types = CONNECT_TYPE_SUPPLY
piping_layer = PIPING_LAYER_SUPPLY piping_layer = PIPING_LAYER_SUPPLY
layer = 2.39 layer = PIPES_SUPPLY_LAYER
icon_connect_type = "-supply" icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE color = PIPE_COLOR_BLUE
@@ -105,7 +104,7 @@
icon_state = "cap-f-scrubbers" icon_state = "cap-f-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER connect_types = CONNECT_TYPE_SCRUBBER
piping_layer = PIPING_LAYER_SCRUBBER piping_layer = PIPING_LAYER_SCRUBBER
layer = 2.38 layer = PIPES_SCRUBBER_LAYER
icon_connect_type = "-scrubbers" icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED color = PIPE_COLOR_RED
@@ -115,6 +114,6 @@
icon_state = "cap-f-supply" icon_state = "cap-f-supply"
connect_types = CONNECT_TYPE_SUPPLY connect_types = CONNECT_TYPE_SUPPLY
piping_layer = PIPING_LAYER_SUPPLY piping_layer = PIPING_LAYER_SUPPLY
layer = 2.39 layer = PIPES_SUPPLY_LAYER
icon_connect_type = "-supply" icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE color = PIPE_COLOR_BLUE

View File

@@ -12,7 +12,7 @@
construction_type = /obj/item/pipe/binary/bendable construction_type = /obj/item/pipe/binary/bendable
pipe_state = "he" pipe_state = "he"
layer = 2.41 layer = PIPES_HE_LAYER
var/initialize_directions_he var/initialize_directions_he
var/surface = 2 //surface area in m^2 var/surface = 2 //surface area in m^2
var/icon_temperature = T20C //stop small changes in temperature causing an icon refresh var/icon_temperature = T20C //stop small changes in temperature causing an icon refresh

View File

@@ -18,7 +18,6 @@
var/obj/machinery/atmospherics/node3 var/obj/machinery/atmospherics/node3
level = 1 level = 1
layer = 2.4 //under wires with their 2.44
/obj/machinery/atmospherics/pipe/manifold/New() /obj/machinery/atmospherics/pipe/manifold/New()
..() ..()
@@ -166,7 +165,7 @@
icon_state = "map-scrubbers" icon_state = "map-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER connect_types = CONNECT_TYPE_SCRUBBER
piping_layer = PIPING_LAYER_SCRUBBER piping_layer = PIPING_LAYER_SCRUBBER
layer = 2.38 layer = PIPES_SCRUBBER_LAYER
icon_connect_type = "-scrubbers" icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED color = PIPE_COLOR_RED
@@ -176,7 +175,7 @@
icon_state = "map-supply" icon_state = "map-supply"
connect_types = CONNECT_TYPE_SUPPLY connect_types = CONNECT_TYPE_SUPPLY
piping_layer = PIPING_LAYER_SUPPLY piping_layer = PIPING_LAYER_SUPPLY
layer = 2.39 layer = PIPES_SUPPLY_LAYER
icon_connect_type = "-supply" icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE color = PIPE_COLOR_BLUE
@@ -212,7 +211,7 @@
icon_state = "map-scrubbers" icon_state = "map-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER connect_types = CONNECT_TYPE_SCRUBBER
piping_layer = PIPING_LAYER_SCRUBBER piping_layer = PIPING_LAYER_SCRUBBER
layer = 2.38 layer = PIPES_SCRUBBER_LAYER
icon_connect_type = "-scrubbers" icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED color = PIPE_COLOR_RED
@@ -222,7 +221,7 @@
icon_state = "map-supply" icon_state = "map-supply"
connect_types = CONNECT_TYPE_SUPPLY connect_types = CONNECT_TYPE_SUPPLY
piping_layer = PIPING_LAYER_SUPPLY piping_layer = PIPING_LAYER_SUPPLY
layer = 2.39 layer = PIPES_SUPPLY_LAYER
icon_connect_type = "-supply" icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE color = PIPE_COLOR_BLUE

View File

@@ -19,7 +19,6 @@
var/obj/machinery/atmospherics/node4 var/obj/machinery/atmospherics/node4
level = 1 level = 1
layer = 2.4 //under wires with their 2.44
/obj/machinery/atmospherics/pipe/manifold4w/New() /obj/machinery/atmospherics/pipe/manifold4w/New()
..() ..()
@@ -168,7 +167,7 @@
icon_state = "map_4way-scrubbers" icon_state = "map_4way-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER connect_types = CONNECT_TYPE_SCRUBBER
piping_layer = PIPING_LAYER_SCRUBBER piping_layer = PIPING_LAYER_SCRUBBER
layer = 2.38 layer = PIPES_SCRUBBER_LAYER
icon_connect_type = "-scrubbers" icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED color = PIPE_COLOR_RED
@@ -178,7 +177,7 @@
icon_state = "map_4way-supply" icon_state = "map_4way-supply"
connect_types = CONNECT_TYPE_SUPPLY connect_types = CONNECT_TYPE_SUPPLY
piping_layer = PIPING_LAYER_SUPPLY piping_layer = PIPING_LAYER_SUPPLY
layer = 2.39 layer = PIPES_SUPPLY_LAYER
icon_connect_type = "-supply" icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE color = PIPE_COLOR_BLUE
@@ -214,7 +213,7 @@
icon_state = "map_4way-scrubbers" icon_state = "map_4way-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER connect_types = CONNECT_TYPE_SCRUBBER
piping_layer = PIPING_LAYER_SCRUBBER piping_layer = PIPING_LAYER_SCRUBBER
layer = 2.38 layer = PIPES_SCRUBBER_LAYER
icon_connect_type = "-scrubbers" icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED color = PIPE_COLOR_RED
@@ -224,7 +223,7 @@
icon_state = "map_4way-supply" icon_state = "map_4way-supply"
connect_types = CONNECT_TYPE_SUPPLY connect_types = CONNECT_TYPE_SUPPLY
piping_layer = PIPING_LAYER_SUPPLY piping_layer = PIPING_LAYER_SUPPLY
layer = 2.39 layer = PIPES_SUPPLY_LAYER
icon_connect_type = "-supply" icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE color = PIPE_COLOR_BLUE

View File

@@ -7,7 +7,7 @@
var/datum/pipeline/parent var/datum/pipeline/parent
var/volume = 0 var/volume = 0
layer = 2.4 //under wires with their 2.44 layer = PIPES_LAYER
use_power = 0 use_power = 0
pipe_flags = 0 // Does not have PIPING_DEFAULT_LAYER_ONLY flag. pipe_flags = 0 // Does not have PIPING_DEFAULT_LAYER_ONLY flag.

View File

@@ -173,7 +173,7 @@
icon_state = "intact-scrubbers" icon_state = "intact-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER connect_types = CONNECT_TYPE_SCRUBBER
piping_layer = PIPING_LAYER_SCRUBBER piping_layer = PIPING_LAYER_SCRUBBER
layer = 2.38 layer = PIPES_SCRUBBER_LAYER
icon_connect_type = "-scrubbers" icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED color = PIPE_COLOR_RED
@@ -183,7 +183,7 @@
icon_state = "intact-supply" icon_state = "intact-supply"
connect_types = CONNECT_TYPE_SUPPLY connect_types = CONNECT_TYPE_SUPPLY
piping_layer = PIPING_LAYER_SUPPLY piping_layer = PIPING_LAYER_SUPPLY
layer = 2.39 layer = PIPES_SUPPLY_LAYER
icon_connect_type = "-supply" icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE color = PIPE_COLOR_BLUE
@@ -219,7 +219,7 @@
icon_state = "intact-scrubbers" icon_state = "intact-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER connect_types = CONNECT_TYPE_SCRUBBER
piping_layer = PIPING_LAYER_SCRUBBER piping_layer = PIPING_LAYER_SCRUBBER
layer = 2.38 layer = PIPES_SCRUBBER_LAYER
icon_connect_type = "-scrubbers" icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED color = PIPE_COLOR_RED
@@ -229,7 +229,7 @@
icon_state = "intact-supply" icon_state = "intact-supply"
connect_types = CONNECT_TYPE_SUPPLY connect_types = CONNECT_TYPE_SUPPLY
piping_layer = PIPING_LAYER_SUPPLY piping_layer = PIPING_LAYER_SUPPLY
layer = 2.39 layer = PIPES_SUPPLY_LAYER
icon_connect_type = "-supply" icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE color = PIPE_COLOR_BLUE

View File

@@ -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 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 var/start_pressure = 75*ONE_ATMOSPHERE //Vorestation edit
layer = ATMOS_LAYER
level = 1 level = 1
dir = SOUTH dir = SOUTH
initialize_directions = SOUTH initialize_directions = SOUTH

View File

@@ -40,39 +40,71 @@ What is the naming convention for planes or layers?
*/ */
#define SPACE_PLANE -32 // Reserved for use in space/parallax #define SPACE_PLANE -82 // Reserved for use in space/parallax
#define PARALLAX_PLANE -30 // Reserved for use in space/parallax #define PARALLAX_PLANE -80 // Reserved for use in space/parallax
// OPENSPACE_PLANE reserves all planes between OPENSPACE_PLANE_START and OPENSPACE_PLANE_END inclusive // OPENSPACE_PLANE reserves all planes between OPENSPACE_PLANE_START and OPENSPACE_PLANE_END inclusive
#define OPENSPACE_PLANE -55 // /turf/simulated/open will use OPENSPACE_PLANE + z (Valid z's being 2 thru 17) #define OPENSPACE_PLANE -75 // /turf/simulated/open will use OPENSPACE_PLANE + z (Valid z's being 2 thru 17)
#define OPENSPACE_PLANE_START -53 #define OPENSPACE_PLANE_START -73
#define OPENSPACE_PLANE_END -38 #define OPENSPACE_PLANE_END -58
#define OVER_OPENSPACE_PLANE -37 #define OVER_OPENSPACE_PLANE -57
// Turf Planes
#define SPACE_PLANE -43 // Space turfs themselves
#define PLATING_PLANE -44 // Plating
#define DISPOSAL_LAYER 2.1 // 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
#define DECAL_PLANE -44 // Permanent decals
#define DIRTY_PLANE -43 // Nonpermanent decals
#define BLOOD_PLANE -42 // Blood is really dirty, but we can do special stuff if we separate it
// Obj planes
#define OBJ_PLANE -35
#define HIDING_LAYER 2.6 // Layer at which mobs hide to be under things like tables
#define DOOR_OPEN_LAYER 2.7 // Under all objects if opened. 2.7 due to tables being at 2.6
#define TABLE_LAYER 2.8 // Just under stuff that wants to be slightly below common objects.
#define UNDER_JUNK_LAYER 2.9 // Things that want to be slightly below common objects
// Turf/Obj layer boundary
#define ABOVE_JUNK_LAYER 3.1 // Things that want to be slightly above common objects
#define DOOR_CLOSED_LAYER 3.1 // Doors when closed
#define WINDOW_LAYER 3.2 // Windows
#define ON_WINDOW_LAYER 3.3 // Ontop of a window
#define SHOWER_OPEN_LAYER 3.4 // Showers when open
// Obj/Mob layer boundary
#define SHOWER_CLOSED_LAYER 4.2 // Should be converted to plane swaps
// Mob planes
#define MOB_PLANE -25
#define BELOW_MOB_LAYER 3.9 // Should be converted to plane swaps
#define ABOVE_MOB_LAYER 4.1 // Should be converted to plane swaps
// Top plane (in the sense that it's the highest in 'the world' and not a UI element)
#define ABOVE_PLANE -10
//////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////
#define PLANE_WORLD 0 // BYOND's default value for plane, the "base plane" #define PLANE_WORLD 0 // BYOND's default value for plane, the "base plane"
//////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////
//#define AREA_LAYER 1 //For easy recordkeeping; this is a byond define
//#define TURF_LAYER 2 //For easy recordkeeping; this is a byond define //#define TURF_LAYER 2 //For easy recordkeeping; this is a byond define
#define DECALS_LAYER 2.01
#define OVERTURF_LAYER 2.1
#define HIDING_LAYER 2.45 //Layer at which mobs hide to be under things like tables
#define DOOR_OPEN_LAYER 2.7 //Under all objects if opened. 2.7 due to tables being at 2.6
//#define OBJ_LAYER 3 //For easy recordkeeping; this is a byond define //#define OBJ_LAYER 3 //For easy recordkeeping; this is a byond define
#define DOOR_CLOSED_LAYER 3.1 //Above most items if closed
#define SHOWER_OPEN_LAYER 3.4
#define BELOW_MOB_LAYER 3.9
//#define MOB_LAYER 4 //For easy recordkeeping; this is a byond define //#define MOB_LAYER 4 //For easy recordkeeping; this is a byond define
#define ABOVE_MOB_LAYER 4.1
#define SHOWER_CLOSED_LAYER 4.2
//#define FLY_LAYER 5 //For easy recordkeeping; this is a byond define //#define FLY_LAYER 5 //For easy recordkeeping; this is a byond define
#define LIGHTING_LAYER 11 //Layer that lighting used to be on (now it's on a plane)
#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 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 SCREEN_LAYER 22 // Mob HUD/effects layer
#define PLANE_ADMIN1 3 //Purely for shenanigans (below lighting) #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 5 //Where the lighting (and darkness) lives
#define PLANE_LIGHTING_ABOVE 6 //For glowy eyes etc. that shouldn't be affected by darkness #define PLANE_LIGHTING_ABOVE 6 //For glowy eyes etc. that shouldn't be affected by darkness
@@ -125,4 +157,4 @@ What is the naming convention for planes or layers?
// Check if a mob can "logically" see an atom plane // Check if a mob can "logically" see an atom plane
#define MOB_CAN_SEE_PLANE(M, P) (P == PLANE_WORLD || (P >= OPENSPACE_PLANE_START && P <= OPENSPACE_PLANE_END) || (P in M.planes_visible)) #define MOB_CAN_SEE_PLANE(M, P) (P <= PLANE_WORLD || (P in M.planes_visible))

View File

@@ -1,11 +1,21 @@
// Belly Mode Constants // Normal digestion modes
#define DM_HOLD "Hold" #define DM_HOLD "Hold"
#define DM_DIGEST "Digest" #define DM_DIGEST "Digest"
#define DM_ITEMWEAK "Digest (Item Friendly)"
#define DM_STRIPDIGEST "Strip Digest (Items Only)"
#define DM_DIGEST_NUMB "Digest (Numbing)"
#define DM_HEAL "Heal"
#define DM_ABSORB "Absorb" #define DM_ABSORB "Absorb"
#define DM_UNABSORB "Unabsorb"
#define DM_DRAIN "Drain"
#define DM_SHRINK "Shrink"
#define DM_GROW "Grow"
#define DM_SIZE_STEAL "Size Steal"
#define DM_HEAL "Heal"
#define DM_EGG "Encase In Egg"
#define DM_TRANSFORM "Transform"
//#define DM_ITEMWEAK "Digest (Item Friendly)"
//#define DM_STRIPDIGEST "Strip Digest (Items Only)"
//#define DM_DIGEST_NUMB "Digest (Numbing)"
//TF modes
#define DM_TRANSFORM_HAIR_AND_EYES "Transform (Hair and eyes)" #define DM_TRANSFORM_HAIR_AND_EYES "Transform (Hair and eyes)"
#define DM_TRANSFORM_MALE "Transform (Male)" #define DM_TRANSFORM_MALE "Transform (Male)"
#define DM_TRANSFORM_FEMALE "Transform (Female)" #define DM_TRANSFORM_FEMALE "Transform (Female)"
@@ -17,12 +27,12 @@
#define DM_TRANSFORM_KEEP_GENDER_EGG "Transform (Keep Gender) (EGG)" #define DM_TRANSFORM_KEEP_GENDER_EGG "Transform (Keep Gender) (EGG)"
#define DM_TRANSFORM_MALE_EGG "Transform (Male) (EGG)" #define DM_TRANSFORM_MALE_EGG "Transform (Male) (EGG)"
#define DM_TRANSFORM_FEMALE_EGG "Transform (Female) (EGG)" #define DM_TRANSFORM_FEMALE_EGG "Transform (Female) (EGG)"
#define DM_EGG "Encase In Egg"
#define DM_DRAIN "Drain" //Addon mode flags
#define DM_UNABSORB "Unabsorb" #define DM_FLAG_NUMBING 0x1
#define DM_SHRINK "Shrink" #define DM_FLAG_ITEMWEAK 0x2
#define DM_GROW "Grow" #define DM_FLAG_STRIPPING 0x4
#define DM_SIZE_STEAL "Size Steal"
// Stance for hostile mobs to be in while devouring someone. // Stance for hostile mobs to be in while devouring someone.
#define HOSTILE_STANCE_EATING 99 #define HOSTILE_STANCE_EATING 99

View File

@@ -27,7 +27,7 @@
#define IS_SLIME 8 #define IS_SLIME 8
#define CE_STABLE "stable" // Inaprovaline #define CE_STABLE "stable" // Inaprovaline
#define CE_ANTIBIOTIC "antibiotic" // Spaceacilin #define CE_ANTIBIOTIC "antibiotic" // Antibiotics
#define CE_BLOODRESTORE "bloodrestore" // Iron/nutriment #define CE_BLOODRESTORE "bloodrestore" // Iron/nutriment
#define CE_PAINKILLER "painkiller" #define CE_PAINKILLER "painkiller"
#define CE_ALCOHOL "alcohol" // Liver filtering #define CE_ALCOHOL "alcohol" // Liver filtering
@@ -36,6 +36,7 @@
#define REAGENTS_PER_SHEET 20 #define REAGENTS_PER_SHEET 20
// Attached to CE_ANTIBIOTIC
#define ANTIBIO_NORM 1 #define ANTIBIO_NORM 1
#define ANTIBIO_OD 2 #define ANTIBIO_OD 2
#define ANTIBIO_SUPER 3 #define ANTIBIO_SUPER 3

View File

@@ -45,6 +45,11 @@
#define PIPING_LAYER_SCRUBBER 3 #define PIPING_LAYER_SCRUBBER 3
#define PIPING_LAYER_DEFAULT PIPING_LAYER_REGULAR #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 // Pipe flags
#define PIPING_ALL_LAYER 1 //intended to connect with all layers, check for all instead of just one. #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. #define PIPING_ONE_PER_TURF 2 //can only be built if nothing else with this flag is on the tile already.

View File

@@ -88,17 +88,17 @@
#define slot_back 3 #define slot_back 3
#define slot_belt 4 #define slot_belt 4
#define slot_wear_id 5 #define slot_wear_id 5
#define slot_l_store 6 #define slot_s_store 6
#define slot_r_store 7 //Some things may reference this, try to keep it here #define slot_l_store 7
#define slot_r_store 8 //Some things may reference this, try to keep it here
//Shown when inventory unhidden //Shown when inventory unhidden
#define slot_glasses 8 #define slot_glasses 9
#define slot_wear_mask 9 #define slot_wear_mask 10
#define slot_gloves 10 #define slot_gloves 11
#define slot_head 11 #define slot_head 12
#define slot_shoes 12 #define slot_shoes 13
#define slot_wear_suit 13 #define slot_wear_suit 14
#define slot_w_uniform 14 #define slot_w_uniform 15
#define slot_s_store 15
#define slot_l_ear 16 #define slot_l_ear 16
#define slot_r_ear 17 #define slot_r_ear 17
//Secret slots //Secret slots

View File

@@ -9,7 +9,6 @@
#define LIGHTING_LAMBERTIAN 0 // use lambertian shading for light sources #define LIGHTING_LAMBERTIAN 0 // use lambertian shading for light sources
#define LIGHTING_HEIGHT 1 // height off the ground of light sources on the pseudo-z-axis, you should probably leave this alone #define LIGHTING_HEIGHT 1 // height off the ground of light sources on the pseudo-z-axis, you should probably leave this alone
//#define LIGHTING_LAYER 10 // drawing layer for lighting overlays
#define LIGHTING_ICON 'icons/effects/lighting_overlay.dmi' // icon used for lighting shading effects #define LIGHTING_ICON 'icons/effects/lighting_overlay.dmi' // icon used for lighting shading effects
#define LIGHTING_ICON_STATE_DARK "soft_dark" // Change between "soft_dark" and "dark" to swap soft darkvision #define LIGHTING_ICON_STATE_DARK "soft_dark" // Change between "soft_dark" and "dark" to swap soft darkvision

View File

@@ -24,5 +24,6 @@
#define SPECIES_VULPKANIN "Vulpkanin" #define SPECIES_VULPKANIN "Vulpkanin"
#define SPECIES_XENOCHIMERA "Xenochimera" #define SPECIES_XENOCHIMERA "Xenochimera"
#define SPECIES_XENOHYBRID "Xenomorph Hybrid" #define SPECIES_XENOHYBRID "Xenomorph Hybrid"
#define SPECIES_ZORREN_FLAT "Flatlander Zorren" #define SPECIES_ZORREN_FLAT "Flatland Zorren"
#define SPECIES_ZORREN_HIGH "Highlander Zorren" #define SPECIES_ZORREN_HIGH "Highlander Zorren"
#define SPECIES_CUSTOM "Custom Species"

View File

@@ -32,7 +32,7 @@ var/global/list/all_species[0]
var/global/list/all_languages[0] var/global/list/all_languages[0]
var/global/list/language_keys[0] // Table of say codes for all languages var/global/list/language_keys[0] // Table of say codes for all languages
var/global/list/whitelisted_species = list(SPECIES_HUMAN) // Species that require a whitelist check. var/global/list/whitelisted_species = list(SPECIES_HUMAN) // Species that require a whitelist check.
var/global/list/playable_species = list("Custom Species", SPECIES_HUMAN) // A list of ALL playable species, whitelisted, latejoin or otherwise. //VOREStation Edit - Making sure custom species is obvious. var/global/list/playable_species = list(SPECIES_CUSTOM, SPECIES_HUMAN) // A list of ALL playable species, whitelisted, latejoin or otherwise. //VOREStation Edit - Making sure custom species is obvious.
var/list/mannequins_ var/list/mannequins_

View File

@@ -11,6 +11,8 @@ var/global/list/positive_traits = list() // Positive custom species traits, inde
var/global/list/traits_costs = list() // Just path = cost list, saves time in char setup var/global/list/traits_costs = list() // Just path = cost list, saves time in char setup
var/global/list/all_traits = list() // All of 'em at once (same instances) var/global/list/all_traits = list() // All of 'em at once (same instances)
var/global/list/custom_species_bases = list() // Species that can be used for a Custom Species icon base
//stores numeric player size options indexed by name //stores numeric player size options indexed by name
var/global/list/player_sizes_list = list( var/global/list/player_sizes_list = list(
"Macro" = RESIZE_HUGE, "Macro" = RESIZE_HUGE,
@@ -195,4 +197,14 @@ var/global/list/edible_trash = list(/obj/item/trash,
if(0.1 to INFINITY) if(0.1 to INFINITY)
positive_traits[path] = instance positive_traits[path] = instance
// Custom species icon bases
var/list/blacklisted_icons = list(SPECIES_CUSTOM,SPECIES_PROMETHEAN) //Just ones that won't work well.
for(var/species_name in playable_species)
if(species_name in blacklisted_icons)
continue
var/datum/species/S = all_species[species_name]
if(S.spawn_flags & SPECIES_IS_WHITELISTED)
continue
custom_species_bases += species_name
return 1 // Hooks must return 1 return 1 // Hooks must return 1

View File

@@ -1226,20 +1226,21 @@ proc/is_hot(obj/item/W as obj)
/* /*
Checks if that loc and dir has a item on the wall Checks if that loc and dir has a item on the wall
TODO - Fix this ancient list of wall items. Preferably make it dynamically populated. ~Leshana
*/ */
var/list/WALLITEMS = list( var/list/WALLITEMS = list(
"/obj/machinery/power/apc", "/obj/machinery/alarm", "/obj/item/device/radio/intercom", /obj/machinery/power/apc, /obj/machinery/alarm, /obj/item/device/radio/intercom, /obj/structure/frame,
"/obj/structure/extinguisher_cabinet", "/obj/structure/reagent_dispensers/peppertank", /obj/structure/extinguisher_cabinet, /obj/structure/reagent_dispensers/peppertank,
"/obj/machinery/status_display", "/obj/machinery/requests_console", "/obj/machinery/light_switch", "/obj/effect/sign", /obj/machinery/status_display, /obj/machinery/requests_console, /obj/machinery/light_switch, /obj/structure/sign,
"/obj/machinery/newscaster", "/obj/machinery/firealarm", "/obj/structure/noticeboard", "/obj/machinery/door_control", /obj/machinery/newscaster, /obj/machinery/firealarm, /obj/structure/noticeboard, /obj/machinery/button/remote,
"/obj/machinery/computer/security/telescreen", "/obj/machinery/embedded_controller/radio/simple_vent_controller", /obj/machinery/computer/security/telescreen, /obj/machinery/embedded_controller/radio,
"/obj/item/weapon/storage/secure/safe", "/obj/machinery/door_timer", "/obj/machinery/flasher", "/obj/machinery/keycard_auth", /obj/item/weapon/storage/secure/safe, /obj/machinery/door_timer, /obj/machinery/flasher, /obj/machinery/keycard_auth,
"/obj/structure/mirror", "/obj/structure/closet/fireaxecabinet", "/obj/machinery/computer/security/telescreen/entertainment" /obj/structure/mirror, /obj/structure/closet/fireaxecabinet, /obj/machinery/computer/security/telescreen/entertainment
) )
/proc/gotwallitem(loc, dir) /proc/gotwallitem(loc, dir)
for(var/obj/O in loc) for(var/obj/O in loc)
for(var/item in WALLITEMS) for(var/item in WALLITEMS)
if(istype(O, text2path(item))) if(istype(O, item))
//Direction works sometimes //Direction works sometimes
if(O.dir == dir) if(O.dir == dir)
return 1 return 1
@@ -1263,7 +1264,7 @@ var/list/WALLITEMS = list(
//Some stuff is placed directly on the wallturf (signs) //Some stuff is placed directly on the wallturf (signs)
for(var/obj/O in get_step(loc, dir)) for(var/obj/O in get_step(loc, dir))
for(var/item in WALLITEMS) for(var/item in WALLITEMS)
if(istype(O, text2path(item))) if(istype(O, item))
if(O.pixel_x == 0 && O.pixel_y == 0) if(O.pixel_x == 0 && O.pixel_y == 0)
return 1 return 1
return 0 return 0

View File

@@ -1,2 +1,4 @@
#define isbelly(A) istype(A, /obj/belly) #define isbelly(A) istype(A, /obj/belly)
#define isstorage(A) istype(A, /obj/item/weapon/storage) #define isstorage(A) istype(A, /obj/item/weapon/storage)
#define isitem(A) istype(A, /obj/item)
#define isTaurTail(A) istype(A, /datum/sprite_accessory/tail/taur)

View File

@@ -11,7 +11,7 @@
using.icon = 'icons/mob/screen1_alien.dmi' using.icon = 'icons/mob/screen1_alien.dmi'
using.icon_state = (mymob.m_intent == "run" ? "running" : "walking") using.icon_state = (mymob.m_intent == "run" ? "running" : "walking")
using.screen_loc = ui_acti using.screen_loc = ui_acti
using.layer = 20 using.layer = HUD_LAYER
src.adding += using src.adding += using
move_intent = using move_intent = using

View File

@@ -51,7 +51,6 @@ var/list/global_huds = list(
/obj/screen/global_screen /obj/screen/global_screen
screen_loc = ui_entire_screen screen_loc = ui_entire_screen
layer = 17
plane = PLANE_FULLSCREEN plane = PLANE_FULLSCREEN
mouse_opacity = 0 mouse_opacity = 0
@@ -74,7 +73,12 @@ var/list/global_huds = list(
darksight.icon = null darksight.icon = null
darksight.screen_loc = "1,1" darksight.screen_loc = "1,1"
darksight.plane = PLANE_LIGHTING darksight.plane = PLANE_LIGHTING
darksight.plane = LIGHTING_LAYER + 0.1
//Marks the center of the screen, for things like ventcrawl
centermarker = new /obj/screen()
centermarker.icon = 'icons/mob/screen1.dmi'
centermarker.icon_state = "centermarker"
centermarker.screen_loc = "CENTER,CENTER"
//Marks the center of the screen, for things like ventcrawl //Marks the center of the screen, for things like ventcrawl
centermarker = new /obj/screen() centermarker = new /obj/screen()
@@ -141,20 +145,17 @@ var/list/global_huds = list(
for(i = 1, i <= 4, i++) for(i = 1, i <= 4, i++)
O = vimpaired[i] O = vimpaired[i]
O.icon_state = "dither50" O.icon_state = "dither50"
O.layer = 17
O.plane = PLANE_FULLSCREEN O.plane = PLANE_FULLSCREEN
O.mouse_opacity = 0 O.mouse_opacity = 0
O = darkMask[i] O = darkMask[i]
O.icon_state = "dither50" O.icon_state = "dither50"
O.layer = 17
O.plane = PLANE_FULLSCREEN O.plane = PLANE_FULLSCREEN
O.mouse_opacity = 0 O.mouse_opacity = 0
for(i = 5, i <= 8, i++) for(i = 5, i <= 8, i++)
O = darkMask[i] O = darkMask[i]
O.icon_state = "black" O.icon_state = "black"
O.layer = 17
O.plane = PLANE_FULLSCREEN O.plane = PLANE_FULLSCREEN
O.mouse_opacity = 2 O.mouse_opacity = 2

View File

@@ -11,13 +11,13 @@
blobpwrdisplay.name = "blob power" blobpwrdisplay.name = "blob power"
blobpwrdisplay.icon_state = "block" blobpwrdisplay.icon_state = "block"
blobpwrdisplay.screen_loc = ui_health blobpwrdisplay.screen_loc = ui_health
blobpwrdisplay.layer = 20 blobpwrdisplay.layer = HUD_LAYER
blobhealthdisplay = new /obj/screen() blobhealthdisplay = new /obj/screen()
blobhealthdisplay.name = "blob health" blobhealthdisplay.name = "blob health"
blobhealthdisplay.icon_state = "block" blobhealthdisplay.icon_state = "block"
blobhealthdisplay.screen_loc = ui_internal blobhealthdisplay.screen_loc = ui_internal
blobhealthdisplay.layer = 20 blobhealthdisplay.layer = HUD_LAYER
mymob.client.screen = list() mymob.client.screen = list()
@@ -36,7 +36,7 @@
using.icon = ui_style using.icon = ui_style
using.icon_state = "intent_"+mymob.a_intent using.icon_state = "intent_"+mymob.a_intent
using.screen_loc = ui_zonesel using.screen_loc = ui_zonesel
using.layer = 20 using.layer = HUD_LAYER
src.adding += using src.adding += using
action_intent = using action_intent = using
@@ -50,7 +50,7 @@
using.name = "help" using.name = "help"
using.icon = ico using.icon = ico
using.screen_loc = ui_zonesel using.screen_loc = ui_zonesel
using.layer = 21 using.layer = HUD_LAYER+0.01
src.adding += using src.adding += using
help_intent = using help_intent = using
@@ -61,7 +61,7 @@
using.name = "disarm" using.name = "disarm"
using.icon = ico using.icon = ico
using.screen_loc = ui_zonesel using.screen_loc = ui_zonesel
using.layer = 21 using.layer = HUD_LAYER+0.01
src.adding += using src.adding += using
disarm_intent = using disarm_intent = using
@@ -72,7 +72,7 @@
using.name = "grab" using.name = "grab"
using.icon = ico using.icon = ico
using.screen_loc = ui_zonesel using.screen_loc = ui_zonesel
using.layer = 21 using.layer = HUD_LAYER+0.01
src.adding += using src.adding += using
grab_intent = using grab_intent = using
@@ -83,7 +83,7 @@
using.name = I_HURT using.name = I_HURT
using.icon = ico using.icon = ico
using.screen_loc = ui_zonesel using.screen_loc = ui_zonesel
using.layer = 21 using.layer = HUD_LAYER+0.01
src.adding += using src.adding += using
hurt_intent = using hurt_intent = using
@@ -93,9 +93,12 @@
return return
/mob/living/simple_animal/construct/instantiate_hud(var/datum/hud/HUD)
HUD.construct_hud()
/mob/living/simple_animal/construct/instantiate_hud(var/datum/hud/HUD)
..(HUD)
// HUD.construct_hud() //Archaic.
/*
/datum/hud/proc/construct_hud() /datum/hud/proc/construct_hud()
var/constructtype var/constructtype
@@ -109,30 +112,28 @@
constructtype = "harvester" constructtype = "harvester"
if(constructtype) if(constructtype)
mymob.fire = new /obj/screen()
mymob.fire.icon = 'icons/mob/screen1_construct.dmi' mymob.fire.icon = 'icons/mob/screen1_construct.dmi'
mymob.fire.icon_state = "fire0" mymob.fire.icon_state = "fire0"
mymob.fire.name = "fire" mymob.fire.name = "fire"
mymob.fire.screen_loc = ui_construct_fire mymob.fire.screen_loc = ui_construct_fire
mymob.healths = new /obj/screen()
mymob.healths.icon = 'icons/mob/screen1_construct.dmi' mymob.healths.icon = 'icons/mob/screen1_construct.dmi'
mymob.healths.icon_state = "[constructtype]_health0" mymob.healths.icon_state = "[constructtype]_health0"
mymob.healths.name = "health" mymob.healths.name = "health"
mymob.healths.screen_loc = ui_construct_health mymob.healths.screen_loc = ui_construct_health
mymob.pullin = new /obj/screen()
mymob.pullin.icon = 'icons/mob/screen1_construct.dmi' mymob.pullin.icon = 'icons/mob/screen1_construct.dmi'
mymob.pullin.icon_state = "pull0" mymob.pullin.icon_state = "pull0"
mymob.pullin.name = "pull" mymob.pullin.name = "pull"
mymob.pullin.screen_loc = ui_construct_pull mymob.pullin.screen_loc = ui_construct_pull
mymob.zone_sel = new /obj/screen/zone_sel()
mymob.zone_sel.icon = 'icons/mob/screen1_construct.dmi' mymob.zone_sel.icon = 'icons/mob/screen1_construct.dmi'
mymob.zone_sel.overlays.len = 0 mymob.zone_sel.overlays.len = 0
mymob.zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]") mymob.zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]")
mymob.purged = new /obj/screen()
mymob.purged.icon = 'icons/mob/screen1_construct.dmi' mymob.purged.icon = 'icons/mob/screen1_construct.dmi'
mymob.purged.icon_state = "purge0" mymob.purged.icon_state = "purge0"
mymob.purged.name = "purged" mymob.purged.name = "purged"
@@ -142,3 +143,4 @@
mymob.client.screen += list(mymob.fire, mymob.healths, mymob.pullin, mymob.zone_sel, mymob.purged) mymob.client.screen += list(mymob.fire, mymob.healths, mymob.pullin, mymob.zone_sel, mymob.purged)
mymob.client.screen += mymob.client.void mymob.client.screen += mymob.client.void
*/

View File

@@ -30,7 +30,7 @@ var/obj/screen/robot_inventory
using.alpha = ui_alpha using.alpha = ui_alpha
using.icon_state = "radio" using.icon_state = "radio"
using.screen_loc = ui_movi using.screen_loc = ui_movi
using.layer = 20 using.layer = HUD_LAYER
src.adding += using src.adding += using
//Module select //Module select
@@ -43,7 +43,7 @@ var/obj/screen/robot_inventory
using.alpha = ui_alpha using.alpha = ui_alpha
using.icon_state = "inv1" using.icon_state = "inv1"
using.screen_loc = ui_inv1 using.screen_loc = ui_inv1
using.layer = 20 using.layer = HUD_LAYER
src.adding += using src.adding += using
mymob:inv1 = using mymob:inv1 = using
@@ -55,7 +55,7 @@ var/obj/screen/robot_inventory
using.alpha = ui_alpha using.alpha = ui_alpha
using.icon_state = "inv2" using.icon_state = "inv2"
using.screen_loc = ui_inv2 using.screen_loc = ui_inv2
using.layer = 20 using.layer = HUD_LAYER
src.adding += using src.adding += using
mymob:inv2 = using mymob:inv2 = using
@@ -67,7 +67,7 @@ var/obj/screen/robot_inventory
using.alpha = ui_alpha using.alpha = ui_alpha
using.icon_state = "inv3" using.icon_state = "inv3"
using.screen_loc = ui_inv3 using.screen_loc = ui_inv3
using.layer = 20 using.layer = HUD_LAYER
src.adding += using src.adding += using
mymob:inv3 = using mymob:inv3 = using
@@ -81,7 +81,7 @@ var/obj/screen/robot_inventory
using.alpha = ui_alpha using.alpha = ui_alpha
using.icon_state = mymob.a_intent using.icon_state = mymob.a_intent
using.screen_loc = ui_acti using.screen_loc = ui_acti
using.layer = 20 using.layer = HUD_LAYER
src.adding += using src.adding += using
action_intent = using action_intent = using
@@ -119,7 +119,7 @@ var/obj/screen/robot_inventory
using.icon_state = "panel" using.icon_state = "panel"
using.alpha = ui_alpha using.alpha = ui_alpha
using.screen_loc = ui_borg_panel using.screen_loc = ui_borg_panel
using.layer = 19 using.layer = HUD_LAYER-0.01
src.adding += using src.adding += using
//Store //Store
@@ -276,6 +276,6 @@ var/obj/screen/robot_inventory
r.client.screen -= r.robot_modules_background r.client.screen -= r.robot_modules_background
/mob/living/silicon/robot/update_hud() /mob/living/silicon/robot/update_hud()
..()
if(modtype) if(modtype)
hands.icon_state = lowertext(modtype) hands.icon_state = lowertext(modtype)
..()

View File

@@ -92,9 +92,11 @@
if(spattack_min_range <= 1) if(spattack_min_range <= 1)
SpecialAtkTarget() SpecialAtkTarget()
else if(melee_damage_upper == 0 && istype(A,/mob/living)) else if(melee_damage_upper == 0 && istype(A,/mob/living))
custom_emote(1,"[pick(friendly)] [A]!") custom_emote(1,"[pick(friendly)] [A]!")
else else
DoPunch(A) DoPunch(A)

View File

@@ -68,7 +68,7 @@ var/const/tk_maxrange = 15
flags = NOBLUDGEON flags = NOBLUDGEON
//item_state = null //item_state = null
w_class = ITEMSIZE_NO_CONTAINER w_class = ITEMSIZE_NO_CONTAINER
layer = 20 layer = HUD_LAYER
var/last_throw = 0 var/last_throw = 0
var/atom/movable/focus = null var/atom/movable/focus = null

View File

@@ -6,11 +6,11 @@
if(config.kick_inactive) if(config.kick_inactive)
for(last_object in clients) for(last_object in clients)
var/client/C = last_object var/client/C = last_object
if(C.is_afk(config.kick_inactive MINUTES)) if(C.is_afk(config.kick_inactive MINUTES) && !C.holder) // VOREStation Edit - Allow admins to idle
if(!istype(C.mob, /mob/observer/dead) && !istype(C.mob, /mob/new_player))
to_chat(C,"<span class='warning'>You have been inactive for more than [config.kick_inactive] minute\s and have been disconnected.</span>") to_chat(C,"<span class='warning'>You have been inactive for more than [config.kick_inactive] minute\s and have been disconnected.</span>")
var/information var/information
if(C.mob)
if(ishuman(C.mob)) if(ishuman(C.mob))
var/job var/job
var/mob/living/carbon/human/H = C.mob var/mob/living/carbon/human/H = C.mob

View File

@@ -47,7 +47,8 @@ var/datum/controller/process/planet/planet_controller = null
//Weather style needs redrawing //Weather style needs redrawing
if(P.needs_work & PLANET_PROCESS_WEATHER) if(P.needs_work & PLANET_PROCESS_WEATHER)
P.needs_work &= ~PLANET_PROCESS_WEATHER P.needs_work &= ~PLANET_PROCESS_WEATHER
var/image/new_overlay = image(icon = P.weather_holder.current_weather.icon, icon_state = P.weather_holder.current_weather.icon_state, layer = LIGHTING_LAYER - 1) var/image/new_overlay = image(icon = P.weather_holder.current_weather.icon, icon_state = P.weather_holder.current_weather.icon_state)
new_overlay.plane = PLANE_PLANETLIGHTING
//Redraw weather icons //Redraw weather icons
for(var/T in P.planet_floors) for(var/T in P.planet_floors)
var/turf/simulated/turf = T var/turf/simulated/turf = T

View File

@@ -234,7 +234,8 @@ var/global/datum/emergency_shuttle_controller/emergency_shuttle
name = "star" name = "star"
var/speed = 10 var/speed = 10
var/direction = SOUTH var/direction = SOUTH
layer = 2 // TURF_LAYER layer = TURF_LAYER
plane = TURF_PLANE
/obj/effect/bgstar/New() /obj/effect/bgstar/New()
..() ..()

View File

@@ -9,7 +9,7 @@
SUBSYSTEM_DEF(air) SUBSYSTEM_DEF(air)
name = "Air" name = "Air"
init_order = INIT_ORDER_AIR init_order = INIT_ORDER_AIR
priority = 20 priority = 35
wait = 2 SECONDS // seconds (We probably can speed this up actually) wait = 2 SECONDS // seconds (We probably can speed this up actually)
flags = SS_BACKGROUND // TODO - Should this really be background? It might be important. flags = SS_BACKGROUND // TODO - Should this really be background? It might be important.
runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME

View File

@@ -14,7 +14,7 @@ SUBSYSTEM_DEF(airflow)
wait = 2 wait = 2
flags = SS_NO_INIT flags = SS_NO_INIT
runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
priority = 15 priority = 30
var/list/processing = list() var/list/processing = list()
var/list/currentrun = list() var/list/currentrun = list()

View File

@@ -132,3 +132,9 @@
question = "A curious explorer has touched a mysterious rune. \ question = "A curious explorer has touched a mysterious rune. \
Would you like to play as the creature it summons?" Would you like to play as the creature it summons?"
cutoff_number = 1 cutoff_number = 1
/datum/ghost_query/cursedblade
role_name = "Cursed Sword"
question = "A cursed blade has been discovered by a curious explorer. \
Would you like to play as the soul imprisoned within?"
cutoff_number = 1

View File

@@ -1,5 +1,5 @@
//wrapper //wrapper
/proc/do_teleport(ateleatom, adestination, aprecision=0, afteleport=1, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null) /proc/do_teleport(ateleatom, adestination, aprecision=0, afteleport=1, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null, local=TRUE) //VOREStation Edit
new /datum/teleport/instant/science(arglist(args)) new /datum/teleport/instant/science(arglist(args))
return return
@@ -12,15 +12,16 @@
var/soundin //soundfile to play before teleportation var/soundin //soundfile to play before teleportation
var/soundout //soundfile to play after teleportation var/soundout //soundfile to play after teleportation
var/force_teleport = 1 //if false, teleport will use Move() proc (dense objects will prevent teleportation) var/force_teleport = 1 //if false, teleport will use Move() proc (dense objects will prevent teleportation)
var/local = TRUE //VOREStation Add - If false, can teleport from/to any z-level
/datum/teleport/New(ateleatom, adestination, aprecision=0, afteleport=1, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null) /datum/teleport/New(ateleatom, adestination, aprecision=0, afteleport=1, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null, local=TRUE) //VOREStation Edit
..() ..()
if(!initTeleport(arglist(args))) if(!initTeleport(arglist(args)))
return 0 return 0
return 1 return 1
/datum/teleport/proc/initTeleport(ateleatom,adestination,aprecision,afteleport,aeffectin,aeffectout,asoundin,asoundout) /datum/teleport/proc/initTeleport(ateleatom,adestination,aprecision,afteleport,aeffectin,aeffectout,asoundin,asoundout,local) //VOREStation Edit
if(!setTeleatom(ateleatom)) if(!setTeleatom(ateleatom))
return 0 return 0
if(!setDestination(adestination)) if(!setDestination(adestination))
@@ -30,6 +31,7 @@
setEffects(aeffectin,aeffectout) setEffects(aeffectin,aeffectout)
setForceTeleport(afteleport) setForceTeleport(afteleport)
setSounds(asoundin,asoundout) setSounds(asoundin,asoundout)
src.local = local // VOREStation Add
return 1 return 1
//must succeed //must succeed
@@ -186,7 +188,7 @@
return 0 return 0
*/ //VOREStation Removal End */ //VOREStation Removal End
//VOREStation Edit Start //VOREStation Edit Start
if(destination.z in using_map.player_levels) if(!local || (destination.z in using_map.player_levels)) //VOREStation Edit
return 1 return 1
if(istype(teleatom, /mob/living)) if(istype(teleatom, /mob/living))
to_chat(teleatom, "<span class='warning'>The portal refuses to carry you that far away!</span>") to_chat(teleatom, "<span class='warning'>The portal refuses to carry you that far away!</span>")

View File

@@ -1,13 +1,17 @@
/datum/teleport/proc/try_televore() /datum/teleport/proc/try_televore()
//Destination is in a belly //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 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. teleatom.forceMove(get_turf(B)) //So we can splash the sound and sparks and everything.
playSpecials(destination,effectout,soundout) playSpecials(destination,effectout,soundout)
teleatom.forceMove(B) teleatom.forceMove(B)
return 1 return TRUE
//No fun! //No fun!
return 0 return FALSE

View File

@@ -23,8 +23,8 @@
name = OUTFIT_JOB_NAME("Medical Doctor") name = OUTFIT_JOB_NAME("Medical Doctor")
uniform = /obj/item/clothing/under/rank/medical uniform = /obj/item/clothing/under/rank/medical
suit = /obj/item/clothing/suit/storage/toggle/labcoat suit = /obj/item/clothing/suit/storage/toggle/labcoat
l_hand = /obj/item/weapon/storage/firstaid/adv l_hand = /obj/item/weapon/storage/firstaid/regular
r_pocket = /obj/item/device/healthanalyzer r_pocket = /obj/item/device/flashlight/pen
id_type = /obj/item/weapon/card/id/medical/doctor id_type = /obj/item/weapon/card/id/medical/doctor
/decl/hierarchy/outfit/job/medical/doctor/emergency_physician /decl/hierarchy/outfit/job/medical/doctor/emergency_physician
@@ -94,7 +94,7 @@
uniform = /obj/item/clothing/under/rank/medical/scrubs/black uniform = /obj/item/clothing/under/rank/medical/scrubs/black
suit = /obj/item/clothing/suit/storage/toggle/fr_jacket suit = /obj/item/clothing/suit/storage/toggle/fr_jacket
shoes = /obj/item/clothing/shoes/boots/jackboots shoes = /obj/item/clothing/shoes/boots/jackboots
l_hand = /obj/item/weapon/storage/firstaid/adv l_hand = /obj/item/weapon/storage/firstaid/regular
belt = /obj/item/weapon/storage/belt/medical/emt belt = /obj/item/weapon/storage/belt/medical/emt
pda_slot = slot_l_store pda_slot = slot_l_store
id_type = /obj/item/weapon/card/id/medical/paramedic id_type = /obj/item/weapon/card/id/medical/paramedic

View File

@@ -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"

View File

@@ -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

View File

@@ -39,6 +39,7 @@
name = "Arts and Crafts supplies" name = "Arts and Crafts supplies"
contains = list( contains = list(
/obj/item/weapon/storage/fancy/crayons, /obj/item/weapon/storage/fancy/crayons,
/obj/item/weapon/storage/fancy/markers,
/obj/item/device/camera, /obj/item/device/camera,
/obj/item/device/camera_film = 2, /obj/item/device/camera_film = 2,
/obj/item/weapon/storage/photo_album, /obj/item/weapon/storage/photo_album,

View File

@@ -18,7 +18,7 @@
/obj/item/stack/cable_coil/random, /obj/item/stack/cable_coil/random,
/obj/item/clothing/accessory/collar/shock, /obj/item/clothing/accessory/collar/shock,
/obj/item/clothing/suit/straight_jacket, /obj/item/clothing/suit/straight_jacket,
/obj/item/weapon/handcuffs/legcuffs, /obj/item/weapon/handcuffs/legcuffs/fuzzy,
/obj/item/weapon/melee/fluff/holochain/mass, /obj/item/weapon/melee/fluff/holochain/mass,
/obj/item/weapon/material/twohanded/fluff/riding_crop, /obj/item/weapon/material/twohanded/fluff/riding_crop,
/obj/item/clothing/under/fluff/latexmaid /obj/item/clothing/under/fluff/latexmaid
@@ -39,3 +39,32 @@
cost = 50 cost = 50
containertype = /obj/structure/closet/crate containertype = /obj/structure/closet/crate
containername = "wolfgirl cosplay crate" 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"

View File

@@ -33,7 +33,9 @@
if(!antag_indicator || !other.current || !recipient.current) if(!antag_indicator || !other.current || !recipient.current)
return return
var/indicator = (faction_indicator && (other in faction_members)) ? faction_indicator : antag_indicator var/indicator = (faction_indicator && (other in faction_members)) ? faction_indicator : antag_indicator
return image('icons/mob/mob.dmi', loc = other.current, icon_state = indicator, layer = LIGHTING_LAYER+0.1) var/image/returnimage = image('icons/mob/mob.dmi', loc = other.current, icon_state = indicator)
returnimage.plane = PLANE_LIGHTING_ABOVE
return returnimage
/datum/antagonist/proc/update_all_icons() /datum/antagonist/proc/update_all_icons()
if(!antag_indicator) if(!antag_indicator)

View File

@@ -13,82 +13,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
*/ */
/area
var/fire = null
var/atmos = 1
var/atmosalm = 0
var/poweralm = 1
var/party = null
level = null
name = "Unknown"
icon = 'icons/turf/areas.dmi'
icon_state = "unknown"
layer = 10
luminosity = 0
mouse_opacity = 0
var/lightswitch = 1
var/eject = null
var/debug = 0
var/requires_power = 1
var/always_unpowered = 0 //this gets overriden to 1 for space in area/New()
var/power_equip = 1
var/power_light = 1
var/power_environ = 1
var/music = null
var/used_equip = 0
var/used_light = 0
var/used_environ = 0
var/has_gravity = 1
var/obj/machinery/power/apc/apc = null
var/no_air = null
// var/list/lights // list of all lights on this area
var/list/all_doors = null //Added by Strumpetplaya - Alarm Change - Contains a list of doors adjacent to this area
var/firedoors_closed = 0
var/list/ambience = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg')
var/list/forced_ambience = null
var/sound_env = STANDARD_STATION
var/turf/base_turf //The base turf type of the area, which can be used to override the z-level's base turf
/*Adding a wizard area teleport list because motherfucking lag -- Urist*/
/*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/
var/list/teleportlocs = list()
/hook/startup/proc/setupTeleportLocs()
for(var/area/AR in world)
if(istype(AR, /area/shuttle) || istype(AR, /area/syndicate_station) || istype(AR, /area/wizard_station)) continue
if(teleportlocs.Find(AR.name)) continue
var/turf/picked = pick(get_area_turfs(AR.type))
if (picked.z in using_map.station_levels)
teleportlocs += AR.name
teleportlocs[AR.name] = AR
teleportlocs = sortAssoc(teleportlocs)
return 1
var/list/ghostteleportlocs = list()
/hook/startup/proc/setupGhostTeleportLocs()
for(var/area/AR in world)
if(ghostteleportlocs.Find(AR.name)) continue
if(istype(AR, /area/aisat) || istype(AR, /area/derelict) || istype(AR, /area/tdome) || istype(AR, /area/shuttle/specops/centcom))
ghostteleportlocs += AR.name
ghostteleportlocs[AR.name] = AR
var/turf/picked = pick(get_area_turfs(AR.type))
if (picked.z in using_map.player_levels)
ghostteleportlocs += AR.name
ghostteleportlocs[AR.name] = AR
ghostteleportlocs = sortAssoc(ghostteleportlocs)
return 1
/*-----------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------*/
///////// /////////
@@ -358,6 +282,7 @@ area/space/atmosalert()
/area/shuttle/trade /area/shuttle/trade
name = "\improper Trade Station" name = "\improper Trade Station"
icon_state = "red" icon_state = "red"
dynamic_lighting = 0
/area/shuttle/trade/centcom /area/shuttle/trade/centcom
name = "\improper Trade Shuttle CentCom" name = "\improper Trade Shuttle CentCom"

View File

@@ -1,15 +1,49 @@
// Areas.dm // Areas.dm
// ===
/area /area
var/fire = null
var/atmos = 1
var/atmosalm = 0
var/poweralm = 1
var/party = null
level = null
name = "Unknown"
icon = 'icons/turf/areas.dmi'
icon_state = "unknown"
plane = PLANE_LIGHTING_ABOVE //In case we color them
luminosity = 0
mouse_opacity = 0
var/lightswitch = 1
var/eject = null
var/debug = 0
var/requires_power = 1
var/always_unpowered = 0 //this gets overriden to 1 for space in area/New()
var/power_equip = 1
var/power_light = 1
var/power_environ = 1
var/music = null
var/used_equip = 0
var/used_light = 0
var/used_environ = 0
var/has_gravity = 1
var/obj/machinery/power/apc/apc = null
var/no_air = null
// var/list/lights // list of all lights on this area
var/list/all_doors = null //Added by Strumpetplaya - Alarm Change - Contains a list of doors adjacent to this area
var/firedoors_closed = 0
var/list/ambience = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg')
var/list/forced_ambience = null
var/sound_env = STANDARD_STATION
var/turf/base_turf //The base turf type of the area, which can be used to override the z-level's base turf
var/global/global_uid = 0 var/global/global_uid = 0
var/uid var/uid
/area/New() /area/New()
icon_state = "" icon_state = ""
layer = 10
uid = ++global_uid uid = ++global_uid
all_areas += src all_areas += src
@@ -275,7 +309,7 @@ var/list/mob/living/forced_ambiance_list = new
chosen_ambiance = sound(chosen_ambiance, repeat = 1, wait = 0, volume = 25, channel = CHANNEL_AMBIENCE_FORCED) chosen_ambiance = sound(chosen_ambiance, repeat = 1, wait = 0, volume = 25, channel = CHANNEL_AMBIENCE_FORCED)
L << chosen_ambiance L << chosen_ambiance
else else
L << sound(null, channel = 1) L << sound(null, channel = CHANNEL_AMBIENCE_FORCED)
else if(src.ambience.len && prob(35)) else if(src.ambience.len && prob(35))
if((world.time >= L.client.played + 600)) if((world.time >= L.client.played + 600))
var/sound = pick(ambience) var/sound = pick(ambience)
@@ -345,3 +379,37 @@ var/list/mob/living/forced_ambiance_list = new
/area/drop_location() /area/drop_location()
CRASH("Bad op: area/drop_location() called") CRASH("Bad op: area/drop_location() called")
/*Adding a wizard area teleport list because motherfucking lag -- Urist*/
/*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/
var/list/teleportlocs = list()
/hook/startup/proc/setupTeleportLocs()
for(var/area/AR in world)
if(istype(AR, /area/shuttle) || istype(AR, /area/syndicate_station) || istype(AR, /area/wizard_station)) continue
if(teleportlocs.Find(AR.name)) continue
var/turf/picked = pick(get_area_turfs(AR.type))
if (picked.z in using_map.station_levels)
teleportlocs += AR.name
teleportlocs[AR.name] = AR
teleportlocs = sortAssoc(teleportlocs)
return 1
var/list/ghostteleportlocs = list()
/hook/startup/proc/setupGhostTeleportLocs()
for(var/area/AR in world)
if(ghostteleportlocs.Find(AR.name)) continue
if(istype(AR, /area/aisat) || istype(AR, /area/derelict) || istype(AR, /area/tdome) || istype(AR, /area/shuttle/specops/centcom))
ghostteleportlocs += AR.name
ghostteleportlocs[AR.name] = AR
var/turf/picked = pick(get_area_turfs(AR.type))
if (picked.z in using_map.player_levels)
ghostteleportlocs += AR.name
ghostteleportlocs[AR.name] = AR
ghostteleportlocs = sortAssoc(ghostteleportlocs)
return 1

View File

@@ -1,5 +1,5 @@
/atom /atom
layer = 2 layer = TURF_LAYER //This was here when I got here. Why though?
var/level = 2 var/level = 2
var/flags = 0 var/flags = 0
var/list/fingerprints var/list/fingerprints

View File

@@ -1,5 +1,5 @@
/atom/movable /atom/movable
layer = 3 layer = OBJ_LAYER
appearance_flags = TILE_BOUND|PIXEL_SCALE appearance_flags = TILE_BOUND|PIXEL_SCALE
var/last_move = null var/last_move = null
var/anchored = 0 var/anchored = 0
@@ -18,6 +18,7 @@
var/icon_scale = 1 // Used to scale icons up or down in update_transform(). var/icon_scale = 1 // Used to scale icons up or down in update_transform().
var/old_x = 0 var/old_x = 0
var/old_y = 0 var/old_y = 0
var/datum/riding/riding_datum //VOREStation Add - Moved from /obj/vehicle
/atom/movable/Destroy() /atom/movable/Destroy()
. = ..() . = ..()
@@ -37,6 +38,7 @@
if (pulledby.pulling == src) if (pulledby.pulling == src)
pulledby.pulling = null pulledby.pulling = null
pulledby = null pulledby = null
qdel_null(riding_datum) //VOREStation Add
/atom/movable/Bump(var/atom/A, yes) /atom/movable/Bump(var/atom/A, yes)
if(src.throwing) if(src.throwing)

View File

@@ -0,0 +1,12 @@
/atom/movable/proc/Bump_vr(var/atom/A, yes)
return
/atom/movable/set_dir(newdir)
. = ..(newdir)
if(riding_datum)
riding_datum.handle_vehicle_offsets()
/atom/movable/relaymove(mob/user, direction)
. = ..()
if(riding_datum)
riding_datum.handle_ride(user, direction)

View File

@@ -0,0 +1,698 @@
//cast_method flags, needs to be up to date with Technomancer's. They were, for some reason, not working outside it.
#define CAST_USE 1 // Clicking the spell in your hand.
#define CAST_MELEE 2 // Clicking an atom in melee range.
#define CAST_RANGED 4 // Clicking an atom beyond melee range.
#define CAST_THROW 8 // Throwing the spell and hitting an atom.
#define CAST_COMBINE 16 // Clicking another spell with this spell.
#define CAST_INNATE 32 // Activates upon verb usage, used for mobs without hands.
//Aspects
#define ASPECT_FIRE "fire" //Damage over time and raising body-temp. Firesuits protect from this.
#define ASPECT_FROST "frost" //Slows down the affected, also involves imbedding with icicles. Winter coats protect from this.
#define ASPECT_SHOCK "shock" //Energy-expensive, usually stuns. Insulated armor protects from this.
#define ASPECT_AIR "air" //Mostly involves manipulation of atmos, useless in a vacuum. Magboots protect from this.
#define ASPECT_FORCE "force" //Manipulates gravity to push things away or towards a location.
#define ASPECT_TELE "tele" //Teleportation of self, other objects, or other people.
#define ASPECT_DARK "dark" //Makes all those photons vanish using magic-- WITH SCIENCE. Used for sneaky stuff.
#define ASPECT_LIGHT "light" //The opposite of dark, usually blinds, makes holo-illusions, or makes laser lightshows.
#define ASPECT_BIOMED "biomed" //Mainly concerned with healing and restoration.
#define ASPECT_EMP "emp" //Unused now.
#define ASPECT_UNSTABLE "unstable" //Heavily RNG-based, causes instability to the victim.
#define ASPECT_CHROMATIC "chromatic" //Used to combine with other spells.
#define ASPECT_UNHOLY "unholy" //Involves the dead, blood, and most things against divine beings.
//////////////////////////////Construct Spells/////////////////////////
proc/findNullRod(var/atom/target)
if(istype(target,/obj/item/weapon/nullrod))
return 1
else if(target.contents)
for(var/atom/A in target.contents)
if(findNullRod(A))
return 1
return 0
/spell/aoe_turf/conjure/construct
name = "Artificer"
desc = "This spell conjures a construct which may be controlled by Shades"
school = "conjuration"
charge_max = 600
spell_flags = 0
invocation = "none"
invocation_type = SpI_NONE
range = 0
summon_type = list(/obj/structure/constructshell)
hud_state = "artificer"
/spell/aoe_turf/conjure/construct/lesser
charge_max = 1800
summon_type = list(/obj/structure/constructshell/cult)
hud_state = "const_shell"
override_base = "const"
/spell/aoe_turf/conjure/floor
name = "Floor Construction"
desc = "This spell constructs a cult floor"
charge_max = 20
spell_flags = Z2NOCAST | CONSTRUCT_CHECK
invocation = "none"
invocation_type = SpI_NONE
range = 0
summon_type = list(/turf/simulated/floor/cult)
hud_state = "const_floor"
/spell/aoe_turf/conjure/floor/conjure_animation(var/atom/movable/overlay/animation, var/turf/target)
animation.icon_state = "cultfloor"
flick("cultfloor",animation)
spawn(10)
qdel(animation)
/spell/aoe_turf/conjure/wall
name = "Lesser Construction"
desc = "This spell constructs a cult wall"
charge_max = 100
spell_flags = Z2NOCAST | CONSTRUCT_CHECK
invocation = "none"
invocation_type = SpI_NONE
range = 0
summon_type = list(/turf/simulated/wall/cult)
hud_state = "const_wall"
/spell/aoe_turf/conjure/wall/conjure_animation(var/atom/movable/overlay/animation, var/turf/target)
animation.icon_state = "cultwall"
flick("cultwall",animation)
spawn(10)
qdel(animation)
/spell/aoe_turf/conjure/wall/reinforced
name = "Greater Construction"
desc = "This spell constructs a reinforced metal wall"
charge_max = 300
spell_flags = Z2NOCAST
invocation = "none"
invocation_type = SpI_NONE
range = 0
cast_delay = 50
summon_type = list(/turf/simulated/wall/r_wall)
/spell/aoe_turf/conjure/soulstone
name = "Summon Soulstone"
desc = "This spell reaches into Nar-Sie's realm, summoning one of the legendary fragments across time and space"
charge_max = 3000
spell_flags = 0
invocation = "none"
invocation_type = SpI_NONE
range = 0
summon_type = list(/obj/item/device/soulstone)
hud_state = "const_stone"
override_base = "const"
/spell/aoe_turf/conjure/pylon
name = "Red Pylon"
desc = "This spell conjures a fragile crystal from Nar-Sie's realm. Makes for a convenient light source."
charge_max = 200
spell_flags = CONSTRUCT_CHECK
invocation = "none"
invocation_type = SpI_NONE
range = 0
summon_type = list(/obj/structure/cult/pylon)
hud_state = "const_pylon"
/spell/aoe_turf/conjure/pylon/cast(list/targets)
..()
var/turf/spawn_place = pick(targets)
for(var/obj/structure/cult/pylon/P in spawn_place.contents)
if(P.isbroken)
P.repair(usr)
continue
return
/spell/aoe_turf/conjure/door
name = "Stone Door"
desc = "This spell conjures a massive stone door."
charge_max = 100
spell_flags = CONSTRUCT_CHECK
invocation = "none"
invocation_type = SpI_NONE
range = 0
summon_type = list(/obj/structure/simple_door/cult)
hud_state = "const_door"
/spell/aoe_turf/conjure/grille
name = "Arcane Grille"
desc = "This spell conjures an airtight grille."
charge_max = 100
spell_flags = CONSTRUCT_CHECK
invocation = "none"
invocation_type = SpI_NONE
range = 0
summon_type = list(/obj/structure/grille/cult)
hud_state = "const_grille"
/spell/aoe_turf/conjure/forcewall/lesser
name = "Shield"
desc = "Allows you to pull up a shield to protect yourself and allies from incoming threats"
charge_max = 300
spell_flags = 0
invocation = "none"
invocation_type = SpI_NONE
range = 0
summon_type = list(/obj/effect/forcefield/cult)
duration = 200
hud_state = "const_juggwall"
//Code for the Juggernaut construct's forcefield, that seemed like a good place to put it.
/obj/effect/forcefield/cult
desc = "That eerie looking obstacle seems to have been pulled from another dimension through sheer force"
name = "Juggerwall"
icon = 'icons/effects/effects.dmi'
icon_state = "m_shield_cult"
light_color = "#B40000"
light_range = 2
/obj/effect/forcefield/cult/cultify()
return
/spell/aoe_turf/knock/harvester
name = "Force Doors"
desc = "Mortal portals are no match for your occult might."
spell_flags = CONSTRUCT_CHECK
charge_max = 100
invocation = ""
invocation_type = "silent"
range = 4
hud_state = "const_knock"
/spell/aoe_turf/knock/harvester/cast(list/targets)
/* for(var/turf/T in targets) //Disintigrating doors is bad, okay.
for(var/obj/machinery/door/door in T.contents)
spawn door.cultify()
return */
for(var/turf/T in targets)
for(var/obj/machinery/door/door in T.contents)
spawn(1)
if(istype(door,/obj/machinery/door/airlock))
var/obj/machinery/door/airlock/AL = door
AL.locked = 0 //The spirits of the damned care not for your locks.
AL.welded = 0 //Or your welding tools.
else if(istype(door, /obj/machinery/door/firedoor))
var/obj/machinery/door/firedoor/FD = door
FD.blocked = 0
door.open(1)
return
/*
*
* Self-targeting spells. Modifiers, auras, instants, etc.
*
*/
/spell/targeted/ethereal_jaunt/shift
name = "Phase Shift"
desc = "This spell allows you to pass through walls"
charge_max = 200
spell_flags = Z2NOCAST | INCLUDEUSER | CONSTRUCT_CHECK
invocation_type = SpI_NONE
range = -1
duration = 50 //in deciseconds
hud_state = "const_shift"
/spell/targeted/ethereal_jaunt/shift/jaunt_disappear(var/atom/movable/overlay/animation, var/mob/living/target)
animation.icon_state = "phase_shift"
animation.dir = target.dir
flick("phase_shift",animation)
/spell/targeted/ethereal_jaunt/shift/jaunt_reappear(var/atom/movable/overlay/animation, var/mob/living/target)
animation.icon_state = "phase_shift2"
animation.dir = target.dir
flick("phase_shift2",animation)
/spell/targeted/ethereal_jaunt/shift/jaunt_steam(var/mobloc)
return
/*
* Harvest has been disabled due to the lack of Nar'Sie. Here for posterity / future rework.
*/
/*
/spell/targeted/harvest
name = "Harvest"
desc = "Back to where I come from, and you're coming with me."
school = "transmutation"
charge_max = 200
spell_flags = Z2NOCAST | CONSTRUCT_CHECK | INCLUDEUSER
invocation = ""
invocation_type = SpI_NONE
range = 0
max_targets = 0
overlay = 1
overlay_icon = 'icons/effects/effects.dmi'
overlay_icon_state = "rune_teleport"
overlay_lifespan = 0
hud_state = "const_harvest"
/spell/targeted/harvest/cast(list/targets, mob/user)//because harvest is already a proc
..()
var/destination = null
for(var/obj/singularity/narsie/large/N in narsie_list)
destination = N.loc
break
if(destination)
var/prey = 0
for(var/mob/living/M in targets)
if(!findNullRod(M))
M.forceMove(destination)
if(M != user)
prey = 1
user << "<span class='sinister'>You warp back to Nar-Sie[prey ? " along with your prey":""].</span>"
else
user << "<span class='danger'>...something's wrong!</span>"//There shouldn't be an instance of Harvesters when Nar-Sie isn't in the world.
*/
/spell/targeted/fortify
name = "Fortify Shell"
desc = "Emit a field of energy around your shell to reduce incoming damage incredibly, while decreasing your mobility."
range = -1
school = "evocation"
charge_type = Sp_RECHARGE
invocation_type = SpI_NONE
spell_flags = CONSTRUCT_CHECK | INCLUDEUSER
hud_state = "const_fortify"
smoke_amt = 0
charge_max = 600
/spell/targeted/fortify/cast(list/targets, mob/living/user)
if(findNullRod(user) || user.has_modifier_of_type(/datum/modifier/fortify))
charge_counter = 400
return
user.add_modifier(/datum/modifier/fortify, 1 MINUTES)
/spell/targeted/occult_repair_aura
name = "Repair Aura"
desc = "Emit a field of energy around your shell to repair nearby constructs at range."
range = -1
school = "evocation"
charge_type = Sp_RECHARGE
invocation_type = SpI_NONE
spell_flags = CONSTRUCT_CHECK | INCLUDEUSER
hud_state = "const_repairaura"
smoke_amt = 0
charge_max = 600
/spell/targeted/occult_repair_aura/cast(list/targets, mob/living/user)
if(findNullRod(user) || user.has_modifier_of_type(/datum/modifier/repair_aura))
charge_counter = 300
return
user.add_modifier(/datum/modifier/repair_aura, 30 SECONDS)
/spell/targeted/ambush_mode
name = "Toggle Ambush"
desc = "Phase yourself mostly out of this reality, minimizing your combat ability, but allowing for employance of ambush tactics."
range = -1
school = "evocation"
charge_type = Sp_RECHARGE
invocation_type = SpI_NONE
spell_flags = CONSTRUCT_CHECK | INCLUDEUSER
hud_state = "const_ambush"
smoke_amt = 0
charge_max = 100
/spell/targeted/ambush_mode/cast(list/targets, mob/living/user)
if(findNullRod(user))
charge_counter = 50
return
if(user.has_modifier_of_type(/datum/modifier/ambush))
user.remove_modifiers_of_type(/datum/modifier/ambush)
return
user.add_modifier(/datum/modifier/ambush, 0)
/*
*
* These are the spells that place spell-objects into the construct's hands akin to technomancers.
*
*/
/spell/targeted/construct_advanced
name = "Base Construct Spell"
desc = "If you see this, please tell a developer!"
range = -1
school = "evocation"
charge_type = Sp_RECHARGE
invocation_type = SpI_NONE
spell_flags = CONSTRUCT_CHECK | INCLUDEUSER
hud_state = "const_rune"
smoke_amt = 0
charge_max = 10
var/obj/item/weapon/spell/construct/spell_obj = null //This is the var that determines what Technomancer-style spell is put into their hands.
/spell/targeted/construct_advanced/cast(list/targets, mob/living/user)
if(!findNullRod(user))
user.place_spell_in_hand(spell_obj)
/spell/targeted/construct_advanced/inversion_beam
name = "Inversion Beam"
desc = "Fire a searing beam of darkness at your foes."
hud_state = "const_beam"
spell_obj = /obj/item/weapon/spell/construct/projectile/inverted_beam
/spell/targeted/construct_advanced/mend_acolyte
name = "Mend Acolyte"
desc = "Mend a target acolyte or construct over time."
charge_max = 100
hud_state = "const_mend"
spell_obj = /obj/item/weapon/spell/construct/mend_occult
/spell/targeted/construct_advanced/agonizing_sphere
name = "Sphere of Agony"
desc = "Rend a portal into a plane of naught but pain at the target location."
charge_max = 100
hud_state = "const_harvest"
spell_obj = /obj/item/weapon/spell/construct/spawner/agonizing_sphere
/spell/targeted/construct_advanced/slam
name = "Slam"
desc = "Empower your FIST."
charge_max = 300
hud_state = "const_fist"
spell_obj = /obj/item/weapon/spell/construct/slam
/*
*
* These are the spell objects that go into the construct's hands.
*
*/
/*
* Base advanced construct spell types.
*/
/obj/item/weapon/spell/construct //Energy costs are in units of blood, in the event a cultist gets one of these.
name = "unholy energy"
desc = "Your hands appear to be screaming. This is a debug text, you should probably tell a developer!"
icon = 'icons/obj/spells.dmi'
icon_state = "generic"
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_spells.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_spells.dmi',
)
throwforce = 0
force = 0
show_examine = FALSE
owner = null
core = null
cast_methods = null // Controls how the spell is casted.
aspect = ASPECT_UNHOLY // Used for combining spells. Pretty much any cult spell is unholy.
toggled = 0 // Mainly used for overlays.
cooldown = 0 // If set, will add a cooldown overlay and adjust click delay. Must be a multiple of 5 for overlays.
cast_sound = null // Sound file played when this is used.
var/last_castcheck = null // The last time this spell was cast.
/obj/item/weapon/spell/construct/New()
//..() //This kills the spell, because super on this calls the default spell's New, which checks for a core. Can't have that.
if(isliving(loc))
owner = loc
if(!owner)
qdel(src)
update_icon()
/obj/item/weapon/spell/construct/adjust_instability(var/amount) //The only drawback to the boons of the geometer is the use of a mortal's blood as fuel. Constructs have already paid that price long ago.
return
/obj/item/weapon/spell/construct/run_checks()
if(owner)
if((iscultist(owner) || istype(owner, /mob/living/simple_animal/construct)) && (world.time >= (last_castcheck + cooldown))) //Are they a cultist or a construct, and has the cooldown time passed?
last_castcheck = world.time
return 1
return 0
/obj/item/weapon/spell/construct/pay_energy(var/amount)
if(owner)
if(istype(owner, /mob/living/simple_animal/construct))
return 1
if(iscultist(owner) && pay_blood(amount))
return 1
return 0
/obj/item/weapon/spell/construct/proc/pay_blood(var/amount) //If, for some reason, this is put into the hands of a cultist, by a talisnam or whatever.
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
if(!H.should_have_organ(O_HEART))
return 1
if(H.vessel.remove_reagent("blood", amount))
return 1
return 0
/obj/item/weapon/spell/construct/afterattack(atom/target, mob/user, proximity_flag, click_parameters) //Not overriding it caused runtimes, because cooldown checked for core.
if(!run_checks())
return
if(!proximity_flag)
if(cast_methods & CAST_RANGED)
on_ranged_cast(target, user)
else
if(istype(target, /obj/item/weapon/spell))
var/obj/item/weapon/spell/spell = target
if(spell.cast_methods & CAST_COMBINE)
spell.on_combine_cast(src, user)
return
if(cast_methods & CAST_MELEE)
on_melee_cast(target, user)
else if(cast_methods & CAST_RANGED) //Try to use a ranged method if a melee one doesn't exist.
on_ranged_cast(target, user)
if(cooldown)
var/effective_cooldown = round(cooldown, 5)
user.setClickCooldown(effective_cooldown)
flick("cooldown_[effective_cooldown]",src)
/obj/item/weapon/spell/construct/projectile //This makes me angry, but we need the template, and we can't use it because special check overrides on the base.
name = "construct projectile template"
icon_state = "generic"
desc = "This is a generic template that shoots projectiles. If you can read this, the game broke!"
cast_methods = CAST_RANGED
var/obj/item/projectile/spell_projectile = null
var/pre_shot_delay = 0
var/fire_sound = null
var/energy_cost_per_shot = 5
/obj/item/weapon/spell/construct/projectile/on_ranged_cast(atom/hit_atom, mob/living/user)
if(set_up(hit_atom, user))
var/obj/item/projectile/new_projectile = make_projectile(spell_projectile, user)
new_projectile.launch(hit_atom)
log_and_message_admins("has casted [src] at \the [hit_atom].")
if(fire_sound)
playsound(get_turf(src), fire_sound, 75, 1)
return 1
return 0
/obj/item/weapon/spell/construct/projectile/proc/make_projectile(obj/item/projectile/projectile_type, mob/living/user)
var/obj/item/projectile/P = new projectile_type(get_turf(user))
return P
/obj/item/weapon/spell/construct/projectile/proc/set_up(atom/hit_atom, mob/living/user)
if(spell_projectile)
if(pay_energy(energy_cost_per_shot))
if(pre_shot_delay)
var/image/target_image = image(icon = 'icons/obj/spells.dmi', loc = get_turf(hit_atom), icon_state = "target")
user << target_image
user.Stun(pre_shot_delay / 10)
sleep(pre_shot_delay)
qdel(target_image)
if(owner)
return TRUE
return FALSE // We got dropped before the firing occured.
return TRUE // No delay, no need to check.
return FALSE
/obj/item/weapon/spell/construct/spawner
name = "spawner template"
desc = "If you see me, someone messed up."
icon_state = "darkness"
cast_methods = CAST_RANGED
var/obj/effect/spawner_type = null
/obj/item/weapon/spell/construct/spawner/on_ranged_cast(atom/hit_atom, mob/user)
var/turf/T = get_turf(hit_atom)
if(T)
new spawner_type(T)
to_chat(user, "<span class='cult'>You shift \the [src] onto \the [T].</span>")
log_and_message_admins("has casted [src] at [T.x],[T.y],[T.z].")
qdel(src)
//Harvester Laser.
/obj/item/weapon/spell/construct/projectile/inverted_beam
name = "inversion beam"
icon_state = "generic"
desc = "Your manipulators fire searing beams of inverted light."
cast_methods = CAST_RANGED
spell_projectile = /obj/item/projectile/beam/inversion
pre_shot_delay = 0
cooldown = 5
fire_sound = 'sound/weapons/spiderlunge.ogg'
/obj/item/projectile/beam/inversion
name = "inversion beam"
icon_state = "invert"
fire_sound = 'sound/weapons/spiderlunge.ogg'
damage = 15
damage_type = BURN
check_armour = "laser"
armor_penetration = 60
light_range = 2
light_power = -2
light_color = "#FFFFFF"
muzzle_type = /obj/effect/projectile/inversion/muzzle
tracer_type = /obj/effect/projectile/inversion/tracer
impact_type = /obj/effect/projectile/inversion/impact
//Harvester Pain Orb
/obj/item/weapon/spell/construct/spawner/agonizing_sphere
name = "sphere of agony"
desc = "Call forth a portal to a dimension of naught but pain at your target."
spawner_type = /obj/effect/temporary_effect/pulsar/agonizing_sphere
/obj/item/weapon/spell/construct/spawner/agonizing_sphere/on_ranged_cast(atom/hit_atom, mob/user)
if(within_range(hit_atom) && pay_energy(10))
..()
/obj/item/weapon/spell/construct/spawner/agonizing_sphere/on_throw_cast(atom/hit_atom, mob/user)
pay_energy(5)
if(isliving(hit_atom))
var/mob/living/L = hit_atom
L.add_modifier(/datum/modifier/agonize, 10 SECONDS)
/obj/effect/temporary_effect/pulsar/agonizing_sphere
name = "agonizing sphere"
desc = "A portal to some hellish place. Its screams wrack your body with pain.."
icon_state = "red_static_sphere"
time_to_die = null
light_range = 4
light_power = 5
light_color = "#FF0000"
pulses_remaining = 10
/obj/effect/temporary_effect/pulsar/agonizing_sphere/pulse_loop()
while(pulses_remaining)
sleep(1 SECONDS)
spawn()
for(var/mob/living/L in view(4,src))
if(!iscultist(L) && !istype(L, /mob/living/simple_animal/construct))
L.add_modifier(/datum/modifier/agonize, 2 SECONDS)
if(L.isSynthetic())
to_chat(L, "<span class='cult'>Your chassis warps as the [src] pulses!</span>")
L.adjustFireLoss(4)
pulses_remaining--
qdel(src)
//Artificer Heal
/obj/item/weapon/spell/construct/mend_occult
name = "mend acolyte"
desc = "Mend the wounds of a cultist, or construct, over time."
icon_state = "mend_wounds"
cast_methods = CAST_MELEE
aspect = ASPECT_UNHOLY
light_color = "#FF5C5C"
light_power = -2
/obj/item/weapon/spell/construct/mend_occult/on_melee_cast(atom/hit_atom, mob/living/user, def_zone)
if(isliving(hit_atom))
var/mob/living/L = hit_atom
L.add_modifier(/datum/modifier/mend_occult, 150)
qdel(src)
//Juggernaut + Behemoth Slam
/obj/item/weapon/spell/construct/slam
name = "slam"
desc = "Empower your FIST, to send an opponent flying."
icon_state = "toggled_old"
cast_methods = CAST_MELEE
aspect = ASPECT_UNHOLY
light_color = "#FF5C5C"
light_power = -2
cooldown = 15
/obj/item/weapon/spell/construct/slam/on_melee_cast(atom/hit_atom, mob/living/user, def_zone)
var/attack_message = "slams"
if(istype(user, /mob/living/simple_animal))
var/mob/living/simple_animal/S = user
attack_message = pick(S.attacktext)
if(isliving(hit_atom))
var/mob/living/L = hit_atom
L.visible_message("<span class='danger'>\The [user] [attack_message] \the [L], sending them flying!</span>")
playsound(src, "punch", 50, 1)
L.Weaken(2)
L.adjustBruteLoss(rand(30, 50))
var/throwdir = get_dir(src, L)
L.throw_at(get_edge_target_turf(L, throwdir), 3, 1, src)
if(istype(hit_atom, /turf/simulated/wall))
var/turf/simulated/wall/W = hit_atom
user.visible_message("<span class='warning'>\The [user] rears its fist, preparing to hit \the [W]!</span>")
var/windup = cooldown
if(W.reinf_material)
windup = cooldown * 2
if(do_after(user, windup))
W.visible_message("<span class='danger'>\The [user] [attack_message] \the [W], obliterating it!</span>")
W.dismantle_wall(1)
else
user.visible_message("<span class='notice'>\The [user] lowers its fist.</span>")
return
qdel(src)

View File

@@ -14,20 +14,21 @@
return return
/obj/item/weapon/melee/cultblade/attack(mob/living/M, mob/living/user, var/target_zone) /obj/item/weapon/melee/cultblade/attack(mob/living/M, mob/living/user, var/target_zone)
if(iscultist(user)) if(iscultist(user) && !istype(user, /mob/living/simple_animal/construct))
return ..() return ..()
var/zone = (user.hand ? "l_arm":"r_arm") var/zone = (user.hand ? "l_arm":"r_arm")
if(ishuman(user)) if(ishuman(user))
var/mob/living/carbon/human/H = user var/mob/living/carbon/human/H = user
var/obj/item/organ/external/affecting = H.get_organ(zone) var/obj/item/organ/external/affecting = H.get_organ(zone)
user << "<span class='danger'>An unexplicable force rips through your [affecting.name], tearing the sword from your grasp!</span>" to_chat(user, "<span class='danger'>An inexplicable force rips through your [affecting.name], tearing the sword from your grasp!</span>")
else
user << "<span class='danger'>An unexplicable force rips through you, tearing the sword from your grasp!</span>"
//random amount of damage between half of the blade's force and the full force of the blade. //random amount of damage between half of the blade's force and the full force of the blade.
user.apply_damage(rand(force/2, force), BRUTE, zone, 0, sharp=1, edge=1) user.apply_damage(rand(force/2, force), BRUTE, zone, 0, sharp=1, edge=1)
user.Weaken(5) user.Weaken(5)
else if(!istype(user, /mob/living/simple_animal/construct))
to_chat(user, "<span class='danger'>An inexplicable force rips through you, tearing the sword from your grasp!</span>")
else
to_chat(user, "<span class='critical'>The blade hisses, forcing itself from your manipulators. \The [src] will only allow mortals to wield it against foes, not kin.</span>")
user.drop_from_inventory(src, src.loc) user.drop_from_inventory(src, src.loc)
throw_at(get_edge_target_turf(src, pick(alldirs)), rand(1,3), throw_speed) throw_at(get_edge_target_turf(src, pick(alldirs)), rand(1,3), throw_speed)
@@ -38,10 +39,11 @@
return 1 return 1
/obj/item/weapon/melee/cultblade/pickup(mob/living/user as mob) /obj/item/weapon/melee/cultblade/pickup(mob/living/user as mob)
if(!iscultist(user)) if(!iscultist(user) && !istype(user, /mob/living/simple_animal/construct))
user << "<span class='warning'>An overwhelming feeling of dread comes over you as you pick up the cultist's sword. It would be wise to be rid of this blade quickly.</span>" to_chat(user, "<span class='warning'>An overwhelming feeling of dread comes over you as you pick up the cultist's sword. It would be wise to be rid of this blade quickly.</span>")
user.make_dizzy(120) user.make_dizzy(120)
if(istype(user, /mob/living/simple_animal/construct))
to_chat(user, "<span class='warning'>\The [src] hisses, as it is discontent with your acquisition of it. It would be wise to return it to a worthy mortal quickly.</span>")
/obj/item/clothing/head/culthood /obj/item/clothing/head/culthood
name = "cult hood" name = "cult hood"

View File

@@ -10,7 +10,7 @@
announce=0 announce=0
cause_hell=0 cause_hell=0
layer=LIGHTING_LAYER+2 // ITS SO BRIGHT plane = PLANE_LIGHTING_ABOVE // ITS SO BRIGHT
consume_range = 6 consume_range = 6
@@ -38,13 +38,13 @@
var/mob/living/L = A var/mob/living/L = A
if(L.buckled && istype(L.buckled,/obj/structure/bed/)) if(L.buckled && istype(L.buckled,/obj/structure/bed/))
var/turf/O = L.buckled var/turf/O = L.buckled
do_teleport(O, pick(endgame_safespawns)) do_teleport(O, pick(endgame_safespawns), local = FALSE) //VOREStation Edit
L.loc = O.loc L.loc = O.loc
else else
do_teleport(L, pick(endgame_safespawns)) //dead-on precision do_teleport(L, pick(endgame_safespawns), local = FALSE) //dead-on precision //VOREStation Edit
else if (istype(A, /obj/mecha/)) else if (istype(A, /obj/mecha/))
do_teleport(A, pick(endgame_safespawns)) //dead-on precision do_teleport(A, pick(endgame_safespawns), local = FALSE) //dead-on precision //VOREStation Edit
else if (isturf(A)) else if (isturf(A))
var/turf/T = A var/turf/T = A
@@ -79,7 +79,8 @@
var/turf/T_mob = get_turf(src) var/turf/T_mob = get_turf(src)
if((R.z == T_mob.z) && (get_dist(R,T_mob) <= (R.consume_range+10)) && !(R in view(T_mob))) if((R.z == T_mob.z) && (get_dist(R,T_mob) <= (R.consume_range+10)) && !(R in view(T_mob)))
if(!riftimage) if(!riftimage)
riftimage = image('icons/obj/rift.dmi',T_mob,"rift",LIGHTING_LAYER+2,1) riftimage = image('icons/obj/rift.dmi',T_mob,"rift",1,1)
riftimage.plane = PLANE_LIGHTING_ABOVE
riftimage.mouse_opacity = 0 riftimage.mouse_opacity = 0
var/new_x = 32 * (R.x - T_mob.x) + R.pixel_x var/new_x = 32 * (R.x - T_mob.x) + R.pixel_x

View File

@@ -140,6 +140,7 @@
SpinAnimation() SpinAnimation()
/obj/effect/meteor/Bump(atom/A) /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)
if(A.handle_meteor_impact(src)) // Used for special behaviour when getting hit specifically by a meteor, like a shield. 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)) ram_turf(get_turf(A))

View File

@@ -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

View File

@@ -19,6 +19,7 @@
#define ASPECT_EMP "emp" //Unused now. #define ASPECT_EMP "emp" //Unused now.
#define ASPECT_UNSTABLE "unstable" //Heavily RNG-based, causes instability to the victim. #define ASPECT_UNSTABLE "unstable" //Heavily RNG-based, causes instability to the victim.
#define ASPECT_CHROMATIC "chromatic" //Used to combine with other spells. #define ASPECT_CHROMATIC "chromatic" //Used to combine with other spells.
#define ASPECT_UNHOLY "unholy" //Involves the dead, blood, and most things against divine beings.
/obj/item/weapon/spell /obj/item/weapon/spell
name = "glowing particles" name = "glowing particles"

View File

@@ -413,6 +413,7 @@ var/global/datum/controller/occupations/job_master
job.equip_backpack(H) job.equip_backpack(H)
// job.equip_survival(H) // job.equip_survival(H)
job.apply_fingerprints(H) job.apply_fingerprints(H)
if(job.title != "Cyborg" && job.title != "AI")
H.equip_post_job() H.equip_post_job()
//If some custom items could not be equipped before, try again now. //If some custom items could not be equipped before, try again now.

View File

@@ -4,7 +4,7 @@
name = "Bluespace Gigabeacon" name = "Bluespace Gigabeacon"
desc = "A device that draws power from bluespace and creates a permanent tracking beacon." desc = "A device that draws power from bluespace and creates a permanent tracking beacon."
level = 1 // underfloor level = 1 // underfloor
layer = 2.5 layer = UNDER_JUNK_LAYER
anchored = 1 anchored = 1
use_power = 1 use_power = 1
idle_power_usage = 0 idle_power_usage = 0

View File

@@ -2,7 +2,6 @@
name = "\improper AI Liquid Dispenser" name = "\improper AI Liquid Dispenser"
icon = 'icons/obj/device.dmi' icon = 'icons/obj/device.dmi'
icon_state = "motion0" icon_state = "motion0"
layer = 3
anchored = 1.0 anchored = 1.0
use_power = 1 use_power = 1
idle_power_usage = 10 idle_power_usage = 10

View File

@@ -1,6 +1,7 @@
/obj/machinery/portable_atmospherics /obj/machinery/portable_atmospherics
name = "atmoalter" name = "atmoalter"
use_power = 0 use_power = 0
layer = OBJ_LAYER // These are mobile, best not be under everything.
var/datum/gas_mixture/air_contents = new var/datum/gas_mixture/air_contents = new
var/obj/machinery/atmospherics/portables_connector/connected_port var/obj/machinery/atmospherics/portables_connector/connected_port

View File

@@ -6,7 +6,8 @@
use_power = 2 use_power = 2
idle_power_usage = 5 idle_power_usage = 5
active_power_usage = 10 active_power_usage = 10
layer = 5 plane = MOB_PLANE
layer = ABOVE_MOB_LAYER
var/list/network = list(NETWORK_DEFAULT) var/list/network = list(NETWORK_DEFAULT)
var/c_tag = null var/c_tag = null
@@ -141,6 +142,18 @@
add_hiddenprint(user) add_hiddenprint(user)
destroy() destroy()
/obj/machinery/camera/attack_generic(mob/user as mob)
if(isanimal(user))
var/mob/living/simple_animal/S = user
set_status(0)
S.do_attack_animation(src)
S.setClickCooldown(user.get_attack_speed())
visible_message("<span class='warning'>\The [user] [pick(S.attacktext)] \the [src]!</span>")
playsound(src.loc, S.attack_sound, 100, 1)
add_hiddenprint(user)
destroy()
..()
/obj/machinery/camera/attackby(obj/item/W as obj, mob/living/user as mob) /obj/machinery/camera/attackby(obj/item/W as obj, mob/living/user as mob)
update_coverage() update_coverage()
// DECONSTRUCTION // DECONSTRUCTION

View File

@@ -1,7 +1,7 @@
/obj/machinery/camera /obj/machinery/camera
layer = 4 layer = BELOW_MOB_LAYER
/obj/machinery/camera/New() /obj/machinery/camera/New()
..() ..()
if (dir == 1) // idk why the fuck dir is not 2 if (dir == NORTH)
layer = 5 layer = ABOVE_MOB_LAYER

View File

@@ -271,6 +271,8 @@
/obj/machinery/computer/arcade/battle/emag_act(var/charges, var/mob/user) /obj/machinery/computer/arcade/battle/emag_act(var/charges, var/mob/user)
if(!emagged) 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!" temp = "If you die in the game, you die for real!"
player_hp = 30 player_hp = 30
player_mp = 10 player_mp = 10
@@ -399,18 +401,18 @@
dat += "<br>You ran out of food and starved." dat += "<br>You ran out of food and starved."
if(emagged) if(emagged)
user.nutrition = 0 //yeah you pretty hongry user.nutrition = 0 //yeah you pretty hongry
user << "<span class='danger'><font size=3>Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor.</font></span>" to_chat(user, span("danger", "<font size=3>Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor.</font>"))
if(fuel <= 0) if(fuel <= 0)
dat += "<br>You ran out of fuel, and drift, slowly, into a star." dat += "<br>You ran out of fuel, and drift, slowly, into a star."
if(emagged) if(emagged)
var/mob/living/M = user var/mob/living/M = user
M.adjust_fire_stacks(5) M.adjust_fire_stacks(5)
M.IgniteMob() //flew into a star, so you're on fire M.IgniteMob() //flew into a star, so you're on fire
user << "<span class='danger'><font size=3>You feel an immense wave of heat emanate from \the [src]. Your skin bursts into flames.</font></span>" to_chat(user,span("danger", "<font size=3>You feel an immense wave of heat emanate from \the [src]. Your skin bursts into flames.</font>"))
dat += "<br><P ALIGN=Right><a href='byond://?src=\ref[src];menu=1'>OK...</a></P>" dat += "<br><P ALIGN=Right><a href='byond://?src=\ref[src];menu=1'>OK...</a></P>"
if(emagged) if(emagged)
user << "<span class='danger'><font size=3>You're never going to make it to Orion...</span></font>" to_chat(user, span("danger", "<font size=3>You're never going to make it to Orion...</font>"))
user.death() user.death()
emagged = 0 //removes the emagged status after you lose emagged = 0 //removes the emagged status after you lose
gameStatus = ORION_STATUS_START gameStatus = ORION_STATUS_START
@@ -475,20 +477,20 @@
switch(event) switch(event)
if(ORION_TRAIL_RAIDERS) if(ORION_TRAIL_RAIDERS)
if(prob(50)) if(prob(50))
usr << "<span class='warning'>You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?</span>" 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 M.hallucination += 30
else else
usr << "<span class='danger'>Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there...</span>" 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) M.take_organ_damage(25)
if(ORION_TRAIL_ILLNESS) if(ORION_TRAIL_ILLNESS)
var/severity = rand(1,3) //pray to RNGesus. PRAY, PIGS var/severity = rand(1,3) //pray to RNGesus. PRAY, PIGS
if(severity == 1) if(severity == 1)
M << "<span class='warning'>You suddenly feel slightly nauseous.</span>" //got off lucky to_chat(M, span("warning", "You suddenly feel slightly nauseous.")) //got off lucky
if(severity == 2) if(severity == 2)
usr << "<span class='warning'>You suddenly feel extremely nauseous and hunch over until it passes.</span>" to_chat(usr, span("warning", "You suddenly feel extremely nauseous and hunch over until it passes."))
M.Stun(3) M.Stun(3)
if(severity >= 3) //you didn't pray hard enough if(severity >= 3) //you didn't pray hard enough
M << "<span class='warning'>An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit.</span>" 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) spawn(30)
if(istype(M,/mob/living/carbon/human)) if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M 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.") 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) M.take_organ_damage(15)
else else
M << "<span class='warning'>A violent gale blows past you, and you barely manage to stay standing!</span>" 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(ORION_TRAIL_COLLISION) //by far the most damaging event
if(prob(90) && !hull) if(prob(90) && !hull)
var/turf/simulated/floor/F = src.loc var/turf/simulated/floor/F = src.loc
F.ChangeTurf(/turf/space) F.ChangeTurf(/turf/space)
src.visible_message("<span class='danger'>Something slams into the floor around \the [src], exposing it to space!", "You hear something crack and break.</span>") src.visible_message(span("danger", "Something slams into the floor around \the [src], exposing it to space!"), "You hear something crack and break.")
else else
src.visible_message("Something slams into the floor around \the [src] - luckily, it didn't get through!", "You hear something crack.") 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) if(ORION_TRAIL_MALFUNCTION)
@@ -573,9 +575,9 @@
event() event()
if(emagged) //has to be here because otherwise it doesn't work 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'") 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 << "<span class='warning'>Something draws you closer and closer to the machine.</span>" to_chat(usr, span("warning", "Something draws you closer and closer to the machine."))
sleep(10) sleep(10)
usr << "<span class='danger'>This is really starting to hurt!</span>" to_chat(usr, span("danger", "This is really starting to hurt!"))
var i; //spawning a literal blackhole would be fun, but a bit disruptive. var i; //spawning a literal blackhole would be fun, but a bit disruptive.
for(i=0;i<4;i++) for(i=0;i<4;i++)
var/mob/living/L = usr var/mob/living/L = usr
@@ -1001,12 +1003,12 @@
/obj/machinery/computer/arcade/orion_trail/emag_act(mob/user) /obj/machinery/computer/arcade/orion_trail/emag_act(mob/user)
if(!emagged) if(!emagged)
user << "<span class='notice'>You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode.</span>" 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" name = "The Orion Trail: Realism Edition"
desc = "Learn how our ancestors got to Orion, and try not to die in the process!" desc = "Learn how our ancestors got to Orion, and try not to die in the process!"
newgame() newgame()
emagged = 1 emagged = 1
return 1
/obj/item/weapon/orion_ship /obj/item/weapon/orion_ship
name = "model settler ship" name = "model settler ship"
@@ -1021,9 +1023,9 @@
if(!(in_range(user, src))) if(!(in_range(user, src)))
return return
if(!active) if(!active)
user << "<span class='notice'>There's a little switch on the bottom. It's flipped down.</span>" to_chat(user, span("notice", "There's a little switch on the bottom. It's flipped down."))
else else
user << "<span class='notice'>There's a little switch on the bottom. It's flipped up.</span>" 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) /obj/item/weapon/orion_ship/attack_self(mob/user)
if(active) if(active)
@@ -1032,17 +1034,17 @@
message_admins("[key_name_admin(usr)] primed an explosive Orion ship for detonation.") 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.") log_game("[key_name(usr)] primed an explosive Orion ship for detonation.")
user << "<span class='warning'>You flip the switch on the underside of [src].</span>" to_chat(user, span("warning", "You flip the switch on the underside of [src]."))
active = 1 active = 1
src.visible_message("<span class='notice'>[src] softly beeps and whirs to life!</span>") src.visible_message(span("notice", "[src] softly beeps and whirs to life!"))
src.audible_message("<b>\The [src]</b> says, 'This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.'") src.audible_message("<b>\The [src]</b> says, 'This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.'")
sleep(20) sleep(20)
src.visible_message("<span class='warning'>[src] begins to vibrate...</span>") src.visible_message(span("warning", "[src] begins to vibrate..."))
src.audible_message("<b>\The [src]</b> says, 'Uh, Port? Having some issues with our reactor, could you check it out? Over.'") src.audible_message("<b>\The [src]</b> says, 'Uh, Port? Having some issues with our reactor, could you check it out? Over.'")
sleep(30) sleep(30)
src.audible_message("<b>\The [src]</b> says, 'Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-'") src.audible_message("<b>\The [src]</b> says, 'Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-'")
sleep(3.6) sleep(3.6)
src.visible_message("<span class='danger'>[src] explodes!</span>") src.visible_message(span("danger", "[src] explodes!"))
explosion(src.loc, 1,2,4) explosion(src.loc, 1,2,4)
qdel(src) qdel(src)

View File

@@ -40,8 +40,7 @@
<BR>\n<A href='?src=\ref[src];order=categories'>Request items</A><BR><BR> <BR>\n<A href='?src=\ref[src];order=categories'>Request items</A><BR><BR>
<A href='?src=\ref[src];vieworders=1'>View approved orders</A><BR><BR> <A href='?src=\ref[src];vieworders=1'>View approved orders</A><BR><BR>
<A href='?src=\ref[src];viewrequests=1'>View requests</A><BR><BR> <A href='?src=\ref[src];viewrequests=1'>View requests</A><BR><BR>
"} // VOREStation Edit - Export reports \n<A href='?src=\ref[src];viewexport=1'>View export report</A><BR><BR>
dat += {"\n<A href='?src=\ref[src];viewexport=1'>View export report</A><BR><BR>
<A href='?src=\ref[user];mach_close=computer'>Close</A>"} <A href='?src=\ref[user];mach_close=computer'>Close</A>"}
user << browse(dat, "window=computer;size=575x450") user << browse(dat, "window=computer;size=575x450")
@@ -200,8 +199,7 @@
\n<A href='?src=\ref[src];order=categories'>Order items</A><BR>\n<BR> \n<A href='?src=\ref[src];order=categories'>Order items</A><BR>\n<BR>
\n<A href='?src=\ref[src];viewrequests=1'>View requests</A><BR>\n<BR> \n<A href='?src=\ref[src];viewrequests=1'>View requests</A><BR>\n<BR>
\n<A href='?src=\ref[src];vieworders=1'>View orders</A><BR>\n<BR> \n<A href='?src=\ref[src];vieworders=1'>View orders</A><BR>\n<BR>
"} // VOREStation Edit - Export reports \n<A href='?src=\ref[src];viewexport=1'>View export report</A><BR>\n<BR>
dat += {"\n<A href='?src=\ref[src];viewexport=1'>View export report</A><BR>\n<BR>
\n<A href='?src=\ref[user];mach_close=computer'>Close</A>"} \n<A href='?src=\ref[user];mach_close=computer'>Close</A>"}
@@ -371,7 +369,6 @@
temp += "<BR><A href='?src=\ref[src];clearreq=1'>Clear list</A>" temp += "<BR><A href='?src=\ref[src];clearreq=1'>Clear list</A>"
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>" temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
//VOREStation Edit - Export reports
else if (href_list["viewexport"]) else if (href_list["viewexport"])
temp = "Previous shuttle export report: <BR><BR>" temp = "Previous shuttle export report: <BR><BR>"
var/cratecount = 0 var/cratecount = 0
@@ -383,7 +380,6 @@
temp += "[EC.name] exported for [EC.value] supply points<BR>" temp += "[EC.name] exported for [EC.value] supply points<BR>"
temp += "<BR>Shipment of [cratecount] crates exported for [totalvalue] supply points.<BR>" temp += "<BR>Shipment of [cratecount] crates exported for [totalvalue] supply points.<BR>"
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>" temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
//VOREStation Edit End
else if (href_list["rreq"]) else if (href_list["rreq"])
var/ordernum = text2num(href_list["rreq"]) var/ordernum = text2num(href_list["rreq"])

View File

@@ -3,7 +3,6 @@
desc = "A generic vending machine." desc = "A generic vending machine."
icon = 'icons/obj/vending.dmi' icon = 'icons/obj/vending.dmi'
icon_state = "robotics" icon_state = "robotics"
layer = 2.9
anchored = 1 anchored = 1
density = 1 density = 1
var/obj/machinery/computer3/laptop/vended/newlap = null var/obj/machinery/computer3/laptop/vended/newlap = null

View File

@@ -6,13 +6,15 @@
icon_state = "pod_preview" icon_state = "pod_preview"
density = 1 density = 1
anchored = 1.0 anchored = 1.0
layer = 2.8 layer = UNDER_JUNK_LAYER
interact_offline = 1 interact_offline = 1
var/on = 0 var/on = 0
use_power = 1 use_power = 1
idle_power_usage = 20 idle_power_usage = 20
active_power_usage = 200 active_power_usage = 200
buckle_lying = FALSE
buckle_dir = SOUTH
var/temperature_archived var/temperature_archived
var/mob/living/carbon/occupant = null var/mob/living/carbon/occupant = null
@@ -20,12 +22,29 @@
var/current_heat_capacity = 50 var/current_heat_capacity = 50
var/image/fluid
/obj/machinery/atmospherics/unary/cryo_cell/New() /obj/machinery/atmospherics/unary/cryo_cell/New()
..() ..()
icon = 'icons/obj/cryogenics_split.dmi' icon = 'icons/obj/cryogenics_split.dmi'
update_icon() icon_state = "base"
initialize_directions = dir initialize_directions = dir
/obj/machinery/atmospherics/unary/cryo_cell/initialize()
. = ..()
var/image/tank = image(icon,"tank")
tank.alpha = 200
tank.pixel_y = 18
tank.plane = MOB_PLANE
tank.layer = MOB_LAYER+0.2 //Above fluid
fluid = image(icon, "tube_filler")
fluid.pixel_y = 18
fluid.alpha = 200
fluid.plane = MOB_PLANE
fluid.layer = MOB_LAYER+0.1 //Below glass, above mob
add_overlay(tank)
update_icon()
/obj/machinery/atmospherics/unary/cryo_cell/Destroy() /obj/machinery/atmospherics/unary/cryo_cell/Destroy()
var/turf/T = src.loc var/turf/T = src.loc
T.contents += contents T.contents += contents
@@ -153,6 +172,7 @@
if(beaker) if(beaker)
beaker.loc = get_step(src.loc, SOUTH) beaker.loc = get_step(src.loc, SOUTH)
beaker = null beaker = null
update_icon()
if(href_list["ejectOccupant"]) if(href_list["ejectOccupant"])
if(!occupant || isslime(usr) || ispAI(usr)) if(!occupant || isslime(usr) || ispAI(usr))
@@ -172,6 +192,7 @@
user.drop_item() user.drop_item()
G.loc = src G.loc = src
user.visible_message("[user] adds \a [G] to \the [src]!", "You add \a [G] to \the [src]!") user.visible_message("[user] adds \a [G] to \the [src]!", "You add \a [G] to \the [src]!")
update_icon()
else if(istype(G, /obj/item/weapon/grab)) else if(istype(G, /obj/item/weapon/grab))
var/obj/item/weapon/grab/grab = G var/obj/item/weapon/grab/grab = G
if(!ismob(grab.affecting)) if(!ismob(grab.affecting))
@@ -191,40 +212,23 @@
put_mob(target) put_mob(target)
/obj/machinery/atmospherics/unary/cryo_cell/update_icon() /obj/machinery/atmospherics/unary/cryo_cell/update_icon()
overlays.Cut() cut_overlay(fluid)
icon_state = "pod[on]" fluid.color = null
var/image/I if(on)
if(beaker)
I = image(icon, "pod[on]_top") fluid.color = beaker.reagents.get_color()
I.layer = 5 // this needs to be fairly high so it displays over most things, but it needs to be under lighting (at 10) add_overlay(fluid)
I.pixel_z = 32
overlays += I
if(occupant)
var/image/pickle = image(occupant.icon, occupant.icon_state)
pickle.overlays = occupant.overlays
pickle.pixel_z = 18
pickle.layer = 5
overlays += pickle
I = image(icon, "lid[on]")
I.layer = 5
overlays += I
I = image(icon, "lid[on]_top")
I.layer = 5
I.pixel_z = 32
overlays += I
/obj/machinery/atmospherics/unary/cryo_cell/proc/process_occupant() /obj/machinery/atmospherics/unary/cryo_cell/proc/process_occupant()
if(air_contents.total_moles < 10) if(air_contents.total_moles < 10)
return return
if(occupant) if(occupant)
if(occupant.stat == 2) if(occupant.stat >= DEAD)
return return
occupant.bodytemperature += 2*(air_contents.temperature - occupant.bodytemperature)*current_heat_capacity/(current_heat_capacity + air_contents.heat_capacity()) occupant.bodytemperature += 2*(air_contents.temperature - occupant.bodytemperature)*current_heat_capacity/(current_heat_capacity + air_contents.heat_capacity())
occupant.bodytemperature = max(occupant.bodytemperature, air_contents.temperature) // this is so ugly i'm sorry for doing it i'll fix it later i promise occupant.bodytemperature = max(occupant.bodytemperature, air_contents.temperature) // this is so ugly i'm sorry for doing it i'll fix it later i promise
occupant.stat = 1 occupant.stat = UNCONSCIOUS
occupant.dir = SOUTH
if(occupant.bodytemperature < T0C) if(occupant.bodytemperature < T0C)
occupant.sleeping = max(5, (1/occupant.bodytemperature)*2000) occupant.sleeping = max(5, (1/occupant.bodytemperature)*2000)
occupant.Paralyse(max(5, (1/occupant.bodytemperature)*3000)) occupant.Paralyse(max(5, (1/occupant.bodytemperature)*3000))
@@ -273,14 +277,16 @@
if(occupant.client) if(occupant.client)
occupant.client.eye = occupant.client.mob occupant.client.eye = occupant.client.mob
occupant.client.perspective = MOB_PERSPECTIVE occupant.client.perspective = MOB_PERSPECTIVE
vis_contents -= occupant
occupant.pixel_x = occupant.default_pixel_x
occupant.pixel_y = occupant.default_pixel_y
occupant.loc = get_step(src.loc, SOUTH) //this doesn't account for walls or anything, but i don't forsee that being a problem. occupant.loc = get_step(src.loc, SOUTH) //this doesn't account for walls or anything, but i don't forsee that being a problem.
if(occupant.bodytemperature < 261 && occupant.bodytemperature >= 70) //Patch by Aranclanos to stop people from taking burn damage after being ejected if(occupant.bodytemperature < 261 && occupant.bodytemperature >= 70) //Patch by Aranclanos to stop people from taking burn damage after being ejected
occupant.bodytemperature = 261 // Changed to 70 from 140 by Zuhayr due to reoccurance of bug. occupant.bodytemperature = 261 // Changed to 70 from 140 by Zuhayr due to reoccurance of bug.
// occupant.metabslow = 0 unbuckle_mob(occupant, force = TRUE)
occupant = null occupant = null
current_heat_capacity = initial(current_heat_capacity) current_heat_capacity = initial(current_heat_capacity)
update_use_power(1) update_use_power(1)
update_icon()
return return
/obj/machinery/atmospherics/unary/cryo_cell/proc/put_mob(mob/living/carbon/M as mob) /obj/machinery/atmospherics/unary/cryo_cell/proc/put_mob(mob/living/carbon/M as mob)
if(stat & (NOPOWER|BROKEN)) if(stat & (NOPOWER|BROKEN))
@@ -307,6 +313,9 @@
if(M.health > -100 && (M.health < 0 || M.sleeping)) if(M.health > -100 && (M.health < 0 || M.sleeping))
M << "<span class='notice'><b>You feel a cold liquid surround you. Your skin starts to freeze up.</b></span>" M << "<span class='notice'><b>You feel a cold liquid surround you. Your skin starts to freeze up.</b></span>"
occupant = M occupant = M
buckle_mob(occupant, forced = TRUE, check_loc = FALSE)
vis_contents |= occupant
occupant.pixel_y += 19
current_heat_capacity = HEAT_CAPACITY_HUMAN current_heat_capacity = HEAT_CAPACITY_HUMAN
update_use_power(2) update_use_power(2)
// M.metabslow = 1 // M.metabslow = 1

View File

@@ -446,8 +446,8 @@
desc = "It's an extra resilient airlock intended for spacefaring vessels." desc = "It's an extra resilient airlock intended for spacefaring vessels."
icon = 'icons/obj/doors/shuttledoors.dmi' icon = 'icons/obj/doors/shuttledoors.dmi'
explosion_resistance = 20 explosion_resistance = 20
opacity = 0 //VOREStation Edit - They have windows. opacity = 0
glass = 1 //VOREStation Edit - They have windows. glass = 1
assembly_type = /obj/structure/door_assembly/door_assembly_voidcraft assembly_type = /obj/structure/door_assembly/door_assembly_voidcraft
// Airlock opens from top-bottom instead of left-right. // Airlock opens from top-bottom instead of left-right.

View File

@@ -7,6 +7,9 @@
// as they lack any ID scanning system, they just handle remote control signals. Subtypes have // as they lack any ID scanning system, they just handle remote control signals. Subtypes have
// different icons, which are defined by set of variables. Subtypes are on bottom of this file. // different icons, which are defined by set of variables. Subtypes are on bottom of this file.
// UPDATE 06.04.2018
// The emag thing wasn't working as intended, manually overwrote it.
/obj/machinery/door/blast /obj/machinery/door/blast
name = "Blast Door" name = "Blast Door"
desc = "That looks like it doesn't open easily." desc = "That looks like it doesn't open easily."
@@ -56,6 +59,10 @@
radiation_repository.resistance_cache.Remove(get_turf(src)) radiation_repository.resistance_cache.Remove(get_turf(src))
return return
// Has to be in here, comment at the top is older than the emag_act code on doors proper
/obj/machinery/door/blast/emag_act()
return -1
// Proc: force_open() // Proc: force_open()
// Parameters: None // Parameters: None
// Description: Opens the door. No checks are done inside this proc. // Description: Opens the door. No checks are done inside this proc.
@@ -197,6 +204,27 @@
return return
..() ..()
// Proc: attack_generic()
// Parameters: Attacking simple mob, incoming damage.
// Description: Checks the power or integrity of the blast door, if either have failed, chekcs the damage to determine if the creature would be able to open the door by force. Otherwise, super.
/obj/machinery/door/blast/attack_generic(var/mob/user, var/damage)
if(stat & (BROKEN|NOPOWER))
if(damage >= 10)
if(src.density)
visible_message("<span class='danger'>\The [user] starts forcing \the [src] open!</span>")
if(do_after(user, 5 SECONDS, src))
visible_message("<span class='danger'>\The [user] forces \the [src] open!</span>")
force_open(1)
else
visible_message("<span class='danger'>\The [user] starts forcing \the [src] closed!</span>")
if(do_after(user, 2 SECONDS, src))
visible_message("<span class='danger'>\The [user] forces \the [src] closed!</span>")
force_close(1)
else
visible_message("<span class='notice'>\The [user] strains fruitlessly to force \the [src] [density ? "open" : "closed"].</span>")
return
..()
// Proc: open() // Proc: open()
// Parameters: None // Parameters: None
// Description: Opens the door. Does necessary checks. Automatically closes if autoclose is true // Description: Opens the door. Does necessary checks. Automatically closes if autoclose is true

View File

@@ -25,34 +25,39 @@
var/releasetime = 0 // when world.timeofday reaches it - release the prisoner var/releasetime = 0 // when world.timeofday reaches it - release the prisoner
var/timing = 1 // boolean, true/1 timer is on, false/0 means it's not timing var/timing = 1 // boolean, true/1 timer is on, false/0 means it's not timing
var/picture_state // icon_state of alert picture, if not displaying text/numbers var/picture_state // icon_state of alert picture, if not displaying text/numbers
var/list/obj/machinery/targets = list() var/list/obj/machinery/targets
var/timetoset = 0 // Used to set releasetime upon starting the timer var/timetoset = 0 // Used to set releasetime upon starting the timer
maptext_height = 26 maptext_height = 26
maptext_width = 32 maptext_width = 32
/obj/machinery/door_timer/New() /obj/machinery/door_timer/initialize()
..() ..()
//Doors need to go first, and can't rely on init order, so come back to me.
return INITIALIZE_HINT_LATELOAD
/obj/machinery/door_timer/LateInitialize()
. = ..()
spawn(20)
for(var/obj/machinery/door/window/brigdoor/M in machines) for(var/obj/machinery/door/window/brigdoor/M in machines)
if (M.id == src.id) if (M.id == src.id)
targets += M LAZYADD(targets,M)
for(var/obj/machinery/flasher/F in machines) for(var/obj/machinery/flasher/F in machines)
if(F.id == src.id) if(F.id == src.id)
targets += F LAZYADD(targets,F)
for(var/obj/structure/closet/secure_closet/brig/C in world) for(var/obj/structure/closet/secure_closet/brig/C in world)
if(C.id == src.id) if(C.id == src.id)
targets += C LAZYADD(targets,C)
if(targets.len==0) if(!LAZYLEN(targets))
stat |= BROKEN stat |= BROKEN
update_icon() update_icon()
return
return
/obj/machinery/door_timer/Destroy()
LAZYCLEARLIST(targets)
return ..()
//Main door timer loop, if it's timing and time is >0 reduce time by 1. //Main door timer loop, if it's timing and time is >0 reduce time by 1.
// if it's less than 0, open door, reset timer // if it's less than 0, open door, reset timer
@@ -95,6 +100,7 @@
// Closes and locks doors, power check // Closes and locks doors, power check
/obj/machinery/door_timer/proc/timer_start() /obj/machinery/door_timer/proc/timer_start()
if(stat & (NOPOWER|BROKEN)) return 0 if(stat & (NOPOWER|BROKEN)) return 0
if(!LAZYLEN(targets)) return 0
// Set releasetime // Set releasetime
releasetime = world.timeofday + timetoset releasetime = world.timeofday + timetoset
@@ -115,6 +121,7 @@
// Opens and unlocks doors, power check // Opens and unlocks doors, power check
/obj/machinery/door_timer/proc/timer_end() /obj/machinery/door_timer/proc/timer_end()
if(stat & (NOPOWER|BROKEN)) return 0 if(stat & (NOPOWER|BROKEN)) return 0
if(!LAZYLEN(targets)) return 0
// Reset releasetime // Reset releasetime
releasetime = 0 releasetime = 0
@@ -197,6 +204,7 @@
dat += "<a href='?src=\ref[src];tp=-60'>-</a> <a href='?src=\ref[src];tp=-1'>-</a> <a href='?src=\ref[src];tp=1'>+</a> <A href='?src=\ref[src];tp=60'>+</a><br/>" dat += "<a href='?src=\ref[src];tp=-60'>-</a> <a href='?src=\ref[src];tp=-1'>-</a> <a href='?src=\ref[src];tp=1'>+</a> <A href='?src=\ref[src];tp=60'>+</a><br/>"
// Mounted flash controls // Mounted flash controls
if(LAZYLEN(targets))
for(var/obj/machinery/flasher/F in targets) for(var/obj/machinery/flasher/F in targets)
if(F.last_flash && (F.last_flash + 150) > world.time) if(F.last_flash && (F.last_flash + 150) > world.time)
dat += "<br/><A href='?src=\ref[src];fc=1'>Flash Charging</A>" dat += "<br/><A href='?src=\ref[src];fc=1'>Flash Charging</A>"
@@ -244,6 +252,7 @@
timeset(addtime) timeset(addtime)
if(href_list["fc"]) if(href_list["fc"])
if(LAZYLEN(targets))
for(var/obj/machinery/flasher/F in targets) for(var/obj/machinery/flasher/F in targets)
F.flash() F.flash()

View File

@@ -38,8 +38,11 @@
var/atom/movable/overlay/c_animation = null var/atom/movable/overlay/c_animation = null
/obj/machinery/door/attack_generic(var/mob/user, var/damage) /obj/machinery/door/attack_generic(var/mob/user, var/damage)
if(isanimal(user))
var/mob/living/simple_animal/S = user
if(damage >= 10) if(damage >= 10)
visible_message("<span class='danger'>\The [user] smashes into the [src]!</span>") visible_message("<span class='danger'>\The [user] smashes into the [src]!</span>")
playsound(src, S.attack_sound, 75, 1)
take_damage(damage) take_damage(damage)
else else
visible_message("<span class='notice'>\The [user] bonks \the [src] harmlessly.</span>") visible_message("<span class='notice'>\The [user] bonks \the [src] harmlessly.</span>")

View File

@@ -216,6 +216,27 @@
return return
..() ..()
/obj/machinery/door/firedoor/attack_generic(var/mob/user, var/damage)
if(stat & (BROKEN|NOPOWER))
if(damage >= 10)
var/time_to_force = (2 + (2 * blocked)) * 5
if(src.density)
visible_message("<span class='danger'>\The [user] starts forcing \the [src] open!</span>")
if(do_after(user, time_to_force, src))
visible_message("<span class='danger'>\The [user] forces \the [src] open!</span>")
src.blocked = 0
open(1)
else
time_to_force = (time_to_force / 2)
visible_message("<span class='danger'>\The [user] starts forcing \the [src] closed!</span>")
if(do_after(user, time_to_force, src))
visible_message("<span class='danger'>\The [user] forces \the [src] closed!</span>")
close(1)
else
visible_message("<span class='notice'>\The [user] strains fruitlessly to force \the [src] [density ? "open" : "closed"].</span>")
return
..()
/obj/machinery/door/firedoor/attackby(obj/item/weapon/C as obj, mob/user as mob) /obj/machinery/door/firedoor/attackby(obj/item/weapon/C as obj, mob/user as mob)
add_fingerprint(user) add_fingerprint(user)
if(istype(C, /obj/item/taperoll)) if(istype(C, /obj/item/taperoll))

View File

@@ -12,11 +12,6 @@
else else
construction_frame_floor += type construction_frame_floor += type
var/datum/frame/frame_types/cancel/cancel = new /datum/frame/frame_types/cancel
construction_frame_wall += cancel
construction_frame_floor += cancel
////////////////////////////// //////////////////////////////
// Frame Type Datum - Describes the frame structures that can be created from a frame item. // Frame Type Datum - Describes the frame structures that can be created from a frame item.
////////////////////////////// //////////////////////////////
@@ -180,9 +175,6 @@
x_offset = 24 x_offset = 24
y_offset = 24 y_offset = 24
/datum/frame/frame_types/cancel //used to get out of input dialogue
name = "Cancel"
////////////////////////////// //////////////////////////////
// Frame Object (Structure) // Frame Object (Structure)
////////////////////////////// //////////////////////////////

View File

@@ -4,7 +4,7 @@
desc = "Small wall-mounted holographic projector" desc = "Small wall-mounted holographic projector"
icon = 'icons/obj/holosign.dmi' icon = 'icons/obj/holosign.dmi'
icon_state = "sign_off" icon_state = "sign_off"
layer = 4 plane = MOB_PLANE
use_power = 1 use_power = 1
idle_power_usage = 2 idle_power_usage = 2
active_power_usage = 4 active_power_usage = 4

View File

@@ -172,7 +172,6 @@
name = "ice cream cone" name = "ice cream cone"
desc = "Delicious waffle cone, but no ice cream." desc = "Delicious waffle cone, but no ice cream."
icon_state = "icecream_cone_waffle" //default for admin-spawned cones, href_list["cone"] should overwrite this all the time icon_state = "icecream_cone_waffle" //default for admin-spawned cones, href_list["cone"] should overwrite this all the time
layer = 3.1
bitesize = 3 bitesize = 3
var/ice_creamed = 0 var/ice_creamed = 0

View File

@@ -2,7 +2,6 @@
name = "microwave" name = "microwave"
icon = 'icons/obj/kitchen.dmi' icon = 'icons/obj/kitchen.dmi'
icon_state = "mw" icon_state = "mw"
layer = 2.9
density = 1 density = 1
anchored = 1 anchored = 1
use_power = 1 use_power = 1

View File

@@ -4,7 +4,6 @@
name = "\improper SmartFridge" name = "\improper SmartFridge"
icon = 'icons/obj/vending.dmi' icon = 'icons/obj/vending.dmi'
icon_state = "smartfridge" icon_state = "smartfridge"
layer = 2.9
density = 1 density = 1
anchored = 1 anchored = 1
use_power = 1 use_power = 1

View File

@@ -97,6 +97,7 @@ Class Procs:
name = "machinery" name = "machinery"
icon = 'icons/obj/stationobjs.dmi' icon = 'icons/obj/stationobjs.dmi'
w_class = ITEMSIZE_NO_CONTAINER w_class = ITEMSIZE_NO_CONTAINER
layer = UNDER_JUNK_LAYER
var/stat = 0 var/stat = 0
var/emagged = 0 var/emagged = 0

View File

@@ -9,8 +9,7 @@
icon_state = "floor_magnet-f" icon_state = "floor_magnet-f"
name = "Electromagnetic Generator" name = "Electromagnetic Generator"
desc = "A device that uses station power to create points of magnetic energy." desc = "A device that uses station power to create points of magnetic energy."
level = 1 // underfloor plane = PLATING_PLANE
layer = 2.5
anchored = 1 anchored = 1
use_power = 1 use_power = 1
idle_power_usage = 50 idle_power_usage = 50

View File

@@ -8,8 +8,7 @@ var/global/list/navbeacons = list() // no I don't like putting this in, but it w
icon_state = "navbeacon0-f" icon_state = "navbeacon0-f"
name = "navigation beacon" name = "navigation beacon"
desc = "A beacon used for bot navigation." desc = "A beacon used for bot navigation."
level = 1 // underfloor plane = PLATING_PLANE
layer = 2.5
anchored = 1 anchored = 1
var/open = 0 // true if cover is open var/open = 0 // true if cover is open
var/locked = 1 // true if controls are locked var/locked = 1 // true if controls are locked

View File

@@ -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) /obj/machinery/newscaster/proc/scan_user(mob/living/user as mob)
if(istype(user,/mob/living/carbon/human)) //User is a human if(istype(user,/mob/living/carbon/human)) //User is a human
var/mob/living/carbon/human/human_user = user var/mob/living/carbon/human/human_user = user
if(human_user.wear_id) //Newscaster scans you var/obj/item/weapon/card/id/I = human_user.GetIdCard()
if(istype(human_user.wear_id, /obj/item/device/pda)) //autorecognition, woo! if(I)
var/obj/item/device/pda/P = human_user.wear_id scanned_user = GetNameAndAssignmentFromId(I)
if(P.id)
scanned_user = GetNameAndAssignmentFromId(P.id)
else else
scanned_user = "Unknown" 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"
else
scanned_user ="Unknown"
else else
var/mob/living/silicon/ai_user = user var/mob/living/silicon/ai_user = user
scanned_user = "[ai_user.name] ([ai_user.job])" scanned_user = "[ai_user.name] ([ai_user.job])"

View File

@@ -168,7 +168,7 @@
qdel(I) qdel(I)
qdel(J) qdel(J)
H.icon = HI H.icon = HI
H.layer = 25 H.hud_layerise()
usr.mapobjs += H usr.mapobjs += H
#else #else
@@ -287,7 +287,7 @@
H.icon = I H.icon = I
qdel(I) qdel(I)
H.layer = 25 H.hud_layerise()
usr.mapobjs += H usr.mapobjs += H
#endif #endif

View File

@@ -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, "<span class='warning'>The machine is already loaded.</span>")
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("<span class='notice'>[user] inserts \the [W] into the Color Mate receptable.</span>")
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 = "<TITLE>Color Mate Control Panel</TITLE><BR>"
if(!processing.len)
dat += "No item inserted."
else
for(var/atom/movable/O in processing)
dat += "Item inserted: [O]<HR>"
dat += "<A href='?src=\ref[src];select=1'>Select new color.</A><BR>"
dat += "Color: <font color='[activecolor]'>&#9899;</font>"
dat += "<A href='?src=\ref[src];paint=1'>Apply new color.</A><BR><BR>"
dat += "<A href='?src=\ref[src];clear=1'>Remove paintjob.</A><BR><BR>"
dat += "<A href='?src=\ref[src];eject=1'>Eject item.</A><BR><BR>"
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()

View File

@@ -393,6 +393,18 @@ var/list/turret_icons
attacked = 0 attacked = 0
..() ..()
/obj/machinery/porta_turret/attack_generic(mob/user as mob, var/damage)
if(isanimal(user))
var/mob/living/simple_animal/S = user
if(damage >= 10)
var/incoming_damage = round(damage - (damage / 5)) //Turrets are slightly armored, assumedly.
visible_message("<span class='danger'>\The [S] [pick(S.attacktext)] \the [src]!</span>")
take_damage(incoming_damage)
S.do_attack_animation(src)
return 1
visible_message("<span class='notice'>\The [user] bonks \the [src]'s casing!</span>")
return ..()
/obj/machinery/porta_turret/emag_act(var/remaining_charges, var/mob/user) /obj/machinery/porta_turret/emag_act(var/remaining_charges, var/mob/user)
if(!emagged) if(!emagged)
//Emagging the turret makes it go bonkers and stun everyone. It also makes //Emagging the turret makes it go bonkers and stun everyone. It also makes

View File

@@ -6,7 +6,6 @@
desc = "A generic vending machine." desc = "A generic vending machine."
icon = 'icons/obj/vending_vr.dmi' //VOREStation Edit - Eris vending machine sprites icon = 'icons/obj/vending_vr.dmi' //VOREStation Edit - Eris vending machine sprites
icon_state = "generic" icon_state = "generic"
layer = 2.9
anchored = 1 anchored = 1
density = 1 density = 1
@@ -863,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/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/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/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) /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) 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. idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.

View File

@@ -29,18 +29,18 @@
update_type_list() update_type_list()
var/datum/frame/frame_types/frame_type var/datum/frame/frame_types/frame_type
if(!build_machine_type) if(!build_machine_type)
var/datum/frame/frame_types/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in frame_types_floor var/datum/frame/frame_types/response = input(user, "What kind of frame would you like to make?", "Frame type request", null) as null|anything in frame_types_floor
if(!response || response.name == "Cancel") if(!response)
return return
frame_type = response frame_type = response
build_machine_type = /obj/structure/frame build_machine_type = /obj/structure/frame
if(frame_type.frame_size != 5) if(frame_type.frame_size != 5)
new /obj/item/stack/material/steel(usr.loc, (5 - frame_type.frame_size)) new /obj/item/stack/material/steel(user.loc, (5 - frame_type.frame_size))
var/ndir var/ndir
ndir = usr.dir ndir = user.dir
if(!(ndir in cardinal)) if(!(ndir in cardinal))
return return
@@ -48,52 +48,57 @@
M.fingerprints = fingerprints M.fingerprints = fingerprints
M.fingerprintshidden = fingerprintshidden M.fingerprintshidden = fingerprintshidden
M.fingerprintslast = fingerprintslast M.fingerprintslast = fingerprintslast
if(istype(src.loc, /obj/item/weapon/gripper)) //Typical gripper shenanigans
user.drop_item()
qdel(src) qdel(src)
/obj/item/frame/proc/try_build(turf/on_wall, mob/user as mob) /obj/item/frame/proc/try_build(turf/on_wall, mob/user as mob)
update_type_list() update_type_list()
if(get_dist(on_wall, user)>1)
return
var/ndir
if(reverse)
ndir = get_dir(user, on_wall)
else
ndir = get_dir(on_wall, user)
if(!(ndir in cardinal))
return
var/turf/loc = get_turf(user)
var/area/A = loc.loc
if(!istype(loc, /turf/simulated/floor))
to_chat(user, "<span class='danger'>\The frame cannot be placed on this spot.</span>")
return
if(A.requires_power == 0 || A.name == "Space")
to_chat(user, "<span class='danger'>\The [src] Alarm cannot be placed in this area.</span>")
return
if(gotwallitem(loc, ndir))
to_chat(user, "<span class='danger'>There's already an item on this wall!</span>")
return
var/datum/frame/frame_types/frame_type var/datum/frame/frame_types/frame_type
if(!build_machine_type) if(!build_machine_type)
var/datum/frame/frame_types/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in frame_types_wall var/datum/frame/frame_types/response = input(user, "What kind of frame would you like to make?", "Frame type request", null) as null|anything in frame_types_wall
if(!response || response.name == "Cancel") if(!response)
return return
frame_type = response frame_type = response
build_machine_type = /obj/structure/frame build_machine_type = /obj/structure/frame
if(frame_type.frame_size != 5) if(frame_type.frame_size != 5)
new /obj/item/stack/material/steel(usr.loc, (5 - frame_type.frame_size)) new /obj/item/stack/material/steel(user.loc, (5 - frame_type.frame_size))
if(get_dist(on_wall, usr)>1)
return
var/ndir
if(reverse)
ndir = get_dir(usr, on_wall)
else
ndir = get_dir(on_wall, usr)
if(!(ndir in cardinal))
return
var/turf/loc = get_turf(usr)
var/area/A = loc.loc
if(!istype(loc, /turf/simulated/floor))
usr << "<span class='danger'>\The frame cannot be placed on this spot.</span>"
return
if(A.requires_power == 0 || A.name == "Space")
usr << "<span class='danger'>\The [src] Alarm cannot be placed in this area.</span>"
return
if(gotwallitem(loc, ndir))
usr << "<span class='danger'>There's already an item on this wall!</span>"
return
var/obj/machinery/M = new build_machine_type(loc, ndir, 1, frame_type) var/obj/machinery/M = new build_machine_type(loc, ndir, 1, frame_type)
M.fingerprints = fingerprints M.fingerprints = fingerprints
M.fingerprintshidden = fingerprintshidden M.fingerprintshidden = fingerprintshidden
M.fingerprintslast = fingerprintslast M.fingerprintslast = fingerprintslast
if(istype(src.loc, /obj/item/weapon/gripper)) //Typical gripper shenanigans
user.drop_item()
qdel(src) qdel(src)
/obj/item/frame/light /obj/item/frame/light

View File

@@ -44,7 +44,7 @@ HONK Blaster and a pulse cannon protected by projectile armor and powered by a b
desc = "... Blitzkrieg?" desc = "... Blitzkrieg?"
icon = 'icons/mecha/NaziMech.dmi' icon = 'icons/mecha/NaziMech.dmi'
icon_state = "pzrwreck" icon_state = "pzrwreck"
layer = 4 // so it overlaps other people plane = MOB_PLANE
pixel_x = -16 pixel_x = -16
anchored = 1 // It's fucking huge. You aren't moving it. anchored = 1 // It's fucking huge. You aren't moving it.

View File

@@ -7,7 +7,7 @@
density = 1 density = 1
throwpass = 1 throwpass = 1
use_power = 1 use_power = 1
layer = 3.3 layer = ON_WINDOW_LAYER
power_channel = EQUIP power_channel = EQUIP
var/on = 0 var/on = 0
var/id_tag = null var/id_tag = null

View File

@@ -36,6 +36,7 @@
desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE" desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE"
name = "DEATH-RIPLEY" name = "DEATH-RIPLEY"
icon_state = "deathripley" icon_state = "deathripley"
initial_icon = "deathripley"
step_in = 2 step_in = 2
opacity=0 opacity=0
lights_power = 60 lights_power = 60

View File

@@ -75,6 +75,13 @@
// buckled_mob = M // buckled_mob = M
buckled_mobs |= M buckled_mobs |= M
//VOREStation Add
if(riding_datum)
riding_datum.ridden = src
riding_datum.handle_vehicle_offsets()
M.update_water()
//VOREStation Add End
post_buckle_mob(M) post_buckle_mob(M)
return TRUE return TRUE
@@ -94,6 +101,12 @@
// buckled_mob = null // buckled_mob = null
buckled_mobs -= buckled_mob buckled_mobs -= buckled_mob
//VOREStation Add
buckled_mob.update_water()
if(riding_datum)
riding_datum.restore_position(buckled_mob)
riding_datum.handle_vehicle_offsets() // So the person in back goes to the front.
//VOREStation Add End
post_buckle_mob(.) post_buckle_mob(.)
/atom/movable/proc/unbuckle_all_mobs(force = FALSE) /atom/movable/proc/unbuckle_all_mobs(force = FALSE)
@@ -175,3 +188,9 @@
. = ..() . = ..()
if(. && has_buckled_mobs() && !handle_buckled_mob_movement(newloc, direct)) //movement failed due to buckled mob(s) if(. && has_buckled_mobs() && !handle_buckled_mob_movement(newloc, direct)) //movement failed due to buckled mob(s)
. = 0 . = 0
//VOREStation Add
else if(. && riding_datum)
riding_datum.handle_vehicle_layer()
riding_datum.handle_vehicle_offsets()
//VOREStation Add End

View File

@@ -147,7 +147,8 @@
anchored = 1 anchored = 1
density = 0 density = 0
layer = 2 plane = TURF_PLANE
layer = ABOVE_TURF_LAYER
var/health = 15 var/health = 15
var/obj/effect/alien/weeds/node/linked_node = null var/obj/effect/alien/weeds/node/linked_node = null
@@ -155,7 +156,7 @@
icon_state = "weednode" icon_state = "weednode"
name = "purple sac" name = "purple sac"
desc = "Weird purple octopus-like thing." desc = "Weird purple octopus-like thing."
layer = 3 layer = ABOVE_TURF_LAYER+0.01
light_range = NODERANGE light_range = NODERANGE
var/node_range = NODERANGE var/node_range = NODERANGE

View File

@@ -161,7 +161,7 @@
if(chemholder.reagents.reagent_list.len) if(chemholder.reagents.reagent_list.len)
chemholder.reagents.trans_to_obj(smoke, chemholder.reagents.total_volume / dist, copy = 1) //copy reagents to the smoke so mob/breathe() can handle inhaling the reagents chemholder.reagents.trans_to_obj(smoke, chemholder.reagents.total_volume / dist, copy = 1) //copy reagents to the smoke so mob/breathe() can handle inhaling the reagents
smoke.icon = I smoke.icon = I
smoke.layer = 6 smoke.plane = ABOVE_PLANE
smoke.set_dir(pick(cardinal)) smoke.set_dir(pick(cardinal))
smoke.pixel_x = -32 + rand(-8, 8) smoke.pixel_x = -32 + rand(-8, 8)
smoke.pixel_y = -32 + rand(-8, 8) smoke.pixel_y = -32 + rand(-8, 8)

View File

@@ -2,7 +2,7 @@
//Liquid fuel is used for things that used to rely on volatile fuels or phoron being contained to a couple tiles. //Liquid fuel is used for things that used to rely on volatile fuels or phoron being contained to a couple tiles.
icon = 'icons/effects/effects.dmi' icon = 'icons/effects/effects.dmi'
icon_state = "fuel" icon_state = "fuel"
layer = TURF_LAYER+0.2 plane = DIRTY_PLANE
anchored = 1 anchored = 1
var/amount = 1 var/amount = 1

View File

@@ -10,7 +10,7 @@ var/global/list/image/splatter_cache=list()
gender = PLURAL gender = PLURAL
density = 0 density = 0
anchored = 1 anchored = 1
layer = 2 plane = BLOOD_PLANE
icon = 'icons/effects/blood.dmi' icon = 'icons/effects/blood.dmi'
icon_state = "mfloor1" icon_state = "mfloor1"
random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7") random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7")
@@ -179,7 +179,6 @@ var/global/list/image/splatter_cache=list()
gender = PLURAL gender = PLURAL
density = 0 density = 0
anchored = 1 anchored = 1
layer = 2
icon = 'icons/effects/blood.dmi' icon = 'icons/effects/blood.dmi'
icon_state = "gibbl5" icon_state = "gibbl5"
random_icon_states = list("gib1", "gib2", "gib3", "gib5", "gib6") random_icon_states = list("gib1", "gib2", "gib3", "gib5", "gib6")
@@ -236,7 +235,6 @@ var/global/list/image/splatter_cache=list()
gender = PLURAL gender = PLURAL
density = 0 density = 0
anchored = 1 anchored = 1
layer = 2
icon = 'icons/effects/blood.dmi' icon = 'icons/effects/blood.dmi'
icon_state = "mucus" icon_state = "mucus"
random_icon_states = list("mucus") random_icon_states = list("mucus")

View File

@@ -4,7 +4,6 @@
gender = PLURAL gender = PLURAL
density = 0 density = 0
anchored = 1 anchored = 1
layer = 2
icon = 'icons/obj/objects.dmi' icon = 'icons/obj/objects.dmi'
icon_state = "shards" icon_state = "shards"
@@ -36,7 +35,6 @@
gender = PLURAL gender = PLURAL
density = 0 density = 0
anchored = 1 anchored = 1
layer = 2
icon = 'icons/effects/effects.dmi' icon = 'icons/effects/effects.dmi'
icon_state = "dirt" icon_state = "dirt"
mouse_opacity = 0 mouse_opacity = 0
@@ -47,7 +45,6 @@
gender = PLURAL gender = PLURAL
density = 0 density = 0
anchored = 1 anchored = 1
layer = 2
icon = 'icons/effects/effects.dmi' icon = 'icons/effects/effects.dmi'
icon_state = "flour" icon_state = "flour"
@@ -57,7 +54,6 @@
gender = PLURAL gender = PLURAL
density = 0 density = 0
anchored = 1 anchored = 1
layer = 2
light_range = 1 light_range = 1
icon = 'icons/effects/effects.dmi' icon = 'icons/effects/effects.dmi'
icon_state = "greenglow" icon_state = "greenglow"
@@ -67,7 +63,7 @@
desc = "Somebody should remove that." desc = "Somebody should remove that."
density = 0 density = 0
anchored = 1 anchored = 1
layer = 3 plane = OBJ_PLANE
icon = 'icons/effects/effects.dmi' icon = 'icons/effects/effects.dmi'
icon_state = "cobweb1" icon_state = "cobweb1"
@@ -76,7 +72,7 @@
desc = "It looks like a melted... something." desc = "It looks like a melted... something."
density = 0 density = 0
anchored = 1 anchored = 1
layer = 3 plane = OBJ_PLANE
icon = 'icons/obj/chemical.dmi' icon = 'icons/obj/chemical.dmi'
icon_state = "molten" icon_state = "molten"
@@ -85,7 +81,7 @@
desc = "Somebody should remove that." desc = "Somebody should remove that."
density = 0 density = 0
anchored = 1 anchored = 1
layer = 3 plane = OBJ_PLANE
icon = 'icons/effects/effects.dmi' icon = 'icons/effects/effects.dmi'
icon_state = "cobweb2" icon_state = "cobweb2"
@@ -96,7 +92,6 @@
gender = PLURAL gender = PLURAL
density = 0 density = 0
anchored = 1 anchored = 1
layer = 2
icon = 'icons/effects/blood.dmi' icon = 'icons/effects/blood.dmi'
icon_state = "vomit_1" icon_state = "vomit_1"
random_icon_states = list("vomit_1", "vomit_2", "vomit_3", "vomit_4") random_icon_states = list("vomit_1", "vomit_2", "vomit_3", "vomit_4")
@@ -107,7 +102,6 @@
desc = "It's red." desc = "It's red."
density = 0 density = 0
anchored = 1 anchored = 1
layer = 2
icon = 'icons/effects/tomatodecal.dmi' icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("tomato_floor1", "tomato_floor2", "tomato_floor3") random_icon_states = list("tomato_floor1", "tomato_floor2", "tomato_floor3")
@@ -116,7 +110,6 @@
desc = "Seems like this one won't hatch." desc = "Seems like this one won't hatch."
density = 0 density = 0
anchored = 1 anchored = 1
layer = 2
icon = 'icons/effects/tomatodecal.dmi' icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("smashed_egg1", "smashed_egg2", "smashed_egg3") random_icon_states = list("smashed_egg1", "smashed_egg2", "smashed_egg3")
@@ -125,7 +118,6 @@
desc = "It's pie cream from a cream pie." desc = "It's pie cream from a cream pie."
density = 0 density = 0
anchored = 1 anchored = 1
layer = 2
icon = 'icons/effects/tomatodecal.dmi' icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("smashed_pie") random_icon_states = list("smashed_pie")
@@ -134,7 +126,6 @@
desc = "Some kind of fruit smear." desc = "Some kind of fruit smear."
density = 0 density = 0
anchored = 1 anchored = 1
layer = 2
icon = 'icons/effects/blood.dmi' icon = 'icons/effects/blood.dmi'
icon_state = "mfloor1" icon_state = "mfloor1"
random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7") random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7")

View File

@@ -1,4 +1,5 @@
/obj/effect/decal/cleanable /obj/effect/decal/cleanable
plane = DIRTY_PLANE
var/list/random_icon_states = list() var/list/random_icon_states = list()
/obj/effect/decal/cleanable/clean_blood(var/ignore = 0) /obj/effect/decal/cleanable/clean_blood(var/ignore = 0)

View File

@@ -2,7 +2,7 @@
name = "rune" name = "rune"
desc = "A rune drawn in crayon." desc = "A rune drawn in crayon."
icon = 'icons/obj/rune.dmi' icon = 'icons/obj/rune.dmi'
layer = 2.1 plane = DIRTY_PLANE
anchored = 1 anchored = 1
New(location,main = "#FFFFFF",shade = "#000000",var/type = "rune") New(location,main = "#FFFFFF",shade = "#000000",var/type = "rune")

View File

@@ -3,7 +3,7 @@
desc = "It's an arrow hanging in mid-air. There may be a wizard about." desc = "It's an arrow hanging in mid-air. There may be a wizard about."
icon = 'icons/mob/screen1.dmi' icon = 'icons/mob/screen1.dmi'
icon_state = "arrow" icon_state = "arrow"
layer = 16.0 plane = ABOVE_PLANE
anchored = 1 anchored = 1
mouse_opacity = 0 mouse_opacity = 0
@@ -11,4 +11,4 @@
/obj/effect/decal/spraystill /obj/effect/decal/spraystill
density = 0 density = 0
anchored = 1 anchored = 1
layer = 50 plane = ABOVE_PLANE

View File

@@ -1,6 +1,5 @@
/obj/effect/decal/warning_stripes /obj/effect/decal/warning_stripes
icon = 'icons/effects/warning_stripes.dmi' icon = 'icons/effects/warning_stripes.dmi'
layer = 2
/obj/effect/decal/warning_stripes/New() /obj/effect/decal/warning_stripes/New()
. = ..() . = ..()

View File

@@ -26,7 +26,8 @@
desc = "Something swinging really wide." desc = "Something swinging really wide."
icon = 'icons/effects/96x96.dmi' icon = 'icons/effects/96x96.dmi'
icon_state = "cleave" icon_state = "cleave"
layer = 6 plane = MOB_PLANE
layer = ABOVE_MOB_LAYER
time_to_die = 6 time_to_die = 6
alpha = 140 alpha = 140
mouse_opacity = 0 mouse_opacity = 0

View File

@@ -17,7 +17,8 @@
icon = 'icons/misc/beach2.dmi' icon = 'icons/misc/beach2.dmi'
icon_state = "palm1" icon_state = "palm1"
density = 1 density = 1
layer = 5 plane = MOB_PLANE
layer = ABOVE_MOB_LAYER
anchored = 1 anchored = 1
/obj/effect/overlay/palmtree_l /obj/effect/overlay/palmtree_l
@@ -25,7 +26,8 @@
icon = 'icons/misc/beach2.dmi' icon = 'icons/misc/beach2.dmi'
icon_state = "palm2" icon_state = "palm2"
density = 1 density = 1
layer = 5 plane = MOB_PLANE
layer = ABOVE_MOB_LAYER
anchored = 1 anchored = 1
/obj/effect/overlay/coconut /obj/effect/overlay/coconut
@@ -37,7 +39,7 @@
name = "Bluespace" name = "Bluespace"
icon = 'icons/turf/space.dmi' icon = 'icons/turf/space.dmi'
icon_state = "bluespacify" icon_state = "bluespacify"
layer = 10 plane = ABOVE_PLANE
/obj/effect/overlay/wallrot /obj/effect/overlay/wallrot
name = "wallrot" name = "wallrot"
@@ -45,7 +47,8 @@
icon = 'icons/effects/wallrot.dmi' icon = 'icons/effects/wallrot.dmi'
anchored = 1 anchored = 1
density = 1 density = 1
layer = 5 plane = MOB_PLANE
layer = ABOVE_MOB_LAYER
mouse_opacity = 0 mouse_opacity = 0
/obj/effect/overlay/wallrot/New() /obj/effect/overlay/wallrot/New()
@@ -70,7 +73,8 @@
/obj/effect/overlay/snow/floor /obj/effect/overlay/snow/floor
icon_state = "snowfloor" icon_state = "snowfloor"
layer = 2.01 //Just above floor plane = TURF_PLANE
layer = ABOVE_TURF_LAYER
mouse_opacity = 0 //Don't block underlying tile interactions mouse_opacity = 0 //Don't block underlying tile interactions
/obj/effect/overlay/snow/floor/edges /obj/effect/overlay/snow/floor/edges
@@ -86,11 +90,12 @@
/obj/effect/overlay/snow/airlock /obj/effect/overlay/snow/airlock
icon_state = "snowairlock" icon_state = "snowairlock"
layer = 3.2 //Just above airlocks layer = DOOR_CLOSED_LAYER+0.01
/obj/effect/overlay/snow/floor/pointy /obj/effect/overlay/snow/floor/pointy
icon_state = "snowfloorpointy" icon_state = "snowfloorpointy"
/obj/effect/overlay/snow/wall /obj/effect/overlay/snow/wall
icon_state = "snowwall" icon_state = "snowwall"
layer = 5 //Same as lights so humans can stand under it plane = MOB_PLANE
layer = ABOVE_MOB_LAYER

View File

@@ -123,7 +123,7 @@
desc = "It never stays still for long." desc = "It never stays still for long."
icon_state = "spiderling" icon_state = "spiderling"
anchored = 0 anchored = 0
layer = 2.7 layer = HIDING_LAYER
health = 3 health = 3
var/last_itch = 0 var/last_itch = 0
var/amount_grown = -1 var/amount_grown = -1
@@ -221,7 +221,7 @@
skitter() skitter()
else if(isorgan(loc)) else if(isorgan(loc))
if(!amount_grown) amount_grown = 1 if(amount_grown < 0) amount_grown = 1
var/obj/item/organ/external/O = loc var/obj/item/organ/external/O = loc
if(!O.owner || O.owner.stat == DEAD || amount_grown > 80) if(!O.owner || O.owner.stat == DEAD || amount_grown > 80)
O.implants -= src O.implants -= src
@@ -237,7 +237,7 @@
else if(prob(1)) else if(prob(1))
src.visible_message("<span class='notice'>\The [src] skitters.</span>") src.visible_message("<span class='notice'>\The [src] skitters.</span>")
if(amount_grown) if(amount_grown >= 0)
amount_grown += rand(0,2) amount_grown += rand(0,2)
/obj/effect/spider/spiderling/proc/skitter() /obj/effect/spider/spiderling/proc/skitter()

View File

@@ -13,31 +13,31 @@
new /obj/item/stack/material/steel( get_turf(src.loc), 2 ) new /obj/item/stack/material/steel( get_turf(src.loc), 2 )
qdel(src) qdel(src)
/obj/item/frame/apc/try_build(turf/on_wall) /obj/item/frame/apc/try_build(turf/on_wall, mob/user as mob)
if (get_dist(on_wall,usr)>1) if (get_dist(on_wall, user)>1)
return return
var/ndir = get_dir(usr,on_wall) var/ndir = get_dir(user, on_wall)
if (!(ndir in cardinal)) if (!(ndir in cardinal))
return return
var/turf/loc = get_turf(usr) var/turf/loc = get_turf(user)
var/area/A = loc.loc var/area/A = loc.loc
if (!istype(loc, /turf/simulated/floor)) if (!istype(loc, /turf/simulated/floor))
usr << "<span class='warning'>APC cannot be placed on this spot.</span>" to_chat(user, "<span class='warning'>APC cannot be placed on this spot.</span>")
return return
if (A.requires_power == 0 || istype(A, /area/space)) if (A.requires_power == 0 || istype(A, /area/space))
usr << "<span class='warning'>APC cannot be placed in this area.</span>" to_chat(user, "<span class='warning'>APC cannot be placed in this area.</span>")
return return
if (A.get_apc()) if (A.get_apc())
usr << "<span class='warning'>This area already has an APC.</span>" to_chat(user, "<span class='warning'>This area already has an APC.</span>")
return //only one APC per area return //only one APC per area
for(var/obj/machinery/power/terminal/T in loc) for(var/obj/machinery/power/terminal/T in loc)
if (T.master) if (T.master)
usr << "<span class='warning'>There is another network terminal here.</span>" to_chat(user, "<span class='warning'>There is another network terminal here.</span>")
return return
else else
var/obj/item/stack/cable_coil/C = new /obj/item/stack/cable_coil(loc) var/obj/item/stack/cable_coil/C = new /obj/item/stack/cable_coil(loc)
C.amount = 10 C.amount = 10
usr << "You cut the cables and disassemble the unused power terminal." to_chat(user, "You cut the cables and disassemble the unused power terminal.")
qdel(T) qdel(T)
new /obj/machinery/power/apc(loc, ndir, 1) new /obj/machinery/power/apc(loc, ndir, 1)
qdel(src) qdel(src)

View File

@@ -46,11 +46,11 @@
if(colour != "#FFFFFF" && shadeColour != "#000000") if(colour != "#FFFFFF" && shadeColour != "#000000")
colour = "#FFFFFF" colour = "#FFFFFF"
shadeColour = "#000000" shadeColour = "#000000"
user << "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 else
colour = "#000000" colour = "#000000"
shadeColour = "#FFFFFF" shadeColour = "#FFFFFF"
user << "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 return
/obj/item/weapon/pen/crayon/rainbow /obj/item/weapon/pen/crayon/rainbow
@@ -72,22 +72,22 @@
switch(drawtype) switch(drawtype)
if("letter") 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") 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")
user << "You start drawing a letter on the [target.name]." to_chat(user, "You start drawing a letter on the [target.name].")
if("graffiti") if("graffiti")
user << "You start drawing graffiti on the [target.name]." to_chat(user, "You start drawing graffiti on the [target.name].")
if("rune") if("rune")
user << "You start drawing a rune on the [target.name]." to_chat(user, "You start drawing a rune on the [target.name].")
if("arrow") if("arrow")
drawtype = input("Choose the arrow.", "Crayon scribbles") in list("left", "right", "up", "down") drawtype = input("Choose the arrow.", "Crayon scribbles") in list("left", "right", "up", "down")
user << "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)) if(instant || do_after(user, 50))
new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype) new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype)
user << "You finish drawing." to_chat(user, "You finish drawing.")
target.add_fingerprint(user) // Adds their fingerprints to the floor the crayon is drawn on. target.add_fingerprint(user) // Adds their fingerprints to the floor the crayon is drawn on.
if(uses) if(uses)
uses-- uses--
if(!uses) if(!uses)
user << "<span class='warning'>You used up your crayon!</span>" to_chat(user, "<span class='warning'>You used up your crayon!</span>")
qdel(src) qdel(src)
return return
@@ -99,7 +99,93 @@
if(uses) if(uses)
uses -= 5 uses -= 5
if(uses <= 0) if(uses <= 0)
user << "<span class='warning'>You ate your crayon!</span>" to_chat(user,"<span class='warning'>You ate your crayon!</span>")
qdel(src)
else
..()
/obj/item/weapon/pen/crayon/marker/black
icon_state = "markerblack"
colour = "#2D2D2D"
shadeColour = "#000000"
colourName = "black"
/obj/item/weapon/pen/crayon/marker/red
icon_state = "markerred"
colour = "#DA0000"
shadeColour = "#810C0C"
colourName = "red"
/obj/item/weapon/pen/crayon/marker/orange
icon_state = "markerorange"
colour = "#FF9300"
shadeColour = "#A55403"
colourName = "orange"
/obj/item/weapon/pen/crayon/marker/yellow
icon_state = "markeryellow"
colour = "#FFF200"
shadeColour = "#886422"
colourName = "yellow"
/obj/item/weapon/pen/crayon/marker/green
icon_state = "markergreen"
colour = "#A8E61D"
shadeColour = "#61840F"
colourName = "green"
/obj/item/weapon/pen/crayon/marker/blue
icon_state = "markerblue"
colour = "#00B7EF"
shadeColour = "#0082A8"
colourName = "blue"
/obj/item/weapon/pen/crayon/marker/purple
icon_state = "markerpurple"
colour = "#DA00FF"
shadeColour = "#810CFF"
colourName = "purple"
/obj/item/weapon/pen/crayon/marker/mime
icon_state = "markermime"
desc = "A very sad-looking marker."
colour = "#FFFFFF"
shadeColour = "#000000"
colourName = "mime"
uses = 0
/obj/item/weapon/pen/crayon/marker/mime/attack_self(mob/living/user as mob) //inversion
if(colour != "#FFFFFF" && shadeColour != "#000000")
colour = "#FFFFFF"
shadeColour = "#000000"
to_chat(user, "You will now draw in white and black with this marker.")
else
colour = "#000000"
shadeColour = "#FFFFFF"
to_chat(user, "You will now draw in black and white with this marker.")
return
/obj/item/weapon/pen/crayon/marker/rainbow
icon_state = "markerrainbow"
colour = "#FFF000"
shadeColour = "#000FFF"
colourName = "rainbow"
uses = 0
/obj/item/weapon/pen/crayon/marker/rainbow/attack_self(mob/living/user as mob)
colour = input(user, "Please select the main colour.", "Marker colour") as color
shadeColour = input(user, "Please select the shade colour.", "Marker colour") as color
return
/obj/item/weapon/pen/crayon/marker/attack(mob/M as mob, mob/user as mob)
if(M == user)
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)
uses -= 5
if(uses <= 0)
to_chat(user,"<span class='warning'>You ate the marker!</span>")
qdel(src) qdel(src)
else else
..() ..()

View File

@@ -102,6 +102,11 @@
user << "<span class='danger'>Transfer failed:</span> Existing AI found on remote device. Remove existing AI to install a new one." user << "<span class='danger'>Transfer failed:</span> Existing AI found on remote device. Remove existing AI to install a new one."
return 0 return 0
if(!user.IsAdvancedToolUser() && isanimal(user))
var/mob/living/simple_animal/S = user
if(!S.IsHumanoidToolUser(src))
return 0
user.visible_message("\The [user] starts transferring \the [ai] into \the [src]...", "You start transferring \the [ai] into \the [src]...") user.visible_message("\The [user] starts transferring \the [ai] into \the [src]...", "You start transferring \the [ai] into \the [src]...")
ai << "<span class='danger'>\The [user] is transferring you into \the [src]!</span>" ai << "<span class='danger'>\The [user] is transferring you into \the [src]!</span>"

Some files were not shown because too many files have changed in this diff Show More