Files
seeding-planets/common/game_data/scripts/story/story_step.gd
T
zacharie 3ff6d68371 Dev 0.2.0
* Base Astra dev (pas terminée)
* Réparation du bug du level up des mutations
* Boost de la difficulté sur tous les modes
* Increase backrooms distance et réparation du succès
* Réparation de coquilles de textes et des logs qui ne s'affichent plus
2026-07-25 12:42:42 +02:00

160 lines
5.1 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 get_first_vending_machine_occurence(_level : int, _difficulty_setting : int) -> int:
return 2
func get_vending_machine_occurence(_level : int, _difficulty_setting : int) -> int:
return 3
func get_first_cave_occurence(level : int, difficulty_setting : int) -> int:
return get_cave_occurence(level, difficulty_setting)
func get_cave_occurence(_level : int, _difficulty_setting : int) -> int:
return 3
func get_challenge_chance(_level : int, _difficulty_setting : int) -> float:
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:
return 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):
var first_vending = get_first_vending_machine_occurence(level, difficulty_setting)
var vending_occurence = get_vending_machine_occurence(level, difficulty_setting)
if vending_occurence > 0 and level >= first_vending:
if (level - first_vending)%vending_occurence == 0:
modifiers.append(VendingMachineModifier.new())
var first_cave = get_first_cave_occurence(level, difficulty_setting)
var cave_occurence = get_cave_occurence(level, difficulty_setting)
if cave_occurence > 0 and level >= first_cave:
if (level - first_cave)%cave_occurence == 0:
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