diff --git a/_maps/RandomRuins/SpaceRuins/skelter.dmm b/_maps/RandomRuins/SpaceRuins/skelter.dmm
index 8dd0b3b5e1..694d093eeb 100644
--- a/_maps/RandomRuins/SpaceRuins/skelter.dmm
+++ b/_maps/RandomRuins/SpaceRuins/skelter.dmm
@@ -875,7 +875,8 @@
/area/service/cafeteria)
"cj" = (
/obj/effect/decal/cleanable/blood/old,
-/obj/item/clothing/suit/space/syndicate/orange,
+/obj/item/clothing/suit/space/syndicate/green/dark,
+/obj/item/clothing/head/helmet/space/syndicate/green/dark,
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/skelter/sec)
"ck" = (
@@ -1366,6 +1367,9 @@
dir = 1;
icon_state = "trimline_fill"
},
+/mob/living/simple_animal/hostile/syndicate/melee/sword/space{
+ name = "Impostrous Commando"
+ },
/turf/open/floor/plasteel,
/area/ruin/space/has_grav/skelter/nav)
"ds" = (
@@ -1895,6 +1899,7 @@
/obj/structure/cable/yellow{
icon_state = "1-2"
},
+/obj/item/clothing/head/helmet/space/syndicate/blue,
/turf/open/floor/plating,
/area/ruin/space/has_grav/skelter/engine/powerstorage)
"eC" = (
@@ -2483,6 +2488,7 @@
/obj/structure/cable/yellow{
icon_state = "1-2"
},
+/obj/item/clothing/head/helmet/space/syndicate,
/turf/open/floor/plating,
/area/ruin/space/has_grav/skelter/engine/powerstorage)
"fR" = (
@@ -2581,6 +2587,7 @@
/obj/item/clothing/suit/space/syndicate/orange{
desc = "Wait, don't these normally come with a helmet?"
},
+/obj/item/clothing/head/helmet/space/syndicate/orange,
/turf/open/floor/plating,
/area/ruin/space/has_grav/skelter/forehall)
"gg" = (
@@ -2726,6 +2733,7 @@
dir = 1;
pixel_y = -24
},
+/obj/item/clothing/head/helmet/space/syndicate/green,
/turf/open/floor/carpet,
/area/ruin/space/has_grav/skelter/admin)
"gx" = (
@@ -2823,6 +2831,10 @@
/area/ruin/space/has_grav/skelter/engine/lower)
"gH" = (
/obj/structure/rack,
+/obj/item/dnainjector/tonguespike{
+ desc = "It's a little suspicious.";
+ name = "suspicious serum"
+ },
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/skelter/sec)
"gI" = (
@@ -2907,18 +2919,18 @@
/turf/open/floor/mineral/titanium/white,
/area/ruin/space/has_grav/skelter/shields)
"gT" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8;
- icon_state = "scrub_map_on-2"
- },
/obj/structure/cable/yellow{
icon_state = "0-8"
},
/obj/machinery/power/apc{
+ cell_type = null;
dir = 1;
name = "Shield Room APC";
pixel_y = 23
},
+/obj/machinery/atmospherics/components/unary/vent_scrubber{
+ dir = 8
+ },
/turf/open/floor/mineral/titanium/white,
/area/ruin/space/has_grav/skelter/shields)
"gU" = (
@@ -3136,7 +3148,9 @@
/obj/structure/cable/yellow{
icon_state = "1-8"
},
-/turf/open/floor/mineral/titanium/white,
+/turf/open/floor/plating/airless{
+ icon_state = "platingdmg1"
+ },
/area/ruin/space/has_grav/skelter/shields)
"hp" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -3325,7 +3339,9 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 4
},
-/turf/open/floor/mineral/titanium/white,
+/turf/open/floor/plating/airless{
+ icon_state = "platingdmg2"
+ },
/area/ruin/space/has_grav/skelter/shields)
"hO" = (
/obj/machinery/shieldgen,
@@ -3523,18 +3539,20 @@
/turf/open/floor/circuit,
/area/ruin/space/has_grav/skelter/shields)
"il" = (
-/turf/open/floor/mineral/titanium/white,
+/obj/structure/lattice,
+/turf/open/space/basic,
/area/ruin/space/has_grav/skelter/shields)
"im" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/obj/machinery/light,
/obj/machinery/firealarm{
dir = 4;
pixel_x = 24
},
-/turf/open/floor/mineral/titanium/white,
+/obj/machinery/atmospherics/components/unary/vent_pump{
+ dir = 1
+ },
+/turf/open/floor/plating/airless{
+ icon_state = "platingdmg3"
+ },
/area/ruin/space/has_grav/skelter/shields)
"in" = (
/turf/open/floor/plasteel{
@@ -3722,10 +3740,6 @@
/obj/effect/turf_decal/tile/blue{
dir = 1
},
-/obj/item/uplink/old{
- pixel_x = -4;
- pixel_y = 8
- },
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4;
icon_state = "scrub_map_on-2"
@@ -3839,7 +3853,10 @@
/area/ruin/space/has_grav/skelter/comms)
"iP" = (
/obj/structure/rack,
-/obj/item/gun/ballistic/automatic/pistol,
+/obj/item/book/granter/martial/cqc{
+ name = "dusty manual";
+ used = 1
+ },
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/skelter/sec)
"iQ" = (
@@ -3874,20 +3891,6 @@
},
/turf/open/floor/plasteel/dark,
/area/ruin/space/has_grav/skelter/storage)
-"iU" = (
-/obj/effect/turf_decal/tile/blue,
-/obj/effect/turf_decal/tile/blue{
- dir = 4
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 8
- },
-/obj/effect/turf_decal/tile/blue{
- dir = 1
- },
-/obj/machinery/telecomms/relay/preset/auto,
-/turf/open/floor/plasteel/showroomfloor,
-/area/ruin/space/has_grav/skelter/comms)
"iV" = (
/obj/structure/chair/comfy/teal,
/obj/effect/turf_decal/tile/blue,
@@ -3917,6 +3920,7 @@
/obj/item/clothing/suit/space/syndicate/black{
desc = "Wait, don't these normally come with a helmet?"
},
+/obj/item/clothing/head/helmet/space/syndicate/black,
/turf/open/floor/plasteel/showroomfloor,
/area/ruin/space/has_grav/skelter/comms)
"iX" = (
@@ -4078,7 +4082,9 @@
/obj/effect/turf_decal/tile/blue{
dir = 1
},
-/obj/machinery/telecomms/allinone,
+/mob/living/simple_animal/hostile/syndicate/melee/space{
+ name = "Impostrous Commando"
+ },
/turf/open/floor/plasteel/showroomfloor,
/area/ruin/space/has_grav/skelter/comms)
"jo" = (
@@ -4146,12 +4152,6 @@
/obj/item/gun/ballistic/automatic/pistol/no_mag,
/turf/open/floor/plasteel/showroomfloor,
/area/ruin/space/has_grav/skelter/comms)
-"jw" = (
-/turf/open/space/basic,
-/area/space/nearstation)
-"jx" = (
-/turf/open/space/basic,
-/area/template_noop)
"jy" = (
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/tile/blue{
@@ -4166,6 +4166,66 @@
/obj/item/ammo_casing/c10mm,
/turf/open/floor/plasteel/showroomfloor,
/area/ruin/space/has_grav/skelter/comms)
+"sg" = (
+/obj/effect/turf_decal/weather,
+/turf/open/floor/plating/airless,
+/area/ruin/space/has_grav/skelter/shields)
+"vv" = (
+/mob/living/simple_animal/hostile/syndicate/melee/space{
+ name = "Impostrous Commando"
+ },
+/turf/open/floor/plasteel/showroomfloor,
+/area/ruin/space/has_grav/skelter/engine/powerstorage)
+"vz" = (
+/obj/structure/fluff/broken_flooring{
+ icon_state = "singular"
+ },
+/turf/open/floor/plating/airless{
+ icon_state = "platingdmg3"
+ },
+/area/ruin/space/has_grav/skelter/shields)
+"AJ" = (
+/turf/open/floor/plating/asteroid/airless,
+/area/ruin/space/has_grav/skelter/shields)
+"AR" = (
+/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space{
+ name = "Impostrous Commando"
+ },
+/turf/open/floor/plasteel/dark,
+/area/ruin/space/has_grav/skelter/sec)
+"JR" = (
+/obj/effect/turf_decal/weather,
+/turf/open/floor/plating/airless{
+ icon_state = "platingdmg2"
+ },
+/area/ruin/space/has_grav/skelter/shields)
+"Li" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/ruin/space/has_grav/skelter/shields)
+"OA" = (
+/obj/structure/fluff/broken_flooring{
+ icon_state = "singular"
+ },
+/turf/template_noop,
+/area/template_noop)
+"WM" = (
+/obj/effect/turf_decal/weather,
+/turf/open/floor/plating/airless,
+/area/ruin/unpowered/no_grav)
+"Zs" = (
+/obj/item/shard{
+ icon_state = "medium"
+ },
+/obj/structure/fluff/broken_flooring{
+ dir = 8;
+ icon_state = "pile"
+ },
+/turf/template_noop,
+/area/template_noop)
(1,1,1) = {"
ah
@@ -4483,7 +4543,7 @@ cF
cF
ex
eW
-cF
+AR
fN
gj
hJ
@@ -4525,7 +4585,7 @@ iI
iQ
iY
ji
-jx
+ah
"}
(13,1,1) = {"
ah
@@ -4549,7 +4609,7 @@ gj
iP
gl
hx
-hx
+vv
is
hx
eA
@@ -4705,7 +4765,7 @@ fV
hX
jb
jj
-jw
+ah
"}
(19,1,1) = {"
ah
@@ -4885,7 +4945,7 @@ gO
iT
jf
jk
-jw
+ah
"}
(25,1,1) = {"
ay
@@ -4942,7 +5002,7 @@ hH
ih
iG
iN
-iU
+iO
ii
jl
ah
@@ -5091,10 +5151,10 @@ hn
hM
ik
iH
-gA
-bx
-ae
-ah
+gz
+bL
+bL
+ak
ah
"}
(32,1,1) = {"
@@ -5118,13 +5178,13 @@ ga
gx
gR
ho
-hM
+Li
+vz
il
-il
-gA
-ae
-ah
-ah
+sg
+bL
+ak
+ak
ah
"}
(33,1,1) = {"
@@ -5150,12 +5210,12 @@ gS
hp
hN
im
-gA
-gU
-ah
-ah
-ah
-ah
+sg
+JR
+ac
+ak
+ak
+bq
"}
(34,1,1) = {"
ah
@@ -5179,13 +5239,13 @@ gz
gT
hq
hO
-gA
-gU
-ah
-ah
-ah
-ah
-ah
+gz
+sg
+WM
+ac
+ak
+ak
+cl
"}
(35,1,1) = {"
aS
@@ -5207,15 +5267,15 @@ dV
gd
gA
gU
-gU
-gU
-gU
-ah
-ah
-ah
-ah
-ah
-ah
+gz
+AJ
+gz
+ac
+ac
+ac
+ac
+ak
+aZ
"}
(36,1,1) = {"
ah
@@ -5237,15 +5297,15 @@ fI
ge
gB
gV
-jw
-ah
-ah
-ah
-ah
-ah
-ah
-ah
-ah
+aZ
+ac
+ak
+ak
+ac
+ac
+ac
+ac
+aZ
"}
(37,1,1) = {"
ah
@@ -5267,15 +5327,15 @@ cR
gf
ct
cR
-ah
-ah
-ah
-ah
-ah
-ah
-ah
-ah
-ah
+aZ
+ak
+ak
+ak
+ak
+ac
+ac
+ac
+Zs
"}
(38,1,1) = {"
ah
@@ -5296,16 +5356,16 @@ bx
dV
ct
ct
-ah
-ah
-ah
-ah
-ah
-ah
-ah
-ah
-ah
-ah
+aZ
+aZ
+ac
+ak
+ak
+ak
+ak
+ak
+ac
+aZ
"}
(39,1,1) = {"
ah
@@ -5326,16 +5386,16 @@ cu
cb
ae
ah
-ah
-ah
-ah
-ah
-ah
-ah
-ah
-ah
-ah
-ah
+OA
+cl
+do
+ac
+ak
+ak
+ak
+ac
+aZ
+aS
"}
(40,1,1) = {"
ah
@@ -5356,15 +5416,15 @@ fr
cc
ah
ah
+do
+aS
+bq
ah
+aZ
+aZ
ah
-ah
-ah
-ah
-ah
-ah
-ah
-ah
+aZ
+aS
ah
"}
(41,1,1) = {"
@@ -5387,13 +5447,13 @@ cc
ah
ah
ah
+aZ
+do
ah
ah
-ah
-ah
-ah
-ah
-ah
+do
+aZ
+ba
ah
ah
"}
@@ -5419,12 +5479,12 @@ ah
ah
ah
ah
+bF
ah
ah
ah
ah
-ah
-ah
+aZ
ah
"}
(43,1,1) = {"
@@ -5445,15 +5505,15 @@ ce
ce
ce
ah
+aZ
+cl
ah
ah
ah
+aZ
+aS
ah
-ah
-ah
-ah
-ah
-ah
+cl
ah
ah
"}
@@ -5476,7 +5536,7 @@ ah
ah
ah
ah
-ah
+bq
ah
ah
ah
diff --git a/code/__DEFINES/configuration.dm b/code/__DEFINES/configuration.dm
index 9915563cab..8c9b270f43 100644
--- a/code/__DEFINES/configuration.dm
+++ b/code/__DEFINES/configuration.dm
@@ -24,3 +24,11 @@
#define POLICYCONFIG_ON_PYROCLASTIC_SENTIENT "PYROCLASTIC_SLIME"
/// Displayed to pAIs on spawn
#define POLICYCONFIG_PAI "PAI_SPAWN"
+/// displayed to lavaland elites on spawn, overriding the default if set
+#define POLICYCONFIG_ELITE_SPAWN "ELITE_FAUNA_SPAWN"
+/// displayed to lavaland elites on sentience potion, overriding the default if set
+#define POLICYCONFIG_ELITE_SENTIENCE "ELITE_FAUNA_SENTIENCE"
+/// displayed to lavaland elites on winning the fight, overriding the default if set
+#define POLICYCONFIG_ELITE_WIN "ELITE_FAUNA_WIN"
+/// displayed to prisoners on spawn, overriding the default if set
+#define POLICYCONFIG_JOB_PRISONER "JOB_PRISONER"
diff --git a/code/_globalvars/lists/typecache.dm b/code/_globalvars/lists/typecache.dm
index 1ec3de0bc5..d380816bbf 100644
--- a/code/_globalvars/lists/typecache.dm
+++ b/code/_globalvars/lists/typecache.dm
@@ -12,3 +12,16 @@ GLOBAL_LIST_INIT(typecache_stack, typecacheof(/obj/item/stack))
GLOBAL_LIST_INIT(typecache_machine_or_structure, typecacheof(list(/obj/machinery, /obj/structure)))
GLOBAL_LIST_INIT(freezing_objects, typecacheof(list(/obj/structure/closet/crate/freezer, /obj/structure/closet/secure_closet/freezer, /obj/structure/bodycontainer, /obj/item/autosurgeon, /obj/machinery/smartfridge/organ))) //list of all cold objects, that freeze organs when inside
+
+GLOBAL_LIST_EMPTY(typecaches)
+
+/**
+ * Makes a typecache of a single typecache
+ *
+ * Obviously in BYOND we don't have the efficiency around here to have proper enforcement so
+ * If you use this you better know what you're doing. The list you get back is globally cached and if it's modified, you might break multiple things.
+ */
+/proc/single_path_typecache_immutable(path)
+ if(!GLOB.typecaches[path])
+ GLOB.typecaches[path] = typecacheof(path)
+ return GLOB.typecaches[path]
diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm
index 64b8692ccd..7a57e50364 100644
--- a/code/datums/ruins/space.dm
+++ b/code/datums/ruins/space.dm
@@ -331,6 +331,12 @@
name = "Space Diner"
description = "Come, traveler of the bluespace planes. Sit, enjoy a drink and take one of the fair maidens for a night. The exit is the way you came in, via that teleporter thingy, but do remember to stay safe."
+/datum/map_template/ruin/space/suspicious
+ id = "helterskelter"
+ suffix = "skelter.dmm"
+ name = "Helter Skelter"
+ description = "You're looking mighty suspicious. Why don't you go and take a seat over in that driver?"
+
//Space ruins for the station z
/datum/map_template/ruin/spacenearstation
prefix = "_maps/RandomRuins/SpaceRuinsStation/"
diff --git a/code/game/objects/items/dice.dm b/code/game/objects/items/dice.dm
index bbc493672f..53b0860def 100644
--- a/code/game/objects/items/dice.dm
+++ b/code/game/objects/items/dice.dm
@@ -17,6 +17,11 @@
/obj/item/dice/d100
)
+/obj/item/storage/dice/ComponentInitialize()
+ . = ..()
+ var/datum/component/storage/STR = GetComponent(/datum/component/storage)
+ STR.can_hold = single_path_typecache_immutable(/obj/item/dice)
+
/obj/item/storage/dice/PopulateContents()
new /obj/item/dice/d4(src)
new /obj/item/dice/d6(src)
diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm
index 78a5c9ece9..15fd102878 100644
--- a/code/game/objects/obj_defense.dm
+++ b/code/game/objects/obj_defense.dm
@@ -22,7 +22,7 @@
//returns the damage value of the attack after processing the obj's various armor protections
/obj/proc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir, armour_penetration = 0)
- if(damage_flag == MELEE && damage_amount < damage_deflection)
+ if(damage_flag == "melee" && damage_amount < damage_deflection) // TODO: Refactor armor datums and types entirely jfc
return 0
switch(damage_type)
if(BRUTE)
diff --git a/code/modules/events/anomaly.dm b/code/modules/events/anomaly.dm
index 438904466c..926ff87c1d 100644
--- a/code/modules/events/anomaly.dm
+++ b/code/modules/events/anomaly.dm
@@ -24,7 +24,8 @@
/area/holodeck,
/area/shuttle,
/area/maintenance,
- /area/science/test_area)
+ /area/science/test_area,
+ /area/commons/cryopod)
)
//Subtypes from the above that actually should explode.
diff --git a/code/modules/instruments/instrument_data/hardcoded.dm b/code/modules/instruments/instrument_data/hardcoded.dm
index 757fea08a8..5db7e8b3bb 100644
--- a/code/modules/instruments/instrument_data/hardcoded.dm
+++ b/code/modules/instruments/instrument_data/hardcoded.dm
@@ -7,11 +7,11 @@
instrument_flags = INSTRUMENT_LEGACY
volume_multiplier = 1 //not as loud as synth'd
-/datum/instrument/hardcoded/accordian
- name = "Accordian"
- id = "accordian"
+/datum/instrument/hardcoded/accordion
+ name = "Accordion"
+ id = "accordion"
legacy_instrument_ext = "mid"
- legacy_instrument_path = "accordian"
+ legacy_instrument_path = "accordion"
/datum/instrument/hardcoded/bikehorn
name = "Bike Horn"
diff --git a/code/modules/instruments/instrument_data/organ.dm b/code/modules/instruments/instrument_data/organ.dm
index 25da740998..edf9de9485 100644
--- a/code/modules/instruments/instrument_data/organ.dm
+++ b/code/modules/instruments/instrument_data/organ.dm
@@ -19,8 +19,8 @@
"60"='sound/instruments/synthesis_samples/organ/crisis_hammond/c4.ogg',
"72"='sound/instruments/synthesis_samples/organ/crisis_hammond/c5.ogg')
-/datum/instrument/organ/crisis_accordian
- name = "Crisis Accordian"
+/datum/instrument/organ/crisis_accordion
+ name = "Crisis Accordion"
id = "crack"
real_samples = list("36"='sound/instruments/synthesis_samples/organ/crisis_accordian/c2.ogg',
"48"='sound/instruments/synthesis_samples/organ/crisis_accordian/c3.ogg',
@@ -34,8 +34,8 @@
"60"='sound/instruments/synthesis_samples/organ/crisis_harmonica/c4.ogg',
"72"='sound/instruments/synthesis_samples/organ/crisis_harmonica/c5.ogg')
-/datum/instrument/organ/crisis_tango_accordian
- name = "Crisis Tango Accordian"
+/datum/instrument/organ/crisis_tango_accordion
+ name = "Crisis Tango Accordion"
id = "crtango"
real_samples = list("36"='sound/instruments/synthesis_samples/organ/crisis_tangaccordian/c2.ogg',
"48"='sound/instruments/synthesis_samples/organ/crisis_tangaccordian/c3.ogg',
diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm
index 2ad2f32537..48c7afe304 100644
--- a/code/modules/jobs/job_types/prisoner.dm
+++ b/code/modules/jobs/job_types/prisoner.dm
@@ -1,4 +1,4 @@
-datum/job/prisoner
+/datum/job/prisoner
title = "Prisoner"
flag = PRISONER
department_head = list("The Security Team")
@@ -13,6 +13,15 @@ datum/job/prisoner
display_order = JOB_DISPLAY_ORDER_PRISONER
+/datum/job/prisoner/after_spawn(mob/living/carbon/human/H, mob/M)
+ var/list/policies = CONFIG_GET(keyed_list/policy)
+ var/policy = policies[POLICYCONFIG_JOB_PRISONER]
+ if(policy)
+ var/mob/found = (M?.client && M) || (H?.client && H)
+ to_chat(found, "
!!READ THIS!!
The following is server-specific policy configuration and overrides anything said above if conflicting.")
+ to_chat(found, "
")
+ to_chat(found, "[policy]")
+
/datum/outfit/job/prisoner
name = "Prisoner"
jobtype = /datum/job/prisoner
diff --git a/code/modules/mob/living/living_blocking_parrying.dm b/code/modules/mob/living/living_blocking_parrying.dm
index 0ccc03982a..bdc44ab356 100644
--- a/code/modules/mob/living/living_blocking_parrying.dm
+++ b/code/modules/mob/living/living_blocking_parrying.dm
@@ -166,7 +166,7 @@ GLOBAL_LIST_EMPTY(block_parry_data)
/// Clickdelay duration post-parry if you fail to parry an attack
var/parry_failed_clickcd_duration = 0 SECONDS
/// Parry cooldown post-parry if failed. This is ADDED to parry_cooldown!!!
- var/parry_failed_cooldown_duration = 0 SECONDS
+ var/parry_failed_cooldown_duration = 3.5 SECONDS
// Advanced
/// Flags added to return value
diff --git a/code/modules/mob/living/simple_animal/gremlin/gremlin.dm b/code/modules/mob/living/simple_animal/gremlin/gremlin.dm
index 61436cea1c..a6312b9ddf 100644
--- a/code/modules/mob/living/simple_animal/gremlin/gremlin.dm
+++ b/code/modules/mob/living/simple_animal/gremlin/gremlin.dm
@@ -66,6 +66,7 @@ GLOBAL_LIST(bad_gremlin_items)
/mob/living/simple_animal/hostile/gremlin/Initialize()
. = ..()
AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS)
+ ADD_TRAIT(src, TRAIT_SHOCKIMMUNE, INNATE_TRAIT)
access_card = new /obj/item/card/id(src)
var/datum/job/captain/C = new /datum/job/captain
access_card.access = C.get_access()
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
index d677f59440..de6b858f79 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/elite.dm
@@ -176,6 +176,12 @@ While using this makes the system rely on OnFire, it still gives options for tim
elitemind = pick(candidates)
elitemind.playsound_local(get_turf(elitemind), 'sound/effects/magic.ogg', 40, 0)
to_chat(elitemind, "You have been chosen to play as a Lavaland Elite.\nIn a few seconds, you will be summoned on Lavaland as a monster to fight your activator, in a fight to the death.\nYour attacks can be switched using the buttons on the top left of the HUD, and used by clicking on targets or tiles similar to a gun.\nWhile the opponent might have an upper hand with powerful mining equipment and tools, you have great power normally limited by AI mobs.\nIf you want to win, you'll have to use your powers in creative ways to ensure the kill. It's suggested you try using them all as soon as possible.\nShould you win, you'll receive extra information regarding what to do after. Good luck!")
+ var/list/policies = CONFIG_GET(keyed_list/policy)
+ var/policy = policies[POLICYCONFIG_ELITE_SPAWN]
+ if(policy)
+ to_chat(elitemind, "
!!READ THIS!!
The following is server-specific policy configuration and overrides anything said above if conflicting.")
+ to_chat(elitemind, "
")
+ to_chat(elitemind, "[policy]")
addtimer(CALLBACK(src, .proc/spawn_elite, elitemind), 100)
else
visible_message("The stirring stops, and nothing emerges. Perhaps try again later.")
@@ -304,6 +310,12 @@ While using this makes the system rely on OnFire, it still gives options for tim
to_chat(mychild, "As the life in the activator's eyes fade, the forcefield around you dies out and you feel your power subside.\nDespite this inferno being your home, you feel as if you aren't welcome here anymore.\nWithout any guidance, your purpose is now for you to decide.")
to_chat(mychild, "Your max health has been halved, but can now heal by standing on your tumor. Note, it's your only way to heal.\nBear in mind, if anyone interacts with your tumor, you'll be resummoned here to carry out another fight. In such a case, you will regain your full max health.\nAlso, be weary of your fellow inhabitants, they likely won't be happy to see you!")
to_chat(mychild, "Note that you are a lavaland monster, and thus not allied to the station. You should not cooperate or act friendly with any station crew unless under extreme circumstances!")
+ var/list/policies = CONFIG_GET(keyed_list/policy)
+ var/policy = policies[POLICYCONFIG_ELITE_WIN]
+ if(policy)
+ to_chat(mychild, "
!!READ THIS!!
The following is server-specific policy configuration and overrides anything said above if conflicting.")
+ to_chat(mychild, "
")
+ to_chat(mychild, "[policy]")
/obj/item/tumor_shard
name = "tumor shard"
@@ -332,6 +344,12 @@ While using this makes the system rely on OnFire, it still gives options for tim
E.playsound_local(get_turf(E), 'sound/effects/magic.ogg', 40, 0)
to_chat(E, "You have been revived by [user]. While you can't speak to them, you owe [user] a great debt. Assist [user.p_them()] in achieving [user.p_their()] goals, regardless of risk.Note that you now share the loyalties of [user]. You are expected not to intentionally sabotage their faction unless commanded to!")
+ var/list/policies = CONFIG_GET(keyed_list/policy)
+ var/policy = policies[POLICYCONFIG_ELITE_SENTIENCE]
+ if(policy)
+ to_chat(E, "
!!READ THIS!!
The following is server-specific policy configuration and overrides anything said above if conflicting.")
+ to_chat(E, "
")
+ to_chat(E, "[policy]")
E.maxHealth = E.maxHealth * 0.5
E.health = E.maxHealth
E.desc = "[E.desc] However, this one appears appears less wild in nature, and calmer around people."
diff --git a/code/modules/mob/living/simple_animal/hostile/plaguerat.dm b/code/modules/mob/living/simple_animal/hostile/plaguerat.dm
index 2b92894317..497359829e 100644
--- a/code/modules/mob/living/simple_animal/hostile/plaguerat.dm
+++ b/code/modules/mob/living/simple_animal/hostile/plaguerat.dm
@@ -136,7 +136,7 @@ GLOBAL_LIST_EMPTY(plague_rats)
if(LAZYLEN(GLOB.plague_rats) >= cap)
visible_message("[src] gnaws into its food, [cap] rats are now on the station!")
return
- var/mob/living/newmouse = new /mob/living/simple_animal/hostile/plaguerat(loc)
+ new /mob/living/simple_animal/hostile/plaguerat(loc)
visible_message("[src] gnaws into its food, attracting another rat!")
/mob/living/simple_animal/hostile/plaguerat/proc/exit_vents()
diff --git a/code/modules/movespeed/modifiers/mobs.dm b/code/modules/movespeed/modifiers/mobs.dm
index 7e857a4e0d..153d7dd973 100644
--- a/code/modules/movespeed/modifiers/mobs.dm
+++ b/code/modules/movespeed/modifiers/mobs.dm
@@ -113,6 +113,7 @@
multiplicative_slowdown = CRAWLING_ADD_SLOWDOWN
movetypes = CRAWLING
flags = IGNORE_NOSLOW
+ priority = 20000
/datum/movespeed_modifier/mob_config_speedmod
variable = TRUE
diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm
index 3a08a764d3..e66f14da93 100644
--- a/code/modules/surgery/bodyparts/parts.dm
+++ b/code/modules/surgery/bodyparts/parts.dm
@@ -59,13 +59,13 @@
one though."
icon_state = "default_human_l_arm"
attack_verb = list("slapped", "punched")
- max_damage = 150
+ max_damage = 50
disable_threshold = 75
max_stamina_damage = 50
body_zone = BODY_ZONE_L_ARM
body_part = ARM_LEFT
aux_icons = list(BODY_ZONE_PRECISE_L_HAND = HANDS_PART_LAYER, "l_hand_behind" = BODY_BEHIND_LAYER)
- body_damage_coeff = 0.25
+ body_damage_coeff = 0.75
held_index = 1
px_x = -6
px_y = 0
@@ -121,12 +121,12 @@
among humans missing their right arm."
icon_state = "default_human_r_arm"
attack_verb = list("slapped", "punched")
- max_damage = 150
+ max_damage = 50
disable_threshold = 75
body_zone = BODY_ZONE_R_ARM
body_part = ARM_RIGHT
aux_icons = list(BODY_ZONE_PRECISE_R_HAND = HANDS_PART_LAYER, "r_hand_behind" = BODY_BEHIND_LAYER)
- body_damage_coeff = 0.25
+ body_damage_coeff = 0.75
held_index = 2
px_x = 6
px_y = 0
@@ -184,11 +184,11 @@
luck. In this instance, it probably would not have helped."
icon_state = "default_human_l_leg"
attack_verb = list("kicked", "stomped")
- max_damage = 150
+ max_damage = 50
disable_threshold = 75
body_zone = BODY_ZONE_L_LEG
body_part = LEG_LEFT
- body_damage_coeff = 0.25
+ body_damage_coeff = 0.75
px_x = -2
px_y = 12
stam_heal_tick = STAM_RECOVERY_LIMB
@@ -243,11 +243,10 @@
// alternative spellings of 'pokey' are availible
icon_state = "default_human_r_leg"
attack_verb = list("kicked", "stomped")
- max_damage = 150
- disable_threshold = 75
+ max_damage = 50
body_zone = BODY_ZONE_R_LEG
body_part = LEG_RIGHT
- body_damage_coeff = 0.25
+ body_damage_coeff = 0.75
px_x = 2
px_y = 12
max_stamina_damage = 50
diff --git a/code/modules/vending/games.dm b/code/modules/vending/games.dm
index a1d9bc1691..7664a191c8 100644
--- a/code/modules/vending/games.dm
+++ b/code/modules/vending/games.dm
@@ -10,7 +10,9 @@
/obj/item/toy/cards/deck/unum = 3,
/obj/item/cardpack/series_one = 10,
/obj/item/dyespray=3,
- /obj/item/tcgcard_binder = 5)
+ /obj/item/tcgcard_binder = 5,
+ /obj/item/canvas = 3,
+ /obj/item/toy/crayon/spraycan = 3)
contraband = list(/obj/item/dice/fudge = 9)
premium = list(/obj/item/melee/skateboard/pro = 3,
/obj/item/melee/skateboard/hoverboard = 1)
diff --git a/config/spaceRuinBlacklist.txt b/config/spaceRuinBlacklist.txt
index 969e4135f6..c62408b90c 100644
--- a/config/spaceRuinBlacklist.txt
+++ b/config/spaceRuinBlacklist.txt
@@ -53,3 +53,4 @@
#_maps/RandomRuins/SpaceRuins/spacehermit.dmm
#_maps/RandomRuins/SpaceRuins/advancedlab.dmm
#_maps/RandomRuins/SpaceRuins/spacediner.dmm
+#_maps/RandomRuins/SpaceRuins/skelter.dmm
diff --git a/html/changelog.html b/html/changelog.html
index dabd4e7704..189413b690 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -50,6 +50,107 @@
-->