Moonstation Spacening + Moonstation Rivering (#4273)

# Preamble

This PR is almost done. When it is done, it should probably be
testmerged in case shit goes wrong. You should NOT testmerge this after
Moonstation is selected for a map, as it will fuck everything up.

## Screenshots


<img width="679" height="869" alt="image"
src="https://github.com/user-attachments/assets/7e4ef09f-02e9-4703-8d35-6e7bf7b01cba"
/>


<img width="1019" height="749" alt="image"
src="https://github.com/user-attachments/assets/e04a4cc8-eaa6-4448-8781-610286dfbda8"
/>


## About The Pull Request

Updates Moonstation based on feedback. The following has been changed:

### Major Features
- Adds Loop Station, a new station in space that's a part of Moon
Station that allows you to go space exploring. It can be accessed via
gateway, teleporter, or public shuttle at the station's arrivals.
- There are 4 levels of space ruins you can explore. This is 2 lower
than the default 6.
- Adds underground and above ground rivers to Moonstation. You can fish
in these rivers.
- You can now construct shuttles on Moonstation and fly them anywhere
where there is a gigabeacon present. By default, Loop Station has one
gigabeacon.

### Minor Features
- Adds unused Skyrat ore veins to underground moonstation caves.
- Makes the area below atmos into a shuttle construction area.
- Adds a new public shuttle area at the station's arrivals that leads to
Loop Station.


### Minor additions.
- Adds some missing escape pod signs to areas leading to pods. 
- Adds missing secondary entrance to chemistry.
- Adds some additional medical items to Security Medical.

### Changes
- Expands the size of the incinerator.
- Swaps the Plasma Tank with the CO2 tank in Atmos and re-pipes the pure
loop so that atmos can mix plasma better into projects.
- Removes duplicate medal boxes that heads/captains had, as these are
always spawned in lockers.

### Fixes
- Fixes missing Moonstation openspace cliffs.
- Fixes misplaced vents in Virology.
- Fixes missing wiki/tutorial books in various departments.
- Fixes missing bluespace gas tank vendors in EVA related
departments/areas.
- Fixes missing action figures in various departments/areas.
- Fixes brig desk shutters starting closed.
- Fixes various missing informative papers in certain areas.
- Fixes Ash Storms not running in Lavaland.
- Fixes Ash Storms and Sand Storms running in the underground cave area.

## Why It's Good For The Game

Changes Good.

## Proof Of Testing

Tested extensively ™️ 

## Changelog

🆑 BurgerBB
add: Adds Loop Station, a new station in space that's a part of Moon
Station that allows you to go space exploring. It can be accessed via
gateway, teleporter, or public shuttle at the station's arrivals.
add: Adds underground and surface rivers to moonstation. You can fish in
them. You can now construct shuttles on Moonstation.
add: Changes several minor aspects of Moonstation, including moving some
of the Atmos tanks around and adding missing objects.
fix: Fixes various Moonstation bugs.
/🆑
This commit is contained in:
BurgerLUA
2025-08-04 16:07:32 -07:00
committed by GitHub
parent 2d62dd3f5d
commit 97b6cc8c44
20 changed files with 147262 additions and 77562 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -4,9 +4,10 @@
"map_path": "map_files/moonstation",
"map_file": "moonstation.dmm",
"give_players_hooks": 1,
"space_ruin_levels": 0,
"space_ruin_levels": 4,
"space_empty_levels": 0,
"planetary": 1,
"height_autosetup": 0,
"shuttles": {
"emergency": "emergency_moonstation",
"ferry": "ferry_skyrat",
@@ -29,6 +30,7 @@
"Mining": true,
"Linkage": null,
"Gravity": true,
"Moonstation Ruins": true,
"Baseturf": "/turf/open/misc/moonstation_rock",
"No Parallax": true
},
@@ -37,9 +39,11 @@
"Mining": true,
"Linkage": null,
"Gravity": true,
"Moonstation Ruins": true,
"Baseturf": "/turf/open/openspace/moonstation",
"No Parallax": true,
"Weather_Sandstorm_Moon": true
"Weather_Sandstorm_Moon": true,
"Loop Station": true
}
],
"minetype": "none",

