Files
Bubberstation/code/modules/procedural_mapping/mapGenerators/repair.dm
Zephyr 0ef5c3d049 Persistent Map Vote Tallies (#86788)
## About The Pull Request

Changes map votes to be based on a persistent tally count.
Tallies for maps are cached between rounds and are added to by map
votes.
When a map is chosen, and it wasn't the only valid one, the tallies for
said chosen map will be reset.

Refactors map vote handling and moves it from SSmapping to SSmap_vote.
Rock the Vote has been removed as a result of this refactor.

## Why It's Good For The Game

Makes it more likely that all maps will be played over the course of a
server instead of always being truly random.
Removes some clutter off of SSmapping.

🆑
refactor: Map Votes are now carried over between rounds. When a map vote
is actually a contest, the winning map will have its votes reset.
/🆑
2024-09-30 13:09:08 +13:00

125 lines
4.0 KiB
Plaintext

/datum/map_generator_module/bottom_layer/repair_floor_plasteel
spawnableTurfs = list(/turf/open/floor/iron = 100)
var/ignore_wall = FALSE
allowAtomsOnSpace = TRUE
/datum/map_generator_module/bottom_layer/repair_floor_plasteel/place(turf/T)
if(isclosedturf(T) && !ignore_wall)
return FALSE
return ..()
/datum/map_generator_module/bottom_layer/repair_floor_plasteel/flatten
ignore_wall = TRUE
/datum/map_generator_module/border/normal_walls
spawnableAtoms = list()
spawnableTurfs = list(/turf/closed/wall = 100)
allowAtomsOnSpace = TRUE
/datum/map_generator_module/reload_station_map/generate()
set waitfor = FALSE
if(!istype(mother, /datum/map_generator/repair/reload_station_map))
return
var/datum/map_generator/repair/reload_station_map/mother1 = mother
GLOB.reloading_map = TRUE
// This is kind of finicky on multi-Z maps but the reader would need to be
// changed to allow Z cropping and that's a mess
var/z_offset = SSmapping.station_start
var/list/bounds
for (var/path in SSmapping.current_map.GetFullMapPaths())
var/datum/parsed_map/parsed = load_map(
file(path),
1,
1,
z_offset,
no_changeturf = FALSE,
crop_map = TRUE,
x_lower = mother1.x_low,
y_lower = mother1.y_low,
x_upper = mother1.x_high,
y_upper = mother1.y_high,
)
bounds = parsed?.bounds
z_offset += bounds[MAP_MAXZ] - bounds[MAP_MINZ] + 1
var/list/obj/machinery/atmospherics/atmos_machines = list()
var/list/obj/structure/cable/cables = list()
var/list/atom/atoms = list()
require_area_resort()
var/list/generation_turfs = block(
locate(bounds[MAP_MINX], bounds[MAP_MINY], SSmapping.station_start),
locate(bounds[MAP_MAXX], bounds[MAP_MAXY], z_offset - 1))
for(var/turf/gen_turf as anything in generation_turfs)
atoms += gen_turf
for(var/atom in gen_turf)
atoms += atom
if(istype(atom, /obj/structure/cable))
cables += atom
continue
if(istype(atom, /obj/machinery/atmospherics))
atmos_machines += atom
SSatoms.InitializeAtoms(atoms)
SSmachines.setup_template_powernets(cables)
SSair.setup_template_machinery(atmos_machines)
GLOB.reloading_map = FALSE
/datum/map_generator/repair
modules = list(/datum/map_generator_module/bottom_layer/repair_floor_plasteel,
/datum/map_generator_module/bottom_layer/repressurize)
buildmode_name = "Repair: Floor"
/datum/map_generator/repair/delete_walls
modules = list(/datum/map_generator_module/bottom_layer/repair_floor_plasteel/flatten,
/datum/map_generator_module/bottom_layer/repressurize)
buildmode_name = "Repair: Floor: Flatten Walls"
/datum/map_generator/repair/enclose_room
modules = list(/datum/map_generator_module/bottom_layer/repair_floor_plasteel/flatten,
/datum/map_generator_module/border/normal_walls,
/datum/map_generator_module/bottom_layer/repressurize)
buildmode_name = "Repair: Generate Aired Room"
/datum/map_generator/repair/reload_station_map
modules = list(/datum/map_generator_module/bottom_layer/massdelete/no_delete_mobs)
var/x_low = 0
var/x_high = 0
var/y_low = 0
var/y_high = 0
var/z = 0
var/cleanload = FALSE
var/datum/map_generator_module/reload_station_map/loader
buildmode_name = "Repair: Reload Block \[DO NOT USE\]"
/datum/map_generator/repair/reload_station_map/clean
buildmode_name = "Repair: Reload Block - Mass Delete"
cleanload = TRUE
/datum/map_generator/repair/reload_station_map/clean/in_place
modules = list(/datum/map_generator_module/bottom_layer/massdelete/regeneration_delete)
buildmode_name = "Repair: Reload Block - Mass Delete - In Place"
/datum/map_generator/repair/reload_station_map/defineRegion(turf/start, turf/end)
. = ..()
if(!is_station_level(start.z) || !is_station_level(end.z))
return
x_low = min(start.x, end.x)
y_low = min(start.y, end.y)
x_high = max(start.x, end.x)
y_high = max(start.y, end.y)
z = SSmapping.station_start
GLOBAL_VAR_INIT(reloading_map, FALSE)
/datum/map_generator/repair/reload_station_map/generate(clean = cleanload)
if(!loader)
loader = new
if(cleanload)
..() //Trigger mass deletion.
modules |= loader
syncModules()
loader.generate()