114 lines
3.2 KiB
GDScript
114 lines
3.2 KiB
GDScript
extends Node
|
|
|
|
|
|
const DESCRIPTIONS := [
|
|
# sweet mode
|
|
{
|
|
"enemies": "*slower enemies",
|
|
"lives": "*unlimited lives",
|
|
"description": "*Difficulty for\n beginners",
|
|
},
|
|
# salty mode
|
|
{
|
|
"enemies": "*normal enemies",
|
|
"lives": "*unlimited lives",
|
|
"description": "*Difficulty for\n skilled players",
|
|
},
|
|
# spicy mode
|
|
{
|
|
"enemies": "*normal enemies",
|
|
"lives": "*limited lives",
|
|
"description": "*Difficulty for\n retro players",
|
|
},
|
|
# pungent mode
|
|
{
|
|
"enemies": "*faster enemies",
|
|
"lives": "*limited lives",
|
|
"description": "*Difficulty for\n insane players",
|
|
},
|
|
]
|
|
|
|
var file: Save.SaveFile = null
|
|
var difficulty: int = Game.Difficulty.SPICY
|
|
|
|
onready var face: Sprite = $"%Face"
|
|
onready var chosen_name: Label = $"%ChosenName"
|
|
onready var enemies: Label = $"%Enemies"
|
|
onready var lives: Label = $"%Lives"
|
|
onready var description: Label = $"%Description"
|
|
onready var exit_sprite: Sprite = $"%ExitSprite"
|
|
onready var closed_collision: CollisionShape2D = $"%ClosedCollision"
|
|
|
|
|
|
func _ready() -> void:
|
|
# escape to file select if no file is assigned
|
|
if not file:
|
|
yield(get_tree(), "idle_frame")
|
|
SceneManager.current_scene = load("res://menus/file_select.tscn").instance()
|
|
return
|
|
|
|
# pause so that player can not move around until difficulty chosen
|
|
get_tree().paused = true
|
|
# initialize name
|
|
chosen_name.text = ""
|
|
file.name = ""
|
|
# fade in
|
|
Fade.fade_in(Options.transition_speed_secs)
|
|
# focus the difficulty
|
|
$"%Spicy".call_deferred("grab_focus")
|
|
|
|
|
|
func _set_difficulty(value: int) -> void:
|
|
difficulty = posmod(value, 4)
|
|
file.difficulty = difficulty
|
|
face.frame = difficulty
|
|
enemies.text = DESCRIPTIONS[difficulty].enemies
|
|
lives.text = DESCRIPTIONS[difficulty].lives
|
|
description.text = DESCRIPTIONS[difficulty].description
|
|
|
|
|
|
|
|
func _difficulty_selected() -> void:
|
|
Fade.fade_out(Options.transition_speed_secs)
|
|
yield(Fade, "fade_finished")
|
|
$"%DifficultySelect".queue_free()
|
|
$"%NameEntry".visible = true
|
|
get_tree().paused = false
|
|
Game.use_lives = false
|
|
Fade.fade_in(Options.transition_speed_secs)
|
|
|
|
func _on_letter_chosen(letter: String) -> void:
|
|
if file.name.length() < 8:
|
|
file.name += letter
|
|
chosen_name.text = file.name
|
|
if file.name.length() > 0:
|
|
var tween = create_tween()
|
|
tween.tween_property(exit_sprite, "frame", 3, 0.25)
|
|
tween.tween_property(closed_collision, "disabled", true, 0.0)
|
|
|
|
func _on_backspace():
|
|
# file.name.erase(file.name.length() - 1,1)
|
|
file.name = file.name.left(file.name.length() - 1)
|
|
chosen_name.text = file.name
|
|
|
|
func _on_Exit_area_entered(area: Area2D) -> void:
|
|
if area.is_in_group("player_hitbox"):
|
|
var player = area.get_parent()
|
|
player.state_chart.send_event("start_teleport")
|
|
player.connect("teleport_finished", self, "_on_player_teleport_finished")
|
|
|
|
func _on_player_teleport_finished() -> void:
|
|
if file.name.length() > 0:
|
|
get_tree().paused = true
|
|
if Options.scoreboard_name.empty():
|
|
Options.scoreboard_name = file.name
|
|
file.save_to_file()
|
|
Save.current_file = file
|
|
Game.difficulty = file.difficulty
|
|
Fade.fade_out(Options.transition_speed_secs)
|
|
yield(Fade, "fade_finished")
|
|
get_tree().paused = false
|
|
if Options.speedrun_timer:
|
|
SpeedrunTimer.timer_running = true
|
|
SpeedrunTimer.visible = true
|
|
SceneManager.current_scene = load("res://cutscenes/intro_story.tscn").instance()
|