Save 0.13s (or more, it's hard to tell with Lavaland) by caching mineral spawn lists, and making effects not have integrity (#71089)

Decals calling `getArmor` was 50ms, gives them `uses_integrity = FALSE`
to counter this. I don't think this should have any visible effects.

Makes mineral spawn chances a proc that caches its results rather than a brand new list initialized on every single mineral (80+ms). Also calls `check_holidays` only once instead of over 30,000 times (which was 43.76ms). Also caches `smoothing_groups` and `canSmoothWith`. Numbers aren't wholly inaccurate Lavaland do be random.
This commit is contained in:
Mothblocks
2022-11-06 05:31:58 -05:00
committed by GitHub
parent bd1b6c7a2e
commit 0d65f69321
3 changed files with 179 additions and 55 deletions
+1
View File
@@ -7,6 +7,7 @@
move_resist = INFINITY
obj_flags = NONE
blocks_emissive = EMISSIVE_BLOCK_GENERIC
uses_integrity = FALSE
/obj/effect/attackby(obj/item/weapon, mob/user, params)
if(SEND_SIGNAL(weapon, COMSIG_ITEM_ATTACK_EFFECT, src, user, params) & COMPONENT_NO_AFTERATTACK)
+166 -52
View File
@@ -9,8 +9,6 @@
icon = MAP_SWITCH('icons/turf/smoothrocks.dmi', 'icons/turf/mining.dmi')
icon_state = "rock"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_MINERAL_WALLS)
canSmoothWith = list(SMOOTH_GROUP_MINERAL_WALLS)
baseturfs = /turf/open/misc/asteroid/airless
initial_gas_mix = AIRLESS_ATMOS
opacity = TRUE
@@ -39,6 +37,16 @@
#undef MINERAL_WALL_OFFSET
/turf/closed/mineral/Initialize(mapload)
var/static/list/smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_MINERAL_WALLS)
var/static/list/canSmoothWith = list(SMOOTH_GROUP_MINERAL_WALLS)
// The cost of the list() being in the type def is very large for something as common as minerals
src.smoothing_groups = smoothing_groups
src.canSmoothWith = canSmoothWith
return ..()
// Inlined version of the bump click element. way faster this way, the element's nice but it's too much overhead
/turf/closed/mineral/Bumped(atom/movable/bumped_atom)
. = ..()
@@ -185,21 +193,34 @@
gets_drilled(give_exp = FALSE)
/turf/closed/mineral/random
var/list/mineralSpawnChanceList = list(/obj/item/stack/ore/uranium = 5, /obj/item/stack/ore/diamond = 1, /obj/item/stack/ore/gold = 10,
/obj/item/stack/ore/silver = 12, /obj/item/stack/ore/plasma = 20, /obj/item/stack/ore/iron = 40, /obj/item/stack/ore/titanium = 11,
/turf/closed/mineral/gibtonite = 4, /obj/item/stack/ore/bluespace_crystal = 1)
//Currently, Adamantine won't spawn as it has no uses. -Durandan
var/mineralChance = 13
/turf/closed/mineral/random/Initialize(mapload)
if(check_holidays(APRIL_FOOLS))
mineralSpawnChanceList[/obj/item/stack/ore/bananium] = 3
/// Returns a list of the chances for minerals to spawn.
/// Will only run once, and will then be cached.
/turf/closed/mineral/random/proc/mineral_chances()
return list(
/obj/item/stack/ore/bananium = check_holidays(APRIL_FOOLS) ? 3 : 0,
/obj/item/stack/ore/bluespace_crystal = 1,
/obj/item/stack/ore/diamond = 1,
/obj/item/stack/ore/gold = 10,
/obj/item/stack/ore/iron = 40,
/obj/item/stack/ore/plasma = 20,
/obj/item/stack/ore/silver = 12,
/obj/item/stack/ore/titanium = 11,
/obj/item/stack/ore/uranium = 5,
/turf/closed/mineral/gibtonite = 4,
)
mineralSpawnChanceList = typelist("mineralSpawnChanceList", mineralSpawnChanceList)
/turf/closed/mineral/random/Initialize(mapload)
var/static/list/mineral_chances_by_type = list()
. = ..()
if (prob(mineralChance))
var/path = pick_weight(mineralSpawnChanceList)
var/list/spawn_chance_list = mineral_chances_by_type[type]
if (isnull(spawn_chance_list))
mineral_chances_by_type[type] = expand_weights(mineral_chances())
spawn_chance_list = mineral_chances_by_type[type]
var/path = pick(spawn_chance_list)
if(ispath(path, /turf))
var/stored_flags = 0
if(turf_flags & NO_RUINS)
@@ -225,34 +246,67 @@
/turf/closed/mineral/random/high_chance
icon_state = "rock_highchance"
mineralChance = 25
mineralSpawnChanceList = list(
/obj/item/stack/ore/uranium = 35, /obj/item/stack/ore/diamond = 30, /obj/item/stack/ore/gold = 45, /obj/item/stack/ore/titanium = 45,
/obj/item/stack/ore/silver = 50, /obj/item/stack/ore/plasma = 50, /obj/item/stack/ore/bluespace_crystal = 20)
/turf/closed/mineral/random/high_chance/mineral_chances()
return list(
/obj/item/stack/ore/bluespace_crystal = 20,
/obj/item/stack/ore/diamond = 30,
/obj/item/stack/ore/gold = 45,
/obj/item/stack/ore/plasma = 50,
/obj/item/stack/ore/silver = 50,
/obj/item/stack/ore/titanium = 45,
/obj/item/stack/ore/uranium = 35,
)
/turf/closed/mineral/random/high_chance/volcanic
turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface
baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
defer_change = TRUE
mineralSpawnChanceList = list(
/obj/item/stack/ore/uranium = 35, /obj/item/stack/ore/diamond = 30, /obj/item/stack/ore/gold = 45, /obj/item/stack/ore/titanium = 45,
/obj/item/stack/ore/silver = 50, /obj/item/stack/ore/plasma = 50, /obj/item/stack/ore/bluespace_crystal = 1)
/turf/closed/mineral/random/high_chance/volcanic/mineral_chances()
return list(
/obj/item/stack/ore/bluespace_crystal = 1,
/obj/item/stack/ore/diamond = 30,
/obj/item/stack/ore/gold = 45,
/obj/item/stack/ore/plasma = 50,
/obj/item/stack/ore/silver = 50,
/obj/item/stack/ore/titanium = 45,
/obj/item/stack/ore/uranium = 35,
)
/turf/closed/mineral/random/low_chance
icon_state = "rock_lowchance"
mineralChance = 6
mineralSpawnChanceList = list(
/obj/item/stack/ore/uranium = 2, /obj/item/stack/ore/diamond = 1, /obj/item/stack/ore/gold = 4, /obj/item/stack/ore/titanium = 4,
/obj/item/stack/ore/silver = 6, /obj/item/stack/ore/plasma = 15, /obj/item/stack/ore/iron = 40,
/turf/closed/mineral/gibtonite = 2, /obj/item/stack/ore/bluespace_crystal = 1)
/turf/closed/mineral/random/low_chance/mineral_chances()
return list(
/obj/item/stack/ore/bluespace_crystal = 1,
/obj/item/stack/ore/diamond = 1,
/obj/item/stack/ore/gold = 4,
/obj/item/stack/ore/iron = 40,
/obj/item/stack/ore/plasma = 15,
/obj/item/stack/ore/silver = 6,
/obj/item/stack/ore/titanium = 4,
/obj/item/stack/ore/uranium = 2,
/turf/closed/mineral/gibtonite = 2,
)
//extremely low chance of rare ores, meant mostly for populating stations with large amounts of asteroid
/turf/closed/mineral/random/stationside
icon_state = "rock_nochance"
mineralChance = 4
mineralSpawnChanceList = list(
/obj/item/stack/ore/uranium = 1, /obj/item/stack/ore/diamond = 1, /obj/item/stack/ore/gold = 3, /obj/item/stack/ore/titanium = 5,
/obj/item/stack/ore/silver = 4, /obj/item/stack/ore/plasma = 3, /obj/item/stack/ore/iron = 50)
/turf/closed/mineral/random/stationside/mineral_chances()
return list(
/obj/item/stack/ore/diamond = 1,
/obj/item/stack/ore/gold = 3,
/obj/item/stack/ore/iron = 50,
/obj/item/stack/ore/plasma = 3,
/obj/item/stack/ore/silver = 4,
/obj/item/stack/ore/titanium = 5,
/obj/item/stack/ore/uranium = 1,
)
/turf/closed/mineral/random/volcanic
turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface
@@ -261,10 +315,19 @@
defer_change = TRUE
mineralChance = 10
mineralSpawnChanceList = list(
/obj/item/stack/ore/uranium = 5, /obj/item/stack/ore/diamond = 1, /obj/item/stack/ore/gold = 10, /obj/item/stack/ore/titanium = 11,
/obj/item/stack/ore/silver = 12, /obj/item/stack/ore/plasma = 20, /obj/item/stack/ore/iron = 40,
/turf/closed/mineral/gibtonite/volcanic = 4, /obj/item/stack/ore/bluespace_crystal = 1)
/turf/closed/mineral/random/volcanic/mineral_chances()
return list(
/obj/item/stack/ore/bluespace_crystal = 1,
/obj/item/stack/ore/diamond = 1,
/obj/item/stack/ore/gold = 10,
/obj/item/stack/ore/iron = 40,
/obj/item/stack/ore/plasma = 20,
/obj/item/stack/ore/silver = 12,
/obj/item/stack/ore/titanium = 11,
/obj/item/stack/ore/uranium = 5,
/turf/closed/mineral/gibtonite/volcanic = 4,
)
/turf/closed/mineral/random/snow
name = "snowy mountainside"
@@ -287,42 +350,84 @@
base_icon_state = "icerock_wall"
smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER
/turf/closed/mineral/random/snow
mineralSpawnChanceList = list(
/obj/item/stack/ore/uranium = 5, /obj/item/stack/ore/diamond = 1, /obj/item/stack/ore/gold = 10, /obj/item/stack/ore/titanium = 11,
/obj/item/stack/ore/silver = 12, /obj/item/stack/ore/plasma = 20, /obj/item/stack/ore/iron = 40,
/turf/closed/mineral/gibtonite/ice/icemoon = 4, /obj/item/stack/ore/bluespace_crystal = 1)
/turf/closed/mineral/random/snow/mineral_chances()
return list(
/obj/item/stack/ore/bluespace_crystal = 1,
/obj/item/stack/ore/diamond = 1,
/obj/item/stack/ore/gold = 10,
/obj/item/stack/ore/iron = 40,
/obj/item/stack/ore/plasma = 20,
/obj/item/stack/ore/silver = 12,
/obj/item/stack/ore/titanium = 11,
/obj/item/stack/ore/uranium = 5,
/turf/closed/mineral/gibtonite/ice/icemoon = 4,
)
/turf/closed/mineral/random/snow/underground
baseturfs = /turf/open/misc/asteroid/snow/icemoon
// abundant ore
mineralChance = 20
mineralSpawnChanceList = list(
/obj/item/stack/ore/uranium = 10, /obj/item/stack/ore/diamond = 4, /obj/item/stack/ore/gold = 20, /obj/item/stack/ore/titanium = 22,
/obj/item/stack/ore/silver = 24, /obj/item/stack/ore/plasma = 20, /obj/item/stack/ore/iron = 20, /obj/item/stack/ore/bananium = 1,
/turf/closed/mineral/gibtonite/ice/icemoon = 8, /obj/item/stack/ore/bluespace_crystal = 2)
/turf/closed/mineral/random/snow/underground/mineral_chances()
return list(
/obj/item/stack/ore/bananium = 1,
/obj/item/stack/ore/bluespace_crystal = 2,
/obj/item/stack/ore/diamond = 4,
/obj/item/stack/ore/gold = 20,
/obj/item/stack/ore/iron = 20,
/obj/item/stack/ore/plasma = 20,
/obj/item/stack/ore/silver = 24,
/obj/item/stack/ore/titanium = 22,
/obj/item/stack/ore/uranium = 10,
/turf/closed/mineral/gibtonite/ice/icemoon = 8,
)
/turf/closed/mineral/random/snow/high_chance
mineralSpawnChanceList = list(
/obj/item/stack/ore/uranium = 35, /obj/item/stack/ore/diamond = 30, /obj/item/stack/ore/gold = 45, /obj/item/stack/ore/titanium = 45,
/obj/item/stack/ore/silver = 50, /obj/item/stack/ore/plasma = 50, /obj/item/stack/ore/bluespace_crystal = 20)
/turf/closed/mineral/random/snow/high_chance/mineral_chances()
return list(
/obj/item/stack/ore/bluespace_crystal = 20,
/obj/item/stack/ore/diamond = 30,
/obj/item/stack/ore/gold = 45,
/obj/item/stack/ore/plasma = 50,
/obj/item/stack/ore/silver = 50,
/obj/item/stack/ore/titanium = 45,
/obj/item/stack/ore/uranium = 35,
)
/turf/closed/mineral/random/labormineral
icon_state = "rock_labor"
mineralSpawnChanceList = list(
/obj/item/stack/ore/uranium = 3, /obj/item/stack/ore/diamond = 1, /obj/item/stack/ore/gold = 8, /obj/item/stack/ore/titanium = 8,
/obj/item/stack/ore/silver = 20, /obj/item/stack/ore/plasma = 30, /obj/item/stack/ore/iron = 95,
/turf/closed/mineral/gibtonite = 2)
/turf/closed/mineral/random/labormineral/mineral_chances()
return list(
/obj/item/stack/ore/diamond = 1,
/obj/item/stack/ore/gold = 8,
/obj/item/stack/ore/iron = 95,
/obj/item/stack/ore/plasma = 30,
/obj/item/stack/ore/silver = 20,
/obj/item/stack/ore/titanium = 8,
/obj/item/stack/ore/uranium = 3,
/turf/closed/mineral/gibtonite = 2,
)
/turf/closed/mineral/random/labormineral/volcanic
turf_type = /turf/open/misc/asteroid/basalt/lava_land_surface
baseturfs = /turf/open/misc/asteroid/basalt/lava_land_surface
initial_gas_mix = LAVALAND_DEFAULT_ATMOS
defer_change = TRUE
mineralSpawnChanceList = list(
/obj/item/stack/ore/uranium = 3, /obj/item/stack/ore/diamond = 1, /obj/item/stack/ore/gold = 8, /obj/item/stack/ore/titanium = 8,
/obj/item/stack/ore/silver = 20, /obj/item/stack/ore/plasma = 30, /obj/item/stack/ore/bluespace_crystal = 1, /turf/closed/mineral/gibtonite/volcanic = 2,
/obj/item/stack/ore/iron = 95)
/turf/closed/mineral/random/labormineral/volcanic/mineral_chances()
return list(
/obj/item/stack/ore/bluespace_crystal = 1,
/obj/item/stack/ore/diamond = 1,
/obj/item/stack/ore/gold = 8,
/obj/item/stack/ore/iron = 95,
/obj/item/stack/ore/plasma = 30,
/obj/item/stack/ore/silver = 20,
/obj/item/stack/ore/titanium = 8,
/obj/item/stack/ore/uranium = 3,
/turf/closed/mineral/gibtonite/volcanic = 2,
)
// Subtypes for mappers placing ores manually.
/turf/closed/mineral/random/labormineral/ice
@@ -337,10 +442,19 @@
baseturfs = /turf/open/misc/asteroid/snow/icemoon
initial_gas_mix = ICEMOON_DEFAULT_ATMOS
defer_change = TRUE
mineralSpawnChanceList = list(
/obj/item/stack/ore/uranium = 3, /obj/item/stack/ore/diamond = 1, /obj/item/stack/ore/gold = 8, /obj/item/stack/ore/titanium = 8,
/obj/item/stack/ore/silver = 20, /obj/item/stack/ore/plasma = 30, /obj/item/stack/ore/bluespace_crystal = 1, /turf/closed/mineral/gibtonite/volcanic = 2,
/obj/item/stack/ore/iron = 95)
/turf/closed/mineral/random/labormineral/ice/mineral_chances()
return list(
/obj/item/stack/ore/bluespace_crystal = 1,
/obj/item/stack/ore/diamond = 1,
/obj/item/stack/ore/gold = 8,
/obj/item/stack/ore/iron = 95,
/obj/item/stack/ore/plasma = 30,
/obj/item/stack/ore/silver = 20,
/obj/item/stack/ore/titanium = 8,
/obj/item/stack/ore/uranium = 3,
/turf/closed/mineral/gibtonite/volcanic = 2,
)
/turf/closed/mineral/random/labormineral/ice/Change_Ore(ore_type, random = 0)
. = ..()
+12 -3
View File
@@ -56,7 +56,16 @@
smooth_icon = 'icons/turf/floors/junglegrass.dmi'
/turf/closed/mineral/random/jungle
mineralSpawnChanceList = list(/obj/item/stack/ore/uranium = 5, /obj/item/stack/ore/diamond = 1, /obj/item/stack/ore/gold = 10,
/obj/item/stack/ore/silver = 12, /obj/item/stack/ore/plasma = 20, /obj/item/stack/ore/iron = 40, /obj/item/stack/ore/titanium = 11,
/obj/item/stack/ore/bluespace_crystal = 1)
baseturfs = /turf/open/misc/dirt/dark
/turf/closed/mineral/random/jungle/mineral_chances()
return list(
/obj/item/stack/ore/bluespace_crystal = 1,
/obj/item/stack/ore/diamond = 1,
/obj/item/stack/ore/gold = 10,
/obj/item/stack/ore/iron = 40,
/obj/item/stack/ore/plasma = 20,
/obj/item/stack/ore/silver = 12,
/obj/item/stack/ore/titanium = 11,
/obj/item/stack/ore/uranium = 5,
)