Merge branch 'master' of https://github.com/PolarisSS13/Polaris into polaris-sync-2018-03-30

# Conflicts:
#	.travis.yml
#	code/ATMOSPHERICS/components/unary/outlet_injector.dm
#	code/__defines/_planes+layers.dm
#	code/__defines/chemistry.dm
#	code/__defines/mobs.dm
#	code/_helpers/mobs.dm
#	code/_onclick/hud/robot.dm
#	code/game/area/areas.dm
#	code/game/machinery/computer/supply.dm
#	code/game/machinery/cryopod.dm
#	code/game/machinery/doors/airlock.dm
#	code/game/objects/items/devices/communicator/UI.dm
#	code/game/objects/items/devices/communicator/messaging.dm
#	code/game/sound.dm
#	code/game/supplyshuttle.dm
#	code/game/turfs/flooring/flooring_decals.dm
#	code/modules/admin/admin.dm
#	code/modules/client/preference_setup/occupation/occupation.dm
#	code/modules/events/event_container.dm
#	code/modules/mob/dead/observer/observer.dm
#	code/modules/mob/language/language.dm
#	code/modules/mob/living/carbon/human/human.dm
#	code/modules/mob/living/carbon/human/human_powers.dm
#	code/modules/mob/living/carbon/human/life.dm
#	code/modules/mob/living/carbon/human/species/species_shapeshift.dm
#	code/modules/mob/living/living.dm
#	code/modules/mob/living/living_powers.dm
#	code/modules/mob/living/say.dm
#	code/modules/mob/living/simple_animal/animals/bear.dm
#	code/modules/mob/living/simple_animal/animals/cat.dm
#	code/modules/mob/living/simple_animal/animals/parrot.dm
#	code/modules/mob/logout.dm
#	code/modules/mob/mob_helpers.dm
#	code/modules/organs/organ.dm
#	code/modules/organs/organ_icon.dm
#	code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
#	code/modules/reagents/reagent_containers/syringes.dm
#	code/modules/shuttles/shuttle.dm
#	html/changelogs/.all_changelog.yml
#	maps/RandomZLevels/wildwest.dm
#	maps/southern_cross/items/clothing/sc_head.dm
#	maps/southern_cross/southern_cross-1.dmm
#	vorestation.dme
This commit is contained in:
Leshana
2018-03-31 02:45:45 -04:00
235 changed files with 2142 additions and 1398 deletions

View File

@@ -17,7 +17,8 @@ Pipelines + Other Objects -> Pipe network
var/nodealert = 0
var/power_rating //the maximum amount of power the machine can use to do work, affects how powerful the machine is, in Watts
layer = 2.4 //under wires with their 2.44
layer = PIPES_LAYER
plane = PLATING_PLANE
var/pipe_flags = PIPING_DEFAULT_LAYER_ONLY // Allow other layers by exception basis.
var/connect_types = CONNECT_TYPE_REGULAR

View File

@@ -6,7 +6,6 @@
icon = 'icons/atmos/injector.dmi'
icon_state = "map_injector"
pipe_state = "injector"
layer = 3
name = "air injector"
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
icon = 'icons/obj/atmospherics/mainspipe.dmi'
layer = 2.4 //under wires with their 2.5
layer = PIPES_LAYER
plane = PLATING_PLANE
var/volume = 0

View File

@@ -7,7 +7,6 @@
icon = 'icons/atmos/pipes.dmi'
icon_state = ""
level = 2
layer = 2.4 //under wires with their 2.44
volume = 35

View File

@@ -40,39 +40,73 @@ What is the naming convention for planes or layers?
*/
#define SPACE_PLANE -32 // Reserved for use in space/parallax
#define PARALLAX_PLANE -30 // Reserved for use in space/parallax
#define PLANE_ADMIN1 -92 //Purely for shenanigans
#define PLANE_ADMIN2 -91 //And adminbuse
#define PLANE_ADMIN3 -90 //And generating salt
#define SPACE_PLANE -82 // Reserved for use in space/parallax
#define PARALLAX_PLANE -80 // Reserved for use in space/parallax
// 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_START -53
#define OPENSPACE_PLANE_END -38
#define OVER_OPENSPACE_PLANE -37
#define OPENSPACE_PLANE -75 // /turf/simulated/open will use OPENSPACE_PLANE + z (Valid z's being 2 thru 17)
#define OPENSPACE_PLANE_START -73
#define OPENSPACE_PLANE_END -58
#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 WIRES_LAYER 2.2 // Under objects, even when planeswapped
#define PIPES_LAYER 2.3 // Under objects, even when planeswapped
#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 AREA_LAYER 1 //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 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 ABOVE_MOB_LAYER 4.1
#define SHOWER_CLOSED_LAYER 4.2
//#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 SCREEN_LAYER 22 //Mob HUD/effects layer
#define PLANE_ADMIN1 3 //Purely for shenanigans (below lighting)
#define HUD_LAYER 20 // Above lighting, but below obfuscation. For in-game HUD effects (whereas SCREEN_LAYER is for abstract/OOC things like inventory slots)
#define SCREEN_LAYER 22 // Mob HUD/effects layer
#define PLANE_PLANETLIGHTING 4 //Lighting on planets
#define PLANE_LIGHTING 5 //Where the lighting (and darkness) lives
#define PLANE_LIGHTING_ABOVE 6 //For glowy eyes etc. that shouldn't be affected by darkness
@@ -93,8 +127,6 @@ What is the naming convention for planes or layers?
#define PLANE_MESONS 30 //Stuff seen with mesons, like open ceilings. This is 30 for downstreams.
#define PLANE_ADMIN2 33 //Purely for shenanigans (above lighting)
//Fullscreen overlays under inventory
#define PLANE_FULLSCREEN 90 //Blindness, mesons, druggy, etc
#define OBFUSCATION_LAYER 5 //Where images covering the view for eyes are put
@@ -111,8 +143,6 @@ What is the naming convention for planes or layers?
#define LAYER_HUD_ABOVE 4 //Things that reside above items (highlights)
#define PLANE_PLAYER_HUD_ITEMS 96 //Separate layer with which to apply colorblindness
#define PLANE_ADMIN3 99 //Purely for shenanigans (above HUD)
//////////////////////////
/atom/proc/hud_layerise()
@@ -125,4 +155,4 @@ What is the naming convention for planes or layers?
// 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

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

View File

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

View File

@@ -9,7 +9,6 @@
#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_LAYER 10 // drawing layer for lighting overlays
#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

View File

@@ -9,7 +9,7 @@
#define CANPARALYSE 0x4
#define CANPUSH 0x8
#define LEAPING 0x10
#define HIDING 0x20
#define HIDING 0x20
#define PASSEMOTES 0x40 // Mob has a cortical borer or holders inside of it that need to see emotes.
#define GODMODE 0x1000
#define FAKEDEATH 0x2000 // Replaces stuff like changeling.changeling_fakedeath.

View File

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

View File

