* 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
160 lines
5.1 KiB
GDScript
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 |