* Ajout de la déblocage des mutation du mode infini dans le mode histoire * Ajout de plus de caverne * Rework de l'emplacement des distributeurs/cavernes * Rework de l'influence, plus de clarté sur les plantes influencées * 4 d'inventaire dans le mode infini * Fix du tuto de mouvement en 3D * Déblocage de toutes le mutations à la fin du jeu * Fix de bug de chargelent de scène multiple
168 lines
5.0 KiB
GDScript
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:
|
|
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):
|
|
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 |