@@ -51,7 +51,6 @@ var/list/global_huds = list(
/obj/screen/global_screen
screen_loc = ui_entire_screen
layer = 17
plane = PLANE_FULLSCREEN
mouse_opacity = 0
@@ -74,7 +73,12 @@ var/list/global_huds = list(
darksight.icon = null
darksight.screen_loc = "1,1"
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
centermarker = new /obj/screen()
@@ -141,20 +145,17 @@ var/list/global_huds = list(
for(i = 1, i <= 4, i++)
O = vimpaired[i]
O.icon_state = "dither50"
O.layer = 17
O.plane = PLANE_FULLSCREEN
O.mouse_opacity = 0
O = darkMask[i]
O.icon_state = "dither50"
O.layer = 17
O.plane = PLANE_FULLSCREEN
O.mouse_opacity = 0
for(i = 5, i <= 8, i++)
O = darkMask[i]
O.icon_state = "black"
O.layer = 17
O.plane = PLANE_FULLSCREEN
O.mouse_opacity = 2

View File

@@ -11,13 +11,13 @@
blobpwrdisplay.name = "blob power"
blobpwrdisplay.icon_state = "block"
blobpwrdisplay.screen_loc = ui_health
blobpwrdisplay.layer = 20
blobpwrdisplay.layer = HUD_LAYER
blobhealthdisplay = new /obj/screen()
blobhealthdisplay.name = "blob health"
blobhealthdisplay.icon_state = "block"
blobhealthdisplay.screen_loc = ui_internal
blobhealthdisplay.layer = 20
blobhealthdisplay.layer = HUD_LAYER
mymob.client.screen = list()
@@ -36,7 +36,7 @@
using.icon = ui_style
using.icon_state = "intent_"+mymob.a_intent
using.screen_loc = ui_zonesel
using.layer = 20
using.layer = HUD_LAYER
src.adding += using
action_intent = using
@@ -50,7 +50,7 @@
using.name = "help"
using.icon = ico
using.screen_loc = ui_zonesel
using.layer = 21
using.layer = HUD_LAYER+0.01
src.adding += using
help_intent = using
@@ -61,7 +61,7 @@
using.name = "disarm"
using.icon = ico
using.screen_loc = ui_zonesel
using.layer = 21
using.layer = HUD_LAYER+0.01
src.adding += using
disarm_intent = using
@@ -72,7 +72,7 @@
using.name = "grab"
using.icon = ico
using.screen_loc = ui_zonesel
using.layer = 21
using.layer = HUD_LAYER+0.01
src.adding += using
grab_intent = using
@@ -83,7 +83,7 @@
using.name = I_HURT
using.icon = ico
using.screen_loc = ui_zonesel
using.layer = 21
using.layer = HUD_LAYER+0.01
src.adding += using
hurt_intent = using

View File

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

View File

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

View File

@@ -7,10 +7,10 @@
for(last_object in clients)
var/client/C = last_object
if(C.is_afk(config.kick_inactive MINUTES))
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>")
var/information
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
if(C.mob)
if(ishuman(C.mob))
var/job
var/mob/living/carbon/human/H = C.mob
@@ -27,10 +27,10 @@
else if(issilicon(C.mob))
information = " while a silicon."
var/adminlinks
adminlinks = " (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[C.mob.x];Y=[C.mob.y];Z=[C.mob.z]'>JMP</a>|<A HREF='?_src_=holder;cryoplayer=\ref[C.mob]'>CRYO</a>)"
var/adminlinks
adminlinks = " (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[C.mob.x];Y=[C.mob.y];Z=[C.mob.z]'>JMP</a>|<A HREF='?_src_=holder;cryoplayer=\ref[C.mob]'>CRYO</a>)"
log_and_message_admins("being kicked for AFK[information][adminlinks]", C.mob)
log_and_message_admins("being kicked for AFK[information][adminlinks]", C.mob)
qdel(C)
qdel(C)
SCHECK

View File

@@ -47,7 +47,8 @@ var/datum/controller/process/planet/planet_controller = null
//Weather style needs redrawing
if(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
for(var/T in P.planet_floors)
var/turf/simulated/turf = T

View File

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

View File

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

View File

@@ -14,7 +14,7 @@ SUBSYSTEM_DEF(airflow)
wait = 2
flags = SS_NO_INIT
runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
priority = 15
priority = 30
var/list/processing = list()
var/list/currentrun = list()
@@ -47,7 +47,7 @@ SUBSYSTEM_DEF(airflow)
continue
else if (target.airflow_process_delay)
target.airflow_process_delay = 0
target.airflow_speed = min(target.airflow_speed, 15)
target.airflow_speed -= vsc.airflow_speed_decay
if (!target.airflow_skip_speedcheck)
@@ -89,7 +89,7 @@ SUBSYSTEM_DEF(airflow)
if (MC_TICK_CHECK)
return
continue
step_towards(target, target.airflow_dest)
var/mob/M = target
if (ismob(target) && M.client)
@@ -98,7 +98,7 @@ SUBSYSTEM_DEF(airflow)
if (MC_TICK_CHECK)
return
#undef CLEAR_OBJECT
#undef CLEAR_OBJECT
/atom/movable
var/tmp/airflow_xo
@@ -129,9 +129,9 @@ SUBSYSTEM_DEF(airflow)
if (airflow_falloff < 1)
airflow_dest = null
return FALSE
airflow_speed = min(max(n * (9 / airflow_falloff), 1), 9)
airflow_speed = min(max(n * (9 / airflow_falloff), 1), 9)
airflow_od = 0
if (!density)
@@ -154,7 +154,7 @@ SUBSYSTEM_DEF(airflow)
/atom/movable/proc/RepelAirflowDest(n)
if (!prepare_airflow(n))
return
airflow_xo = -(airflow_dest.x - src.x)
airflow_yo = -(airflow_dest.y - src.y)

View File

@@ -132,3 +132,9 @@
question = "A curious explorer has touched a mysterious rune. \
Would you like to play as the creature it summons?"
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

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

View File

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

View File

@@ -33,7 +33,9 @@
if(!antag_indicator || !other.current || !recipient.current)
return
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()
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
/*-----------------------------------------------------------------------------*/
/////////

View File

@@ -1,15 +1,49 @@
// Areas.dm
// ===
/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/uid
/area/New()
icon_state = ""
layer = 10
uid = ++global_uid
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)
L << chosen_ambiance
else
L << sound(null, channel = 1)
L << sound(null, channel = CHANNEL_AMBIENCE_FORCED)
else if(src.ambience.len && prob(35))
if((world.time >= L.client.played + 600))
var/sound = pick(ambience)
@@ -345,3 +379,37 @@ var/list/mob/living/forced_ambiance_list = new
/area/drop_location()
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
layer = 2
layer = TURF_LAYER //This was here when I got here. Why though?
var/level = 2
var/flags = 0
var/list/fingerprints

View File

@@ -1,5 +1,5 @@
/atom/movable
layer = 3
layer = OBJ_LAYER
appearance_flags = TILE_BOUND|PIXEL_SCALE
var/last_move = null
var/anchored = 0

View File

@@ -10,7 +10,7 @@
announce=0
cause_hell=0
layer=LIGHTING_LAYER+2 // ITS SO BRIGHT
plane = PLANE_LIGHTING_ABOVE // ITS SO BRIGHT
consume_range = 6
@@ -79,7 +79,8 @@
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(!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
var/new_x = 32 * (R.x - T_mob.x) + R.pixel_x

View File

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

View File

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

View File

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

View File

@@ -6,7 +6,8 @@
use_power = 2
idle_power_usage = 5
active_power_usage = 10
layer = 5
plane = MOB_PLANE
layer = ABOVE_MOB_LAYER
var/list/network = list(NETWORK_DEFAULT)
var/c_tag = null

View File

@@ -40,8 +40,7 @@
<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];viewrequests=1'>View requests</A><BR><BR>
"} // VOREStation Edit - Export reports
dat += {"\n<A href='?src=\ref[src];viewexport=1'>View export report</A><BR><BR>
\n<A href='?src=\ref[src];viewexport=1'>View export report</A><BR><BR>
<A href='?src=\ref[user];mach_close=computer'>Close</A>"}
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];viewrequests=1'>View requests</A><BR>\n<BR>
\n<A href='?src=\ref[src];vieworders=1'>View orders</A><BR>\n<BR>
"} // VOREStation Edit - Export reports
dat += {"\n<A href='?src=\ref[src];viewexport=1'>View export report</A><BR>\n<BR>
\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>"}
@@ -371,7 +369,6 @@
temp += "<BR><A href='?src=\ref[src];clearreq=1'>Clear list</A>"
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
//VOREStation Edit - Export reports
else if (href_list["viewexport"])
temp = "Previous shuttle export report: <BR><BR>"
var/cratecount = 0
@@ -383,7 +380,6 @@
temp += "[EC.name] exported for [EC.value] 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>"
//VOREStation Edit End
else if (href_list["rreq"])
var/ordernum = text2num(href_list["rreq"])

View File

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

View File

@@ -6,13 +6,15 @@
icon_state = "pod_preview"
density = 1
anchored = 1.0
layer = 2.8
layer = UNDER_JUNK_LAYER
interact_offline = 1
var/on = 0
use_power = 1
idle_power_usage = 20
active_power_usage = 200
buckle_lying = FALSE
buckle_dir = SOUTH
var/temperature_archived
var/mob/living/carbon/occupant = null
@@ -20,12 +22,29 @@
var/current_heat_capacity = 50
var/image/fluid
/obj/machinery/atmospherics/unary/cryo_cell/New()
..()
icon = 'icons/obj/cryogenics_split.dmi'
update_icon()
icon_state = "base"
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()
var/turf/T = src.loc
T.contents += contents
@@ -153,6 +172,7 @@
if(beaker)
beaker.loc = get_step(src.loc, SOUTH)
beaker = null
update_icon()
if(href_list["ejectOccupant"])
if(!occupant || isslime(usr) || ispAI(usr))
@@ -172,6 +192,7 @@
user.drop_item()
G.loc = 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))
var/obj/item/weapon/grab/grab = G
if(!ismob(grab.affecting))
@@ -191,40 +212,23 @@
put_mob(target)
/obj/machinery/atmospherics/unary/cryo_cell/update_icon()
overlays.Cut()
icon_state = "pod[on]"
var/image/I
I = image(icon, "pod[on]_top")
I.layer = 5 // this needs to be fairly high so it displays over most things, but it needs to be under lighting (at 10)
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
cut_overlay(fluid)
fluid.color = null
if(on)
if(beaker)
fluid.color = beaker.reagents.get_color()
add_overlay(fluid)
/obj/machinery/atmospherics/unary/cryo_cell/proc/process_occupant()
if(air_contents.total_moles < 10)
return
if(occupant)
if(occupant.stat == 2)
if(occupant.stat >= DEAD)
return
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.stat = 1
occupant.stat = UNCONSCIOUS
occupant.dir = SOUTH
if(occupant.bodytemperature < T0C)
occupant.sleeping = max(5, (1/occupant.bodytemperature)*2000)
occupant.Paralyse(max(5, (1/occupant.bodytemperature)*3000))
@@ -273,14 +277,16 @@
if(occupant.client)
occupant.client.eye = occupant.client.mob
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.
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.metabslow = 0
unbuckle_mob(occupant, force = TRUE)
occupant = null
current_heat_capacity = initial(current_heat_capacity)
update_use_power(1)
update_icon()
return
/obj/machinery/atmospherics/unary/cryo_cell/proc/put_mob(mob/living/carbon/M as mob)
if(stat & (NOPOWER|BROKEN))
@@ -307,6 +313,9 @@
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>"
occupant = M
buckle_mob(occupant, forced = TRUE, check_loc = FALSE)
vis_contents |= occupant
occupant.pixel_y += 19
current_heat_capacity = HEAT_CAPACITY_HUMAN
update_use_power(2)
// M.metabslow = 1

View File

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

View File

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

View File

@@ -172,7 +172,6 @@
name = "ice cream cone"
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
layer = 3.1
bitesize = 3
var/ice_creamed = 0

View File

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

View File

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

View File

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

View File

@@ -9,8 +9,7 @@
icon_state = "floor_magnet-f"
name = "Electromagnetic Generator"
desc = "A device that uses station power to create points of magnetic energy."
level = 1 // underfloor
layer = 2.5
plane = PLATING_PLANE
anchored = 1
use_power = 1
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"
name = "navigation beacon"
desc = "A beacon used for bot navigation."
level = 1 // underfloor
layer = 2.5
plane = PLATING_PLANE
anchored = 1
var/open = 0 // true if cover is open
var/locked = 1 // true if controls are locked

View File

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

View File

@@ -6,7 +6,6 @@
desc = "A generic vending machine."
icon = 'icons/obj/vending_vr.dmi' //VOREStation Edit - Eris vending machine sprites
icon_state = "generic"
layer = 2.9
anchored = 1
density = 1

View File

@@ -29,7 +29,7 @@
update_type_list()
var/datum/frame/frame_types/frame_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) in frame_types_floor
if(!response || response.name == "Cancel")
return
frame_type = response
@@ -37,10 +37,10 @@
build_machine_type = /obj/structure/frame
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
ndir = usr.dir
ndir = user.dir
if(!(ndir in cardinal))
return
@@ -48,13 +48,15 @@
M.fingerprints = fingerprints
M.fingerprintshidden = fingerprintshidden
M.fingerprintslast = fingerprintslast
if(istype(src.loc, /obj/item/weapon/gripper)) //Typical gripper shenanigans
user.drop_item()
qdel(src)
/obj/item/frame/proc/try_build(turf/on_wall, mob/user as mob)
update_type_list()
var/datum/frame/frame_types/frame_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) in frame_types_wall
if(!response || response.name == "Cancel")
return
frame_type = response
@@ -62,38 +64,40 @@
build_machine_type = /obj/structure/frame
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)
if(get_dist(on_wall, user)>1)
return
var/ndir
if(reverse)
ndir = get_dir(usr, on_wall)
ndir = get_dir(user, on_wall)
else
ndir = get_dir(on_wall, usr)
ndir = get_dir(on_wall, user)
if(!(ndir in cardinal))
return
var/turf/loc = get_turf(usr)
var/turf/loc = get_turf(user)
var/area/A = loc.loc
if(!istype(loc, /turf/simulated/floor))
usr << "<span class='danger'>\The frame cannot be placed on this spot.</span>"
to_chat(user, "<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>"
to_chat(user, "<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>"
to_chat(user, "<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)
M.fingerprints = fingerprints
M.fingerprintshidden = fingerprintshidden
M.fingerprintslast = fingerprintslast
if(istype(src.loc, /obj/item/weapon/gripper)) //Typical gripper shenanigans
user.drop_item()
qdel(src)
/obj/item/frame/light

View File

@@ -51,7 +51,7 @@
desc = "... Blitzkrieg?"
icon = 'icons/mecha/mecha64x64.dmi'
icon_state = "pzrwreck"
layer = 4 // so it overlaps other people
plane = MOB_PLANE
pixel_x = -16
anchored = 1 // It's fucking huge. You aren't moving it.

View File

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

View File

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

View File

@@ -161,7 +161,7 @@
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
smoke.icon = I
smoke.layer = 6
smoke.plane = ABOVE_PLANE
smoke.set_dir(pick(cardinal))
smoke.pixel_x = -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.
icon = 'icons/effects/effects.dmi'
icon_state = "fuel"
layer = TURF_LAYER+0.2
plane = DIRTY_PLANE
anchored = 1
var/amount = 1

View File

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

View File

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

View File

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

View File

@@ -2,7 +2,7 @@
name = "rune"
desc = "A rune drawn in crayon."
icon = 'icons/obj/rune.dmi'
layer = 2.1
plane = DIRTY_PLANE
anchored = 1
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."
icon = 'icons/mob/screen1.dmi'
icon_state = "arrow"
layer = 16.0
plane = ABOVE_PLANE
anchored = 1
mouse_opacity = 0
@@ -11,4 +11,4 @@
/obj/effect/decal/spraystill
density = 0
anchored = 1
layer = 50
plane = ABOVE_PLANE

View File

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

View File

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

View File

@@ -17,7 +17,8 @@
icon = 'icons/misc/beach2.dmi'
icon_state = "palm1"
density = 1
layer = 5
plane = MOB_PLANE
layer = ABOVE_MOB_LAYER
anchored = 1
/obj/effect/overlay/palmtree_l
@@ -25,7 +26,8 @@
icon = 'icons/misc/beach2.dmi'
icon_state = "palm2"
density = 1
layer = 5
plane = MOB_PLANE
layer = ABOVE_MOB_LAYER
anchored = 1
/obj/effect/overlay/coconut
@@ -37,7 +39,7 @@
name = "Bluespace"
icon = 'icons/turf/space.dmi'
icon_state = "bluespacify"
layer = 10
plane = ABOVE_PLANE
/obj/effect/overlay/wallrot
name = "wallrot"
@@ -45,7 +47,8 @@
icon = 'icons/effects/wallrot.dmi'
anchored = 1
density = 1
layer = 5
plane = MOB_PLANE
layer = ABOVE_MOB_LAYER
mouse_opacity = 0
/obj/effect/overlay/wallrot/New()
@@ -70,7 +73,8 @@
/obj/effect/overlay/snow/floor
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
/obj/effect/overlay/snow/floor/edges
@@ -81,11 +85,12 @@
/obj/effect/overlay/snow/airlock
icon_state = "snowairlock"
layer = 3.2 //Just above airlocks
layer = DOOR_CLOSED_LAYER+0.01
/obj/effect/overlay/snow/floor/pointy
icon_state = "snowfloorpointy"
/obj/effect/overlay/snow/wall
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."
icon_state = "spiderling"
anchored = 0
layer = 2.7
layer = HIDING_LAYER
health = 3
var/last_itch = 0
var/amount_grown = -1

View File

@@ -46,11 +46,11 @@
if(colour != "#FFFFFF" && shadeColour != "#000000")
colour = "#FFFFFF"
shadeColour = "#000000"
user << "You will now draw in white and black with this crayon."
to_chat(usr,"You will now draw in white and black with this crayon.")
else
colour = "#000000"
shadeColour = "#FFFFFF"
user << "You will now draw in black and white with this crayon."
to_chat(usr,"You will now draw in black and white with this crayon.")
return
/obj/item/weapon/pen/crayon/rainbow
@@ -72,22 +72,22 @@
switch(drawtype)
if("letter")
drawtype = input("Choose the letter.", "Crayon scribbles") in list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
user << "You start drawing a letter on the [target.name]."
to_chat(usr,"You start drawing a letter on the [target.name].")
if("graffiti")
user << "You start drawing graffiti on the [target.name]."
to_chat(usr,"You start drawing graffiti on the [target.name].")
if("rune")
user << "You start drawing a rune on the [target.name]."
to_chat(usr,"You start drawing a rune on the [target.name].")
if("arrow")
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(usr,"You start drawing an arrow on the [target.name].")
if(instant || do_after(user, 50))
new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype)
user << "You finish drawing."
to_chat(usr,"You finish drawing.")
target.add_fingerprint(user) // Adds their fingerprints to the floor the crayon is drawn on.
if(uses)
uses--
if(!uses)
user << "<span class='warning'>You used up your crayon!</span>"
to_chat(usr,"<span class='warning'>You used up your crayon!</span>")
qdel(src)
return
@@ -99,7 +99,93 @@
if(uses)
uses -= 5
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(usr,"You will now draw in white and black with this marker.")
else
colour = "#000000"
shadeColour = "#FFFFFF"
to_chat(usr,"You will now draw in black and white with this marker.")
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(usr,"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)
else
..()

View File

@@ -185,7 +185,7 @@
if(text)
exonet.send_message(their_address, "text", text)
im_list += list(list("address" = exonet.address, "to_address" = their_address, "im" = text))
log_pda("(COMM: [src]) sent \"[text]\" to [exonet.get_atom_from_address(their_address)]",usr)
log_pda("(COMM: [src]) sent \"[text]\" to [exonet.get_atom_from_address(their_address)]", usr)
for(var/mob/M in player_list)
if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears))
if(istype(M, /mob/new_player) || M.forbid_seeing_deadchat)

View File

@@ -104,7 +104,6 @@
bmark.pixel_x = p_x
bmark.pixel_y = p_y
bmark.icon = 'icons/effects/effects.dmi'
bmark.layer = 3.5
bmark.icon_state = "scorch"
if(decaltype == 1)

View File

@@ -860,7 +860,7 @@
/obj/structure/plushie/carp
name = "plush carp"
desc = "A plushie of an elated carp! Straight from the wilds of the Vir frontier, now right here in your hands."
icon_state = "plushie/carp"
icon_state = "carpplushie"
phrase = "Glorf!"
/obj/structure/plushie/beepsky

View File

@@ -46,7 +46,6 @@
name = "\proper the coordinates to clown planet"
icon_state = "data"
item_state = "card-id"
layer = 3
level = 2
desc = "This card contains coordinates to the fabled Clown Planet. Handle with care."
function = "teleporter"

View File

@@ -71,7 +71,7 @@
/obj/item/weapon/implant/tracking
name = "tracking implant"
desc = "Track with this."
desc = "An implant normally given to dangerous criminals. Allows security to track your location."
var/id = 1
var/degrade_time = 10 MINUTES //How long before the implant stops working outside of a living body.

View File

@@ -50,4 +50,41 @@
// Randomizes color
/obj/item/weapon/melee/umbrella/random/New()
color = "#"+get_random_colour()
..()
..()
/obj/item/weapon/melee/cursedblade
name = "crystal blade"
desc = "The red crystal blade's polished surface glints in the light, giving off a faint glow."
icon_state = "soulblade"
slot_flags = SLOT_BELT | SLOT_BACK
force = 30
throwforce = 10
w_class = ITEMSIZE_NORMAL
sharp = 1
edge = 1
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
hitsound = 'sound/weapons/bladeslice.ogg'
can_speak = 1
var/list/voice_mobs = list() //The curse of the sword is that it has someone trapped inside.
/obj/item/weapon/melee/cursedblade/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
if(default_parry_check(user, attacker, damage_source) && prob(50))
user.visible_message("<span class='danger'>\The [user] parries [attack_text] with \the [src]!</span>")
playsound(user.loc, 'sound/weapons/punchmiss.ogg', 50, 1)
return 1
return 0
/obj/item/weapon/melee/cursedblade/proc/ghost_inhabit(var/mob/candidate)
if(!isobserver(candidate))
return
//Handle moving the ghost into the new shell.
announce_ghost_joinleave(candidate, 0, "They are occupying a cursed sword now.")
var/mob/living/voice/new_voice = new /mob/living/voice(src) //Make the voice mob the ghost is going to be.
new_voice.transfer_identity(candidate) //Now make the voice mob load from the ghost's active character in preferences.
new_voice.mind = candidate.mind //Transfer the mind, if any.
new_voice.ckey = candidate.ckey //Finally, bring the client over.
new_voice.name = "cursed sword" //Cursed swords shouldn't be known characters.
new_voice.real_name = "cursed sword"
voice_mobs.Add(new_voice)
listening_objects |= src

View File

@@ -30,7 +30,7 @@ var/list/tape_roll_applications = list()
name = "tape"
icon = 'icons/policetape.dmi'
anchored = 1
layer = 3.2
layer = WINDOW_LAYER
var/lifted = 0
var/crumpled = 0
var/tape_dir = 0
@@ -257,7 +257,7 @@ var/list/tape_roll_applications = list()
else
var/obj/item/tape/P = new tape_type(T)
P.update_icon()
P.layer = 3.2
P.layer = WINDOW_LAYER
user << "<span class='notice'>You finish placing \the [src].</span>"
if (istype(A, /turf/simulated/floor) ||istype(A, /turf/unsimulated/floor))
@@ -307,10 +307,11 @@ var/list/tape_roll_applications = list()
/obj/item/tape/proc/lift(time)
lifted = 1
layer = 8
plane = MOB_PLANE
layer = ABOVE_MOB_LAYER
spawn(time)
lifted = 0
layer = initial(layer)
reset_plane_and_layer()
// Returns a list of all tape objects connected to src, including itself.
/obj/item/tape/proc/gettapeline()

View File

@@ -135,7 +135,8 @@
/obj/item/weapon/crowbar,
/obj/item/device/flashlight,
/obj/item/weapon/cell/device,
/obj/item/weapon/extinguisher/mini
/obj/item/weapon/extinguisher/mini,
/obj/item/weapon/storage/quickdraw/syringe_case
)
/obj/item/weapon/storage/belt/medical/emt
@@ -373,7 +374,9 @@
/obj/item/weapon/storage/excavation,
/obj/item/weapon/anobattery,
/obj/item/device/ano_scanner,
/obj/item/weapon/pickaxe/hand
/obj/item/weapon/pickaxe/hand,
/obj/item/device/xenoarch_multi_tool,
/obj/item/weapon/pickaxe/excavationdrill
)
/obj/item/weapon/storage/belt/fannypack

