hero-mark-2/game.gd

155 lines
5.6 KiB
GDScript

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 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 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
#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/tempjingle.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_gover = preload("res://audio/sounds/gover.wav")
#Objects
const block_text = preload("res://objects/hud/blocktext.tscn")
const pause_screen = preload("res://objects/hud/pause_screen.tscn")
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]
#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):
shards_collected = [false,false,false,false,false,false,false,false,false,false]
get_map().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.arrows = 0
Game.lives = 2
#Save
func save():
var save = ConfigFile.new()
save.load(str("user://file") + str(Game.current_file) + str(".pr"))
if Game.shards == 5 && Game.golds == 50:
save.set_value(str(current_level),"100% High Score",Game.score)
save.set_value(str(current_level),"100% Time",Game.time)
else:
save.set_value(str(current_level),"Any% High Score",Game.score)
save.set_value(str(current_level),"Any% Time",Game.time)
if Game.shards_collected[0] == true: save.set_value(str(current_level),"Shard0",Game.shards_collected[0])
if Game.shards_collected[1] == true: save.set_value(str(current_level),"Shard1",Game.shards_collected[1])
if Game.shards_collected[2] == true: save.set_value(str(current_level),"Shard2",Game.shards_collected[2])
if Game.shards_collected[3] == true: save.set_value(str(current_level),"Shard3",Game.shards_collected[3])
if Game.shards_collected[4] == true: save.set_value(str(current_level),"Shard4",Game.shards_collected[4])
if Game.shards_collected[5] == true: save.set_value(str(current_level),"Shard5",Game.shards_collected[5])
if Game.shards_collected[6] == true: save.set_value(str(current_level),"Shard6",Game.shards_collected[6])
if Game.shards_collected[7] == true: save.set_value(str(current_level),"Shard7",Game.shards_collected[7])
if Game.shards_collected[8] == true: save.set_value(str(current_level),"Shard8",Game.shards_collected[8])
if Game.shards_collected[9] == true: save.set_value(str(current_level),"Shard9",Game.shards_collected[9])
save.save(str("user://file") + str(current_file) + str(".pr"))
#Convert seconds into M:SS:MS
func timeify(input):
var minutes = str(floor(input / 60))
var seconds = floor(fmod(input,60))
var milliseconds := floor(fmod(input, 1) * 100)
if input < 600:
return minutes + ":" + ("%02d" % seconds) + ":" + ("%02d" % milliseconds)
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))
#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
func _process(delta):
if Debug.entry == false:
#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"):
var viewport = get_parent().get_node("Main/Control/ViewportContainer/Viewport")
instance_node(pause_screen,0,0,viewport)