mirror of
https://github.com/Sandstorm-Station/Sandstorm-Station-13.git
synced 2026-08-26 06:40:36 +01:00
Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into master
This commit is contained in:
@@ -227,7 +227,7 @@
|
||||
/area/ruin/unpowered/xenonest)
|
||||
"ba" = (
|
||||
/obj/structure/stone_tile/slab,
|
||||
/turf/open/indestructible/boss/air,
|
||||
/turf/open/indestructible/boss,
|
||||
/area/ruin/unpowered/xenonest)
|
||||
"bb" = (
|
||||
/obj/structure/stone_tile/cracked{
|
||||
@@ -241,7 +241,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/flashlight/lantern,
|
||||
/turf/open/indestructible/boss/air,
|
||||
/turf/open/indestructible/boss,
|
||||
/area/ruin/unpowered/xenonest)
|
||||
"bc" = (
|
||||
/obj/structure/stone_tile/block,
|
||||
@@ -251,7 +251,7 @@
|
||||
/obj/structure/stone_tile{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/indestructible/boss/air,
|
||||
/turf/open/indestructible/boss,
|
||||
/area/ruin/unpowered/xenonest)
|
||||
"bd" = (
|
||||
/obj/structure/stone_tile/block,
|
||||
@@ -262,7 +262,7 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/decal/cleanable/blood/xeno,
|
||||
/turf/open/indestructible/boss/air,
|
||||
/turf/open/indestructible/boss,
|
||||
/area/ruin/unpowered/xenonest)
|
||||
"be" = (
|
||||
/obj/structure/stone_tile/block,
|
||||
@@ -272,7 +272,7 @@
|
||||
/obj/structure/stone_tile{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/indestructible/boss/air,
|
||||
/turf/open/indestructible/boss,
|
||||
/area/ruin/unpowered/xenonest)
|
||||
"bf" = (
|
||||
/obj/structure/stone_tile,
|
||||
@@ -286,7 +286,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/item/flashlight/lantern,
|
||||
/turf/open/indestructible/boss/air,
|
||||
/turf/open/indestructible/boss,
|
||||
/area/ruin/unpowered/xenonest)
|
||||
"bg" = (
|
||||
/obj/structure/alien/weeds,
|
||||
@@ -303,7 +303,7 @@
|
||||
/obj/structure/stone_tile{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/indestructible/boss/air,
|
||||
/turf/open/indestructible/boss,
|
||||
/area/ruin/unpowered/xenonest)
|
||||
"bi" = (
|
||||
/obj/structure/alien/weeds,
|
||||
@@ -336,11 +336,11 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/stone_tile,
|
||||
/turf/open/indestructible/boss/air,
|
||||
/turf/open/indestructible/boss,
|
||||
/area/ruin/unpowered/xenonest)
|
||||
"bm" = (
|
||||
/obj/structure/stone_tile/slab/cracked,
|
||||
/turf/open/indestructible/boss/air,
|
||||
/turf/open/indestructible/boss,
|
||||
/area/ruin/unpowered/xenonest)
|
||||
"bn" = (
|
||||
/obj/structure/stone_tile/block{
|
||||
@@ -352,7 +352,7 @@
|
||||
/obj/structure/stone_tile{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/indestructible/boss/air,
|
||||
/turf/open/indestructible/boss,
|
||||
/area/ruin/unpowered/xenonest)
|
||||
"bo" = (
|
||||
/obj/structure/stone_tile/surrounding_tile{
|
||||
@@ -383,7 +383,7 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/decal/cleanable/blood/xeno,
|
||||
/turf/open/indestructible/boss/air,
|
||||
/turf/open/indestructible/boss,
|
||||
/area/ruin/unpowered/xenonest)
|
||||
"bs" = (
|
||||
/obj/structure/stone_tile/block{
|
||||
@@ -416,7 +416,7 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/stone_tile/cracked,
|
||||
/turf/open/indestructible/boss/air,
|
||||
/turf/open/indestructible/boss,
|
||||
/area/ruin/unpowered/xenonest)
|
||||
"bw" = (
|
||||
/obj/structure/stone_tile/cracked{
|
||||
@@ -430,7 +430,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/item/flashlight/lantern,
|
||||
/turf/open/indestructible/boss/air,
|
||||
/turf/open/indestructible/boss,
|
||||
/area/ruin/unpowered/xenonest)
|
||||
"bx" = (
|
||||
/obj/structure/stone_tile/block{
|
||||
@@ -441,7 +441,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/decal/cleanable/blood/xeno,
|
||||
/turf/open/indestructible/boss/air,
|
||||
/turf/open/indestructible/boss,
|
||||
/area/ruin/unpowered/xenonest)
|
||||
"by" = (
|
||||
/obj/structure/stone_tile/block{
|
||||
@@ -451,7 +451,7 @@
|
||||
/obj/structure/stone_tile/cracked{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/indestructible/boss/air,
|
||||
/turf/open/indestructible/boss,
|
||||
/area/ruin/unpowered/xenonest)
|
||||
"bz" = (
|
||||
/obj/structure/stone_tile/block/cracked{
|
||||
@@ -461,7 +461,7 @@
|
||||
/obj/structure/stone_tile{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/indestructible/boss/air,
|
||||
/turf/open/indestructible/boss,
|
||||
/area/ruin/unpowered/xenonest)
|
||||
"bA" = (
|
||||
/obj/structure/stone_tile/cracked{
|
||||
@@ -475,7 +475,7 @@
|
||||
},
|
||||
/obj/structure/stone_tile,
|
||||
/obj/item/flashlight/lantern,
|
||||
/turf/open/indestructible/boss/air,
|
||||
/turf/open/indestructible/boss,
|
||||
/area/ruin/unpowered/xenonest)
|
||||
"bB" = (
|
||||
/obj/structure/alien/weeds,
|
||||
|
||||
@@ -5103,7 +5103,7 @@
|
||||
/area/security/main)
|
||||
"ajv" = (
|
||||
/obj/machinery/computer/med_data{
|
||||
dir = 3
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/sign/poster/official/medical_green_cross{
|
||||
pixel_x = -32
|
||||
@@ -30889,7 +30889,7 @@
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/space/nearstation)
|
||||
"bvH" = (
|
||||
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
|
||||
@@ -53711,9 +53711,6 @@
|
||||
},
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/crew_quarters/toilet)
|
||||
"dVU" = (
|
||||
/turf/open/floor/plating,
|
||||
/area/space/nearstation)
|
||||
"dXq" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
|
||||
dir = 4
|
||||
@@ -53770,7 +53767,7 @@
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 6
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/space/nearstation)
|
||||
"egt" = (
|
||||
/obj/effect/turf_decal/tile/bar,
|
||||
@@ -54417,7 +54414,7 @@
|
||||
"fIs" = (
|
||||
/obj/structure/grille,
|
||||
/obj/structure/lattice,
|
||||
/turf/open/floor/plating,
|
||||
/turf/open/space/basic,
|
||||
/area/space/nearstation)
|
||||
"fJY" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
@@ -54575,19 +54572,6 @@
|
||||
},
|
||||
/turf/open/floor/carpet,
|
||||
/area/crew_quarters/cryopod)
|
||||
"ghq" = (
|
||||
/obj/structure/lattice/catwalk,
|
||||
/obj/item/stack/marker_beacon{
|
||||
anchored = 1;
|
||||
icon_state = "markerburgundy-on";
|
||||
light_color = "#FA644B";
|
||||
light_power = 3;
|
||||
light_range = 3;
|
||||
name = "Docking Beacon";
|
||||
picked_color = "Burgundy"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/space/nearstation)
|
||||
"ghD" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/open/floor/plasteel,
|
||||
@@ -54744,7 +54728,7 @@
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 9
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/space/nearstation)
|
||||
"gJi" = (
|
||||
/obj/structure/lattice/catwalk,
|
||||
@@ -54980,7 +54964,7 @@
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 10
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/space/nearstation)
|
||||
"hxn" = (
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
@@ -57361,7 +57345,7 @@
|
||||
/area/crew_quarters/theatre)
|
||||
"oyN" = (
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/turf/open/floor/plating,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/space/nearstation)
|
||||
"oyX" = (
|
||||
/obj/machinery/atmospherics/components/binary/pump/on{
|
||||
@@ -58206,7 +58190,7 @@
|
||||
dir = 5
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Bar Backroom"
|
||||
c_tag = "Gravity Generator - Fore"
|
||||
},
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
|
||||
dir = 4
|
||||
@@ -58501,7 +58485,7 @@
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/space/nearstation)
|
||||
"slk" = (
|
||||
/obj/machinery/door/airlock/maintenance{
|
||||
@@ -58758,9 +58742,6 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/engine_smes)
|
||||
"sQX" = (
|
||||
/turf/open/floor/plating,
|
||||
/area/space)
|
||||
"sRH" = (
|
||||
/obj/machinery/autolathe/secure{
|
||||
name = "public autolathe"
|
||||
@@ -58877,7 +58858,7 @@
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 5
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/space/nearstation)
|
||||
"trb" = (
|
||||
/obj/machinery/light{
|
||||
@@ -59100,7 +59081,7 @@
|
||||
/area/hallway/primary/central)
|
||||
"uaw" = (
|
||||
/obj/machinery/power/apc{
|
||||
areastring = "/area/storage/art";
|
||||
areastring = "/area/maintenance/bar";
|
||||
dir = 1;
|
||||
name = "Maint bar";
|
||||
pixel_y = 24
|
||||
@@ -59513,7 +59494,7 @@
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/space/nearstation)
|
||||
"vbi" = (
|
||||
/obj/structure/table,
|
||||
@@ -60613,7 +60594,7 @@
|
||||
name = "Docking Beacon";
|
||||
picked_color = "Burgundy"
|
||||
},
|
||||
/turf/open/space/basic,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/space/nearstation)
|
||||
"xOx" = (
|
||||
/obj/structure/chair/comfy/brown{
|
||||
@@ -66846,11 +66827,11 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
ghq
|
||||
xLX
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
ghq
|
||||
xLX
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
@@ -67097,9 +67078,9 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
ghq
|
||||
xLX
|
||||
aaa
|
||||
ghq
|
||||
xLX
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
@@ -67111,9 +67092,9 @@ gXs
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
ghq
|
||||
xLX
|
||||
aaa
|
||||
ghq
|
||||
xLX
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
@@ -76662,7 +76643,7 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aag
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
@@ -76919,7 +76900,7 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aag
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
@@ -77176,7 +77157,7 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aag
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
@@ -77433,7 +77414,7 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aag
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
@@ -77690,7 +77671,7 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aag
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
@@ -77947,7 +77928,7 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aag
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
@@ -78204,7 +78185,7 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aag
|
||||
aaa
|
||||
aaa
|
||||
aoV
|
||||
bZm
|
||||
@@ -78461,13 +78442,13 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aag
|
||||
aaa
|
||||
aaa
|
||||
aoV
|
||||
bVz
|
||||
aaf
|
||||
aaf
|
||||
sQX
|
||||
aoV
|
||||
aaa
|
||||
aaS
|
||||
aaf
|
||||
@@ -78718,7 +78699,7 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aag
|
||||
aaa
|
||||
aaa
|
||||
aag
|
||||
bVz
|
||||
@@ -78975,7 +78956,7 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aag
|
||||
gJi
|
||||
aaa
|
||||
aaf
|
||||
bVz
|
||||
@@ -79232,7 +79213,7 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aag
|
||||
gJi
|
||||
aaa
|
||||
aaf
|
||||
bVz
|
||||
@@ -84282,7 +84263,7 @@ aaa
|
||||
aaa
|
||||
gXs
|
||||
gXs
|
||||
dVU
|
||||
aaH
|
||||
abc
|
||||
abu
|
||||
abu
|
||||
|
||||
@@ -154,9 +154,10 @@
|
||||
#define SHOVE_KNOCKDOWN_HUMAN 30
|
||||
#define SHOVE_KNOCKDOWN_TABLE 30
|
||||
#define SHOVE_KNOCKDOWN_COLLATERAL 10
|
||||
//for the shove slowdown, see __DEFINES/movespeed_modification.dm
|
||||
#define SHOVE_SLOWDOWN_LENGTH 30
|
||||
#define SHOVE_SLOWDOWN_STRENGTH 0.85 //multiplier
|
||||
/// how long they're staggered for
|
||||
#define SHOVE_STAGGER_DURATION 35
|
||||
/// how long they're off balance for
|
||||
#define SHOVE_OFFBALANCE_DURATION 30
|
||||
//Shove disarming item list
|
||||
GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list(
|
||||
/obj/item/gun)))
|
||||
|
||||
@@ -63,7 +63,6 @@
|
||||
#define MOVESPEED_ID_TASED_STATUS "TASED"
|
||||
#define MOVESPEED_ID_ELECTROSTAFF "ELECTROSTAFF"
|
||||
|
||||
#define MOVESPEED_ID_SHOVE "SHOVE"
|
||||
#define MOVESPEED_ID_FAT "FAT"
|
||||
#define MOVESPEED_ID_COLD "COLD"
|
||||
#define MOVESPEED_ID_HUNGRY "HUNGRY"
|
||||
|
||||
@@ -111,6 +111,9 @@
|
||||
|
||||
#define STATUS_EFFECT_LIMP /datum/status_effect/limp //For when you have a busted leg (or two!) and want additional slowdown when walking on that leg
|
||||
|
||||
/// shoves inflict this to indicate the next shove while this is in effect should disarm guns
|
||||
#define STATUS_EFFECT_OFF_BALANCE /datum/status_effect/off_balance
|
||||
|
||||
/////////////
|
||||
// NEUTRAL //
|
||||
/////////////
|
||||
|
||||
@@ -0,0 +1,91 @@
|
||||
/**
|
||||
* KILLER QUEEN
|
||||
*
|
||||
* Simple contact bomb component
|
||||
* Blows up the first person to touch it.
|
||||
*/
|
||||
/datum/component/killerqueen
|
||||
can_transfer = TRUE
|
||||
/// strength of explosion on the touch-er. 0 to disable. usually only used if the normal explosion is disabled (this is the default).
|
||||
var/ex_strength = EXPLODE_HEAVY
|
||||
/// callback to invoke with (parent, victim) before standard detonation - useful for losing a reference to this component or implementing custom behavior. return FALSE to prevent explosion.
|
||||
var/datum/callback/pre_explode
|
||||
/// callback to invoke with (parent) when deleting without an explosion
|
||||
var/datum/callback/failure
|
||||
/// did we explode
|
||||
var/exploded = FALSE
|
||||
/// examine message
|
||||
var/examine_message
|
||||
/// light explosion radius
|
||||
var/light = 0
|
||||
/// heavy explosion radius
|
||||
var/heavy = 0
|
||||
/// dev explosion radius
|
||||
var/dev = 0
|
||||
/// flame explosion radius
|
||||
var/flame = 0
|
||||
/// only triggered by living mobs
|
||||
var/living_only = TRUE
|
||||
|
||||
|
||||
/datum/component/killerqueen/Initialize(ex_strength = EXPLODE_HEAVY, datum/callback/pre_explode, datum/callback/failure, examine_message, light = 0, heavy = 0, dev = 0, flame = 0, living_only = TRUE)
|
||||
. = ..()
|
||||
if(. & COMPONENT_INCOMPATIBLE)
|
||||
return
|
||||
if(!isatom(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
src.ex_strength = ex_strength
|
||||
src.pre_explode = pre_explode
|
||||
src.failure = failure
|
||||
src.examine_message = examine_message
|
||||
src.light = light
|
||||
src.heavy = heavy
|
||||
src.dev = dev
|
||||
src.flame = flame
|
||||
src.living_only = living_only
|
||||
|
||||
/datum/component/killerqueen/Destroy()
|
||||
if(!exploded)
|
||||
failure?.Invoke(parent)
|
||||
return ..()
|
||||
|
||||
/datum/component/killerqueen/RegisterWithParent()
|
||||
. = ..()
|
||||
RegisterSignal(parent, list(COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_ATTACK_PAW, COMSIG_ATOM_ATTACK_ANIMAL), .proc/touch_detonate)
|
||||
RegisterSignal(parent, COMSIG_MOVABLE_BUMP, .proc/bump_detonate)
|
||||
RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/attackby_detonate)
|
||||
RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/on_examine)
|
||||
|
||||
/datum/component/killerqueen/UnregisterFromParent()
|
||||
. = ..()
|
||||
UnregisterSignal(parent, list(COMSIG_ATOM_ATTACK_ANIMAL, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_ATTACK_PAW,
|
||||
COMSIG_MOVABLE_BUMP, COMSIG_PARENT_ATTACKBY, COMSIG_PARENT_EXAMINE))
|
||||
|
||||
/datum/component/killerqueen/proc/attackby_detonate(datum/source, obj/item/I, mob/user)
|
||||
detonate(user)
|
||||
|
||||
/datum/component/killerqueen/proc/bump_detonate(datum/source, atom/A)
|
||||
detonate(A)
|
||||
|
||||
/datum/component/killerqueen/proc/touch_detonate(datum/source, mob/user)
|
||||
detonate(user)
|
||||
|
||||
/datum/component/killerqueen/proc/on_examine(datum/source, mob/examiner, list/examine_return)
|
||||
if(examine_message)
|
||||
examine_return += examine_message
|
||||
|
||||
/datum/component/killerqueen/proc/detonate(atom/victim)
|
||||
if(!isliving(victim) && living_only)
|
||||
return
|
||||
if(pre_explode && !pre_explode.Invoke(parent, victim))
|
||||
return
|
||||
if(ex_strength)
|
||||
victim.ex_act(ex_strength)
|
||||
if(light || heavy || dev || flame)
|
||||
explosion(parent, dev, heavy, light, flame_range = flame)
|
||||
else
|
||||
var/turf/T = get_turf(parent)
|
||||
playsound(T, 'sound/effects/explosion2.ogg', 200, 1)
|
||||
new /obj/effect/temp_visual/explosion(T)
|
||||
exploded = TRUE
|
||||
qdel(src)
|
||||
@@ -97,6 +97,21 @@
|
||||
duration = set_duration
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/off_balance
|
||||
id = "offbalance"
|
||||
alert_type = null
|
||||
|
||||
/datum/status_effect/off_balance/on_creation(mob/living/new_owner, set_duration)
|
||||
if(isnum(set_duration))
|
||||
duration = set_duration
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/off_balance/on_remove()
|
||||
var/active_item = owner.get_active_held_item()
|
||||
if(is_type_in_typecache(active_item, GLOB.shove_disarming_types))
|
||||
owner.visible_message("<span class='warning'>[owner.name] regains their grip on \the [active_item]!</span>", "<span class='warning'>You regain your grip on \the [active_item]</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
return ..()
|
||||
|
||||
/obj/screen/alert/status_effect/asleep
|
||||
name = "Asleep"
|
||||
desc = "You've fallen asleep. Wait a bit and you should wake up. Unless you don't, considering how helpless you are."
|
||||
|
||||
@@ -257,10 +257,8 @@
|
||||
|
||||
if(14 to 25) // 1.3ish% chance to stumble and be a bit off balance (like being disarmed)
|
||||
to_chat(our_guy, "<span class='danger'>You stumble a bit on your untied shoelaces!</span>")
|
||||
if(!our_guy.has_movespeed_modifier(/datum/movespeed_modifier/shove))
|
||||
our_guy.add_movespeed_modifier(/datum/movespeed_modifier/shove)
|
||||
addtimer(CALLBACK(our_guy, /mob/living/carbon/human/proc/clear_shove_slowdown), SHOVE_SLOWDOWN_LENGTH)
|
||||
|
||||
our_guy.ShoveOffBalance(SHOVE_OFFBALANCE_DURATION)
|
||||
our_guy.Stagger(SHOVE_OFFBALANCE_DURATION) //yes, same.
|
||||
if(26 to 1000)
|
||||
wiser = FALSE
|
||||
if(wiser)
|
||||
|
||||
@@ -1041,12 +1041,6 @@
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/human/proc/clear_shove_slowdown()
|
||||
remove_movespeed_modifier(/datum/movespeed_modifier/shove)
|
||||
var/active_item = get_active_held_item()
|
||||
if(is_type_in_typecache(active_item, GLOB.shove_disarming_types))
|
||||
visible_message("<span class='warning'>[src.name] regains their grip on \the [active_item]!</span>", "<span class='warning'>You regain your grip on \the [active_item]</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
|
||||
/mob/living/carbon/human/updatehealth()
|
||||
. = ..()
|
||||
|
||||
|
||||
@@ -1944,11 +1944,11 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
target.visible_message("<span class='danger'>[user.name] shoves [target.name]!</span>",
|
||||
"<span class='danger'>[user.name] shoves you!</span>", null, COMBAT_MESSAGE_RANGE, null,
|
||||
user, "<span class='danger'>You shove [target.name]!</span>")
|
||||
target.Stagger(SHOVE_STAGGER_DURATION)
|
||||
var/obj/item/target_held_item = target.get_active_held_item()
|
||||
if(!is_type_in_typecache(target_held_item, GLOB.shove_disarming_types))
|
||||
target_held_item = null
|
||||
if(!target.has_movespeed_modifier(/datum/movespeed_modifier/shove))
|
||||
target.add_movespeed_modifier(/datum/movespeed_modifier/shove)
|
||||
if(!target.has_status_effect(STATUS_EFFECT_OFF_BALANCE))
|
||||
if(target_held_item)
|
||||
if(!HAS_TRAIT(target_held_item, TRAIT_NODROP))
|
||||
target.visible_message("<span class='danger'>[target.name]'s grip on \the [target_held_item] loosens!</span>",
|
||||
@@ -1956,12 +1956,12 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
append_message += ", loosening their grip on [target_held_item]"
|
||||
else
|
||||
append_message += ", but couldn't loose their grip on [target_held_item]"
|
||||
addtimer(CALLBACK(target, /mob/living/carbon/human/proc/clear_shove_slowdown), SHOVE_SLOWDOWN_LENGTH)
|
||||
else if(target_held_item)
|
||||
if(target.dropItemToGround(target_held_item))
|
||||
target.visible_message("<span class='danger'>[target.name] drops \the [target_held_item]!!</span>",
|
||||
"<span class='danger'>You drop \the [target_held_item]!!</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
append_message += ", causing them to drop [target_held_item]"
|
||||
target.ShoveOffBalance(SHOVE_OFFBALANCE_DURATION)
|
||||
log_combat(user, target, "shoved", append_message)
|
||||
|
||||
/datum/species/proc/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked, mob/living/carbon/human/H, forced = FALSE, spread_damage = FALSE, wound_bonus = 0, bare_wound_bonus = 0, sharpness = FALSE)
|
||||
|
||||
@@ -36,60 +36,21 @@
|
||||
return
|
||||
if(isobj(A) && Adjacent(A))
|
||||
if(bomb_cooldown <= world.time && !stat)
|
||||
var/obj/guardian_bomb/B = new /obj/guardian_bomb(get_turf(A))
|
||||
var/datum/component/killerqueen/K = A.AddComponent(/datum/component/killerqueen, EXPLODE_HEAVY, CALLBACK(src, .proc/on_explode), CALLBACK(src, .proc/on_failure), \
|
||||
examine_message = "<span class='holoparasite'>It glows with a strange <font color=\"[guardiancolor]\">light</font>!</span>")
|
||||
QDEL_IN(K, 1 MINUTES)
|
||||
to_chat(src, "<span class='danger'><B>Success! Bomb armed!</span></B>")
|
||||
bomb_cooldown = world.time + 200
|
||||
B.spawner = src
|
||||
B.disguise(A)
|
||||
else
|
||||
to_chat(src, "<span class='danger'><B>Your powers are on cooldown! You must wait 20 seconds between bombs.</span></B>")
|
||||
|
||||
/obj/guardian_bomb
|
||||
name = "bomb"
|
||||
desc = "You shouldn't be seeing this!"
|
||||
var/obj/stored_obj
|
||||
var/mob/living/simple_animal/hostile/guardian/spawner
|
||||
/mob/living/simple_animal/hostile/guardian/bomb/proc/on_explode(atom/bomb, atom/victim)
|
||||
if((victim == src) || (victim == summoner) || (hasmatchingsummoner(victim)))
|
||||
to_chat(victim, "<span class='holoparasite'>[src] glows with a strange <font color=\"[guardiancolor]\">light</font>, and you don't touch it.</span>")
|
||||
return FALSE
|
||||
to_chat(src, "<span class='danger'>One of your explosive traps caught [victim]!</span>")
|
||||
to_chat(victim, "<span class='danger'>[bomb] was boobytrapped!</span>")
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/guardian_bomb/proc/disguise(obj/A)
|
||||
A.forceMove(src)
|
||||
stored_obj = A
|
||||
opacity = A.opacity
|
||||
anchored = A.anchored
|
||||
density = A.density
|
||||
appearance = A.appearance
|
||||
addtimer(CALLBACK(src, .proc/disable), 600)
|
||||
|
||||
/obj/guardian_bomb/proc/disable()
|
||||
stored_obj.forceMove(get_turf(src))
|
||||
to_chat(spawner, "<span class='danger'><B>Failure! Your trap didn't catch anyone this time.</span></B>")
|
||||
qdel(src)
|
||||
|
||||
/obj/guardian_bomb/proc/detonate(mob/living/user)
|
||||
if(isliving(user))
|
||||
if(user != spawner && user != spawner.summoner && !spawner.hasmatchingsummoner(user))
|
||||
to_chat(user, "<span class='danger'><B>[src] was boobytrapped!</span></B>")
|
||||
to_chat(spawner, "<span class='danger'><B>Success! Your trap caught [user]</span></B>")
|
||||
var/turf/T = get_turf(src)
|
||||
stored_obj.forceMove(T)
|
||||
playsound(T,'sound/effects/explosion2.ogg', 200, 1)
|
||||
new /obj/effect/temp_visual/explosion(T)
|
||||
user.ex_act(EXPLODE_HEAVY)
|
||||
qdel(src)
|
||||
else
|
||||
to_chat(user, "<span class='holoparasite'>[src] glows with a strange <font color=\"[spawner.guardiancolor]\">light</font>, and you don't touch it.</span>")
|
||||
|
||||
/obj/guardian_bomb/Bump(atom/A)
|
||||
detonate(A)
|
||||
..()
|
||||
|
||||
/obj/guardian_bomb/attackby(mob/living/user)
|
||||
detonate(user)
|
||||
|
||||
/obj/guardian_bomb/on_attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags)
|
||||
detonate(user)
|
||||
|
||||
/obj/guardian_bomb/examine(mob/user)
|
||||
. = stored_obj.examine(user)
|
||||
if(get_dist(user,src)<=2)
|
||||
. += "<span class='holoparasite'>It glows with a strange <font color=\"[spawner.guardiancolor]\">light</font>!</span>"
|
||||
/mob/living/simple_animal/hostile/guardian/bomb/proc/on_failure(atom/bomb)
|
||||
to_chat(src, "<span class='danger'><b>Failure! Your trap didn't catch anyone this time.</span></B>")
|
||||
|
||||
@@ -500,6 +500,15 @@
|
||||
S = apply_status_effect(STATUS_EFFECT_SLEEPING, amount, updating)
|
||||
return S
|
||||
|
||||
///////////////////////////////// OFF BALANCE/SHOVIES ////////////////////////
|
||||
/mob/living/proc/ShoveOffBalance(amount)
|
||||
var/datum/status_effect/off_balance/B = has_status_effect(STATUS_EFFECT_OFF_BALANCE)
|
||||
if(B)
|
||||
B.duration = max(world.time + amount, B.duration)
|
||||
else if(amount > 0)
|
||||
B = apply_status_effect(STATUS_EFFECT_OFF_BALANCE, amount)
|
||||
return B
|
||||
|
||||
///////////////////////////////// FROZEN /////////////////////////////////////
|
||||
|
||||
/mob/living/proc/IsFrozen()
|
||||
|
||||
@@ -78,9 +78,6 @@
|
||||
blacklisted_movetypes = FLOATING
|
||||
variable = TRUE
|
||||
|
||||
/datum/movespeed_modifier/shove
|
||||
multiplicative_slowdown = SHOVE_SLOWDOWN_STRENGTH
|
||||
|
||||
/datum/movespeed_modifier/human_carry
|
||||
variable = TRUE
|
||||
|
||||
|
||||
@@ -375,7 +375,6 @@
|
||||
log_combat(user, target, "shoved", "into [src] (disposal bin)")
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/machinery/disposal/bin/flush()
|
||||
..()
|
||||
full_pressure = FALSE
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
author: "silicons"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "shoves have been buffed to apply a status effect rather than a 0.85 movespeed modifier, meaning repeatedly shoving someone now renews the debuff"
|
||||
- balance: "shoves now stagger for 3.5 seconds."
|
||||
@@ -0,0 +1,5 @@
|
||||
author: "silicons"
|
||||
delete-after: True
|
||||
changes:
|
||||
- balance: "explosive stand bombs can now be examined from any distance"
|
||||
- code_imp: "explosive stand bombs are now a component."
|
||||
@@ -0,0 +1,4 @@
|
||||
author: "dapnee"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "active turfs on box and xenohive, maintenance bar APC not being stringed correctly, turned a monitor to face a direction that makes sense, changed tag of camera in gravgen being misnamed"
|
||||
@@ -433,6 +433,7 @@
|
||||
#include "code\datums\components\igniter.dm"
|
||||
#include "code\datums\components\infective.dm"
|
||||
#include "code\datums\components\jousting.dm"
|
||||
#include "code\datums\components\killerqueen.dm"
|
||||
#include "code\datums\components\knockback.dm"
|
||||
#include "code\datums\components\knockoff.dm"
|
||||
#include "code\datums\components\lifesteal.dm"
|
||||
|
||||
Reference in New Issue
Block a user