View File

@@ -114,6 +114,48 @@
return
..()
/obj/item/weapon/storage/fancy/markers
name = "box of markers"
desc = "A very professional looking box of permanent markers."
icon = 'icons/obj/crayons.dmi'
icon_state = "markerbox"
w_class = ITEMSIZE_SMALL
icon_type = "marker"
can_hold = list(
/obj/item/weapon/pen/crayon/marker
)
starts_with = list(
/obj/item/weapon/pen/crayon/marker/black,
/obj/item/weapon/pen/crayon/marker/red,
/obj/item/weapon/pen/crayon/marker/orange,
/obj/item/weapon/pen/crayon/marker/yellow,
/obj/item/weapon/pen/crayon/marker/green,
/obj/item/weapon/pen/crayon/marker/blue,
/obj/item/weapon/pen/crayon/marker/purple
)
/obj/item/weapon/storage/fancy/markers/initialize()
. = ..()
update_icon()
/obj/item/weapon/storage/fancy/markers/update_icon()
var/mutable_appearance/ma = new(src)
ma.overlays = list()
for(var/obj/item/weapon/pen/crayon/marker/marker in contents)
ma.overlays += image('icons/obj/crayons.dmi',"m"+marker.colourName)
appearance = ma
/obj/item/weapon/storage/fancy/markers/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/pen/crayon/marker))
switch(W:colourName)
if("mime")
to_chat(usr,"This marker is too depressing to be contained in this box.")
return
if("rainbow")
to_chat(usr,"This marker is too childish to be contained in this box.")
return
..()
////////////
//CIG PACK//
////////////
@@ -259,7 +301,8 @@
icon_state = "paperbox"
icon = 'icons/obj/cigarettes.dmi'
w_class = ITEMSIZE_TINY
throwforce = 1
throwforce = 2
slot_flags = SLOT_BELT
storage_slots = 14
can_hold = list(/obj/item/weapon/rollingpaper)
starts_with = list(/obj/item/weapon/rollingpaper = 14)

