diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 7aeae642e3e5..c9698b114a70 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -350,6 +350,18 @@ #define COMSIG_LIVING_CAN_TRACK "mob_cantrack" #define COMPONENT_CANT_TRACK (1<<0) #define COMSIG_LIVING_BUMPED "living_bumped" +// from base of mob/living/proc/log_combat (mob/living/carbon/human/attacker) +#define COMSIG_HUMAN_HARMED_OTHER "human_harmed_other" +// from base of /obj/structure/stool/bed/chair/noose/user_buckle_mob() +#define COMSIG_HUMAN_ON_SUICIDE "human_on_suicide" +// from base of /mob/living/carbon/proc/handle_alerts() +#define COMSIG_HUMAN_ON_ADJUST_DRUGINESS "human_on_adjust_drugines" +// from base of /obj/item/weapon/reagent_containers/food/snacks/proc/On_Consume() +#define COMSIG_HUMAN_ON_CONSUME "human_on_consume" +// from base of /turf/simulated/floor/carpet/Entered(atom/movable/O) +#define COMSIG_HUMAN_ON_CARPET "human_on_carpet" +// from base of /mob/living/carbon/human/say() +#define COMSIG_HUMAN_SAY "human_say" /// from /obj/effect/proc_holder/changeling/transform/sting_action(): (mob/living/carbon/human/user) #define COMSIG_CHANGELING_TRANSFORM "changeling_transform" diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index c58bd1878cc8..4986ad41d96f 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -29,6 +29,8 @@ #define isskeleton(A) (A.get_species() in list(SKELETON, SKELETON_UNATHI, SKELETON_TAJARAN, SKELETON_SKRELL, SKELETON_VOX)) +#define ispluvian(A) (A.get_species() == PLUVIAN) + // CARBON #define isxenoqueen(A) (istype(A, /mob/living/carbon/xenomorph/humanoid/queen)) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 0dfee4494782..004864febe59 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -349,6 +349,7 @@ /turf/simulated/wall/r_wall/purple, \ /turf/simulated/wall/r_wall/green, \ /turf/simulated/wall/r_wall/beige, \ + /turf/simulated/wall/heaven, \ /obj/structure/falsewall, \ /obj/structure/falsewall/yellow, \ /obj/structure/falsewall/red, \ diff --git a/code/__DEFINES/mob.dm b/code/__DEFINES/mob.dm index 8b502f6c90a5..515f0b0b19cc 100644 --- a/code/__DEFINES/mob.dm +++ b/code/__DEFINES/mob.dm @@ -77,6 +77,8 @@ // Species Names (keep in mind, that whitelist and preferences DB depends on this names too, and if anything is renamed, update MYSQL tables or is_alien_whitelisted() proc and preferences). #define HUMAN "Human" +#define PLUVIAN "Pluvian" +#define PLUVIAN_SPIRIT "Pluvian Spirit" #define UNATHI "Unathi" #define TAJARAN "Tajaran" #define SKRELL "Skrell" diff --git a/code/__DEFINES/religion.dm b/code/__DEFINES/religion.dm index 6b021fd4bb0d..0b164100f74a 100644 --- a/code/__DEFINES/religion.dm +++ b/code/__DEFINES/religion.dm @@ -103,3 +103,6 @@ #define REACTION_RESULT "result_id" #define REACITON_COST "favor_cost" #define REACTION_ASPECTS "needed_aspects" + +// pluvians stuff +#define PLUVIAN_HARAM_THRESHOLD 5 diff --git a/code/_globalvars/database.dm b/code/_globalvars/database.dm index d94c22a9c769..14bda7be42fc 100644 --- a/code/_globalvars/database.dm +++ b/code/_globalvars/database.dm @@ -18,4 +18,4 @@ var/global/DBConnection/dbcon = new() // Xeno/role whitelist database ( code/modules/admin/whitelist.dm ) // var/global/list/role_whitelist // cache of all ckeys and their roles -var/global/list/whitelisted_roles = list("unathi", "tajaran", "skrell", "diona", "machine", "vox", "ian") // Case important, everything must be in lowercase. +var/global/list/whitelisted_roles = list("unathi", "tajaran", "skrell", "diona", "machine", "vox", "ian", "pluvian") // Case important, everything must be in lowercase. diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm index 09263cb09e83..e04d9391a3d9 100644 --- a/code/_globalvars/misc.dm +++ b/code/_globalvars/misc.dm @@ -47,6 +47,7 @@ var/global/list/ignore_vision_inside = list( var/global/datum/religion/chaplain/chaplain_religion // Cultists religion. You/I can change it? var/global/datum/religion/cult/cult_religion +var/global/datum/religion/pluvia/pluvia_religion var/global/list/datum/religion/all_religions = list() //Used for global activation of pylons diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 30dcfb1698fe..86fb7777858b 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -169,3 +169,7 @@ #define HUD_COPY_ICON 1 #define HUD_COPY_COLOR 2 #define HUD_COPY_ALPHA 4 + +//Parallax +#define PARALLAX_CLASSIC "parallax_classic" +#define PARALLAX_HEAVEN "parallax_heaven" diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 22d88d852f85..f4c68ae5aa66 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -353,6 +353,20 @@ или стрелять из пистолета, чтобы передвигаться в соответствии с 3-м законом Ньютона." icon_state = "weightless" +/atom/movable/screen/alert/pluvia_ring + name = "Входящий вызов" + desc = "Кто-то с того света желает говорить с вами." + icon_state = "ring" + +/atom/movable/screen/alert/pluvia_ring/Click() + if(!mob_viewer) + return + to_chat(mob_viewer, "Вы сбросили звонок!") + for(var/obj/effect/proc_holder/spell/no_target/ancestor_call/S in mob_viewer.spell_list) + S.target_loc = null + S.my_gong = null + mob_viewer.clear_alert("Звонок") + //ALIENS /atom/movable/screen/alert/alien_tox diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 7c5f720e4324..1dcd489760fd 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -176,7 +176,7 @@ var/global/list/available_ui_styles = list( mymob.update_action_buttons() reorganize_alerts() - create_parallax() // todo: why we recreate parallax every time we change mob or press f12 + set_parallax(mymob.current_parallax) // todo: why we recreate parallax every time we change mob or press f12 hidden_inventory_update() persistant_inventory_update() diff --git a/code/_onclick/hud/parallax.dm b/code/_onclick/hud/parallax.dm index 780de628c3e6..78a0acc6179b 100644 --- a/code/_onclick/hud/parallax.dm +++ b/code/_onclick/hud/parallax.dm @@ -11,18 +11,25 @@ var/parallax_layers_max = 3 var/parallax_animate_timer -/datum/hud/proc/create_parallax() +/mob + var/current_parallax = PARALLAX_CLASSIC + +/datum/hud/proc/create_parallax(parallax_type) var/client/C = mymob.client if (!apply_parallax_pref()) return - if(!length(C.parallax_layers_cached)) + var/icon/parralax_icon + switch(parallax_type) + if(PARALLAX_CLASSIC) + parralax_icon = 'icons/effects/parallax.dmi' + if(PARALLAX_HEAVEN) + parralax_icon = 'icons/effects/pluvia_water.dmi' + if(!length(C.parallax_layers_cached) || parallax_type != mymob.current_parallax) C.parallax_layers_cached = list() - C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/layer_1(null, C.view, 'icons/effects/parallax.dmi') - C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/layer_2(null, C.view, 'icons/effects/parallax.dmi') - C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/layer_3(null, C.view, 'icons/effects/parallax.dmi') - //C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/planet(null, C.view, 'icons/effects/parallax.dmi') awaiting for new planet image in replace for lavaland - + C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/layer_1(null, C.view, parralax_icon) + C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/layer_2(null, C.view, parralax_icon) + C.parallax_layers_cached += new /atom/movable/screen/parallax_layer/layer_3(null, C.view, parralax_icon) C.parallax_layers = C.parallax_layers_cached.Copy() if (length(C.parallax_layers) > C.parallax_layers_max) @@ -36,7 +43,7 @@ var/client/C = mymob.client C.screen -= (C.parallax_layers_cached) C.parallax_layers = null - + mymob.current_parallax = null C.update_plane_masters(/atom/movable/screen/plane_master/parallax_white) /datum/hud/proc/apply_parallax_pref() @@ -68,9 +75,14 @@ C.parallax_layers_max = 3 return TRUE -/datum/hud/proc/update_parallax_pref() +/datum/hud/proc/set_parallax(new_parallax) remove_parallax() - create_parallax() + create_parallax(new_parallax) + mymob.current_parallax = new_parallax + +/datum/hud/proc/update_parallax_pref() + set_parallax(mymob.current_parallax) + // This sets which way the current shuttle is moving (returns true if the shuttle has stopped moving so the caller can append their animation) /datum/hud/proc/set_parallax_movedir(new_parallax_movedir) diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 2bca9a6c51a7..f8b12f65728b 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -87,6 +87,7 @@ user.SetNextMove(CLICK_CD_ACTION) user.visible_message("[user] slit [M]'s throat open with \the [name]!") M.log_combat(user, "knifed with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])") + SEND_SIGNAL(user, COMSIG_HUMAN_HARMED_OTHER, M) return if (isbrain(M)) @@ -105,6 +106,8 @@ M.equip_to_slot_if_possible(src, SLOT_HEAD, disable_warning = TRUE) user.visible_message("[user] slams [name] on the [M]'s head!") M.log_combat(user, "slammed with [name] on the head (INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(BRUTE)])") + if(force > 0) + SEND_SIGNAL(user, COMSIG_HUMAN_HARMED_OTHER, M) var/list/data = user.get_unarmed_attack() // if item has no force just assume attacker smashed his fist (no scratches or any modifiers) against victim's head. if(user.a_intent in list(INTENT_PUSH, INTENT_GRAB)) @@ -113,6 +116,8 @@ return TRUE M.log_combat(user, "attacked with [name] (INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])") + if(force > 0) + SEND_SIGNAL(user, COMSIG_HUMAN_HARMED_OTHER, M) var/power = force if(ishuman(user) && damtype == BRUTE) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index ef634507afb3..961c075f3494 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -189,7 +189,6 @@ SUBSYSTEM_DEF(ticker) /datum/controller/subsystem/ticker/proc/setup() to_chat(world, "Игра начинается...") - // Discuss your stuff after the round ends. if(config.ooc_round_autotoggle) to_chat(world, "OOC-канал отключен для всех на время раунда!") @@ -270,6 +269,7 @@ SUBSYSTEM_DEF(ticker) query_round_game_mode.Execute() create_religion(/datum/religion/chaplain) + create_religion(/datum/religion/pluvia) setup_hud_objects() create_characters() //Create player characters and transfer them diff --git a/code/datums/components/clickplace.dm b/code/datums/components/clickplace.dm index fec10c59639e..2e7e2416f1c1 100644 --- a/code/datums/components/clickplace.dm +++ b/code/datums/components/clickplace.dm @@ -198,7 +198,7 @@ victim.apply_damage(8, def_zone = BP_HEAD) victim.visible_message("[assailant] slams [victim]'s face against \the [A]!") playsound(parent, 'sound/weapons/tablehit1.ogg', VOL_EFFECTS_MASTER) - + SEND_SIGNAL(assailant, COMSIG_HUMAN_HARMED_OTHER,victim ) victim.log_combat(assailant, "face-slammed against \the [parent]") return FALSE @@ -227,8 +227,8 @@ INVOKE_ASYNC(victim, TYPE_PROC_REF(/atom/movable, do_simple_move_animation), A.loc, old_loc) victim.Stun(2) victim.Weaken(5) - victim.log_combat(assailant, "laid on [A]") + SEND_SIGNAL(assailant, COMSIG_HUMAN_HARMED_OTHER, victim) else if(assailant.a_intent != INTENT_HARM) /// Let's pretend a face-slam doesn't exist. to_chat(assailant, "You need a better grip to do that!") diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 03999ec2d629..0620fdba7585 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -63,6 +63,11 @@ var/creation_time = 0 //World time when this datum was New'd. Useful to tell how long since a character spawned var/creation_roundtime + // Pluvia sochial credit system + var/pluvian_social_credit = 0 // everyone has it, even if not pluvian, used for letter vote + var/pluvian_haram_points = 0 + var/pluvian_blessed = 0 + var/willpower_amount = 1 var/possible_willpower_effects = list(/datum/willpower_effect/painkiller, /datum/willpower_effect/skills, /datum/willpower_effect/nutrition, /datum/willpower_effect/fat) var/willpower_effects = list() @@ -782,6 +787,15 @@ ..() if(!mind.assigned_role) mind.assigned_role = "default" //default + + //Pluvia social credit system + mind.pluvian_social_credit = species.pluvian_social_credit + if(mind.assigned_job) + var/list/static/pluvian_haram_jobs = list("Captain","Head of Security","Warden","Security Officer","Security Cadet","Blueshield Officer","Internal Affairs Agent") + if(mind.assigned_job.title in pluvian_haram_jobs) + mind.pluvian_social_credit = 0 + if(ispluvian(src)) + global.pluvia_religion.add_member(src, HOLY_ROLE_PRIEST) //slime /mob/living/carbon/slime/mind_initialize() diff --git a/code/datums/outfits/jobs/centcom.dm b/code/datums/outfits/jobs/centcom.dm index 8ad69f7fa6f4..65033fdd1d68 100644 --- a/code/datums/outfits/jobs/centcom.dm +++ b/code/datums/outfits/jobs/centcom.dm @@ -40,3 +40,4 @@ implants = list( /obj/item/weapon/implant/mind_protect/loyalty, /obj/item/weapon/implant/blueshield) + diff --git a/code/datums/outfits/jobs/security.dm b/code/datums/outfits/jobs/security.dm index 16d868b8c371..28f582097a44 100644 --- a/code/datums/outfits/jobs/security.dm +++ b/code/datums/outfits/jobs/security.dm @@ -135,4 +135,3 @@ uniform = /obj/item/clothing/under/syndicate/tacticool uniform_f = /obj/item/clothing/under/syndicate/tacticool l_ear = /obj/item/device/radio/headset/headset_sec/nt_pmc - diff --git a/code/game/gamemodes/modes_gameplays/changeling/powers/swallow.dm b/code/game/gamemodes/modes_gameplays/changeling/powers/swallow.dm index 212a85436c25..f6096c8912f4 100644 --- a/code/game/gamemodes/modes_gameplays/changeling/powers/swallow.dm +++ b/code/game/gamemodes/modes_gameplays/changeling/powers/swallow.dm @@ -52,6 +52,8 @@ user.visible_message("[user] devours [target]!", "We have devour [target]!") to_chat(target, "You have been devoured by the changeling!") + var/mob/living/carbon/human/changeling = user + changeling.mind.pluvian_social_credit += target.mind.pluvian_social_credit for(var/obj/item/I in target) target.drop_from_inventory(I) target.spawn_gibs() diff --git a/code/game/gamemodes/modes_gameplays/wizard/soulstone.dm b/code/game/gamemodes/modes_gameplays/wizard/soulstone.dm index 5b409e189c6a..093f9fcca203 100644 --- a/code/game/gamemodes/modes_gameplays/wizard/soulstone.dm +++ b/code/game/gamemodes/modes_gameplays/wizard/soulstone.dm @@ -41,6 +41,9 @@ if(HAS_TRAIT(H, TRAIT_NO_SOUL) || HAS_TRAIT(H, TRAIT_SOULSTONE_IMMUNE) || H.species.flags[IS_SYNTHETIC]) to_chat(user, "У этого существа нет души.") return ..() + if(istype(H.my_religion, /datum/religion/pluvia) || H.mind.pluvian_blessed) + to_chat(user, "Душа этого существа под защитой.") + return ..() H.log_combat(user, "soul-captured via [name]") diff --git a/code/game/jobs/job/centcom.dm b/code/game/jobs/job/centcom.dm index 545455580e46..b9075318e0b9 100644 --- a/code/game/jobs/job/centcom.dm +++ b/code/game/jobs/job/centcom.dm @@ -15,7 +15,7 @@ minimal_player_age = 14 minimal_player_ingame_minutes = 2400 outfit = /datum/outfit/job/blueshield - restricted_species = list(SKRELL, UNATHI, TAJARAN, DIONA, VOX, IPC) + restricted_species = list(SKRELL, UNATHI, TAJARAN, DIONA, VOX, IPC, PLUVIAN) skillsets = list("Blueshield Officer" = /datum/skillset/blueshield) /* HEY YOU! @@ -46,5 +46,5 @@ AND BUMPING UP THE SAVEFILE_VERSION_MAX, AND SAVEFILE_VERSION_SPECIES_JOBS ~Luduk */ - restricted_species = list(SKRELL, UNATHI, TAJARAN, DIONA, VOX, IPC) + restricted_species = list(SKRELL, UNATHI, TAJARAN, DIONA, VOX, IPC, PLUVIAN) flags = JOB_FLAG_CENTCOMREPRESENTATIVE|JOB_FLAG_BLUESHIELD_PROTEC diff --git a/code/game/jobs/job/civilian_chaplain.dm b/code/game/jobs/job/civilian_chaplain.dm index b5e064764fe7..989d182b1dbd 100644 --- a/code/game/jobs/job/civilian_chaplain.dm +++ b/code/game/jobs/job/civilian_chaplain.dm @@ -16,6 +16,7 @@ outfit = /datum/outfit/job/chaplain skillsets = list("Chaplain" = /datum/skillset/chaplain) flags = JOB_FLAG_CIVIL + restricted_species = list(PLUVIAN) /datum/job/chaplain/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) if(!visualsOnly && H.mind) diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 6a539957ab56..9e0357bb415e 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -27,7 +27,7 @@ AND BUMPING UP THE SAVEFILE_VERSION_MAX, AND SAVEFILE_VERSION_SPECIES_JOBS ~Luduk */ - restricted_species = list(SKRELL, UNATHI, TAJARAN, DIONA, VOX, IPC) + restricted_species = list(SKRELL, UNATHI, TAJARAN, DIONA, VOX, IPC , PLUVIAN) flags = JOB_FLAG_SECURITY|JOB_FLAG_COMMAND|JOB_FLAG_HEAD_OF_STAFF|JOB_FLAG_BLUESHIELD_PROTEC /datum/job/warden @@ -52,7 +52,7 @@ AND BUMPING UP THE SAVEFILE_VERSION_MAX, AND SAVEFILE_VERSION_SPECIES_JOBS ~Luduk */ - restricted_species = list(TAJARAN, DIONA, VOX, IPC) + restricted_species = list(TAJARAN, DIONA, VOX, IPC, PLUVIAN) flags = JOB_FLAG_SECURITY /datum/job/warden/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) @@ -81,7 +81,7 @@ AND BUMPING UP THE SAVEFILE_VERSION_MAX, AND SAVEFILE_VERSION_SPECIES_JOBS ~Luduk */ - restricted_species = list(DIONA, IPC) + restricted_species = list(DIONA, IPC, PLUVIAN) flags = JOB_FLAG_SECURITY /datum/job/officer @@ -106,7 +106,7 @@ AND BUMPING UP THE SAVEFILE_VERSION_MAX, AND SAVEFILE_VERSION_SPECIES_JOBS ~Luduk */ - restricted_species = list(DIONA, TAJARAN, VOX, IPC) + restricted_species = list(DIONA, TAJARAN, VOX, IPC, PLUVIAN) flags = JOB_FLAG_SECURITY /datum/job/officer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) @@ -136,7 +136,7 @@ AND BUMPING UP THE SAVEFILE_VERSION_MAX, AND SAVEFILE_VERSION_SPECIES_JOBS ~Luduk */ - restricted_species = list(UNATHI, DIONA) + restricted_species = list(UNATHI, DIONA, PLUVIAN) flags = JOB_FLAG_SECURITY /datum/job/cadet @@ -161,5 +161,5 @@ AND BUMPING UP THE SAVEFILE_VERSION_MAX, AND SAVEFILE_VERSION_SPECIES_JOBS ~Luduk */ - restricted_species = list(DIONA, TAJARAN, VOX, IPC) + restricted_species = list(DIONA, TAJARAN, VOX, IPC, PLUVIAN) flags = JOB_FLAG_SECURITY diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm index c58aa0c003d1..4e6072cab56a 100644 --- a/code/game/machinery/kitchen/gibber.dm +++ b/code/game/machinery/kitchen/gibber.dm @@ -207,7 +207,7 @@ /obj/machinery/gibber/proc/gib_mob(mob/user) occupant.log_combat(user, "gibbed via [name]") - + SEND_SIGNAL(user, COMSIG_HUMAN_HARMED_OTHER, occupant) occupant.ghostize(bancheck = TRUE) occupant.harvest() diff --git a/code/game/machinery/vending/eat.dm b/code/game/machinery/vending/eat.dm index 6c608f1fd7a1..93d7f1dc6f01 100644 --- a/code/game/machinery/vending/eat.dm +++ b/code/game/machinery/vending/eat.dm @@ -152,6 +152,7 @@ /obj/item/weapon/reagent_containers/food/snacks/chinese/sweetsourchickenball = 6, /obj/item/weapon/reagent_containers/food/snacks/chinese/newdles = 6, /obj/item/weapon/reagent_containers/food/snacks/chinese/rice = 6, + /obj/item/weapon/reagent_containers/food/snacks/chinese/lunarice = 12, /obj/item/weapon/kitchen/utensil/fork/sticks = 18, ) prices = list( @@ -160,6 +161,7 @@ /obj/item/weapon/reagent_containers/food/snacks/chinese/sweetsourchickenball = 25, /obj/item/weapon/reagent_containers/food/snacks/chinese/newdles = 25, /obj/item/weapon/reagent_containers/food/snacks/chinese/rice = 25, + /obj/item/weapon/reagent_containers/food/snacks/chinese/lunarice = 50, /obj/item/weapon/kitchen/utensil/fork/sticks = 1, ) refill_canister = /obj/item/weapon/vending_refill/chinese diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index 1e76732806d5..988704461fa3 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -80,6 +80,7 @@ chassis.visible_message("[chassis] squeezes [target].") M.log_combat(chassis.occupant, "attacked via [chassis]'s [name]") + SEND_SIGNAL(chassis.occupant, COMSIG_HUMAN_HARMED_OTHER, M) else step_away(M,chassis) occupant_message("You push [target] out of the way.") @@ -145,6 +146,7 @@ if(isliving(target)) var/mob/living/M = target M.log_combat(chassis.occupant, "attacked via [chassis]'s [name]") + SEND_SIGNAL(chassis.occupant, COMSIG_HUMAN_HARMED_OTHER, M) log_message("Drilled through [target]") target.ex_act(EXPLODE_HEAVY) @@ -212,6 +214,8 @@ if(isliving(target)) var/mob/living/M = target M.log_combat(chassis.occupant, "attacked via [chassis]'s [name]") + SEND_SIGNAL(chassis.occupant, COMSIG_HUMAN_HARMED_OTHER, M) + log_message("Drilled through [target]") target.ex_act(EXPLODE_HEAVY) return 1 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index fc6b2b15f007..49faaea0ec1f 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -846,6 +846,7 @@ playsound(M, 'sound/items/tools/screwdriver-stab.ogg', VOL_EFFECTS_MASTER) M.log_combat(user, "eyestabbed with [name]") + SEND_SIGNAL(user, COMSIG_HUMAN_HARMED_OTHER, M) add_fingerprint(user) if(M != user) diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 956ccdca6282..fb9276d386ea 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -117,6 +117,7 @@ icon_state = "health" to_chat(user,"Успешное облучение [M].") M.log_combat(user, "irradiated with [name]") + SEND_SIGNAL(user, COMSIG_HUMAN_HARMED_OTHER, M) spawn((wavelength+(intensity*4))*5) if(M) if(intensity >= 5) diff --git a/code/game/objects/items/devices/scanners/occult_pinpointer.dm b/code/game/objects/items/devices/scanners/occult_pinpointer.dm index f9ffb68d3f2f..7b6ede36abe0 100644 --- a/code/game/objects/items/devices/scanners/occult_pinpointer.dm +++ b/code/game/objects/items/devices/scanners/occult_pinpointer.dm @@ -19,6 +19,7 @@ START_PROCESSING(SSobj, src) else icon_state = "locoff" + target = null to_chat(usr, "You deactivate the [name]") STOP_PROCESSING(SSobj, src) active = !active @@ -41,11 +42,17 @@ /obj/item/weapon/occult_pinpointer/process() if(!active) return + if(!target) + var/list/wisp_list = list() + for(var/mob/living/simple_animal/ancestor_wisp/W in living_list) + wisp_list += W + target = pick(wisp_list) + message_admins("[target]") if(!target) target = locate(target_type) - if(!target) - icon_state = "locnull" - return + if(!target) + icon_state = "locnull" + return set_dir(get_dir(src,target)) if(get_dist(src,target)) icon_state = "locon" diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index a6753e1d1734..b5a16ace006e 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -92,6 +92,12 @@ name = "fried rice" icon_state = "chinese4" +/obj/item/trash/lunarice + name = "empty lunarice`s plate" + cases = list("Тарелка", "Тарелки", "Тарелке", "Тарелку", "Тарелкой", "Тарелке") + icon_state = "lunarice" + item_state_world = "lunarice_world" + /obj/item/trash/fries name = "Space Fries" icon_state = "fries" diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 7282d707ceab..96aa8adcbc5c 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -31,6 +31,7 @@ if(ismob(target)) var/mob/living/M = target M.log_combat(user, "planted (attempt) with [name]") + SEND_SIGNAL(user, COMSIG_HUMAN_HARMED_OTHER, M) user.visible_message(" [user.name] пытается установить взрывчатку на [M.name]!") else user.attack_log += "\[[time_stamp()]\] [user.real_name] tried planting [name] on [target.name]" diff --git a/code/game/objects/items/weapons/hydroponics.dm b/code/game/objects/items/weapons/hydroponics.dm index 42abbac48010..7bc8dc168ef8 100644 --- a/code/game/objects/items/weapons/hydroponics.dm +++ b/code/game/objects/items/weapons/hydroponics.dm @@ -90,6 +90,7 @@ to_chat(M, "You are stunned by the powerful acid of the Deathnettle!") M.log_combat(user, "stunned with [name]") + SEND_SIGNAL(user, COMSIG_HUMAN_HARMED_OTHER, M) playsound(src, 'sound/weapons/bladeslice.ogg', VOL_EFFECTS_MASTER) @@ -372,5 +373,6 @@ var/global/gourd_name = null //Attack logs target.log_combat(user, "smashed with a [name] (INTENT: [uppertext(user.a_intent)])") + SEND_SIGNAL(user, COMSIG_HUMAN_HARMED_OTHER, target) qdel(src) diff --git a/code/game/objects/items/weapons/implants/mindshield.dm b/code/game/objects/items/weapons/implants/mindshield.dm index 413b60f79b6b..cde7642bbf41 100644 --- a/code/game/objects/items/weapons/implants/mindshield.dm +++ b/code/game/objects/items/weapons/implants/mindshield.dm @@ -23,6 +23,7 @@ return FALSE else to_chat(H, "") + H.mind.pluvian_social_credit = 0 if(prob(50) && !H.isSynthetic()) H.visible_message("[H] внезапно становится очень красным и начинает корчиться. В воздухе появляется странный запах....", \ @@ -89,7 +90,7 @@ continue R.Deconvert() cleared_role = TRUE - + M.mind.pluvian_social_credit = 0 if(cleared_role) // M.mind.remove_objectives() Uncomment this if you're feeling suicidal, and inable to see player's objectives. to_chat(M, "Вам вживили [CASE(src, NOMINATIVE_CASE)], и теперь вы должны служить НТ. Ваша прежняя миссия больше не имеет значения. Слава НТ!") diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index e0f1a6aa0338..f249b46ece4b 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -258,6 +258,7 @@ return M.log_combat(user, "attacked with [name]") + SEND_SIGNAL(user, COMSIG_HUMAN_HARMED_OTHER, M) var/t = user.get_targetzone() if (t == BP_HEAD) diff --git a/code/game/objects/items/weapons/makeshift.dm b/code/game/objects/items/weapons/makeshift.dm index 88326624f851..7965e786e258 100644 --- a/code/game/objects/items/weapons/makeshift.dm +++ b/code/game/objects/items/weapons/makeshift.dm @@ -186,6 +186,7 @@ H.visible_message("[M] has been beaten with the [src] by [user]!") H.log_combat(user, "attacked with [name]") + SEND_SIGNAL(user, COMSIG_HUMAN_HARMED_OTHER, H) playsound(src, pick(SOUNDIN_GENHIT), VOL_EFFECTS_MASTER) else if(!status) @@ -207,6 +208,7 @@ H.visible_message("[M] has been stunned with the [src] by [user]!") H.log_combat(user, "stunned with [name]") + SEND_SIGNAL(user, COMSIG_HUMAN_HARMED_OTHER, H) playsound(src, 'sound/weapons/Egloves.ogg', VOL_EFFECTS_MASTER) // if(charges < 1) diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index 5561453ab80d..056475ee0330 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -141,6 +141,7 @@ user.visible_message("[M] has been stunned with \the [src] by [user]!", blind_message = "You hear someone fall") M.log_combat(user, "attacked with [name] (INTENT: [uppertext(user.a_intent)])") + SEND_SIGNAL(user, COMSIG_HUMAN_HARMED_OTHER, M) //Telescopic baton /obj/item/weapon/melee/telebaton @@ -233,6 +234,7 @@ user.do_attack_animation(H) H.visible_message("[user] hit [H] harmlessly with a telebaton.") H.log_combat(user, "hit harmlessly with [name]") + SEND_SIGNAL(user, COMSIG_HUMAN_HARMED_OTHER, H) return if(..()) L.apply_effect(30, AGONY, target_armor) diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 7c138f010e8e..11792b6a7db1 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -393,6 +393,12 @@ "[user == M ? "You tie" : "[user] ties"] \the [src] over your neck!") playsound(src, 'sound/effects/noosed.ogg', VOL_EFFECTS_MASTER) message_admins("[key_name_admin(M)] was hanged by [key_name(user)]. [ADMIN_JMP(M)]") + + if(M == user) + SEND_SIGNAL(M, COMSIG_HUMAN_ON_SUICIDE, src) + else + SEND_SIGNAL(user, COMSIG_HUMAN_HARMED_OTHER, M) + for(var/alert in M.alerts) var/atom/movable/screen/alert/A = M.alerts[alert] if(A.master.icon_state == "noose") // our alert icon is terrible, let's build a new one diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index bc46970475e0..7fb8dff59549 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -436,6 +436,7 @@ playsound(src, 'sound/weapons/tablehit1.ogg', VOL_EFFECTS_MASTER) victim.log_combat(assailant, "face-slammed against [name]") + SEND_SIGNAL(assailant, COMSIG_HUMAN_HARMED_OTHER,victim) if(prob(30) && ishuman(victim)) var/mob/living/carbon/human/H = victim @@ -734,7 +735,7 @@ /* * reinforced glass table */ - + /obj/structure/table/rglass name = "reinforced glass table" desc = "A reinforced version of the glass table" @@ -797,7 +798,7 @@ can_cut = HAS_TRAIT(D, TRAIT_DOUBLE_WIELDED) if(!can_cut) - return ..() + return user.do_attack_animation(src) user.SetNextMove(CLICK_CD_MELEE) diff --git a/code/game/objects/structures/windows/window.dm b/code/game/objects/structures/windows/window.dm index 752ba2cd4a15..6a2562a60698 100644 --- a/code/game/objects/structures/windows/window.dm +++ b/code/game/objects/structures/windows/window.dm @@ -95,6 +95,7 @@ visible_message("[A] slams [M] against \the [src]!") M.log_combat(user, "slammed against [name]") + SEND_SIGNAL(user, COMSIG_HUMAN_HARMED_OTHER, M) if(2) if (prob(50)) M.Stun(1) @@ -103,6 +104,7 @@ take_damage(9, BRUTE, MELEE) visible_message("[A] bashes [M] against \the [src]!") M.log_combat(user, "bashed against [name]") + SEND_SIGNAL(user, COMSIG_HUMAN_HARMED_OTHER, M) if(3) M.Stun(5) M.Weaken(5) @@ -110,6 +112,7 @@ take_damage(12, BRUTE, MELEE) visible_message("[A] crushes [M] against \the [src]!") M.log_combat(user, "crushed against [name]") + SEND_SIGNAL(user, COMSIG_HUMAN_HARMED_OTHER, M) return return ..() diff --git a/code/game/turfs/floor/carpets.dm b/code/game/turfs/floor/carpets.dm index 40bc8b927c39..09b2d5415901 100644 --- a/code/game/turfs/floor/carpets.dm +++ b/code/game/turfs/floor/carpets.dm @@ -19,6 +19,11 @@ /turf/simulated/floor/carpet/make_plating() ChangeTurf(/turf/simulated/floor/plating) +/turf/simulated/floor/carpet/Entered(atom/movable/O) + ..() + if(ishuman(O)) + SEND_SIGNAL(O, COMSIG_HUMAN_ON_CARPET, src) + /turf/unsimulated/floor/carpet // copypaste because we still have unsim as different type :( name = "red classic carpet" icon_state = "center_8" diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 0619f1cb4eca..0ed8f3303d89 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -121,7 +121,13 @@ var/global/BSACooldown = 0 Skills panel "} - if (M.client) + if(global.pluvia_religion?.is_member(M) && M.mind) + body += {"

+ Pluvian Religion: Karma: [M.mind.pluvian_social_credit] / [global.pluvia_religion.social_credit_threshold] | Haram: [M.mind.pluvian_haram_points] | Bless | Haram +
+ "} + + if(M.client) if(!isnewplayer(M)) body += "
" body += "
" 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]