Skip to content

Commit

Permalink
organization + neo suggestion
Browse files Browse the repository at this point in the history
  • Loading branch information
retlaw34 committed Jul 9, 2022
1 parent 8c2e86a commit 382abe1
Show file tree
Hide file tree
Showing 5 changed files with 112 additions and 72 deletions.
5 changes: 5 additions & 0 deletions code/controllers/configuration/entries/game_options.dm
Original file line number Diff line number Diff line change
Expand Up @@ -443,3 +443,8 @@
/datum/config_entry/number/overmap_size
config_entry_value = 30
min_val = 1

/datum/config_entry/number/overmap_encounter_size
max_val = 255
config_entry_value = 127
min_val = 127
83 changes: 13 additions & 70 deletions code/controllers/subsystem/overmap.dm
Original file line number Diff line number Diff line change
Expand Up @@ -201,86 +201,29 @@ SUBSYSTEM_DEF(overmap)
* * target - The ruin to spawn, if any
* * ruin_type - The ruin to spawn. Don't pass this argument if you want it to randomly select based on planet type.
*/
/datum/controller/subsystem/overmap/proc/spawn_dynamic_encounter(planet_type, ruin = TRUE, ignore_cooldown = FALSE, datum/map_template/ruin/ruin_type)
/datum/controller/subsystem/overmap/proc/spawn_dynamic_encounter(datum/overmap/dynamic/dynamic_datum, ruin = TRUE, ignore_cooldown = FALSE, datum/map_template/ruin/ruin_type)
log_shuttle("SSOVERMAP: SPAWNING DYNAMIC ENCOUNTER STARTED")
var/list/ruin_list
var/datum/map_generator/mapgen
var/area/target_area
var/turf/surface = /turf/open/space
var/datum/weather_controller/weather_controller_type
var/list/ruin_list = dynamic_datum.ruin_list
var/datum/map_generator/mapgen = new dynamic_datum.mapgen
var/area/target_area = dynamic_datum.target_area
var/turf/surface = dynamic_datum.surface
var/datum/weather_controller/weather_controller_type = dynamic_datum.weather_controller_type
///A planet template that contains a list of biomes to use
var/datum/planet/planet_template
if(planet_type)
switch(planet_type)
if(DYNAMIC_WORLD_LAVA)
ruin_list = SSmapping.lava_ruins_templates
mapgen = new /datum/map_generator/planet_generator/lava
target_area = /area/overmap_encounter/planetoid/lava
surface = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
planet_template = /datum/planet/lava
weather_controller_type = /datum/weather_controller/lavaland
if(DYNAMIC_WORLD_ICE)
ruin_list = SSmapping.ice_ruins_templates
mapgen = new /datum/map_generator/planet_generator/snow
target_area = /area/overmap_encounter/planetoid/ice
surface = /turf/open/floor/plating/asteroid/snow/icemoon
planet_template = /datum/planet/snow
weather_controller_type = /datum/weather_controller/snow_planet
if(DYNAMIC_WORLD_SAND)
ruin_list = SSmapping.sand_ruins_templates
mapgen = new /datum/map_generator/planet_generator/sand
target_area = /area/overmap_encounter/planetoid/sand
surface = /turf/open/floor/plating/asteroid/whitesands
planet_template = /datum/planet/sand //TODO, MAKE NEW PLANET TEMPLATE
weather_controller_type = /datum/weather_controller/desert
if(DYNAMIC_WORLD_JUNGLE)
ruin_list = SSmapping.jungle_ruins_templates
mapgen = new /datum/map_generator/planet_generator
target_area = /area/overmap_encounter/planetoid/jungle
surface = /turf/open/floor/plating/dirt/jungle
planet_template = /datum/planet/jungle
weather_controller_type = /datum/weather_controller/lush
if(DYNAMIC_WORLD_ASTEROID)
ruin_list = null
mapgen = new /datum/map_generator/cave_generator/asteroid
if(DYNAMIC_WORLD_WASTEPLANET)
ruin_list = SSmapping.waste_ruins_templates
mapgen = new /datum/map_generator/cave_generator/wasteplanet
target_area = /area/overmap_encounter/planetoid/wasteplanet
surface = /turf/open/floor/plating/asteroid/wasteplanet
weather_controller_type = /datum/weather_controller/chlorine //let's go??
//planet_template = /datum/planet/lava //TODO, MAKE NEW PLANET TEMPLATE
if(DYNAMIC_WORLD_ROCKPLANET)
ruin_list = SSmapping.rock_ruins_templates
mapgen = new /datum/map_generator/planet_generator/lava //TODO, MAKE NEW PLANETGEN
target_area = /area/overmap_encounter/planetoid/rockplanet
surface = /turf/open/floor/plating/asteroid
weather_controller_type = /datum/weather_controller/rockplanet
planet_template = /datum/planet/rock
if(DYNAMIC_WORLD_BEACHPLANET)
ruin_list = SSmapping.beach_ruins_templates
mapgen = new /datum/map_generator/planet_generator/beach
target_area = /area/overmap_encounter/planetoid/beachplanet
surface = /turf/open/floor/plating/asteroid/sand/lit
planet_template = /datum/planet/beach
weather_controller_type = /datum/weather_controller/lush
if(DYNAMIC_WORLD_REEBE)
ruin_list = SSmapping.yellow_ruins_templates
mapgen = new /datum/map_generator/cave_generator/reebe
target_area = /area/overmap_encounter/planetoid/reebe
surface = /turf/open/chasm/reebe_void
if(DYNAMIC_WORLD_SPACERUIN)
ruin_list = SSmapping.space_ruins_templates
var/datum/planet/planet_template = dynamic_datum.planet_template
if(!dynamic_datum)
CRASH("spawn_dynamic_encounter called without any datum to spawn!")