View File

@@ -1,78 +1,81 @@
// -----------------------------
// Quickdraw storage
// -----------------------------
//These items are pouches and cases made to be kept in belts or pockets to quickly draw objects from
//Largely inspired by the vest pouches on Colonial Marines
/obj/item/weapon/storage/quickdraw
name = "quickdraw"
desc = "This object should not appear"
icon = 'icons/obj/storage_vr.dmi'
//Quickmode
//When set to 0, this storage will operate as a regular storage, and clicking on it while equipped will open it as a storage
//When set to 1, a click while it is equipped will instead move the first item inside it to your hand
var/quickmode = 0
/obj/item/weapon/storage/quickdraw/attack_hand(mob/user as mob)
if(src.loc == user) //If they aren't holding us, we do nothing special
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(quickmode)
var/first_item = contents[1]
if(first_item && !H.get_active_hand()) //Do we have anything to give you?
H.put_in_hands(first_item)
return
if(H.l_store == src && !H.get_active_hand()) //overrides
src.open(user)
return
if(H.r_store == src && !H.get_active_hand())
src.open(user)
return
..() //Nothing special happened, go call the other proc
/obj/item/weapon/storage/quickdraw/verb/toggle_quickdraw()
set name = "Switch Quickdraw Mode"
set category = "Object"
quickmode = !quickmode
switch (quickmode)
if(1)
to_chat(usr, "[src] now draws the first object inside.")
if(0)
to_chat(usr, "[src] now opens as a container.")
/obj/item/weapon/storage/quickdraw/AltClick(mob/user)
..()
if(src.loc == user) //Are they carrying us?
toggle_quickdraw()
// -----------------------------
// Syringe case
// -----------------------------
/obj/item/weapon/storage/quickdraw/syringe_case
name = "syringe case"
desc = "A small case for safely carrying sharps around."
icon_state = "syringe_case"
w_class = ITEMSIZE_SMALL
max_w_class = ITEMSIZE_TINY
max_storage_space = ITEMSIZE_TINY * 6 //Capable of holding six syringes
//Can hold syringes and autoinjectors, but also pills if you really wanted. Syringe-shaped objects like pens and cigarettes also fit, but why would you do that?
can_hold = list(/obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/reagent_containers/hypospray/autoinjector,
/obj/item/weapon/reagent_containers/pill, /obj/item/weapon/pen, /obj/item/device/flashlight/pen, /obj/item/clothing/mask/smokable/cigarette)
quickmode = 1 //Starts in quickdraw mode
//Preloaded for your convenience!
starts_with = list(
/obj/item/weapon/reagent_containers/syringe,
/obj/item/weapon/reagent_containers/syringe,
/obj/item/weapon/reagent_containers/syringe,
/obj/item/weapon/reagent_containers/syringe,
/obj/item/weapon/reagent_containers/syringe,
/obj/item/weapon/reagent_containers/syringe
// -----------------------------
// Quickdraw storage
// -----------------------------
//These items are pouches and cases made to be kept in belts or pockets to quickly draw objects from
//Largely inspired by the vest pouches on Colonial Marines
/obj/item/weapon/storage/quickdraw
name = "quickdraw"
desc = "This object should not appear"
icon = 'icons/obj/storage_vr.dmi' // VOREStation Edit
//Quickmode
//When set to 0, this storage will operate as a regular storage, and clicking on it while equipped will open it as a storage
//When set to 1, a click while it is equipped will instead move the first item inside it to your hand
var/quickmode = 0
/obj/item/weapon/storage/quickdraw/attack_hand(mob/user as mob)
if(src.loc == user) //If they aren't holding us, we do nothing special
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(quickmode)
var/first_item = contents[1]
if(first_item && !H.get_active_hand()) //Do we have anything to give you?
H.put_in_hands(first_item)
return
if(H.l_store == src && !H.get_active_hand()) //overrides
src.open(user)
return
if(H.r_store == src && !H.get_active_hand())
src.open(user)
return
..() //Nothing special happened, go call the other proc
/obj/item/weapon/storage/quickdraw/verb/toggle_quickdraw()
set name = "Switch Quickdraw Mode"
set category = "Object"
quickmode = !quickmode
switch (quickmode)
if(1)
to_chat(usr, "[src] now draws the first object inside.")
if(0)
to_chat(usr, "[src] now opens as a container.")
/obj/item/weapon/storage/quickdraw/AltClick(mob/user)
..()
if(src.loc == user) //Are they carrying us?
toggle_quickdraw()
// If we start adding more of these, we'll need to make them their own folder. 'til then, this one should be fine.
// -----------------------------
// Syringe case
// -----------------------------
/obj/item/weapon/storage/quickdraw/syringe_case
name = "syringe case"
desc = "A small case for safely carrying sharps around."
icon_state = "syringe_case"
w_class = ITEMSIZE_SMALL
max_w_class = ITEMSIZE_TINY
max_storage_space = ITEMSIZE_TINY * 6 //Capable of holding six syringes
//Can hold syringes and autoinjectors, but also pills if you really wanted. Syringe-shaped objects like pens and cigarettes also fit, but why would you do that?
can_hold = list(/obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/reagent_containers/hypospray/autoinjector,
/obj/item/weapon/reagent_containers/pill, /obj/item/weapon/pen, /obj/item/device/flashlight/pen, /obj/item/clothing/mask/smokable/cigarette)
quickmode = 1 //Starts in quickdraw mode
//Preloaded for your convenience!
starts_with = list(
/obj/item/weapon/reagent_containers/syringe,
/obj/item/weapon/reagent_containers/syringe,
/obj/item/weapon/reagent_containers/syringe,
/obj/item/weapon/reagent_containers/syringe,
/obj/item/weapon/reagent_containers/syringe,
/obj/item/weapon/reagent_containers/syringe
)

View File

@@ -131,7 +131,7 @@
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "tape"
w_class = ITEMSIZE_TINY
layer = 4
plane = MOB_PLANE
anchored = 1 //it's sticky, no you cant move it
var/obj/item/weapon/stuck = null

View File

@@ -188,7 +188,7 @@
carrying.Add(I)
Img.icon = I.icon
Img.icon_state = I.icon_state
Img.layer = 30 + I.layer
Img.layer = layer + I.layer*0.01
if(istype(I, /obj/item/weapon/material))
var/obj/item/weapon/material/O = I
if(O.applies_material_colour)

View File

@@ -1,4 +1,6 @@
/obj
layer = OBJ_LAYER
plane = OBJ_PLANE
//Used to store information about the contents of the object.
var/list/matter
var/w_class // Size of the object.
@@ -13,6 +15,7 @@
var/armor_penetration = 0
var/show_messages
var/preserve_item = 0 //whether this object is preserved when its owner goes into cryo-storage, gateway, etc
var/can_speak = 0 //For MMIs and admin trickery. If an object has a brainmob in its contents, set this to 1 to allow it to speak.
var/show_examine = TRUE // Does this pop up on a mob when the mob is examined?

View File

@@ -100,11 +100,6 @@ something, make sure it's not in one of the other lists.*/
prob(1);/obj/item/clothing/under/harness,
prob(1);/obj/item/clothing/under/tactical,
prob(3);/obj/item/clothing/accessory/storage/webbing,
prob(4);/obj/item/weapon/spacecash/c1,
prob(3);/obj/item/weapon/spacecash/c10,
prob(3);/obj/item/weapon/spacecash/c20,
prob(1);/obj/item/weapon/spacecash/c50,
prob(1);/obj/item/weapon/spacecash/c100,
prob(3);/obj/item/weapon/camera_assembly,
prob(4);/obj/item/weapon/caution,
prob(3);/obj/item/weapon/caution/cone,

View File

@@ -19,6 +19,18 @@
/obj/item/device/flashlight,
/obj/item/device/multitool)
/obj/random/tool/powermaint
name = "random powertool"
desc = "This is a random rare powertool for maintenance"
icon_state = "jaws_pry"
/obj/random/tool/powermaint/item_to_spawn()
return pick(prob(320);/obj/random/tool,
prob(1);/obj/item/weapon/screwdriver/power,
prob(1);/obj/item/weapon/wirecutters/power,
prob(15);/obj/item/weapon/weldingtool/electric,
prob(5);/obj/item/weapon/weldingtool/experimental)
/obj/random/tool/power
name = "random powertool"
desc = "This is a random powertool"
@@ -148,7 +160,7 @@
name = "Random Medicine"
desc = "This is a random medical item."
icon = 'icons/obj/items.dmi'
icon_state = "traumakit"
icon_state = "advfirstaid"
/obj/random/medical/item_to_spawn()
return pick(prob(21);/obj/random/medical/lite,
@@ -203,11 +215,11 @@
icon_state = "firstaid"
/obj/random/firstaid/item_to_spawn()
return pick(prob(4);/obj/item/weapon/storage/firstaid/regular,
prob(3);/obj/item/weapon/storage/firstaid/toxin,
prob(3);/obj/item/weapon/storage/firstaid/o2,
prob(2);/obj/item/weapon/storage/firstaid/adv,
prob(3);/obj/item/weapon/storage/firstaid/fire,
return pick(prob(10);/obj/item/weapon/storage/firstaid/regular,
prob(8);/obj/item/weapon/storage/firstaid/toxin,
prob(8);/obj/item/weapon/storage/firstaid/o2,
prob(6);/obj/item/weapon/storage/firstaid/adv,
prob(8);/obj/item/weapon/storage/firstaid/fire,
prob(1);/obj/item/weapon/storage/firstaid/combat)
/obj/random/contraband
@@ -236,6 +248,20 @@
prob(2);/obj/item/weapon/reagent_containers/syringe/drugs,
prob(1);/obj/item/weapon/reagent_containers/syringe/steroid)
/obj/random/cash
name = "random currency"
desc = "LOADSAMONEY!"
icon = 'icons/obj/items.dmi'
icon_state = "spacecash1"
/obj/random/cash/item_to_spawn()
return pick(prob(320);/obj/random/maintenance/clean,
prob(12);/obj/item/weapon/spacecash/c1,
prob(8);/obj/item/weapon/spacecash/c10,
prob(4);/obj/item/weapon/spacecash/c20,
prob(1);/obj/item/weapon/spacecash/c50,
prob(1);/obj/item/weapon/spacecash/c100)
/obj/random/soap
name = "Random Soap"
desc = "This is a random bar of soap."
@@ -246,7 +272,7 @@
return pick(prob(3);/obj/item/weapon/soap,
prob(2);/obj/item/weapon/soap/nanotrasen,
prob(2);/obj/item/weapon/soap/deluxe,
prob(1);/obj/item/weapon/soap/syndie,)
prob(1);/obj/item/weapon/soap/syndie)
/obj/random/drinkbottle
@@ -387,14 +413,45 @@
icon_state = "nymphplushie"
/obj/random/plushie/item_to_spawn()
return pick(/obj/item/toy/plushie/nymph,
/obj/item/toy/plushie/mouse,
/obj/item/toy/plushie/kitten,
/obj/item/toy/plushie/lizard,
/obj/item/toy/plushie/black_cat,
/obj/item/toy/plushie/black_fox,
/obj/item/toy/plushie/blue_fox,
/obj/random/carp_plushie,
/obj/item/toy/plushie/coffee_fox,
/obj/item/toy/plushie/corgi,
/obj/item/toy/plushie/crimson_fox,
/obj/item/toy/plushie/deer,
/obj/item/toy/plushie/girly_corgi,
/obj/item/toy/plushie/grey_cat,
/obj/item/toy/plushie/marble_fox,
/obj/item/toy/plushie/octopus,
/obj/item/toy/plushie/orange_cat,
/obj/item/toy/plushie/orange_fox,
/obj/item/toy/plushie/pink_fox,
/obj/item/toy/plushie/purple_fox,
/obj/item/toy/plushie/red_fox,
/obj/item/toy/plushie/robo_corgi,
/obj/item/toy/plushie/siamese_cat,
/obj/item/toy/plushie/spider,
/obj/item/toy/plushie/tabby_cat,
/obj/item/toy/plushie/tuxedo_cat,
/obj/item/toy/plushie/white_cat)
/obj/random/plushielarge
name = "random large plushie"
desc = "This is a randomn large plushie."
icon = 'icons/obj/toy.dmi'
icon_state = "droneplushie"
/obj/random/plushielarge/item_to_spawn()
return pick(/obj/structure/plushie/ian,
/obj/structure/plushie/drone,
/obj/structure/plushie/carp,
/obj/structure/plushie/beepsky,
/obj/item/toy/plushie/nymph,
/obj/item/toy/plushie/mouse,
/obj/item/toy/plushie/kitten,
/obj/item/toy/plushie/lizard)
/obj/structure/plushie/beepsky)
/obj/random/toy
name = "random toy"
@@ -418,6 +475,8 @@
/obj/item/toy/crossbow,
/obj/item/toy/blink,
/obj/item/toy/waterflower,
/obj/item/toy/eight_ball,
/obj/item/toy/eight_ball/conch,
/obj/item/toy/prize/ripley,
/obj/item/toy/prize/fireripley,
/obj/item/toy/prize/deathripley,

