59 lines
1.3 KiB
GDScript
59 lines
1.3 KiB
GDScript
class_name EnemyModPool
|
|
extends Resource
|
|
|
|
const MAX_HEALTH_MOD: Dictionary = {
|
|
"mod_name": "Extra health",
|
|
"mod_property": "max_health",
|
|
"mod_value": 1.0,
|
|
"mod_value_bool": false,
|
|
"mod_type": EnemyMod.ModType.MULTIPLICATIVE,
|
|
"mod_adjectives":
|
|
[
|
|
"Sturdy",
|
|
"Bulky",
|
|
"Ironclad",
|
|
"Unyielding",
|
|
"Stonehide",
|
|
"Thicc",
|
|
"Chunky",
|
|
"Pudgy",
|
|
"Chonky",
|
|
"Double-stuffed"
|
|
],
|
|
}
|
|
|
|
const MOD_POOL = [
|
|
{
|
|
"mod_name": "Extra movement speed",
|
|
"mod_property": "move_speed",
|
|
"mod_value": 1.25,
|
|
"mod_value_bool": false,
|
|
"mod_type": EnemyMod.ModType.MULTIPLICATIVE,
|
|
"mod_adjectives": ["Swift", "Nimble", "Fleet", "Spry", "Skittering", "Zoomy", "Zippy"]
|
|
}
|
|
]
|
|
|
|
|
|
static func get_random_mods(count: int) -> Array[EnemyMod]:
|
|
var mods: Array[EnemyMod] = []
|
|
# always include extra health mod
|
|
var hp_mod = _dict_to_mod(MAX_HEALTH_MOD)
|
|
hp_mod.mod_value *= 5 * count
|
|
mods.append(hp_mod)
|
|
for i in count:
|
|
var mod_data = MOD_POOL.pick_random()
|
|
var mod = _dict_to_mod(mod_data)
|
|
mods.append(mod)
|
|
return mods
|
|
|
|
|
|
static func _dict_to_mod(d: Dictionary) -> EnemyMod:
|
|
var mod: EnemyMod = EnemyMod.new()
|
|
mod.mod_name = d["mod_name"]
|
|
mod.mod_property = d["mod_property"]
|
|
mod.mod_value = d["mod_value"]
|
|
mod.mod_value_bool = d["mod_value_bool"]
|
|
mod.mod_type = d["mod_type"]
|
|
mod.adjective = d["mod_adjectives"].pick_random()
|
|
return mod
|