the start of marathon mode

This commit is contained in:
Haze Weathers 2024-03-05 18:20:32 -05:00
parent 83f0bccd9a
commit d06acf2522
18 changed files with 607 additions and 26 deletions

View file

@ -49,6 +49,13 @@ var can_pause: bool = true
var can_restart: bool = true
var current_palette: String = "default"
var still_playing: bool = false
var last_mm_button = null
#== marathon mode ==#
var marathon_mode: bool = false
var marathon_score: int = 0
var marathon_lives: int = 0
var marathon_shards: int = 0
var marathon_deaths: int = 0
func _ready():
@ -133,7 +140,11 @@ func tally_scores() -> void:
perfect_bonus += 1000
# final score
final_score = score + arrows_bonus + collection_bonus + time_bonus + life_bonus + perfect_bonus
Game.save()
if marathon_mode:
marathon_shards += shards_collected.count(true)
marathon_score += final_score
else:
Game.save()
#Go to new map
@ -144,11 +155,12 @@ func change_map(map: PackedScene) -> void:
yield(Fade, "fade_finished")
can_pause = true
# save deaths
var save_id = LevelData.levels[current_level].save_id
var save_data: Save.LevelSaveData = Save.current_file.levels[save_id]
save_data.deaths += deaths
Save.current_file.play_time += time
Save.current_file.save_to_file()
if not marathon_mode:
var save_id = LevelData.levels[current_level].save_id
var save_data: Save.LevelSaveData = Save.current_file.levels[save_id]
save_data.deaths += deaths
Save.current_file.play_time += time
Save.current_file.save_to_file()
# clear
clear_collectibles()
StainLayer.reset()
@ -162,7 +174,8 @@ func clear_collectibles() -> void:
stars_collected.fill(false)
shards_collected.fill(false)
arrows = 0
lives = 2
if not marathon_mode:
lives = 2
deaths = 0
# score
score = 0
@ -174,6 +187,8 @@ func clear_collectibles() -> void:
#Save
func save():
if marathon_mode:
return
# get level's save data object
var save_id = LevelData.levels[current_level].save_id
var save_data: Save.LevelSaveData = Save.current_file.levels[save_id]
@ -206,6 +221,8 @@ func save():
# smaller save function for bosses
func save_boss() -> void:
if marathon_mode:
return
var save_id = LevelData.levels[current_level].save_id
var save_data: Save.LevelSaveData = Save.current_file.levels[save_id]
@ -231,13 +248,13 @@ func timeify(input):
# convert seconds into M:SS.MS
func format_time(seconds: float) -> String:
if is_inf(seconds) or is_nan(seconds): # infinite
return "-:--.--"
elif seconds >= 600.0: # 10 minutes or greater
return "9:99.99"
return "--:--.--"
elif seconds >= 6000.0: # 10 minutes or greater
return "99:99.99"
else:
var minutes = floor(seconds / 60.0)
var centiseconds = fmod(floor(seconds * 100.0), 100.0)
return "%01d:%02d.%02d" % [minutes, fmod(seconds, 60.0), centiseconds]
return "%02d:%02d.%02d" % [minutes, fmod(seconds, 60.0), centiseconds]
#Restart level
func restart_level():
@ -268,14 +285,17 @@ func has_collection_bonus():
# called when player dies
func _on_player_died() -> void:
deaths += 1
if marathon_mode:
marathon_deaths += 1
if use_lives and lives <= 0:
still_playing = false
can_restart = false
can_pause = false
Save.current_file.play_time += time
Save.current_file.levels[LevelData.levels[current_level].save_id].deaths += deaths
Save.current_file.save_to_file()
clear_collectibles()
if not marathon_mode:
Save.current_file.play_time += time
Save.current_file.levels[LevelData.levels[current_level].save_id].deaths += deaths
Save.current_file.save_to_file()
clear_collectibles()
Audio.play_sound(Audio.a_game_over, Audio.ac_die)
get_tree().get_nodes_in_group("player")[0].queue_free()
var time_tween = create_tween()
@ -286,11 +306,14 @@ func _on_player_died() -> void:
Engine.time_scale = 1.0
Fade.fade_out(Options.transition_speed_secs)
yield(Fade, "fade_finished")
var map = get_map()
var gover = load("res://menus/game_over.tscn").instance()
map.add_child(gover)
can_restart = true
can_pause = true
if marathon_mode:
SceneManager.current_scene = load("res://menus/main_menu.tscn").instance()
else:
var map = get_map()
var gover = load("res://menus/game_over.tscn").instance()
map.add_child(gover)
can_restart = true
can_pause = true
else:
# count death
lives -= 1

View file

@ -1,6 +1,8 @@
tool
extends Node
export var marathon_start: int = 0
export var marathon_end: int = 11
export var levels: Array = [] setget set_levels
func set_levels(value):

View file

@ -5,10 +5,10 @@
[sub_resource type="ShaderMaterial" id=1]
shader = ExtResource( 2 )
shader_param/enabled = false
shader_param/enabled = true
shader_param/resolution = Vector2( 256, 192 )
shader_param/curvature = Vector2( 0, 0 )
shader_param/scanline_opacity = Vector2( 0.2, 0 )
shader_param/scanline_opacity = Vector2( 0.1, 0.1 )
shader_param/brightness = 1.0
[node name="SceneManager" type="Node"]