if(ruin && ruin_list && !ruin_type)
ruin_type = ruin_list[pick(ruin_list)]
if(ispath(ruin_type))
ruin_type = new ruin_type

var/height = QUADRANT_MAP_SIZE
var/width = QUADRANT_MAP_SIZE
var/height = dynamic_datum.vlevel_height
var/width = dynamic_datum.vlevel_width

var/encounter_name = "Dynamic Overmap Encounter"
if(dynamic_datum.planet_name)
encounter_name = dynamic_datum.planet_name
var/datum/map_zone/mapzone = SSmapping.create_map_zone(encounter_name)
var/datum/virtual_level/vlevel = SSmapping.create_virtual_level(encounter_name, list(ZTRAIT_MINING = TRUE), mapzone, width, height, ALLOCATION_QUADRANT, QUADRANT_MAP_SIZE)

Expand Down
5 changes: 5 additions & 0 deletions code/modules/events/spacevine.dm
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,11 @@
text += " vine."
. += text


/obj/structure/spacevine/fire_act(exposed_temperature, exposed_volume)
. = ..()
qdel(src)

/obj/structure/spacevine/Destroy()
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_death(src)
Expand Down
86 changes: 85 additions & 1 deletion code/modules/overmap/objects/dynamic_datum.dm
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,29 @@
var/static/list/probabilities
///The planet that will be forced to load
var/force_encounter
///List of ruins to potentially generate
var/list/ruin_list
///The mapgenerator itself
var/datum/map_generator/mapgen
///The area it will generate in
var/area/target_area
///The turf the virtual z will be covered with. Appears to only be used by cave generators
var/turf/surface = /turf/open/space
///The weather the virtual z will have. If null, the planet will have no weather.
var/datum/weather_controller/weather_controller_type
///A planet template that contains a list of biomes to use
var/datum/planet/planet_template

///The Y bounds of the virtual z level
var/vlevel_height = QUADRANT_MAP_SIZE
///The X bounds of the virtual z level
var/vlevel_width = QUADRANT_MAP_SIZE

/datum/overmap/dynamic/Initialize(position, ...)
. = ..()
choose_level_type()
vlevel_height = CONFIG_GET(number/overmap_encounter_size)
vlevel_width = CONFIG_GET(number/overmap_encounter_size)

