[MIRROR] Abandoned Domains: Adds two new psyker-oriented virtual domains [MDB IGNORE] (#24303)

* Abandoned Domains: Adds two new psyker-oriented virtual domains (#78892)

## About The Pull Request

_Really? Bitrunning maps are so simple you could do them with your eyes
closed? Hmmmmm..._

This adds two new medium-difficulty virtual domains to the pool -- Crate
Chaos and Infected Domain.

These two domains take you to neglected corners of the virtual world.
These are unstable, bizarre locales that do not support the bitrunning
machine's visual display, and must be traversed using echolocation.
**_These domains have been designed around you being a psyker, and will
turn your bitrunner avatar into a psyker until they leave the domain._**

_**Crate Chaos:** Low cost, medium reward._

Sneak into an abandoned virtual domain, where they store all of the loot
crates. There's about 40-ish crates in this space, and one of them
(RANDOM) is the encrypted cache we're looking for. The crates must be
manually inspected, requiring you to drop your weapon for a few moments,
but that shouldn't be a problem. There's no hostiles, just a bunch of
crates... right?

This one has very few shenanigans or threats in it. It's meant to be an
introductory experience to interfacing with things as a psyker, and
getting the rhythm down for moving between visual pulses.

_**Infected Domain:** Medium cost, high reward._

Enter another abandoned virtual domain. This one was sealed off from the
digital world after the cyber-police failed to contain a virus that
zombified its inhabitants, leaving it to grow unstable and full of
holes. Fortunately, you're provided with the single best tool for arming
yourself against zombies in any video game, ever -- Your very own
Mystery Box. Get armed with (basically) whatever gun you want, and go
put those wacky psyker abilities to use against those zombies.

This one is a lot meaner. Many chasms, landmines, and zombies. Walk
slowly, stay with your fellow bitrunners, and if it's too hard, there's
no shame in going back and rolling for a better gun!

The domains themselves are VERY simple, since there's little need for
decor or particularly complex layouts. The idea is that you should be
able to see everything you need to see in a given room/area with a
single vision pulse. Here's what one of the maps looks like:

![image](https://github.com/tgstation/tgstation/assets/28870487/fe63adce-aa05-4339-9d19-28ce06a2d31f)

Err, uh, I mean... This is what the maps look like:

<details>
<summary>SPOILERS BEWARE</summary>
<br>

![image](https://github.com/tgstation/tgstation/assets/28870487/265ecdc5-50f6-4a28-8068-fab08ae1f5e8)

![image](https://github.com/tgstation/tgstation/assets/28870487/0b41da6a-e018-4434-9368-6daee1f97fe9)

(You wanna find out if there's something cool under those red lines? Go
there yourself!)

</details>

These two psyker maps come with their own psyker safehouse too -- The
Bathroom. It's gross, the medical supplies are kind of just sitting
there on the floor... It looks a little bit better when you're blind, I
guess.

![image](https://github.com/tgstation/tgstation/assets/28870487/a10b70bb-5586-4d37-bbb1-a642d8524d54)
## Why It's Good For The Game

I like psykers a lot more than I'm willing to admit. Unfortunately, the
jankiness of echolocation provides such a disadvantage at times, that
any "real" conflict is usually over before the psyker is even aware
they're taking damage.

Fortunately, the controlled environments that bitrunning maps are
perfect for psykers. They give the opportunity to craft an experience
around the player being blind, rather than forcing them to play blind
through a seeing mans world.

These two domains should present players with a unique challenge that is
designed around playing as a psyker, with slightly higher-than-usual
rewards for their trouble. More importantly -- They're fun!
## Changelog
🆑 Rhials
add: Two new psyker-oriented virtual domains -- Crate Chaos and Infected
Domain.
add: Map helper for cyber-police corpse spawn.
add: Map helper for swapping the encrypted crate in an area with a
random crate from that same area.
/🆑

* Abandoned Domains: Adds two new psyker-oriented virtual domains

---------

Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
This commit is contained in:
SkyratBot
2023-10-13 02:56:54 +02:00
committed by GitHub
parent 2c0367e07c
commit 300adb2464
10 changed files with 2532 additions and 1 deletions

View File

@@ -0,0 +1,155 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/obj/effect/decal/cleanable/dirt/dust,
/turf/open/floor/iron/freezer,
/area/virtual_domain/safehouse)
"c" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/structure/extinguisher_cabinet/directional/north,
/turf/open/floor/iron/freezer,
/area/virtual_domain/safehouse)
"e" = (
/obj/effect/spawner/structure/window,
/obj/effect/decal/cleanable/blood/splatter/over_window,
/turf/open/floor/iron/freezer,
/area/virtual_domain/safehouse)
"q" = (
/obj/structure/urinal/directional/west,
/turf/open/floor/iron/freezer,
/area/virtual_domain/safehouse)
"s" = (
/obj/effect/landmark/bitrunning/cache_goal_turf,
/obj/effect/turf_decal/loading_area{
dir = 4
},
/obj/machinery/light/small/blacklight/directional/east,
/turf/open/floor/bitrunning_transport,
/area/virtual_domain/safehouse)
"v" = (
/obj/machinery/light/small/blacklight/directional/east,
/obj/effect/decal/cleanable/blood,
/obj/effect/decal/cleanable/blood/tracks,
/obj/vehicle/ridden/wheelchair,
/obj/effect/spawner/random/medical/injector,
/turf/open/floor/iron/freezer,
/area/virtual_domain/safehouse)
"x" = (
/obj/structure/railing/corner/end{
dir = 4
},
/turf/open/floor/iron/freezer,
/area/virtual_domain/safehouse)
"y" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/light/small/blacklight/directional/west,
/obj/effect/spawner/random/medical/medkit,
/obj/effect/spawner/random/medical/medkit,
/obj/effect/spawner/random/medical/minor_healing,
/turf/open/floor/iron/freezer,
/area/virtual_domain/safehouse)
"z" = (
/obj/structure/sign/poster/abductor/random/directional/east,
/obj/effect/decal/cleanable/blood/tracks,
/turf/open/floor/iron/freezer,
/area/virtual_domain/safehouse)
"D" = (
/turf/open/floor/iron/freezer,
/area/virtual_domain/safehouse)
"G" = (
/turf/closed/wall/mineral/silver,
/area/virtual_domain/safehouse)
"J" = (
/obj/structure/railing,
/obj/effect/landmark/bitrunning/cache_goal_turf,
/obj/effect/turf_decal/loading_area{
dir = 4
},
/turf/open/floor/bitrunning_transport,
/area/virtual_domain/safehouse)
"M" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/toilet{
dir = 4
},
/turf/open/floor/iron/freezer,
/area/virtual_domain/safehouse)
"N" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/freezer,
/area/virtual_domain/safehouse)
"T" = (
/obj/effect/landmark/bitrunning/hololadder_spawn,
/turf/open/floor/iron/freezer,
/area/virtual_domain/safehouse)
"V" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/extinguisher_cabinet/directional/north,
/turf/open/floor/iron/freezer,
/area/virtual_domain/safehouse)
"X" = (
/obj/structure/fans/tiny,
/obj/machinery/door/airlock/freezer,
/turf/open/floor/iron/freezer,
/area/virtual_domain/safehouse)
"Z" = (
/obj/effect/decal/cleanable/dirt/dust,
/obj/machinery/light/small/blacklight/directional/west,
/turf/open/floor/iron/freezer,
/area/virtual_domain/safehouse)
(1,1,1) = {"
G
G
G
G
G
G
"}
(2,1,1) = {"
G
Z
M
q
y
G
"}
(3,1,1) = {"
G
c
D
a
T
G
"}
(4,1,1) = {"
X
a
D
D
T
G
"}
(5,1,1) = {"
G
V
x
N
T
G
"}
(6,1,1) = {"
G
s
J
z
v
e
"}
(7,1,1) = {"
G
G
G
G
G
G
"}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -63,3 +63,41 @@
/obj/effect/landmark/bitrunning/safehouse_spawn
name = "Bitrunning safehouse spawn"
icon_state = "safehouse"
///Swaps the locations of an encrypted crate in the area with another randomly selected crate.
///Randomizes names, so you have to inspect crates manually.
/obj/effect/landmark/bitrunning/crate_replacer
name = "Bitrunning Goal Crate Randomizer"
icon_state = "crate"
/obj/effect/landmark/bitrunning/crate_replacer/Initialize(mapload)
. = ..()
#ifndef UNIT_TESTS
var/list/crate_list = list()
var/obj/structure/closet/crate/secure/bitrunning/encrypted/encrypted_crate
var/area/my_area = get_area(src)
for(var/turf/area_turf as anything in my_area.get_contained_turfs())
for(var/obj/structure/closet/crate/crate_to_check in area_turf)
if(istype(crate_to_check, /obj/structure/closet/crate/secure/bitrunning/encrypted))
encrypted_crate = crate_to_check
crate_to_check.desc += span_hypnophrase(" This feels like the crate we're looking for!")
else
crate_list += crate_to_check
crate_to_check.name = "Unidentified Crate"
if(!encrypted_crate)
stack_trace("Bitrunning Goal Crate Randomizer failed to find an encrypted crate to swap positions for.")
return
if(!length(crate_list))
stack_trace("Bitrunning Goal Crate Randomizer failed to find any NORMAL crates to swap positions for.")
return
var/original_location = encrypted_crate.loc
var/obj/structure/closet/crate/selected_crate = pick(crate_list)
encrypted_crate.abstract_move(selected_crate.loc)
selected_crate.abstract_move(original_location)
#endif

View File

@@ -41,3 +41,17 @@
officer_uniform.has_sensor = NO_SENSORS
officer_uniform.sensor_mode = SENSOR_OFF
user.update_suit_sensors()
/datum/outfit/echolocator
name = "Bitrunning Echolocator"
glasses = /obj/item/clothing/glasses/blindfold
ears = /obj/item/radio/headset/psyker //Navigating without these is horrible.
uniform = /obj/item/clothing/under/abductor
gloves = /obj/item/clothing/gloves/fingerless
shoes = /obj/item/clothing/shoes/jackboots
suit = /obj/item/clothing/suit/jacket/trenchcoat
id = /obj/item/card/id/advanced
/datum/outfit/echolocator/post_equip(mob/living/carbon/human/user, visualsOnly)
. = ..()
user.psykerize()

View File

@@ -0,0 +1,12 @@
/datum/lazy_template/virtual_domain/psyker_shuffle
name = "Crate Chaos"
cost = BITRUNNER_COST_LOW
desc = "Sneak into an abandoned corner of the virtual world, where they store all of the crates. \
Warning -- Virtual domain does not support visual display. This mission must be completed using echolocation."
difficulty = BITRUNNER_DIFFICULTY_MEDIUM
help_text = "Getting used to echolocation may be difficult. Remember to walk slowly, and carefully inspect every crate you come across."
key = "psyker_shuffle"
map_name = "psyker_shuffle"
reward_points = BITRUNNER_REWARD_MEDIUM
safehouse_path = /datum/map_template/safehouse/bathroom
forced_outfit = /datum/outfit/echolocator

View File

@@ -0,0 +1,14 @@
/datum/lazy_template/virtual_domain/psyker_zombies
name = "Infected Domain"
cost = BITRUNNER_COST_MEDIUM
desc = "Another neglected corner of the virtual world. This one had to be abandoned due to zombie virus. \
Warning -- Virtual domain does not support visual display. This mission must be completed using echolocation."
difficulty = BITRUNNER_DIFFICULTY_MEDIUM
help_text = "This once-beloved virtual domain has been corrupted by a virus, rendering it unstable, full of holes, and full of ZOMBIES! \
There should be a Mystery Box nearby to help get you armed. Get armed, and finish what the cyber-police started!"
key = "psyker_zombies"
map_name = "psyker_zombies"
reward_points = BITRUNNER_REWARD_HIGH
safehouse_path = /datum/map_template/safehouse/bathroom
forced_outfit = /datum/outfit/echolocator
extra_loot = list(/obj/item/radio/headset/psyker = 1) //Looks cool, might make your local burdened chaplain happy.

View File

@@ -46,6 +46,9 @@
/datum/map_template/safehouse/ice
filename = "ice.dmm"
/datum/map_template/safehouse/bathroom
filename = "bathroom.dmm"
/**
* Your safehouse here
* /datum/map_template/safehouse/your_type

View File

@@ -350,3 +350,7 @@
/datum/outfit/prey_pod_victim
name = "Prey Pod Victim"
uniform = /obj/item/clothing/under/rank/rnd/roboticist
/obj/effect/mob_spawn/corpse/human/cyber_police
name = "Dead Cyber Police"
outfit = /datum/outfit/cyber_police

View File

@@ -3347,9 +3347,9 @@
#include "code\modules\bitrunning\designs.dm"
#include "code\modules\bitrunning\event.dm"
#include "code\modules\bitrunning\job.dm"
#include "code\modules\bitrunning\outfits.dm"
#include "code\modules\bitrunning\turfs.dm"
#include "code\modules\bitrunning\antagonists\cyber_police.dm"
#include "code\modules\bitrunning\antagonists\outfit.dm"
#include "code\modules\bitrunning\components\avatar_connection.dm"
#include "code\modules\bitrunning\components\bitrunning_points.dm"
#include "code\modules\bitrunning\components\netpod_healing.dm"
@@ -3385,6 +3385,8 @@
#include "code\modules\bitrunning\virtual_domain\domains\legion.dm"
#include "code\modules\bitrunning\virtual_domain\domains\pipedream.dm"
#include "code\modules\bitrunning\virtual_domain\domains\pirates.dm"
#include "code\modules\bitrunning\virtual_domain\domains\psyker_shuffle.dm"
#include "code\modules\bitrunning\virtual_domain\domains\psyker_zombies.dm"
#include "code\modules\bitrunning\virtual_domain\domains\stairs_and_cliffs.dm"
#include "code\modules\bitrunning\virtual_domain\domains\syndicate_assault.dm"
#include "code\modules\bitrunning\virtual_domain\domains\test_only.dm"