Final boss a lot harder
This commit is contained in:
@@ -1281,7 +1281,20 @@ func _on_boss_button_pressed(lesson_number: int, garden_index: int) -> void:
|
||||
|
||||
|
||||
func _on_final_boss_button_pressed(lesson_number: int, garden_index: int) -> void:
|
||||
_on_boss_button_pressed(lesson_number, garden_index)
|
||||
if is_locked:
|
||||
return
|
||||
feedback_audio_stream_player.play()
|
||||
await OpeningCurtain.close()
|
||||
Minigame.transition_data = {
|
||||
current_lesson_number = lesson_number,
|
||||
current_garden_index = garden_index,
|
||||
minigame_number = -1,
|
||||
minigame_completed = false,
|
||||
skip_minigame_layout = true,
|
||||
boss_gate_lesson = lesson_number,
|
||||
is_final_boss = true
|
||||
}
|
||||
get_tree().change_scene_to_file("res://sources/minigames/fish/fish_minigame.tscn")
|
||||
|
||||
|
||||
func _on_minigame_button_pressed(minigame_scene: PackedScene, minigame_number: int) -> void:
|
||||
|
||||
@@ -48,6 +48,8 @@ var remediation_syllables_scores: Dictionary = {}
|
||||
var remediation_words_scores: Dictionary = {}
|
||||
# Scores for the confusion matrix engine
|
||||
var confusion_matrix_gp_scores: Dictionary[int, PackedInt32Array] = {}
|
||||
# Final boss state
|
||||
var is_final_boss: bool = false
|
||||
# Stimuli
|
||||
var stimuli: Array = []
|
||||
var distractions: Array = []
|
||||
@@ -98,6 +100,7 @@ func _ready() -> void:
|
||||
gardens_data = transition_data
|
||||
minigame_number = transition_data.get("minigame_number", minigame_number)
|
||||
lesson_nb = transition_data.get("current_lesson_number", lesson_nb)
|
||||
is_final_boss = transition_data.get("is_final_boss", false) as bool
|
||||
|
||||
# Difficulty
|
||||
if (UserDataManager as UserDataManagerClass)._student_difficulty:
|
||||
|
||||
@@ -3,6 +3,8 @@ extends Minigame
|
||||
signal beacon_fish_dropped(is_answered_real: bool)
|
||||
|
||||
const FISH_TEXTURE_RECT_SCENE: PackedScene = preload("res://sources/minigames/fish/fish_texture_rect.tscn")
|
||||
const FINAL_BOSS_GAME_DURATION: int = 20 * 60
|
||||
const FINAL_BOSS_TOTAL_WORDS: int = 180
|
||||
|
||||
@export var game_duration: int = 4 * 60
|
||||
@export var minimum_correct_ratio: float = 0.8
|
||||
@@ -60,6 +62,8 @@ func _find_stimuli_and_distractions() -> void:
|
||||
Log.error("FishMinigame: Cannot start fish minigame since data is empty for lesson %d" % lesson_nb)
|
||||
return
|
||||
data_array.shuffle()
|
||||
if is_final_boss:
|
||||
max_words_count = data_array.size()
|
||||
words_to_present.clear()
|
||||
words_to_present_next.clear()
|
||||
for data: Dictionary in data_array:
|
||||
@@ -78,6 +82,10 @@ func _find_stimuli_and_distractions() -> void:
|
||||
words_to_present.insert(0, distractions[0])
|
||||
words_to_present.insert(0, stimuli[0])
|
||||
total_number_of_words = words_to_present.size()
|
||||
if is_final_boss:
|
||||
game_duration = FINAL_BOSS_GAME_DURATION
|
||||
total_number_of_words = FINAL_BOSS_TOTAL_WORDS
|
||||
_ensure_words_to_present_count(FINAL_BOSS_TOTAL_WORDS)
|
||||
progress_gauge_goal.margin_top_ratio = (1. - minimum_correct_ratio) * progress_gauge_max_margin
|
||||
|
||||
|
||||
@@ -182,3 +190,14 @@ func _get_win_ratio() -> float:
|
||||
|
||||
func _on_fish_animated_sprite_animation_finished() -> void:
|
||||
fish_animated_sprite.play("idle")
|
||||
|
||||
|
||||
func _ensure_words_to_present_count(target_count: int) -> void:
|
||||
if words_to_present.is_empty():
|
||||
return
|
||||
var base_pool: Array[String] = words_to_present.duplicate()
|
||||
while words_to_present.size() < target_count:
|
||||
base_pool.shuffle()
|
||||
words_to_present.append_array(base_pool)
|
||||
if words_to_present.size() > target_count:
|
||||
words_to_present.resize(target_count)
|
||||
|
||||
Reference in New Issue
Block a user