View File

@@ -146,7 +146,9 @@ DEFINE_BITFIELD(smoothing_junction, list(
#define SMOOTH_GROUP_FISSURE S_TURF(65)
#define MAX_S_TURF 65 //Always match this value with the one above it.
#define SMOOTH_GROUP_MOONWATER S_TURF(66) //turf/open/water/moonstation
#define MAX_S_TURF 66 //Always match this value with the one above it.
//BUBBER EDIT END

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

@@ -0,0 +1,2 @@
output_name = "moonwater"
template = "bitmask/diagonal_32x32.toml"

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

@@ -0,0 +1,2 @@
output_name = "moonwater_surface"
template = "bitmask/diagonal_32x32.toml"

View File

@@ -0,0 +1 @@
#define ZTRAIT_LOOPSTATION "Loop Station"

View File

@@ -1,14 +1,28 @@
//This is for Moonstation.
/datum/controller/subsystem/mapping/setup_rivers()
. = ..()
// Generate mining ruins
var/list/lava_ruins = levels_by_trait(ZTRAIT_MOONSTATION_RUINS)
for (var/lava_z in lava_ruins)
spawn_rivers(lava_z, 4, /turf/open/lava/smooth/lava_land_surface, /area/lavaland/underground/unexplored)
var/list/moonstation_ruins = levels_by_trait(ZTRAIT_MOONSTATION_RUINS)
for (var/moon_z in moonstation_ruins)
spawn_rivers(moon_z, 4, /turf/open/lava/smooth/lava_land_surface, /area/lavaland/surface/outdoors/unexplored)
spawn_rivers(moon_z, 8, /turf/open/water/moonstation, /area/moonstation/underground/unexplored)
spawn_rivers(moon_z, 8, /turf/open/water/moonstation/surface, /area/moonstation/surface/unexplored)
/datum/controller/subsystem/mapping/setup_ruins()
. = ..()
var/list/lava_ruins = levels_by_trait(ZTRAIT_MOONSTATION_RUINS)
if (lava_ruins.len)
seedRuins(lava_ruins, CONFIG_GET(number/lavaland_budget), list(/area/lavaland/underground/unexplored), themed_ruins[ZTRAIT_LAVA_RUINS], clear_below = TRUE, mineral_budget = 15, mineral_budget_update = OREGEN_PRESET_LAVALAND)
var/list/moonstation_ruins = levels_by_trait(ZTRAIT_MOONSTATION_RUINS)
if (moonstation_ruins.len)
seedRuins(moonstation_ruins, CONFIG_GET(number/lavaland_budget), list(/area/lavaland/surface/outdoors/unexplored), themed_ruins[ZTRAIT_LAVA_RUINS], clear_below = TRUE, mineral_budget = 15, mineral_budget_update = OREGEN_PRESET_LAVALAND)
var/list/loopstation_level = levels_by_trait(ZTRAIT_LOOPSTATION)
if(loopstation_level.len) //We just need at least 1 to place it.
var/datum/space_level/empty_level = add_new_zlevel("Loop Station", ZTRAITS_SPACE, contain_turfs = FALSE)
load_map(
file("_maps/loopstation/loopstation.dmm"),
0,
0,
empty_level.z_value,
no_changeturf = TRUE,
new_z = TRUE,
place_on_top = TRUE,
no_changeturf = (SSatoms.initialized == INITIALIZATION_INSSATOMS)
)

View File

@@ -11,7 +11,7 @@
/obj/structure/flora/bush/grassy/style_random = 1,
/obj/structure/flora/bush/leavy/style_random = 1,
/obj/structure/flora/bush/sparsegrass/style_random = 3,
/obj/structure/flora/bush/stalky/style_random = 5,
/obj/structure/flora/bush/stalky/style_random = 5
)
weighted_mob_spawn_list = list(
@@ -25,16 +25,14 @@
/obj/structure/ore_vent/random/moonstation = 1
)
flora_spawn_chance = 4
feature_spawn_chance = 0.1
mob_spawn_chance = 1
mob_spawn_chance = 0.5
initial_closed_chance = 30
smoothing_iterations = 50
birth_limit = 4
death_limit = 3
//Underground
/datum/map_generator/cave_generator/moonstation/cave
@@ -48,7 +46,6 @@
weighted_mob_spawn_list = list(
SPAWN_MEGAFAUNA = 2,
/mob/living/basic/mining/basilisk = 20,
/mob/living/basic/mining/bileworm = 30,
/obj/effect/spawner/random/lavaland_mob/goliath = 10,
@@ -67,21 +64,54 @@
/obj/structure/flora/ash/tall_shroom = 5,
)
///Note that this spawn list is also in the lavaland and icemoon generator
weighted_feature_spawn_list = list(
/obj/structure/geyser/hollowwater = 10,
/obj/structure/geyser/plasma_oxide = 10,
/obj/structure/geyser/protozine = 10,
/obj/structure/geyser/wittel = 10,
/obj/structure/ore_vent/random/moonstation/cave = 10
/obj/structure/ore_vein/diamond = 1,
/obj/structure/ore_vein/gold = 4,
/obj/structure/ore_vein/iron = 40,
/obj/structure/ore_vein/plasma = 15,
/obj/structure/ore_vein/silver = 6,
/obj/structure/ore_vein/stone = 80,
/obj/structure/ore_vent/random/moonstation/cave = 100
)
feature_spawn_chance = 0.2
mob_spawn_chance = 4
initial_closed_chance = 45
flora_spawn_chance = 2
feature_spawn_chance = 0.8
mob_spawn_chance = 1.5
initial_closed_chance = 40
smoothing_iterations = 50
birth_limit = 4
death_limit = 3
/* Here lies dead code that I wish to get working again. Because of how changeturf works, this cannot work without causing runtimes. Maybe in the future this can be re-added. ~ Burger
/obj/effect/mapping_helpers/turf_spreader
name = "turf spreader"
desc = "Spread the love!"
var/turf/desired_spread_type
var/spread_prob_base = 80
var/spread_prob_loss = 10
/obj/effect/mapping_helpers/turf_spreader/Initialize(mapload)
. = ..()
var/turf/our_turf = get_turf(src)
if(!our_turf) //huh
return
if(our_turf.turf_flags & NO_LAVA_GEN)
return .
var/area/our_area = our_turf.loc
if(desired_spread_type && our_turf.type != desired_spread_type)
our_turf.ChangeTurf(desired_spread_type)
our_turf.Spread(spread_prob_base,spread_prob_loss,our_area.type)
/obj/effect/mapping_helpers/turf_spreader/moonstation_water
desired_spread_type = /turf/open/water/moonstation
*/

View File

@@ -10,7 +10,7 @@
/area/moonstation/underground,
/area/station/cargo/miningelevators,
/area/station/cargo/miningfoundry/event_protected,
/area/loopstation/radshelter,
/area/ruin/unpowered/primitive_catgirl_den,
))
. = ..()