/datum/overmap/dynamic/Destroy()
for(var/obj/docking_port/stationary/dock as anything in reserve_docks)
Expand Down Expand Up @@ -112,67 +131,129 @@
token.icon_state = "globe"
token.color = COLOR_ORANGE
planet_name = gen_planet_name()

ruin_list = SSmapping.lava_ruins_templates
mapgen = /datum/map_generator/planet_generator/lava
target_area = /area/overmap_encounter/planetoid/lava
surface = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
planet_template = /datum/planet/lava
weather_controller_type = /datum/weather_controller/lavaland
if(DYNAMIC_WORLD_ICE)
Rename("frozen planet")
token.desc = "A very weak energy signal originating from a planet with traces of water and extremely low temperatures."
planet = DYNAMIC_WORLD_ICE
token.icon_state = "globe"
token.color = COLOR_BLUE_LIGHT
planet_name = gen_planet_name()

ruin_list = SSmapping.ice_ruins_templates
mapgen = /datum/map_generator/planet_generator/snow
target_area = /area/overmap_encounter/planetoid/ice
surface = /turf/open/floor/plating/asteroid/snow/icemoon
planet_template = /datum/planet/snow
weather_controller_type = /datum/weather_controller/snow_planet
if(DYNAMIC_WORLD_JUNGLE)
Rename("jungle planet")
token.desc = "A very weak energy signal originating from a planet teeming with life."
planet = DYNAMIC_WORLD_JUNGLE
token.icon_state = "globe"
token.color = COLOR_LIME
planet_name = gen_planet_name()

ruin_list = SSmapping.jungle_ruins_templates
mapgen = /datum/map_generator/planet_generator
target_area = /area/overmap_encounter/planetoid/jungle
surface = /turf/open/floor/plating/dirt/jungle
planet_template = /datum/planet/jungle
weather_controller_type = /datum/weather_controller/lush
if(DYNAMIC_WORLD_SAND)
Rename("sand planet")
token.desc = "A very weak energy signal originating from a planet with many traces of silica."
planet = DYNAMIC_WORLD_SAND
token.icon_state = "globe"
token.color = COLOR_GRAY
planet_name = gen_planet_name()

ruin_list = SSmapping.sand_ruins_templates
mapgen = /datum/map_generator/planet_generator/sand
target_area = /area/overmap_encounter/planetoid/sand
surface = /turf/open/floor/plating/asteroid/whitesands
planet_template = /datum/planet/sand //TODO, MAKE NEW PLANET TEMPLATE
weather_controller_type = /datum/weather_controller/desert
if(DYNAMIC_WORLD_WASTEPLANET)
Rename("waste disposal planet")
token.desc = "A very weak energy signal originating from a planet marked as waste disposal."
planet = DYNAMIC_WORLD_WASTEPLANET
token.icon_state = "globe"
token.color = "#a9883e"
planet_name = gen_planet_name()

ruin_list = SSmapping.waste_ruins_templates
mapgen = /datum/map_generator/cave_generator/wasteplanet
target_area = /area/overmap_encounter/planetoid/wasteplanet
surface = /turf/open/floor/plating/asteroid/wasteplanet
weather_controller_type = /datum/weather_controller/chlorine //let's go??
//planet_template = /datum/planet/lava //TODO, MAKE NEW PLANET TEMPLATE
if(DYNAMIC_WORLD_ROCKPLANET)
Rename("rock planet")
token.desc = "A very weak energy signal originating from a iron rich and rocky planet."
planet = DYNAMIC_WORLD_ROCKPLANET
token.icon_state = "globe"
token.color = "#bd1313"
planet_name = gen_planet_name()

