From f98ce0575ad755b021fcf9794a31ef37ef100ff8 Mon Sep 17 00:00:00 2001 From: CHOMPStation2StaffMirrorBot <94713762+CHOMPStation2StaffMirrorBot@users.noreply.github.com> Date: Thu, 20 Mar 2025 16:50:11 -0700 Subject: [PATCH] [MIRROR] Redgate Inhabitants (#10483) Co-authored-by: SatinIsle <98125273+SatinIsle@users.noreply.github.com> --- .../objects/structures/ghost_pods/event_vr.dm | 39 +++++++++++++++++-- code/modules/awaymissions/redgate.dm | 25 +++++++++++- .../mob/living/carbon/human/human_defines.dm | 2 + maps/redgate/cybercity.dmm | 7 +++- maps/redgate/darkadventure.dmm | 8 +++- maps/redgate/eggnogtown.dmm | 6 ++- maps/redgate/facility.dmm | 6 ++- maps/redgate/falls/falls.dmm | 6 ++- maps/redgate/fantasy.dmm | 6 ++- maps/redgate/hotsprings.dmm | 6 ++- maps/redgate/innland.dmm | 6 ++- maps/redgate/islands.dmm | 6 ++- maps/redgate/jungle.dmm | 6 ++- maps/redgate/laserdome.dmm | 6 ++- maps/redgate/stardog.dmm | 7 +++- maps/redgate/teppiranch.dmm | 6 ++- maps/redgate/train_upper.dmm | 6 ++- 17 files changed, 136 insertions(+), 18 deletions(-) diff --git a/code/game/objects/structures/ghost_pods/event_vr.dm b/code/game/objects/structures/ghost_pods/event_vr.dm index ee76fde064..00757ea022 100644 --- a/code/game/objects/structures/ghost_pods/event_vr.dm +++ b/code/game/objects/structures/ghost_pods/event_vr.dm @@ -203,6 +203,7 @@ anchored = TRUE invisibility = INVISIBILITY_OBSERVER spawn_active = TRUE + var/redgate_restricted = FALSE //override the standard attack_ghost proc for custom messages /obj/structure/ghost_pod/ghost_activated/maint_lurker/attack_ghost(var/mob/observer/dead/user) @@ -222,7 +223,7 @@ var/choice = tgui_alert(user, "Using this spawner will spawn you as your currently loaded character slot in a special role. It should not be used with characters you regularly play on station. Are you absolutely sure you wish to continue?", "Stowaway Spawner", list("Yes", "No")) // CHOMPEdit - if(!choice || choice == "No") + if(choice != "Yes") return create_occupant(user) @@ -258,8 +259,11 @@ new_character.regenerate_icons() new_character.update_transform() - - to_chat(new_character, span_notice("You are a " + span_bold(JOB_MAINT_LURKER) + ", a loose end... you have no special advantages compared to the rest of the crew, so be cautious! You have spawned with an ID that will allow you free access to maintenance areas along with any of your chosen loadout items that are not role restricted, and can make use of anything you can find in maintenance.")) + if(redgate_restricted) + new_character.redgate_restricted = TRUE + to_chat(new_character, span_notice("You are an inhabitant of this redgate location, you have no special advantages compared to the rest of the crew, so be cautious! You have spawned with an ID that will allow you free access to basic doors along with any of your chosen loadout items that are not role restricted, and can make use of anything you can find in the redgate map.")) + else + to_chat(new_character, span_notice("You are a " + span_bold(JOB_MAINT_LURKER) + ", a loose end... you have no special advantages compared to the rest of the crew, so be cautious! You have spawned with an ID that will allow you free access to maintenance areas along with any of your chosen loadout items that are not role restricted, and can make use of anything you can find in maintenance.")) to_chat(new_character, span_critical("Please be advised, this role is " + span_bold("NOT AN ANTAGONIST."))) to_chat(new_character, span_notice("Whoever or whatever your chosen character slot is, your role is to facilitate roleplay focused around that character; this role is not free license to attack and murder people without provocation or explicit out-of-character consent. You should probably be cautious around high-traffic and highly sensitive areas (e.g. Telecomms) as Security personnel would be well within their rights to treat you as a trespasser. That said, good luck!")) @@ -270,3 +274,32 @@ . = ..() if(!(src in active_ghost_pods)) active_ghost_pods += src + +/// redspace variant + +/obj/structure/ghost_pod/ghost_activated/maint_lurker/redgate + name = "Redspace inhabitant hole" + desc = "A starting location for characters who exist inside of the redgate!" + redgate_restricted = TRUE + +/obj/structure/ghost_pod/ghost_activated/maint_lurker/redgate/attack_ghost(var/mob/observer/dead/user) + if(jobban_isbanned(user, JOB_GHOSTROLES)) + to_chat(user, span_warning("You cannot use this spawnpoint because you are banned from playing ghost roles.")) + return + + //No whitelist + if(!is_alien_whitelisted(user.client, GLOB.all_species[user.client.prefs.species])) + to_chat(user, span_warning("You cannot use this spawnpoint to spawn as a species you are not whitelisted for!")) + return + + //No OOC notes/FT + if(not_has_ooc_text(user)) + //to_chat(user, span_warning("You must have proper out-of-character notes and flavor text configured for your current character slot to use this spawnpoint.")) + return + + var/choice = tgui_alert(user, "Using this spawner will spawn you as your currently loaded character slot in a special role. It should be a character who has a suitable reason for existing within this redspace location. You will not be able to leave through the redgate until another character grants you permission by clicking on the redgate with you nearby. Are you absolutely sure you wish to continue?", "Redspace Inhabitant Spawner", list("Yes", "No")) + + if(choice != "Yes") + return + + create_occupant(user) diff --git a/code/modules/awaymissions/redgate.dm b/code/modules/awaymissions/redgate.dm index eba8db323b..e2c0858580 100644 --- a/code/modules/awaymissions/redgate.dm +++ b/code/modules/awaymissions/redgate.dm @@ -35,6 +35,11 @@ keycheck = FALSE //we'll allow it else return + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.redgate_restricted) + to_chat(M, span_warning("You can not walk through the redgate without another character giving you permission (by clicking on the redgate with you nearby).")) + return if(is_type_in_list(M, restrictions)) //Some stuff we don't want to bring EVEN IF it has a key. return @@ -103,7 +108,25 @@ /obj/structure/redgate/attack_hand(mob/M as mob) if(density) - src.teleport(M) + if(ishuman(M)) + var/mob/living/carbon/human/O = M + var/list/nearby_restricted = list() + for(var/obj/structure/redgate/g in world) + for(var/mob/living/carbon/human/H in oview(7,g)) + if(H.redgate_restricted && !O.redgate_restricted) //For every restricted human near the redgate, if you aren't restricted yourself, put them in a list. + nearby_restricted |= H + if(!nearby_restricted.len) + teleport(M) //teleport functionality remains if no restricted people are nearby. + else + var/mob/living/carbon/human/restricted_human = tgui_input_list(M, "Who do you wish to give access through the redgate?", "Nearby Redgate Inhabitants", nearby_restricted) + if(!restricted_human) + return + restricted_human.redgate_restricted = FALSE + to_chat(M, span_notice("You have given [restricted_human] permission to use the redgate.")) + to_chat(restricted_human, span_notice("[M] has given you permission to use the redgate.")) + log_and_message_admins("[M] has given [restricted_human] permission to use the redgate.") + else + teleport(M) else if(!find_partner()) to_chat(M, span_warning("The [src] remains off... seems like it doesn't have a destination.")) diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index ecbf6b0a98..6243b54459 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -176,3 +176,5 @@ var/loneliness_stage = 0 var/next_loneliness_time = 0 + + var/redgate_restricted = FALSE diff --git a/maps/redgate/cybercity.dmm b/maps/redgate/cybercity.dmm index e8b8aea242..b6505ae640 100644 --- a/maps/redgate/cybercity.dmm +++ b/maps/redgate/cybercity.dmm @@ -1,4 +1,8 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aaa" = ( +/obj/structure/ghost_pod/ghost_activated/maint_lurker/redgate, +/turf/simulated/floor/tiled/neutral, +/area/redgate/city/house2) "acu" = ( /obj/structure/toilet, /turf/simulated/floor/tiled/white, @@ -17412,6 +17416,7 @@ pixel_x = -24; pixel_y = -24 }, +/obj/structure/ghost_pod/ghost_activated/maint_lurker/redgate, /turf/simulated/floor/tiled/white, /area/redgate/city/house9) "wJC" = ( @@ -24674,7 +24679,7 @@ iPk nqa raL gox -ica +aaa ica vLi eXX diff --git a/maps/redgate/darkadventure.dmm b/maps/redgate/darkadventure.dmm index 034cb6e02c..733044d40b 100644 --- a/maps/redgate/darkadventure.dmm +++ b/maps/redgate/darkadventure.dmm @@ -1,4 +1,10 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/structure/ghost_pod/ghost_activated/maint_lurker/redgate, +/turf/simulated/floor/outdoors/ironsand{ + outdoors = 0 + }, +/area/redgate/wilds) "af" = ( /obj/structure/prop/rock/round, /turf/simulated/floor/outdoors/ironsand, @@ -15018,7 +15024,7 @@ tV YU ax ax -ax +aa ax ax YU diff --git a/maps/redgate/eggnogtown.dmm b/maps/redgate/eggnogtown.dmm index 1bd1ba29ca..1e0d51ef85 100644 --- a/maps/redgate/eggnogtown.dmm +++ b/maps/redgate/eggnogtown.dmm @@ -407,6 +407,10 @@ /obj/structure/table/fancyblack, /turf/simulated/floor/wood, /area/redgate/eggnogtown/kitchihome/den) +"bh" = ( +/obj/structure/ghost_pod/ghost_activated/maint_lurker/redgate, +/turf/simulated/floor/wood, +/area/redgate/eggnogtown/alipad) "bk" = ( /obj/machinery/alarm/alarms_hidden{ dir = 1; @@ -18943,7 +18947,7 @@ dN dN dN dN -dN +bh dN dN QM diff --git a/maps/redgate/facility.dmm b/maps/redgate/facility.dmm index 5e6127e7d0..0657e6b588 100644 --- a/maps/redgate/facility.dmm +++ b/maps/redgate/facility.dmm @@ -1,4 +1,8 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aaa" = ( +/obj/structure/ghost_pod/ghost_activated/maint_lurker/redgate, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) "aau" = ( /obj/structure/closet/secure_closet/medical2, /turf/simulated/floor/tiled/white, @@ -18579,7 +18583,7 @@ wCZ mnq tTv xEz -rzR +aaa xqm gCf gCf diff --git a/maps/redgate/falls/falls.dmm b/maps/redgate/falls/falls.dmm index 0c5830189a..8e0feea99d 100644 --- a/maps/redgate/falls/falls.dmm +++ b/maps/redgate/falls/falls.dmm @@ -1,4 +1,8 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/structure/ghost_pod/ghost_activated/maint_lurker/redgate, +/turf/simulated/floor/atoll, +/area/gateway/atoll/falls) "af" = ( /obj/effect/decal/shadow/floor, /obj/effect/floor_decal/atoll{ @@ -19602,7 +19606,7 @@ YG gI vl Du -VM +aa jD Jk PC diff --git a/maps/redgate/fantasy.dmm b/maps/redgate/fantasy.dmm index 7ed135d1f7..55f01bacf1 100644 --- a/maps/redgate/fantasy.dmm +++ b/maps/redgate/fantasy.dmm @@ -1,4 +1,8 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/structure/ghost_pod/ghost_activated/maint_lurker/redgate, +/turf/simulated/floor/wood/alt, +/area/redgate/fantasy/tavern) "ab" = ( /obj/structure/undies_wardrobe, /turf/simulated/floor/wood/alt/panel, @@ -13585,7 +13589,7 @@ US uu He RO -US +aa US He RO diff --git a/maps/redgate/hotsprings.dmm b/maps/redgate/hotsprings.dmm index 79ca20755c..6b628b91ca 100644 --- a/maps/redgate/hotsprings.dmm +++ b/maps/redgate/hotsprings.dmm @@ -1,4 +1,8 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/structure/ghost_pod/ghost_activated/maint_lurker/redgate, +/turf/simulated/floor/tiled/steel, +/area/redgate/hotsprings/outdoors) "as" = ( /turf/simulated/floor/water{ name = "hotspring"; @@ -20512,7 +20516,7 @@ La iF fB iF -iF +aa iF be iF diff --git a/maps/redgate/innland.dmm b/maps/redgate/innland.dmm index 95300851ca..e4d5b1beca 100644 --- a/maps/redgate/innland.dmm +++ b/maps/redgate/innland.dmm @@ -1,4 +1,8 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/structure/ghost_pod/ghost_activated/maint_lurker/redgate, +/turf/simulated/floor/outdoors/grass/seasonal, +/area/redgate/wilds) "ae" = ( /turf/simulated/floor/beach/sand{ outdoors = 1 @@ -18130,7 +18134,7 @@ cs cs cs cs -cs +aa cs cs cs diff --git a/maps/redgate/islands.dmm b/maps/redgate/islands.dmm index aa30fd9584..a8b42ae0d1 100644 --- a/maps/redgate/islands.dmm +++ b/maps/redgate/islands.dmm @@ -1,4 +1,8 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/structure/ghost_pod/ghost_activated/maint_lurker/redgate, +/turf/simulated/floor/beach/sand/desert/outdoors, +/area/redgate/islands/ocean) "ah" = ( /obj/structure/table/steel_reinforced, /turf/simulated/floor/tiled/dark, @@ -17351,7 +17355,7 @@ tD tD tD nx -nx +aa nx La Bp diff --git a/maps/redgate/jungle.dmm b/maps/redgate/jungle.dmm index d08f7e8296..7f19e76e07 100644 --- a/maps/redgate/jungle.dmm +++ b/maps/redgate/jungle.dmm @@ -1,4 +1,8 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/structure/ghost_pod/ghost_activated/maint_lurker/redgate, +/turf/simulated/floor/wood, +/area/redgate/jungle/aboveground) "ac" = ( /obj/structure/bed/bath, /turf/simulated/floor/tiled/yellow, @@ -18285,7 +18289,7 @@ zU zU ZM Mo -wP +aa wP ZM zU diff --git a/maps/redgate/laserdome.dmm b/maps/redgate/laserdome.dmm index e2b8b3b87d..21e33b85f8 100644 --- a/maps/redgate/laserdome.dmm +++ b/maps/redgate/laserdome.dmm @@ -1,4 +1,8 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aaa" = ( +/obj/structure/ghost_pod/ghost_activated/maint_lurker/redgate, +/turf/simulated/floor/tiled/white, +/area/redgate/laserdome/lobby/showers) "aeW" = ( /obj/effect/floor_decal/corner/red/full{ dir = 8 @@ -14677,7 +14681,7 @@ xLH xLH yjF lcP -lcP +aaa lcP lcP jho diff --git a/maps/redgate/stardog.dmm b/maps/redgate/stardog.dmm index 711109ba9f..d20def103f 100644 --- a/maps/redgate/stardog.dmm +++ b/maps/redgate/stardog.dmm @@ -1,4 +1,9 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/structure/bed/chair/sofa/corp, +/obj/structure/ghost_pod/ghost_activated/maint_lurker/redgate, +/turf/simulated/floor/lino, +/area/redgate/stardog/lounge) "ac" = ( /turf/simulated/floor/flesh/mover{ dir = 4 @@ -9391,7 +9396,7 @@ aj aj jf jM -Pg +aa aj aj jf diff --git a/maps/redgate/teppiranch.dmm b/maps/redgate/teppiranch.dmm index fa0eeb4164..afdefb9fb0 100644 --- a/maps/redgate/teppiranch.dmm +++ b/maps/redgate/teppiranch.dmm @@ -1,4 +1,8 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/structure/ghost_pod/ghost_activated/maint_lurker/redgate, +/turf/simulated/floor/holofloor/bmarble, +/area/redgate/structure/powered/teppi_ranch) "ak" = ( /obj/structure/bonfire, /turf/simulated/floor/beach/sand{ @@ -10954,7 +10958,7 @@ YW Qw Qw Qw -Qw +aa Qw Qw Qw diff --git a/maps/redgate/train_upper.dmm b/maps/redgate/train_upper.dmm index 56b0847229..08a1b4da20 100644 --- a/maps/redgate/train_upper.dmm +++ b/maps/redgate/train_upper.dmm @@ -1,4 +1,8 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/structure/ghost_pod/ghost_activated/maint_lurker/redgate, +/turf/simulated/floor/tiled/dark, +/area/redgate/train/staff) "ai" = ( /turf/simulated/shuttle/wall/voidcraft/hard_corner, /area/redgate/train/gym) @@ -7969,7 +7973,7 @@ wl dL yp Wy -ua +aa wl zj tK