View File

@@ -24,6 +24,11 @@
name = "\improper Public Xenoarchaeology"
icon_state = "exp_lab"
/area/station/maintenance/department/engine/shuttle_construction_bay
name = "\improper Shuttle Construction Bay"
icon_state = "maint_eva"
allow_shuttle_docking = TRUE
/area/station/maintenance/department/public_mining
name = "\improper Public Mining Maintenance"
icon_state = "centralmaint"
@@ -41,6 +46,10 @@
name = "\improper Coroner's Office"
icon_state = "ass_line" //You try finding a matching area icon, fucko.
/area/station/commons/public_dock
name = "\improper Public Shuttle Dock"
icon_state = "podbay"
/area/station/terminal
name = "\improper Arrivals Terminal"
icon_state = "station"
@@ -89,6 +98,7 @@
ambience_index = AMBIENCE_ICEMOON
sound_environment = SOUND_AREA_ICEMOON
ambient_buzz = 'sound/ambience/lavaland/magma.ogg'
allow_shuttle_docking = TRUE
/area/moonstation/surface
name = "\improper Lunar Surface"
@@ -151,19 +161,61 @@
/area/station/cargo/miningfoundry/event_protected
area_flags = UNIQUE_AREA | EVENT_PROTECTED
//Missing Lavaland Generators
/area/lavaland/underground/unexplored
icon_state = "unexplored"
area_flags = VALID_TERRITORY | UNIQUE_AREA | CAVES_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED
map_generator = /datum/map_generator/cave_generator/lavaland
/area/lavaland/underground/unexplored/danger
icon_state = "danger"
area_flags = VALID_TERRITORY | UNIQUE_AREA | CAVES_ALLOWED | FLORA_ALLOWED | MOB_SPAWN_ALLOWED | MEGAFAUNA_SPAWN_ALLOWED
/area/station/maintenance/department/medical/psychology
name = "\improper Psychology Maintenance"
icon_state = "unknown"
/area/station/maintenance/department/engine/lower
name = "\improper Lower Engineering Maintenance"
//Loopstation Areas
/area/loopstation
name = "Loop Station"
icon = 'icons/area/areas_station.dmi'
icon_state = "station"
default_gravity = ZERO_GRAVITY
ambience_index = AMBIENCE_AWAY
sound_environment = SOUND_ENVIRONMENT_ROOM
area_flags = UNIQUE_AREA | EVENT_PROTECTED
/area/loopstation/gateway
name = "Loop Station Gateway"
icon_state = "gateway"
/area/loopstation/hallway
name = "Loop Station Central Hallway"
icon_state = "hall"
/area/loopstation/engineering
name = "Loop Station Engineering"
icon_state = "engie"
airlock_wires = /datum/wires/airlock/engineering
ambience_index = AMBIENCE_ENGI
/area/loopstation/engineering/telecomms
name = "Loop Station Telecommunications"
icon_state = "tcomsatcham"
/area/loopstation/engineering/power
name = "Loop Station Power Room"
icon_state = "engine_smes"
/area/loopstation/engineering/gravity
name = "Loop Station Gravity Room"
icon_state = "grav_gen"
/area/loopstation/radshelter
name = "Loop Station Radiation Shelter"
icon_state = "radstorm_shelter"
/area/loopstation/solars
icon_state = "panels"
requires_power = FALSE
area_flags = UNIQUE_AREA | NO_GRAVITY | EVENT_PROTECTED
flags_1 = NONE
ambience_index = AMBIENCE_ENGI
airlock_wires = /datum/wires/airlock/engineering
sound_environment = SOUND_AREA_SPACE
default_gravity = ZERO_GRAVITY