ruin_list = SSmapping.rock_ruins_templates
mapgen = /datum/map_generator/planet_generator/lava //TODO, MAKE NEW PLANETGEN
target_area = /area/overmap_encounter/planetoid/rockplanet
surface = /turf/open/floor/plating/asteroid
weather_controller_type = /datum/weather_controller/rockplanet
planet_template = /datum/planet/rock
if(DYNAMIC_WORLD_BEACHPLANET)
Rename("beach planet")
token.desc = "A very weak energy signal originating from a warm, oxygen rich planet."
planet = DYNAMIC_WORLD_BEACHPLANET
token.icon_state = "globe"
token.color = "#c6b597"
planet_name = gen_planet_name()

ruin_list = SSmapping.beach_ruins_templates
mapgen = /datum/map_generator/planet_generator/beach
target_area = /area/overmap_encounter/planetoid/beachplanet
surface = /turf/open/floor/plating/asteroid/sand/lit
planet_template = /datum/planet/beach
weather_controller_type = /datum/weather_controller/lush
if(DYNAMIC_WORLD_REEBE)
Rename("???")
token.desc = "Some sort of strange portal. Theres no identification of what this is."
planet = DYNAMIC_WORLD_REEBE
token.icon_state = "wormhole"
token.color = COLOR_YELLOW
planet_name = "Reebe"

ruin_list = SSmapping.yellow_ruins_templates
mapgen = /datum/map_generator/cave_generator/reebe
target_area = /area/overmap_encounter/planetoid/reebe
surface = /turf/open/chasm/reebe_void
if(DYNAMIC_WORLD_ASTEROID)
Rename("large asteroid")
token.desc = "A large asteroid with significant traces of minerals."
planet = DYNAMIC_WORLD_ASTEROID
token.icon_state = "asteroid"
token.color = COLOR_GRAY

ruin_list = null // asteroid ruins when
mapgen = new /datum/map_generator/cave_generator/asteroid
if(DYNAMIC_WORLD_SPACERUIN)
Rename("weak energy signal")
token.desc = "A very weak energy signal emenating from space."
planet = DYNAMIC_WORLD_SPACERUIN
token.icon_state = "strange_event"
token.color = null
ruin_list = SSmapping.space_ruins_templates

if(vlevel_height <= 255 && vlevel_width <= 255)
planet_name = "LV-[pick(rand(11111,99999))]"
Rename(planet_name)

#ifndef QUICK_INIT //Initialising planets roundstart isn't NECESSARY, but is very nice in production. Takes a long time to load, though.
load_level() //Load the level whenever it's randomised
Expand All @@ -183,6 +264,9 @@

/datum/overmap/dynamic/proc/gen_planet_name()
. = ""
if(vlevel_height <= 255 && vlevel_width <= 255)
. += "LV-"
. += "[pick(rand(11111,999999))]"
switch(rand(1,10))
if(1 to 4)
for(var/i in 1 to rand(2,3))
Expand All @@ -202,7 +286,7 @@
if(mapzone)
return TRUE
log_shuttle("[src] [REF(src)] LEVEL_INIT")
var/list/dynamic_encounter_values = SSovermap.spawn_dynamic_encounter(planet, TRUE, ruin_type = template)
var/list/dynamic_encounter_values = SSovermap.spawn_dynamic_encounter(src, TRUE, ruin_type = template)
if(!length(dynamic_encounter_values))
return FALSE
mapzone = dynamic_encounter_values[1]
Expand Down
5 changes: 4 additions & 1 deletion config/game_options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -602,6 +602,9 @@ OVERMAP_SIZE 30
## Valid values are: "random", "solar_system"
OVERMAP_GENERATOR_TYPE solar_system

## Size of overmap encounters, vertical and width with a 3 tile border
OVERMAP_ENCOUNTER_SIZE 127

## The time required before a ship is allowed to bluespace jump. -1 disables it entirely
## In deciseconds, valid values are -1 to INFINITY
BLUESPACE_JUMP_WAIT 12000
Expand All @@ -610,4 +613,4 @@ BLUESPACE_JUMP_WAIT 12000
#AUTH_ONLY

## If admins are allowed to use the authentication server as a regular server for testing
AUTH_ADMIN_TESTING
AUTH_ADMIN_TESTING

0 comments on commit 382abe1

Please sign in to comment.