Merge remote-tracking branch 'refs/remotes/tgstation/master' into Research

This commit is contained in:
LatD
2016-05-28 01:37:55 +03:00
211 changed files with 927 additions and 1328 deletions
@@ -1,53 +0,0 @@
"a" = (/turf/closed/mineral/volcanic/lava_land_surface,/area/lavaland/surface/outdoors)
"b" = (/turf/open/floor/plating/asteroid/basalt/lava_land_surface,/area/lavaland/surface/outdoors)
"c" = (/turf/closed/wall/r_wall,/area/ruin/powered)
"d" = (/obj/structure/closet,/turf/open/floor/plasteel/freezer{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"e" = (/obj/structure/closet,/mob/living/simple_animal/hostile/zombie,/turf/open/floor/plasteel/freezer{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"f" = (/obj/structure/punching_bag,/turf/open/floor/plasteel/freezer{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"g" = (/turf/open/floor/plasteel/freezer{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"h" = (/obj/structure/window{icon_state = "window";dir = 1},/obj/item/weapon/shard{icon_state = "medium"},/mob/living/simple_animal/hostile/zombie/gymboss,/turf/open/floor/plasteel/freezer{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"i" = (/obj/structure/window{icon_state = "window";dir = 1},/turf/open/floor/plasteel/freezer{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"j" = (/obj/structure/window{icon_state = "window";dir = 1},/obj/structure/window{icon_state = "window";dir = 4},/turf/open/floor/plasteel/freezer{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"k" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/plasteel/freezer{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"l" = (/obj/structure/weightlifter,/turf/open/floor/plasteel/freezer{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"m" = (/obj/structure/window{icon_state = "window";dir = 8},/turf/open/floor/plasteel/freezer{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"n" = (/obj/structure/window{icon_state = "window";dir = 4},/turf/open/floor/plasteel/freezer{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"o" = (/obj/structure/stacklifter,/turf/open/floor/plasteel/freezer{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"p" = (/obj/structure/window,/obj/structure/window{icon_state = "window";dir = 8},/obj/effect/decal/cleanable/blood,/turf/open/floor/plasteel/freezer{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"q" = (/obj/structure/window,/turf/open/floor/plasteel/freezer{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"r" = (/obj/structure/window,/obj/item/weapon/shard,/mob/living/simple_animal/hostile/zombie/darkholme,/turf/open/floor/plasteel/freezer{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"s" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-splatter4 (NORTH)";icon_state = "splatter4";dir = 1},/turf/open/floor/plating/asteroid/basalt/lava_land_surface,/area/lavaland/surface/outdoors)
"t" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-splatter6 (EAST)";icon_state = "splatter6";dir = 4},/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (NORTH)";icon_state = "tracks";dir = 1},/obj/effect/decal/cleanable/blood/tracks{tag = "icon-gib3";icon_state = "gib3"},/turf/open/floor/plating/asteroid/basalt/lava_land_surface,/area/lavaland/surface/outdoors)
"u" = (/obj/machinery/door/airlock/external,/turf/open/floor/plasteel/freezer{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"v" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (EAST)";icon_state = "tracks";dir = 4},/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (NORTHEAST)";icon_state = "tracks";dir = 5},/turf/open/floor/plating/asteroid/basalt/lava_land_surface,/area/lavaland/surface/outdoors)
"w" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (EAST)";icon_state = "tracks";dir = 4},/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (SOUTHEAST)";icon_state = "tracks";dir = 6},/turf/open/floor/plating/asteroid/basalt/lava_land_surface,/area/lavaland/surface/outdoors)
"x" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-splatter5";icon_state = "splatter5"},/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (EAST)";icon_state = "tracks";dir = 4},/turf/open/floor/plating/asteroid/basalt/lava_land_surface,/area/lavaland/surface/outdoors)
"y" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-splatter4 (NORTH)";icon_state = "splatter4";dir = 1},/obj/effect/decal/cleanable/blood/tracks{tag = "icon-splatter6 (NORTH)";icon_state = "splatter6";dir = 1},/turf/open/floor/plating/asteroid/basalt/lava_land_surface,/area/lavaland/surface/outdoors)
"z" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-splatter5";icon_state = "splatter5"},/turf/open/floor/plating/asteroid/basalt/lava_land_surface,/area/lavaland/surface/outdoors)
"A" = (/mob/living/simple_animal/hostile/zombie,/turf/open/floor/plasteel/freezer{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"B" = (/obj/structure/window{icon_state = "window";dir = 1},/obj/machinery/shower,/turf/open/floor/plasteel/freezer{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"C" = (/obj/structure/window{icon_state = "window";dir = 1},/obj/machinery/shower,/mob/living/simple_animal/hostile/zombie,/turf/open/floor/plasteel/freezer{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered)
"D" = (/turf/template_noop,/area/template_noop)
(1,1,1) = {"
DDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDD
DDDccccccccccccDDDDD
DDDcdeddddddedcbDDDD
DDDcfgghiijkglcbaDDD
DDDcfggmgkngglcbbbDD
DDDcfggmggnggocbbbDD
DDDcfggpqqrggocstbbD
DDDcgkgggggggkuvwxbD
DDDcuucccccccccyzbbD
DDDcgAgggggggAcbbbbD
DDDcggggggAgggcbbbDD
DDDcBCBBggBBBBcbbDDD
DDDcgggggggAggcbDDDD
DDDccccccccccccbDDDD
DDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDD
DDDDDDDDDDDDDDDDDDDD
"}
+1 -1
View File
@@ -99122,7 +99122,7 @@
/obj/docking_port/stationary{
dheight = 0;
dir = 2;
dwidth = 10;
dwidth = 9;
height = 25;
id = "emergency_home";
name = "MetaStation emergency evac bay";
+4 -5
View File
@@ -39,11 +39,10 @@
//Grab levels
#define GRAB_PASSIVE 1
#define GRAB_AGGRESSIVE 2
#define GRAB_NECK 3
#define GRAB_UPGRADING 4
#define GRAB_KILL 5
#define GRAB_PASSIVE 0
#define GRAB_AGGRESSIVE 1
#define GRAB_NECK 2
#define GRAB_KILL 3
//Hostile Mob AI Status
+54
View File
@@ -0,0 +1,54 @@
//Defines for atom layers
//KEEP THESE IN A NICE ACSCENDING ORDER, PLEASE
//#define TURF_LAYER 2 //For easy recordkeeping; this is a byond define
#define ABOVE_OPEN_TURF_LAYER 2.01
#define CLOSED_TURF_LAYER 2.05
#define ABOVE_NORMAL_TURF_LAYER 2.08
#define LATTICE_LAYER 2.2
#define DISPOSAL_PIPE_LAYER 2.3
#define GAS_PIPE_LAYER 2.35
#define WIRE_LAYER 2.4
#define WIRE_TERMINAL_LAYER 2.45
#define LOW_OBJ_LAYER 2.5
#define OPEN_DOOR_LAYER 2.7
#define PROJECTILE_HIT_THRESHHOLD_LAYER 2.75 //projectiles won't hit objects at or below this layer if possible
#define TABLE_LAYER 2.8
#define BELOW_OBJ_LAYER 2.9
#define LOW_ITEM_LAYER 2.95
//#define OBJ_LAYER 3 //For easy recordkeeping; this is a byond define
#define CLOSED_DOOR_LAYER 3.1
#define CLOSED_FIREDOOR_LAYER 3.11
#define ABOVE_OBJ_LAYER 3.2
#define SIGN_LAYER 3.4
#define HIGH_OBJ_LAYER 3.5
#define BELOW_MOB_LAYER 3.7
#define LYING_MOB_LAYER 3.8
//#define MOB_LAYER 4 //For easy recordkeeping; this is a byond define
#define ABOVE_MOB_LAYER 4.1
#define WALL_OBJ_LAYER 4.25
#define EDGED_TURF_LAYER 4.3
#define ON_EDGED_TURF_LAYER 4.35
#define LARGE_MOB_LAYER 4.4
#define ABOVE_ALL_MOB_LAYER 4.5
#define SPACEVINE_LAYER 4.8
#define SPACEVINE_MOB_LAYER 4.9
//#define FLY_LAYER 5 //For easy recordkeeping; this is a byond define
#define GHOST_LAYER 6
#define AREA_LAYER 10
#define MASSIVE_OBJ_LAYER 11
#define POINT_LAYER 12
#define LIGHTING_LAYER 15
//HUD layer defines
#define FLASH_LAYER 17.9
#define FULLSCREEN_LAYER 18
#define DAMAGE_LAYER 18.1
#define BLIND_LAYER 18.2
#define CRIT_LAYER 18.3
#define HUD_LAYER 19
#define ABOVE_HUD_LAYER 19.1
+6 -1
View File
@@ -150,8 +150,9 @@
#define CLICK_CD_RANGE 4
#define CLICK_CD_BREAKOUT 100
#define CLICK_CD_HANDCUFFED 10
#define CLICK_CD_TKSTRANGLE 10
#define CLICK_CD_RESIST 20
#define CLICK_CD_GRABBING 10
//click cooldowns, in tenths of a second
@@ -426,3 +427,7 @@ var/global/list/ghost_others_options = list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE
// Defib stats
#define DEFIB_TIME_LIMIT 120
#define DEFIB_TIME_LOSS 60
// Diagonal movement
#define FIRST_DIAG_STEP 1
#define SECOND_DIAG_STEP 2
+1 -1
View File
@@ -77,7 +77,7 @@
CtrlClickOn(A)
return
if(stat || paralysis || stunned || weakened || sleeping)
if(incapacitated(ignore_restraints = 1))
return
face_atom(A)
+1 -1
View File
@@ -125,7 +125,7 @@
blobpwrdisplay.icon_state = "block"
blobpwrdisplay.screen_loc = ui_health
blobpwrdisplay.mouse_opacity = 0
blobpwrdisplay.layer = 20
blobpwrdisplay.layer = ABOVE_HUD_LAYER
infodisplay += blobpwrdisplay
healths = new /obj/screen/healths/blob()
+2 -2
View File
@@ -35,7 +35,7 @@
using.icon = ui_style
using.icon_state = "swap_1_m"
using.screen_loc = ui_swaphand1
using.layer = 19
using.layer = HUD_LAYER
static_inventory += using
using = new /obj/screen/inventory()
@@ -43,7 +43,7 @@
using.icon = ui_style
using.icon_state = "swap_2"
using.screen_loc = ui_swaphand2
using.layer = 19
using.layer = HUD_LAYER
static_inventory += using
zone_select = new /obj/screen/zone_sel()
-9
View File
@@ -1,7 +1,3 @@
#define FULLSCREEN_LAYER 18
#define DAMAGE_LAYER FULLSCREEN_LAYER + 0.1
#define BLIND_LAYER DAMAGE_LAYER + 0.1
#define CRIT_LAYER BLIND_LAYER + 0.1
/mob
var/list/screens = list()
@@ -110,8 +106,3 @@
icon = 'icons/mob/screen_gen.dmi'
screen_loc = "WEST,SOUTH to EAST,NORTH"
icon_state = "druggy"
#undef FULLSCREEN_LAYER
#undef BLIND_LAYER
#undef DAMAGE_LAYER
#undef CRIT_LAYER
+2 -2
View File
@@ -31,11 +31,11 @@
name = "Faith"
icon_state = "deity_power"
screen_loc = ui_deitypower
layer = 20
layer = HUD_LAYER
/obj/screen/deity_follower_display
name = "Followers"
icon_state = "deity_followers"
screen_loc = ui_deityfollowers
layer = 20
layer = HUD_LAYER
+1 -1
View File
@@ -197,7 +197,7 @@
A.screen_loc = "CENTER[x]:16,SOUTH+[y]:7"
else
A.screen_loc = "CENTER+[x]:16,SOUTH+[y]:7"
A.layer = 20
A.layer = ABOVE_HUD_LAYER
x++
if(x == 4)
+7 -21
View File
@@ -9,7 +9,7 @@
/obj/screen
name = ""
icon = 'icons/mob/screen_gen.dmi'
layer = 20
layer = ABOVE_HUD_LAYER
unacidable = 1
appearance_flags = APPEARANCE_UI
var/obj/master = null //A reference to the object in the slot. Grabs or items, generally.
@@ -29,7 +29,7 @@
maptext_width = 480
/obj/screen/swap_hand
layer = 19
layer = HUD_LAYER
name = "swap hand"
/obj/screen/swap_hand/Click()
@@ -60,7 +60,7 @@
var/slot_id // The indentifier for the slot. It has nothing to do with ID cards.
var/icon_empty // Icon when empty. For now used only by humans.
var/icon_full // Icon when contains an item. For now used only by humans.
layer = 19
layer = HUD_LAYER
/obj/screen/inventory/Click()
// At this point in client Click() code we have passed the 1/10 sec check and little else
@@ -154,25 +154,11 @@
name = "drop"
icon = 'icons/mob/screen_midnight.dmi'
icon_state = "act_drop"
layer = 19
layer = HUD_LAYER
/obj/screen/drop/Click()
usr.drop_item_v()
/obj/screen/grab
name = "grab"
/obj/screen/grab/Click()
var/obj/item/weapon/grab/G = master
G.s_click(src)
return 1
/obj/screen/grab/attack_hand()
return
/obj/screen/grab/attackby()
return
/obj/screen/act_intent
name = "intent"
icon_state = "help"
@@ -303,7 +289,7 @@
name = "resist"
icon = 'icons/mob/screen_midnight.dmi'
icon_state = "act_resist"
layer = 19
layer = HUD_LAYER
/obj/screen/resist/Click()
if(isliving(usr))
@@ -417,7 +403,7 @@
icon_state = "blank"
blend_mode = BLEND_ADD
screen_loc = "WEST,SOUTH to EAST,NORTH"
layer = 17
layer = FLASH_LAYER
/obj/screen/damageoverlay
icon = 'icons/mob/screen_full.dmi'
@@ -426,7 +412,7 @@
blend_mode = BLEND_MULTIPLY
screen_loc = "CENTER-7,CENTER-7"
mouse_opacity = 0
layer = 18.1 //The black screen overlay sets layer to 18 to display it, this one has to be just on top.
layer = DAMAGE_LAYER
/obj/screen/healths
name = "health"
+1 -1
View File
@@ -71,7 +71,7 @@ var/const/tk_maxrange = 15
flags = NOBLUDGEON | ABSTRACT
//item_state = null
w_class = 10
layer = 20
layer = ABOVE_HUD_LAYER
var/last_throw = 0
var/atom/movable/focus = null
@@ -43,11 +43,11 @@ Bonus
return
/datum/symptom/choking/proc/Choke_stage_3_4(mob/living/M, datum/disease/advance/A)
var/get_damage = (sqrt(20+A.totalStageSpeed())/2)+(sqrt(16+A.totalStealth())*1)
var/get_damage = sqrt(21+A.totalStageSpeed()*0.5)+sqrt(16+A.totalStealth())
M.adjustOxyLoss(get_damage)
return 1
/datum/symptom/choking/proc/Choke(mob/living/M, datum/disease/advance/A)
var/get_damage = (sqrt(20+A.totalStageSpeed())/2)+(sqrt(16+A.totalStealth()*5))
var/get_damage = sqrt(21+A.totalStageSpeed()*0.5)+sqrt(16+A.totalStealth()*5)
M.adjustOxyLoss(get_damage)
return 1
-4
View File
@@ -45,10 +45,6 @@
if(affected_mob.notransform)
return
affected_mob.notransform = 1
affected_mob.canmove = 0
affected_mob.icon = null
affected_mob.overlays.Cut()
affected_mob.invisibility = INVISIBILITY_ABSTRACT
for(var/obj/item/W in affected_mob)
if(istype(W, /obj/item/weapon/implant))
qdel(W)
+10 -4
View File
@@ -323,10 +323,16 @@
add_to_streak("G",D)
if(check_streak(A,D))
return 1
D.grabbedby(A,1)
var/obj/item/weapon/grab/G = A.get_active_hand()
if(G)
G.state = GRAB_AGGRESSIVE //Instant aggressive grab
if(A.grab_state > GRAB_AGGRESSIVE)
D.grabbedby(A, 1)
else
A.start_pulling(D, 1)
if(A.pulling)
D.drop_r_hand()
D.drop_l_hand()
D.stop_pulling()
A.grab_state = GRAB_AGGRESSIVE //Instant aggressive grab
return 1
/datum/martial_art/the_sleeping_carp/harm_act(mob/living/carbon/human/A, mob/living/carbon/human/D)
add_to_streak("H",D)
-8
View File
@@ -167,14 +167,6 @@
suffix = "lavaland_fountain_hall.dmm"
cost = 5
/datum/map_template/ruin/lavaland/zombie_gym
name = "Zombie Gym"
id = "zombie-gym"
description = "The patrons at this gym are serious about health, and \
making sure people work on their cardio."
suffix = "lavaland_gym.dmm"
cost = 10
/datum/map_template/ruin/lavaland/survivalcapsule
name = "Survival Capsule Ruins"
id = "survivalcapsule"
+1 -1
View File
@@ -19,7 +19,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
name = "Space"
icon = 'icons/turf/areas.dmi'
icon_state = "unknown"
layer = 10
layer = AREA_LAYER
mouse_opacity = 0
invisibility = INVISIBILITY_LIGHTING
+1 -1
View File
@@ -26,7 +26,7 @@
/area/New()
icon_state = ""
layer = 10
layer = AREA_LAYER
master = src
uid = ++global_uid
related = list(src)
+1 -1
View File
@@ -1,5 +1,5 @@
/atom
layer = 2
layer = TURF_LAYER
var/level = 2
var/flags = 0
var/list/fingerprints
+20 -7
View File
@@ -1,5 +1,5 @@
/atom/movable
layer = 3
layer = OBJ_LAYER
var/last_move = null
var/anchored = 0
var/throwing = 0
@@ -13,10 +13,12 @@
var/verb_yell = "yells"
var/inertia_dir = 0
var/pass_flags = 0
var/moving_diagonally = 0 //0: not doing a diagonal move. 1 and 2: doing the first/second step of the diagonal move
glide_size = 8
appearance_flags = TILE_BOUND
/atom/movable/Move(atom/newloc, direct = 0)
if(!loc || !newloc) return 0
var/atom/oldloc = loc
@@ -25,28 +27,38 @@
if (!(direct & (direct - 1))) //Cardinal move
. = ..()
else //Diagonal move, split it into cardinal moves
moving_diagonally = FIRST_DIAG_STEP
if (direct & 1)
if (direct & 4)
if (step(src, NORTH))
moving_diagonally = SECOND_DIAG_STEP
. = step(src, EAST)
else if (step(src, EAST))
moving_diagonally = SECOND_DIAG_STEP
. = step(src, NORTH)
else if (direct & 8)
if (step(src, NORTH))
moving_diagonally = SECOND_DIAG_STEP
. = step(src, WEST)
else if (step(src, WEST))
moving_diagonally = SECOND_DIAG_STEP
. = step(src, NORTH)
else if (direct & 2)
if (direct & 4)
if (step(src, SOUTH))
moving_diagonally = SECOND_DIAG_STEP
. = step(src, EAST)
else if (step(src, EAST))
moving_diagonally = SECOND_DIAG_STEP
. = step(src, SOUTH)
else if (direct & 8)
if (step(src, SOUTH))
moving_diagonally = SECOND_DIAG_STEP
. = step(src, WEST)
else if (step(src, WEST))
moving_diagonally = SECOND_DIAG_STEP
. = step(src, SOUTH)
moving_diagonally = 0
if(!loc || (loc == oldloc && oldloc != newloc))
last_move = 0
@@ -80,10 +92,8 @@
qdel(AM)
loc = null
invisibility = INVISIBILITY_ABSTRACT
if (pulledby)
if (pulledby.pulling == src)
pulledby.pulling = null
pulledby = null
if(pulledby)
pulledby.stop_pulling()
// Previously known as HasEntered()
@@ -104,6 +114,8 @@
/atom/movable/proc/forceMove(atom/destination)
if(destination)
if(pulledby)
pulledby.stop_pulling()
var/atom/oldloc = loc
if(oldloc)
oldloc.Exited(src, destination)
@@ -123,8 +135,6 @@
/mob/living/forceMove(atom/destination)
stop_pulling()
if(pulledby)
pulledby.stop_pulling()
if(buckled)
buckled.unbuckle_mob(src,force=1)
if(buckled_mobs.len)
@@ -199,6 +209,9 @@
return 0
//use a modified version of Bresenham's algorithm to get from the atom's current position to that of the target
if(pulledby)
pulledby.stop_pulling()
throwing = 1
if(spin) //if we don't want the /atom/movable to spin.
SpinAnimation(5, 1)
@@ -15,23 +15,21 @@
user << "<span class='warning'>We are already absorbing!</span>"
return
var/obj/item/weapon/grab/G = user.get_active_hand()
if(!istype(G))
user << "<span class='warning'>We must be grabbing a creature in our active hand to absorb them!</span>"
if(!user.pulling || !iscarbon(user.pulling))
user << "<span class='warning'>We must be grabbing a creature to absorb them!</span>"
return
if(G.state <= GRAB_NECK)
if(user.grab_state <= GRAB_NECK)
user << "<span class='warning'>We must have a tighter grip to absorb this creature!</span>"
return
var/mob/living/carbon/target = G.affecting
var/mob/living/carbon/target = user.pulling
return changeling.can_absorb_dna(user,target)
/obj/effect/proc_holder/changeling/absorbDNA/sting_action(mob/user)
var/datum/changeling/changeling = user.mind.changeling
var/obj/item/weapon/grab/G = user.get_active_hand()
var/mob/living/carbon/human/target = G.affecting
var/mob/living/carbon/human/target = user.pulling
changeling.isabsorbing = 1
for(var/stage = 1, stage<=3, stage++)
switch(stage)
@@ -122,11 +120,10 @@
/obj/effect/proc_holder/changeling/swap_form/can_sting(mob/living/carbon/user)
if(!..())
return
var/obj/item/weapon/grab/G = user.get_active_hand()
if(!istype(G) || (G.state < GRAB_AGGRESSIVE))
user << "<span class='warning'>We must have an aggressive grab on creature in our active hand to do this!</span>"
if(!user.pulling || !iscarbon(user.pulling) || user.grab_state < GRAB_AGGRESSIVE)
user << "<span class='warning'>We must have an aggressive grab on creature to do this!</span>"
return
var/mob/living/carbon/target = G.affecting
var/mob/living/carbon/target = user.pulling
if((target.disabilities & NOCLONE) || (target.disabilities & HUSK))
user << "<span class='warning'>DNA of [target] is ruined beyond usability!</span>"
return
@@ -137,8 +134,7 @@
/obj/effect/proc_holder/changeling/swap_form/sting_action(mob/living/carbon/user)
var/obj/item/weapon/grab/G = user.get_active_hand()
var/mob/living/carbon/target = G.affecting
var/mob/living/carbon/target = user.pulling
var/datum/changeling/changeling = user.mind.changeling
user << "<span class='notice'>We tighen our grip. We must hold still....</span>"
@@ -10,11 +10,16 @@
if(!..())
return
var/datum/changeling/changeling = user.mind.changeling
var/obj/item/weapon/grab/G = user.get_active_hand()
var/mob/living/carbon/target = G.affecting
if(changeling.islinking)
user << "<span class='warning'>We have already formed a link with the victim!</span>"
return
if(!user.pulling)
user << "<span class='warning'>We must be tightly grabbing a creature to link with them!</span>"
return
if(!iscarbon(user.pulling))
user << "<span class='warning'>We cannot link with this creature!</span>"
return
var/mob/living/carbon/target = user.pulling
if(!target.mind)
user << "<span class='warning'>The victim has no mind to link to!</span>"
return
@@ -23,19 +28,15 @@
return
if(target.mind.changeling)
user << "<span class='warning'>The victim is already a part of the hivemind!</span>"
return
if(!istype(G))
user << "<span class='warning'>We must be tightly grabbing a creature in our active hand to link with them!</span>"
return
if(G.state <= GRAB_NECK)
if(user.grab_state <= GRAB_NECK)
user << "<span class='warning'>We must have a tighter grip to link with this creature!</span>"
return
return changeling.can_absorb_dna(user,target)
/obj/effect/proc_holder/changeling/linglink/sting_action(mob/user)
var/datum/changeling/changeling = user.mind.changeling
var/obj/item/weapon/grab/G = user.get_active_hand()
var/mob/living/carbon/human/target = G.affecting
var/mob/living/carbon/human/target = user.pulling
changeling.islinking = 1
for(var/i in 1 to 3)
switch(i)
+10 -10
View File
@@ -1317,7 +1317,7 @@
icon = 'icons/effects/96x96.dmi'
pixel_x = -30
pixel_y = -30
layer = 2.01
layer = ABOVE_OPEN_TURF_LAYER
/obj/effect/clockwork/judicial_marker/New()
..()
@@ -1374,6 +1374,14 @@
user << "This gateway can only [sender ? "send" : "receive"] objects."
/obj/effect/clockwork/spatial_gateway/attack_hand(mob/living/user)
if(user.pulling && user.a_intent == "grab" && isliving(user.pulling))
var/mob/living/L = user.pulling
if(L.buckled || L.anchored || L.buckled_mobs.len)
return 0
user.visible_message("<span class='warning'>[user] shoves [L] into [src]!</span>", "<span class='danger'>You shove [L] into [src]!</span>")
user.stop_pulling()
pass_through_gateway(L)
return 1
if(!user.canUseTopic(src))
return 0
user.visible_message("<span class='warning'>[user] climbs through [src]!</span>", "<span class='danger'>You brace yourself and step through [src]...</span>")
@@ -1386,14 +1394,6 @@
qdel(linked_gateway)
qdel(src)
return 1
if(istype(I, /obj/item/weapon/grab))
var/obj/item/weapon/grab/G = I
if(!G.affecting)
return 0
user.visible_message("<span class='warning'>[user] shoves [G.affecting] into [src]!</span>", "<span class='danger'>You shove [G.affecting] into [src]!</span>")
pass_through_gateway(G.affecting)
qdel(G)
return 1
if(user.drop_item())
pass_through_gateway(I)
..()
@@ -1438,7 +1438,7 @@
desc = "Some big guy."
clockwork_desc = "One of Ratvar's generals."
alpha = 200
layer = 10
layer = MASSIVE_OBJ_LAYER
/obj/effect/clockwork/general_marker/New()
..()
@@ -1,7 +1,7 @@
/obj/structure/clockwork/massive //For objects that are typically very large
name = "massive construct"
desc = "A very large construction."
layer = 10
layer = MASSIVE_OBJ_LAYER
/obj/structure/clockwork/massive/celestial_gateway //The gateway to Reebe, from which Ratvar emerges
name = "Gateway to the Celestial Derelict"
+1 -1
View File
@@ -189,7 +189,7 @@
/obj/item/clothing/suit/hooded/cultrobes/cult_shield/worn_overlays(isinhands)
. = list()
if(!isinhands && current_charges)
. += image(layer = MOB_LAYER+0.05, icon = 'icons/effects/effects.dmi', icon_state = "shield-cult")
. += image(layer = MOB_LAYER+0.01, icon = 'icons/effects/effects.dmi', icon_state = "shield-cult")
/obj/item/clothing/suit/hooded/cultrobes/berserker
name = "flagellant's robes"
+1 -1
View File
@@ -22,7 +22,7 @@ To draw a rune, use an arcane tome.
icon = 'icons/obj/rune.dmi'
icon_state = "1"
unacidable = 1
layer = TURF_LAYER + 0.08
layer = ABOVE_NORMAL_TURF_LAYER
color = rgb(255,0,0)
var/invocation = "Aiy ele-mayo!" //This is said by cultists when the rune is invoked.
@@ -20,7 +20,7 @@
hands_overlays += r_hand_image
if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD)
r_hand.layer = 20
r_hand.layer = ABOVE_HUD_LAYER
r_hand.screen_loc = ui_rhand
client.screen |= r_hand
@@ -35,7 +35,7 @@
hands_overlays += l_hand_image
if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD)
l_hand.layer = 20
l_hand.layer = ABOVE_HUD_LAYER
l_hand.screen_loc = ui_lhand
client.screen |= l_hand
if(hands_overlays.len)
+1 -1
View File
@@ -5,7 +5,7 @@
icon_state = "dominator"
density = 1
anchored = 1
layer = 3.6
layer = HIGH_OBJ_LAYER
var/maxhealth = 200
var/health = 200
var/datum/gang/gang
@@ -389,7 +389,7 @@
/obj/effect/overlay/temp/swarmer //temporary swarmer visual feedback objects
icon = 'icons/mob/swarmer.dmi'
layer = MOB_LAYER
layer = BELOW_MOB_LAYER
/obj/effect/overlay/temp/swarmer/disintegration
icon_state = "disintegrate"
@@ -18,7 +18,7 @@
invisibility = INVISIBILITY_REVENANT
health = INFINITY //Revenants don't use health, they use essence instead
maxHealth = INFINITY
layer = 5
layer = GHOST_LAYER
healable = 0
sight = SEE_SELF
see_invisible = SEE_INVISIBLE_NOLIGHTING
+1 -1
View File
@@ -48,7 +48,7 @@ var/bomb_set
icon = 'icons/obj/machines/nuke_terminal.dmi'
icon_state = "nuclearbomb_base"
anchored = 1 //stops it being moved
layer = 4
layer = MOB_LAYER
/obj/machinery/nuclearbomb/syndicate
+5 -5
View File
@@ -27,7 +27,7 @@ var/hsboxspawn = 1
var/hsbinfo = null
//items that shouldn't spawn on the floor because they would bug or act weird
var/global/list/spawn_forbidden = list(
/obj/item/weapon/grab, /obj/item/tk_grab, /obj/item/weapon/implant, // not implanter, the actual thing that is inside you
/obj/item/tk_grab, /obj/item/weapon/implant, // not implanter, the actual thing that is inside you
/obj/item/assembly,/obj/item/device/onetankbomb, /obj/item/radio, /obj/item/device/pda/ai,
/obj/item/device/uplink, /obj/item/smallDelivery, /obj/item/missile,/obj/item/projectile,
/obj/item/borg/sight,/obj/item/borg/stun,/obj/item/weapon/robot_module)
@@ -145,28 +145,28 @@ var/hsboxspawn = 1
P.wear_suit.layer = initial(P.wear_suit.layer)
P.wear_suit = null
P.wear_suit = new/obj/item/clothing/suit/space(P)
P.wear_suit.layer = 20
P.wear_suit.layer = ABOVE_HUD_LAYER
P.update_inv_wear_suit()
if(P.head)
P.head.loc = P.loc
P.head.layer = initial(P.head.layer)
P.head = null
P.head = new/obj/item/clothing/head/helmet/space(P)
P.head.layer = 20
P.head.layer = ABOVE_HUD_LAYER
P.update_inv_head()
if(P.wear_mask)
P.wear_mask.loc = P.loc
P.wear_mask.layer = initial(P.wear_mask.layer)
P.wear_mask = null
P.wear_mask = new/obj/item/clothing/mask/gas(P)
P.wear_mask.layer = 20
P.wear_mask.layer = ABOVE_HUD_LAYER
P.update_inv_wear_mask()
if(P.back)
P.back.loc = P.loc
P.back.layer = initial(P.back.layer)
P.back = null
P.back = new/obj/item/weapon/tank/jetpack/oxygen(P)
P.back.layer = 20
P.back.layer = ABOVE_HUD_LAYER
P.update_inv_back()
P.internal = P.back
P.update_internals_hud_icon(1)
+1 -1
View File
@@ -5,7 +5,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 = LOW_OBJ_LAYER
anchored = 1
use_power = 1
idle_power_usage = 0
+1 -1
View File
@@ -2,7 +2,7 @@
name = "\improper AI liquid dispenser"
icon = 'icons/obj/device.dmi'
icon_state = "motion3"
layer = 3
layer = PROJECTILE_HIT_THRESHHOLD_LAYER
anchored = 1
var/uses = 20
var/disabled = 1
+1 -1
View File
@@ -10,7 +10,7 @@
use_power = 2
idle_power_usage = 5
active_power_usage = 10
layer = MOB_LAYER + 0.25
layer = WALL_OBJ_LAYER
var/health = 50
var/list/network = list("SS13")
-13
View File
@@ -152,19 +152,6 @@
if(default_deconstruction_crowbar(I))
return
if(istype(I, /obj/item/weapon/grab))
var/obj/item/weapon/grab/G = I
if(!ismob(G.affecting))
return
if(!state_open)
user << "<span class='notice'>Open the scanner first.</span>"
return
var/mob/M = G.affecting
M.forceMove(loc)
qdel(G)
return
return ..()
/obj/machinery/dna_scannernew/attack_hand(mob/user)
+2 -2
View File
@@ -986,7 +986,7 @@ var/list/airlock_overlays = list()
sleep(5)
src.density = 0
sleep(9)
src.layer = 2.7
src.layer = OPEN_DOOR_LAYER
update_icon(AIRLOCK_OPEN, 1)
SetOpacity(0)
operating = 0
@@ -1023,7 +1023,7 @@ var/list/airlock_overlays = list()
return 1
operating = 1
update_icon(AIRLOCK_CLOSING, 1)
src.layer = 3.1
src.layer = CLOSED_DOOR_LAYER
sleep(5)
src.density = 1
if(!safe)
+5 -5
View File
@@ -6,7 +6,7 @@
anchored = 1
opacity = 1
density = 1
layer = 2.7
layer = OPEN_DOOR_LAYER
power_channel = ENVIRON
var/secondsElectrified = 0
@@ -19,7 +19,7 @@
var/heat_proof = 0 // For rglass-windowed airlocks and firedoors
var/emergency = 0 // Emergency access override
var/sub_door = 0 // 1 if it's meant to go under another door.
var/closingLayer = 3.1
var/closingLayer = CLOSED_DOOR_LAYER
var/autoclose = 0 //does it automatically close after some time
var/safe = 1 //whether the door detects things and mobs in its way and reopen or crushes them.
var/locked = 0 //whether the door is bolted or not.
@@ -29,9 +29,9 @@
/obj/machinery/door/New()
..()
if(density)
layer = 3.1 //Above most items if closed
layer = CLOSED_DOOR_LAYER //Above most items if closed
else
layer = 2.7 //Under all objects if opened. 2.7 due to tables being at 2.6
layer = OPEN_DOOR_LAYER //Under all objects if opened. 2.7 due to tables being at 2.6
update_freelook_sight()
air_update_turf(1)
airlocks += src
@@ -245,7 +245,7 @@ obj/machinery/door/proc/try_to_crowbar(obj/item/I, mob/user)
sleep(5)
density = 0
sleep(5)
layer = 2.7
layer = OPEN_DOOR_LAYER
update_icon()
SetOpacity(0)
operating = 0
+1 -1
View File
@@ -18,7 +18,7 @@
glass = 1
var/nextstate = null
sub_door = 1
closingLayer = 3.11
closingLayer = CLOSED_FIREDOOR_LAYER
/obj/machinery/door/firedoor/Bumped(atom/AM)
if(panel_open || operating)
+4 -4
View File
@@ -3,7 +3,7 @@
name = "shutters"
desc = "Heavy duty metal shutters that opens mechanically."
icon = 'icons/obj/doors/shutters.dmi'
layer = 3.1
layer = CLOSED_DOOR_LAYER
/obj/machinery/door/poddoor/shutters/preopen
icon_state = "open"
@@ -15,14 +15,14 @@
/obj/machinery/door/poddoor/shutters/New()
..()
layer = 3.1 //to handle /obj/machinery/door/New() resetting the layer.
layer = CLOSED_DOOR_LAYER //to handle /obj/machinery/door/New() resetting the layer.
/obj/machinery/door/poddoor/shutters/open(ignorepower = 0)
..()
layer = 3.1
layer = CLOSED_DOOR_LAYER
/obj/machinery/door/poddoor/shutters/close(ignorepower = 0)
..()
layer = 3.1
layer = CLOSED_DOOR_LAYER
+1 -1
View File
@@ -35,7 +35,7 @@ var/const/HOLOPAD_MODE = RANGE_BASED
name = "\improper AI holopad"
desc = "It's a floor-mounted device for projecting holographic images. It is activated remotely."
icon_state = "holopad0"
layer = 2.1
layer = LOW_OBJ_LAYER
flags = HEAR
languages = ROBOT | HUMAN
var/list/masters = list()//List of AIs that use the holopad
+1 -1
View File
@@ -11,7 +11,7 @@
name = "electromagnetic generator"
desc = "A device that uses station power to create points of magnetic energy."
level = 1 // underfloor
layer = 2.5
layer = LOW_OBJ_LAYER
anchored = 1
use_power = 1
idle_power_usage = 50
+1 -1
View File
@@ -8,7 +8,7 @@
name = "navigation beacon"
desc = "A radio beacon used for bot navigation."
level = 1 // underfloor
layer = 2.5
layer = LOW_OBJ_LAYER
anchored = 1
var/open = 0 // true if cover is open
+2 -2
View File
@@ -178,7 +178,7 @@
qdel(I)
qdel(J)
H.icon = HI
H.layer = 25
H.layer = ABOVE_HUD_LAYER
usr.mapobjs += H
#else
@@ -296,7 +296,7 @@
H.icon = I
qdel(I)
H.layer = 25
H.layer = ABOVE_HUD_LAYER
usr.mapobjs += H
#endif
@@ -3,7 +3,7 @@
icon = 'icons/obj/turrets.dmi'
icon_state = "grey_target_prism"
anchored = 1
layer = 3
layer = OBJ_LAYER
invisibility = INVISIBILITY_OBSERVER //the turret is invisible if it's inside its cover
density = 1
use_power = 1 //this turret uses and requires power
@@ -502,7 +502,7 @@
if(cover)
cover.icon_state = "openTurretCover"
raised = 1
layer = 4
layer = MOB_LAYER
/obj/machinery/porta_turret/proc/popDown() //pops the turret down
if(disabled)
@@ -511,7 +511,7 @@
return
if(stat & BROKEN)
return
layer = 3
layer = OBJ_LAYER
raising = 1
if(cover)
flick("popdown", cover)
@@ -8,7 +8,7 @@
icon = 'icons/obj/turrets.dmi'
icon_state = "turretCover"
anchored = 1
layer = 3.5
layer = HIGH_OBJ_LAYER
density = 0
var/obj/machinery/porta_turret/parent_turret = null
+1 -1
View File
@@ -5,7 +5,7 @@ var/const/SAFETY_COOLDOWN = 100
desc = "A large crushing machine which is used to recycle small items ineffeciently; there are lights on the side of it."
icon = 'icons/obj/recycling.dmi'
icon_state = "grinder-o0"
layer = MOB_LAYER+1 // Overhead
layer = ABOVE_ALL_MOB_LAYER // Overhead
anchored = 1
density = 1
var/safety_mode = FALSE // Temporarily stops machine if it detects a mob
+1 -1
View File
@@ -111,7 +111,7 @@
anchored = 0
density = 1
layer = MOB_LAYER - 0.2 //so people can't hide it and it's REALLY OBVIOUS
layer = BELOW_MOB_LAYER //so people can't hide it and it's REALLY OBVIOUS
stat = 0
var/active = 0
+1 -1
View File
@@ -7,7 +7,7 @@
anchored = 0
density = 0
layer = MOB_LAYER - 0.2 //so people can't hide it and it's REALLY OBVIOUS
layer = BELOW_MOB_LAYER //so people can't hide it and it's REALLY OBVIOUS
unacidable = 1
var/timer = 60
+1 -1
View File
@@ -3,7 +3,7 @@
desc = "A large metallic machine with an entrance and an exit. A sign on the side reads, 'human go in, robot come out', human must be lying down and alive. Has to cooldown between each use."
icon = 'icons/obj/recycling.dmi'
icon_state = "separator-AO1"
layer = MOB_LAYER+1 // Overhead
layer = ABOVE_ALL_MOB_LAYER // Overhead
anchored = 1
density = 0
var/transform_dead = 0
+1 -1
View File
@@ -15,7 +15,7 @@
desc = "A generic vending machine."
icon = 'icons/obj/vending.dmi'
icon_state = "generic"
layer = 2.9
layer = BELOW_OBJ_LAYER
anchored = 1
density = 1
verb_say = "beeps"
+11 -8
View File
@@ -192,14 +192,6 @@
if(default_deconstruction_screwdriver(user, null, null, W))
update_icon()
return
else if(istype(W,/obj/item/weapon/grab))
if(state_open)
var/obj/item/weapon/grab/G = W
if(iscorgi(G.affecting))
has_corgi = 1
G.affecting.loc = src
qdel(G)
update_icon()
else if(user.a_intent != "harm")
@@ -232,6 +224,17 @@
user << "<span class='warning'>[src] is busy.</span>"
return
if(user.pulling && user.a_intent == "grab" && isliving(user.pulling))
var/mob/living/L = user.pulling
if(L.buckled || L.buckled_mobs.len)
return
if(state_open)
if(iscorgi(L))
has_corgi = 1
L.forceMove(src)
update_icon()
return
if(!state_open)
open_machine()
else
+1 -1
View File
@@ -20,7 +20,7 @@
opacity = 1 ///opaque. Menacing.
anchored = 1 //no pulling around.
unacidable = 1 //and no deleting hoomans inside
layer = MOB_LAYER - 0.2//icon draw layer
layer = BELOW_MOB_LAYER//icon draw layer
infra_luminosity = 15 //byond implementation is bugged.
force = 5
flags = HEAR
@@ -5,7 +5,7 @@
desc = "It's green and acidic. It looks like... <i>blood?</i>"
gender = PLURAL
density = 0
layer = 2
layer = ABOVE_OPEN_TURF_LAYER
icon = 'icons/effects/blood.dmi'
icon_state = "xfloor1"
random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7")
@@ -3,7 +3,7 @@
desc = "It's red and gooey. Perhaps it's the chef's cooking?"
gender = PLURAL
density = 0
layer = 2
layer = ABOVE_OPEN_TURF_LAYER
icon = 'icons/effects/blood.dmi'
icon_state = "floor1"
random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7")
@@ -38,7 +38,7 @@
desc = "Your instincts say you shouldn't be following these."
gender = PLURAL
density = 0
layer = 2
layer = ABOVE_OPEN_TURF_LAYER
random_icon_states = null
var/list/existing_dirs = list()
blood_DNA = list()
@@ -53,7 +53,7 @@
desc = "They look bloody and gruesome."
gender = PLURAL
density = 0
layer = 2
layer = ABOVE_OPEN_TURF_LAYER
icon = 'icons/effects/blood.dmi'
icon_state = "gibbl5"
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6")
@@ -3,7 +3,7 @@
desc = "Someone should clean that up."
gender = PLURAL
density = 0
layer = 2
layer = ABOVE_OPEN_TURF_LAYER
icon = 'icons/obj/objects.dmi'
icon_state = "shards"
@@ -26,7 +26,7 @@
icon_state = "dirt"
gender = PLURAL
density = 0
layer = 2
layer = ABOVE_OPEN_TURF_LAYER
mouse_opacity = 0
/obj/effect/decal/cleanable/flour
@@ -34,7 +34,7 @@
desc = "It's still good. Four second rule!"
gender = PLURAL
density = 0
layer = 2
layer = ABOVE_OPEN_TURF_LAYER
icon_state = "flour"
/obj/effect/decal/cleanable/greenglow
@@ -42,7 +42,7 @@
desc = "Jeez. I hope that's not for lunch."
gender = PLURAL
density = 0
layer = 2
layer = ABOVE_OPEN_TURF_LAYER
luminosity = 1
icon_state = "greenglow"
@@ -53,7 +53,7 @@
name = "cobweb"
desc = "Somebody should remove that."
density = 0
layer = 3
layer = OBJ_LAYER
icon_state = "cobweb1"
burntime = 1
@@ -64,7 +64,7 @@
name = "gooey grey mass"
desc = "It looks like a melted... something."
density = 0
layer = 3
layer = OBJ_LAYER
icon = 'icons/obj/chemical.dmi'
icon_state = "molten"
@@ -72,7 +72,7 @@
name = "cobweb"
desc = "Somebody should remove that."
density = 0
layer = 3
layer = OBJ_LAYER
icon_state = "cobweb2"
//Vomit (sorry)
@@ -81,7 +81,7 @@
desc = "Gosh, how unpleasant."
gender = PLURAL
density = 0
layer = 2
layer = ABOVE_OPEN_TURF_LAYER
icon = 'icons/effects/blood.dmi'
icon_state = "vomit_1"
random_icon_states = list("vomit_1", "vomit_2", "vomit_3", "vomit_4")
@@ -113,14 +113,14 @@
name = "tomato smudge"
desc = "It's red."
density = 0
layer = 2
layer = ABOVE_OPEN_TURF_LAYER
icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("tomato_floor1", "tomato_floor2", "tomato_floor3")
/obj/effect/decal/cleanable/plant_smudge
name = "plant smudge"
density = 0
layer = 2
layer = ABOVE_OPEN_TURF_LAYER
icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("smashed_plant")
@@ -128,7 +128,7 @@
name = "smashed egg"
desc = "Seems like this one won't hatch."
density = 0
layer = 2
layer = ABOVE_OPEN_TURF_LAYER
icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("smashed_egg1", "smashed_egg2", "smashed_egg3")
@@ -136,7 +136,7 @@
name = "smashed pie"
desc = "It's pie cream from a cream pie."
density = 0
layer = 2
layer = ABOVE_OPEN_TURF_LAYER
icon = 'icons/effects/tomatodecal.dmi'
random_icon_states = list("smashed_pie")
@@ -153,7 +153,7 @@
icon_state = "shreds"
gender = PLURAL
density = 0
layer = 2
layer = ABOVE_OPEN_TURF_LAYER
/obj/effect/decal/cleanable/shreds/New()
pixel_x = rand(-5, 5)
@@ -5,7 +5,7 @@
desc = "It's a useless heap of junk... <i>or is it?</i>"
gender = PLURAL
density = 0
layer = 2
layer = ABOVE_OPEN_TURF_LAYER
icon = 'icons/mob/robots.dmi'
icon_state = "gib1"
random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7")
@@ -44,7 +44,7 @@
desc = "It's black and greasy. Looks like Beepsky made another mess."
gender = PLURAL
density = 0
layer = 2
layer = ABOVE_OPEN_TURF_LAYER
icon = 'icons/mob/robots.dmi'
icon_state = "floor1"
var/viruses = list()
+2 -2
View File
@@ -3,7 +3,7 @@
desc = "Graffiti. Damn kids."
icon = 'icons/effects/crayondecal.dmi'
icon_state = "rune1"
layer = 2.1
layer = ABOVE_NORMAL_TURF_LAYER
var/do_icon_rotate = TRUE
/obj/effect/decal/cleanable/crayon/examine()
@@ -31,7 +31,7 @@
/obj/effect/decal/cleanable/crayon/gang
layer = 3.6 //Harder to hide
layer = HIGH_OBJ_LAYER //Harder to hide
do_icon_rotate = FALSE //These are designed to always face south, so no rotation please.
var/datum/gang/gang
+3 -8
View File
@@ -2,7 +2,7 @@
name = "pointer"
icon = 'icons/mob/screen_gen.dmi'
icon_state = "arrow"
layer = 16
layer = POINT_LAYER
duration = 25
/obj/effect/overlay/temp/point/New(atom/target, set_invis = 0)
@@ -12,23 +12,18 @@
pixel_y = target.pixel_y
invisibility = set_invis
// Used for spray that you spray at walls, tables, hydrovats etc
/obj/effect/decal/spraystill
density = 0
layer = 50
//Used by spraybottles.
/obj/effect/decal/chempuff
name = "chemicals"
icon = 'icons/obj/chempuff.dmi'
pass_flags = PASSTABLE | PASSGRILLE
layer = 5
layer = FLY_LAYER
/obj/effect/decal/sandeffect
name = "sandy tile"
icon = 'icons/turf/floors.dmi'
icon_state = "sandeffect"
layer = 2
layer = ABOVE_OPEN_TURF_LAYER
/obj/effect/decal/fakelattice
name = "lattice"
@@ -7,7 +7,7 @@
opacity = 0
anchored = 1
density = 0
layer = MOB_LAYER + 0.5
layer = ABOVE_ALL_MOB_LAYER
mouse_opacity = 0
var/amount = 3
animate_movement = 0
+1 -1
View File
@@ -7,7 +7,7 @@
density = 0
icon = 'icons/obj/lighting.dmi'
icon_state = "glowshroom" //replaced in New
layer = 2.1
layer = ABOVE_NORMAL_TURF_LAYER
var/endurance = 30
var/potency = 30
var/delay = 1200
-1
View File
@@ -3,7 +3,6 @@
desc = "Better stay away from that thing."
density = 0
anchored = 1
layer = 3
icon = 'icons/obj/weapons.dmi'
icon_state = "uglymine"
var/triggered = 0
-9
View File
@@ -7,15 +7,6 @@
density = 1
anchored = 0
/obj/effect/mark
var/mark = ""
icon = 'icons/misc/mark.dmi'
icon_state = "blank"
anchored = 1
layer = 99
mouse_opacity = 0
unacidable = 1//Just to be sure.
/obj/effect/beam
name = "beam"
unacidable = 1//Just to be sure.
+5 -5
View File
@@ -22,7 +22,7 @@
/obj/effect/overlay/temp
icon_state = "nothing"
anchored = 1
layer = 4.1
layer = ABOVE_MOB_LAYER
mouse_opacity = 0
var/duration = 10
var/randomdir = 1
@@ -117,7 +117,7 @@
/obj/effect/overlay/temp/cult/door
name = "unholy glow"
icon_state = "doorglow"
layer = 3.17 //above closed doors
layer = CLOSED_FIREDOOR_LAYER //above closed doors
/obj/effect/overlay/temp/cult/door/unruned
icon_state = "unruneddoorglow"
@@ -125,7 +125,7 @@
/obj/effect/overlay/temp/cult/turf
name = "unholy glow"
icon_state = "wallglow"
layer = TURF_LAYER + 0.07
layer = ABOVE_NORMAL_TURF_LAYER
/obj/effect/overlay/temp/cult/turf/open/floor
icon_state = "floorglow"
@@ -179,7 +179,7 @@
icon = 'icons/misc/beach2.dmi'
icon_state = "palm1"
density = 1
layer = 5
layer = WALL_OBJ_LAYER
anchored = 1
/obj/effect/overlay/palmtree_l
@@ -187,7 +187,7 @@
icon = 'icons/misc/beach2.dmi'
icon_state = "palm2"
density = 1
layer = 5
layer = WALL_OBJ_LAYER
anchored = 1
/obj/effect/overlay/coconut
@@ -94,7 +94,7 @@
/obj/item/stack/rods{amount = 50} = 1,
/obj/item/stack/sheet/cardboard = 2,
/obj/item/stack/sheet/metal{amount = 20} = 1,
/obj/item/stack/sheet/mineral/plasma{layer = 2.9} = 1,
/obj/item/stack/sheet/mineral/plasma = 1,
/obj/item/stack/sheet/rglass = 1,
/obj/item/weapon/book/manual/wiki/engineering_construction = 1,
/obj/item/weapon/book/manual/wiki/engineering_hacking = 1,
+1 -1
View File
@@ -98,7 +98,7 @@
desc = "It never stays still for long."
icon_state = "spiderling"
anchored = 0
layer = 2.75
layer = PROJECTILE_HIT_THRESHHOLD_LAYER
health = 3
var/amount_grown = 0
var/grow_as = null
+1 -1
View File
@@ -405,7 +405,7 @@ obj/item/proc/item_action_slot_check(slot, mob/user)
set category = "Object"
set name = "Pick up"
if(usr.stat || usr.restrained() || !Adjacent(usr) || usr.stunned || usr.weakened || usr.lying)
if(usr.incapacitated() || !Adjacent(usr) || usr.lying)
return
if(usr.get_active_hand() == null) // Let me know if this has any problems -Yota
+1 -1
View File
@@ -8,7 +8,7 @@
w_class = 1
throw_range = 1
throw_speed = 1
layer = 4
layer = MOB_LAYER
pressure_resistance = 1
/obj/item/documents/nanotrasen
@@ -153,7 +153,7 @@ var/global/list/datum/stack_recipe/sinew_recipes = list ( \
singular_name = "hide plate"
flags = NOBLUDGEON
w_class = 3
layer = 4
layer = MOB_LAYER
/obj/item/stack/sheet/animalhide/ashdrake
name = "ash drake hide"
@@ -163,7 +163,7 @@ var/global/list/datum/stack_recipe/sinew_recipes = list ( \
singular_name = "drake plate"
flags = NOBLUDGEON
w_class = 3
layer = 4
layer = MOB_LAYER
//Step one - dehairing.
@@ -62,7 +62,7 @@ var/global/list/datum/stack_recipe/sandstone_recipes = list ( \
icon = 'icons/obj/items.dmi'
icon_state = "sandbags"
singular_name = "sandbag"
layer = 2.95
layer = LOW_ITEM_LAYER
origin_tech = "materials=2"
var/global/list/datum/stack_recipe/sandbag_recipes = list ( \
@@ -69,24 +69,7 @@
add_implants()
ready = 1
src.updateUsrDialog()
return
/obj/machinery/implantchair/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/grab))
var/obj/item/weapon/grab/G = W
if(!ismob(G.affecting))
return
var/mob/M = G.affecting
if(M.buckled_mobs.len)
user << "[M] will not fit into [src] because they have a creature on them!"
return
if(put_mob(M))
qdel(G)
updateUsrDialog()
else
return ..()
updateUsrDialog()
/obj/machinery/implantchair/go_out(mob/M)
@@ -82,7 +82,7 @@
qdel(src)
singulo.process()
return
..()
. = ..()
/obj/item/weapon/storage/backpack/holding/singularity_act(current_size)
var/dist = max((current_size - 2),1)
@@ -201,6 +201,8 @@
if(!S.amount)
qdel(S)
else
if(S.pulledby)
S.pulledby.stop_pulling()
S.loc = src
orient2hud(usr)
@@ -345,7 +347,7 @@
/obj/item/weapon/storage/bag/tray/handle_item_insertion(obj/item/I, prevent_warning = 0)
overlays += image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = -1)
..()
. = ..()
/*
@@ -157,7 +157,7 @@
boxes.screen_loc = "[tx]:,[ty] to [mx],[my]"
for(var/obj/O in contents)
O.screen_loc = "[cx],[cy]"
O.layer = 20
O.layer = ABOVE_HUD_LAYER
cx++
if(cx > mx)
cx = tx
@@ -176,7 +176,7 @@
ND.sample_object.mouse_opacity = 2
ND.sample_object.screen_loc = "[cx]:16,[cy]:16"
ND.sample_object.maptext = "<font color='white'>[(ND.number > 1)? "[ND.number]" : ""]</font>"
ND.sample_object.layer = 20
ND.sample_object.layer = ABOVE_HUD_LAYER
cx++
if(cx > (4+cols))
cx = 4
@@ -186,7 +186,7 @@
O.mouse_opacity = 2 //This is here so storage items that spawn with contents correctly have the "click around item to equip"
O.screen_loc = "[cx]:16,[cy]:16"
O.maptext = ""
O.layer = 20
O.layer = ABOVE_HUD_LAYER
cx++
if(cx > (4+cols))
cx = 4
@@ -301,6 +301,8 @@
return 0
if(silent)
prevent_warning = 1
if(W.pulledby)
W.pulledby.stop_pulling()
W.loc = src
W.on_enter_storage(src)
if(usr)
@@ -462,11 +464,11 @@
boxes.master = src
boxes.icon_state = "block"
boxes.screen_loc = "7,7 to 10,8"
boxes.layer = 19
boxes.layer = HUD_LAYER
closer = new /obj/screen/close()
closer.master = src
closer.icon_state = "backpack_close"
closer.layer = 20
closer.layer = ABOVE_HUD_LAYER
orient2hud()
@@ -51,7 +51,7 @@
combined_access |= I.access
/obj/item/weapon/storage/wallet/handle_item_insertion(obj/item/W, prevent_warning = 0)
. = ..(W, prevent_warning)
. = ..()
if(.)
if(istype(W, /obj/item/weapon/card/id))
refreshID()
+1 -1
View File
@@ -162,7 +162,7 @@
desc = "A thick resin surface covers the floor."
anchored = 1
density = 0
layer = TURF_LAYER + 0.09
layer = TURF_LAYER
icon_state = "weeds"
health = 15
var/obj/structure/alien/weeds/node/linked_node = null
@@ -14,7 +14,7 @@
var/image/nest_overlay
/obj/structure/bed/nest/New()
nest_overlay = image('icons/mob/alien.dmi', "nestoverlay", layer=MOB_LAYER - 0.2)
nest_overlay = image('icons/mob/alien.dmi', "nestoverlay", layer=LYING_MOB_LAYER)
return ..()
/obj/structure/bed/nest/user_unbuckle_mob(mob/living/buckled_mob, mob/living/user)
@@ -73,7 +73,7 @@
if(M in buckled_mobs)
M.pixel_y = 0
M.pixel_x = initial(M.pixel_x) + 2
M.layer = MOB_LAYER - 0.3
M.layer = BELOW_MOB_LAYER
overlays += nest_overlay
else
M.pixel_x = M.get_standard_pixel_x_offset(M.lying)
@@ -162,7 +162,7 @@
/obj/structure/chair/comfy/New()
armrest = image("icons/obj/chairs.dmi", "comfychair_armrest")
armrest.layer = MOB_LAYER + 0.1
armrest.layer = ABOVE_MOB_LAYER
return ..()
+4 -2
View File
@@ -11,7 +11,7 @@ LINEN BINS
icon_state = "sheetwhite"
item_state = "bedsheet"
slot_flags = SLOT_BACK
layer = 4
layer = MOB_LAYER
throwforce = 0
throw_speed = 1
throw_range = 2
@@ -28,9 +28,11 @@ LINEN BINS
/obj/item/weapon/bedsheet/attack_self(mob/user)
user.drop_item()
if(layer == initial(layer))
layer = 5
layer = ABOVE_MOB_LAYER
user << "<span class='notice'>You cover yourself with [src].</span>"
else
layer = initial(layer)
user << "<span class='notice'>You smooth [src] out beneath you.</span>"
add_fingerprint(user)
return
+1 -1
View File
@@ -8,7 +8,7 @@
anchored = 1
density = 1
pixel_x = -16
layer = 9
layer = FLY_LAYER
var/cut = FALSE
var/log_amount = 10
+1 -2
View File
@@ -9,7 +9,7 @@
icon_state = "girder"
anchored = 1
density = 1
layer = 2.9
layer = BELOW_OBJ_LAYER
var/state = GIRDER_NORMAL
var/girderpasschance = 20 // percentage chance that a projectile passes through the girder.
var/can_displace = TRUE //If the girder can be moved around by wrenching it
@@ -291,7 +291,6 @@
anchored = 0
state = GIRDER_DISPLACED
girderpasschance = 25
layer = 2.45
/obj/structure/girder/reinforced
name = "reinforced girder"
+1 -1
View File
@@ -7,7 +7,7 @@
anchored = 1
flags = CONDUCT
pressure_resistance = 5*ONE_ATMOSPHERE
layer = 2.9
layer = BELOW_OBJ_LAYER
var/health = 10
var/destroyed = 0
var/obj/item/stack/rods/stored
+28 -29
View File
@@ -50,38 +50,37 @@
qdel(src)
else
user << "<span class='notice'>You can't do that while something's on the spike!</span>"
else if(istype(I, /obj/item/weapon/grab))
var/obj/item/weapon/grab/G = I
if(istype(G.affecting, /mob/living/))
if(!buckled_mobs.len)
if(do_mob(user, src, 120))
if(buckled_mobs.len) //to prevent spam/queing up attacks
return
if(G.affecting.buckled)
return
var/mob/living/H = G.affecting
playsound(src.loc, "sound/effects/splat.ogg", 25, 1)
H.visible_message("<span class='danger'>[user] slams [G.affecting] onto the meat spike!</span>", "<span class='userdanger'>[user] slams you onto the meat spike!</span>", "<span class='italics'>You hear a squishy wet noise.</span>")
H.loc = src.loc
H.emote("scream")
if(istype(H, /mob/living/carbon/human)) //So you don't get human blood when you spike a giant spidere
var/turf/pos = get_turf(H)
pos.add_blood_floor(H)
H.adjustBruteLoss(30)
H.buckled = src
H.dir = 2
buckle_mob(H, force=1)
var/matrix/m180 = matrix(H.transform)
m180.Turn(180)
animate(H, transform = m180, time = 3)
H.pixel_y = H.get_standard_pixel_y_offset(180)
qdel(G)
return
user << "<span class='danger'>You can't use that on the spike!</span>"
else
return ..()
/obj/structure/kitchenspike/attack_hand(mob/user)
if(user.pulling && isliving(user.pulling) && user.a_intent == "grab" && !buckled_mobs.len)
var/mob/living/L = user.pulling
if(do_mob(user, src, 120))
if(buckled_mobs.len) //to prevent spam/queing up attacks
return
if(L.buckled)
return
playsound(src.loc, "sound/effects/splat.ogg", 25, 1)
L.visible_message("<span class='danger'>[user] slams [L] onto the meat spike!</span>", "<span class='userdanger'>[user] slams you onto the meat spike!</span>", "<span class='italics'>You hear a squishy wet noise.</span>")
L.loc = src.loc
L.emote("scream")
if(ishuman(L)) //So you don't get human blood when you spike a giant spider
var/turf/pos = get_turf(L)
pos.add_blood_floor(L)
L.adjustBruteLoss(30)
L.buckled = src
L.dir = 2
buckle_mob(L, force=1)
var/matrix/m180 = matrix(L.transform)
m180.Turn(180)
animate(L, transform = m180, time = 3)
L.pixel_y = L.get_standard_pixel_y_offset(180)
else
..()
/obj/structure/kitchenspike/user_buckle_mob(mob/living/M, mob/living/user) //Don't want them getting put on the rack other than by spiking
return
+1 -1
View File
@@ -5,7 +5,7 @@
icon_state = "lattice"
density = 0
anchored = 1
layer = 2.3 //under pipes
layer = LATTICE_LAYER //under pipes
var/obj/item/stack/rods/stored
canSmoothWith = list(/obj/structure/lattice,
/turf/open/floor,
+1 -1
View File
@@ -211,7 +211,7 @@ var/global/list/crematoriums = new/list()
/obj/structure/tray
icon = 'icons/obj/stationobjs.dmi'
density = 1
layer = 2.9
layer = BELOW_OBJ_LAYER
var/obj/structure/bodycontainer/connected = null
anchored = 1
pass_flags = LETPASSTHROW
+1 -1
View File
@@ -5,7 +5,7 @@
icon_state = "plasticflaps"
density = 0
anchored = 1
layer = 4
layer = ABOVE_MOB_LAYER
/obj/structure/plasticflaps/CanAStarPass(ID, to_dir, caller)
if(istype(caller, /mob/living))
+1 -1
View File
@@ -5,7 +5,7 @@
desc = "An angled mirror for reflecting lasers. This one does so at a 90 degree angle."
anchored = 0
density = 1
layer = 2.9
layer = BELOW_OBJ_LAYER
var/finished = 0
var/admin = 0 //Can't be rotated or deconstructed
var/framebuildstacktype = /obj/item/stack/sheet/metal
+1 -1
View File
@@ -177,7 +177,7 @@ obj/structure/safe/ex_act(severity, target)
icon_state = "floorsafe"
density = 0
level = 1 //underfloor
layer = 2.5
layer = LOW_OBJ_LAYER
/obj/structure/safe/floor/initialize()
+1 -1
View File
@@ -3,7 +3,7 @@
anchored = 1
opacity = 0
density = 0
layer = 3.5
layer = SIGN_LAYER
/obj/structure/sign/basic
name = "blank sign"
+1 -1
View File
@@ -16,7 +16,7 @@
icon_state = "table_frame"
density = 0
anchored = 0
layer = 2.8
layer = PROJECTILE_HIT_THRESHHOLD_LAYER
var/framestack = /obj/item/stack/rods
var/framestackamount = 2
+34 -36
View File
@@ -19,7 +19,7 @@
icon_state = "table"
density = 1
anchored = 1
layer = 2.8
layer = TABLE_LAYER
climbable = TRUE
pass_flags = LETPASSTHROW //You can throw objects over this, despite it's density.")
var/frame = /obj/structure/table_frame
@@ -97,6 +97,19 @@
take_damage(rand(180,280), BRUTE, 0)
return 1
/obj/structure/table/attack_hand(mob/living/user)
if(user.a_intent == "grab" && user.pulling && isliving(user.pulling))
var/mob/living/pushed_mob = user.pulling
if(pushed_mob.buckled)
user << "<span class='warning'>[pushed_mob] is buckled to [pushed_mob.buckled]!</span>"
return
if(user.grab_state < GRAB_AGGRESSIVE)
user << "<span class='warning'>You need a better grip to do that!</span>"
return
tablepush(user, pushed_mob)
user.stop_pulling()
else
..()
/obj/structure/table/attack_tk() // no telehulk sorry
return
@@ -123,39 +136,15 @@
var/atom/movable/mover = caller
. = . || mover.checkpass(PASSTABLE)
/obj/structure/table/proc/tablepush(obj/item/I, mob/user)
if(get_dist(src, user) < 2)
var/obj/item/weapon/grab/G = I
if(G.affecting.buckled)
user << "<span class='warning'>[G.affecting] is buckled to [G.affecting.buckled]!</span>"
return 0
if(G.state < GRAB_AGGRESSIVE)
user << "<span class='warning'>You need a better grip to do that!</span>"
return 0
if(!G.confirm())
return 0
G.affecting.forceMove(src.loc)
if(istype(src, /obj/structure/table/optable))
var/obj/structure/table/optable/OT = src
G.affecting.resting = 1
G.affecting.update_canmove()
visible_message("<span class='notice'>[G.assailant] has laid [G.affecting] on [src].</span>")
OT.patient = G.affecting
OT.check_patient()
qdel(I)
return 1
G.affecting.Weaken(2)
G.affecting.visible_message("<span class='danger'>[G.assailant] pushes [G.affecting] onto [src].</span>", \
"<span class='userdanger'>[G.assailant] pushes [G.affecting] onto [src].</span>")
add_logs(G.assailant, G.affecting, "pushed")
qdel(I)
return 1
qdel(I)
/obj/structure/table/proc/tablepush(mob/living/user, mob/living/pushed_mob)
pushed_mob.forceMove(src.loc)
pushed_mob.Weaken(2)
pushed_mob.visible_message("<span class='danger'>[user] pushes [pushed_mob] onto [src].</span>", \
"<span class='userdanger'>[user] pushes [pushed_mob] onto [src].</span>")
add_logs(user, pushed_mob, "pushed")
/obj/structure/table/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/grab))
tablepush(I, user)
return
if(!(flags & NODECONSTRUCT))
if(istype(I, /obj/item/weapon/screwdriver) && deconstruction_ready)
table_deconstruct(user, 1)
@@ -297,10 +286,12 @@
/obj/structure/table/glass/proc/table_shatter(mob/M)
visible_message("<span class='warning'>[src] breaks!</span>",
"<span class='danger'>You hear breaking glass.</span>")
playsound(src.loc, "shatter", 50, 1)
for(var/i in debris)
var/atom/movable/AM = i
AM.loc = get_turf(src)
var/turf/T = get_turf(src)
playsound(T, "shatter", 50, 1)
for(var/I in debris)
var/atom/movable/AM = I
AM.forceMove(T)
debris -= AM
if(istype(AM, /obj/item/weapon/shard))
AM.throw_impact(M)
M.Weaken(5)
@@ -401,6 +392,13 @@
computer.table = src
break
/obj/structure/table/optable/tablepush(mob/living/user, mob/living/pushed_mob)
pushed_mob.forceMove(src.loc)
pushed_mob.resting = 1
pushed_mob.update_canmove()
visible_message("<span class='notice'>[user] has laid [pushed_mob] on [src].</span>")
check_patient()
/obj/structure/table/optable/proc/check_patient()
var/mob/M = locate(/mob/living/carbon/human, loc)
if(M)
+1 -1
View File
@@ -27,7 +27,7 @@
pinned_target = T
T.pinnedLoc = src
T.density = 1
T.layer = OBJ_LAYER + 0.1
T.layer = OBJ_LAYER + 0.01
T.loc = loc
user << "<span class='notice'>You slide the target into the stake.</span>"
@@ -60,41 +60,44 @@
/obj/structure/transit_tube/station/attack_hand(mob/user)
if(!pod_moving)
for(var/obj/structure/transit_tube_pod/pod in loc)
if(!pod.moving && pod.dir in directions())
if(icon_state == "closed")
open_animation()
if(user.pulling && user.a_intent == "grab" && isliving(user.pulling))
if(icon_state == "open")
var/mob/living/GM = user.pulling
if(user.grab_state >= GRAB_AGGRESSIVE)
if(GM.buckled || GM.buckled_mobs.len)
user << "<span class='warning'>[GM] is attached to something!</span>"
return
for(var/obj/structure/transit_tube_pod/pod in loc)
pod.visible_message("<span class='warning'>[user] starts putting [GM] into the [pod]!</span>")
if(do_after(user, 15, target = src))
if(GM && user.grab_state >= GRAB_AGGRESSIVE && user.pulling == GM && !GM.buckled && !GM.buckled_mobs.len)
GM.Weaken(5)
src.Bumped(GM)
break
else
for(var/obj/structure/transit_tube_pod/pod in loc)
if(!pod.moving && pod.dir in directions())
if(icon_state == "closed")
open_animation()
else if(icon_state == "open")
if(pod.contents.len && user.loc != pod)
user.visible_message("[user] starts emptying [pod]'s contents onto the floor.", "<span class='notice'>You start emptying [pod]'s contents onto the floor...</span>")
if(do_after(user, 10, target = src)) //So it doesn't default to close_animation() on fail
if(pod.loc == loc)
for(var/atom/movable/AM in pod)
AM.loc = get_turf(user)
if(ismob(AM))
var/mob/M = AM
M.Weaken(5)
else if(icon_state == "open")
if(pod.contents.len && user.loc != pod)
user.visible_message("[user] starts emptying [pod]'s contents onto the floor.", "<span class='notice'>You start emptying [pod]'s contents onto the floor...</span>")
if(do_after(user, 10, target = src)) //So it doesn't default to close_animation() on fail
if(pod.loc == loc)
for(var/atom/movable/AM in pod)
AM.loc = get_turf(user)
if(ismob(AM))
var/mob/M = AM
M.Weaken(5)
else
close_animation()
break
else
close_animation()
break
/obj/structure/transit_tube/station/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/grab))
if(icon_state == "open")
var/obj/item/weapon/grab/G = W
if(ismob(G.affecting) && G.state >= GRAB_AGGRESSIVE)
var/mob/GM = G.affecting
for(var/obj/structure/transit_tube_pod/pod in loc)
pod.visible_message("<span class='warning'>[user] starts putting [GM] into the [pod]!</span>")
if(do_after(user, 15, target = src) && GM && G && G.affecting == GM)
GM.Weaken(5)
src.Bumped(GM)
qdel(G)
break
else if(istype(W, /obj/item/weapon/crowbar))
if(istype(W, /obj/item/weapon/crowbar))
for(var/obj/structure/transit_tube_pod/pod in loc)
if(pod.contents)
user << "<span class='warning'>Empty the pod first!</span>"
@@ -6,7 +6,7 @@
icon = 'icons/obj/atmospherics/pipes/transit_tube.dmi'
icon_state = "E-W"
density = 1
layer = 3.1
layer = ABOVE_OBJ_LAYER
anchored = 1
var/tube_construction = /obj/structure/c_transit_tube
var/list/tube_dirs = null
@@ -6,7 +6,7 @@
icon = 'icons/obj/atmospherics/pipes/transit_tube.dmi'
icon_state = "E-W" //icon_state decides which tube will be built
density = 0
layer = 3.1 //same as the built tube
layer = ABOVE_OBJ_LAYER //same as the built tube
anchored = 0
/obj/structure/c_transit_tube/examine(mob/user)
+45 -60
View File
@@ -22,12 +22,37 @@
playsound(src.loc, "swing_hit", 25, 1)
swirlie.visible_message("<span class='danger'>[user] slams the toilet seat onto [swirlie]'s head!</span>", "<span class='userdanger'>[user] slams the toilet seat onto your head!</span>", "<span class='italics'>You hear reverberating porcelain.</span>")
swirlie.adjustBruteLoss(5)
return
if(cistern && !open)
else if(user.pulling && user.a_intent == "grab" && isliving(user.pulling))
user.changeNext_move(CLICK_CD_MELEE)
var/mob/living/GM = user.pulling
if(user.grab_state >= GRAB_AGGRESSIVE)
if(GM.loc != get_turf(src))
user << "<span class='warning'>[GM] needs to be on [src]!</span>"
return
if(!swirlie)
if(open)
GM.visible_message("<span class='danger'>[user] starts to give [GM] a swirlie!</span>", "<span class='userdanger'>[user] starts to give you a swirlie...</span>")
swirlie = GM
if(do_after(user, 30, 0, target = src))
GM.visible_message("<span class='danger'>[user] gives [GM] a swirlie!</span>", "<span class='userdanger'>[user] gives you a swirlie!</span>", "<span class='italics'>You hear a toilet flushing.</span>")
if(iscarbon(GM))
var/mob/living/carbon/C = GM
if(!C.internal)
C.adjustOxyLoss(5)
else
GM.adjustOxyLoss(5)
swirlie = null
else
playsound(src.loc, 'sound/effects/bang.ogg', 25, 1)
GM.visible_message("<span class='danger'>[user] slams [GM.name] into [src]!</span>", "<span class='userdanger'>[user] slams you into [src]!</span>")
GM.adjustBruteLoss(5)
else
user << "<span class='warning'>You need a tighter grip!</span>"
else if(cistern && !open)
if(!contents.len)
user << "<span class='notice'>The cistern is empty.</span>"
return
else
var/obj/item/I = pick(contents)
if(ishuman(user))
@@ -36,10 +61,9 @@
I.loc = get_turf(src)
user << "<span class='notice'>You find [I] in the cistern.</span>"
w_items -= I.w_class
return
open = !open
update_icon()
else
open = !open
update_icon()
/obj/structure/toilet/update_icon()
@@ -54,7 +78,6 @@
user.visible_message("[user] [cistern ? "replaces the lid on the cistern" : "lifts the lid off the cistern"]!", "<span class='notice'>You [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]!</span>", "<span class='italics'>You hear grinding porcelain.</span>")
cistern = !cistern
update_icon()
return
else if(cistern)
if(user.a_intent != "harm")
@@ -70,7 +93,6 @@
I.loc = src
w_items += I.w_class
user << "<span class='notice'>You carefully place [I] into the cistern.</span>"
return
else if(istype(I, /obj/item/weapon/reagent_containers))
if (!open)
@@ -78,39 +100,6 @@
var/obj/item/weapon/reagent_containers/RG = I
RG.reagents.add_reagent("water", min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this))
user << "<span class='notice'>You fill [RG] from [src]. Gross.</span>"
return
else if(istype(I, /obj/item/weapon/grab))
user.changeNext_move(CLICK_CD_MELEE)
var/obj/item/weapon/grab/G = I
if(!G.confirm())
return
if(isliving(G.affecting))
var/mob/living/GM = G.affecting
if(G.state >= GRAB_AGGRESSIVE)
if(GM.loc != get_turf(src))
user << "<span class='warning'>[GM] needs to be on [src]!</span>"
return
if(!swirlie)
if(open)
GM.visible_message("<span class='danger'>[user] starts to give [GM] a swirlie!</span>", "<span class='userdanger'>[user] starts to give you a swirlie...</span>")
swirlie = GM
if(do_after(user, 30, 0, target = src))
GM.visible_message("<span class='danger'>[user] gives [GM] a swirlie!</span>", "<span class='userdanger'>[user] gives you a swirlie!</span>", "<span class='italics'>You hear a toilet flushing.</span>")
if(iscarbon(GM))
var/mob/living/carbon/C = GM
if(!C.internal)
C.adjustOxyLoss(5)
else
GM.adjustOxyLoss(5)
swirlie = null
else
playsound(src.loc, 'sound/effects/bang.ogg', 25, 1)
GM.visible_message("<span class='danger'>[user] slams [GM.name] into [src]!</span>", "<span class='userdanger'>[user] slams you into [src]!</span>")
GM.adjustBruteLoss(5)
else
user << "<span class='warning'>You need a tighter grip!</span>"
else
return ..()
@@ -125,24 +114,20 @@
anchored = 1
/obj/structure/urinal/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/grab))
var/obj/item/weapon/grab/G = I
if(!G.confirm())
return
if(isliving(G.affecting))
var/mob/living/GM = G.affecting
if(G.state >= GRAB_AGGRESSIVE)
if(GM.loc != get_turf(src))
user << "<span class='notice'>[GM.name] needs to be on [src].</span>"
return
user.changeNext_move(CLICK_CD_MELEE)
user.visible_message("<span class='danger'>[user] slams [GM] into [src]!</span>", "<span class='danger'>You slam [GM] into [src]!</span>")
GM.adjustBruteLoss(8)
else
user << "<span class='warning'>You need a tighter grip!</span>"
/obj/structure/urinal/attack_hand(mob/user)
if(user.pulling && user.a_intent == "grab" && isliving(user.pulling))
var/mob/living/GM = user.pulling
if(user.grab_state >= GRAB_AGGRESSIVE)
if(GM.loc != get_turf(src))
user << "<span class='notice'>[GM.name] needs to be on [src].</span>"
return
user.changeNext_move(CLICK_CD_MELEE)
user.visible_message("<span class='danger'>[user] slams [GM] into [src]!</span>", "<span class='danger'>You slam [GM] into [src]!</span>")
GM.adjustBruteLoss(8)
else
user << "<span class='warning'>You need a tighter grip!</span>"
else
return ..()
..()
/obj/machinery/shower
name = "shower"
@@ -162,7 +147,7 @@
name = "mist"
icon = 'icons/obj/watercloset.dmi'
icon_state = "mist"
layer = MOB_LAYER + 1
layer = FLY_LAYER
anchored = 1
mouse_opacity = 0
+1 -1
View File
@@ -3,7 +3,7 @@
desc = "A window."
icon_state = "window"
density = 1
layer = 3.2//Just above doors
layer = ABOVE_OBJ_LAYER //Just above doors
pressure_resistance = 4*ONE_ATMOSPHERE
anchored = 1 //initially is 0 for tile smoothing
flags = ON_BORDER
+1 -2
View File
@@ -1,6 +1,6 @@
/turf/closed
var/thermite = 0
layer = CLOSED_TURF_LAYER
opacity = 1
density = 1
blocks_air = 1
@@ -9,7 +9,6 @@
name = "wall"
icon = 'icons/turf/walls.dmi'
explosion_block = 50
layer = TURF_LAYER + 0.05
/turf/closed/indestructible/splashscreen
name = "Space Station 13"
+1 -2
View File
@@ -5,7 +5,6 @@
icon_state = "wall"
var/mineral = "metal"
explosion_block = 1
layer = TURF_LAYER + 0.05
thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT
heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall
@@ -223,7 +222,7 @@
O.anchored = 1
O.opacity = 1
O.density = 1
O.layer = 5
O.layer = FLY_LAYER
playsound(src, 'sound/items/Welder.ogg', 100, 1)

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