Files
seeding-planets/common/game_data/scripts/story/story_step.gd
T

168 lines
5.0 KiB
GDScript

@abstract
extends Resource
class_name StoryStep
const COSY_ENERGY_ADDITION = 2
const COSY_OBJECTIVE_FACTOR = 0.5
#region ------------------ Story ------------------
@abstract func get_respawn_scene() -> Scene
@abstract func get_destination_text() -> String
func get_destination_scene() -> Scene:
return BoreaScene.new()
func get_run_progress(level : int, difficulty_setting : int) -> int:
if is_region_sequence_infinite():
return 0
return get_region_sequence_length(difficulty_setting) - level
func get_ship_dialog_path(_level : int, _difficulty_setting : int, _ship_in_space := true) -> String:
return ""
func get_logs() -> Array[Log]:
return []
#region ------------------ Run ------------------
func is_run_finished(level : int, difficulty_setting : int) -> bool:
if is_region_sequence_infinite():
return false
return level == get_region_sequence_length(difficulty_setting) - 1
func is_region_sequence_infinite() -> bool:
return false
func get_player_max_energy(difficulty_setting : int) -> int:
if difficulty_setting == 0:
return PlayerData.DEFAULT_MAX_ENERGY + COSY_ENERGY_ADDITION
return PlayerData.DEFAULT_MAX_ENERGY
func get_player_max_inventory(_difficulty_setting : int) -> int:
return PlayerData.DEFAULT_INVENTORY_SIZE
func get_region_sequence_length(difficulty_setting : int) -> int:
if difficulty_setting == 0:
return 6
return 8
func has_cave_modifier(level : int, _difficulty_setting : int) -> bool:
match level:
1: return false
2: return false
3: return true
4: return false
5: return true
6: return true
7: return false
8: return true
_: return level % 2 == 0
func has_vending_machine_modifier(level : int, _difficulty_setting : int) -> bool:
match level:
1: return false
2: return true
3: return false
4: return true
5: return false
6: return false
7: return true
8: return false
_: return (level + 1) % 3 == 0
func get_challenge_chance(level : int, difficulty_setting : int) -> float:
if is_run_point_dangerous(level, difficulty_setting):
return 0.
return 0.15
func get_run_point_number(level : int, difficulty_setting : int) -> int:
if is_run_finished(level, difficulty_setting):
return 1
return 2
func get_charge_number(_level : int, _difficulty_setting : int) -> int:
return 10
func is_run_point_dangerous(level : int, difficulty_setting : int) -> bool:
if difficulty_setting == 0:
return false
return level == get_region_sequence_length(difficulty_setting) - 2
static func basic_objective_for_region(level : int) -> int:
match level:
1: return 10
2: return 15
3: return 20
4: return 40
5: return 60
6: return 80
7: return 110
8: return 150
_: return basic_objective_for_region(level-1) + (level-2) * 5
static func difficult_objective_for_region(level : int) -> int:
match level:
1: return 10
2: return 20
_: return difficult_objective_for_region(level-1) + (level-1) * 10
func get_objective_multiplier() -> float:
return 1.
func get_objective_for_region(level : int, difficulty_setting : int) -> int:
var objective = basic_objective_for_region(level)
if difficulty_setting == 0:
objective = roundi(objective * COSY_OBJECTIVE_FACTOR)
elif difficulty_setting == 2:
objective = difficult_objective_for_region(level)
return max(1,roundi(objective * get_objective_multiplier()))
func get_story_modifiers_for_region(level : int, difficulty_setting : int) -> Array[RegionModifier]:
var modifiers : Array[RegionModifier] = []
if is_run_finished(level, difficulty_setting):
var dest_mod = DestinationModifier.new()
dest_mod.destination_scene = get_destination_scene()
modifiers.append(dest_mod)
return modifiers
func get_gameplay_modifiers_for_region(level : int, difficulty_setting : int) -> Array[RegionModifier]:
var modifiers : Array[RegionModifier] = []
if need_gameplay_modifier(level,difficulty_setting):
if has_vending_machine_modifier(level, difficulty_setting):
modifiers.append(VendingMachineModifier.new())
if has_cave_modifier(level, difficulty_setting):
modifiers.append(CaveModifier.new())
return modifiers
func need_gameplay_modifier(level : int, difficulty_setting : int):
if is_run_finished(level, difficulty_setting):
return false
return true
func _on_finish():
GameInfo.game_data.incubator_used = []
GameInfo.game_data.dead_orchid_position = Vector3.ZERO
GameInfo.game_data.dead_orchid_rotation = Vector3.ZERO
class Log:
var key : String
var title : String
var text : String
func _init(
_key: String,
_title : String,
_text : String,
):
key = _key
title = _title
text = _text