diff --git a/_maps/safehouses/README.md b/_maps/safehouses/README.md index 8d64502343b..e68470d6d0b 100644 --- a/_maps/safehouses/README.md +++ b/_maps/safehouses/README.md @@ -3,7 +3,7 @@ ## Creating a new safe house 1. Create a new map inside the `_maps\safe_houses` folder using the TGM format. -2. Create a new dm file inside `modules\bitrunning\virtual_domain\safe_houses` folder.. +2. Update `safehouse.toml` with your new file 3. Place exit and goal landmarks (obj/effect/landmark/bitrunning/..). Generally, 3 exits and 2 goals are ok. 4. Ideally, leave 3 spaces for gear. This has usually been xy [1x1] [1x2] [1x3] 5. Place the modular map connector at the bottom left tile. diff --git a/_maps/safehouses/maintsafe.dmm b/_maps/safehouses/maintsafe.dmm new file mode 100644 index 00000000000..c3579c43c9c --- /dev/null +++ b/_maps/safehouses/maintsafe.dmm @@ -0,0 +1,131 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/open/floor/plating, +/area/virtual_domain/safehouse) +"g" = ( +/obj/structure/broken_flooring/corner/directional/north, +/turf/open/floor/plating, +/area/virtual_domain/safehouse) +"i" = ( +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating, +/area/virtual_domain/safehouse) +"j" = ( +/turf/closed/wall, +/area/virtual_domain/safehouse) +"l" = ( +/obj/effect/landmark/bitrunning/hololadder_spawn, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron, +/area/virtual_domain/safehouse) +"q" = ( +/obj/effect/landmark/bitrunning/hololadder_spawn, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain/safehouse) +"t" = ( +/obj/effect/landmark/bitrunning/cache_goal_turf, +/turf/open/indestructible/bitrunning_transport, +/area/virtual_domain/safehouse) +"v" = ( +/obj/structure/broken_flooring/side/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/virtual_domain/safehouse) +"y" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/virtual_domain/safehouse) +"C" = ( +/obj/structure/broken_flooring/singular/directional/north, +/obj/structure/railing/corner/end/flip, +/turf/open/floor/plating, +/area/virtual_domain/safehouse) +"E" = ( +/obj/machinery/light/red/dim/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/virtual_domain/safehouse) +"I" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/turf/open/floor/plating, +/area/virtual_domain/safehouse) +"M" = ( +/obj/effect/landmark/bitrunning/hololadder_spawn, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/iron, +/area/virtual_domain/safehouse) +"N" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/virtual_domain/safehouse) +"O" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/virtual_domain/safehouse) +"Y" = ( +/obj/machinery/light/red/dim/directional/east, +/turf/open/floor/plating, +/area/virtual_domain/safehouse) + +(1,1,1) = {" +j +j +j +j +j +j +"} +(2,1,1) = {" +j +i +E +g +M +j +"} +(3,1,1) = {" +j +y +N +v +l +j +"} +(4,1,1) = {" +I +N +a +C +q +j +"} +(5,1,1) = {" +j +a +y +N +t +j +"} +(6,1,1) = {" +j +O +Y +N +t +j +"} +(7,1,1) = {" +j +j +j +j +j +j +"} diff --git a/_maps/virtual_domains/heretic_hunt.dmm b/_maps/virtual_domains/heretic_hunt.dmm new file mode 100644 index 00000000000..80ef63e4466 --- /dev/null +++ b/_maps/virtual_domains/heretic_hunt.dmm @@ -0,0 +1,2373 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"am" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/virtual_domain) +"aR" = ( +/obj/structure/grille/broken, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/virtual_domain) +"aY" = ( +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/electrical{ + pixel_x = -8; + pixel_y = -2 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/virtual_domain) +"br" = ( +/obj/machinery/light/small/broken/directional/west, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"bC" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"bV" = ( +/obj/structure/filingcabinet/chestdrawer, +/turf/open/floor/iron, +/area/virtual_domain) +"ck" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/virtual_domain) +"cz" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/closet/secure_closet/contraband/armory, +/obj/effect/spawner/random/exotic/antag_gear_weak, +/obj/effect/spawner/random/exotic/syndie, +/turf/open/floor/iron, +/area/virtual_domain) +"cS" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted, +/mob/living/basic/pet/cat/_proc{ + faction = list("neutral", "vdom_fake_crew") + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"dh" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"di" = ( +/obj/structure/chair/office, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"ey" = ( +/obj/modular_map_root/safehouse{ + key = "maintsafe" + }, +/turf/template_noop, +/area/virtual_domain/safehouse) +"eT" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/closed/indestructible/binary, +/area/virtual_domain) +"eV" = ( +/obj/machinery/stasis{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/turf_decal/siding/blue{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/plastic, +/area/virtual_domain) +"fd" = ( +/obj/structure/frame/computer{ + dir = 1; + anchored = 1 + }, +/obj/effect/turf_decal/tile/dark_red/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"fl" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box{ + pixel_y = 10; + pixel_x = 2 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/virtual_domain) +"fn" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/visible_heretic_influence, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"fq" = ( +/obj/machinery/power/rtg, +/obj/structure/cable, +/turf/open/floor/iron, +/area/virtual_domain) +"fA" = ( +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/item/shard/titanium, +/obj/item/melee/rune_carver, +/obj/item/melee/rune_carver{ + pixel_y = 4; + pixel_x = -4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"fL" = ( +/obj/structure/table, +/obj/item/storage/medkit/emergency, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"ge" = ( +/obj/structure/table, +/obj/structure/chem_separator{ + pixel_y = 11 + }, +/obj/item/reagent_containers/applicator/pill/psicodine, +/obj/item/reagent_containers/applicator/pill/stimulant{ + pixel_y = -2; + pixel_x = -3 + }, +/obj/item/reagent_containers/applicator/pill/probital{ + pixel_x = 4; + pixel_y = -2 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"gp" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/structure/closet/emcloset, +/turf/open/floor/iron, +/area/virtual_domain) +"gz" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/virtual_domain) +"hp" = ( +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/plastic, +/area/virtual_domain) +"hy" = ( +/obj/machinery/light/small/broken/directional/west, +/mob/living/basic/heretic_summon/raw_prophet, +/turf/open/floor/plating, +/area/virtual_domain) +"hK" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/cobweb, +/obj/item/pickaxe/rusted, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"hP" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/machinery/light/cold/directional/north, +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/obj/effect/spawner/random/medical/patient_stretcher, +/obj/structure/cable, +/turf/open/floor/plastic, +/area/virtual_domain) +"hS" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/flashlight/flare{ + icon_state = "flare-on"; + light_on = 1 + }, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"hV" = ( +/obj/structure/frame/computer{ + dir = 1; + anchored = 1 + }, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/dark_red/half/contrasted, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"hY" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/turf_decal/tile/dark_red/anticorner/contrasted, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"iu" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"iw" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/iron, +/area/virtual_domain) +"iy" = ( +/obj/effect/turf_decal/tile/yellow, +/turf/open/floor/iron, +/area/virtual_domain) +"iH" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/insectguts, +/turf/open/floor/plating, +/area/virtual_domain) +"iL" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/glass, +/obj/item/storage/medkit{ + pixel_y = -3 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/turf/open/floor/plastic, +/area/virtual_domain) +"iN" = ( +/turf/template_noop, +/area/virtual_domain/safehouse) +"iQ" = ( +/obj/structure/frame/computer{ + anchored = 1 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"iV" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/item/multitool{ + pixel_x = 5; + pixel_y = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"jR" = ( +/obj/effect/turf_decal/tile/red, +/obj/machinery/digital_clock/directional/east, +/turf/open/floor/iron, +/area/virtual_domain) +"ki" = ( +/mob/living/basic/fake_crewman/engi/mod, +/turf/open/floor/iron, +/area/virtual_domain) +"kw" = ( +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"kQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/spawner/structure/electrified_grille, +/turf/open/floor/plating, +/area/virtual_domain) +"lG" = ( +/obj/effect/turf_decal/tile/blue, +/obj/machinery/portable_atmospherics/canister/anesthetic_mix, +/obj/machinery/digital_clock/directional/south, +/turf/open/floor/plastic, +/area/virtual_domain) +"mn" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/reagent_containers/syringe/contraband/bath_salts, +/obj/item/reagent_containers/syringe/contraband/methamphetamine{ + pixel_y = 4; + pixel_x = -3 + }, +/obj/item/reagent_containers/syringe/contraband/morphine{ + pixel_y = -3; + pixel_x = -2 + }, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"mu" = ( +/obj/structure/table/glass, +/obj/item/paper_bin, +/obj/item/folder/red, +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"mW" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"mX" = ( +/obj/structure/chair/office, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"nf" = ( +/obj/structure/cable, +/turf/closed/indestructible/reinforced, +/area/virtual_domain) +"nh" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/engineering/flashlight, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"nM" = ( +/obj/effect/visible_heretic_influence, +/turf/open/floor/iron, +/area/virtual_domain) +"nU" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/virtual_domain) +"oa" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/glass, +/obj/item/storage/medkit{ + pixel_y = 10; + pixel_x = 5 + }, +/obj/effect/spawner/random/medical/supplies, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/turf/open/floor/plastic, +/area/virtual_domain) +"oc" = ( +/obj/effect/visible_heretic_influence, +/obj/structure/cable, +/turf/open/floor/iron, +/area/virtual_domain) +"ok" = ( +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/tile/red/fourcorners, +/obj/item/storage/belt/unfathomable_curio, +/turf/open/floor/iron, +/area/virtual_domain) +"oD" = ( +/mob/living/basic/fake_crewman/assistant, +/obj/effect/mapping_helpers/broken_floor, +/obj/item/restraints/handcuffs/cable/yellow{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/medical/gauze/improvised{ + pixel_y = -2 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"oL" = ( +/obj/effect/turf_decal/tile/yellow, +/obj/structure/cable, +/turf/open/floor/iron, +/area/virtual_domain) +"oQ" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/glass, +/obj/item/storage/medkit/regular{ + pixel_y = 7 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/turf/open/floor/plastic, +/area/virtual_domain) +"pd" = ( +/obj/structure/girder, +/obj/structure/grille/broken, +/turf/open/floor/plating, +/area/virtual_domain) +"pe" = ( +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"pm" = ( +/obj/effect/spawner/random/clothing/costume, +/obj/structure/rack, +/turf/open/floor/plating, +/area/virtual_domain) +"pv" = ( +/obj/machinery/door/airlock/command/glass, +/turf/open/floor/iron, +/area/virtual_domain) +"pM" = ( +/mob/living/basic/fake_crewman/assistant/alt, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/virtual_domain) +"pQ" = ( +/obj/effect/spawner/random/engineering/canister, +/obj/effect/mapping_helpers/burnt_floor, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating, +/area/virtual_domain) +"rq" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/machinery/suit_storage_unit, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"rt" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/reagent_containers/syringe/epinephrine, +/obj/item/reagent_containers/syringe/epinephrine{ + pixel_x = -5; + pixel_y = -5 + }, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"rC" = ( +/turf/closed/wall/heretic_rust, +/area/virtual_domain) +"rP" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/plasma, +/turf/open/floor/plating, +/area/virtual_domain) +"sb" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/virtual_domain) +"sd" = ( +/obj/item/storage/test_tube_rack, +/obj/structure/table, +/turf/open/floor/plating, +/area/virtual_domain) +"sl" = ( +/obj/structure/steam_vent, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/virtual_domain) +"sy" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/virtual_domain) +"sL" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"sT" = ( +/obj/structure/cable, +/turf/open/floor/plastic, +/area/virtual_domain) +"sY" = ( +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"ta" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/iron, +/area/virtual_domain) +"tg" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/mopbucket, +/turf/open/floor/plating, +/area/virtual_domain) +"ts" = ( +/obj/effect/spawner/random/bureaucracy/briefcase, +/obj/effect/spawner/random/trash/box, +/turf/open/floor/plating, +/area/virtual_domain) +"uh" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/structure/cable, +/turf/open/floor/iron, +/area/virtual_domain) +"uj" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plastic, +/area/virtual_domain) +"uz" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"uS" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/virtual_domain) +"vh" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plastic, +/area/virtual_domain) +"vn" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/virtual_domain) +"vt" = ( +/obj/machinery/medical_kiosk, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plastic, +/area/virtual_domain) +"vG" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/virtual_domain) +"vO" = ( +/obj/machinery/defibrillator_mount/directional/west, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/stack/medical/gauze/improvised, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/turf/open/floor/plastic, +/area/virtual_domain) +"vP" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/virtual_domain) +"vR" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/virtual_domain) +"wK" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"wM" = ( +/obj/effect/turf_decal/tile/blue, +/obj/machinery/wall_healer/free/directional/west, +/turf/open/floor/plastic, +/area/virtual_domain) +"wQ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/item/flashlight/flare{ + icon_state = "flare-on"; + light_on = 1 + }, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"xa" = ( +/obj/machinery/stasis{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/turf_decal/siding/blue{ + dir = 5 + }, +/obj/structure/cable, +/turf/open/floor/plastic, +/area/virtual_domain) +"xg" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/virtual_domain) +"xz" = ( +/obj/effect/baseturf_helper/virtual_domain, +/turf/template_noop, +/area/virtual_domain/safehouse) +"xA" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/turf_decal/siding/blue{ + dir = 1 + }, +/turf/open/floor/plastic, +/area/virtual_domain) +"xC" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"xK" = ( +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"xQ" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/vending/cigarette, +/turf/open/floor/iron, +/area/virtual_domain) +"yR" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/virtual_domain) +"yW" = ( +/obj/machinery/door/airlock/command/glass, +/turf/open/floor/plastic, +/area/virtual_domain) +"zd" = ( +/obj/effect/spawner/random/engineering/atmospherics_portable, +/turf/open/floor/plating, +/area/virtual_domain) +"zp" = ( +/obj/structure/table, +/obj/item/restraints/handcuffs, +/obj/item/restraints/handcuffs{ + pixel_x = -6; + pixel_y = 3 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"zN" = ( +/mob/living/basic/fake_crewman/boss/ce, +/obj/structure/chair/office/light{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow/half/contrasted, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"AA" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/virtual_domain) +"AE" = ( +/obj/structure/closet/emcloset, +/obj/item/storage/medkit/emergency, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"AO" = ( +/obj/structure/table, +/obj/machinery/recharger, +/obj/item/melee/baton/security/loaded, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"AV" = ( +/turf/open/floor/iron, +/area/virtual_domain) +"Bz" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/virtual_domain) +"BW" = ( +/obj/effect/decal/cleanable/ash/large, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"Cu" = ( +/obj/structure/frame/computer{ + pixel_y = 0; + dir = 4; + anchored = 1 + }, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"CT" = ( +/obj/effect/turf_decal/tile/red, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/iron, +/area/virtual_domain) +"Dh" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/dark_red/anticorner/contrasted{ + dir = 1 + }, +/obj/item/storage/belt/security/webbing{ + pixel_x = -6; + pixel_y = 2 + }, +/obj/item/pen/fountain{ + pixel_x = 15; + pixel_y = 2 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"DC" = ( +/obj/structure/rack, +/obj/effect/turf_decal/tile/dark_red/half/contrasted, +/obj/item/ammo_box/speedloader/c38/flare, +/obj/item/ammo_box/speedloader/c38, +/obj/item/gun/ballistic/revolver/c38, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"El" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plastic, +/area/virtual_domain) +"EB" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/virtual_domain) +"EI" = ( +/obj/structure/table/glass, +/obj/item/storage/medkit/fire{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"EL" = ( +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"EV" = ( +/obj/effect/turf_decal/tile/red, +/obj/structure/cable, +/turf/open/floor/iron, +/area/virtual_domain) +"Fj" = ( +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Fl" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"Fv" = ( +/obj/effect/spawner/random/engineering/tank, +/obj/effect/mapping_helpers/broken_floor, +/obj/item/reagent_containers/cup/beaker/eldritch, +/turf/open/floor/plating, +/area/virtual_domain) +"FH" = ( +/obj/machinery/defibrillator_mount/directional/west, +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/stack/medical/suture, +/obj/item/stack/medical/mesh{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/machinery/light/cold/directional/north, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/turf/open/floor/plastic, +/area/virtual_domain) +"FR" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/iv_drip, +/turf/open/floor/plastic, +/area/virtual_domain) +"Gj" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"Gt" = ( +/obj/structure/table/glass, +/obj/item/folder/yellow, +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Gv" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/iron, +/area/virtual_domain) +"GO" = ( +/obj/structure/frame/computer{ + pixel_y = 0; + dir = 4; + anchored = 1 + }, +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"GQ" = ( +/obj/effect/spawner/random/trash/bin, +/obj/item/shard/plasma, +/obj/effect/spawner/random/trash/food_packaging, +/obj/effect/spawner/random/trash/food_packaging, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/spawner/random/trash/cigpack, +/turf/open/floor/plating, +/area/virtual_domain) +"GZ" = ( +/obj/effect/turf_decal/tile/dark_red/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Ho" = ( +/obj/structure/sign/warning/electric_shock/directional/east, +/turf/open/floor/plating, +/area/virtual_domain) +"Hy" = ( +/obj/machinery/door/airlock/medical, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/plastic, +/area/virtual_domain) +"If" = ( +/mob/living/basic/fake_crewman/boss/cmo, +/obj/structure/chair/office/light{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Ih" = ( +/obj/structure/closet/firecloset, +/obj/structure/cable, +/turf/open/floor/iron, +/area/virtual_domain) +"Iu" = ( +/mob/living/basic/fake_crewman/boss/hos, +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"IH" = ( +/obj/item/flashlight/flare/candle/infinite{ + icon_state = "candle2_lit"; + pixel_x = -3; + pixel_y = 4 + }, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"IJ" = ( +/obj/machinery/light/cold/directional/south, +/turf/open/floor/plastic, +/area/virtual_domain) +"IS" = ( +/mob/living/basic/fake_crewman/engi, +/obj/structure/cable, +/turf/open/floor/iron, +/area/virtual_domain) +"IX" = ( +/obj/structure/table, +/obj/item/storage/toolbox/emergency, +/obj/item/clothing/mask/gas, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"Jj" = ( +/obj/effect/heretic_rune/big, +/obj/effect/landmark/bitrunning/loot_signal, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"Jo" = ( +/obj/structure/table/glass, +/obj/item/paper_bin, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Jp" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/food_packaging, +/obj/effect/spawner/random/trash/food_packaging, +/obj/effect/spawner/random/clothing/gloves, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"Jt" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/closet/crate/bin, +/turf/open/floor/iron, +/area/virtual_domain) +"JA" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/turf_decal/siding/blue/end, +/obj/item/healthanalyzer, +/turf/open/floor/plastic, +/area/virtual_domain) +"JD" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/closet/secure_closet/contraband/armory, +/obj/item/gun/ballistic/rifle/lionhunter, +/obj/item/ammo_box/speedloader/strilka310/lionhunter, +/turf/open/floor/iron, +/area/virtual_domain) +"JG" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/virtual_domain) +"JP" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/spawner/random/clothing/gloves, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"Kd" = ( +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/eldritch_potion/wounded, +/obj/effect/turf_decal/siding/blue{ + dir = 1 + }, +/obj/item/eldritch_potion/wounded, +/obj/item/eldritch_potion/wounded, +/turf/open/floor/plastic, +/area/virtual_domain) +"Km" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"KR" = ( +/turf/open/floor/plastic, +/area/virtual_domain) +"KS" = ( +/obj/structure/reagent_dispensers, +/turf/open/floor/plating, +/area/virtual_domain) +"KT" = ( +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"La" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating, +/area/virtual_domain) +"Lc" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Lj" = ( +/obj/effect/spawner/structure/window/reinforced/tinted, +/obj/structure/cable, +/turf/open/floor/plating, +/area/virtual_domain) +"Lp" = ( +/obj/effect/turf_decal/tile/blue, +/obj/machinery/iv_drip, +/turf/open/floor/plastic, +/area/virtual_domain) +"LB" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/structure/barricade/wooden, +/obj/structure/cable, +/turf/open/floor/plating, +/area/virtual_domain) +"LZ" = ( +/obj/effect/visible_heretic_influence, +/turf/open/floor/plastic, +/area/virtual_domain) +"Mg" = ( +/obj/effect/turf_decal/tile/dark_red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"MF" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/virtual_domain) +"MN" = ( +/obj/item/flashlight/flare/candle/infinite{ + icon_state = "candle2_lit"; + pixel_x = 2; + pixel_y = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/virtual_domain) +"Ni" = ( +/obj/item/flashlight/flare/candle/infinite{ + icon_state = "candle2_lit"; + pixel_x = 10; + pixel_y = 14 + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating, +/area/virtual_domain) +"Nm" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/structure/sign/warning/electric_shock/directional/north, +/turf/open/floor/iron, +/area/virtual_domain) +"Np" = ( +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/digital_clock/directional/north, +/turf/open/floor/iron, +/area/virtual_domain) +"Nz" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/virtual_domain) +"NE" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"NN" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/glass, +/obj/item/stack/medical/gauze{ + pixel_y = 4 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/turf/open/floor/plastic, +/area/virtual_domain) +"NO" = ( +/mob/living/basic/fake_crewman/md, +/turf/open/floor/plastic, +/area/virtual_domain) +"Ot" = ( +/obj/machinery/light/small/broken/directional/east, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"OX" = ( +/obj/structure/frame/computer{ + anchored = 1 + }, +/obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Po" = ( +/turf/closed/indestructible/fakedoor/engineering, +/area/virtual_domain) +"Pr" = ( +/turf/closed/indestructible/binary, +/area/virtual_domain) +"PB" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/effect/turf_decal/siding/blue/end{ + dir = 1 + }, +/obj/item/stack/medical/gauze/improvised, +/obj/structure/cable, +/turf/open/floor/plastic, +/area/virtual_domain) +"PJ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"Qj" = ( +/obj/structure/girder, +/obj/structure/grille, +/turf/open/floor/plating, +/area/virtual_domain) +"Qk" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/structure/cable, +/turf/open/floor/iron, +/area/virtual_domain) +"QP" = ( +/obj/item/flashlight/flare/torch, +/obj/item/flashlight/flare/torch, +/obj/item/clothing/suit/hooded/cultrobes/eldritch, +/obj/item/melee/sickly_blade, +/obj/structure/rack, +/turf/template_noop, +/area/virtual_domain/safehouse) +"Rd" = ( +/obj/item/flashlight/flare{ + icon_state = "flare-on"; + light_on = 1 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"Rg" = ( +/obj/item/flashlight/flare/candle/infinite{ + icon_state = "candle2_lit"; + pixel_x = 4; + pixel_y = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/cleanable/ash, +/turf/open/floor/plating, +/area/virtual_domain) +"Rl" = ( +/obj/structure/table/glass, +/obj/item/folder/blue{ + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Ro" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/turf/open/floor/plastic, +/area/virtual_domain) +"Rx" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/plastic, +/area/virtual_domain) +"RO" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/random/trash/mess, +/obj/effect/spawner/random/trash/garbage, +/turf/open/floor/plating, +/area/virtual_domain) +"RQ" = ( +/obj/effect/turf_decal/tile/blue, +/obj/structure/cable, +/turf/open/floor/plastic, +/area/virtual_domain) +"RY" = ( +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"RZ" = ( +/obj/structure/closet/firecloset, +/obj/effect/mapping_helpers/broken_floor, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/virtual_domain) +"Sb" = ( +/mob/living/basic/fake_crewman/md, +/obj/structure/cable, +/turf/open/floor/plastic, +/area/virtual_domain) +"Sf" = ( +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/spawner/random/trash/cigbutt, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating, +/area/virtual_domain) +"Sn" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"Ss" = ( +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/turf/open/floor/plating, +/area/virtual_domain) +"SJ" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/sign/warning/electric_shock/directional/west, +/turf/open/floor/iron, +/area/virtual_domain) +"Tv" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/dark_blue/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Ua" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/red/fourcorners, +/turf/open/floor/iron, +/area/virtual_domain) +"Ul" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/virtual_domain) +"Va" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/iron, +/area/virtual_domain) +"Vh" = ( +/turf/open/floor/plating, +/area/virtual_domain) +"Vj" = ( +/obj/structure/table/reinforced, +/turf/open/floor/iron, +/area/virtual_domain) +"Vr" = ( +/turf/closed/indestructible/fakedoor/glass_airlock, +/area/virtual_domain) +"Vs" = ( +/obj/machinery/light/small/broken/directional/east, +/mob/living/basic/heretic_summon/raw_prophet, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"Vx" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/reagent_containers/hypospray{ + pixel_x = 6; + pixel_y = 1 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 1 + }, +/turf/open/floor/plastic, +/area/virtual_domain) +"VS" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/red/dim/directional/south, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"VW" = ( +/obj/effect/turf_decal/tile/yellow/fourcorners, +/obj/structure/tank_dispenser, +/obj/structure/fireaxecabinet/directional/south, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron, +/area/virtual_domain) +"VX" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/bottle/salglu_solution, +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/turf/open/floor/plastic, +/area/virtual_domain) +"Wk" = ( +/obj/effect/turf_decal/tile/red, +/turf/open/floor/iron, +/area/virtual_domain) +"Wo" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/closet/crate/bin, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plastic, +/area/virtual_domain) +"Wv" = ( +/obj/effect/spawner/random/trash/caution_sign, +/obj/structure/grille/broken, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"WI" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/virtual_domain) +"WL" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/closet/secure_closet/contraband/armory, +/obj/effect/spawner/random/clothing/backpack, +/obj/effect/spawner/random/exotic/antag_gear, +/turf/open/floor/iron, +/area/virtual_domain) +"Xl" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plastic, +/area/virtual_domain) +"Xv" = ( +/obj/structure/table/glass, +/obj/item/paper_bin, +/obj/effect/turf_decal/tile/dark_blue/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"XD" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/plastic, +/turf/open/floor/plating/heretic_rust, +/area/virtual_domain) +"XK" = ( +/obj/effect/spawner/random/structure/tank_holder, +/turf/open/floor/plating, +/area/virtual_domain) +"Yj" = ( +/obj/structure/grille, +/turf/open/floor/plating, +/area/virtual_domain) +"Yy" = ( +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/table/glass, +/obj/item/storage/medkit/brute{ + pixel_y = -8 + }, +/obj/item/reagent_containers/cup/bottle/salglu_solution{ + pixel_y = 11; + pixel_x = -3 + }, +/obj/item/reagent_containers/cup/bottle{ + pixel_y = 13; + pixel_x = 3 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 8 + }, +/turf/open/floor/plastic, +/area/virtual_domain) +"YL" = ( +/mob/living/basic/fake_crewman/sec, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Zb" = ( +/obj/structure/table, +/obj/item/reagent_containers/cup/bowl, +/obj/item/reagent_containers/cup/blastoff_ampoule{ + pixel_x = -3 + }, +/turf/open/floor/plating, +/area/virtual_domain) +"Zj" = ( +/obj/effect/turf_decal/tile/yellow/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/virtual_domain) +"Zt" = ( +/turf/closed/indestructible/reinforced, +/area/virtual_domain) +"Zu" = ( +/turf/closed/wall, +/area/virtual_domain) +"ZM" = ( +/obj/effect/spawner/random/trash/moisture_trap, +/turf/open/floor/plating, +/area/virtual_domain) +"ZN" = ( +/turf/closed/indestructible/fakedoor, +/area/virtual_domain) +"ZT" = ( +/obj/structure/table/glass, +/obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/reagent_containers/cup/bottle/atropine{ + pixel_y = 3; + pixel_x = -13 + }, +/obj/item/reagent_containers/applicator/patch/synthflesh, +/obj/item/reagent_containers/applicator/patch/synthflesh{ + pixel_x = 3; + pixel_y = 2 + }, +/obj/effect/turf_decal/siding/blue{ + dir = 1 + }, +/turf/open/floor/plastic, +/area/virtual_domain) + +(1,1,1) = {" +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +eT +"} +(2,1,1) = {" +Pr +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Pr +"} +(3,1,1) = {" +Pr +Zt +Zt +Zt +Lj +Vr +Vr +Lj +Zu +Zu +rC +rC +rC +Zu +Zt +Zt +Zt +Zt +Zt +Zu +Zu +Zu +Zu +Zu +Zu +Zu +Zu +Zt +Zt +Zt +Pr +"} +(4,1,1) = {" +Pr +Zt +Zt +Zt +vP +yR +yR +Bz +Zu +pQ +BW +nU +GQ +Zu +Zu +rC +rC +Zu +rC +Zu +iN +iN +iN +iN +iN +ey +Zu +Zt +Zt +Zt +Pr +"} +(5,1,1) = {" +Pr +Zt +Zt +Zt +iw +ki +sb +Gv +Zu +pm +wK +KT +tg +rC +hK +hy +nU +br +Vh +Zu +iN +iN +QP +iN +iN +iN +Zu +Zt +Zt +Zt +Pr +"} +(6,1,1) = {" +Pr +Zt +sb +Lj +Va +Vj +fl +Km +Zu +Zu +La +rC +rC +Zu +EB +IH +KT +MN +vn +Qj +iN +iN +QP +iN +iN +iN +Zu +Zt +Zt +Zt +Pr +"} +(7,1,1) = {" +Pr +Zt +sb +Po +sb +aY +Qk +vR +uS +sl +am +dh +Wv +uS +NE +bC +Jj +MF +Sn +Vh +iN +iN +QP +iN +iN +iN +Zu +Zt +Zt +Zt +Pr +"} +(8,1,1) = {" +Pr +Zt +sb +Lj +AA +Vj +uh +iy +Zu +Zu +Zu +LB +Zu +rC +sy +Ni +xC +Rg +Vh +pd +iN +iN +iN +iN +iN +iN +Zu +Zt +Zt +Zt +Pr +"} +(9,1,1) = {" +Pr +Zt +nf +Zt +Nm +AV +IS +iy +rq +Zu +Sf +Ss +Zb +rC +JG +Ot +sy +Vs +Vh +rC +iN +iN +iN +iN +iN +iN +Zu +Zt +Zt +Zt +Pr +"} +(10,1,1) = {" +Pr +Zt +fq +Zt +Np +nM +sb +iy +VW +Zu +JP +wQ +Zu +Zu +rC +Zu +uS +WI +rC +Zu +iN +iN +iN +iN +iN +xz +Zu +Zt +Zt +Zt +Pr +"} +(11,1,1) = {" +Pr +Zt +Zt +Zt +gp +Ih +sb +oL +rq +Zu +ge +Vh +rC +rt +oD +Zu +JG +MF +KS +Zu +Zu +Zu +Zu +Zu +Zu +Zu +Zu +Zt +Zt +Zt +Pr +"} +(12,1,1) = {" +Pr +Zt +Zt +Zt +Zu +vG +pv +vG +Zu +Zu +sd +nh +Yj +XD +mn +rC +NE +RO +IX +Zu +GO +Cu +Tv +Zu +Zu +Zu +Zt +Zt +Zt +Zt +Pr +"} +(13,1,1) = {" +Pr +Zt +Zt +Zt +Zu +mW +iu +Km +iV +Zu +pM +KT +Zu +rC +Zu +Zu +JG +hS +Jp +Zu +pe +If +cS +wM +Kd +Zu +Zt +Zt +Zt +Zt +Pr +"} +(14,1,1) = {" +Pr +Zt +Zt +Zu +Zu +Gt +Jo +AV +EI +Zu +ts +EB +Yj +wK +rP +Zu +Gj +KT +iH +Zu +RY +Xv +Rl +hp +Vx +Zu +Zt +Zt +Zt +Zt +Pr +"} +(15,1,1) = {" +Pr +Zt +Zt +Zu +iQ +Fj +zN +AV +fA +Zu +Zu +Zu +Zu +Nz +Fv +rC +dh +fn +ZM +Zu +Rx +Ro +Ro +hp +ZT +Zu +Zt +Zt +Zt +Zt +Pr +"} +(16,1,1) = {" +Pr +Zt +Zt +Zu +OX +Zj +sY +bV +Zu +Zu +ok +Ua +Zu +Zu +Zu +rC +sy +Ho +zd +Zu +Rx +KR +KR +hp +xA +Zu +Zt +Zt +Zt +Zt +Pr +"} +(17,1,1) = {" +Pr +Zt +Zt +Zu +Zu +Zu +Zu +Zu +Zu +Zu +Fl +Dh +EL +fd +Zu +rC +kQ +rC +Zu +Zu +vG +yW +vG +Zu +Zu +Zu +Zu +Zu +Zu +Zt +Pr +"} +(18,1,1) = {" +Pr +Zt +Zt +Zu +Jt +JD +cz +WL +xg +vG +di +mu +Iu +hV +Zu +AE +JG +Zu +Zu +FH +eV +sT +xa +vO +Zu +iL +oa +oQ +Zu +Zt +Pr +"} +(19,1,1) = {" +Pr +Zt +Zt +Zu +AV +YL +Lc +Lc +xg +pv +AV +xK +Fj +DC +Zu +RZ +dh +Zu +FR +vh +vh +Xl +vh +vh +Zu +vh +vh +vh +Zu +Zt +Pr +"} +(20,1,1) = {" +Pr +Zt +Zt +Zu +AV +mX +AO +uz +xg +vG +kw +GZ +Mg +hY +Zu +Zu +aR +Zu +KR +KR +NO +sT +KR +KR +Hy +KR +LZ +KR +Zu +Zt +Pr +"} +(21,1,1) = {" +Pr +Zt +Zt +Zu +ta +mX +fL +uz +gz +Zu +Zu +vG +Zu +Zu +Zu +Zu +dh +uS +uj +uj +PB +vt +JA +KR +Ul +KR +KR +IJ +Zu +Zt +Pr +"} +(22,1,1) = {" +Pr +Zt +Zt +Zu +AV +mX +zp +uz +xg +sL +SJ +xg +xQ +Zu +ck +Vh +NE +Zu +KR +KR +KR +Sb +KR +KR +Hy +KR +KR +KR +Zu +Zt +Pr +"} +(23,1,1) = {" +Pr +Zt +Zt +Zu +AV +Lc +Lc +YL +sb +sb +sb +oc +vR +uS +JG +PJ +VS +Zu +Lp +hp +hp +RQ +hp +hp +Zu +hp +hp +lG +Zu +Zt +Pr +"} +(24,1,1) = {" +Pr +Zt +Zt +Zu +Wk +jR +CT +Wk +EV +Wk +EV +Wk +EV +Zu +rC +Rd +XK +Zu +Zu +hP +El +El +El +Wo +Zu +VX +Yy +NN +Zu +Zt +Pr +"} +(25,1,1) = {" +Pr +Zt +Zt +Zu +Zu +Zu +Zu +Zu +Lj +ZN +Lj +ZN +Lj +Zu +Zu +rC +rC +Zu +Zu +Lj +ZN +Lj +ZN +Lj +Zu +Zu +Zu +Zu +Zu +Zt +Pr +"} +(26,1,1) = {" +Pr +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Zt +Pr +"} +(27,1,1) = {" +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +Pr +"} diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm index 5d32a627b40..c3b84b4e6c3 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm @@ -369,6 +369,8 @@ #define COMSIG_LIVING_DROP_LOOT "living_drop_loot" /// Prevent loot from being dropped #define COMPONENT_NO_LOOT_DROP (1<<0) +/// From /datum/element/death_drops/on_death(mob/living/target, gibbed) : (list/loot, gibbed) +#define COMSIG_LIVING_DROPPED_LOOT "living_dropped_loot" /// From /mob/living/proc/mob_pickup() : (mob/living/user, obj/item/mob_holder/holder) #define COMSIG_LIVING_SCOOPED_UP "living_scooped_up" diff --git a/code/datums/elements/death_drops.dm b/code/datums/elements/death_drops.dm index 70543260707..13cb8938b8e 100644 --- a/code/datums/elements/death_drops.dm +++ b/code/datums/elements/death_drops.dm @@ -41,15 +41,18 @@ if (SEND_SIGNAL(target, COMSIG_LIVING_DROP_LOOT, spawn_loot, gibbed) & COMPONENT_NO_LOOT_DROP) return + var/list/all_loot = list() for(var/thing_to_spawn in spawn_loot) for(var/i in 1 to (spawn_loot[thing_to_spawn] || 1)) - create_loot(thing_to_spawn, loot_loc, target, gibbed, spread_px = spawn_loot.len * 3) + all_loot += create_loot(thing_to_spawn, loot_loc, target, gibbed, spread_px = spawn_loot.len * 3) + + list_clear_nulls(all_loot) // in case of gibbed corpses + SEND_SIGNAL(target, COMSIG_LIVING_DROPPED_LOOT, all_loot, gibbed) /// Handles creating the loots /datum/element/death_drops/proc/create_loot(typepath, atom/loot_loc, mob/living/dead, gibbed, spread_px = 4) if(ispath(typepath, /obj/effect/mob_spawn/corpse)) - handle_corpse(typepath, loot_loc, dead, gibbed) - return + return handle_corpse(typepath, loot_loc, dead, gibbed) var/drop = new typepath(loot_loc) if(isitem(drop) && spread_px) @@ -57,6 +60,7 @@ var/clamped_px = clamp(spread_px, 0, 16) dropped_item.pixel_x = rand(-clamped_px, clamped_px) dropped_item.pixel_y = rand(-clamped_px, clamped_px) + return drop /// Handles snowflake case of mob corpses /datum/element/death_drops/proc/handle_corpse(typepath, atom/loot_loc, mob/living/dead, gibbed) @@ -68,7 +72,8 @@ // if gibbed, dispose of the body if(gibbed) body.gib(DROP_ALL_REMAINS) - return + return null // otherwise continue with the rest of the damage types body.setToxLoss(dead.getToxLoss()) body.setOxyLoss(dead.getOxyLoss()) + return body diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index 62d2f8913c1..0be2aede6fe 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -573,6 +573,11 @@ if(HAS_TRAIT(dead_mob, TRAIT_SPAWNED_MOB)) mood_change *= 0.25 timeout *= 0.2 + if(istype(owner.mind?.assigned_role, /datum/job/bitrunning_glitch) || istype(owner.mind?.assigned_role, /datum/job/bit_avatar)) + // Digital beings shouldn't care about death it's just gaming + mood_change *= -0.25 + description = "Another one bites the dust!" + return if(HAS_TRAIT(owner, TRAIT_CULT_HALO) && !HAS_TRAIT(dead_mob, TRAIT_CULT_HALO)) // When cultists get halos, they stop caring about death mood_change *= -0.5 diff --git a/code/modules/antagonists/heretic/heretic_knowledge.dm b/code/modules/antagonists/heretic/heretic_knowledge.dm index 5300f6d1943..4b2b82adc56 100644 --- a/code/modules/antagonists/heretic/heretic_knowledge.dm +++ b/code/modules/antagonists/heretic/heretic_knowledge.dm @@ -231,7 +231,7 @@ return ..() /datum/heretic_knowledge/limited_amount/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) - var/datum/antagonist/heretic/our_heretic = IS_HERETIC(user) + var/datum/antagonist/heretic/our_heretic = GET_HERETIC(user) if(our_heretic && our_heretic.unlimited_blades) if(length(result_atoms & typesof(/obj/item/melee/sickly_blade))) return TRUE diff --git a/code/modules/antagonists/heretic/items/heretic_blades.dm b/code/modules/antagonists/heretic/items/heretic_blades.dm index eae583f2f82..ae66020dd02 100644 --- a/code/modules/antagonists/heretic/items/heretic_blades.dm +++ b/code/modules/antagonists/heretic/items/heretic_blades.dm @@ -54,7 +54,7 @@ return . /obj/item/melee/sickly_blade/attack_self(mob/user) - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + var/datum/antagonist/heretic/heretic_datum = GET_HERETIC(user) if(heretic_datum?.unlimited_blades) return if(HAS_TRAIT(user, TRAIT_ELDRITCH_ARENA_PARTICIPANT)) @@ -168,7 +168,7 @@ . = ..() if(!infused || target == user || !isliving(target)) return - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + var/datum/antagonist/heretic/heretic_datum = GET_HERETIC(user) var/mob/living/living_target = target if(!heretic_datum) return diff --git a/code/modules/antagonists/heretic/items/madness_mask.dm b/code/modules/antagonists/heretic/items/madness_mask.dm index 4e80ee862f6..4a91a69192a 100644 --- a/code/modules/antagonists/heretic/items/madness_mask.dm +++ b/code/modules/antagonists/heretic/items/madness_mask.dm @@ -54,7 +54,7 @@ REMOVE_TRAIT(src, TRAIT_NODROP, CLOTHING_TRAIT) for(var/mob/living/carbon/human/human_in_range in view(local_user)) - if(IS_HERETIC_OR_MONSTER(human_in_range) || human_in_range.is_blind()) + if(IS_HERETIC_OR_MONSTER(human_in_range) || human_in_range.stat > SOFT_CRIT || human_in_range.is_blind()) continue if(human_in_range.can_block_magic(MAGIC_RESISTANCE|MAGIC_RESISTANCE_MIND)) diff --git a/code/modules/bitrunning/components/avatar_connection.dm b/code/modules/bitrunning/components/avatar_connection.dm index ddc2753733d..a892f07f7ff 100644 --- a/code/modules/bitrunning/components/avatar_connection.dm +++ b/code/modules/bitrunning/components/avatar_connection.dm @@ -69,6 +69,7 @@ avatar.fully_replace_character_name(newname = alias) update_avatar_id() + avatar.mind.set_assigned_role(SSjob.get_job_type(/datum/job/bit_avatar)) for(var/skill_type in old_mind.known_skills) avatar.mind.set_experience(skill_type, old_mind.get_skill_exp(skill_type), silent = TRUE) diff --git a/code/modules/bitrunning/job.dm b/code/modules/bitrunning/job.dm index d62bd2cf3ae..519f4974cbd 100644 --- a/code/modules/bitrunning/job.dm +++ b/code/modules/bitrunning/job.dm @@ -39,3 +39,6 @@ uniform = /obj/item/clothing/under/rank/cargo/bitrunner belt = /obj/item/modular_computer/pda/bitrunner ears = /obj/item/radio/headset/headset_cargo + +/datum/job/bit_avatar + title = "Bit Avatar" diff --git a/code/modules/bitrunning/server/_parent.dm b/code/modules/bitrunning/server/_parent.dm index 99477688876..9e0e8251d01 100644 --- a/code/modules/bitrunning/server/_parent.dm +++ b/code/modules/bitrunning/server/_parent.dm @@ -145,17 +145,16 @@ return ..() -/obj/machinery/quantum_server/attackby(obj/item/weapon, mob/user, list/modifiers, list/attack_modifiers) - . = ..() - - if(!istype(weapon, /obj/item/bitrunning_debug)) - return +/obj/machinery/quantum_server/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + if(!istype(tool, /obj/item/bitrunning_debug)) + return NONE + balloon_alert(user, "*hacker voice* i'm in") obj_flags |= EMAGGED glitch_chance = 0.5 capacitor_coefficient = 0.1 points = 100 - + return ITEM_INTERACT_SUCCESS /obj/machinery/quantum_server/crowbar_act(mob/living/user, obj/item/crowbar) . = NONE diff --git a/code/modules/bitrunning/spawners.dm b/code/modules/bitrunning/spawners.dm index 06eccfdcd60..69e6cae07a0 100644 --- a/code/modules/bitrunning/spawners.dm +++ b/code/modules/bitrunning/spawners.dm @@ -18,6 +18,7 @@ if(antag) spawned_mob.mind.add_antag_datum(/datum/antagonist/domain_ghost_actor) + spawned_mob.mind.set_assigned_role(SSjob.get_job_type(/datum/job/bitrunning_glitch)) /// Simulates a ghost role spawn without calling special(), ie a bitrunner spawn instead of a ghost. /obj/effect/mob_spawn/ghost_role/human/virtual_domain/proc/artificial_spawn(mob/living/runner) diff --git a/code/modules/bitrunning/virtual_domain/domains/heretic_hunt.dm b/code/modules/bitrunning/virtual_domain/domains/heretic_hunt.dm new file mode 100644 index 00000000000..43225d18e38 --- /dev/null +++ b/code/modules/bitrunning/virtual_domain/domains/heretic_hunt.dm @@ -0,0 +1,234 @@ +/datum/lazy_template/virtual_domain/heretic_hunt + name = "Heretical Hunt" + cost = BITRUNNER_COST_LOW + desc = "Betray your fellow man to achieve ultimate power." + difficulty = BITRUNNER_DIFFICULTY_LOW + help_text = "Heretics require sacrifice to fuel their dark rituals - bring corpses back to the ritual site! \ + Corpses of higher ranking crew members are more valuable and may be holding useful equipment." + forced_outfit = /datum/outfit/virtual_domain_heretic + key = "heretic_hunt" + map_name = "heretic_hunt" + reward_points = BITRUNNER_REWARD_LOW + +/datum/lazy_template/virtual_domain/heretic_hunt/setup_domain(list/created_atoms) + for(var/mob/living/basic/fake_crewman/target in created_atoms) + RegisterSignal(target, COMSIG_LIVING_DROPPED_LOOT, PROC_REF(on_body_spawned)) + + for(var/mob/living/basic/heretic_summon/helper in created_atoms) + helper.ai_controller = new /datum/ai_controller/basic_controller/simple/simple_hostile(helper) + helper.ai_controller.blackboard[BB_BASIC_MOB_IDLE_WALK_CHANCE] = 0.1 + + var/obj/effect/heretic_rune/big/rune = locate() in created_atoms + rune.set_greyscale(pick(assoc_to_values(GLOB.heretic_path_to_color))) + +/datum/lazy_template/virtual_domain/heretic_hunt/proc/on_body_spawned(mob/living/source, list/loot, gibbed) + SIGNAL_HANDLER + + if(gibbed) + return + + for(var/mob/living/carbon/human/body in loot) + RegisterSignal(body, COMSIG_MOVABLE_MOVED, PROC_REF(check_loc)) + // let's be safe + for(var/obj/item/modular_computer/pda/pda in body.get_all_gear()) + qdel(pda) + +/datum/lazy_template/virtual_domain/heretic_hunt/proc/check_loc(mob/living/carbon/human/source, ...) + SIGNAL_HANDLER + + var/obj/effect/heretic_rune/big/rune = locate() in source.loc + if(isnull(rune)) + return + + var/datum/job/fake_job = SSjob.get_job(source.job) || SSjob.get_job_type(/datum/job/unassigned) + // 10 points are needed + if(fake_job.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND) + add_points(3) + else if(fake_job.departments_bitflags & DEPARTMENT_BITFLAG_SECURITY) + add_points(2) + else + add_points(1) + // cleanup + source.gib(ALL) + + // mimic a ritual effect + if(locate(/obj/structure/closet/crate/secure/bitrunning/encrypted) in range(1, rune)) + rune.balloon_alert_to_viewers("ritual completed") + else + rune.balloon_alert_to_viewers("sacrifice accepted") + flick("[rune.icon_state]_active", rune) + playsound(rune, 'sound/effects/magic/castsummon.ogg', 50, TRUE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_exponent = 10, ignore_walls = FALSE) + +/datum/outfit/virtual_domain_heretic + name = "Virtual Domain Heretic" + + // this gear is just given to them in the safehouse + // suit = /obj/item/clothing/suit/hooded/cultrobes/eldritch + // suit_store = /obj/item/melee/sickly_blade + + // otherwise just thematically appropriate clothing + uniform = /obj/item/clothing/under/color/black + shoes = /obj/item/clothing/shoes/jackboots + neck = /obj/item/clothing/neck/heretic_focus + mask = /obj/item/clothing/mask/madness_mask + +/datum/outfit/virtual_domain_heretic/pre_equip(mob/living/carbon/human/user, visuals_only) + ADD_TRAIT(user, TRAIT_ACT_AS_HERETIC, INNATE_TRAIT) + ADD_TRAIT(user, TRAIT_NO_TELEPORT, INNATE_TRAIT) + user.AddElement(/datum/element/leeching_walk) + user.faction |= FACTION_HERETIC + +// All it does is stand there, only attacks if attacked (Manuel player) +/datum/ai_controller/basic_controller/fake_crewman + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_TARGET_MINIMUM_STAT = HARD_CRIT, + BB_REINFORCEMENTS_SAY = "Help me!", + ) + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking + planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, + /datum/ai_planning_subtree/call_reinforcements, + /datum/ai_planning_subtree/target_retaliate, + /datum/ai_planning_subtree/attack_obstacle_in_path/trooper, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) + +/datum/ai_controller/basic_controller/fake_crewman/ranged + planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, + /datum/ai_planning_subtree/call_reinforcements, + /datum/ai_planning_subtree/target_retaliate, + /datum/ai_planning_subtree/maintain_distance, + /datum/ai_planning_subtree/ranged_skirmish, + /datum/ai_planning_subtree/attack_obstacle_in_path/trooper, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) + +// Immediately tries to attack the player (Terry player) +/datum/ai_controller/basic_controller/fake_crewman/instant_hostile + planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, + /datum/ai_planning_subtree/call_reinforcements, + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/attack_obstacle_in_path/trooper, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) + +/datum/ai_controller/basic_controller/fake_crewman/instant_hostile/ranged + planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, + /datum/ai_planning_subtree/call_reinforcements, + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/maintain_distance, + /datum/ai_planning_subtree/ranged_skirmish, + /datum/ai_planning_subtree/attack_obstacle_in_path/trooper, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) + +// The actual crewmate +/mob/living/basic/fake_crewman + name = "crewmember" + desc = "How do you do, fellow crewmen?" + mob_biotypes = MOB_ORGANIC|MOB_HUMANOID + faction = list(FACTION_HOSTILE, "vdom_fake_crew") + icon = 'icons/mob/simple/simple_human.dmi' + gender = MALE + basic_mob_flags = DEL_ON_DEATH + + ai_controller = /datum/ai_controller/basic_controller/fake_crewman + + maxHealth = 60 + health = 60 + melee_damage_lower = 15 + melee_damage_upper = 20 + obj_damage = 20 + armour_penetration = 10 + + attack_sound = null // autoset + melee_damage_type = null // autoset + + var/death_spawner = /obj/effect/mob_spawn/corpse/human + var/obj/item/weapon = /obj/item/storage/toolbox + +/mob/living/basic/fake_crewman/Initialize(mapload) + . = ..() + AddElement(/datum/element/ai_retaliate) + AddElement(/datum/element/death_drops, string_list(list(weapon, death_spawner))) + var/lhand = prob(50) ? weapon : null + var/rhand = lhand ? null : weapon + apply_dynamic_human_appearance(src, mob_spawn_path = death_spawner, l_hand = lhand, r_hand = rhand) + + attack_sound ||= weapon::hitsound + melee_damage_type ||= weapon::damtype + sharpness = weapon::sharpness + wound_bonus = weapon::wound_bonus * 0.5 + exposed_wound_bonus = weapon::exposed_wound_bonus * 0.5 + +/mob/living/basic/fake_crewman/md + name = "medical doctor" + death_spawner = /obj/effect/mob_spawn/corpse/human/doctor + weapon = /obj/item/circular_saw + +/mob/living/basic/fake_crewman/sec + name = "security officer" + ai_controller = /datum/ai_controller/basic_controller/fake_crewman/instant_hostile + death_spawner = /obj/effect/mob_spawn/corpse/human/secoff + weapon = /obj/item/knife/combat/survival + damage_coeff = list(BRUTE = 0.6, BURN = 0.6, TOX = 1, STAMINA = 1, OXY = 1) + +/mob/living/basic/fake_crewman/engi + name = "engineer" + death_spawner = /obj/effect/mob_spawn/corpse/human/engineer + weapon = /obj/item/weldingtool + attack_sound = 'sound/items/tools/welder.ogg' + melee_damage_type = BURN + damage_coeff = list(BRUTE = 1, BURN = 0.9, TOX = 1, STAMINA = 1, OXY = 1) + +/mob/living/basic/fake_crewman/engi/mod + death_spawner = /obj/effect/mob_spawn/corpse/human/engineer/mod + damage_coeff = list(BRUTE = 0.8, BURN = 0.8, TOX = 1, STAMINA = 1, OXY = 1) + +/mob/living/basic/fake_crewman/assistant + name = "assistant" + ai_controller = /datum/ai_controller/basic_controller/fake_crewman/instant_hostile + death_spawner = /obj/effect/mob_spawn/corpse/human/assistant + weapon = /obj/item/knife/shiv + +/mob/living/basic/fake_crewman/assistant/alt + weapon = /obj/item/storage/toolbox/mechanical + +/mob/living/basic/fake_crewman/boss + name = "senior crewmember" + maxHealth = 120 + health = 120 + melee_damage_lower = 20 + melee_damage_upper = 25 + armour_penetration = 30 + +/mob/living/basic/fake_crewman/boss/cmo + name = "chief medical officer" + death_spawner = /obj/effect/mob_spawn/corpse/human/cmo + weapon = /obj/item/surgicaldrill + +/mob/living/basic/fake_crewman/boss/ce + name = "chief engineer" + ai_controller = /datum/ai_controller/basic_controller/fake_crewman/ranged + death_spawner = /obj/effect/mob_spawn/corpse/human/ce + weapon = /obj/item/gun/energy/plasmacutter/adv + +/mob/living/basic/fake_crewman/boss/ce/Initialize(mapload) + . = ..() + AddComponent(/datum/component/ranged_attacks, /obj/item/ammo_casing/energy/plasma/adv, projectile_sound = 'sound/items/weapons/plasma_cutter.ogg', cooldown_time = 1.6 SECONDS) + +/mob/living/basic/fake_crewman/boss/hos + name = "head of security" + ai_controller = /datum/ai_controller/basic_controller/fake_crewman/instant_hostile/ranged + death_spawner = /obj/effect/mob_spawn/corpse/human/hos + weapon = /obj/item/gun/energy/e_gun/hos + damage_coeff = list(BRUTE = 0.6, BURN = 0.6, TOX = 1, STAMINA = 1, OXY = 1) + +/mob/living/basic/fake_crewman/boss/hos/Initialize(mapload) + . = ..() + AddComponent(/datum/component/ranged_attacks, /obj/item/ammo_casing/energy/laser, projectile_sound = 'sound/items/weapons/laser.ogg', cooldown_time = 1.2 SECONDS) diff --git a/code/modules/mob_spawn/corpses/job_corpses.dm b/code/modules/mob_spawn/corpses/job_corpses.dm index 01ffdbe0d46..b0014424037 100644 --- a/code/modules/mob_spawn/corpses/job_corpses.dm +++ b/code/modules/mob_spawn/corpses/job_corpses.dm @@ -88,3 +88,21 @@ name = JOB_BITRUNNER outfit = /datum/outfit/job/bitrunner icon_state = "corpsecargotech" + +/obj/effect/mob_spawn/corpse/human/cmo + name = JOB_CHIEF_MEDICAL_OFFICER + outfit = /datum/outfit/job/cmo + icon_state = "corpsedoctor" + +/obj/effect/mob_spawn/corpse/human/ce + name = JOB_CHIEF_ENGINEER + outfit = /datum/outfit/job/ce + icon_state = "corpseengineer" + +/obj/effect/mob_spawn/corpse/human/secoff + name = JOB_SECURITY_OFFICER + outfit = /datum/outfit/job/security + +/obj/effect/mob_spawn/corpse/human/hos + name = JOB_HEAD_OF_SECURITY + outfit = /datum/outfit/job/hos diff --git a/code/modules/mob_spawn/mob_spawn.dm b/code/modules/mob_spawn/mob_spawn.dm index 902ecbc8bbf..bdb565cc9bc 100644 --- a/code/modules/mob_spawn/mob_spawn.dm +++ b/code/modules/mob_spawn/mob_spawn.dm @@ -331,6 +331,7 @@ spawned_human.Drain() else //Because for some reason I can't track down, things are getting turned into husks even if husk = false. It's in some damage proc somewhere. spawned_human.cure_husk() + spawned_human.job = name /obj/effect/mob_spawn/corpse/human/equip(mob/living/carbon/human/spawned_human) . = ..() diff --git a/strings/modular_maps/safehouse.toml b/strings/modular_maps/safehouse.toml index 1abb0f6714f..58128509f47 100644 --- a/strings/modular_maps/safehouse.toml +++ b/strings/modular_maps/safehouse.toml @@ -18,6 +18,9 @@ modules = ["ice.dmm"] [rooms.lavaland_boss] modules = ["lavaland_boss.dmm"] +[rooms.maintsafe] +modules = ["maintsafe.dmm"] + [rooms.mine] modules = ["mine.dmm"] diff --git a/tgstation.dme b/tgstation.dme index 1343a9f44b0..b58adcef900 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3807,6 +3807,7 @@ #include "code\modules\bitrunning\virtual_domain\domains\fredingtonfastingbear.dm" #include "code\modules\bitrunning\virtual_domain\domains\gondola_asteroid.dm" #include "code\modules\bitrunning\virtual_domain\domains\grassland_hunt.dm" +#include "code\modules\bitrunning\virtual_domain\domains\heretic_hunt.dm" #include "code\modules\bitrunning\virtual_domain\domains\hierophant.dm" #include "code\modules\bitrunning\virtual_domain\domains\island_brawl.dm" #include "code\modules\bitrunning\virtual_domain\domains\meta_central.dm"