View File

@@ -222,8 +222,6 @@
/area/moonstation/surface/unexplored,
/area/moonstation/underground,
/area/moonstation/underground/unexplored,
/area/lavaland/underground/unexplored,
/area/lavaland/underground/unexplored/danger,
/area/lavaland/surface/outdoors,
/area/lavaland/surface/outdoors/unexplored/danger,
/area/lavaland/surface/outdoors/unexplored,

View File

@@ -0,0 +1,88 @@
/turf/open/water/moonstation
name = "lunar water"
gender = PLURAL
desc = "Semi-shallow water containing a variety of natural and invasive fish species."
icon = 'icons/turf/floors/moonwater.dmi'
base_icon_state = "moonwater"
icon_state = "moonwater-255"
baseturfs = /turf/open/water/moonstation
turf_flags = NO_RUST | TURF_BLOCKS_POPULATE_TERRAIN_FLORAFEATURES | NO_LAVA_GEN
tiled_dirt = FALSE
initial_gas_mix = MOONSTATION_ATMOS
planetary_atmos = TRUE
immerse_overlay_color = "#366F7D"
fishing_datum = /datum/fish_source/lunar
//Copied from lava because why not.
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_MOONWATER
canSmoothWith = SMOOTH_GROUP_MOONWATER
/turf/open/water/moonstation/surface
name = "lunar surface water"
icon = 'icons/turf/floors/moonwater_surface.dmi'
base_icon_state = "moonwater_surface"
icon_state = "moonwater_surface-255"
fishing_datum = /datum/fish_source/lunar/surface
#define MOON_FISH_MYTHICAL 1
#define MOON_FISH_RARE 2
#define MOON_FISH_UNCOMMON 4
#define MOON_FISH_COMMON 8
/datum/fish_source/lunar
catalog_description = "Lunar Waters"
radial_state = "fryer"
overlay_state = "portal_ocean"
fish_table = list(
FISHING_DUD = 20,
/obj/item/fish/armorfish = MOON_FISH_COMMON,
/obj/item/fish/boned = MOON_FISH_RARE,
/obj/item/fish/dolphish = MOON_FISH_MYTHICAL,
/obj/item/fish/gullion = MOON_FISH_MYTHICAL,
/obj/item/fish/mastodon = MOON_FISH_RARE,
/obj/item/fish/monkfish = MOON_FISH_COMMON,
/obj/item/fish/plaice = MOON_FISH_COMMON,
/obj/item/fish/sacabambaspis = MOON_FISH_RARE,
/obj/item/fish/moonfish/dwarf = MOON_FISH_RARE,
)
fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 30
fish_source_flags = FISH_SOURCE_FLAG_EXPLOSIVE_MALUS
associated_safe_turfs = list(/turf/open/water/moonstation)
/datum/fish_source/lunar/surface
catalog_description = "Lunar Waters"
radial_state = "fryer"
overlay_state = "portal_ocean"
fish_table = list(
FISHING_DUD = 20,
/obj/item/fish/bumpy = MOON_FISH_COMMON,
/obj/item/fish/monkfish = MOON_FISH_COMMON,
/obj/item/fish/plaice = MOON_FISH_COMMON,
/obj/item/fish/sand_crab = MOON_FISH_UNCOMMON,
/obj/item/fish/sand_surfer = MOON_FISH_COMMON,
/obj/item/fish/stingray = MOON_FISH_RARE,
/obj/item/fish/tadpole = MOON_FISH_COMMON,
/obj/item/stack/sheet/bone = MOON_FISH_COMMON,
/obj/item/food/grown/material_sand = MOON_FISH_RARE
)
fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 20
fish_source_flags = FISH_SOURCE_FLAG_EXPLOSIVE_MALUS
associated_safe_turfs = list(/turf/open/water/moonstation/surface)
#undef MOON_FISH_MYTHICAL
#undef MOON_FISH_RARE
#undef MOON_FISH_UNCOMMON
#undef MOON_FISH_COMMON

