Made autoload and ui folders to clean things up

This commit is contained in:
pennyrigate 2023-02-24 17:15:20 -05:00
parent 212b49de56
commit 8cfe971e06
26 changed files with 50 additions and 43 deletions

130
autoloads/debug.gd Normal file
View file

@ -0,0 +1,130 @@
extends CanvasLayer
#Console by hazel
#Const
const ENTRY_SEQUENCE = ["4", "1", "5"]
#Export
export var max_lines: int = 10
export var opacity: float = 0.5
#Onready
onready var console = $Console
onready var code_label = get_parent().get_node("Main/Control/ViewportContainer/Viewport/CheatLayer/CheatLabel")
##Runtime
var lines: int = 0
var time: float = 0.0
var n: int = 0
var debug = false
var allow_sword = false
var moon_jump = false
# cheat code entry
var entry_index = 0
var entry = false
var code = ""
func _ready():
#Auto do debug when playtesting
if not OS.is_debug_build():
console.visible = false
debug = false
else:
console.visible = false
debug = true
$Console/Panel.modulate.a = opacity
console.modulate.a = opacity
func _physics_process(delta):
#DEBUG
if debug == true && !entry && !entry_index > 0:
#Show console
if Input.is_action_just_pressed("debug_show"):
console.visible = !console.visible
#Move player to mouse
if Input.is_action_pressed("debug_move_player"):
Game.get_map().get_node("Player").position = get_viewport().get_mouse_position()
Debug.print(get_viewport().get_mouse_position())
#Test room
if Input.is_action_just_pressed("debug_testroom"):
Game.change_map(load("res://maps/test_room.tscn"))
#Debug 1
if Input.is_action_just_pressed("debug_1"):
Game.change_map(load("res://maps/level_select.tscn"))
#Debug 2
if Input.is_action_just_pressed("debug_2"):
Game.freeze_frame(1.0)
func print(text):
lines += 1
if lines > 1:
console.text += "\n"
if lines > 10:
var n = console.text.find("\n")
var t = console.text
t.erase(0, n+1)
lines -= 1
console.text = t + str(text)
else:
console.text += str(text)
func _on_visible_toggled(button_pressed):
if button_pressed:
console.visible = true
else:
console.visible = false
func _input(event):
if event is InputEventKey && event.is_pressed():
var character = OS.get_scancode_string(event.scancode)
if character.length() > 1:
character = ""
if entry:
if event.scancode == KEY_ENTER:
_enter_code()
Game.set_deferred("can_pause",true)
entry = false
code = ""
elif event.scancode == KEY_BACKSPACE:
code.erase(code.length() - 1, 1)
else:
code += character
code_label.text = code
else:
if character == ENTRY_SEQUENCE[entry_index]:
entry_index += 1
if entry_index >= ENTRY_SEQUENCE.size():
entry = true
entry_index = 0
_on_entry()
func _on_entry():
Game.play_sound(Game.a_star, Game.ac_cheat)
Game.can_pause = false
func _enter_code():
match code:
"30385":
for gold in get_tree().get_nodes_in_group("gold"):
var goldsprite = gold.get_node("AnimatedSprite")
goldsprite.frames = preload("res://graphics/collectibles/30385_frames.tres")
goldsprite.position.y -= 2
#goldsprite.material.set_shader_param("palette",load("res://graphics/collectibles/pal_star_green.png"))
"1989":
for enemy in get_tree().get_nodes_in_group("enemy"):
enemy.die()
"DGSTEEZY":
debug = true
"6DOUBLOONS":
Debug.print(get_tree().get_nodes_in_group("gold").size())
"EVILSBANE":
allow_sword = true
Input.action_press("sword")
"REDFEATHER":
moon_jump = true
"NIGHTCORE":
Engine.time_scale = 10
"UPUPANDAWAY":
get_tree().call_group("mountain_easter_egg","play","liftoff")
"MACOSX":
var player = get_tree().get_nodes_in_group("player")[0]
Game.instance_node(load("res://objects/environment/beach_ball/beach_ball.tscn"),player.global_position.x,player.global_position.y - 8,Game.get_map())

36
autoloads/debug.tscn Normal file
View file

@ -0,0 +1,36 @@
[gd_scene load_steps=4 format=2]
[ext_resource path="res://autoloads/debug.gd" type="Script" id=1]
[sub_resource type="InputEventAction" id=4]
action = "toggle_console"
[sub_resource type="ShortCut" id=3]
shortcut = SubResource( 4 )
[node name="Debug" type="CanvasLayer"]
layer = 128
script = ExtResource( 1 )
[node name="Console" type="Label" parent="."]
anchor_right = 1.0
size_flags_vertical = 2
[node name="Panel" type="Panel" parent="Console"]
show_behind_parent = true
anchor_right = 1.0
anchor_bottom = 1.0
[node name="VisibleToggle" type="CheckBox" parent="."]
visible = false
anchor_left = 1.0
anchor_right = 1.0
margin_left = -22.0
margin_top = 173.0
margin_right = 57.0
margin_bottom = 197.0
pressed = true
shortcut = SubResource( 3 )
text = "Console"
[connection signal="toggled" from="VisibleToggle" to="." method="_on_visible_toggled"]

186
autoloads/game.gd Normal file
View file

@ -0,0 +1,186 @@
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())

28
autoloads/game.tscn Normal file
View file

