A more strict dynamic room selection code, and fixed an incorrect area definition for the dynamic lobby south of customs.

This commit is contained in:
thatprogrammerguy
2014-05-02 17:27:57 -04:00
parent 5355632774
commit ac100a8568
3 changed files with 9149 additions and 9129 deletions
+12 -11
View File
@@ -2,8 +2,9 @@
name = "dynamic area"
icon_state = "purple"
var/match_tag = "none"
var/width = -1
var/height = -1
var/match_width = -1
var/match_height = -1
var/enable_lights = 0
/area/dynamic/destination // Do not use.
name = "dynamic area destination"
@@ -11,27 +12,27 @@
/area/dynamic/destination/lobby
name = "Arrivals Lobby"
match_tag = "arrivals"
width = 5
height = 4
match_width = 5
match_height = 4
enable_lights = 1
/area/dynamic/source // Do not use.
name = "dynamic area source"
var/lights_initially_on = 0
/area/dynamic/source/lobby_bar
name = "\improper Bar"
match_tag = "arrivals"
width = 5
height = 4
match_width = 5
match_height = 4
/area/dynamic/source/lobby_russian
name = "\improper Russian Lounge"
match_tag = "arrivals"
width = 5
height = 4
match_width = 5
match_height = 4
/area/dynamic/source/lobby_disco
name = "\improper Disco Lounge"
match_tag = "arrivals"
width = 5
height = 4
match_width = 5
match_height = 4
+36 -16
View File
@@ -153,29 +153,49 @@ var/global/datum/controller/gameticker/ticker
Holiday_Game_Start()
spawn(0) // Forking dynamic room selection
var/list/area/dynamic_area_source_paths = typesof(/area/dynamic/source) - /area/dynamic/source
var/list/area/dynamic_area_destination_paths = typesof(/area/dynamic/destination) - /area/dynamic/destination
var/list/area/dynamic/source/available_source_candidates = typesof(/area/dynamic/source) - /area/dynamic/source
var/list/area/dynamic/destination/available_destination_candidates = typesof(/area/dynamic/destination) - /area/dynamic/destination
for (var/dynamic_area_destination_path in dynamic_area_destination_paths)
var/area/dynamic_area_destination = locate(dynamic_area_destination_path)
for (var/area/dynamic/destination/current_destination_candidate in available_destination_candidates)
var/area/dynamic/destination/current_destination = locate(current_destination_candidate)
if (!dynamic_area_destination)
if (!current_destination)
continue
var/dynamic_area_source_path = pick(dynamic_area_source_paths)
dynamic_area_source_paths -= dynamic_area_source_path
var/area/dynamic_area_source = locate(dynamic_area_source_path)
if (!dynamic_area_source)
if (current_destination.match_width == 0 || current_destination.match_height == 0)
message_admins("Dynamic area destination '[current_destination.name]' does not have its size requirements set.")
continue
dynamic_area_source.copy_contents_to(dynamic_area_destination, 0)
var/list/area/dynamic/source/candidate_source_areas = new /list(0)
for (var/area/dynamic/source/candidate_source_area in available_source_candidates)
var/area/dynamic/source/candidate_source = locate(candidate_source_area)
// Turn the lights off.
dynamic_area_destination.power_light = 0
dynamic_area_destination.power_change()
if (!candidate_source)
continue
if (candidate_source.match_tag != current_destination.match_tag)
continue
if (candidate_source.match_width != current_destination.match_width || \
candidate_source.match_height != current_destination.match_height)
continue
candidate_source_areas += candidate_source
if (candidate_source_areas.len == 0)
message_admins("Failed to find a matching source for dynamic area: [current_destination.name]")
continue
var/area/dynamic/source/selected_source = pick(candidate_source_areas)
available_source_candidates -= selected_source
selected_source.copy_contents_to(current_destination, 0)
if (current_destination.enable_lights || selected_source.enable_lights)
current_destination.power_light = 1
else
current_destination.power_light = 0
current_destination.power_change()
//start_events() //handles random events and space dust.
//new random event system is handled from the MC.