Vault Spawning Point System (#35735)

* Vault spawn point system

* Some balance

* Bug fix and small tweak

* just deleted it

---------

Co-authored-by: Rubylips <Questionfrog@gmail.com>
This commit is contained in:
GreatBigFailure
2024-01-13 15:38:24 -05:00
committed by GitHub
parent 9215a66d75
commit e5fc481e43
8 changed files with 68 additions and 16 deletions

View File

@@ -4,6 +4,7 @@
/datum/map_element/vault/brokeufo
name = "Broken UFO"
file_path = "maps/randomvaults/brokeufo.dmm"
spawn_cost = 3
/datum/map_element/vault/brokeufo/initialize(list/objects)
..()

View File

@@ -4,10 +4,11 @@
/datum/map_element/vault/lightship
name = "Light Speed Ship"
file_path = "maps/randomvaults/lightspeedship.dmm"
spawn_cost = 3
/datum/map_element/vault/lightship/initialize(list/objects)
..()
/datum/shuttle/lightship
name = "light speed ship"
@@ -34,7 +35,7 @@
add_dock(/obj/docking_port/destination/syndicate/west)
add_dock(/obj/docking_port/destination/syndicate/northwest)
/obj/machinery/computer/shuttle_control/lightship
icon_state = "syndishuttle"
@@ -42,7 +43,7 @@
light_color = LIGHT_COLOR_RED
/obj/machinery/computer/shuttle_control/lightship/New() //Main shuttle_control code is in code/game/machinery/computer/shuttle_computer.dm
var/global/datum/shuttle/lightship/lightship_shuttle = new(starting_area=/area/shuttle/lightship/start)
lightship_shuttle.initialize()
link_to(lightship_shuttle)
@@ -54,4 +55,4 @@
#undef LIGHT_SHIP_MOVE_TIME
#undef LIGHT_SHIP_COOLDOWN
#undef LIGHT_SHIP_COOLDOWN

View File

@@ -12,6 +12,9 @@ var/list/existing_vaults = list()
var/base_turf_type = /turf/space //The "default" turf type that surrounds this vault. If it differs from the z-level's base turf type (for example if this vault is loaded on a snow map), all turfs of this type will be replaced with turfs of the z-level's base turf type
var/spawn_cost = 3 //The amount of "points" a vault costs to spawn, much larger/complicated vaults costing more, with simpler costing less
//Spawn cost's will be defined even if inheretence makes it redundant, this is because vault makers are often less experienced with code and so the clarity will help
/datum/map_element/vault/initialize(list/objects)
..(objects)
existing_vaults.Add(src)
@@ -35,10 +38,12 @@ var/list/existing_vaults = list()
/datum/map_element/vault/icetruck_crash
file_path = "maps/randomvaults/icetruck_crash.dmm"
can_rotate = TRUE
spawn_cost = 1
/datum/map_element/vault/asteroid_temple
file_path = "maps/randomvaults/asteroid_temple.dmm"
can_rotate = TRUE
spawn_cost = 2
/datum/map_element/vault/asteroid_temple/initialize(list/objects)
..(objects)
@@ -59,31 +64,36 @@ var/list/existing_vaults = list()
/datum/map_element/vault/gingerbread_house
file_path = "maps/randomvaults/gingerbread_house.dmm"
can_rotate = TRUE
spawn_cost = 4
/datum/map_element/vault/tommyboyasteroid
file_path = "maps/randomvaults/tommyboyasteroid.dmm"
can_rotate = TRUE
spawn_cost = 1
/datum/map_element/vault/hivebot_factory
file_path = "maps/randomvaults/hivebot_factory.dmm"
can_rotate = TRUE
spawn_cost = 3
/datum/map_element/vault/pretty_rad_clubhouse
file_path = "maps/randomvaults/pretty_rad_clubhouse.dmm"
can_rotate = TRUE
spawn_cost = 2
/datum/map_element/vault/clown_base
file_path = "maps/randomvaults/clown_base.dmm"
can_rotate = TRUE
spawn_cost = 3
/datum/map_element/vault/rust
file_path = "maps/randomvaults/rust.dmm"
can_rotate = TRUE
spawn_cost = 2
/datum/map_element/vault/dance_revolution
name = "Dance Dance Revolution"
file_path = "maps/randomvaults/dance_revolution.dmm"
var/obj/structure/dance_dance_revolution/machine
spawn_cost = 2
/datum/map_element/vault/dance_revolution/initialize(list/objects)
.=..()
@@ -108,13 +118,16 @@ var/list/existing_vaults = list()
/datum/map_element/vault/spacegym
file_path = "maps/randomvaults/spacegym.dmm"
can_rotate = TRUE
spawn_cost = 1
/datum/map_element/vault/oldarmory
file_path = "maps/randomvaults/oldarmory.dmm"
can_rotate = TRUE
spawn_cost = 5
/datum/map_element/vault/spacepond
file_path = "maps/randomvaults/spacepond.dmm"
spawn_cost = 1
/datum/map_element/vault/spacepond/pre_load()
load_dungeon(/datum/map_element/dungeon/wine_cellar,rotation)
@@ -125,26 +138,29 @@ var/list/existing_vaults = list()
/datum/map_element/vault/iou_vault
file_path = "maps/randomvaults/iou_fort.dmm"
can_rotate = TRUE
spawn_cost = 1
/datum/map_element/vault/biodome
file_path = "maps/randomvaults/biodome.dmm"
/datum/map_element/vault/iou_vault
file_path = "maps/randomvaults/iou_fort.dmm"
spawn_cost = 2
/datum/map_element/vault/asteroids
file_path = "maps/randomvaults/asteroids.dmm"
can_rotate = TRUE
spawn_cost = 2
/datum/map_element/vault/listening
file_path = "maps/randomvaults/listening.dmm"
spawn_cost = 3
/datum/map_element/vault/hivebot_crash
file_path = "maps/randomvaults/hivebot_crash.dmm"
can_rotate = TRUE
spawn_cost = 1
/datum/map_element/vault/prison
file_path = "maps/randomvaults/prison_ship.dmm"
spawn_cost = 2
/datum/map_element/vault/prison/pre_load()
load_dungeon(/datum/map_element/dungeon/prison,rotation)
@@ -155,55 +171,69 @@ var/list/existing_vaults = list()
/datum/map_element/vault/AIsat
file_path = "maps/randomvaults/AIsat.dmm"
can_rotate = TRUE
spawn_cost = 1
/datum/map_element/vault/ejectedengine
file_path = "maps/randomvaults/ejectedengine.dmm"
can_rotate = TRUE
spawn_cost = 3
/datum/map_element/vault/droneship
file_path = "maps/randomvaults/droneship.dmm"
spawn_cost = 3
/datum/map_element/vault/amelab
file_path = "maps/randomvaults/amelab.dmm"
can_rotate = TRUE
spawn_cost = 3
/datum/map_element/vault/meteorlogical_station
file_path = "maps/randomvaults/meteorlogical_station.dmm"
spawn_cost = 4
/datum/map_element/vault/taxi_engi
file_path = "maps/randomvaults/taxi_engineering.dmm"
can_rotate = TRUE
spawn_cost = 2
/datum/map_element/vault/ice_comet
file_path = "maps/randomvaults/ice_comet.dmm"
can_rotate = TRUE
spawn_cost = 1
/datum/map_element/vault/research_facility
file_path = "maps/randomvaults/research_facility.dmm"
can_rotate = TRUE
spawn_cost = 4
/datum/map_element/vault/zoo_truck
file_path = "maps/randomvaults/zoo_truck.dmm"
can_rotate = TRUE
spawn_cost = 3
/datum/map_element/vault/syndiecargo
file_path = "maps/randomvaults/syndiecargo.dmm"
spawn_cost = 4
/datum/map_element/vault/black_site_prism
file_path = "maps/randomvaults/black_site_prism.dmm"
spawn_cost = 5
/datum/map_element/vault/skeleton_den
file_path = "maps/randomvaults/rattlemebones.dmm"
spawn_cost = 3
/datum/map_element/vault/beach_party
file_path = "maps/randomvaults/beach_party.dmm"
spawn_cost = 1
/datum/map_element/vault/zathura
file_path = "maps/randomvaults/house.dmm"
can_rotate = TRUE
spawn_cost = 1
/datum/map_element/vault/spy_sat
file_path = "maps/randomvaults/spy_satellite.dmm"
spawn_cost = 3
/datum/map_element/vault/spy_sat/pre_load()
load_dungeon(/datum/map_element/dungeon/satellite_deployment,rotation)
@@ -213,27 +243,34 @@ var/list/existing_vaults = list()
/datum/map_element/vault/ironchef
file_path = "maps/randomvaults/ironchef.dmm"
spawn_cost = 3
/datum/map_element/vault/assistantslair
file_path = "maps/randomvaults/assistantslair.dmm"
spawn_cost = 3
/datum/map_element/vault/asteroidfield
file_path = "maps/randomvaults/asteroidfield.dmm"
can_rotate = TRUE
spawn_cost = 2
/datum/map_element/vault/clownroid
file_path = "maps/randomvaults/clownroid.dmm"
can_rotate = TRUE
spawn_cost = 3
/datum/map_element/vault/goonesat
file_path = "maps/randomvaults/goonesat.dmm"
can_rotate = TRUE
spawn_cost = 3
/datum/map_element/vault/podstation
file_path = "maps/randomvaults/podstation.dmm"
spawn_cost = 2
/datum/map_element/vault/mini_station
file_path = "maps/randomvaults/mini_station.dmm"
spawn_cost = 2
/datum/map_element/dungeon/habitation
file_path = "maps/randomvaults/dungeons/habitation.dmm"
@@ -244,6 +281,11 @@ var/list/existing_vaults = list()
/datum/map_element/vault/fastfoodjoint
name = "Fast food joint"
file_path = "maps/randomvaults/fastfoodjoint.dmm"
spawn_cost = 2
/datum/map_element/vault/laundromat
file_path = "maps/randomvaults/laundromat.dmm"
spawn_cost = 3
/datum/map_element/vault/laundromat/pre_load()
load_dungeon(/datum/map_element/dungeon/laundromat_drug_lab,rotation)

View File

@@ -8,6 +8,7 @@
#define MINIMUM_VAULT_AMOUNT 5 //Amount of guaranteed vault spawns
#define MAXIMUM_VAULT_AMOUNT 15
#define VAULT_POINT_MULTIPLIER 3
#define MAX_VAULT_WIDTH 80 //Vaults bigger than that have a slight chance of overlapping with other vaults
#define MAX_VAULT_HEIGHT 80
@@ -69,7 +70,7 @@
var/list/list_of_vaults = get_map_element_objects()
var/vault_number = rand(MINIMUM_VAULT_AMOUNT, min(list_of_vaults.len, MAXIMUM_VAULT_AMOUNT))
var/vault_number = (rand(MINIMUM_VAULT_AMOUNT, min(list_of_vaults.len, MAXIMUM_VAULT_AMOUNT)) * VAULT_POINT_MULTIPLIER)
#ifdef SPAWN_ALL_VAULTS
#warn Spawning ALL vaults!
@@ -445,11 +446,14 @@
else if(config.disable_vault_rotation)
message_admins("<span class='info'>[ME.file_path] was not rotated, DISABLE_VAULT_ROTATION enabled in config.</span>")
successes++
if(amount > 0)
amount--
if(amount == 0)
break
if(amount > 0) //Allowing overflow is intentional, ie: 1 point left and the last picked vault costs 4 points
if(istype(ME, /datum/map_element/vault))
var/datum/map_element/vault/VE = ME
amount -= VE.spawn_cost
else
amount--
if(amount <= 0)
break
else
message_admins("<span class='danger'>Can't find [ME.file_path]!</span>")

View File

@@ -10,6 +10,7 @@
/datum/map_element/vault/keycards
name = "Keycard-gate vault entrance"
file_path = "maps/randomvaults/keycard_entrance.dmm"
spawn_cost = 3
can_rotate = FALSE // It has dungeons, which don't rotate well for now
var/difficulty = 0 // 0 to generate randomly, see preset variants below
var/datum/map_element/dungeon/keycard_vault/thevault

View File

@@ -1,6 +1,7 @@
/datum/map_element/vault/mothership_lab
name = "Mothership Lab"
file_path = "maps/randomvaults/mothership_lab.dmm"
spawn_cost = 5
can_rotate = 0 // I doubt it would work

View File

@@ -3,6 +3,7 @@
/datum/map_element/vault/sokoban
name = "Sokoban"
file_path = "maps/randomvaults/sokoban_entrance.dmm"
spawn_cost = 3
var/list/available_levels = list(
"maps/randomvaults/dungeons/sokoban/A.dmm",

View File

@@ -168,6 +168,7 @@ var/list/shop_prices = list( //Cost in space credits
/datum/map_element/vault/supermarket
name = "Spessmart"
file_path = "maps/randomvaults/spessmart.dmm"
spawn_cost = 5
var/customer_has_entered = FALSE