View File

@@ -10,7 +10,8 @@ LINEN BINS
icon = 'icons/obj/items.dmi'
icon_state = "sheet"
slot_flags = SLOT_BACK
layer = 4.0
plane = MOB_PLANE
layer = BELOW_MOB_LAYER
throwforce = 1
throw_speed = 1
throw_range = 2
@@ -19,9 +20,9 @@ LINEN BINS
/obj/item/weapon/bedsheet/attack_self(mob/user as mob)
user.drop_item()
if(layer == initial(layer))
layer = MOB_LAYER + 0.1
layer = ABOVE_MOB_LAYER
else
layer = initial(layer)
reset_plane_and_layer()
add_fingerprint(user)
return

View File

@@ -10,12 +10,14 @@
var/needscharger //For drone pods that want their pod to turn into a charger.
// Call this to get a ghost volunteer.
/obj/structure/ghost_pod/proc/trigger()
/obj/structure/ghost_pod/proc/trigger(var/alert, var/adminalert)
if(!ghost_query_type)
return FALSE
if(busy)
return FALSE
visible_message(alert)
log_and_message_admins(adminalert)
busy = TRUE
var/datum/ghost_query/Q = new ghost_query_type()
var/list/winner = Q.query()
@@ -44,7 +46,7 @@
/obj/structure/ghost_pod/manual/attack_hand(var/mob/living/user)
if(!used)
if(confirm_before_open)
if(alert(user, "Are you sure you want to open \the [src]?", "Confirm", "No", "Yes") == "No")
if(alert(user, "Are you sure you want to touch \the [src]?", "Confirm", "No", "Yes") == "No")
return
trigger()

View File