View File

@@ -9,9 +9,12 @@
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_TURF_CHASM
canSmoothWith = SMOOTH_GROUP_TURF_CHASM
baseturfs = /turf/open/openspace/moonstation
plane = FLOOR_PLANE
layer = TOPDOWN_LAYER
/turf/open/openspace/moonstation/Initialize(mapload)
icon_state = ""
. = ..()

View File

@@ -32,7 +32,7 @@
/turf/open/misc/moonstation_rock
name = "lunar rock"
gender = NEUTER
desc = "You've hit rock bottom, here."
desc = "You've hit rock bottom, and now you're here."
initial_gas_mix = MOONSTATION_ATMOS
icon = 'modular_zubbers/icons/turf/lunar_rock.dmi'
icon_state = "0,0"

View File

@@ -8824,6 +8824,7 @@
#include "modular_skyrat\modules\xenos_skyrat_redo\code\xeno_types\warrior.dm"
#include "modular_zubbers\code\__DEFINES\bloodsucker_defines.dm"
#include "modular_zubbers\code\__DEFINES\guardian_defines.dm"
#include "modular_zubbers\code\__DEFINES\maps.dm"
#include "modular_zubbers\code\__DEFINES\moonstation_defines.dm"
#include "modular_zubbers\code\__DEFINES\quirks.dm"
#include "modular_zubbers\code\__DEFINES\send2relay.dm"
@@ -9075,6 +9076,7 @@
#include "modular_zubbers\code\game\turfs\closed\lunar_cave.dm"
#include "modular_zubbers\code\game\turfs\closed\lunar_surface.dm"
#include "modular_zubbers\code\game\turfs\open\glass_floor.dm"
#include "modular_zubbers\code\game\turfs\open\moonwater.dm"
#include "modular_zubbers\code\game\turfs\open\openspace.dm"
#include "modular_zubbers\code\game\turfs\open\sand.dm"
#include "modular_zubbers\code\modules\_defines.dm"