extends Node var resolution = Vector2(256,192) onready var viewport = get_parent().get_node("Main/Control/ViewportContainer/Viewport") var current_sector = Vector2(0,0) var fullscreen = false #Onreadys onready var fade = viewport.get_node("FadeLayer") onready var viewport_container = get_parent().get_node("Main/Control/ViewportContainer") #Collectibles var golds = 0 var stars = [false,false,false,false,false] var shards = 0 var arrows = 0 var score = 0 var high_score = 0 var lives = 2 var deaths = 0 var time = 0.0 #Audio Channels onready var ac_jump = $JumpSound onready var ac_collectible = $CollecitbleSound onready var ac_climb = $ClimbSound onready var ac_die = $DieSound onready var ac_music = $Music onready var ac_cheat = $CodeEntrySound onready var ac_boss = $BossSound #Sounds const a_gold = preload("res://audio/sounds/gold.wav") const a_arrow = preload("res://audio/sounds/a_egg_collect.ogg") const a_jump = preload("res://audio/sounds/jump.ogg") const a_star = preload("res://audio/sounds/a_jinjo.ogg") const a_shard = preload("res://audio/sounds/shard.wav") const a_climb_up = preload("res://audio/sounds/a_climb.ogg") const a_climb_down = preload("res://audio/sounds/a_bmilc.ogg") const a_sword = preload("res://audio/sounds/sword.ogg") const a_doublejump = preload("res://audio/sounds/a_bree.wav") const a_shoot = preload("res://audio/sounds/a_egg_shoot.ogg") const a_die = preload("res://audio/sounds/die.wav") const a_die_skeleton = preload("res://audio/sounds/die_skeleton.wav") const a_scrump_die = preload("res://audio/sounds/scrump_die.wav") const a_die_robot = preload("res://audio/sounds/die_robot.wav") const a_gover = preload("res://audio/sounds/gover.wav") const a_boss_hurt = preload("res://audio/sounds/boss_hurt.wav") #Objects const block_text = preload("res://objects/hud/blocktext.tscn") const pause_screen = preload("res://objects/hud/pause_screen.tscn") #Game info var respawn_point = Vector2(32,166) #Respawn point var current_level = 0 #Current level being played var current_file = 1 #Current save file var shards_collected = [false,false,false,false,false,false,false,false,false,false] var is_marathon_mode = false var use_lives = false var can_pause = true func _ready(): Save.load_file(current_file) Save.load_options() #Instances a node func instance_node(node:PackedScene,x:float,y:float,parent): var Instance = node.instance() Instance.global_position = Vector2(x,y) parent.add_child(Instance) #Plays a sound func play_sound(snd,player): player.set_stream(snd) player._set_playing(true) #Get position in sectors func get_sector(pos): return (pos / resolution).floor() #Return the current Map func get_map(): return get_tree().get_nodes_in_group("map")[0] #Go to new map func change_map(map): get_tree().paused = true can_pause = false fade.fade_out(0.4) yield(fade, "fade_finished") can_pause = true clear_collectibles() #Loop is so no more than one level is loaded at a time for maps in get_tree().get_nodes_in_group("map"): maps.queue_free() instance_node(map,0,0,viewport) #Clear data func clear_collectibles(): Game.score = 0 Game.golds = 0 Game.stars = [false,false,false,false,false] Game.shards = 0 Game.shards_collected = [false,false,false,false,false,false,false,false,false,false] Game.arrows = 0 Game.lives = 2 Game.deaths = 0 #Save func save(): var save_id = LevelData.levels[current_level].save_id var save_data = Save.get_level_data(save_id) var is_100 = shards >= 5 && golds >= 50 # set score and time depending on completion if score > save_data["score_100" if is_100 else "score_any"]: Save.set_score(save_id, score, is_100) if time < save_data["time_100" if is_100 else "time_any"]: Save.set_time(save_id, time, is_100) # set shards for i in 8: if shards_collected[i]: Save.set_shard_collected(save_id, i, true) # set options Save.set_options() # save file Save.save_file(current_file) #Convert seconds into M:SS:MS func timeify(input): if input < 600: var minutes = str(floor(input / 60)) var seconds = floor(fmod(input,60)) var milliseconds := floor(fmod(input, 1) * 100) return minutes + ":" + ("%02d" % seconds) + "." + ("%02d" % milliseconds) elif input == INF: return "-:--.--" else: return "9:59.99" #Restart level func restart_level(): if Game.score > Game.high_score: Game.high_score = Game.score Game.score = 0 Game.golds = 0 Game.stars = [false,false,false,false,false] Game.shards = 0 Game.arrows = 0 Game.lives = 2 Game.ac_climb.stop() Game.ac_die.stop() Engine.time_scale = 1.0 for tween in get_tree().get_processed_tweens(): tween.kill() Game.change_map(load(Game.get_map().filename)) ac_music.stream_paused = false #Freeze frame func freeze_frame(time): get_tree().paused = true var timer = get_tree().create_timer(time, true) timer.connect("timeout", get_tree(), "set_pause", [false]) return timer #Check if 100%ed func has_collection_bonus(): return Game.shards == 5 && Game.golds == 50 #Play music, if same track is already playing do nothing func play_music(song): if Game.ac_music.stream != song or Game.ac_music.playing == false: play_sound(song,ac_music) func _physics_process(delta): if Debug.entry == false: # restart level if Input.is_action_just_pressed("restart"): call_deferred("restart_level") #CRT FILTER if Input.is_action_just_pressed("crt"): viewport_container.material.set_shader_param("enabled",!viewport_container.material.get_shader_param("enabled")) #Fullscreen if Input.is_action_just_pressed("fullscreen"): fullscreen = !fullscreen if fullscreen: OS.set_window_fullscreen(true) else: OS.set_window_fullscreen(false) #Pause if Input.is_action_just_pressed("pause") && can_pause && !get_tree().paused: var viewport = get_parent().get_node("Main/Control/ViewportContainer/Viewport") viewport.add_child(pause_screen.instance())