diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 9e922d0d228f..a1a29d8d3cf1 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -608,6 +608,11 @@
/obj/machinery/portable_atmospherics/canister/oxygen,
/turf/open/floor/plating,
/area/centcom/syndicate_mothership/expansion_bombthreat)
+"bK" = (
+/obj/item/clothing/mask/facehugger/dead,
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/plating,
+/area/centcom/central_command_areas/admin)
"bM" = (
/turf/open/floor/glass/reinforced,
/area/centcom/central_command_areas/evacuation)
@@ -1203,10 +1208,9 @@
/turf/open/floor/mineral/plastitanium,
/area/centcom/syndicate_mothership/control)
"ds" = (
-/obj/structure/table/wood,
-/obj/item/paper_bin,
-/obj/item/pen/fourcolor,
-/turf/open/floor/stone,
+/obj/effect/decal/cleanable/garbage,
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/iron,
/area/centcom/central_command_areas/admin)
"dt" = (
/obj/structure/window/reinforced/tinted/frosted,
@@ -1623,6 +1627,16 @@
},
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/admin)
+"eB" = (
+/obj/structure/disposalpipe/loafer{
+ dir = 4
+ },
+/obj/structure/fans/tiny/invisible,
+/obj/machinery/light/very_dim/directional{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/centcom/central_command_areas/admin)
"eC" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/structure/table/reinforced,
@@ -1907,7 +1921,9 @@
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/admin_hangout)
"fC" = (
-/turf/open/floor/stone,
+/obj/effect/gibspawner/human/bodypartless,
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/iron,
/area/centcom/central_command_areas/admin)
"fD" = (
/obj/machinery/light/neon_lining{
@@ -2601,9 +2617,9 @@
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/borbop)
"hF" = (
-/obj/structure/table/wood,
-/obj/machinery/computer/records/medical/laptop,
-/turf/open/floor/stone,
+/obj/structure/falsewall/reinforced,
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/plating,
/area/centcom/central_command_areas/admin)
"hG" = (
/obj/structure/chair/sofa/bench/right{
@@ -3738,10 +3754,12 @@
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/admin_hangout)
"ll" = (
-/obj/machinery/door/airlock/wood{
- name = "Gabbie's Office"
+/obj/machinery/door/airlock/centcom{
+ dir = 4;
+ name = "Glyphee's Garbage Dump"
},
-/turf/open/floor/wood,
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/iron,
/area/centcom/central_command_areas/admin)
"lm" = (
/obj/structure/window/plasma/spawner/directional/north,
@@ -3778,6 +3796,13 @@
/obj/structure/flora/bush/flowers_yw/style_random,
/turf/open/floor/grass,
/area/centcom/central_command_areas/hall)
+"lv" = (
+/obj/effect/spawner/random/trash/garbage,
+/obj/effect/spawner/random/maintenance/two,
+/obj/machinery/recycler/deathtrap,
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/plating,
+/area/centcom/central_command_areas/admin)
"lw" = (
/obj/structure/sign/poster/contraband/lizard{
pixel_x = -32
@@ -4099,10 +4124,11 @@
/turf/open/floor/catwalk_floor/iron_smooth,
/area/centcom/syndicate_mothership/control)
"mv" = (
-/obj/machinery/door/poddoor/shutters/indestructible/preopen{
+/obj/structure/disposalpipe/trunk{
dir = 4
},
-/turf/closed/indestructible/fakeglass,
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/iron,
/area/centcom/central_command_areas/admin)
"mx" = (
/obj/machinery/power/shuttle_engine/heater{
@@ -5818,9 +5844,8 @@
/turf/open/floor/mineral/plastitanium,
/area/centcom/syndicate_mothership/expansion_chemicalwarfare)
"rD" = (
-/obj/structure/table/wood,
-/obj/machinery/light/floor/has_bulb,
-/turf/open/floor/carpet/red,
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/carpet/green,
/area/centcom/central_command_areas/admin)
"rF" = (
/obj/structure/chair/sofa/right{
@@ -5839,6 +5864,13 @@
},
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/evacuation/ship)
+"rI" = (
+/obj/effect/spawner/random/trash/garbage,
+/obj/effect/spawner/random/structure/closet_maintenance,
+/obj/structure/fans/tiny/invisible,
+/obj/machinery/light/very_dim/directional,
+/turf/open/floor/iron,
+/area/centcom/central_command_areas/admin)
"rJ" = (
/obj/structure/lattice/catwalk,
/obj/machinery/atmospherics/components/tank/nitrogen,
@@ -6048,6 +6080,13 @@
/obj/machinery/light/directional/south,
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/evacuation/ship)
+"sn" = (
+/obj/machinery/computer/camera_advanced{
+ dir = 4
+ },
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/carpet/green,
+/area/centcom/central_command_areas/admin)
"so" = (
/obj/effect/turf_decal/siding/green{
dir = 9
@@ -7750,10 +7789,12 @@
/turf/open/misc/asteroid/snow/airless,
/area/centcom/syndicate_mothership)
"xF" = (
-/obj/structure/chair/office{
- dir = 8
+/obj/structure/sign/painting/library{
+ pixel_x = 32
},
-/turf/open/floor/stone,
+/obj/structure/fans/tiny/invisible,
+/obj/machinery/light/floor/has_bulb,
+/turf/open/floor/carpet/green,
/area/centcom/central_command_areas/admin)
"xG" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
@@ -9885,8 +9926,11 @@
/area/centcom/wizard_station)
"Ef" = (
/obj/structure/table/wood,
-/obj/machinery/computer/security/wooden_tv,
-/turf/open/floor/carpet/red,
+/obj/item/mod/control/pre_equipped/chrono{
+ desc = "It smells freshly laundered."
+ },
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/carpet/green,
/area/centcom/central_command_areas/admin)
"Eg" = (
/obj/machinery/door/airlock{
@@ -10284,6 +10328,10 @@
},
/turf/open/floor/carpet/royalblue,
/area/centcom/central_command_areas/admin)
+"Fn" = (
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/iron,
+/area/centcom/central_command_areas/admin)
"Fo" = (
/obj/effect/turf_decal/tile/dark/opposingcorners,
/obj/machinery/vending/wardrobe/law_wardrobe,
@@ -10337,7 +10385,9 @@
},
/area/centcom/syndicate_mothership/expansion_fridgerummage)
"Fy" = (
-/turf/open/chasm,
+/obj/effect/gibspawner/human/bodypartless,
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/plating,
/area/centcom/central_command_areas/admin)
"Fz" = (
/turf/open/floor/mineral/plastitanium/red,
@@ -10470,12 +10520,8 @@
/turf/open/floor/wood/large,
/area/centcom/central_command_areas/borbop)
"FQ" = (
-/obj/structure/table/wood,
-/obj/machinery/fax{
- fax_name = "Gabbie's Fax";
- name = "Gabbie's Fax Machine"
- },
-/turf/open/floor/stone,
+/obj/structure/fans/tiny/invisible,
+/turf/open/chasm,
/area/centcom/central_command_areas/admin)
"FS" = (
/obj/machinery/computer/records/medical/laptop{
@@ -10556,6 +10602,11 @@
/obj/item/stack/medical/ointment,
/turf/open/floor/engine/cult,
/area/centcom/wizard_station)
+"Gg" = (
+/obj/effect/spawner/random/trash/garbage,
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/plating,
+/area/centcom/central_command_areas/admin)
"Gh" = (
/obj/effect/turf_decal/siding/wood{
dir = 4
@@ -10931,6 +10982,14 @@
/obj/machinery/light/directional/east,
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/hall)
+"Hj" = (
+/obj/structure/disposalpipe/trunk{
+ dir = 8
+ },
+/obj/machinery/disposal/delivery_chute,
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/plating,
+/area/centcom/central_command_areas/admin)
"Hk" = (
/obj/effect/turf_decal/loading_area{
dir = 4
@@ -13451,11 +13510,11 @@
/turf/open/misc/asteroid/snow/icemoon,
/area/centcom/syndicate_mothership/control)
"Ou" = (
-/obj/structure/table/wood,
-/obj/machinery/modular_computer/console/preset/id/centcom{
+/obj/structure/chair/comfy/lime{
dir = 8
},
-/turf/open/floor/carpet/red,
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/carpet/green,
/area/centcom/central_command_areas/admin)
"Ov" = (
/obj/structure/chair/wood/wings,
@@ -13692,6 +13751,12 @@
/obj/structure/flora/bush/flowers_pp/style_random,
/turf/open/floor/grass,
/area/centcom/central_command_areas/hall)
+"Pf" = (
+/obj/effect/turf_decal/siding/dark/end{
+ dir = 1
+ },
+/turf/closed/indestructible/riveted,
+/area/centcom/central_command_areas/admin)
"Pg" = (
/obj/structure/fake_stairs/wood/directional/north,
/turf/open/indestructible/hotelwood,
@@ -14083,6 +14148,30 @@
/obj/item/storage/toolbox/mechanical,
/turf/open/floor/iron/smooth_large,
/area/centcom/central_command_areas/evacuation/ship)
+"Qu" = (
+/obj/structure/table/reinforced/titaniumglass,
+/obj/machinery/door/window/left/directional/west{
+ name = "Secret Stuff";
+ req_access = list("robotics");
+ dir = 4
+ },
+/obj/item/reagent_containers/pill/adminordrazine{
+ list_reagents = list(/datum/reagent/medicine/adminordrazine = 99999);
+ name = "sv_cheats 1";
+ desc = "god";
+ color = "#fcba03"
+ },
+/obj/structure/fans/tiny/invisible,
+/obj/item/tank/internals/oxygen/yellow{
+ pixel_x = -7;
+ pixel_y = 7
+ },
+/obj/item/tank/internals/oxygen/yellow{
+ pixel_y = -7;
+ pixel_x = 7
+ },
+/turf/open/floor/carpet/green,
+/area/centcom/central_command_areas/admin)
"Qv" = (
/obj/machinery/light/floor/has_bulb,
/obj/effect/turf_decal/siding/wood{
@@ -14742,6 +14831,34 @@
/obj/structure/fake_stairs/wood/directional/south,
/turf/open/floor/iron/dark,
/area/centcom/tdome/observation)
+"Su" = (
+/obj/structure/table/reinforced/titaniumglass,
+/obj/structure/window/reinforced/survival_pod/spawner/directional{
+ dir = 1
+ },
+/obj/machinery/door/window/left/directional/west{
+ name = "Secret Stuff";
+ req_access = list("robotics");
+ dir = 4
+ },
+/obj/item/melee/powerfist{
+ name = "Iron";
+ desc = "You load sixteen tons...";
+ force = 1000;
+ pixel_y = 4;
+ color = "#fcba03"
+ },
+/obj/structure/fans/tiny/invisible,
+/obj/machinery/light/floor/has_bulb,
+/obj/item/melee/powerfist{
+ name = "Steel";
+ desc = "Another day older and deeper in debt...";
+ force = 1000;
+ pixel_y = -4;
+ color = "#fcba03"
+ },
+/turf/open/floor/carpet/green,
+/area/centcom/central_command_areas/admin)
"Sv" = (
/obj/effect/turf_decal/trimline/blue,
/turf/open/floor/iron/dark,
@@ -15513,6 +15630,13 @@
},
/turf/open/floor/mineral/titanium,
/area/centcom/syndicate_mothership/control)
+"UR" = (
+/obj/structure/sign/painting/library{
+ pixel_x = 32
+ },
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/carpet/green,
+/area/centcom/central_command_areas/admin)
"US" = (
/obj/structure/window/plasma/spawner/directional/north,
/turf/open/indestructible/hotelwood,
@@ -15658,7 +15782,10 @@
/turf/open/floor/iron,
/area/centcom/central_command_areas/supplypod/loading/three)
"Vo" = (
-/turf/open/floor/carpet/red,
+/obj/effect/spawner/random/trash/garbage,
+/obj/effect/spawner/random/structure/closet_maintenance,
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/iron,
/area/centcom/central_command_areas/admin)
"Vp" = (
/obj/effect/turf_decal/tile/dark/diagonal_edge,
@@ -15779,7 +15906,9 @@
},
/area/centcom/syndicate_mothership/control)
"VD" = (
-/turf/closed/wall/mineral/iron,
+/obj/item/fish/chasm_crab,
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/iron,
/area/centcom/central_command_areas/admin)
"VE" = (
/obj/structure/table/reinforced,
@@ -16309,9 +16438,13 @@
/turf/open/floor/iron,
/area/centcom/central_command_areas/supplypod/loading/four)
"Xi" = (
-/obj/structure/table/wood,
-/obj/machinery/computer/records/security/laptop,
-/turf/open/floor/stone,
+/obj/machinery/door/airlock/centcom{
+ dir = 4;
+ name = "Glyphee's Secret Office"
+ },
+/obj/effect/mapping_helpers/airlock/access/any/admin/captain,
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/carpet/green,
/area/centcom/central_command_areas/admin)
"Xj" = (
/obj/effect/turf_decal/tile/neutral/fourcorners,
@@ -16369,7 +16502,8 @@
/turf/open/floor/iron/dark,
/area/centcom/central_command_areas/evacuation/ship)
"Xq" = (
-/turf/open/floor/wood,
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/plating,
/area/centcom/central_command_areas/admin)
"Xr" = (
/obj/machinery/keycard_auth/directional/south,
@@ -16474,10 +16608,13 @@
/turf/open/floor/iron/dark/herringbone,
/area/centcom/central_command_areas/supply)
"XG" = (
-/obj/structure/chair/comfy/black{
- dir = 4
+/obj/machinery/modular_computer/console/preset/id/centcom{
+ dir = 4;
+ desc = "A specialized console to connect to gaming computers to be able to broadcast live. Seriously, where does Ook find this stuff?"
},
-/turf/open/floor/carpet/red,
+/obj/structure/fans/tiny/invisible,
+/obj/machinery/light/floor/has_bulb,
+/turf/open/floor/carpet/green,
/area/centcom/central_command_areas/admin)
"XH" = (
/obj/effect/turf_decal/stripes/end{
@@ -16678,11 +16815,13 @@
/turf/open/floor/iron,
/area/centcom/central_command_areas/supply)
"Yl" = (
-/obj/machinery/door/airlock/wood{
- name = "Gabbie's Office"
+/obj/structure/table/wood,
+/obj/machinery/fax{
+ name = "Glyphee's Fax Machine";
+ fax_name = "Glyphee's Spam Mail"
},
-/obj/effect/mapping_helpers/airlock/access/any/admin/captain,
-/turf/open/floor/wood,
+/obj/structure/fans/tiny/invisible,
+/turf/open/floor/carpet/green,
/area/centcom/central_command_areas/admin)
"Yn" = (
/turf/closed/indestructible/riveted,
@@ -45928,10 +46067,10 @@ aa
aa
aa
On
-Zf
-Zf
-Zf
-Zf
+On
+On
+On
+On
On
On
On
@@ -46185,11 +46324,11 @@ aa
aa
aa
On
-Vo
+Yl
XG
-Vo
-Vo
-fC
+sn
+Su
+Qu
On
bF
KB
@@ -46445,8 +46584,8 @@ On
Ef
rD
Ou
-Vo
-fC
+rD
+rD
On
lm
Zn
@@ -46699,11 +46838,11 @@ nO
uk
hp
On
-fC
+rD
xF
-Vo
-Vo
-fC
+UR
+xF
+rD
On
TQ
AS
@@ -46957,10 +47096,10 @@ uk
RK
On
Xi
-fC
-Vo
-fC
-ds
+On
+On
+On
+On
On
TQ
FI
@@ -47214,7 +47353,7 @@ RZ
yw
On
hF
-fC
+On
Vo
fC
FQ
@@ -47470,11 +47609,11 @@ Ji
uk
xP
On
+mv
+bK
+Fy
VD
-VD
-Yl
-VD
-VD
+rI
On
TQ
FI
@@ -47727,11 +47866,11 @@ Ji
uk
uk
On
-Fy
-Fy
+eB
+Fn
Xq
-Fy
-Fy
+Xq
+ds
On
TQ
AS
@@ -47984,11 +48123,11 @@ Ji
uk
dU
On
-Fy
-Fy
+Hj
+Gg
Xq
Fy
-Fy
+lv
On
aO
qx
@@ -48241,12 +48380,12 @@ bO
IS
On
On
-mv
-mv
+On
+On
ll
-mv
-mv
-bF
+On
+On
+Pf
qZ
qZ
qZ
diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm
index 54a10b81e224..e9f0bd8d40db 100644
--- a/code/modules/events/_event.dm
+++ b/code/modules/events/_event.dm
@@ -333,7 +333,7 @@ Runs the event
return
message_admins("[key_name_admin(usr)] force scheduled event [src.name].")
log_admin_private("[key_name(usr)] force scheduled event [src.name].")
- SSgamemode.forced_next_events[src.track] += src
+ SSgamemode.forced_next_events[src.track] = src
//monkestation addition ends - STORYTELLERS
diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm
index 0a5c28c9a3ee..c8f19237ae26 100644
--- a/code/modules/hydroponics/grown/berries.dm
+++ b/code/modules/hydroponics/grown/berries.dm
@@ -187,3 +187,33 @@
juice_results = list(/datum/reagent/consumable/toechtauese_juice = 0)
tastes = list("fiery itchy pain" = 1)
distill_reagent = /datum/reagent/toxin/itching_powder
+
+/obj/item/seeds/lanternfruit
+ name = "pack of lanternfruit seeds"
+ desc = "These seeds grow into lanternfruit pods."
+ icon_state = "seed-lanternfruit"
+ species = "lanternfruit"
+ plantname = "Lanternfruit Pod"
+ product = /obj/item/food/grown/lanternfruit
+ lifespan = 50
+ endurance = 30
+ maturation = 25
+ production = 25
+ growthstages = 3
+ growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
+ icon_grow = "lanternfruit-grow"
+ icon_dead = "lanternfruit-dead"
+ icon_harvest = "lanternfruit-harvest"
+ genes = list(/datum/plant_gene/trait/glow/yellow)
+ mutatelist = null
+ reagents_add = list(/datum/reagent/sulfur = 0.07, /datum/reagent/consumable/sugar = 0.07, /datum/reagent/consumable/liquidelectricity = 0.07)
+ graft_gene = /datum/plant_gene/trait/glow/yellow
+
+/obj/item/food/grown/lanternfruit
+ seed = /obj/item/seeds/lanternfruit
+ name = "lanternfruits"
+ desc = "A sofly glowing fruit with a handle-shaped stem, an Ethereal favorite!"
+ icon_state = "lanternfruit"
+ foodtypes = FRUIT
+ tastes = list("tv static" = 1, "sour pear" = 1, "grapefruit" = 1)
+ distill_reagent = /datum/reagent/consumable/ethanol/fruit_wine
diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm
index c2b7e27c2487..e12f690813bd 100644
--- a/code/modules/mob/living/emote.dm
+++ b/code/modules/mob/living/emote.dm
@@ -224,6 +224,16 @@
message = "jumps!"
hands_use_check = TRUE
+/datum/emote/living/jump/run_emote(mob/living/user, params, type_override, intentional)
+ . = ..()
+ if(!.)
+ return FALSE
+ animate(user, pixel_y = user.pixel_y + 4, time = 0.1 SECONDS)
+ animate(pixel_y = user.pixel_y - 4, time = 0.1 SECONDS)
+
+/datum/emote/living/jump/get_sound(mob/living/user)
+ return 'sound/weapons/thudswoosh.ogg'
+
/datum/emote/living/kiss
key = "kiss"
key_third_person = "kisses"
@@ -347,6 +357,18 @@
key_third_person = "shiver"
message = "shivers."
+#define SHIVER_LOOP_DURATION (1 SECONDS)
+/datum/emote/living/shiver/run_emote(mob/living/user, params, type_override, intentional)
+ . = ..()
+ if(!.)
+ return FALSE
+ animate(user, pixel_x = user.pixel_x + 1, time = 0.1 SECONDS)
+ for(var/i in 1 to SHIVER_LOOP_DURATION / (0.2 SECONDS)) //desired total duration divided by the iteration duration to give the necessary iteration count
+ animate(pixel_x = user.pixel_x - 1, time = 0.1 SECONDS)
+ animate(pixel_x = user.pixel_x + 1, time = 0.1 SECONDS)
+ animate(pixel_x = user.pixel_x - 1, time = 0.1 SECONDS)
+#undef SHIVER_LOOP_DURATION
+
/datum/emote/living/sigh
key = "sigh"
key_third_person = "sighs"
@@ -437,6 +459,16 @@
key_third_person = "sways"
message = "sways around dizzily."
+/datum/emote/living/sway/run_emote(mob/living/user, params, type_override, intentional)
+ . = ..()
+ if(!.)
+ return FALSE
+ animate(user, pixel_x = user.pixel_x + 2, time = 0.5 SECONDS)
+ for(var/i in 1 to 2)
+ animate(pixel_x = user.pixel_x - 4, time = 1.0 SECONDS)
+ animate(pixel_x = user.pixel_x + 4, time = 1.0 SECONDS)
+ animate(pixel_x = user.pixel_x - 2, time = 0.5 SECONDS)
+
/datum/emote/living/tilt
key = "tilt"
key_third_person = "tilts"
@@ -447,15 +479,44 @@
key_third_person = "trembles"
message = "trembles in fear!"
+#define TREMBLE_LOOP_DURATION (4.4 SECONDS)
+/datum/emote/living/tremble/run_emote(mob/living/user, params, type_override, intentional)
+ . = ..()
+ if(!.)
+ return FALSE
+ animate(user, pixel_x = user.pixel_x + 2, time = 0.2 SECONDS)
+ for(var/i in 1 to TREMBLE_LOOP_DURATION / (0.4 SECONDS)) //desired total duration divided by the iteration duration to give the necessary iteration count
+ animate(pixel_x = user.pixel_x - 2, time = 0.2 SECONDS)
+ animate(pixel_x = user.pixel_x + 2, time = 0.2 SECONDS)
+ animate(pixel_x = user.pixel_x - 2, time = 0.2 SECONDS)
+#undef TREMBLE_LOOP_DURATION
+
/datum/emote/living/twitch
key = "twitch"
key_third_person = "twitches"
message = "twitches violently."
+/datum/emote/living/twitch/run_emote(mob/living/user, params, type_override, intentional)
+ . = ..()
+ if(!.)
+ return FALSE
+ animate(user, pixel_x = user.pixel_x - 1, time = 0.1 SECONDS)
+ animate(pixel_x = user.pixel_x + 1, time = 0.1 SECONDS)
+ animate(time = 0.1 SECONDS)
+ animate(pixel_x = user.pixel_x - 1, time = 0.1 SECONDS)
+ animate(pixel_x = user.pixel_x + 1, time = 0.1 SECONDS)
+
/datum/emote/living/twitch_s
key = "twitch_s"
message = "twitches."
+/datum/emote/living/twitch_s/run_emote(mob/living/user, params, type_override, intentional)
+ . = ..()
+ if(!.)
+ return FALSE
+ animate(user, pixel_x = user.pixel_x - 1, time = 0.1 SECONDS)
+ animate(pixel_x = user.pixel_x + 1, time = 0.1 SECONDS)
+
/datum/emote/living/wave
key = "wave"
key_third_person = "waves"
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm
index 51db8247b89f..cb22ef43b849 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/herald.dm
@@ -138,9 +138,7 @@
if(target)
H.original = target
H.fire(set_angle)
- if(is_trishot)
- shoot_projectile(marker, set_angle + 15, FALSE, FALSE)
- shoot_projectile(marker, set_angle - 15, FALSE, FALSE)
+ //monke edit - removed heralds shotgun BS from his tri shot
/mob/living/simple_animal/hostile/asteroid/elite/herald/proc/herald_trishot(target)
ranged_cooldown = world.time + 30
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index 91dd646455b8..c0e0f5194f82 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -255,7 +255,7 @@
return
to_chat(user,span_notice("You start manually releasing the low-pressure gauge..."))
- if(!do_after(user, 0.5 SECONDS, affected_mob, interaction_key = DOAFTER_SOURCE_SURVIVALPEN))
+ if(!do_after(user, 10 SECONDS, affected_mob, interaction_key = DOAFTER_SOURCE_SURVIVALPEN))
return
amount_per_transfer_from_this = initial(amount_per_transfer_from_this) * 0.5
diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm
index 7d8a9477af0e..a0cc45debc0b 100644
--- a/code/modules/vending/clothesmate.dm
+++ b/code/modules/vending/clothesmate.dm
@@ -21,6 +21,7 @@
/obj/item/clothing/neck/scarf = 6,
/obj/item/clothing/neck/large_scarf = 6,
/obj/item/clothing/neck/infinity_scarf = 6,
+ /obj/item/clothing/neck/ascot = 6,
/obj/item/clothing/neck/tie = 6,
/obj/item/clothing/head/rasta = 3,
/obj/item/clothing/head/chaplain/kippah = 3,
diff --git a/code/modules/vending/megaseed.dm b/code/modules/vending/megaseed.dm
index c58c8cba1726..56b642f2ea47 100644
--- a/code/modules/vending/megaseed.dm
+++ b/code/modules/vending/megaseed.dm
@@ -20,6 +20,7 @@
/obj/item/seeds/cocoapod = 3,
/obj/item/seeds/eggplant = 3,
/obj/item/seeds/grape = 3,
+ /obj/item/seeds/lanternfruit = 3,
/obj/item/seeds/lemon = 3,
/obj/item/seeds/lime = 3,
/obj/item/seeds/olive = 3,
diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm
index 01fff9bdf6db..220bd1acdb7d 100644
--- a/code/modules/vending/security.dm
+++ b/code/modules/vending/security.dm
@@ -32,6 +32,9 @@
/obj/item/watertank/pepperspray = 2,
/obj/item/storage/belt/holster/energy = 4,
/obj/item/ammo_box/magazine/m35 = 5, //monkestation edit: Paco sec
+ /obj/item/clothing/head/guardmanhelmet = 1, //monkestation edit: Guardman
+ /obj/item/clothing/under/guardmanuniform = 1, //monkestation edit: Guardman
+ /obj/item/clothing/suit/armor/guardmanvest = 1, //monkestation edit: Guardman
)
refill_canister = /obj/item/vending_refill/security
default_price = PAYCHECK_CREW
diff --git a/html/changelogs/AutoChangeLog-pr-513.yml b/html/changelogs/AutoChangeLog-pr-513.yml
new file mode 100644
index 000000000000..cd4545e308ff
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-513.yml
@@ -0,0 +1,9 @@
+author: "KittyNoodle"
+delete-after: True
+changes:
+ - rscadd: "Nuke ops have been authorized for a new experimental combat implant."
+ - qol: "Stacking hardlight spears now stores it in only one spell. And it looks really cool."
+ - qol: "Hardlight spears no longer delete themselves after 10 seconds."
+ - balance: "Hardlight spears now do much more damage."
+ - image: "resprited the hardlight spear"
+ - refactor: "Hardlight spears use projectiles instead of throws now."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-553.yml b/html/changelogs/AutoChangeLog-pr-553.yml
new file mode 100644
index 000000000000..3a2d0b29babe
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-553.yml
@@ -0,0 +1,5 @@
+author: "Bidlink1"
+delete-after: True
+changes:
+ - rscadd: "Lanternfruit to Megaservitor (courtesy of MrMelbert)"
+ - rscadd: "Adds Sulfur and Liquid Electricity production as a gene in Lantern fruit"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-574.yml b/html/changelogs/AutoChangeLog-pr-574.yml
new file mode 100644
index 000000000000..bd9de0bbc437
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-574.yml
@@ -0,0 +1,4 @@
+author: "NicoDeLuna"
+delete-after: True
+changes:
+ - bugfix: "adjusting sprites of the ascot"
\ No newline at end of file
diff --git a/html/changelogs/archive/2023-11.yml b/html/changelogs/archive/2023-11.yml
index 20475386f996..3e13b326c57c 100644
--- a/html/changelogs/archive/2023-11.yml
+++ b/html/changelogs/archive/2023-11.yml
@@ -57,3 +57,29 @@
- rscadd: new bar
wraith-54321:
- rscadd: map template for contests
+2023-11-14:
+ lmenvs:
+ - rscadd: TTNT's donator item set!
+2023-11-15:
+ Glyphee:
+ - bugfix: changed atmos on the dirt tiles to `"o2=22;n2=82;TEMP=293.15"`
+ wraith-54321:
+ - bugfix: Admins can now actually force events
+ - bugfix: fixed some midrounds spawning without their antag datum
+2023-11-18:
+ Glyphee:
+ - rscadd: Changed how my office looks :p
+ - bugfix: Fixed a typo in the medbay of CC ("all in one medial fabricator" -> "all
+ in one medical fabricator")
+ NicoDeLuna:
+ - rscadd: ' Added Ascots to Loadout and Clothesmate'
+ - rscadd: Add new Guardman's uniform, vest and helmet to the sectech vendor
+ Salted-Zen:
+ - balance: Herald triple shot no longer shotgun fans. Its just three projectiles.
+ kawoppi, gboster:
+ - rscadd: 'kawoppi: added animations to the *jump, *shiver, *sway, *tremble, *twitch
+ and *twitch_s emotes'
+ - rscadd: 'kawoppi: the *jump emote now plays a sound'
+ wraith-54321:
+ - balance: Reverts our change making miner medipens take only half a second to use
+ on station
diff --git a/icons/obj/hydroponics/growing_fruits.dmi b/icons/obj/hydroponics/growing_fruits.dmi
index 7e535cdaf9b3..d52fa6568bdb 100644
Binary files a/icons/obj/hydroponics/growing_fruits.dmi and b/icons/obj/hydroponics/growing_fruits.dmi differ
diff --git a/icons/obj/hydroponics/harvest.dmi b/icons/obj/hydroponics/harvest.dmi
index 517edbba0677..d41a8f22def3 100644
Binary files a/icons/obj/hydroponics/harvest.dmi and b/icons/obj/hydroponics/harvest.dmi differ
diff --git a/icons/obj/hydroponics/seeds.dmi b/icons/obj/hydroponics/seeds.dmi
index d6e70af1a428..21430781ace2 100644
Binary files a/icons/obj/hydroponics/seeds.dmi and b/icons/obj/hydroponics/seeds.dmi differ
diff --git a/monkestation/_maps/RandomBars/Tram/tram_slum_bar.dmm b/monkestation/_maps/RandomBars/Tram/tram_slum_bar.dmm
index b96ae701e5f2..be30d1525c04 100644
--- a/monkestation/_maps/RandomBars/Tram/tram_slum_bar.dmm
+++ b/monkestation/_maps/RandomBars/Tram/tram_slum_bar.dmm
@@ -156,7 +156,9 @@
/area/station/service/kitchen)
"hb" = (
/obj/machinery/light/dim/directional/west,
-/turf/open/misc/dirt,
+/turf/open/misc/dirt{
+ initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+ },
/area/station/commons/lounge)
"he" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{
@@ -547,7 +549,9 @@
/area/station/service/theater)
"vb" = (
/obj/effect/landmark/start/hangover,
-/turf/open/misc/dirt,
+/turf/open/misc/dirt{
+ initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+ },
/area/station/commons/lounge)
"vA" = (
/obj/structure/chair/stool/directional/east,
@@ -742,7 +746,9 @@
/turf/open/floor/wood/tile,
/area/station/service/bar/atrium)
"Co" = (
-/turf/open/misc/dirt,
+/turf/open/misc/dirt{
+ initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+ },
/area/station/commons/lounge)
"Cs" = (
/obj/effect/decal/cleanable/dirt,
@@ -783,7 +789,9 @@
/area/station/service/theater)
"Eu" = (
/obj/effect/landmark/start/assistant,
-/turf/open/misc/dirt,
+/turf/open/misc/dirt{
+ initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+ },
/area/station/commons/lounge)
"EE" = (
/obj/effect/decal/cleanable/dirt,
@@ -1114,7 +1122,9 @@
/area/station/service/theater)
"RK" = (
/obj/machinery/light/dim/directional/north,
-/turf/open/misc/dirt,
+/turf/open/misc/dirt{
+ initial_gas_mix = "o2=22;n2=82;TEMP=293.15"
+ },
/area/station/commons/lounge)
"RT" = (
/obj/structure/table/wood,
diff --git a/monkestation/code/game/objects/items/implants/hardlight.dm b/monkestation/code/game/objects/items/implants/hardlight.dm
index e0c5c5bbd24d..94e5a5becbe2 100644
--- a/monkestation/code/game/objects/items/implants/hardlight.dm
+++ b/monkestation/code/game/objects/items/implants/hardlight.dm
@@ -1,27 +1,79 @@
/obj/item/implant/hard_spear
name = "hardlight spear implant"
- icon = 'monkestation/icons/obj/implants.dmi'
- icon_state = "lightspear" //Shows up as the action button icon
+ actions_types = null
implant_color = "b"
- uses = -1
- COOLDOWN_DECLARE(hardlight_implant_cooldown)
+ allow_multiple = TRUE
+ var/timerid
+ var/deltime = 3 SECONDS
+ /// The typepath of the spell we give to people. (yes this is copy pasted from spell implants, yes this has different functionality)
+ var/datum/action/cooldown/spell/spell_type = /datum/action/cooldown/spell/conjure_item/hardlight_spear
+ /// The actual spell we give to the person on implant
+ var/datum/action/cooldown/spell/spell_to_give
+ /// Does this implant contain a spell
+ var/spell_inside = FALSE
+ /// What is the level of the spell inside
+ var/spell_inside_level = 1
-/obj/item/implant/hard_spear/activate()
- if(!COOLDOWN_FINISHED(src, hardlight_implant_cooldown)) //Thanks implant_abductor.dm for the help <3
- to_chat(imp_in, "You must wait [COOLDOWN_TIMELEFT(src, hardlight_implant_cooldown)*0.1] seconds to use [src] again!")
+/obj/item/implant/hard_spear/Initialize(mapload)
+ . = ..()
+ if(!spell_type)
return
- var/obj/item/spear/hardlight_spear/summoned_spear
- summoned_spear = new /obj/item/spear/hardlight_spear(imp_in.loc)
- if(imp_in.put_in_hands(summoned_spear,TRUE))
- to_chat(imp_in, "A spear manifests in your hand.")
- playsound(imp_in, 'sound/weapons/saberon.ogg', 35, 1)
- QDEL_IN(summoned_spear, 10 SECONDS)
- COOLDOWN_START(src, hardlight_implant_cooldown, 20 SECONDS)
- else
- to_chat(imp_in, "You must have a free hand to summon a spear!")
+ spell_to_give = new spell_type(src)
+
+/obj/item/implant/hard_spear/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE)
+ . = ..()
+ if (!.)
return
+ if (!spell_to_give)
+ return FALSE
+
+ var/datum/action/cooldown/spell/existing = locate(spell_to_give) in user.actions
+ if(existing)
+ if(!existing.level_spell())
+ to_chat(target, span_boldnotice("The implant is unable to upgrade your hardlight spear further"))
+ return FALSE
+ timerid = QDEL_IN_STOPPABLE(src, deltime)
+ return TRUE
+ spell_inside = TRUE
+ spell_to_give.Grant(target)
+ return TRUE
+
+/obj/item/implant/hard_spear/removed(mob/living/source, silent, special)
+ . = ..()
+ if (!.)
+ return FALSE
+
+ if(spell_inside)
+ if(spell_to_give)
+ spell_inside_level = spell_to_give.spell_level
+ spell_to_give.Remove(source)
+ if(source.stat != DEAD && !silent)
+ to_chat(source, span_boldnotice(""))
+
+ if(timerid)
+ deltimer(timerid)
+ timerid = null
+
+
+/obj/item/implant/hard_spear/Destroy()
+ QDEL_NULL(spell_to_give)
+ return ..()
+
+/obj/item/implant/hard_spear/get_data()
+ var/dat = {"Implant Specifications:
+ Name: Aetherofusion Hardlight Weapons Platform
+ Life: 67 years in a dead host.
+ Important Notes: The insertion of additional copies of this implant will upgrade the orignal one. Efficacy not shown after 5 upgrades.
+