@@ -13,9 +13,7 @@
needscharger = TRUE
/obj/structure/ghost_pod/manual/lost_drone/trigger()
..()
visible_message("<span class='notice'>\The [src] appears to be attempting to restart the robot contained inside.</span>")
log_and_message_admins("is attempting to open \a [src].")
..("<span class='notice'>\The [src] appears to be attempting to restart the robot contained inside.</span>", "is attempting to open \a [src].")
/obj/structure/ghost_pod/manual/lost_drone/create_occupant(var/mob/M)
density = FALSE
@@ -68,14 +66,13 @@
description_info = "This will summon some manner of creature through quite dubious means. The creature will be controlled by a player."
icon_state = "corgirune"
icon_state_opened = "corgirune-inert"
density = TRUE
density = FALSE
anchored = TRUE
ghost_query_type = /datum/ghost_query/corgi_rune
confirm_before_open = TRUE
/obj/structure/ghost_pod/manual/corgi/trigger()
..()
visible_message("<span class='warning'>\The [usr] places their hand on the rune!</span>")
log_and_message_admins("is attempting to summon a corgi.")
..("<span class='warning'>\The [usr] places their hand on the rune!</span>", "is attempting to summon a corgi.")
/obj/structure/ghost_pod/manual/corgi/create_occupant(var/mob/M)
density = FALSE
@@ -86,4 +83,29 @@
R.ckey = M.ckey
visible_message("<span class='warning'>With a bright flash of light, \the [src] disappears, and in its place stands a small corgi.</span>")
log_and_message_admins("successfully touched \a [src] and summoned a corgi.")
..()
/obj/structure/ghost_pod/manual/cursedblade
name = "abandoned blade"
desc = "A red crystal blade that someone jammed deep into a stone. If you try hard enough, you might be able to remove it."
icon_state = "soulblade-embedded"
icon_state_opened = "soulblade-released"
density = TRUE
anchored = TRUE
ghost_query_type = /datum/ghost_query/cursedblade
confirm_before_open = TRUE
/obj/structure/ghost_pod/manual/cursedblade/trigger()
..("<span class='warning'>\The [usr] attempts to pull out the sword!</span>", "is activating a cursed blade.")
/obj/structure/ghost_pod/manual/cursedblade/create_occupant(var/mob/M)
density = FALSE
var/obj/item/weapon/melee/cursedblade/R = new(get_turf(src))
to_chat(M, "<span class='notice'>You are a <b>Cursed Sword</b>, discovered by a hapless explorer. \
You were once an explorer yourself, when one day you discovered a strange sword made from a red crystal. As soon as you touched it,\
your body was reduced to ashes and your soul was cursed to remain trapped in the blade forever. \
Now it is up to you to decide whether you want to be a faithful companion, or a bitter prisoner of the blade.</span>")
R.ghost_inhabit(M)
visible_message("<span class='warning'>The blade shines brightly for a brief moment as [usr] pulls it out of the stone!</span>")
log_and_message_admins("successfully acquired a cursed sword.")
..()

View File

@@ -2,7 +2,7 @@
icon_state = "girder"
anchored = 1
density = 1
layer = 2
plane = PLATING_PLANE
w_class = ITEMSIZE_HUGE
var/state = 0
var/health = 200

View File

@@ -8,7 +8,7 @@
throwpass = 1
climbable = 1
layer = 3.1 //Above dirt piles
layer = ABOVE_JUNK_LAYER
//Maybe make these calculate based on material?
var/health = 100

View File

@@ -7,7 +7,7 @@
anchored = 1
flags = CONDUCT
pressure_resistance = 5*ONE_ATMOSPHERE
layer = 2.9
layer = UNDER_JUNK_LAYER
explosion_resistance = 1
var/health = 10
var/destroyed = 0

View File

@@ -6,7 +6,7 @@
density = 0
anchored = 1.0
w_class = ITEMSIZE_NORMAL
layer = 2.3 //under pipes
plane = PLATING_PLANE
// flags = CONDUCT
/obj/structure/lattice/initialize()

View File

@@ -148,7 +148,7 @@
icon = 'icons/obj/stationobjs.dmi'
icon_state = "morguet"
density = 1
layer = 2.0
plane = TURF_PLANE
var/obj/structure/morgue/connected = null
anchored = 1
throwpass = 1

View File

@@ -6,7 +6,7 @@
density = 1
throwpass = 1
climbable = 1
layer = 3.2 //Just above doors
layer = WINDOW_LAYER
anchored = 1
flags = ON_BORDER
icon_state = "railing0"

View File

@@ -172,7 +172,8 @@ obj/structure/safe/ex_act(severity)
icon_state = "floorsafe"
density = 0
level = 1 //underfloor
layer = 2.5
plane = TURF_PLANE
layer = ABOVE_UTILITY
/obj/structure/safe/floor/initialize()
. = ..()

View File

@@ -3,7 +3,7 @@
anchored = 1
opacity = 0
density = 0
layer = 3.5
layer = ABOVE_JUNK_LAYER
w_class = ITEMSIZE_NORMAL
/obj/structure/sign/ex_act(severity)

View File

@@ -48,15 +48,17 @@
if(isnull(stool_cache[cache_key]))
var/image/I = image(icon, "[base_icon]_armrest")
I.layer = MOB_LAYER + 0.1
I.plane = MOB_PLANE
I.color = padding_material.icon_colour
stool_cache[cache_key] = I
overlays |= stool_cache[cache_key]
/obj/structure/bed/chair/proc/update_layer()
if(src.dir == NORTH)
src.layer = FLY_LAYER
plane = MOB_PLANE
layer = MOB_LAYER + 0.1
else
src.layer = OBJ_LAYER
reset_plane_and_layer()
/obj/structure/bed/chair/set_dir()
..()

View File

@@ -29,7 +29,7 @@
W.density = 1
user.remove_from_mob(W)
W.loc = loc
W.layer = 3.1
W.layer = ABOVE_JUNK_LAYER
pinned_target = W
user << "You slide the target into the stake."
return

View File

@@ -7,7 +7,7 @@
icon = 'icons/obj/pipes/transit_tube.dmi'
icon_state = "E-W"
density = 1
layer = 3.1
layer = ABOVE_JUNK_LAYER
anchored = 1.0
var/list/tube_dirs = null
var/exit_delay = 2

View File

@@ -5,7 +5,7 @@
density = 1
w_class = ITEMSIZE_NORMAL
layer = 3.2//Just above doors
layer = WINDOW_LAYER
pressure_resistance = 4*ONE_ATMOSPHERE
anchored = 1.0
flags = ON_BORDER
@@ -462,7 +462,7 @@
if(ratio > 75)
return
var/image/I = image(icon, "damage[ratio]", layer + 0.1)
var/image/I = image(icon, "damage[ratio]", layer = layer + 0.1)
overlays += I
return

View File

