"
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index c88211e92e56..5bd1e2cf6918 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -480,7 +480,7 @@ var/global/list/admin_verbs_hideable = list(
if(!config.sql_enabled)
to_chat(usr, "
SQL database is disabled. Setup it or use native Byond bans.")
return
-
+
holder.DB_ban_panel()
feedback_add_details("admin_verb","UBP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index fdd660f80abd..2c068e20f559 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1216,6 +1216,36 @@
Game() // updates the main game menu
.(href, list("f_secret"=1))
+ else if(href_list["pluvian_bless"])
+ if(!check_rights(R_ADMIN|R_WHITELIST))
+ return
+
+ var/mob/living/carbon/human/M = locate(href_list["pluvian_bless"])
+ if(!istype(M))
+ return
+
+ global.pluvia_religion.bless(M)
+ message_admins("
[key_name_admin(usr)] blessed [key_name(M)]")
+ log_admin("[key_name(usr)] blessed [key_name(M)]")
+ return
+
+ else if(href_list["pluvian_haram"])
+ if(!check_rights(R_ADMIN|R_WHITELIST))
+ return
+
+ var/mob/M = locate(href_list["pluvian_haram"])
+
+ var/haram_point = input("Сколько очков греха накидываем?", "Очки Греха") as num|null
+ if(!haram_point)
+ return
+ var/reason = sanitize(input("Какая причина?", "Причина?") as text|null)
+ if(!reason)
+ return
+ global.pluvia_religion.adjust_haram(M, haram_point, reason)
+ message_admins("[key_name_admin(usr)] custom haram [key_name_admin(M)] with [reason] reason on [haram_point] haram point")
+ log_admin("[key_name(usr)] custom haram [key_name(M)] with [reason] reason on [haram_point] haram point")
+ return
+
else if(href_list["monkeyone"])
if(!check_rights(R_SPAWN)) return
diff --git a/code/modules/admin/whitelist.dm b/code/modules/admin/whitelist.dm
index cf90450894b7..2238ce15d7b6 100644
--- a/code/modules/admin/whitelist.dm
+++ b/code/modules/admin/whitelist.dm
@@ -307,6 +307,9 @@
if(role == "human")
return TRUE
+ if(role == "pluvian")
+ return TRUE
+
switch(role) //We don't use separate whitelist for languages, lets transform lang name to their race name.
if("sinta'unathi")
role = "unathi"
diff --git a/code/modules/client/character_menu/loadout/loadout_clothing.dm b/code/modules/client/character_menu/loadout/loadout_clothing.dm
index 8b2518a99707..b46ed7c91677 100644
--- a/code/modules/client/character_menu/loadout/loadout_clothing.dm
+++ b/code/modules/client/character_menu/loadout/loadout_clothing.dm
@@ -162,6 +162,19 @@
path = /obj/item/clothing/under/kung
cost = 1
+/datum/gear/under/pluvia
+ display_name = "Pluvia uniform"
+ path = /obj/item/clothing/under/pluvia
+ cost = 1
+ whitelisted = PLUVIAN
+
+/datum/gear/under/pluvia/New()
+ ..()
+ var/pluvia = list()
+ pluvia["classic"] = /obj/item/clothing/under/pluvia
+ pluvia["gold"] = /obj/item/clothing/under/pluvia_gold
+ gear_tweaks += new/datum/gear_tweak/path(pluvia)
+
/datum/gear/suit/m65
display_name = "M65 Jacket Selection"
path = /obj/item/clothing/suit/storage/miljacket_army
@@ -211,3 +224,17 @@
cost = 1
allowed_roles = list("Security Officer", "Security Cadet", "Warden", "Detective", "Head of Security", "Forensic Technician" )
whitelisted = SKRELL
+
+/datum/gear/suit/pluvia_path
+ display_name = "Pluvia Path"
+ path = /obj/item/clothing/suit/pluvia_morality
+ cost = 1
+ whitelisted = PLUVIAN
+
+/datum/gear/suit/pluvia_path/New()
+ ..()
+ var/pluvia_path = list()
+ pluvia_path["Balance"] = /obj/item/clothing/suit/pluvia_balance
+ pluvia_path["Morality"] = /obj/item/clothing/suit/pluvia_morality
+ pluvia_path["Trick"] = /obj/item/clothing/suit/pluvia_trick
+ gear_tweaks += new/datum/gear_tweak/path(pluvia_path)
diff --git a/code/modules/client/character_menu/loadout/loadout_hats.dm b/code/modules/client/character_menu/loadout/loadout_hats.dm
index 9b0422765e52..52746fd13760 100644
--- a/code/modules/client/character_menu/loadout/loadout_hats.dm
+++ b/code/modules/client/character_menu/loadout/loadout_hats.dm
@@ -98,3 +98,16 @@
/datum/gear/head/chep
display_name = "Maid cap"
path = /obj/item/clothing/head/chep
+
+/datum/gear/head/pluvia_hat
+ display_name = "Pluvia Hat"
+ path = /obj/item/clothing/head/pluvia
+ cost = 1
+ whitelisted = PLUVIAN
+
+/datum/gear/head/pluvia_hat/New()
+ ..()
+ var/hats = list()
+ hats["blue"] = /obj/item/clothing/head/pluvia
+ hats["white"] = /obj/item/clothing/head/pluvia/white
+ gear_tweaks += new/datum/gear_tweak/path(hats)
diff --git a/code/modules/clothing/gloves/power_gloves.dm b/code/modules/clothing/gloves/power_gloves.dm
index 8717fd5abe79..ff060f02d40f 100644
--- a/code/modules/clothing/gloves/power_gloves.dm
+++ b/code/modules/clothing/gloves/power_gloves.dm
@@ -105,6 +105,7 @@
calc_power *= H.get_siemens_coefficient_organ(BP)
L.visible_message("
[L] has been touched with the gloves by [attacker]!")
L.log_combat(attacker, "stungloved with [name]")
+ SEND_SIGNAL(attacker, COMSIG_HUMAN_HARMED_OTHER, L)
L.apply_damage(calc_power, HALLOSS)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
s.set_up(3, 1, L)
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 5013b24376e1..a6ad097a775c 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -524,6 +524,24 @@
icon_state = "ponchoshame"
item_state = "ponchoshame"
+/obj/item/clothing/suit/pluvia_morality
+ name = "Path of Morality"
+ icon_state = "pluvia_morality"
+ item_state = "pluvia_morality"
+ flags = ONESIZEFITSALL
+
+/obj/item/clothing/suit/pluvia_trick
+ name = "Path of Trick"
+ icon_state = "pluvia_trick"
+ item_state = "pluvia_trick"
+ flags = ONESIZEFITSALL
+
+/obj/item/clothing/suit/pluvia_balance
+ name = "Path of Balance"
+ icon_state = "pluvia_balance"
+ item_state = "pluvia_balance"
+ flags = ONESIZEFITSALL
+
//Mafia
/obj/item/clothing/suit/browntrenchcoat
name = "brown trench coat"
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 0a3f07eb6cf7..d2f5fe3d51dd 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -757,3 +757,14 @@
flags = ONESIZEFITSALL|HEAR_TALK
siemens_coefficient = 0.8
armor = list(melee = 5, bullet = 0, laser = 5, energy = 5, bomb = 0, bio = 0, rad = 0)
+
+/obj/item/clothing/under/pluvia
+ name = "pluvia suit"
+ icon_state = "pluvia"
+ item_state = "pluvia"
+ flags = ONESIZEFITSALL
+
+/obj/item/clothing/under/pluvia_gold
+ name = "pluvia suit"
+ icon_state = "pluviaGold"
+ item_state = "pluviaGold"
diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm
index 019d7514111e..d3f08f0f5a3b 100644
--- a/code/modules/crafting/recipes.dm
+++ b/code/modules/crafting/recipes.dm
@@ -347,3 +347,14 @@
result = /obj/item/weapon/kitchenknife/makeshift_shiv/phoron
time = 10
+/datum/crafting_recipe/ricehat
+ name = "Rice hat"
+ reqs = list(/obj/item/weapon/reagent_containers/food/snacks/grown/wheat = 3)
+ result = /obj/item/clothing/head/ricehat
+ time = 10
+
+/datum/crafting_recipe/wooden_sticks
+ name = "wooden sticks"
+ reqs = list(/obj/item/stack/sheet/wood = 3)
+ result = /obj/item/weapon/kitchen/utensil/fork/sticks
+ time = 10
diff --git a/code/modules/holidays/new_year/clothing.dm b/code/modules/holidays/new_year/clothing.dm
index e591e1b4a026..7c47ab689fe2 100644
--- a/code/modules/holidays/new_year/clothing.dm
+++ b/code/modules/holidays/new_year/clothing.dm
@@ -203,3 +203,21 @@
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0)
+
+/obj/item/clothing/head/pluvia
+ name = "pluvia non la"
+ desc = "Prepare to heavy rain"
+ icon_state = "pluvia_hat"
+ item_state = "pluvia_hat"
+ flags = HEADCOVERSEYES
+
+/obj/item/clothing/head/pluvia/white
+ icon_state = "wpluvia_hat"
+ item_state = "wpluvia_hat"
+
+/obj/item/clothing/head/ricehat
+ name = "non la"
+ desc = "welcome to the rice fields"
+ icon_state = "ricehat"
+ item_state = "ricehat"
+ flags = HEADCOVERSEYES
diff --git a/code/modules/mob/dead/new_player/sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories.dm
index 1e0eedc2a94a..846e9fed9b7c 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories.dm
@@ -27,7 +27,7 @@
var/gender = NEUTER
// Restrict some styles to specific species
- var/list/species_allowed = list(HUMAN, PODMAN)
+ var/list/species_allowed = list(HUMAN, PODMAN,PLUVIAN)
// Whether or not the accessory can be affected by colouration
var/do_colouration = 1
@@ -48,7 +48,7 @@
/datum/sprite_accessory/hair/bald
name = "Bald"
icon_state = "bald"
- species_allowed = list(HUMAN, UNATHI, DIONA, PODMAN)
+ species_allowed = list(HUMAN, UNATHI, DIONA, PODMAN, PLUVIAN)
/datum/sprite_accessory/hair/buzzcut
name = "Buzz Cut"
@@ -730,7 +730,7 @@
name = "Shaved"
icon_state = "bald"
gender = NEUTER
- species_allowed = list(HUMAN, UNATHI, TAJARAN, SKRELL, VOX, IPC, DIONA, PODMAN)
+ species_allowed = list(HUMAN, UNATHI, TAJARAN, SKRELL, VOX, IPC, DIONA, PODMAN, PLUVIAN)
/datum/sprite_accessory/facial_hair/watson
name = "Watson Mustache"
diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm
index 3b443a6f8cd1..638f9e045bf9 100644
--- a/code/modules/mob/hear_say.dm
+++ b/code/modules/mob/hear_say.dm
@@ -73,10 +73,10 @@
if(!client)
if(!remote_hearers)
return FALSE
-
+ var/runechat_message = message
message = process_speech(message, verb, language, alt_name, italics, speaker, used_radio, speech_sound, sound_vol)
if(message)
- telepathy_eavesdrop(speaker, message, "has heard", language)
+ telepathy_eavesdrop(speaker, message, "has heard", language, runechat_message)
return FALSE
diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm
index 8cad4183b4a6..500a17283b0c 100644
--- a/code/modules/mob/holder.dm
+++ b/code/modules/mob/holder.dm
@@ -150,6 +150,12 @@
icon_state = "skrellkey1"
flags = HEAR_PASS_SAY
+/obj/item/weapon/holder/monkey/pluvia
+ name = "pluvian"
+ desc = "Оно никогда не существовало в дикой природе.."
+ icon_state = "pluvian"
+ flags = HEAR_PASS_SAY
+
/obj/item/weapon/holder/monkey/punpun
name = "punpun"
icon_state = "punpun1"
diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm
index f4251c00ad22..bd01eedcacb4 100644
--- a/code/modules/mob/language.dm
+++ b/code/modules/mob/language.dm
@@ -236,7 +236,7 @@
speech_verb = "enunciates"
colour = "say_quote"
key = list("2")
- allowed_speak = list(IPC, HUMAN, DIONA, SKRELL, UNATHI, TAJARAN, VOX)
+ allowed_speak = list(IPC, HUMAN, DIONA, SKRELL, UNATHI, TAJARAN, VOX, PLUVIAN)
syllables = list("lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit",
"sed", "do", "eiusmod", "tempor", "incididunt", "ut", "labore", "et", "dolore",
"magna", "aliqua", "ut", "enim", "ad", "minim", "veniam", "quis", "nostrud",
@@ -255,7 +255,7 @@
speech_verb = "growls"
colour = "rough"
key = list("3")
- allowed_speak = list(IPC, HUMAN, DIONA, SKRELL, UNATHI, TAJARAN, VOX)
+ allowed_speak = list(IPC, HUMAN, DIONA, SKRELL, UNATHI, TAJARAN, VOX, PLUVIAN)
syllables = list ("gra","ba","ba","breg","bra","rag","dur","ra","ro","gro","go","ber","bar","geg","gra")
accents = list(
"х" = "г",
@@ -279,7 +279,7 @@
desc = "Standart language made of gestures. Common language of deaf and muted people."
colour = "rough"
key = list("4")
- allowed_speak = list(IPC, HUMAN, DIONA, SKRELL, UNATHI, TAJARAN, VOX)
+ allowed_speak = list(IPC, HUMAN, DIONA, SKRELL, UNATHI, TAJARAN, VOX, PLUVIAN)
signlang_verb = list("makes signs with hands", "gestures", "waves hands", "gesticulates")
flags = SIGNLANG
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index 952f8f3dc025..b8b743d9c48a 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -16,6 +16,39 @@
..()
+/mob/living/carbon/human/proc/reborn()
+ var/target = pick_landmarked_location("Heaven")
+ var/mob/living/carbon/human/pluvian_spirit/P = new /mob/living/carbon/human/pluvian_spirit(target)
+ for(var/obj/effect/proc_holder/spell/S in spell_list)
+ if(!istype(S,/obj/effect/proc_holder/spell/create_bless_vote))
+ P.spells_to_remember.Add(S)
+ global.pluvia_religion.remove_member(src, HOLY_ROLE_PRIEST)
+ P.real_name = dna.real_name
+ P.dna = dna.Clone()
+ P.UpdateAppearance()
+ P.b_eyes = 200
+ P.g_eyes = 255
+ P.r_eyes = 255
+ P.regenerate_icons()
+ P.my_corpse = src
+ mind.transfer_to(P)
+ P.hud_used.set_parallax(PARALLAX_HEAVEN)
+ for(var/obj/item/I in contents)
+ I.remove_item_actions(P)
+ for(var/obj/effect/proc_holder/spell/S in P.spell_list)
+ P.RemoveSpell(S)
+ message_admins("Pluvian [key_name_admin(P)] went to heaven!")
+ log_admin("Pluvian [key_name(P)] went to heaven!")
+
+/mob/living/carbon/human/proc/pluvian_reborn_if_worthy()
+ if(iscultist(src) || ischangeling(src) || isshadowthrall(src) || isshadowling(src) || !mind)
+ return
+ if(mind.pluvian_blessed || mind.pluvian_social_credit >= global.pluvia_religion.social_credit_threshold)
+ reborn()
+ else
+ to_chat(src, "
\ Врата рая закрыты для вас...")
+ playsound_local(null, 'sound/effects/heaven_fail.ogg', VOL_EFFECTS_MASTER, null, FALSE)
+
/mob/living/carbon/human/dust()
new /obj/effect/decal/cleanable/ash(loc)
new /obj/effect/decal/remains/human/burned(loc)
@@ -69,7 +102,6 @@
to_chat(T.antag.current, "
Sudden realization strikes you like a truck! ONE OF OUR MASTERS HAS DIED!!!")
..(gibbed)
-
SSStatistics.add_death_stat(src)
// Called right after we will lost our head
@@ -104,6 +136,8 @@
for(var/obj/effect/proc_holder/changeling/headcrab/crab in Host.purchasedpowers)
crab.sting_action(src)
return
+ if(ispluvian(src))
+ pluvian_reborn_if_worthy()
var/obj/item/organ/internal/IO = organs_by_name[O_BRAIN]
if(IO && IO.parent_bodypart == BP_HEAD)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 0e8eb2d68c2f..5afa56fccbee 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -89,6 +89,17 @@
QDEL_NULL(vessel)
return ..()
+
+/mob/living/carbon/human/pluvian/atom_init(mapload)
+ . = ..(mapload, PLUVIAN)
+
+/mob/living/carbon/human/pluvian_spirit
+ var/mob/living/carbon/human/my_corpse
+ var/list/spells_to_remember = list()
+
+/mob/living/carbon/human/pluvian_spirit/atom_init(mapload)
+ . = ..(mapload, PLUVIAN_SPIRIT)
+
/mob/living/carbon/human/skrell/atom_init(mapload)
h_style = "Skrell Male Tentacles"
. = ..(mapload, SKRELL)
@@ -1968,9 +1979,34 @@
to_chat(user, "
You hear cracking in [src]'s [BP]!.")
/mob/living/carbon/human/proc/return_to_body_dialog()
- if (client) //in body?
+ // just give a sound notification if already in the body
+ if (client)
playsound_local(null, 'sound/misc/mario_1up.ogg', VOL_NOTIFICATIONS, vary = FALSE, ignore_environment = TRUE)
- else if(mind)
+ return
+
+ // pluvians if they in the spirit form
+ if(ispluvian(src))
+ for(var/mob/living/carbon/human/pluvian_spirit/spirit in player_list)
+ if(spirit.my_corpse == src && spirit.client)
+ spirit.playsound_local(null, 'sound/misc/mario_1up.ogg', VOL_NOTIFICATIONS, vary = FALSE, ignore_environment = TRUE)
+ var/answer = tgui_alert(spirit,"You have been reanimated. Do you want to return to body?","Reanimate", list("Yes","No"))
+ if(answer == "Yes")
+ spirit.mind.transfer_to(spirit.my_corpse)
+ for(var/spell in spirit.spells_to_remember)
+ spirit.my_corpse.AddSpell(spell)
+ for(var/obj/item/I in spirit.my_corpse.contents)
+ I.add_item_actions(spirit.my_corpse)
+ spirit.my_corpse.hud_used.set_parallax(PARALLAX_CLASSIC)
+ message_admins("Pluvian [key_name_admin(spirit.my_corpse)] is living saint now")
+ log_admin("Pluvian [key_name(spirit.my_corpse)] is living saint now")
+ for(var/obj/item/W in spirit)
+ spirit.drop_from_inventory(W)
+ qdel(spirit)
+ global.pluvia_religion.bless(src)
+ return
+
+ // default behavior - search for the ghost from the mind datum and ask if he want to reenter
+ if(mind)
for(var/mob/dead/observer/ghost in player_list)
if(ghost.mind == mind && ghost.can_reenter_corpse)
ghost.playsound_local(null, 'sound/misc/mario_1up.ogg', VOL_NOTIFICATIONS, vary = FALSE, ignore_environment = TRUE)
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 6746fbcc09da..c5711d93a013 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -294,6 +294,7 @@
sound_vol = 50
..(message, speaking, verb, alt_name, italics, message_range, used_radios, speech_sound, sound_vol, sanitize = FALSE, message_mode = message_mode) //ohgod we should really be passing a datum here.
+ SEND_SIGNAL(src, COMSIG_HUMAN_SAY, message)
/mob/living/carbon/human/say_understands(mob/other,datum/language/speaking = null)
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index e51cfc225ce8..f5baaf27fadc 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -128,6 +128,15 @@
race = UNATHI
holder_type = /obj/item/weapon/holder/monkey/stok
+/mob/living/carbon/monkey/pluvian
+ name = "Pluv-key"
+ voice_name = "Pluv-key"
+ cases = list("Плувеныш", "Плувеныша", "Плувешыну", "Плувеныша", "Плувенышом", "Плувеныше")
+ speak_emote = list("chimpers")
+ icon_state = "pluvian"
+ race = PLUVIAN
+ holder_type = /obj/item/weapon/holder/monkey/pluvia
+
/mob/living/carbon/monkey/atom_init()
var/datum/reagents/R = new/datum/reagents(1000)
reagents = R
@@ -190,6 +199,10 @@
greaterform = TAJARAN
add_language(LANGUAGE_SIIKTAJR)
+/mob/living/carbon/monkey/pluvian/atom_init()
+ . = ..()
+ greaterform = PLUVIAN
+
/mob/living/carbon/monkey/movement_delay()
var/tally = speed
diff --git a/code/modules/mob/living/carbon/species.dm b/code/modules/mob/living/carbon/species.dm
index 64877454b4e4..04933b5527e9 100644
--- a/code/modules/mob/living/carbon/species.dm
+++ b/code/modules/mob/living/carbon/species.dm
@@ -35,6 +35,8 @@
var/speed_mod_no_shoes = 0 // Speed modifier without shoes.
var/siemens_coefficient = 1 // How conductive is the specie.
+ var/pluvian_social_credit = 1 // Species default social credit for pluvian social credit system
+
var/primitive // Lesser form, if any (ie. monkey for humans)
var/tail // Name of tail image in species effects icon file.
var/language // Default racial language, if any.
@@ -367,6 +369,82 @@
is_common = TRUE
+/datum/species/pluvian
+ name = PLUVIAN
+ icobase = 'icons/mob/human_races/r_pluvian.dmi'
+ gender_limb_icons = TRUE
+ fat_limb_icons = TRUE
+ language = LANGUAGE_SOLCOMMON
+ primitive = /mob/living/carbon/monkey/pluvian
+ unarmed_type = /datum/unarmed_attack/punch
+ dietflags = DIET_OMNI
+ pluvian_social_credit = 0
+
+ flags = list(
+ IS_WHITELISTED = TRUE
+ ,HAS_LIPS = TRUE
+ ,HAS_UNDERWEAR = TRUE
+ ,HAS_HAIR = TRUE
+ ,FACEHUGGABLE = TRUE
+ ,HAS_HAIR_COLOR = TRUE
+ ,IS_SOCIAL = TRUE
+ )
+
+ min_age = 25
+ max_age = 85
+
+ is_common = TRUE
+
+/datum/species/pluvian/on_loose(mob/living/M, new_species)
+ if(global.pluvia_religion?.is_member(M)) // skip lobby dummy
+ global.pluvia_religion.remove_member(M, HOLY_ROLE_PRIEST)
+ ..()
+
+/datum/species/pluvian/handle_death(mob/living/carbon/human/H, gibbed)
+ ..()
+ H.pluvian_reborn_if_worthy()
+
+/datum/species/pluvian_spirit
+ name = PLUVIAN_SPIRIT
+ icobase = 'icons/mob/human_races/r_pluvian.dmi'
+ gender_limb_icons = TRUE
+ fat_limb_icons = TRUE
+ language = LANGUAGE_SOLCOMMON
+ unarmed_type = /datum/unarmed_attack/punch
+ dietflags = 0
+ brute_mod = 0
+ burn_mod = 0
+ oxy_mod = 0
+ tox_mod = 0
+ clone_mod = 0
+ pluvian_social_credit = 0
+ eyes = "pluvia_ms_s"
+ eyes_glowing = TRUE
+ flags = list(
+ NO_BREATHE = TRUE
+ ,NO_BLOOD = TRUE
+ ,NO_DNA = TRUE
+ ,NO_SCAN = TRUE
+ ,VIRUS_IMMUNE = TRUE
+ ,HAS_SKIN_COLOR = TRUE
+ ,HAS_HAIR_COLOR = TRUE
+ ,NO_FINGERPRINT = TRUE
+ ,NO_BLOOD_TRAILS = TRUE
+ ,NO_PAIN = TRUE
+ ,RAD_IMMUNE = TRUE
+ ,NO_EMBED = TRUE
+ ,NO_MINORCUTS = TRUE
+ ,NO_EMOTION = TRUE
+ ,NO_VOMIT = TRUE
+ ,NO_FAT = TRUE
+ ,HAS_UNDERWEAR = TRUE
+ )
+ min_age = 25
+ max_age = 85
+
+ warning_low_pressure = -1
+ hazard_low_pressure = -1
+
/datum/species/unathi
name = UNATHI
icobase = 'icons/mob/human_races/r_lizard.dmi'
@@ -745,6 +823,7 @@
dietflags = 0 //Diona regenerate nutrition in light, no diet necessary
taste_sensitivity = TASTE_SENSITIVITY_NO_TASTE
primitive = /mob/living/carbon/monkey/diona
+ pluvian_social_credit = 3
siemens_coefficient = 0.5 // Because they are plants and stuff.
@@ -928,6 +1007,7 @@
language = "Rootspeak"
unarmed_type = /datum/unarmed_attack/diona/podman
primitive = /mob/living/carbon/monkey/diona/podman
+ pluvian_social_credit = 0 // too young to vote
// Because they are less thicc than dionaea.
siemens_coefficient = 0.75
@@ -998,6 +1078,7 @@
/mob/living/carbon/human/proc/IPC_toggle_screen,
/mob/living/carbon/human/proc/IPC_display_text)
dietflags = 0 //IPCs can't eat, so no diet
+ pluvian_social_credit = 0 // have no soul
taste_sensitivity = TASTE_SENSITIVITY_NO_TASTE
surgery_icobase = 'icons/mob/species/ipc/surgery.dmi'
eyes = null
@@ -1032,6 +1113,7 @@
butcher_drops = list(/obj/item/stack/sheet/plasteel = 3)
+
flags = list(
IS_WHITELISTED = TRUE
,NO_BREATHE = TRUE
@@ -1177,6 +1259,7 @@
deform = 'icons/mob/human_races/r_skeleton.dmi'
damage_mask = FALSE
dietflags = DIET_ALL
+ pluvian_social_credit = 0 //cursed cant vote
flesh_color = "#c0c0c0"
brute_mod = 2
@@ -1435,6 +1518,8 @@
butcher_drops = list(/obj/item/weapon/ore/diamond = 1, /obj/item/weapon/ore/slag = 3)
bodypart_butcher_results = list(/obj/item/weapon/ore/slag = 1)
+ pluvian_social_credit = 0
+
flags = list(
NO_BLOOD = TRUE,
NO_DNA = TRUE,
@@ -1772,6 +1857,7 @@
brute_mod = 2
burn_mod = 2
speed_mod = 2
+ pluvian_social_credit = 0
has_bodypart = list(
BP_CHEST = /obj/item/organ/external/chest/homunculus
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index e90ff9d4bf9c..f41b42165830 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1473,6 +1473,7 @@
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "drunk", /datum/mood_event/drunk_catharsis)
else if(drunkenness >= DRUNKENNESS_CONFUSED)
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "drunk", /datum/mood_event/very_drunk)
+ SEND_SIGNAL(src, COMSIG_HUMAN_ON_ADJUST_DRUGINESS, src)
else if(drunkenness >= DRUNKENNESS_SLUR)
SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "drunk", /datum/mood_event/drunk)
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index e27b1609adb1..aca64d64e31a 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -69,6 +69,7 @@
//X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
if(P.firer)
log_combat(P.firer, "shot with
[P.type]", alert_admins = !P.fake, redirected = P.redirected)
+ SEND_SIGNAL(P.firer, COMSIG_HUMAN_HARMED_OTHER, src)
else
attack_log += "\[[time_stamp()]\]
UNKNOWN SUBJECT shot
[src]/[ckey] with a
[src]"
if(!P.fake)
@@ -146,6 +147,8 @@
var/client/assailant = L.client
if(assailant)
log_combat(L, "hit with thrown [O]")
+ if(throw_damage > 0)
+ SEND_SIGNAL(L, COMSIG_HUMAN_HARMED_OTHER, src)
// Begin BS12 momentum-transfer code.
if(O.throw_source && AM.fly_speed >= 15)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 3299899d139f..52135ba3c734 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -50,6 +50,7 @@
spawn()
if(client)
animate(client, color = null, time = 0)
+ hud_used.set_parallax(current_parallax)
mob_list += src
if(stat == DEAD)
dead_mob_list += src
@@ -437,7 +438,6 @@
// New life, new quality.
client.prefs.selected_quality_name = null
-
M.key = key
M.name = M.key
// M.Login() //wat
@@ -853,6 +853,7 @@ note dizziness decrements automatically in the mob's Life() proc.
/mob/proc/adjustDrugginess(amount)
druggy = max(druggy + amount, 0)
updateDrugginesOverlay()
+ SEND_SIGNAL(src, COMSIG_HUMAN_ON_ADJUST_DRUGINESS, src)
/mob/proc/setDrugginess(amount)
druggy = max(amount, 0)
diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index f1c066eab2ee..d41c4dfe9a51 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -197,6 +197,7 @@
if(state <= GRAB_AGGRESSIVE)
allow_upgrade = 1
+
//disallow upgrading if we're grabbing more than one person
if((assailant.l_hand && assailant.l_hand != src && istype(assailant.l_hand, /obj/item/weapon/grab)))
var/obj/item/weapon/grab/G = assailant.l_hand
@@ -270,7 +271,7 @@
affecting.Weaken(5) //Should keep you down unless you get help.
affecting.Stun(5)
affecting.losebreath = max(affecting.losebreath + 2, 3)
-
+ SEND_SIGNAL(assailant, COMSIG_HUMAN_HARMED_OTHER, affecting)
adjust_position()
@@ -386,6 +387,7 @@
assailant.set_dir(get_dir(assailant, affecting))
affecting.log_combat(assailant, "neck-grabbed")
+ SEND_SIGNAL(assailant, COMSIG_HUMAN_HARMED_OTHER, affecting)
affecting.Stun(10) //10 ticks of ensured grab
set_state(GRAB_NECK)
@@ -400,6 +402,7 @@
assailant.visible_message("
[assailant] has tightened \his grip on [affecting]'s neck!")
affecting.log_combat(assailant, "strangled")
+ SEND_SIGNAL(assailant, COMSIG_HUMAN_HARMED_OTHER, affecting)
affecting.losebreath += 1
affecting.set_dir(WEST)
@@ -492,6 +495,7 @@
to_chat(affecting, "
You experience immense pain as you feel digits being pressed into your eyes!")
affecting.log_combat(assailant, "finger-pressed into the eyes")
+ SEND_SIGNAL(assailant, COMSIG_HUMAN_HARMED_OTHER, affecting)
var/obj/item/organ/internal/eyes/IO = affecting:organs_by_name[O_EYES]
IO.damage += rand(3,4)
@@ -545,6 +549,7 @@
playsound(assailant, pick(SOUNDIN_GENHIT), VOL_EFFECTS_MASTER)
affecting.log_combat(assailant, "headbutted")
+ SEND_SIGNAL(assailant, COMSIG_HUMAN_HARMED_OTHER, affecting)
assailant.drop_from_inventory(src)
src.loc = null
diff --git a/code/modules/mob/telepathy.dm b/code/modules/mob/telepathy.dm
index 1b302f0feb80..3959e674785e 100644
--- a/code/modules/mob/telepathy.dm
+++ b/code/modules/mob/telepathy.dm
@@ -26,11 +26,14 @@
/mob/living/silicon/telepathy_targetable()
return FALSE
-/mob/proc/telepathy_eavesdrop(atom/source, message, verb, datum/language/language = null)
+// todo: rewrite telepathy as native hear_say with HEAR_PASS flag and add remote_hearers to get_listening_objs()
+// this code is just a mistake
+// or burn all current say code and write it again
+/mob/proc/telepathy_eavesdrop(atom/source, message, verb, datum/language/language = null, runechat_message)
for(var/mob/M as anything in remote_hearers)
- M.telepathy_hear_eavesdrop(source, src, message, verb, language)
+ M.telepathy_hear_eavesdrop(source, src, message, verb, language, runechat_message)
-/mob/proc/telepathy_hear_eavesdrop(atom/source, atom/hearer, message, verb, datum/language/language)
+/mob/proc/telepathy_hear_eavesdrop(atom/source, atom/hearer, message, verb, datum/language/language, runechat_message)
var/dist = get_dist(src, hearer)
if(z != hearer.z)
dist += 25
@@ -38,6 +41,8 @@
if(source)
dist += get_dist(source, hearer)
+/* we should not apply stars() at this stage, because some messages are already formatted html
+
var/star_chance = 0
if(dist > CLEAR_TELEPATHY_RANGE)
star_chance += dist
@@ -47,12 +52,10 @@
if(star_chance)
message = stars(message, star_chance)
+*/
var/mob/M = hearer
if(ismob(hearer))
- if(M.remote_hearers.len > CLEAR_TELEPATHY_LISTENERS)
- star_chance += M.remote_hearers.len * 10
-
if(M.next_telepathy_clue < world.time && prob(CLEAR_TELEPATHY_RANGE - dist))
to_chat(M, "
You feel as if somebody is eavesdropping on you.")
M.next_telepathy_clue = world.time + 30 SECONDS
@@ -60,6 +63,7 @@
to_chat(src, "
[hearer] [verb]: [message]")
telepathy_eavesdrop(source, message, verb, language)
+ show_runechat_message(source, language, capitalize(runechat_message), null, SHOWMSG_AUDIO)
/mob/proc/add_remote_hearer(mob/hearer)
LAZYADD(remote_hearers, hearer)
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index cdcd4d081cc4..f2756a6cef92 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -903,6 +903,8 @@ Note that amputating the affected organ does in fact remove the infection from t
to_chat(user, "
You sever [brainmob]'s brain's connection to the spine with [I]!")
brainmob.log_combat(user, "debrained with [I.name] (INTENT: [uppertext(user.a_intent)])")
+ SEND_SIGNAL(user, COMSIG_HUMAN_HARMED_OTHER, brainmob)
+
if(istype(src,/obj/item/organ/external/head/robot))
var/obj/item/device/mmi/posibrain/B = new(loc)
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 121f87fe482a..334a7d9ac0c7 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -268,6 +268,8 @@
to_chat(user, "
Ow...")
user.apply_effect(110,AGONY,0)
else if(!chambered.BB.nodamage)
+ if(ishuman(user))
+ SEND_SIGNAL(user, COMSIG_HUMAN_ON_SUICIDE, src)
user.apply_damage(chambered.BB.damage * 2.5, chambered.BB.damage_type, BP_HEAD, null, chambered.BB.damage_flags(), "Point blank shot in the mouth with \a [chambered.BB]")
user.death()
chambered.BB = null
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index c6c4eb5d31bf..466e42ce0fd8 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -113,6 +113,7 @@
else
reagents.trans_to_ingest(M, reagents.total_volume)
bitecount++
+ SEND_SIGNAL(M, COMSIG_HUMAN_ON_CONSUME, src)
On_Consume(M, silent)
return TRUE
@@ -1038,6 +1039,16 @@
trash = /obj/item/trash/chinese4
list_reagents = list("nutriment" = 1, "sugar" = 2, "rice" = 3)
+/obj/item/weapon/reagent_containers/food/snacks/chinese/lunarice
+ name = "luna-rice"
+ desc = "Это просто рис с синим пищевым красителем. ВЫ ПЕРЕПЛАЧИВАЕТЕ ЗА БРЕНД. ОСТАНОВИТЕСЬ."
+ cases = list("Луна-рис", "Луна-риса", "Луна-рису", "Луна-рис", "Луна-рисом", "Луна-рисе")
+ icon_state = "lunarice"
+ item_state_world = "lunarice_world"
+ trash = /obj/item/trash/lunarice
+ list_reagents = list("nutriment" = 3, "sugar" = 3, "rice" = 3)
+
+
/obj/item/weapon/reagent_containers/food/snacks/syndicake
name = "Syndi-Cake"
icon_state = "syndi_cakes"
diff --git a/code/modules/religion/pluvia_heaven.dm b/code/modules/religion/pluvia_heaven.dm
new file mode 100644
index 000000000000..6082978945cd
--- /dev/null
+++ b/code/modules/religion/pluvia_heaven.dm
@@ -0,0 +1,309 @@
+/var/global/list/available_pluvia_gongs = list()
+
+/obj/effect/landmark/heaven_landmark
+ name = "Heaven"
+ icon = 'icons/mob/landmarks.dmi'
+ icon_state = "x"
+ anchored = TRUE
+ layer = MOB_LAYER
+
+/area/pluvian_heaven
+ name = "Pluvian Heaven"
+ icon_state = "blue2"
+
+/turf/simulated/wall/heaven
+ icon = 'icons/turf/walls/has_false_walls/wall_heaven.dmi'
+ light_color = "#ffffff"
+ light_power = 2
+ light_range = 2
+
+/turf/simulated/floor/beach/water/waterpool/heaven
+ name = "Heaven"
+ cases = list("Рай", "Рая", "Раю", "Рай", "Раем", "Рае")
+ plane = PLANE_SPACE
+ light_color = "#ffffff"
+ light_power = 2
+ light_range = 2
+
+/obj/item/weapon/bless_vote
+ name = "Bless vote"
+ cases = list("Рекомендательное письмо", "Рекомендательного письма", "Рекомендательному письму", "Рекомендательное письмо", "Рекомендательным письмом", "Рекомендательном письме")
+ desc = "Билет до рая."
+ w_class = SIZE_TINY
+ icon = 'icons/obj/items.dmi'
+ icon_state = "bless-vote"
+ item_state_world = "bless-vote_world"
+ var/mob/living/carbon/human/owner
+ var/sign = FALSE
+ var/sign_place = "ПОДПИСАТЬ"
+
+/obj/item/weapon/bless_vote/attack_self(mob/living/carbon/user)
+ user.set_machine(src)
+ var/dat
+ dat = "
[CASE(src, NOMINATIVE_CASE)] для прохода в рай"
+ if(owner.gender == FEMALE)
+ dat += "
Подписывая эту бумагу, вы подтверждаете [CASE(owner, ACCUSATIVE_CASE)] достойной попасть в рай после смерти"
+ else
+ dat += "
Подписывая эту бумагу, вы подтверждаете [CASE(owner, ACCUSATIVE_CASE)] достойным попасть в рай после смерти"
+ dat += "
Проколите подушечку пальца об шип и приложите к месту для печати"
+ dat += "
[sign_place]"
+ var/datum/browser/popup = new(user, "window=bless_vote", "Рекомендательное письмо")
+ popup.set_content(dat)
+ popup.open()
+
+/obj/item/weapon/bless_vote/Topic(href, href_list)
+ ..()
+ var/mob/living/carbon/human/H = usr
+ if (usr.incapacitated() || src.loc != usr)
+ return
+ if(href_list["choice"] == "yes")
+ if(usr == owner)
+ to_chat(usr, "
Свое письмо нельзя подписывать!")
+ else if(sign)
+ to_chat(usr, "
Эта бумага уже подписана")
+ else if(H.mind.pluvian_social_credit > 0)
+ to_chat(usr, "
Подписано!")
+ sign_place = H.name
+ H.take_certain_bodypart_damage(list(BP_L_ARM, BP_R_ARM), (rand(9) + 1) / 10)
+ H.mind.pluvian_social_credit -= 1
+ if(!owner.ismindshielded() && !owner.isloyal())
+ owner.mind.pluvian_social_credit += 1
+ sign = TRUE
+ to_chat(owner, "
Ваш уровень кармы повышен!")
+ else
+ to_chat(usr, "
У вас нет права голоса")
+
+
+/obj/effect/proc_holder/spell/create_bless_vote
+ name = "Рекомендательное письмо"
+ cases = list("Рекомендательное письмо", "Рекомендательного письма", "Рекомендательному письму", "Рекомендательное письмо", "Рекомендательным письмом", "Рекомендательном письме")
+ range = 1
+ charge_max = 0
+ clothes_req = FALSE
+ action_icon_state = "pluvia_bless"
+ sound = 'sound/magic/heal.ogg'
+
+/obj/effect/proc_holder/spell/create_bless_vote/choose_targets(mob/user = usr)
+ var/obj/item/weapon/paper/P
+ var/obj/item/target
+ var/list/possible_targets = list()
+ for(P in orange(range, user))
+ possible_targets[P] = image(P.icon, P.icon_state)
+
+ if(possible_targets.len == 0)
+ revert_cast()
+ to_chat(user, "
Рядом с вами нет бумаги.")
+ return
+
+ target = show_radial_menu(user, user, possible_targets, radius = 36, tooltips = TRUE)
+ if(!target)
+ revert_cast()
+ return
+ perform(list(target), user=user)
+
+/obj/effect/proc_holder/spell/create_bless_vote/cast(list/targets, mob/living/carbon/human/user = usr)
+ var/obj/item/target = targets[1]
+ var/obj/item/weapon/bless_vote/V = new /obj/item/weapon/bless_vote(user.loc)
+ V.owner = user
+ user.take_certain_bodypart_damage(list(BP_L_ARM, BP_R_ARM), (rand(9) + 1) / 10)
+ to_chat(src, "
Ваша кровь растекается по бумаге, образуя символы")
+ qdel(target)
+
+
+/obj/effect/proc_holder/spell/no_target/ancestor_call
+ name = "Связь с предками"
+ cases = list("Связь с предками", "Связи с предками", "Связи с предками", "Связь с предками", "Связью с предками", "Связи с предками")
+ desc = "Попытайтесь связаться с душами предков"
+ action_icon_state = "pluvia_call"
+ clothes_req = FALSE
+ range = -1
+ charge_max = 20
+ sound = 'sound/magic/heal.ogg'
+ var/mob/living/fake_body
+ var/image/eye
+ var/target_loc
+ var/obj/my_gong
+
+/obj/effect/proc_holder/spell/no_target/ancestor_call/proc/mimic_message(datum/source, message)
+ fake_body.say(message)
+
+/obj/effect/proc_holder/spell/no_target/ancestor_call/cast(list/targets,mob/living/carbon/human/user = usr)
+ if(!fake_body)
+ if(available_pluvia_gongs.len == 0)
+ to_chat(user, "
Все линии связи сейчас заняты! Попробуйте позже")
+ return
+ if(!target_loc)
+ my_gong = pick(available_pluvia_gongs)
+ target_loc = my_gong.loc
+ user.adjustBrainLoss(2)
+ available_pluvia_gongs -= my_gong
+ fake_body = new /mob/living(target_loc)
+ fake_body.appearance = user.appearance
+ fake_body.name = user.real_name
+ fake_body.alpha = 127
+ RegisterSignal(user,COMSIG_HUMAN_SAY, PROC_REF(mimic_message))
+ user.reset_view(fake_body, TRUE)
+ fake_body.add_remote_hearer(user)
+ eye = image('icons/mob/human_face.dmi',"pluvia_ms_s")
+ eye.plane = LIGHTING_LAMPS_PLANE
+ eye.layer = ABOVE_LIGHTING_LAYER
+ user.add_overlay(eye)
+ user.hud_used.set_parallax(PARALLAX_HEAVEN)
+ else
+ UnregisterSignal(user, list(COMSIG_HUMAN_SAY, COMSIG_PARENT_QDELETING))
+ fake_body.remove_remote_hearer(user)
+ qdel(fake_body)
+ fake_body = null
+ target_loc = null
+ user.reset_view(null)
+ user.cut_overlay(eye)
+ available_pluvia_gongs += my_gong
+ user.hud_used.set_parallax(PARALLAX_CLASSIC)
+ user.clear_alert("Звонок")
+
+/obj/structure/pluvia_gong
+ name = "Gong"
+ desc = "Когда очень-очень нужно связаться с живыми"
+ cases = list("Гонг", "Гонга", "Гонгу", "Гонга", "Гонгом", "Гонге")
+ icon = 'icons/obj/pluvia_gong.dmi'
+ icon_state = "gong"
+ anchored = TRUE
+ var/next_ring = 0
+ var/mob/target
+
+/obj/item/weapon/melee/pluvia_gong_baton
+ name = "Gong`s stick"
+ desc = "Инструмент для плувийского гонга"
+ cases = list("Колотушка для гонга", "Колотушки для гонга", "Колотушке для гонга", "Колотушки для гонга", "Колотушкой для гонга", "Колотушке для гонга")
+ icon_state = "mallet"
+ item_state_world = "mallet_world"
+ item_state = "mallet"
+
+/obj/structure/pluvia_gong/atom_init()
+ . = ..()
+ available_pluvia_gongs += src
+
+/obj/structure/pluvia_gong/proc/ring(mob/user)
+ if(next_ring > world.time)
+ to_chat(user, "
Пожалуйста подождите [round((next_ring - world.time) * 0.1, 0.1)] секунд")
+ return
+ next_ring = world.time + 30 SECONDS
+ var/list/possible_targets = list()
+ for(var/mob/living/carbon/human/H in human_list)
+ if(H.mind && H != user && ispluvian(H))
+ if(istype(H.my_religion, /datum/religion/pluvia) || H.mind.pluvian_blessed)
+ possible_targets[H] = image(H.icon, H.icon_state)
+ var/mob/living/target = possible_targets[H]
+ target.copy_overlays(H)
+
+ visible_message("[bicon(src)]
[CASE(src, NOMINATIVE_CASE)] гудит от удара [CASE(user, ACCUSATIVE_CASE)].")
+ playsound(src, 'sound/effects/bell.ogg', VOL_EFFECTS_MASTER, 75, null)
+
+ if(possible_targets.len == 0)
+ to_chat(user, "
Список активных абонентов пуст")
+ return
+ target = show_radial_menu(user, user, possible_targets, radius = 36, tooltips = TRUE)
+ if(!target)
+ return
+ target.throw_alert("Звонок", /atom/movable/screen/alert/pluvia_ring)
+ target.playsound_local(null, 'sound/effects/bell.ogg', VOL_EFFECTS_MASTER, 75, null)
+ for(var/obj/effect/proc_holder/spell/no_target/ancestor_call/S in target.spell_list)
+ S.target_loc = src.loc
+ S.my_gong = src
+
+/obj/structure/pluvia_gong/attackby(obj/item/I,mob/user)
+ if(istype(I,/obj/item/weapon/melee/pluvia_gong_baton))
+ ring(user)
+
+/mob/living/simple_animal/ancestor_wisp
+ name = "Wisp"
+ real_name = "Wisp"
+ cases = list("Светлячок", "Светлячка", "Светлячку", "Светлячка", "Светлячком", "Светлячке")
+ desc = "Безобидный светлячок"
+ icon = 'icons/mob/mob.dmi'
+ icon_state = "wisp"
+ icon_living = "wisp"
+ stat = CONSCIOUS
+ maxHealth = 1
+ health = 1
+ melee_damage = 0
+ speed = 2
+ faction = "Station"
+ see_in_dark = 8
+ see_invisible = SEE_INVISIBLE_OBSERVER
+ invisibility = INVISIBILITY_OBSERVER
+ universal_understand = TRUE
+ universal_speak = FALSE
+ w_class = SIZE_MINUSCULE
+ density = FALSE
+ ventcrawler = 2
+ min_oxy = 0
+ max_oxy = 0
+ min_tox = 0
+ max_tox = 0
+ min_co2 = 0
+ max_co2 = 0
+ min_n2 = 0
+ max_n2 = 0
+ minbodytemp = 0
+ unsuitable_atoms_damage = 0
+ var/mob/living/carbon/human/my_body
+
+/mob/living/simple_animal/ancestor_wisp/UnarmedAttack(atom/A)
+ return
+
+/mob/living/simple_animal/ancestor_wisp/RangedAttack(atom/A, params)
+ return
+
+/mob/living/simple_animal/ancestor_wisp/start_pulling(atom/movable/AM)
+ return
+
+/mob/living/simple_animal/ancestor_wisp/proc/return_to_heaven()
+ set category = "Светлячок"
+ set name = "Вернуться в рай"
+ set desc = "Возвращает вас обратно в ваше тело"
+ death()
+
+/mob/living/simple_animal/ancestor_wisp/atom_init()
+ ..()
+ verbs += /mob/living/simple_animal/ancestor_wisp/proc/return_to_heaven
+
+/mob/living/simple_animal/ancestor_wisp/death()
+ . = ..()
+ if(mind && my_body)
+ mind.transfer_to(my_body)
+ verbs -= /mob/living/simple_animal/ancestor_wisp/proc/return_to_heaven
+ my_body.hud_used.set_parallax(PARALLAX_HEAVEN)
+ qdel(src)
+
+/mob/living/simple_animal/ancestor_wisp/Process_Spacemove(movement_dir = 0)
+ return 1
+
+/obj/effect/landmark/ancestor_wisp_start
+ name = "ancestor wisp start"
+ icon = 'icons/mob/landmarks.dmi'
+ icon_state = "x"
+ anchored = TRUE
+ layer = MOB_LAYER
+
+/obj/structure/moonwell
+ name = "Moonwell"
+ cases = list("Лунный колодец", "Лунного колодца", "Лунному колодцу", "Лунного колодца", "Лунным колодцем", "Лунном колодце")
+ desc = "Ну-ка посмотрим, что там у станционеров."
+ icon = 'icons/obj/structures/moonwell.dmi'
+ icon_state = "well"
+ var/next_wisp = 0
+ density = TRUE
+ anchored = TRUE
+
+/obj/structure/moonwell/attack_hand(mob/living/carbon/human/user)
+ if(user.get_species() in list(PLUVIAN_SPIRIT))
+ if(next_wisp > world.time)
+ to_chat(user, "
Пожалуйста подождите [round((next_wisp - world.time) * 0.1, 0.1)] секунд.")
+ return
+ next_wisp = world.time + 70 SECONDS
+ var/turf/T = pick_landmarked_location("ancestor wisp start")
+ var/mob/living/simple_animal/ancestor_wisp/new_wisp = new /mob/living/simple_animal/ancestor_wisp(T)
+ user.hud_used.set_parallax(PARALLAX_CLASSIC)
+ user.mind.transfer_to(new_wisp)
+ new_wisp.my_body = user
diff --git a/code/modules/religion/religion.dm b/code/modules/religion/religion.dm
index fdc2b19feeb6..5ac5ae0ba933 100644
--- a/code/modules/religion/religion.dm
+++ b/code/modules/religion/religion.dm
@@ -567,6 +567,8 @@
return TRUE
/datum/religion/proc/add_member(mob/M, holy_role)
+ SHOULD_CALL_PARENT(TRUE)
+
if(is_member(M) || !can_convert(M))
return FALSE
@@ -587,6 +589,8 @@
return
/datum/religion/proc/remove_member(mob/M)
+ SHOULD_CALL_PARENT(TRUE)
+
if(!is_member(M))
return FALSE
diff --git a/code/modules/religion/religion_types/cult.dm b/code/modules/religion/religion_types/cult.dm
index cfb1c916e983..5c33a15c82dc 100644
--- a/code/modules/religion/religion_types/cult.dm
+++ b/code/modules/religion/religion_types/cult.dm
@@ -242,7 +242,7 @@
M.AddSpell(new type(src))
/datum/religion/cult/can_convert(mob/M)
- if(M.my_religion)
+ if(M.my_religion && !istype(M.my_religion, /datum/religion/pluvia))
return FALSE
if(M.stat == DEAD)
return FALSE
@@ -250,7 +250,7 @@
return FALSE
if(ishuman(M))
var/mob/living/carbon/human/H = M
- if(H.species.flags[NO_BLOOD])
+ if(H.species.flags[NO_BLOOD] || H.mind.pluvian_blessed)
return FALSE
if(M.ismindprotect())
return FALSE
diff --git a/code/modules/religion/religion_types/pluvia.dm b/code/modules/religion/religion_types/pluvia.dm
new file mode 100644
index 000000000000..d0c25cfcd0e9
--- /dev/null
+++ b/code/modules/religion/religion_types/pluvia.dm
@@ -0,0 +1,147 @@
+#define DEADLY_HARAM "maximum_haram_detected"
+
+/datum/religion/pluvia
+ name = "Путь Плувиийца"
+ deity_names_by_name = list(
+ "Путь Плувиийца" = list("Лунарис")
+ )
+ bible_info_by_name = list(
+ "Путь Плувиийца" = /datum/bible_info/chaplain/bible,
+ )
+
+ emblem_info_by_name = list(
+ "Путь Плувиийца" = "christianity",
+ )
+
+ altar_info_by_name = list(
+ "Путь Плувиийца" = "chirstianaltar",
+ )
+ carpet_type_by_name = list(
+ "Путь Плувиийца" = /turf/simulated/floor/carpet,
+ )
+ style_text = "piety"
+ symbol_icon_state = null
+ var/haram_harm = 2
+ var/haram_drunk = 1
+ var/haram_food = 0.5
+ var/haram_carpet = 0.25
+ var/haram_suicide = DEADLY_HARAM
+
+ var/social_credit_threshold = 3
+
+/datum/religion/pluvia/setup_religions()
+ global.pluvia_religion = src
+ all_religions += src
+
+ social_credit_threshold = (SSticker.totalPlayersReady/10) + 3
+
+/datum/religion/pluvia/add_member(mob/living/carbon/human/H)
+ if(!ispluvian(H))
+ return
+ if(istype(H.my_religion, /datum/religion/pluvia))
+ return
+ H.AddSpell(new /obj/effect/proc_holder/spell/create_bless_vote)
+ H.AddSpell(new /obj/effect/proc_holder/spell/no_target/ancestor_call)
+ register_haram_signals(H)
+ . = ..()
+
+/datum/religion/pluvia/remove_member(mob/M)
+ . = ..()
+ for(var/obj/effect/proc_holder/spell/create_bless_vote/spell_to_remove in M.spell_list)
+ M.RemoveSpell(spell_to_remove)
+ for(var/obj/effect/proc_holder/spell/no_target/spell_to_remove in M.spell_list)
+ M.RemoveSpell(spell_to_remove)
+ unregister_haram_signals(M)
+ . = ..()
+
+/datum/religion/pluvia/proc/register_haram_signals(mob/M)
+ RegisterSignal(M, COMSIG_HUMAN_HARMED_OTHER, PROC_REF(harm_haram))
+ RegisterSignal(M, COMSIG_HUMAN_ON_SUICIDE, PROC_REF(suicide_haram))
+ RegisterSignal(M, COMSIG_HUMAN_ON_ADJUST_DRUGINESS, PROC_REF(drunk_haram))
+ RegisterSignal(M, COMSIG_HUMAN_ON_CONSUME, PROC_REF(food_haram))
+ RegisterSignal(M, COMSIG_HUMAN_ON_CARPET, PROC_REF(carpet_haram))
+
+/datum/religion/pluvia/proc/unregister_haram_signals(mob/M)
+ UnregisterSignal(M, list(COMSIG_HUMAN_HARMED_OTHER, COMSIG_PARENT_QDELETING))
+ UnregisterSignal(M, list(COMSIG_HUMAN_ON_SUICIDE, COMSIG_PARENT_QDELETING))
+ UnregisterSignal(M, list(COMSIG_HUMAN_ON_ADJUST_DRUGINESS, COMSIG_PARENT_QDELETING))
+ UnregisterSignal(M, list(COMSIG_HUMAN_ON_CONSUME, COMSIG_PARENT_QDELETING))
+ UnregisterSignal(M, list(COMSIG_HUMAN_ON_CARPET, COMSIG_PARENT_QDELETING))
+
+// todo: change to element like cult things
+/datum/religion/pluvia/proc/bless(mob/M)
+ if(!ispluvian(M))
+ return
+
+ if(!M.mind || M.mind.pluvian_blessed)
+ return
+
+ unregister_haram_signals(M)
+
+ to_chat(M, "
\ Вам известно, что после смерти вы попадете в рай")
+ M.mind.pluvian_blessed = 1
+ M.mind.pluvian_social_credit = 2
+ ADD_TRAIT(M, TRAIT_SEE_GHOSTS, QUALITY_TRAIT)
+ var/image/eye = image('icons/mob/human_face.dmi', icon_state = "pluvia_ms_s")
+ eye.plane = LIGHTING_LAMPS_PLANE
+ eye.layer = ABOVE_LIGHTING_LAYER
+ M.add_overlay(eye)
+
+/datum/religion/pluvia/proc/adjust_haram(mob/living/carbon/human/target, haram_amount, reason)
+ if(haram_amount == DEADLY_HARAM || ((target.mind.pluvian_haram_points + haram_amount) >= PLUVIAN_HARAM_THRESHOLD))
+ global.pluvia_religion.remove_member(target, HOLY_ROLE_PRIEST)
+ target.mind.pluvian_social_credit = 0
+ to_chat(target, "
\ [reason] Врата рая закрыты для вас. Ищите себе другого покровителя.")
+ message_admins("Pluvian [key_name_admin(target)] lose /datum/religion/pluvia" )
+ log_admin("Pluvian [key_name(target)] lose /datum/religion/pluvia")
+ target.playsound_local(null, 'sound/effects/heaven_fail.ogg', VOL_EFFECTS_MASTER, null, FALSE)
+ return TRUE
+ else
+ target.mind.pluvian_haram_points += haram_amount
+ target.playsound_local(null, 'sound/effects/haram.ogg', VOL_EFFECTS_MASTER, null, FALSE)
+ to_chat(target, "
\ [reason]")
+ message_admins("Pluvian [key_name_admin(target)] haram - [reason]")
+ log_admin("Pluvian [key_name(target)] haram - [reason]")
+ return FALSE
+
+/datum/religion/pluvia/proc/harm_haram(datum/source, mob/living/carbon/human/target)
+ SIGNAL_HANDLER
+
+ var/mob/living/carbon/human/attacker = source
+ if(istype(target.my_religion, /datum/religion/pluvia))
+ adjust_haram(attacker, haram_harm, "Вы нарушаете первую заповедь!")
+
+/datum/religion/pluvia/proc/suicide_haram(mob/living/carbon/human/target)
+ SIGNAL_HANDLER
+
+ adjust_haram(target, haram_suicide, "Вы нарушили вторую заповедь.")
+
+/datum/religion/pluvia/proc/drunk_haram(mob/living/carbon/human/target)
+ SIGNAL_HANDLER
+
+ if(!adjust_haram(target, haram_drunk, "Вы нарушаете вторую заповедь!"))
+ for(var/datum/reagent/R in target.reagents.reagent_list)
+ if(istype(R, /datum/reagent/consumable/ethanol) || istype(R, /datum/reagent/space_drugs) || istype(R,/datum/reagent/ambrosium))
+ target.reagents.del_reagent(R.id)
+ target.SetDrunkenness(0)
+ target.setDrugginess(0)
+
+/datum/religion/pluvia/proc/food_haram(datum/source, obj/item/weapon/reagent_containers/food/snacks/target)
+ SIGNAL_HANDLER
+
+ var/mob/living/carbon/human/H = source
+
+ if(istype(target.loc, /obj/item/weapon/kitchen/utensil))
+ return
+ adjust_haram(H, haram_food, "Вы нарушаете четвертую заповедь!")
+
+/datum/religion/pluvia/proc/carpet_haram(mob/living/carbon/human/target)
+ SIGNAL_HANDLER
+
+ if(!target.shoes || target.lying || target.crawling || target.buckled)
+ return
+ if(target.alerts["buckled"])
+ return
+ adjust_haram(target, haram_carpet, "Вы нарушаете пятую заповедь!")
+
+#undef DEADLY_HARAM
diff --git a/code/modules/surgery/braincore.dm b/code/modules/surgery/braincore.dm
index b6fbd4a41497..2fb2e8b98a39 100644
--- a/code/modules/surgery/braincore.dm
+++ b/code/modules/surgery/braincore.dm
@@ -104,7 +104,7 @@
borer.detatch() //Should remove borer if the brain is removed - RR
target.log_combat(user, "debrained with [tool.name] (INTENT: [uppertext(user.a_intent)])")
-
+ SEND_SIGNAL(user, COMSIG_HUMAN_HARMED_OTHER, target)
var/obj/item/brain/B
B = new(target.loc)
B.transfer_identity(target)
diff --git a/code/modules/unarmed_combat/combos/harmful.dm b/code/modules/unarmed_combat/combos/harmful.dm
index 977751a9f01f..4c559899fca8 100644
--- a/code/modules/unarmed_combat/combos/harmful.dm
+++ b/code/modules/unarmed_combat/combos/harmful.dm
@@ -477,7 +477,7 @@
var/end_T_descriptor = "
tile at [COORD(end_T)] in area [get_area(end_T)]"
M.log_combat(attacker, "throwm from [start_T_descriptor] with the target [end_T_descriptor]")
-
+ SEND_SIGNAL(attacker, COMSIG_HUMAN_HARMED_OTHER, M)
M.throw_at(target, 6, 8, attacker)
apply_effect(3, STUN, M, attacker, attack_obj=attack_obj, min_value=1)
apply_effect(7, WEAKEN, M, attacker, attack_obj=attack_obj, min_value=1)
diff --git a/code/modules/unarmed_combat/living_procs_defines.dm b/code/modules/unarmed_combat/living_procs_defines.dm
index 847250c13b62..30bccbadb97f 100644
--- a/code/modules/unarmed_combat/living_procs_defines.dm
+++ b/code/modules/unarmed_combat/living_procs_defines.dm
@@ -272,6 +272,7 @@
return FALSE
log_combat(attacker, "[damVerb]ed")
+ SEND_SIGNAL(attacker, COMSIG_HUMAN_HARMED_OTHER, src)
var/armor_block = 0
var/obj/item/organ/external/BP = attacker.get_targetzone() // apply_damage accepts both the bodypart and the zone.
diff --git a/code/modules/vehicles/spacebike.dm b/code/modules/vehicles/spacebike.dm
index 0d6227282845..dd60ea8e509e 100644
--- a/code/modules/vehicles/spacebike.dm
+++ b/code/modules/vehicles/spacebike.dm
@@ -129,6 +129,7 @@
visible_message("
[Driver] drives over [L]!")
L.log_combat(Driver, "driven over with [src]")
+ SEND_SIGNAL(Driver, COMSIG_HUMAN_HARMED_OTHER, L)
playsound(src, 'sound/effects/splat.ogg', VOL_EFFECTS_MASTER)
L.stop_pulling()
diff --git a/icons/effects/pluvia_water.dmi b/icons/effects/pluvia_water.dmi
new file mode 100644
index 000000000000..a0a87a6cf923
Binary files /dev/null and b/icons/effects/pluvia_water.dmi differ
diff --git a/icons/hud/actions.dmi b/icons/hud/actions.dmi
index e44517488eb6..7190ad53d1d0 100644
Binary files a/icons/hud/actions.dmi and b/icons/hud/actions.dmi differ
diff --git a/icons/hud/screen_alert.dmi b/icons/hud/screen_alert.dmi
index 9291d60fbca0..2a1ea35f33ae 100644
Binary files a/icons/hud/screen_alert.dmi and b/icons/hud/screen_alert.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index e0fe840d8a3d..7d6a08d82fe0 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi
index 0b141c369765..afcccc3062e8 100644
Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ
diff --git a/icons/mob/human_races/r_pluvian.dmi b/icons/mob/human_races/r_pluvian.dmi
new file mode 100644
index 000000000000..074af8365771
Binary files /dev/null and b/icons/mob/human_races/r_pluvian.dmi differ
diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi
index f39fd47cf4af..406ac97484cf 100644
Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ
diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi
index daed1bf6df76..bf79e86b7689 100644
Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ
diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi
index fcb3dadc4258..80ff807389eb 100644
Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ
diff --git a/icons/mob/monkey.dmi b/icons/mob/monkey.dmi
index 06a01e025819..20496df2bec5 100644
Binary files a/icons/mob/monkey.dmi and b/icons/mob/monkey.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 6585acf42c60..91dd1d871315 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/mob/suit_fat.dmi b/icons/mob/suit_fat.dmi
index b7ee0f033271..759772b20361 100644
Binary files a/icons/mob/suit_fat.dmi and b/icons/mob/suit_fat.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index fd95ed81ce03..9d39707538d8 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/mob/uniform_fat.dmi b/icons/mob/uniform_fat.dmi
index 71df0feacb8b..cabbdbe1a4ab 100644
Binary files a/icons/mob/uniform_fat.dmi and b/icons/mob/uniform_fat.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 29188c0a9646..b4b47b374a3a 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 23bd37babc40..e37e1aac4a34 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index bbc37434b585..f0f6d28612af 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi
index 7eab2a0cc2bf..ea543a359c60 100644
Binary files a/icons/obj/food.dmi and b/icons/obj/food.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index 514479d54ac5..bcf76125bead 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/pluvia_gong.dmi b/icons/obj/pluvia_gong.dmi
new file mode 100644
index 000000000000..fbab40f2812e
Binary files /dev/null and b/icons/obj/pluvia_gong.dmi differ
diff --git a/icons/obj/structures/moonwell.dmi b/icons/obj/structures/moonwell.dmi
new file mode 100644
index 000000000000..1404a623394d
Binary files /dev/null and b/icons/obj/structures/moonwell.dmi differ
diff --git a/icons/obj/trash.dmi b/icons/obj/trash.dmi
index e7628cbcf8ec..3474dc8a6aac 100644
Binary files a/icons/obj/trash.dmi and b/icons/obj/trash.dmi differ
diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi
index a37048f17a38..d1ed0dce3ba2 100644
Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ
diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi
index f600c4b59f99..5d0077698090 100644
Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ
diff --git a/icons/turf/walls/has_false_walls/wall_heaven.dmi b/icons/turf/walls/has_false_walls/wall_heaven.dmi
new file mode 100644
index 000000000000..3169b35defe9
Binary files /dev/null and b/icons/turf/walls/has_false_walls/wall_heaven.dmi differ
diff --git a/maps/boxstation/boxstation.dmm b/maps/boxstation/boxstation.dmm
index 355b37da50d9..a7848b07c0ab 100644
--- a/maps/boxstation/boxstation.dmm
+++ b/maps/boxstation/boxstation.dmm
@@ -19069,6 +19069,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 10
},
+/obj/effect/landmark/ancestor_wisp_start,
/turf/simulated/floor,
/area/station/hallway/primary/central)
"aHC" = (
@@ -20858,6 +20859,7 @@
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
},
+/obj/effect/landmark/ancestor_wisp_start,
/turf/simulated/floor,
/area/station/hallway/primary/central)
"aKU" = (
@@ -32568,6 +32570,7 @@
d2 = 2;
icon_state = "1-2"
},
+/obj/effect/landmark/ancestor_wisp_start,
/turf/simulated/floor,
/area/station/hallway/primary/central)
"bfz" = (
@@ -42716,6 +42719,7 @@
dir = 1;
icon_state = "pipe-c"
},
+/obj/effect/landmark/ancestor_wisp_start,
/turf/simulated/floor,
/area/station/hallway/primary/central)
"bxU" = (
@@ -42855,6 +42859,7 @@
dir = 8;
icon_state = "pipe-c"
},
+/obj/effect/landmark/ancestor_wisp_start,
/turf/simulated/floor,
/area/station/hallway/primary/central)
"byf" = (
diff --git a/maps/centcom/centcom.dmm b/maps/centcom/centcom.dmm
index 8921a7d46c11..f6a720ecccd3 100644
--- a/maps/centcom/centcom.dmm
+++ b/maps/centcom/centcom.dmm
@@ -19268,6 +19268,21 @@
icon_state = "grimy"
},
/area/centcom/living)
+"aTz" = (
+/obj/structure/rack,
+/obj/item/clothing/under/pluvia,
+/obj/item/clothing/under/pluvia,
+/obj/item/clothing/under/pluvia_gold,
+/obj/item/clothing/under/pluvia_gold,
+/obj/item/clothing/shoes/white,
+/obj/item/clothing/shoes/white,
+/obj/item/clothing/shoes/white,
+/obj/item/clothing/head/pluvia,
+/obj/item/clothing/head/pluvia,
+/obj/item/clothing/head/pluvia,
+/obj/item/clothing/head/pluvia,
+/turf/unsimulated/floor/carpet/blue2,
+/area/pluvian_heaven)
"aTA" = (
/obj/structure/window/thin/reinforced{
dir = 4
@@ -22860,6 +22875,12 @@
},
/turf/unsimulated/floor,
/area/centcom/specops)
+"bXJ" = (
+/obj/item/weapon/flora/pottedplant/flower,
+/turf/unsimulated/floor{
+ icon_state = "heavenfull2"
+ },
+/area/pluvian_heaven)
"bYb" = (
/turf/unsimulated/floor{
dir = 10;
@@ -22919,6 +22940,12 @@
icon_state = "grass2"
},
/area/centcom/evac)
+"ccr" = (
+/obj/structure/stool/bed/chair/wood/normal{
+ dir = 4
+ },
+/turf/unsimulated/floor/carpet/blue2,
+/area/pluvian_heaven)
"ccw" = (
/obj/machinery/conveyor{
dir = 1;
@@ -22945,6 +22972,14 @@
},
/turf/unsimulated/floor/cult/lava,
/area/custom/cult)
+"cdP" = (
+/obj/machinery/media/jukebox/bar{
+ use_power = 0
+ },
+/turf/unsimulated/floor{
+ icon_state = "heavenfull"
+ },
+/area/pluvian_heaven)
"ceb" = (
/obj/machinery/door_control{
id = "CKLoaddoor2";
@@ -23025,6 +23060,11 @@
icon_state = "brown"
},
/area/velocity)
+"cie" = (
+/turf/simulated/floor{
+ icon_state = "Heaven_Stairs2_wide"
+ },
+/area/pluvian_heaven)
"cjb" = (
/obj/machinery/door_control{
id = "ck_warehouse";
@@ -23298,6 +23338,10 @@
icon_state = "freezerfloor"
},
/area/velocity)
+"cCP" = (
+/obj/effect/light_emitter,
+/turf/unsimulated/floor/carpet/blue2,
+/area/pluvian_heaven)
"cDb" = (
/obj/machinery/door/poddoor{
density = 0;
@@ -23340,6 +23384,12 @@
icon_state = "hydrofloor"
},
/area/velocity)
+"cHH" = (
+/obj/effect/light_emitter,
+/turf/unsimulated/floor{
+ icon_state = "heavenfull2"
+ },
+/area/pluvian_heaven)
"cIb" = (
/obj/machinery/firealarm{
pixel_y = 24
@@ -23805,6 +23855,12 @@
/obj/structure/sign/warning/moving_parts,
/turf/unsimulated/wall/like_a_normal/beige,
/area/velocity)
+"doD" = (
+/turf/unsimulated/floor{
+ dir = 4;
+ icon_state = "Heaven_Stairs_wide"
+ },
+/area/pluvian_heaven)
"dpb" = (
/obj/structure/rail_centcomm{
icon_state = "rail_03"
@@ -23819,6 +23875,17 @@
/obj/machinery/door/poddoor,
/turf/unsimulated/wall/like_a_normal/beige,
/area/velocity)
+"dqf" = (
+/turf/unsimulated/floor{
+ icon_state = "heaven"
+ },
+/area/pluvian_heaven)
+"dqo" = (
+/turf/simulated/floor/beach/water/waterpool/heaven{
+ density = 1;
+ opacity = 1
+ },
+/area/pluvian_heaven)
"drb" = (
/obj/machinery/door/poddoor{
density = 0;
@@ -24081,6 +24148,11 @@
/obj/machinery/door/firedoor,
/turf/unsimulated/floor,
/area/velocity/checkpoint)
+"dLD" = (
+/turf/unsimulated/floor{
+ icon_state = "Heaven_stairs_middle"
+ },
+/area/pluvian_heaven)
"dMb" = (
/obj/structure/disposalpipe/junction{
dir = 1;
@@ -24745,6 +24817,11 @@
},
/turf/unsimulated/floor,
/area/centcom/evac)
+"eNH" = (
+/turf/simulated/floor{
+ icon_state = "Heaven_stairs_middle"
+ },
+/area/pluvian_heaven)
"ePb" = (
/obj/machinery/door/airlock/centcom{
dir = 4;
@@ -24832,6 +24909,13 @@
},
/turf/environment/space,
/area/shuttle/officer/velocity)
+"eXK" = (
+/obj/effect/light_emitter,
+/obj/structure/moonwell,
+/turf/unsimulated/floor{
+ icon_state = "heavenfull"
+ },
+/area/pluvian_heaven)
"eYb" = (
/turf/unsimulated/floor{
icon_state = "engine"
@@ -24862,6 +24946,12 @@
},
/turf/unsimulated/floor,
/area/centcom/prison)
+"eZh" = (
+/turf/unsimulated/floor{
+ dir = 1;
+ icon_state = "heaven"
+ },
+/area/pluvian_heaven)
"eZK" = (
/mob/living/silicon/decoy{
icon_state = "ai-malf";
@@ -25088,6 +25178,11 @@
icon_state = "dark"
},
/area/centcom/specops)
+"frA" = (
+/obj/structure/table,
+/obj/item/toy/cards,
+/turf/unsimulated/floor/carpet/blue2,
+/area/pluvian_heaven)
"fsb" = (
/obj/machinery/door/airlock/centcom{
dir = 4;
@@ -25344,6 +25439,14 @@
icon_state = "rampbottom"
},
/area/velocity)
+"fSg" = (
+/obj/structure/rack,
+/obj/item/clothing/suit/pluvia_balance,
+/obj/item/clothing/suit/pluvia_balance,
+/obj/item/clothing/suit/pluvia_balance,
+/obj/item/clothing/suit/pluvia_balance,
+/turf/unsimulated/floor/carpet/blue2,
+/area/pluvian_heaven)
"fTb" = (
/obj/effect/decal/turf_decal{
icon_state = "warn"
@@ -25879,6 +25982,10 @@
icon_state = "dark"
},
/area/centcom/control)
+"gEJ" = (
+/obj/structure/dresser,
+/turf/unsimulated/floor/carpet/blue2,
+/area/pluvian_heaven)
"gFb" = (
/obj/structure/sign/velocity_overlay{
desc = "Parking mark";
@@ -26199,6 +26306,12 @@
icon_state = "engine"
},
/area/velocity)
+"hfm" = (
+/turf/unsimulated/floor{
+ dir = 5;
+ icon_state = "heaven"
+ },
+/area/pluvian_heaven)
"hgb" = (
/obj/effect/decal/turf_decal{
dir = 1;
@@ -26593,6 +26706,11 @@
},
/turf/unsimulated/floor,
/area/centcom/tdome)
+"hQz" = (
+/obj/effect/light_emitter,
+/obj/structure/table,
+/turf/unsimulated/floor/carpet/blue2,
+/area/pluvian_heaven)
"hRb" = (
/obj/effect/decal/turf_decal{
icon_state = "warn"
@@ -26720,6 +26838,9 @@
},
/turf/simulated/shuttle/floor/vox,
/area/custom/syndicate_mothership/elite_squad)
+"hZB" = (
+/turf/simulated/floor/beach/water/waterpool/heaven,
+/area/pluvian_heaven)
"iab" = (
/obj/structure/window/thin/reinforced,
/obj/machinery/shower/free{
@@ -26869,6 +26990,9 @@
icon_state = "darkblue"
},
/area/centcom/control)
+"itR" = (
+/turf/simulated/wall/heaven,
+/area/pluvian_heaven)
"iub" = (
/obj/machinery/light,
/obj/item/weapon/flora/random,
@@ -27192,6 +27316,12 @@
icon_state = "white"
},
/area/centcom/holding)
+"jal" = (
+/obj/item/weapon/melee/pluvia_gong_baton,
+/turf/unsimulated/floor{
+ icon_state = "heavenfull2"
+ },
+/area/pluvian_heaven)
"jaA" = (
/obj/structure/stool/bed/chair/metal/blue{
dir = 4
@@ -27713,6 +27843,13 @@
icon_state = "brown"
},
/area/centcom/bar)
+"jYM" = (
+/obj/effect/light_emitter,
+/turf/unsimulated/floor{
+ dir = 10;
+ icon_state = "heaven"
+ },
+/area/pluvian_heaven)
"jZb" = (
/obj/machinery/light{
dir = 1
@@ -27954,6 +28091,11 @@
icon_state = "dark"
},
/area/centcom/living)
+"kuZ" = (
+/turf/unsimulated/floor{
+ icon_state = "Heaven_Stairs_wide"
+ },
+/area/pluvian_heaven)
"kvb" = (
/obj/machinery/implantchair,
/turf/unsimulated/floor{
@@ -28076,6 +28218,26 @@
icon_state = "dark"
},
/area/centcom/specops)
+"kEX" = (
+/obj/structure/rack,
+/obj/item/clothing/under/pluvia_gold,
+/obj/item/clothing/under/pluvia_gold,
+/obj/item/clothing/under/pluvia,
+/obj/item/clothing/under/pluvia,
+/obj/item/clothing/shoes/white,
+/obj/item/clothing/shoes/white,
+/obj/item/clothing/shoes/white,
+/obj/item/clothing/head/pluvia,
+/obj/item/clothing/head/pluvia,
+/obj/item/clothing/head/pluvia,
+/obj/item/clothing/head/pluvia,
+/obj/item/clothing/head/pluvia/white,
+/obj/item/clothing/head/pluvia/white,
+/obj/item/clothing/head/pluvia/white,
+/obj/item/clothing/head/pluvia/white,
+/obj/item/clothing/head/pluvia/white,
+/turf/unsimulated/floor/carpet/blue2,
+/area/pluvian_heaven)
"kFb" = (
/obj/machinery/light{
dir = 1
@@ -28353,6 +28515,14 @@
icon_state = "neutralcorner"
},
/area/centcom/bar)
+"lfe" = (
+/obj/structure/rack,
+/obj/item/clothing/suit/pluvia_morality,
+/obj/item/clothing/suit/pluvia_morality,
+/obj/item/clothing/suit/pluvia_morality,
+/obj/item/clothing/suit/pluvia_morality,
+/turf/unsimulated/floor/carpet/blue2,
+/area/pluvian_heaven)
"lgb" = (
/obj/structure/stool/bed/chair/comfy/black,
/turf/unsimulated/floor{
@@ -28413,6 +28583,12 @@
icon_state = "bcircuitoff"
},
/area/custom/syndicate_mothership/control)
+"lmp" = (
+/obj/structure/mineral_door/silver,
+/turf/unsimulated/floor{
+ icon_state = "heavenfull2"
+ },
+/area/pluvian_heaven)
"lnb" = (
/obj/structure/ore_box,
/turf/unsimulated/floor{
@@ -28573,6 +28749,14 @@
icon_state = "brown"
},
/area/centcom/bar)
+"lCv" = (
+/obj/structure/pluvia_gong{
+ pixel_x = -15
+ },
+/turf/unsimulated/floor{
+ icon_state = "heavenfull2"
+ },
+/area/pluvian_heaven)
"lDb" = (
/obj/machinery/light,
/turf/unsimulated/floor{
@@ -29126,6 +29310,11 @@
icon_state = "grass2"
},
/area/centcom/evac)
+"mHr" = (
+/obj/structure/table,
+/obj/item/weapon/storage/pill_bottle/dice,
+/turf/unsimulated/floor/carpet/blue2,
+/area/pluvian_heaven)
"mHG" = (
/obj/machinery/light{
dir = 1
@@ -29497,6 +29686,12 @@
icon_state = "redyellowfull"
},
/area/centcom/tdome/tdomeadmin)
+"nsr" = (
+/obj/structure/stool/bed/chair/wood/normal{
+ dir = 8
+ },
+/turf/unsimulated/floor/carpet/blue2,
+/area/pluvian_heaven)
"ntb" = (
/obj/structure/stool/bed/chair/metal,
/turf/unsimulated/floor{
@@ -29643,6 +29838,11 @@
icon_state = "redyellowfull"
},
/area/centcom/tdome/tdomeadmin)
+"nGp" = (
+/turf/unsimulated/floor{
+ icon_state = "heavenfull"
+ },
+/area/pluvian_heaven)
"nGC" = (
/obj/machinery/cryopod/right{
storage = 0
@@ -30018,6 +30218,13 @@
},
/turf/environment/space,
/area/shuttle/escape/centcom)
+"opp" = (
+/obj/structure/mineral_door/silver,
+/turf/unsimulated/floor{
+ dir = 8;
+ icon_state = "heaven"
+ },
+/area/pluvian_heaven)
"oqb" = (
/obj/structure/object_wall/evac{
icon_state = "11,8"
@@ -30216,6 +30423,12 @@
},
/turf/simulated/shuttle/floor/evac/sec2,
/area/shuttle/escape/centcom)
+"oPM" = (
+/turf/unsimulated/floor{
+ dir = 4;
+ icon_state = "Heaven_stairs_middle"
+ },
+/area/pluvian_heaven)
"oQb" = (
/obj/machinery/light/spot{
dir = 4
@@ -30448,6 +30661,11 @@
},
/turf/environment/space,
/area/shuttle/escape/centcom)
+"pnl" = (
+/turf/simulated/floor{
+ icon_state = "Heaven_Stairs_wide"
+ },
+/area/pluvian_heaven)
"pnw" = (
/obj/structure/window/thin/reinforced{
dir = 1
@@ -30470,6 +30688,12 @@
},
/turf/environment/space,
/area/shuttle/escape/centcom)
+"pos" = (
+/turf/unsimulated/floor{
+ dir = 4;
+ icon_state = "Heaven_Stairs2_wide"
+ },
+/area/pluvian_heaven)
"ppb" = (
/obj/structure/object_wall/evac{
icon_state = "10,24";
@@ -30498,6 +30722,15 @@
},
/turf/environment/space,
/area/shuttle/escape/centcom)
+"psf" = (
+/obj/structure/table/woodentable,
+/obj/machinery/chem_dispenser/beer{
+ dispensable_reagents = list("singulo","demonsblood","lean","hippiesdelight","devilskiss","kvass","doctorsdelight","atomicbomb","nuka_cola","patron","tonic","beer","kahlua","whiskey","wine","vodka","gin","rum","tequilla","vermouth","cognac","ale","mead","sake");
+ name = "heaven booze dispenser";
+ pixel_y = 6
+ },
+/turf/unsimulated/floor/carpet/blue2,
+/area/pluvian_heaven)
"ptb" = (
/obj/structure/object_wall/evac{
icon_state = "8,23";
@@ -30538,6 +30771,12 @@
icon_state = "floor"
},
/area/shuttle/trader/space)
+"pxO" = (
+/turf/unsimulated/floor{
+ dir = 10;
+ icon_state = "heaven"
+ },
+/area/pluvian_heaven)
"pya" = (
/obj/effect/decal/turf_decal/orange{
dir = 8;
@@ -30737,6 +30976,15 @@
icon_state = "floorcatwalk"
},
/area/custom/syndicate_mothership/elite_squad)
+"pWp" = (
+/obj/structure/rack,
+/obj/item/clothing/suit/pluvia_trick,
+/obj/item/clothing/suit/pluvia_trick,
+/obj/item/clothing/suit/pluvia_trick,
+/obj/item/clothing/suit/pluvia_trick,
+/obj/item/clothing/suit/pluvia_trick,
+/turf/unsimulated/floor/carpet/blue2,
+/area/pluvian_heaven)
"pXb" = (
/obj/structure/object_wall/evac{
icon_state = "2,6"
@@ -30805,6 +31053,12 @@
icon_state = "grass2"
},
/area/centcom/evac)
+"qlq" = (
+/turf/unsimulated/floor{
+ dir = 4;
+ icon_state = "heaven"
+ },
+/area/pluvian_heaven)
"qnM" = (
/obj/effect/step_trigger/thrower{
direction = 4;
@@ -30813,6 +31067,15 @@
},
/turf/environment/space,
/area/space)
+"qpf" = (
+/obj/structure/table/woodentable,
+/obj/machinery/chem_dispenser/soda{
+ dispensable_reagents = list("water","ice","coffee","cream","tea","tea","cola","spacemountainwind","dr_gibb","space_up","tonic","sodawater","lemon_lime","sugar","orangejuice","tomatojuice","banana","limejuice","watermelonjuice","berryjuice","grapejuice","lemonjuice","milk","soymilk","nothing");
+ name = "heaven soda fountain";
+ pixel_y = 6
+ },
+/turf/unsimulated/floor/carpet/blue2,
+/area/pluvian_heaven)
"qsd" = (
/obj/machinery/recharge_station,
/obj/structure/sign/poster/contraband/borg_fancy_2{
@@ -30839,6 +31102,12 @@
icon_state = "dark"
},
/area/velocity)
+"qwb" = (
+/obj/structure/table,
+/obj/item/weapon/storage/box/drinkingglasses,
+/obj/item/weapon/reagent_containers/food/snacks/meatsteak,
+/turf/unsimulated/floor/carpet/blue2,
+/area/pluvian_heaven)
"qym" = (
/obj/effect/decal/turf_decal{
icon_state = "warn"
@@ -30891,6 +31160,11 @@
icon_state = "dark"
},
/area/centcom/control)
+"ras" = (
+/obj/effect/light_emitter,
+/obj/effect/landmark/heaven_landmark,
+/turf/unsimulated/floor/carpet/blue2,
+/area/pluvian_heaven)
"rkK" = (
/obj/item/weapon/flora/pottedplant/tropicalfern{
pixel_y = 5
@@ -30899,6 +31173,17 @@
icon_state = "hydrofloor"
},
/area/velocity/locker)
+"rtz" = (
+/turf/unsimulated/floor{
+ dir = 9;
+ icon_state = "heaven"
+ },
+/area/pluvian_heaven)
+"rus" = (
+/obj/structure/table,
+/obj/item/weapon/reagent_containers/food/snacks/meatsteak,
+/turf/unsimulated/floor/carpet/blue2,
+/area/pluvian_heaven)
"rEu" = (
/obj/structure/flora/ausbushes/brflowers,
/obj/effect/decal/turf_decal/wood{
@@ -30908,6 +31193,11 @@
icon_state = "grass2"
},
/area/centcom/evac)
+"rIG" = (
+/turf/unsimulated/floor{
+ icon_state = "heavenfull2"
+ },
+/area/pluvian_heaven)
"rIN" = (
/obj/structure/disposalpipe/segment,
/turf/unsimulated/wall/like_a_normal/beige,
@@ -30949,6 +31239,13 @@
/obj/item/weapon/kitchenknife/ritual,
/turf/unsimulated/floor/cult/lava,
/area/custom/cult)
+"seM" = (
+/obj/structure/mineral_door/silver,
+/turf/unsimulated/floor{
+ dir = 4;
+ icon_state = "heaven"
+ },
+/area/pluvian_heaven)
"seQ" = (
/obj/effect/step_trigger/thrower{
affect_ghosts = 1;
@@ -31048,6 +31345,10 @@
icon_state = "white"
},
/area/velocity/dormitories)
+"sHC" = (
+/obj/effect/light_emitter,
+/turf/simulated/floor/beach/water/waterpool/heaven,
+/area/pluvian_heaven)
"sJs" = (
/obj/effect/landmark/space_traders/product,
/turf/simulated/shuttle/floor/erokez,
@@ -31077,6 +31378,12 @@
icon_state = "brown"
},
/area/velocity)
+"sVJ" = (
+/obj/item/weapon/flora/pottedplant/orientaltree,
+/turf/unsimulated/floor{
+ icon_state = "heaven"
+ },
+/area/pluvian_heaven)
"sXV" = (
/obj/machinery/porta_turret/crescent,
/obj/effect/decal/turf_decal{
@@ -31132,6 +31439,12 @@
},
/turf/unsimulated/floor/cult/lava,
/area/custom/cult)
+"tCg" = (
+/turf/unsimulated/floor{
+ dir = 8;
+ icon_state = "heaven"
+ },
+/area/pluvian_heaven)
"tFF" = (
/obj/structure/sign/nanotrasen{
pixel_y = 32
@@ -31160,6 +31473,13 @@
},
/turf/unsimulated/floor/carpet,
/area/centcom/living)
+"tUf" = (
+/obj/effect/light_emitter,
+/turf/unsimulated/floor{
+ dir = 9;
+ icon_state = "heaven"
+ },
+/area/pluvian_heaven)
"tUB" = (
/obj/effect/landmark/space_traders/guard,
/turf/simulated/shuttle/floor/erokez,
@@ -31190,6 +31510,12 @@
},
/turf/unsimulated/floor,
/area/centcom/tdome)
+"ubh" = (
+/obj/effect/light_emitter,
+/turf/unsimulated/floor{
+ icon_state = "Heaven_stairs_middle"
+ },
+/area/pluvian_heaven)
"ucy" = (
/obj/structure/stool/bed/chair/office/light{
dir = 4
@@ -31266,6 +31592,15 @@
icon_state = "floorcatwalk"
},
/area/custom/syndicate_mothership/droppod_garage)
+"uEk" = (
+/obj/machinery/vending/boozeomat{
+ name = "Heaven Booze-O-Mat";
+ products = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/gin=10,/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey=10,/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla=10,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka=10,/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth=10,/obj/item/weapon/reagent_containers/food/drinks/bottle/rum=10,/obj/item/weapon/reagent_containers/food/drinks/bottle/wine=10,/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac=10,/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua=10,/obj/item/weapon/reagent_containers/food/drinks/bottle/beer=10,/obj/item/weapon/reagent_containers/food/drinks/bottle/ale=10,/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice=10,/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice=10,/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice=10,/obj/item/weapon/reagent_containers/food/drinks/bottle/cream=10,/obj/item/weapon/reagent_containers/food/drinks/cans/tonic=10,/obj/item/weapon/reagent_containers/food/drinks/cans/cola=10,/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater=15,/obj/item/weapon/reagent_containers/food/drinks/flask/barflask=5,/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask=5,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass=50,/obj/item/weapon/reagent_containers/food/drinks/ice=15,/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor=10,/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao=10,/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe=10,/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine=10,/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne=10);
+ req_access = list();
+ use_power = 0
+ },
+/turf/unsimulated/floor/carpet/blue2,
+/area/pluvian_heaven)
"uEN" = (
/obj/effect/step_trigger/teleporter/random{
name = "escapeshuttle_leave_noghosts";
@@ -31378,6 +31713,11 @@
name = "plating"
},
/area/velocity)
+"viS" = (
+/turf/unsimulated/floor{
+ icon_state = "Heaven_Stairs2_wide"
+ },
+/area/pluvian_heaven)
"vlY" = (
/obj/machinery/door/airlock/external{
dir = 4;
@@ -31407,6 +31747,12 @@
icon_state = "hydrofloor"
},
/area/velocity/locker)
+"vyy" = (
+/obj/structure/stool/bed/chair/wood/normal{
+ dir = 1
+ },
+/turf/unsimulated/floor/carpet/blue2,
+/area/pluvian_heaven)
"vyU" = (
/obj/structure/table/woodentable,
/turf/unsimulated/floor{
@@ -31469,6 +31815,9 @@
icon_state = "browncorner"
},
/area/centcom/specops)
+"vRm" = (
+/turf/unsimulated/floor/carpet/blue2,
+/area/pluvian_heaven)
"vSL" = (
/obj/machinery/washing_machine,
/obj/machinery/light/small{
@@ -31562,6 +31911,12 @@
icon_state = "floorcatwalk"
},
/area/custom/syndicate_mothership/elite_squad)
+"wXB" = (
+/turf/unsimulated/floor{
+ dir = 6;
+ icon_state = "heaven"
+ },
+/area/pluvian_heaven)
"xdd" = (
/obj/machinery/light{
dir = 4
@@ -33872,52 +34227,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
aaM
aaM
aaM
@@ -34129,52 +34484,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -34386,6 +34741,52 @@ aaM
aaM
aaM
aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -34446,96 +34847,50 @@ aaM
aaM
aaM
aaM
+aeD
+abi
+abi
+abi
+abh
+abi
+abl
+abi
+abi
+abi
+aCG
+abi
+abi
+abi
+abi
+abi
+abh
+abi
+abi
+baB
+afT
+abg
+aaY
+aaY
+aaY
+abg
+afT
+afT
+abi
+abl
+abi
+baY
+abi
+abi
+abi
+abi
+abh
+aeD
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aeD
-abi
-abi
-abi
-abh
-abi
-abl
-abi
-abi
-abi
-aCG
-abi
-abi
-abi
-abi
-abi
-abh
-abi
-abi
-baB
-afT
-abg
-aaY
-aaY
-aaY
-abg
-afT
-afT
-abi
-abl
-abi
-baY
-abi
-abi
-abi
-abi
-abh
-aeD
-aaM
-aaM
-aaM
-"}
-(12,1,1) = {"
-ahG
+"}
+(12,1,1) = {"
+ahG
aaM
aaM
aaM
@@ -34643,52 +34998,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+sHC
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -34900,52 +35255,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -35157,52 +35512,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+sHC
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+itR
+itR
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+ubh
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+sHC
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -35414,52 +35769,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hfm
+qlq
+vRm
+rIG
+hfm
+qlq
+wXB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -35671,52 +36026,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+rIG
+lCv
+vRm
+cHH
+rIG
+bXJ
+rIG
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -35928,52 +36283,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+rtz
+tCg
+vRm
+rIG
+rtz
+tCg
+pxO
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -36069,77 +36424,15 @@ abi
baB
abi
baQ
-abi
-abi
-aeD
-aaM
-aaM
-aaM
-"}
-(18,1,1) = {"
-ahG
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-alT
-mNb
-mNb
-mNb
-mNb
-mNb
-alT
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-ahG
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-acS
-acS
-acS
-acS
-acS
-acS
-acS
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-ahG
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+abi
+abi
+aeD
aaM
aaM
aaM
+"}
+(18,1,1) = {"
+ahG
aaM
aaM
aaM
@@ -36149,6 +36442,13 @@ aaM
aaM
aaM
aaM
+alT
+mNb
+mNb
+mNb
+mNb
+mNb
+alT
aaM
aaM
aaM
@@ -36158,6 +36458,7 @@ aaM
aaM
aaM
aaM
+ahG
aaM
aaM
aaM
@@ -36171,12 +36472,20 @@ aaM
aaM
aaM
aaM
+acS
+acS
+acS
+acS
+acS
+acS
+acS
aaM
aaM
aaM
aaM
aaM
aaM
+ahG
aaM
aaM
aaM
@@ -36231,6 +36540,52 @@ aaM
aaM
aaM
aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+itR
+itR
+itR
+vRm
+rIG
+eZh
+itR
+itR
+tCg
+pxO
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -36442,52 +36797,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+rIG
+hfm
+qlq
+vRm
+rIG
+hfm
+kuZ
+nGp
+nGp
+dqf
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -36699,52 +37054,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+rIG
+lCv
+rIG
+cCP
+jal
+rIG
+dLD
+nGp
+eXK
+dqf
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -36956,52 +37311,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+rIG
+rtz
+tCg
+vRm
+rIG
+rtz
+viS
+nGp
+nGp
+dqf
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+sHC
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -37213,52 +37568,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+itR
+itR
+itR
+vRm
+rIG
+eZh
+itR
+itR
+itR
+itR
+itR
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -37360,62 +37715,14 @@ aeD
aaM
aaM
aaM
-"}
-(23,1,1) = {"
-ahG
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-ahG
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+"}
+(23,1,1) = {"
+ahG
aaM
aaM
aaM
aaM
aaM
-ahG
aaM
aaM
aaM
@@ -37436,6 +37743,7 @@ aaM
aaM
aaM
aaM
+ahG
aaM
aaM
aaM
@@ -37462,6 +37770,7 @@ aaM
aaM
aaM
aaM
+ahG
aaM
aaM
aaM
@@ -37516,6 +37825,52 @@ aaM
aaM
aaM
aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hfm
+qlq
+vRm
+rIG
+hfm
+itR
+mHr
+vyy
+hfm
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -37727,52 +38082,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+rIG
+lCv
+vRm
+cHH
+rIG
+itR
+hQz
+vyy
+rIG
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+sHC
+hZB
+dqo
aaM
aaM
aaM
@@ -37984,52 +38339,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+sHC
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+rtz
+tCg
+vRm
+rIG
+rtz
+itR
+frA
+vyy
+rtz
+hZB
+hZB
+hZB
+hZB
+hZB
+itR
+itR
+itR
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -38241,52 +38596,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+itR
+hZB
+hZB
+itR
+itR
+pos
+oPM
+doD
+itR
+sVJ
+rIG
+eZh
+itR
+hZB
+hZB
+hZB
+itR
+kEX
+gEJ
+aTz
+itR
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -38498,52 +38853,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+uEk
+wXB
+rIG
+hfm
+qlq
+wXB
+rIG
+hfm
+qlq
+wXB
+rIG
+hfm
+kuZ
+wXB
+rIG
+hfm
+vRm
+vRm
+vRm
+vRm
+seM
+kuZ
+kuZ
+kuZ
+kuZ
+kuZ
+pnl
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -38624,75 +38979,29 @@ abg
abj
bba
abg
-akh
-aqE
-aDl
-bat
-aDa
-axq
-axO
-abg
-aBg
-aFa
-aDa
-aDa
-aBz
-abg
-baB
-abi
-abi
-aeD
-aaM
-aaM
-aaM
-"}
-(28,1,1) = {"
-ahG
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-ahG
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+akh
+aqE
+aDl
+bat
+aDa
+axq
+axO
+abg
+aBg
+aFa
+aDa
+aDa
+aBz
+abg
+baB
+abi
+abi
+aeD
aaM
aaM
aaM
+"}
+(28,1,1) = {"
ahG
aaM
aaM
@@ -38765,6 +39074,7 @@ aaM
aaM
aaM
aaM
+ahG
aaM
aaM
aaM
@@ -38784,6 +39094,7 @@ aaM
aaM
aaM
aaM
+ahG
aaM
aaM
aaM
@@ -38799,8 +39110,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+qpf
+rIG
+rIG
+rIG
+rIG
+cHH
+rIG
+rIG
+rIG
+rIG
+rIG
+rIG
+ubh
+rIG
+rIG
+rIG
+vRm
+vRm
+ras
+vRm
+lmp
+dLD
+ubh
+dLD
+dLD
+dLD
+eNH
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -39012,52 +39367,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+psf
+pxO
+rIG
+ccr
+ccr
+ccr
+rIG
+rtz
+tCg
+pxO
+rIG
+rtz
+viS
+pxO
+rIG
+rtz
+vRm
+vRm
+vRm
+vRm
+opp
+viS
+viS
+viS
+viS
+viS
+cie
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -39269,52 +39624,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+itR
+dqf
+vRm
+qwb
+rus
+rus
+vRm
+eZh
+cdP
+dqf
+rIG
+eZh
+itR
+hZB
+hZB
+hZB
+itR
+lfe
+fSg
+pWp
+itR
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -39526,52 +39881,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+itR
+wXB
+rIG
+nsr
+nsr
+nsr
+rIG
+hfm
+qlq
+wXB
+rIG
+hfm
+hZB
+hZB
+hZB
+hZB
+hZB
+itR
+itR
+itR
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -39783,52 +40138,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+itR
+rIG
+rIG
+rIG
+rIG
+rIG
+rIG
+rIG
+rIG
+rIG
+rIG
+rIG
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -40017,60 +40372,14 @@ aVb
aVb
aVb
aVb
-aVb
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-ahG
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+aVb
aaM
aaM
aaM
aaM
aaM
aaM
+ahG
aaM
aaM
aaM
@@ -40086,6 +40395,52 @@ aaM
aaM
aaM
aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+itR
+jYM
+rIG
+rtz
+tCg
+pxO
+rIG
+rtz
+tCg
+pxO
+rIG
+tUf
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -40297,52 +40652,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+itR
+itR
+itR
+itR
+itR
+itR
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -40554,52 +40909,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -40811,52 +41166,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -41068,52 +41423,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -41241,77 +41596,9 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-ahG
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-ahG
-ogb
-ogb
-ogb
-ahG
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-ahG
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-alT
-oib
-oib
-oib
-oib
-oib
-alT
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-ahG
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aVb
-aPZ
-aPZ
-aPZ
-aPZ
-aPZ
-aVb
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-ahG
-aaM
-aaM
+aaM
+aaM
+ahG
aaM
aaM
aaM
@@ -41320,12 +41607,18 @@ aaM
aaM
aaM
aaM
+ahG
+ogb
+ogb
+ogb
+ahG
aaM
aaM
aaM
aaM
aaM
aaM
+ahG
aaM
aaM
aaM
@@ -41336,6 +41629,13 @@ aaM
aaM
aaM
aaM
+alT
+oib
+oib
+oib
+oib
+oib
+alT
aaM
aaM
aaM
@@ -41344,18 +41644,27 @@ aaM
aaM
aaM
aaM
+ahG
aaM
aaM
aaM
aaM
aaM
aaM
+aVb
+aPZ
+aPZ
+aPZ
+aPZ
+aPZ
+aVb
aaM
aaM
aaM
aaM
aaM
aaM
+ahG
aaM
aaM
aaM
@@ -41371,6 +41680,52 @@ aaM
aaM
aaM
aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -41582,52 +41937,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+sHC
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -41839,52 +42194,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+sHC
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+sHC
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+sHC
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -42096,52 +42451,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -42353,52 +42708,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+hZB
+dqo
aaM
aaM
aaM
@@ -42610,52 +42965,52 @@ aaM
aaM
aaM
aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
-aaM
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
+dqo
aaM
aaM
aaM
diff --git a/maps/delta/delta.dmm b/maps/delta/delta.dmm
index b289fbd02d94..d27372848439 100644
--- a/maps/delta/delta.dmm
+++ b/maps/delta/delta.dmm
@@ -1406,6 +1406,7 @@
/area/station/hallway/primary/central)
"acp" = (
/obj/item/device/radio/beacon,
+/obj/effect/landmark/ancestor_wisp_start,
/turf/simulated/floor{
icon_state = "neutralchoco"
},
@@ -21635,6 +21636,7 @@
name = "OnlineShop";
sortType = "OnlineShop"
},
+/obj/effect/landmark/ancestor_wisp_start,
/turf/simulated/floor{
icon_state = "neutralfull"
},
@@ -61324,6 +61326,7 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
},
+/obj/effect/landmark/ancestor_wisp_start,
/turf/simulated/floor{
icon_state = "neutralfull"
},
@@ -104191,6 +104194,18 @@
icon_state = "dark"
},
/area/station/rnd/robotics)
+"vII" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/landmark/ancestor_wisp_start,
+/turf/simulated/floor{
+ icon_state = "neutralfull"
+ },
+/area/station/hallway/primary/central)
"vIN" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -153375,7 +153390,7 @@ auM
pnq
srs
jcN
-itF
+vII
vAu
rPX
plf
diff --git a/maps/falcon/falcon.dmm b/maps/falcon/falcon.dmm
index a41bc8da9a22..106c1c590e53 100644
--- a/maps/falcon/falcon.dmm
+++ b/maps/falcon/falcon.dmm
@@ -5122,6 +5122,7 @@
},
/obj/machinery/bot/cleanbot,
/obj/effect/decal/turf_decal/goonplaque,
+/obj/effect/landmark/ancestor_wisp_start,
/turf/simulated/floor,
/area/station/hallway/primary/central)
"ajg" = (
@@ -9909,6 +9910,12 @@
icon_state = "black"
},
/area/station/security/prison)
+"aCk" = (
+/obj/machinery/door/firedoor,
+/obj/structure/disposalpipe/segment,
+/obj/effect/landmark/ancestor_wisp_start,
+/turf/simulated/floor,
+/area/station/security/lobby)
"aDA" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/turf/simulated/floor{
@@ -11642,6 +11649,7 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
+/obj/effect/landmark/ancestor_wisp_start,
/turf/simulated/floor{
dir = 1;
icon_state = "blackcorner"
@@ -13379,6 +13387,7 @@
codes_txt = "patrol;next_patrol=Security";
location = "HoP"
},
+/obj/effect/landmark/ancestor_wisp_start,
/turf/simulated/floor,
/area/station/hallway/primary/central)
"dHV" = (
@@ -17397,6 +17406,13 @@
},
/turf/simulated/floor/plating,
/area/station/hallway/primary/central)
+"hHy" = (
+/obj/effect/landmark/ancestor_wisp_start,
+/turf/simulated/floor{
+ dir = 8;
+ icon_state = "black"
+ },
+/area/station/hallway/primary/central)
"hHC" = (
/obj/machinery/door/firedoor{
dir = 4
@@ -31381,6 +31397,11 @@
icon_state = "dark"
},
/area/station/tcommsat/chamber)
+"uez" = (
+/obj/structure/disposalpipe/segment,
+/obj/effect/landmark/ancestor_wisp_start,
+/turf/simulated/floor,
+/area/station/hallway/primary/central)
"ueF" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -34540,6 +34561,16 @@
/obj/random/tools/tool,
/turf/simulated/floor/plating,
/area/station/maintenance/dormitory)
+"xeA" = (
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/effect/landmark/ancestor_wisp_start,
+/turf/simulated/floor,
+/area/station/hallway/primary/central)
"xfC" = (
/obj/machinery/computer/security,
/obj/item/device/radio/intercom{
@@ -60712,7 +60743,7 @@ ceD
wNy
gDj
aiH
-wNy
+uez
aEC
aiV
gIQ
@@ -60723,7 +60754,7 @@ aqg
vLo
eQw
eQw
-eQw
+hHy
eQw
asa
uGd
@@ -66380,7 +66411,7 @@ iHK
ews
oxn
dIJ
-eJe
+xeA
ifz
jcU
nYR
@@ -70483,7 +70514,7 @@ aRD
jAD
qCT
lLn
-abO
+aCk
wNy
sTk
gfC
diff --git a/maps/gamma/gamma.dmm b/maps/gamma/gamma.dmm
index 3226f15c72c5..d2ea463cc8bd 100644
--- a/maps/gamma/gamma.dmm
+++ b/maps/gamma/gamma.dmm
@@ -5060,6 +5060,7 @@
icon_state = "pipe-c";
layer = 1.9
},
+/obj/effect/landmark/ancestor_wisp_start,
/turf/simulated/floor/grid_floor,
/area/station/hallway/primary/central)
"awc" = (
@@ -14642,6 +14643,10 @@
},
/turf/simulated/floor,
/area/station/rnd/misc_lab)
+"cjO" = (
+/obj/effect/landmark/ancestor_wisp_start,
+/turf/simulated/floor,
+/area/station/hallway/primary/central)
"cjS" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/weapon/cigbutt,
@@ -47193,6 +47198,7 @@
icon_state = "1-2"
},
/obj/structure/disposalpipe/segment,
+/obj/effect/landmark/ancestor_wisp_start,
/turf/simulated/floor,
/area/station/hallway/primary/central)
"iwE" = (
@@ -52656,6 +52662,7 @@
icon_state = "pipe-c";
layer = 1.9
},
+/obj/effect/landmark/ancestor_wisp_start,
/turf/simulated/floor/grid_floor,
/area/station/hallway/primary/central)
"jzX" = (
@@ -67934,6 +67941,7 @@
dir = 2;
sortType = list("Парк","Производство Дронов","Кабинет ГП","Роботехника","�?сследования Плазмы","Ординаторская","Комната Отдыха �?нженеров","Хранилище Медбея","Офис Главы �?сследований","Генетика","Морг","Двигатель","Офис Главного �?нженера","Атмосферный Контроль","Комната отдыха РнД","Офис СМО","Ксенобиология","Каюта Капитана","Конференц-Зал","Химия","Научная лаборатория","Вирусология","Прочие �?сследования")
},
+/obj/effect/landmark/ancestor_wisp_start,
/turf/simulated/floor/grid_floor,
/area/station/hallway/primary/central)
"mBQ" = (
@@ -96079,6 +96087,7 @@
dir = 2;
icon_state = "pipe-c"
},
+/obj/effect/landmark/ancestor_wisp_start,
/turf/simulated/floor/grid_floor,
/area/station/hallway/primary/central)
"sik" = (
@@ -97631,6 +97640,7 @@
dir = 8;
icon_state = "pipe-c"
},
+/obj/effect/landmark/ancestor_wisp_start,
/turf/simulated/floor/grid_floor,
/area/station/hallway/primary/central)
"sww" = (
@@ -152414,7 +152424,7 @@ cQg
fKV
uWJ
dpu
-uWJ
+cjO
tfD
uWJ
uWJ
diff --git a/sound/effects/haram.ogg b/sound/effects/haram.ogg
new file mode 100644
index 000000000000..32adae8166f7
Binary files /dev/null and b/sound/effects/haram.ogg differ
diff --git a/sound/effects/heaven_fail.ogg b/sound/effects/heaven_fail.ogg
new file mode 100644
index 000000000000..f9cfcd900607
Binary files /dev/null and b/sound/effects/heaven_fail.ogg differ
diff --git a/taucetistation.dme b/taucetistation.dme
index 10306e516469..fd7e5b0b01c9 100644
--- a/taucetistation.dme
+++ b/taucetistation.dme
@@ -2294,6 +2294,7 @@
#include "code\modules\religion\building_agent.dm"
#include "code\modules\religion\encyclopedia.dm"
#include "code\modules\religion\holy_turf.dm"
+#include "code\modules\religion\pluvia_heaven.dm"
#include "code\modules\religion\religion.dm"
#include "code\modules\religion\religion_sects.dm"
#include "code\modules\religion\religious_alchemy.dm"
@@ -2302,6 +2303,7 @@
#include "code\modules\religion\altar_types\cult\altar_of_gods.dm"
#include "code\modules\religion\religion_types\chaplain.dm"
#include "code\modules\religion\religion_types\cult.dm"
+#include "code\modules\religion\religion_types\pluvia.dm"
#include "code\modules\religion\rites\instant\death_alarm.dm"
#include "code\modules\religion\rites\instant\instant.dm"
#include "code\modules\religion\rites\instant\spawn_item.dm"
diff --git a/taucetistation.dmm-pal b/taucetistation.dmm-pal
new file mode 100644
index 000000000000..b95cd18c2491
--- /dev/null
+++ b/taucetistation.dmm-pal
@@ -0,0 +1 @@
+[Palette]