@ -0,0 +1,28 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://autoloads/game.gd" type="Script" id=1]
[node name="Game" type="Node"]
pause_mode = 2
script = ExtResource( 1 )
[node name="CollecitbleSound" type="AudioStreamPlayer" parent="."]
volume_db = -8.0
[node name="JumpSound" type="AudioStreamPlayer" parent="."]
volume_db = -12.0
[node name="ClimbSound" type="AudioStreamPlayer" parent="."]
volume_db = -12.0
[node name="Music" type="AudioStreamPlayer" parent="."]
volume_db = -13.5
[node name="DieSound" type="AudioStreamPlayer" parent="."]
volume_db = -12.0
[node name="CodeEntrySound" type="AudioStreamPlayer" parent="."]
volume_db = -12.0
[node name="BossSound" type="AudioStreamPlayer" parent="."]
volume_db = -12.0

11
autoloads/level_data.gd Normal file
View file

@ -0,0 +1,11 @@
tool
extends Node
export var levels = [] setget set_levels
func set_levels(value):
levels = value
for i in levels.size():
if !levels[i]:
levels[i] = LevelEntry.new()
levels[i].resource_name = "New Entry"

62
autoloads/level_data.tscn Normal file
View file

@ -0,0 +1,62 @@
[gd_scene load_steps=15 format=2]
[ext_resource path="res://autoloads/level_data.gd" type="Script" id=1]
[ext_resource path="res://maps/map01.tscn" type="PackedScene" id=2]
[ext_resource path="res://maps/canopy.tscn" type="PackedScene" id=3]
[ext_resource path="res://maps/cave.tscn" type="PackedScene" id=4]
[ext_resource path="res://scripts/level_entry.gd" type="Script" id=5]
[ext_resource path="res://maps/mountain.tscn" type="PackedScene" id=6]
[ext_resource path="res://maps/abyss.tscn" type="PackedScene" id=7]
[ext_resource path="res://maps/boss/boss1_arena.tscn" type="PackedScene" id=8]
[sub_resource type="Resource" id=1]
resource_name = "Verdant Hills"
script = ExtResource( 5 )
title = "Verdant Hills"
shard_titles = [ "Climb the Big Vine", "Next to the Lone Tree", "Slime's Treasure", "The Snake Pit", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
save_id = "hills"
scene = ExtResource( 2 )
[sub_resource type="Resource" id=2]
resource_name = "Shady Canopy"
script = ExtResource( 5 )
title = "Shady Canopy"
shard_titles = [ "Archer and His Friend", "Thirsty Spiders", "Spider's Den", "Dancing Above the Pond", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
save_id = "canopy"
scene = ExtResource( 3 )
[sub_resource type="Resource" id=4]
resource_name = "Echo Mountain"
script = ExtResource( 5 )
title = "Echo Mountain"
shard_titles = [ "Fiend's Trick Jump", "Speed Snake!", "Twin Rolling Fiends", "Crafty Bat", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
save_id = "mountain"
scene = ExtResource( 6 )
[sub_resource type="Resource" id=6]
resource_name = "VS The Scrump"
script = ExtResource( 5 )
title = "VS The Scrump"
shard_titles = [ "-w-", "owo", "uwu", "o3o", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
save_id = "Boss1"
scene = ExtResource( 8 )
[sub_resource type="Resource" id=3]
resource_name = "Blue Ray Cavern"
script = ExtResource( 5 )
title = "Blue Ray Cavern"
shard_titles = [ "Star-Crossed Lovers", "The Snail Cave", "Members Only!", "OverHead Obstacle Course", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
save_id = "cave"
scene = ExtResource( 4 )
[sub_resource type="Resource" id=5]
resource_name = "Eepy Abyss"
script = ExtResource( 5 )
title = "Eepy Abyss"
shard_titles = [ "You", "Can", "(not)", "Breathe", "5 Rainbow Stars", "Collection Bonus", "Time Bonus", "Life Bonus" ]
save_id = "abyss"
scene = ExtResource( 7 )
[node name="LevelData" type="Node"]
script = ExtResource( 1 )
levels = [ SubResource( 1 ), SubResource( 2 ), SubResource( 4 ), SubResource( 6 ), SubResource( 3 ), SubResource( 5 ) ]

42
autoloads/save.gd Normal file
View file

@ -0,0 +1,42 @@
extends Node
var file
func load_file(file_number):
var new_file = ConfigFile.new()
new_file.load("user://file%d.pr" % file_number)
file = new_file
func get_level_data(save_id):
var shards = []
shards.resize(8)
for i in 8:
shards[i] = file.get_value(save_id, "shard_%d" % i, false)
return {
# any% score and time
score_any = file.get_value(save_id, "score_any", 0),
time_any = file.get_value(save_id, "time_any", INF),
# 100% score and time
score_100 = file.get_value(save_id, "score_100", 0),
time_100 = file.get_value(save_id, "time_100", INF),
shards = shards
}
func load_options():
Game.use_lives = file.get_value("options","uselives",Game.use_lives)
func set_shard_collected(save_id, index, collected = true):
file.set_value(save_id, "shard_%d" % index, collected)
func set_score(save_id, score, is_100 = false):
file.set_value(save_id, "score_100" if is_100 else "score_any", int(score))
func set_options():
file.set_value("options","uselives",Game.use_lives)
save_file(Game.current_file)
func set_time(save_id, time, is_100 = false):
file.set_value(save_id, "time_100" if is_100 else "time_any", float(time))
func save_file(file_number):
file.save("user://file%d.pr" % file_number)