@@ -1,8 +1,8 @@
//Config stuff
#define SUPPLY_DOCKZ 2 //Z-level of the Dock.
#define SUPPLY_STATIONZ 1 //Z-level of the Station.
#define SUPPLY_STATION_AREATYPE "/area/supply/station" //Type of the supply shuttle area for station
#define SUPPLY_DOCK_AREATYPE "/area/supply/dock" //Type of the supply shuttle area for dock
#define SUPPLY_DOCKZ 2 //Z-level of the Dock.
#define SUPPLY_STATIONZ 1 //Z-level of the Station.
#define SUPPLY_STATION_AREATYPE "/area/supply/station" //Type of the supply shuttle area for station
#define SUPPLY_DOCK_AREATYPE "/area/supply/dock" //Type of the supply shuttle area for dock
//Supply packs are in /code/defines/obj/supplypacks.dm
//Computers are in /code/game/machinery/computer/supply.dm
@@ -10,333 +10,324 @@
var/datum/controller/supply/supply_controller = new()
var/list/mechtoys = list(
/obj/item/toy/prize/ripley,
/obj/item/toy/prize/fireripley,
/obj/item/toy/prize/deathripley,
/obj/item/toy/prize/gygax,
/obj/item/toy/prize/durand,
/obj/item/toy/prize/honk,
/obj/item/toy/prize/marauder,
/obj/item/toy/prize/seraph,
/obj/item/toy/prize/mauler,
/obj/item/toy/prize/odysseus,
/obj/item/toy/prize/phazon
/obj/item/toy/prize/ripley,
/obj/item/toy/prize/fireripley,
/obj/item/toy/prize/deathripley,
/obj/item/toy/prize/gygax,
/obj/item/toy/prize/durand,
/obj/item/toy/prize/honk,
/obj/item/toy/prize/marauder,
/obj/item/toy/prize/seraph,
/obj/item/toy/prize/mauler,
/obj/item/toy/prize/odysseus,
/obj/item/toy/prize/phazon
)
/obj/item/weapon/paper/manifest
name = "supply manifest"
var/is_copy = 1
name = "supply manifest"
var/is_copy = 1
/area/supply/station
name = "Supply Shuttle"
icon_state = "shuttle3"
requires_power = 0
base_turf = /turf/space
name = "Supply Shuttle"
icon_state = "shuttle3"
requires_power = 0
base_turf = /turf/space
/area/supply/dock
name = "Supply Shuttle"
icon_state = "shuttle3"
requires_power = 0
base_turf = /turf/space
name = "Supply Shuttle"
icon_state = "shuttle3"
requires_power = 0
base_turf = /turf/space
/obj/structure/plasticflaps //HOW DO YOU CALL THOSE THINGS ANYWAY
name = "\improper plastic flaps"
desc = "Completely impassable - or are they?"
icon = 'icons/obj/stationobjs.dmi' //Change this.
icon_state = "plasticflaps"
density = 0
anchored = 1
layer = 4
explosion_resistance = 5
var/list/mobs_can_pass = list(
/mob/living/bot,
/mob/living/simple_animal/slime,
/mob/living/simple_animal/mouse,
/mob/living/silicon/robot/drone
)
name = "\improper plastic flaps"
desc = "Completely impassable - or are they?"
icon = 'icons/obj/stationobjs.dmi' //Change this.
icon_state = "plasticflaps"
density = 0
anchored = 1
layer = MOB_LAYER
plane = MOB_PLANE
explosion_resistance = 5
var/list/mobs_can_pass = list(
/mob/living/bot,
/mob/living/simple_animal/slime,
/mob/living/simple_animal/mouse,
/mob/living/silicon/robot/drone
)
/obj/structure/plasticflaps/attackby(obj/item/P, mob/user)
if(istype(P, /obj/item/weapon/wirecutters))
playsound(src, P.usesound, 50, 1)
user << "<span class='notice'>You start to cut the plastic flaps.</span>"
if(do_after(user, 10 * P.toolspeed))
user << "<span class='notice'>You cut the plastic flaps.</span>"
var/obj/item/stack/material/plastic/A = new /obj/item/stack/material/plastic( src.loc )
A.amount = 4
qdel(src)
return
else
return
if(istype(P, /obj/item/weapon/wirecutters))
playsound(src, P.usesound, 50, 1)
user << "<span class='notice'>You start to cut the plastic flaps.</span>"
if(do_after(user, 10 * P.toolspeed))
user << "<span class='notice'>You cut the plastic flaps.</span>"
var/obj/item/stack/material/plastic/A = new /obj/item/stack/material/plastic( src.loc )
A.amount = 4
qdel(src)
return
else
return
/obj/structure/plasticflaps/CanPass(atom/A, turf/T)
if(istype(A) && A.checkpass(PASSGLASS))
return prob(60)
if(istype(A) && A.checkpass(PASSGLASS))
return prob(60)
var/obj/structure/bed/B = A
if (istype(A, /obj/structure/bed) && B.has_buckled_mobs())//if it's a bed/chair and someone is buckled, it will not pass
return 0
var/obj/structure/bed/B = A
if (istype(A, /obj/structure/bed) && B.has_buckled_mobs())//if it's a bed/chair and someone is buckled, it will not pass
return 0
if(istype(A, /obj/vehicle)) //no vehicles
return 0
if(istype(A, /obj/vehicle)) //no vehicles
return 0
var/mob/living/M = A
if(istype(M))
if(M.lying)
return ..()
for(var/mob_type in mobs_can_pass)
if(istype(A, mob_type))
return ..()
return issmall(M)
var/mob/living/M = A
if(istype(M))
if(M.lying)
return ..()
for(var/mob_type in mobs_can_pass)
if(istype(A, mob_type))
return ..()
return issmall(M)
return ..()
return ..()
/obj/structure/plasticflaps/ex_act(severity)
switch(severity)
if (1)
qdel(src)
if (2)
if (prob(50))
qdel(src)
if (3)
if (prob(5))
qdel(src)
switch(severity)
if (1)
qdel(src)
if (2)
if (prob(50))
qdel(src)
if (3)
if (prob(5))
qdel(src)
/obj/structure/plasticflaps/mining //A specific type for mining that doesn't allow airflow because of them damn crates
name = "airtight plastic flaps"
desc = "Heavy duty, airtight, plastic flaps."
name = "airtight plastic flaps"
desc = "Heavy duty, airtight, plastic flaps."
New() //set the turf below the flaps to block air
var/turf/T = get_turf(loc)
if(T)
T.blocks_air = 1
..()
/obj/structure/plasticflaps/mining/New() //set the turf below the flaps to block air
var/turf/T = get_turf(loc)
if(T)
T.blocks_air = 1
..()
Destroy() //lazy hack to set the turf to allow air to pass if it's a simulated floor
var/turf/T = get_turf(loc)
if(T)
if(istype(T, /turf/simulated/floor))
T.blocks_air = 0
..()
/obj/structure/plasticflaps/mining/Destroy() //lazy hack to set the turf to allow air to pass if it's a simulated floor
var/turf/T = get_turf(loc)
if(T && istype(T, /turf/simulated/floor))
T.blocks_air = 0
..()
/*
/obj/effect/marker/supplymarker
icon_state = "X"
icon = 'icons/misc/mark.dmi'
name = "X"
invisibility = 101
anchored = 1
opacity = 0
icon_state = "X"
icon = 'icons/misc/mark.dmi'
name = "X"
invisibility = 101
anchored = 1
opacity = 0
*/
/datum/supply_order
var/ordernum
var/datum/supply_packs/object = null
var/orderedby = null
var/comment = null
var/ordernum
var/datum/supply_packs/object = null
var/orderedby = null
var/comment = null
//VOREStation Edit - Export reports
/datum/exported_crate
var/name
var/value
//VOREStation Edit End
var/name
var/value
/datum/controller/supply
//supply points
var/points = 50
var/points_per_process = 1.5
var/points_per_slip = 2
var/points_per_platinum = 5 // 5 points per sheet
var/points_per_phoron = 5
var/points_per_money = 0.02
//control
var/ordernum
var/list/shoppinglist = list()
var/list/requestlist = list()
var/list/supply_packs = list()
var/list/exported_crates = list() //VOREStation Edit - Export reports
//shuttle movement
var/movetime = 1200
var/datum/shuttle/ferry/supply/shuttle
//supply points
var/points = 50
var/points_per_process = 1.5
var/points_per_slip = 2
var/points_per_platinum = 5 // 5 points per sheet
var/points_per_phoron = 5
var/points_per_money = 0.02
//control
var/ordernum
var/list/shoppinglist = list()
var/list/requestlist = list()
var/list/supply_packs = list()
var/list/exported_crates = list()
//shuttle movement
var/movetime = 1200
var/datum/shuttle/ferry/supply/shuttle
New()
ordernum = rand(1,9000)
/datum/controller/supply/New()
ordernum = rand(1,9000)
for(var/typepath in (typesof(/datum/supply_packs) - /datum/supply_packs))
var/datum/supply_packs/P = new typepath()
supply_packs[P.name] = P
for(var/typepath in (typesof(/datum/supply_packs) - /datum/supply_packs))
var/datum/supply_packs/P = new typepath()
supply_packs[P.name] = P
// Supply shuttle ticker - handles supply point regeneration
// This is called by the process scheduler every thirty seconds
proc/process()
points += points_per_process
// Supply shuttle ticker - handles supply point regeneration
// This is called by the process scheduler every thirty seconds
/datum/controller/supply/proc/process()
points += points_per_process
//To stop things being sent to CentCom which should not be sent to centcomm. Recursively checks for these types.
proc/forbidden_atoms_check(atom/A)
if(istype(A,/mob/living))
return 1
if(istype(A,/obj/item/weapon/disk/nuclear))
return 1
if(istype(A,/obj/machinery/nuclearbomb))
return 1
if(istype(A,/obj/item/device/radio/beacon))
return 1
//To stop things being sent to CentCom which should not be sent to centcomm. Recursively checks for these types.
/datum/controller/supply/proc/forbidden_atoms_check(atom/A)
if(isliving(A))
return 1
if(istype(A,/obj/item/weapon/disk/nuclear))
return 1
if(istype(A,/obj/machinery/nuclearbomb))
return 1
if(istype(A,/obj/item/device/radio/beacon))
return 1
for(var/i=1, i<=A.contents.len, i++)
var/atom/B = A.contents[i]
if(.(B))
return 1
for(var/i=1, i<=A.contents.len, i++)
var/atom/B = A.contents[i]
if(.(B))
return 1
//Sellin
proc/sell()
var/area/area_shuttle = shuttle.get_location_area()
if(!area_shuttle) return
//Sellin
/datum/controller/supply/proc/sell()
var/area/area_shuttle = shuttle.get_location_area()
if(!area_shuttle) return
callHook("sell_shuttle", list(area_shuttle));
callHook("sell_shuttle", list(area_shuttle));
var/phoron_count = 0
var/plat_count = 0
var/money_count = 0
var/phoron_count = 0
var/plat_count = 0
var/money_count = 0
exported_crates = list() //VOREStation Edit - Export reports
exported_crates = list()
for(var/atom/movable/MA in area_shuttle)
if(MA.anchored) continue
for(var/atom/movable/MA in area_shuttle)
if(MA.anchored) continue
// Must be in a crate!
if(istype(MA,/obj/structure/closet/crate))
//VOREStation Edit - Export reports
var/oldpoints = points
var/oldphoron = phoron_count
var/oldplatinum = plat_count
var/oldmoney = money_count
//VOREStation Edit End
// Must be in a crate!
if(istype(MA,/obj/structure/closet/crate))
var/oldpoints = points
var/oldphoron = phoron_count
var/oldplatinum = plat_count
var/oldmoney = money_count
var/obj/structure/closet/crate/CR = MA
callHook("sell_crate", list(CR, area_shuttle))
var/obj/structure/closet/crate/CR = MA
callHook("sell_crate", list(CR, area_shuttle))
points += CR.points_per_crate
var/find_slip = 1
points += CR.points_per_crate
var/find_slip = 1
for(var/atom in CR)
// Sell manifests
var/atom/A = atom
if(find_slip && istype(A,/obj/item/weapon/paper/manifest))
var/obj/item/weapon/paper/manifest/slip = A
if(!slip.is_copy && slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense
points += points_per_slip
find_slip = 0
continue
for(var/atom in CR)
// Sell manifests
var/atom/A = atom
if(find_slip && istype(A,/obj/item/weapon/paper/manifest))
var/obj/item/weapon/paper/manifest/slip = A
if(!slip.is_copy && slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense
points += points_per_slip
find_slip = 0
continue
// Sell phoron and platinum
if(istype(A, /obj/item/stack))
var/obj/item/stack/P = A
switch(P.get_material_name())
if("phoron") phoron_count += P.get_amount()
if("platinum") plat_count += P.get_amount()
// Sell phoron and platinum
if(istype(A, /obj/item/stack))
var/obj/item/stack/P = A
switch(P.get_material_name())
if("phoron") phoron_count += P.get_amount()
if("platinum") plat_count += P.get_amount()
//Sell spacebucks
if(istype(A, /obj/item/weapon/spacecash))
var/obj/item/weapon/spacecash/cashmoney = A
money_count += cashmoney.worth
//Sell spacebucks
if(istype(A, /obj/item/weapon/spacecash))
var/obj/item/weapon/spacecash/cashmoney = A
money_count += cashmoney.worth
//VOREStation Edit - Export reports
var/datum/exported_crate/EC = new /datum/exported_crate()
EC.name = CR.name
EC.value = points - oldpoints
EC.value += (phoron_count - oldphoron) * points_per_phoron
EC.value += (plat_count - oldplatinum) * points_per_platinum
EC.value += (money_count - oldmoney) * points_per_money
exported_crates += EC
//VOREStation Edit End
var/datum/exported_crate/EC = new /datum/exported_crate()
EC.name = CR.name
EC.value = points - oldpoints
EC.value += (phoron_count - oldphoron) * points_per_phoron
EC.value += (plat_count - oldplatinum) * points_per_platinum
EC.value += (money_count - oldmoney) * points_per_money
exported_crates += EC
qdel(MA)
qdel(MA)
if(phoron_count)
points += phoron_count * points_per_phoron
points += phoron_count * points_per_phoron
points += plat_count * points_per_platinum
points += money_count * points_per_money
if(plat_count)
points += plat_count * points_per_platinum
//Buyin
/datum/controller/supply/proc/buy()
if(!shoppinglist.len)
return
if(money_count)
points += money_count * points_per_money
var/orderedamount = shoppinglist.len
//Buyin
proc/buy()
if(!shoppinglist.len) return
var/area/area_shuttle = shuttle.get_location_area()
if(!area_shuttle)
return
var/orderedamount = shoppinglist.len
var/list/clear_turfs = list()
var/area/area_shuttle = shuttle.get_location_area()
if(!area_shuttle) return
for(var/turf/T in area_shuttle)
if(T.density)
continue
var/contcount
for(var/atom/A in T.contents)
if(!A.simulated)
continue
contcount++
if(contcount)
continue
clear_turfs += T
var/list/clear_turfs = list()
for(var/S in shoppinglist)
if(!clear_turfs.len) break
var/i = rand(1,clear_turfs.len)
var/turf/pickedloc = clear_turfs[i]
clear_turfs.Cut(i,i+1)
shoppinglist -= S
for(var/turf/T in area_shuttle)
if(T.density) continue
var/contcount
for(var/atom/A in T.contents)
if(!A.simulated)
continue
contcount++
if(contcount)
continue
clear_turfs += T
var/datum/supply_order/SO = S
var/datum/supply_packs/SP = SO.object
for(var/S in shoppinglist)
if(!clear_turfs.len) break
var/i = rand(1,clear_turfs.len)
var/turf/pickedloc = clear_turfs[i]
clear_turfs.Cut(i,i+1)
shoppinglist -= S
var/obj/A = new SP.containertype(pickedloc)
A.name = "[SP.containername] [SO.comment ? "([SO.comment])":"" ]"
var/datum/supply_order/SO = S
var/datum/supply_packs/SP = SO.object
//supply manifest generation begin
var/obj/item/weapon/paper/manifest/slip
if(!SP.contraband)
slip = new /obj/item/weapon/paper/manifest(A)
slip.is_copy = 0
slip.info = "<h3>[command_name()] Shipping Manifest</h3><hr><br>"
slip.info +="Order #[SO.ordernum]<br>"
slip.info +="Destination: [station_name()]<br>"
slip.info +="[orderedamount] PACKAGES IN THIS SHIPMENT<br>"
slip.info +="CONTENTS:<br><ul>"
var/obj/A = new SP.containertype(pickedloc)
A.name = "[SP.containername] [SO.comment ? "([SO.comment])":"" ]"
//spawn the stuff, finish generating the manifest while you're at it
if(SP.access)
if(isnum(SP.access))
A.req_access = list(SP.access)
else if(islist(SP.access))
var/list/L = SP.access // access var is a plain var, we need a list
A.req_access = L.Copy()
else
log_debug("<span class='danger'>Supply pack with invalid access restriction [SP.access] encountered!</span>")
//supply manifest generation begin
var/list/contains
if(istype(SP,/datum/supply_packs/randomised))
var/datum/supply_packs/randomised/SPR = SP
contains = list()
if(SPR.contains.len)
for(var/j=1,j<=SPR.num_contained,j++)
contains += pick(SPR.contains)
else
contains = SP.contains
var/obj/item/weapon/paper/manifest/slip
if(!SP.contraband)
slip = new /obj/item/weapon/paper/manifest(A)
slip.is_copy = 0
slip.info = "<h3>[command_name()] Shipping Manifest</h3><hr><br>"
slip.info +="Order #[SO.ordernum]<br>"
slip.info +="Destination: [station_name()]<br>"
slip.info +="[orderedamount] PACKAGES IN THIS SHIPMENT<br>"
slip.info +="CONTENTS:<br><ul>"
for(var/typepath in contains)
if(!typepath) continue
var/number_of_items = max(1, contains[typepath])
for(var/j = 1 to number_of_items)
var/atom/B2 = new typepath(A)
if(slip) slip.info += "<li>[B2.name]</li>" //add the item to the manifest
//spawn the stuff, finish generating the manifest while you're at it
if(SP.access)
if(isnum(SP.access))
A.req_access = list(SP.access)
else if(islist(SP.access))
var/list/L = SP.access // access var is a plain var, we need a list
A.req_access = L.Copy()
else
world << "<span class='danger'>Supply pack with invalid access restriction [SP.access] encountered!</span>"
//manifest finalisation
if(slip)
slip.info += "</ul><br>"
slip.info += "CHECK CONTENTS AND STAMP BELOW THE LINE TO CONFIRM RECEIPT OF GOODS<hr>"
var/list/contains
if(istype(SP,/datum/supply_packs/randomised))
var/datum/supply_packs/randomised/SPR = SP
contains = list()
if(SPR.contains.len)
for(var/j=1,j<=SPR.num_contained,j++)
contains += pick(SPR.contains)
else
contains = SP.contains
for(var/typepath in contains)
if(!typepath) continue
var/number_of_items = max(1, contains[typepath])
for(var/j = 1 to number_of_items)
var/atom/B2 = new typepath(A)
if(slip) slip.info += "<li>[B2.name]</li>" //add the item to the manifest
//manifest finalisation
if(slip)
slip.info += "</ul><br>"
slip.info += "CHECK CONTENTS AND STAMP BELOW THE LINE TO CONFIRM RECEIPT OF GOODS<hr>"
return
return

View File

@@ -67,6 +67,13 @@ var/list/flooring_types
desc = "A layer of many tiny bits of frozen water. It's hard to tell how deep it is."
icon = 'icons/turf/snow_new.dmi'
icon_base = "snow"
footstep_sounds = list("human" = list(
'sound/effects/footstep/snow1.ogg',
'sound/effects/footstep/snow2.ogg',
'sound/effects/footstep/snow3.ogg',
'sound/effects/footstep/snow4.ogg',
'sound/effects/footstep/snow5.ogg'))
/decl/flooring/snow/snow2
name = "snow"

View File

@@ -6,7 +6,7 @@ var/list/floor_decals = list()
/obj/effect/floor_decal
name = "floor decal"
icon = 'icons/turf/flooring/decals_vr.dmi' // VOREStation Edit
layer = DECALS_LAYER
plane = DECAL_PLANE
var/supplied_dir
/obj/effect/floor_decal/New(var/newloc, var/newdir, var/newcolour)

View File

@@ -7,7 +7,7 @@ var/image/no_ceiling_image = null
return TRUE
/proc/cache_no_ceiling_image()
no_ceiling_image = image(icon = 'icons/turf/open_space.dmi', icon_state = "no_ceiling", layer = OVERTURF_LAYER)
no_ceiling_image = image(icon = 'icons/turf/open_space.dmi', icon_state = "no_ceiling")
no_ceiling_image.plane = PLANE_MESONS
/turf/simulated/floor/update_icon(var/update_neighbors)

View File

@@ -3,12 +3,14 @@
icon_state = "snow"
edge_blending_priority = 6
movement_cost = 2
initial_flooring = /decl/flooring/snow
turf_layers = list(
/turf/simulated/floor/outdoors/rocks,
/turf/simulated/floor/outdoors/dirt
)
var/list/crossed_dirs = list()
/turf/simulated/floor/outdoors/snow/Entered(atom/A)
if(isliving(A))
var/mdir = "[A.dir]"
@@ -51,5 +53,5 @@
if(istype(M, /mob/living))
if(M.stunned == 0)
to_chat(M, "<span class='warning'>You slide across the ice!</span>")
M.SetStunned(2)
M.SetStunned(1)
step(M,M.dir)

View File

@@ -252,7 +252,7 @@
O.icon_state = "2"
O.anchored = 1
O.density = 1
O.layer = 5
O.plane = ABOVE_PLANE
if(girder_material.integrity >= 150 && !girder_material.is_brittle()) //Strong girders will remain in place when a wall is melted.
dismantle_wall(1,1)

View File

@@ -1,5 +1,7 @@
/turf
icon = 'icons/turf/floors.dmi'
layer = TURF_LAYER
plane = TURF_PLANE
level = 1
var/holy = 0

View File

@@ -3,7 +3,6 @@
icon = 'icons/turf/shuttle_white.dmi'
thermal_conductivity = 0.05
heat_capacity = 0
layer = 2
/turf/unsimulated/shuttle/wall
name = "wall"

View File

@@ -7,6 +7,7 @@ var/global/floorIsLava = 0
/proc/message_admins(var/msg)
msg = "<span class=\"log_message\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[msg]</span></span>"
//log_adminwarn(msg) //log_and_message_admins is for this
for(var/client/C in admins)
if((R_ADMIN|R_MOD) & C.holder.rights)
C << msg

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