change: moving animations for menu outside / into tweens / subscenes

This commit is contained in:
tiger tiger tiger 2025-12-14 00:53:48 +01:00
parent 7741409668
commit b24d8ddb6c
19 changed files with 806 additions and 1523 deletions

View File

@ -13,7 +13,7 @@ var current_room_path: String:
changed.emit()
@export var unique_save_name: String = "frame_of_mind_%s_%s" % [Time.get_date_string_from_system(), Time.get_time_string_from_system().replace(":", "-")] + "-" + str(randi()):
set(value):
set(value):
unique_save_name = value
if _is_initialised: changed.emit()
@ -78,7 +78,7 @@ func _init(initial_filepath = "") -> void:
read_save_file()
_is_initialised = true
func read_save_file() -> void:
func read_save_file() -> void:
if not DirAccess.dir_exists_absolute(filepath.get_base_dir()):
DirAccess.make_dir_absolute(filepath.get_base_dir())
@ -170,7 +170,7 @@ func _get_save_dict() -> Dictionary:
func save_to_file(screen_shot: Texture) -> void:
print_debug("Savegame: Saving to file: %s" % filepath)
if filepath == "DEBUG":
push_warning("Savegame: Saving DEBUG save skipped. This is intentional.")
return

View File

@ -1,6 +1,5 @@
extends Node
# General housekeeping to set up a "normal"
# game experience, e.g.
# - ensure settings exist
# - ensure savegames are healthy
func _ready() -> void:
Main.normal_boot = true # Tell the system this is a normal game start

View File

@ -1,14 +1,16 @@
extends Control
var normal_boot : bool = false
@export_file(".tscn") var youth_room_path: String
@export_file(".tscn") var transition_room_path: String
@export_file(".tscn") var adulthood_room_path: String
@export_file(".tscn") var ending_path: String
@onready var curtain: Curtain = %Curtain
@onready var credits_roll: Control = %CreditsRoll
@onready var main_menu: MainMenu = %MainMenu
@onready var pause_menu: PauseManu = %PauseMenu
@onready var menu_animation: AnimationTree = %MenuAnimationTree
@onready var state_machine: AnimationNodeStateMachinePlayback = menu_animation["parameters/playback"]
@onready var room_paths := {
State.rooms.NULL: youth_room_path, # Maybe Draeven story?
@ -19,15 +21,20 @@ extends Control
}
func _ready() -> void:
print_debug("main.gd: ready()")
if State.room == null:
_open()
print_debug("main.gd: _ready()")
await get_tree().process_frame
if normal_boot:
print_debug("main.gd: normal boot")
var path := await main_menu.execute()
_close()
await _load_room(path)
else:
hide()
await _mainloop() # Debug functionality
print_debug("main.gd: direct boot")
credits_roll.hide()
main_menu.hide()
pause_menu.hide()
await curtain.hide()
#await _mainloop() # Debug functionality
func _mainloop() -> void:
@ -57,14 +64,6 @@ func _load_room(next_path: String) -> void:
push_error("Failed to load youth room scene.")
return
# TODO: ugh, godot tweens are the wurst
func _open() -> void:
show()
menu_animation["parameters/conditions/loading_done"] = false
menu_animation["parameters/conditions/load_save"] = false
func _close() -> void:
pass
#
#var in_game = false

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,121 @@
[gd_scene load_steps=54 format=3 uid="uid://befxf8uruwnrl"]
[ext_resource type="Script" uid="uid://k8yppfbkq0xv" path="res://singletons/main/main.gd" id="1_rqkns"]
[ext_resource type="PackedScene" uid="uid://gldtxysavetf" path="res://logic-scenes/startup/startup.tscn" id="1_v5rpm"]
[ext_resource type="PackedScene" uid="uid://cml5liawokdch" path="res://ui/curtain/curtain.tscn" id="2_nbcxq"]
[ext_resource type="PackedScene" uid="uid://b51wdql4mby47" path="res://ui/menu_main/main_menu.tscn" id="3_ik73t"]
[ext_resource type="PackedScene" uid="uid://d38f0a333kki1" path="res://ui/loading/loading.tscn" id="5_dxvjq"]
[ext_resource type="PackedScene" uid="uid://6aaxpvoepqrm" path="res://logic-scenes/disclaimer/disclaimer.tscn" id="7_t45fc"]
[ext_resource type="AudioStream" uid="uid://fej7yw25lgqy" path="res://import/menu_music/Ambient 6.ogg" id="8_tptb8"]
[ext_resource type="Script" uid="uid://0h0lrkntx0uh" path="res://ui/menu_main/pause_menu.gd" id="9_ihfph"]
[ext_resource type="Texture2D" uid="uid://ds1n0xhxqlp4b" path="res://base-environments/youth_room/shaders/universe_noise.png" id="9_l7v4b"]
[ext_resource type="Texture2D" uid="uid://bdyg065h8vcdi" path="res://base-environments/youth_room/shaders/starlight-textures.png" id="10_pipov"]
[ext_resource type="PackedScene" uid="uid://cbpcjk1qr2iiu" path="res://ui/credits_roll/credits_roll.tscn" id="11_wtpde"]
[ext_resource type="Script" uid="uid://sa15wakvpj2e" path="res://dev-util/bug_button.gd" id="12_cegan"]
[sub_resource type="GDScript" id="GDScript_8sq0u"]
script/source = "extends Label
func _process(_delta):
text = str(Engine.get_frames_per_second())
"
[sub_resource type="Animation" id="Animation_y6s08"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath(".:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [1.5708]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("frame/deco:rotation")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [-0.314159]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("frame/deco:modulate")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../../MainMenu:modulate")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../../MainMenu:visible")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("../../PauseContainer:visible")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("../../PauseContainer/TextureRect:modulate")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/8/t

View File

@ -0,0 +1,43 @@
extends Control
@onready var Handle : Control = $Handle
@export var scroll_speed: float = 50.0
var original : Vector2
var offset : Vector2
var playing : bool
func _ready() -> void:
print_debug("credits_roll.gd: _ready()")
original = Handle.position
play()
func _process(delta: float) -> void:
if playing:
offset.y -= scroll_speed * delta
Handle.position = offset
func _input(event: InputEvent) -> void:
if event.is_action_pressed("ui_menu") or event.is_action_pressed("ui_cancel") or event.is_action_pressed("ui_accept"):
stop()
func play() -> void:
print_debug("credits_roll.gd: show()")
offset = original
Handle.position = original
playing = true
modulate.a = 0
visible = true
var tween := create_tween()
tween.tween_property(self, "modulate:a", 1.0, 5.0)
await tween.finished
func stop() -> void:
print_debug("credits_roll.gd: hide()")
var tween := create_tween()
tween.tween_property(self, "modulate:a", 0.0, 2.0)
await tween.finished
playing = false
visible = false

View File

@ -0,0 +1 @@
uid://cky57x8selv1h

View File

@ -0,0 +1,315 @@
[gd_scene load_steps=16 format=3 uid="uid://cbpcjk1qr2iiu"]
[ext_resource type="Texture2D" uid="uid://d3ewjumh0b0g6" path="res://ui/menu_main/logo.png" id="1_05cuh"]
[ext_resource type="Script" uid="uid://cky57x8selv1h" path="res://ui/credits_roll/credits_roll.gd" id="1_jv284"]
[ext_resource type="Script" uid="uid://dbap0gqox0ty1" path="res://addons/markdownlabel/markdownlabel.gd" id="2_jv284"]
[ext_resource type="Script" uid="uid://dcx7crs23nf4" path="res://addons/markdownlabel/header_formats/h1_format.gd" id="3_jl7ew"]
[ext_resource type="Script" uid="uid://d0sin64i4v3op" path="res://addons/markdownlabel/header_formats/h2_format.gd" id="4_upwkx"]
[ext_resource type="Script" uid="uid://dlok0dv1tq2bf" path="res://addons/markdownlabel/header_formats/h3_format.gd" id="5_dtwdr"]
[ext_resource type="Script" uid="uid://bayuh2vafablg" path="res://addons/markdownlabel/header_formats/h4_format.gd" id="6_n5lj3"]
[ext_resource type="Script" uid="uid://dfr1w7u3jgni3" path="res://addons/markdownlabel/header_formats/h5_format.gd" id="7_88oss"]
[ext_resource type="Script" uid="uid://bsi6dexoofpe6" path="res://addons/markdownlabel/header_formats/h6_format.gd" id="8_dtsm5"]
[sub_resource type="Resource" id="Resource_0odxb"]
resource_local_to_scene = true
script = ExtResource("3_jl7ew")
[sub_resource type="Resource" id="Resource_lswn8"]
resource_local_to_scene = true
script = ExtResource("4_upwkx")
[sub_resource type="Resource" id="Resource_a6jrf"]
resource_local_to_scene = true
script = ExtResource("5_dtwdr")
[sub_resource type="Resource" id="Resource_xuqvo"]
resource_local_to_scene = true
script = ExtResource("6_n5lj3")
[sub_resource type="Resource" id="Resource_qsp4k"]
resource_local_to_scene = true
script = ExtResource("7_88oss")
[sub_resource type="Resource" id="Resource_kq58d"]
resource_local_to_scene = true
script = ExtResource("8_dtsm5")
[node name="CreditsRoll" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_jv284")
[node name="Background" type="Panel" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="Handle" type="Control" parent="."]
layout_mode = 1
anchors_preset = 12
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 0
[node name="Credits" type="VBoxContainer" parent="Handle"]
layout_mode = 1
anchors_preset = 10
anchor_right = 1.0
offset_bottom = 3640.0
grow_horizontal = 2
[node name="Logo" type="TextureRect" parent="Handle/Credits"]
custom_minimum_size = Vector2(512, 512)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
texture = ExtResource("1_05cuh")
expand_mode = 1
[node name="Markdown" type="RichTextLabel" parent="Handle/Credits"]
layout_mode = 2
bbcode_enabled = true
text = "[center]
[font_size=34]is[/font_size]
[font_size=45]made by betalars[/font_size]
published by
[font_size=34]Purple Sloth Game Collective[/font_size]
produced with the help of
[font_size=34]Vu Dieu Linh @ polynormal games[/font_size]
[font_size=28]Contributers[/font_size]
[font_size=22]Programming[/font_size]
Adrian Schmid
Nek0
AprilThePink
and somebody that I used to know
[font_size=22]Voice Acting[/font_size]
Jas Arianna
Newt
[font_size=22]Soundtrack[/font_size]
STTLE
[font_size=28]Frame of Mind was created in Godot 4.[/font_size]
[font_size=22]Special thanks to my friends and allies:[/font_size]
caesey, Nase, Jenny, map-c, Svenja, Milo, Francis, Christoph, Johanna, Friedrich Lüder
[font_size=22]Thanks to the Contributers of:[/font_size]
blender
inkscape
ghostwriter
hedgedoc
gitea
Godot Steam
MarkdownLabel
Jovian-NixOS
LibreOffice
[font_size=22]Thanks to these Community Members[/font_size]
Maxi, iFire
[font_size=34]Creative Commons Assets[/font_size]
[font_size=28]3D-Assets[/font_size]
- [url=https://sketchfab.com/3d-models/boy-room-19035fc846034003b76e2914ba6dd7a6]Antique Dresser[/url] by [url=https://sketchfab.com/DarrenMcnerney3D]Darren McNerney 3D[/url] CC-BY
- [url=https://skfb.ly/ow6TJ]Wardrobe - Low poly[/url] by [url=https://sketchfab.com/ixMkc1]ixMkc1[/url] CC-BY
- [url=https://sketchfab.com/3d-models/simple-bean-bag-64d111cec3d842f09cbb8c68b1e49c8d]Simple Bean Bag[/url] by [url=https://sketchfab.com/AleixoAlonso]AleixoAlonso[/url] CC-BY
- [url=https://skfb.ly/ouu9C]Cobwebs[/url] by [url=https://sketchfab.com/bumstrum]DJMaesen[/url] CC-BY
- [url=https://skfb.ly/6RVFt]Laptop[/url] by [url=https://sketchfab.com/Aullwen]Aullwen[/url] CC-BY
- [url=https://skfb.ly/oqZnY]Home Speaker Bar[/url] by [url=https://sketchfab.com/re1monsen]re1monsen[/url] CC-BY
- [url=https://sketchfab.com/3d-models/designer-storage-box-2-db1275e988484908afcf44d0487aed69]Designer Storage Box 2[/url] by [url=https://sketchfab.com/Raffey]Raphael Escamilla[/url] CC-BY
- [url=https://sketchfab.com/3d-models/carpet-fluffy-435d64ef1e36457790000c6b6aa4b8b2]Carpet Fluffy[/url] by [url=https://sketchfab.com/polybean]polybEAN[/url] CC-BY
- [url=https://sketchfab.com/3d-models/backpacks-blockout-homework-e80686790d884b21b52f2308e51af9c6]backpacks blockout homework[/url] by [url=https://sketchfab.com/Fellm]Fellming[/url] CC-BY
- [url=https://sketchfab.com/3d-models/restaurant-kitchen-set-part-1-129dd2f84879477ea261b422d21491f4]Restaurant Kitchen Set[/url] by [url=https://sketchfab.com/soidev]soidev[/url], CC-BY
- [url=https://sketchfab.com/nkilstrup/collections/scandinavian-kitchen-kit-7abc790a7c744579801101d9c3655f37]Scandinavian Kitchen Kit[/url], [url=https://sketchfab.com/3d-models/house-plants-1347ac536bea469281cc07d68e076654]House Plants[/url] and [url=https://sketchfab.com/3d-models/living-room-props-cee72686f7534fdea99ab04d6177df22]Living Room Props[/url] by [url=https://sketchfab.com/nkilstrup]Nicolai Kilstrup[/url], CC-BY
- [url=https://sketchfab.com/3d-models/wooden-kitchen-3c6f8352025540feb8d7019485bf20e4]Wooden kitchen[/url] by [url=https://sketchfab.com/miha.pop12]Mieshu[/url], CC-BY
- [url=https://sketchfab.com/3d-models/baked-goods-d1ae09e3cb8343bc8790b15928452906]Baked Goods[/url] by [url=https://sketchfab.com/rigsters]rigsters[/url], CC-BY
- [url=https://polyhaven.com/a/CoffeeTable_01]Coffee Table 01[/url] by [url=https://polyhaven.com/all?a=Fernando%20Quinn]Fernando Quinn[/url], CC0
- [url=https://polyhaven.com/a/side_table_01]Side Table 01[/url] and [url=https://polyhaven.com/a/wooden_display_shelves_01]Wooden Display Shelves 01[/url] by [url=https://www.artstation.com/jamesray]James Ray Cock[/url], CC0
- [url=https://polyhaven.com/a/throw_pillows_01]Throw Pillows 01[/url] by [url=https://www.artstation.com/serhiikhromov]Serhii Khromov[/url], CC0
- [url=https://polyhaven.com/a/gaming_console]Gaming Console[/url] by [url=https://www.artstation.com/sean_buckley98]Sean Buckley[/url], CC0
- [url=https://polyhaven.com/a/painted_wooden_stool]Painted Wooden Stool[/url] by [url=https://www.artstation.com/k_sannikov]Kirill Sannikov[/url], CC0
[font_size=28]Textures from polyhaven.com[/font_size]
[ul][url=https://polyhaven.com/a/rough_wood]Rough Wood[/url] by [url=https://polyhaven.com/all?a=Rob%20Tuytel]Rob Tuytel[/url] CC-0
[url=https://polyhaven.com/a/brick_wall_001]Brick Wall 001[/url] and [url=https://polyhaven.com/a/smooth_concrete_floor]Smooth Concrete Floor[/url] by [url=https://polyhaven.com/all?a=Dimitrios%20Savva]Dimitrios Savva[/url]
[url=https://polyhaven.com/a/clay_floor_001]Clay Floor 001[/url] by [url=https://polyhaven.com/all?a=Dimitrios%20Savva]Dimitrios Savva[/url] and [url=https://www.artstation.com/rico_b3d]Rico Cilliers[/url]
[/ul]
[font_size=28]Textures from AmbientCG.com[/font_size]
- [url=https://ambientcg.com/view?id=Fabric030]Fabric 030[/url]
- [url=https://ambientcg.com/view?id=WoodSubstance009]Wood Substance 009[/url]
- [url=https://ambientcg.com/view?id=Wicker010B]Wicker 010 B[/url]
- [url=https://ambientcg.com/view?id=Terrazzo019L]Terrazzo 019 L[/url]
[font_size=28]Wikimedia Commons[/font_size]
- [url=https://commons.wikimedia.org/wiki/File:Geb%C3%A4ude_in_Darmstadt.jpg]Gebäude in Darmstadt[/url] by [url=https://commons.wikimedia.org/wiki/User:Neq00]Neq00[/url] CC-BY-SA 4.0
[font_size=28]Illustrations[/font_size]
+ [url=https://www.deviantart.com/fernand0fc/art/Corporate-level-bodyguard-803579124]Corporate level bodyguard[/url], [url=https://www.deviantart.com/fernand0fc/art/Into-the-glowing-sea-834238466]Into the glowing sea[/url] and [url=https://www.deviantart.com/fernand0fc/art/Anti-Hero-555054767]Anti-Hero[/url] by [url=https://www.deviantart.com/fernand0fc]Fernand0FC[/url], CC-BY-3.0
+ [url=https://unknown-horizons.org/]Unknown Horizons[/url] Artwork, provided by a [url=https://github.com/unknown-horizons/unknown-horizons.github.io/blob/source/LICENSE]GPL-2.0 license[/url]
+ [url=https://rich.itch.io/strangeadventures]Strange Adventures in Infinite Space[/url] by [url=https://rich.itch.io]Digital Eel[/url], CC-BY-NC 4.0
+ [url=https://github.com/BlindMindStudios/StarRuler2-Source]Star Ruler 2[/url], CC-BY-NC 2.0
+ [url=https://megaglest.org/]MegaGlest[/url], GPL
+ [url= ]Splash Screen Neo[/url] by [url=https://inkscape.org/de/~MuhamadAliAkbar/]Muhamad Ali Akbar[/url], CC-BY-SA
+ [url=https://ohmygit.org/]Oh My Git[/url] by [url=https://bleeptrack.de/]bleeptrack[/url] and [url=https://morr.cc/]blinry[/url], Blue Oak Model License
+ [url=]Ghostwriter[/url] by kde
[font_size=34]Music[/font_size]
- [url=https://azurestudios.bandcamp.com/album/foundations-i-24bit]Foundations I by Azure Studios[/url], CC-BY 3.0
- Infinite Skies from [url=https://alkakrab.itch.io/free-10-rpg-game-ambient-tracks-music-pack-no-copyright]10 Ambient RPG Tracks[/url] by [url=https://alkakrab.itch.io/]alkakrab[/url] [i]\\\"Absolutely Free For Commercial use.\\\"[/i]
[font_size=28]Sounds Effects[/font_size]
- [url=https://freesound.org/people/InspectorJ/sounds/346641/]Rain on Windows, Interior[/url] by [url=https://freesound.org/people/InspectorJ/]InspectorJ[/url] CC-BY 3.0
- [url=https://freesound.org/people/MrAuralization/sounds/241294/]Rain and thunder[/url] by [url=https://freesound.org/people/MrAuralization/]MrAuralization[/url] CC-BY 3.0
- [url=https://freesound.org/people/BlueDelta/sounds/446753/]Heavy Thunder Strike - no Rain - QUADRO[/url] by [url=https://freesound.org/people/BlueDelta/]BlueDelta[/url] CC-BY 3.0
[font_size=34]Fonts all OFL[/font_size]
- Nanum Fonts by [url=https://fonts.google.com/?query=Sandoll]Sandoll[/url]
- Atkinson Hyperlegible by Braille Institute, Applied Design Works, Elliott Scott, Megan Eiswerth, Linus Boman, Theodore Petrosky\"\"
[center]"
fit_content = true
script = ExtResource("2_jv284")
markdown_text = "[center]
## is
#made by betalars
published by
## Purple Sloth Game Collective
produced with the help of
## Vu Dieu Linh @ polynormal games
### Contributers
#### Programming
Adrian Schmid
Nek0
AprilThePink
and somebody that I used to know
#### Voice Acting
Jas Arianna
Newt
#### Soundtrack
STTLE
### Frame of Mind was created in Godot 4.
#### Special thanks to my friends and allies:
caesey, Nase, Jenny, map-c, Svenja, Milo, Francis, Christoph, Johanna, Friedrich Lüder
#### Thanks to the Contributers of:
blender
inkscape
ghostwriter
hedgedoc
gitea
Godot Steam
MarkdownLabel
Jovian-NixOS
LibreOffice
#### Thanks to these Community Members
Maxi, iFire
## Creative Commons Assets
### 3D-Assets
- [Antique Dresser](https://sketchfab.com/3d-models/boy-room-19035fc846034003b76e2914ba6dd7a6) by [Darren McNerney 3D](https://sketchfab.com/DarrenMcnerney3D) CC-BY
- [Wardrobe - Low poly](https://skfb.ly/ow6TJ) by [ixMkc1](https://sketchfab.com/ixMkc1) CC-BY
- [Simple Bean Bag](https://sketchfab.com/3d-models/simple-bean-bag-64d111cec3d842f09cbb8c68b1e49c8d) by [AleixoAlonso](https://sketchfab.com/AleixoAlonso) CC-BY
- [Cobwebs](https://skfb.ly/ouu9C) by [DJMaesen](https://sketchfab.com/bumstrum) CC-BY
- [Laptop](https://skfb.ly/6RVFt) by [Aullwen](https://sketchfab.com/Aullwen) CC-BY
- [Home Speaker Bar](https://skfb.ly/oqZnY) by [re1monsen](https://sketchfab.com/re1monsen) CC-BY
- [Designer Storage Box 2](https://sketchfab.com/3d-models/designer-storage-box-2-db1275e988484908afcf44d0487aed69) by [Raphael Escamilla](https://sketchfab.com/Raffey) CC-BY
- [Carpet Fluffy](https://sketchfab.com/3d-models/carpet-fluffy-435d64ef1e36457790000c6b6aa4b8b2) by [polybEAN](https://sketchfab.com/polybean) CC-BY
- [backpacks blockout homework](https://sketchfab.com/3d-models/backpacks-blockout-homework-e80686790d884b21b52f2308e51af9c6) by [Fellming](https://sketchfab.com/Fellm) CC-BY
- [Restaurant Kitchen Set](https://sketchfab.com/3d-models/restaurant-kitchen-set-part-1-129dd2f84879477ea261b422d21491f4) by [soidev](https://sketchfab.com/soidev), CC-BY
- [Scandinavian Kitchen Kit](https://sketchfab.com/nkilstrup/collections/scandinavian-kitchen-kit-7abc790a7c744579801101d9c3655f37), [House Plants](https://sketchfab.com/3d-models/house-plants-1347ac536bea469281cc07d68e076654) and [Living Room Props](https://sketchfab.com/3d-models/living-room-props-cee72686f7534fdea99ab04d6177df22) by [Nicolai Kilstrup](https://sketchfab.com/nkilstrup), CC-BY
- [Wooden kitchen](https://sketchfab.com/3d-models/wooden-kitchen-3c6f8352025540feb8d7019485bf20e4) by [Mieshu](https://sketchfab.com/miha.pop12), CC-BY
- [Baked Goods](https://sketchfab.com/3d-models/baked-goods-d1ae09e3cb8343bc8790b15928452906) by [rigsters](https://sketchfab.com/rigsters), CC-BY
- [Coffee Table 01](https://polyhaven.com/a/CoffeeTable_01) by [Fernando Quinn](https://polyhaven.com/all?a=Fernando%20Quinn), CC0
- [Side Table 01](https://polyhaven.com/a/side_table_01) and [Wooden Display Shelves 01](https://polyhaven.com/a/wooden_display_shelves_01) by [James Ray Cock](https://www.artstation.com/jamesray), CC0
- [Throw Pillows 01](https://polyhaven.com/a/throw_pillows_01) by [Serhii Khromov](https://www.artstation.com/serhiikhromov), CC0
- [Gaming Console](https://polyhaven.com/a/gaming_console) by [Sean Buckley](https://www.artstation.com/sean_buckley98), CC0
- [Painted Wooden Stool](https://polyhaven.com/a/painted_wooden_stool) by [Kirill Sannikov](https://www.artstation.com/k_sannikov), CC0
### Textures from polyhaven.com
- [Rough Wood](https://polyhaven.com/a/rough_wood) by [Rob Tuytel](https://polyhaven.com/all?a=Rob%20Tuytel) CC-0
- [Brick Wall 001](https://polyhaven.com/a/brick_wall_001) and [Smooth Concrete Floor](https://polyhaven.com/a/smooth_concrete_floor) by [Dimitrios Savva](https://polyhaven.com/all?a=Dimitrios%20Savva)
- [Clay Floor 001](https://polyhaven.com/a/clay_floor_001) by [Dimitrios Savva](https://polyhaven.com/all?a=Dimitrios%20Savva) and [Rico Cilliers](https://www.artstation.com/rico_b3d)
### Textures from AmbientCG.com
- [Fabric 030](https://ambientcg.com/view?id=Fabric030)
- [Wood Substance 009](https://ambientcg.com/view?id=WoodSubstance009)
- [Wicker 010 B](https://ambientcg.com/view?id=Wicker010B)
- [Terrazzo 019 L](https://ambientcg.com/view?id=Terrazzo019L)
### Wikimedia Commons
- [Gebäude in Darmstadt](https://commons.wikimedia.org/wiki/File:Geb%C3%A4ude_in_Darmstadt.jpg) by [Neq00](https://commons.wikimedia.org/wiki/User:Neq00) CC-BY-SA 4.0
### Illustrations
+ [Corporate level bodyguard](https://www.deviantart.com/fernand0fc/art/Corporate-level-bodyguard-803579124), [Into the glowing sea](https://www.deviantart.com/fernand0fc/art/Into-the-glowing-sea-834238466) and [Anti-Hero](https://www.deviantart.com/fernand0fc/art/Anti-Hero-555054767) by [Fernand0FC](https://www.deviantart.com/fernand0fc), CC-BY-3.0
+ [Unknown Horizons](https://unknown-horizons.org/) Artwork, provided by a [GPL-2.0 license](https://github.com/unknown-horizons/unknown-horizons.github.io/blob/source/LICENSE)
+ [Strange Adventures in Infinite Space](https://rich.itch.io/strangeadventures) by [Digital Eel](https://rich.itch.io), CC-BY-NC 4.0
+ [Star Ruler 2](https://github.com/BlindMindStudios/StarRuler2-Source), CC-BY-NC 2.0
+ [MegaGlest](https://megaglest.org/), GPL
+ [Splash Screen Neo]( ) by [Muhamad Ali Akbar](https://inkscape.org/de/~MuhamadAliAkbar/), CC-BY-SA
+ [Oh My Git](https://ohmygit.org/) by [bleeptrack](https://bleeptrack.de/) and [blinry](https://morr.cc/), Blue Oak Model License
+ [Ghostwriter]() by kde
## Music
- [Foundations I by Azure Studios](https://azurestudios.bandcamp.com/album/foundations-i-24bit), CC-BY 3.0
- Infinite Skies from [10 Ambient RPG Tracks](https://alkakrab.itch.io/free-10-rpg-game-ambient-tracks-music-pack-no-copyright) by [alkakrab](https://alkakrab.itch.io/) *\\\\\\\"Absolutely Free For Commercial use.\\\\\\\"*
### Sounds Effects
- [Rain on Windows, Interior](https://freesound.org/people/InspectorJ/sounds/346641/) by [InspectorJ](https://freesound.org/people/InspectorJ/) CC-BY 3.0
- [Rain and thunder](https://freesound.org/people/MrAuralization/sounds/241294/) by [MrAuralization](https://freesound.org/people/MrAuralization/) CC-BY 3.0
- [Heavy Thunder Strike - no Rain - QUADRO](https://freesound.org/people/BlueDelta/sounds/446753/) by [BlueDelta](https://freesound.org/people/BlueDelta/) CC-BY 3.0
## Fonts all OFL
- Nanum Fonts by [Sandoll](https://fonts.google.com/?query=Sandoll)
- Atkinson Hyperlegible by Braille Institute, Applied Design Works, Elliott Scott, Megan Eiswerth, Linus Boman, Theodore Petrosky\\\"\"
[center]"
h1 = SubResource("Resource_0odxb")
h2 = SubResource("Resource_lswn8")
h3 = SubResource("Resource_a6jrf")
h4 = SubResource("Resource_xuqvo")
h5 = SubResource("Resource_qsp4k")
h6 = SubResource("Resource_kq58d")

20
src/ui/curtain/curtain.gd Normal file
View File

@ -0,0 +1,20 @@
extends Panel
class_name Curtain
func _ready() -> void:
print_debug("curtain.gd: ready()")
show()
func show() -> void:
visible = true
print_debug("curtain.gd: show()")
var tween := create_tween()
tween.tween_property(self, "modulate:a", 1.0, 2.0)
await tween.finished
func hide() -> void:
print_debug("curtain.gd: hide()")
var tween := create_tween()
tween.tween_property(self, "modulate:a", 0.0, 2.0)
await tween.finished
visible = false

View File

@ -0,0 +1 @@
uid://cg7sc173lvchp

View File

@ -0,0 +1,12 @@
[gd_scene load_steps=2 format=3 uid="uid://cml5liawokdch"]
[ext_resource type="Script" uid="uid://cg7sc173lvchp" path="res://ui/curtain/curtain.gd" id="1_8qa50"]
[node name="Curtain" type="Panel"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
script = ExtResource("1_8qa50")

Binary file not shown.

View File

@ -0,0 +1,65 @@
[gd_resource type="Animation" format=3 uid="uid://bmfwcyr136isp"]
[resource]
resource_name = "loading_done"
length = 1.5
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("mask/frame/deco:rotation")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 1.4),
"transitions": PackedFloat32Array(2.2974, 1),
"update": 0,
"values": [-0.261799, 1.5708]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath(".:modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.933333, 1.36667),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("LoadingLabel:visible")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("LoadingLabel:modulate")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(1.1666666, 1.5),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("LoadingLabel:position")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0.93333334, 1.5),
"transitions": PackedFloat32Array(1.6788809, 1),
"update": 0,
"values": [Vector2(170, -37), Vector2(100, -37)]
}

Binary file not shown.

View File

@ -0,0 +1,102 @@
[gd_resource type="Animation" format=3 uid="uid://duec6i017lil8"]
[resource]
resource_name = "loading_game"
length = 2.0
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("mask:modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.166667, 1.76667),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1), Color(1, 1, 1, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("mask:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.0333333, 1.76667, 2),
"transitions": PackedFloat32Array(0.406126, 1, 1),
"update": 0,
"values": [1.5708, 0.261799, 0.0]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("mask/frame/deco:rotation")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.0333368, 1.76667, 2),
"transitions": PackedFloat32Array(0.406126, 1, 1),
"update": 0,
"values": [-1.5708, -0.261799, 0.0]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("mask/frame/deco:modulate")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.366667, 1.66667),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../../MainMenu:modulate")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("LoadingLabel:visible")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("LoadingLabel:modulate")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0.06666672, 1.1666666),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("LoadingLabel:position")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0.93333334),
"transitions": PackedFloat32Array(1.6788809),
"update": 0,
"values": [Vector2(170, -37)]
}

View File

@ -0,0 +1,76 @@
[gd_scene load_steps=8 format=3 uid="uid://d38f0a333kki1"]
[ext_resource type="Texture2D" uid="uid://d031kxe5m4ihh" path="res://import/interface-elements/loading_rect_clip.png" id="1_dbd3p"]
[ext_resource type="Texture2D" uid="uid://bqf82f8dk4yun" path="res://import/interface-elements/loading_rect_frame.png" id="2_6oitr"]
[ext_resource type="Texture2D" uid="uid://dpftqdvtrkioh" path="res://import/interface-elements/loading_rect_deco.png" id="3_jqdbn"]
[ext_resource type="Animation" uid="uid://bmfwcyr136isp" path="res://ui/loading/anim_loading_done.tres" id="5_aeyqy"]
[ext_resource type="Animation" uid="uid://duec6i017lil8" path="res://ui/loading/anim_loading_game.tres" id="6_s70xq"]
[sub_resource type="GDScript" id="GDScript_cegan"]
script/source = "extends Label
@export var animation_speed: float = 0.2
var _base_text: String
func _ready() -> void:
_base_text = text
var _accumulate_delta: float = 0
var _frame: int = 0
func _process(delta: float) -> void:
_accumulate_delta += delta
if _accumulate_delta > animation_speed:
_frame += 1
_accumulate_delta = fmod(_accumulate_delta, animation_speed)
var dots: String
match _frame % 4:
1: dots = \".\"
2: dots = \"..\"
3: dots = \"...\"
_: dots = \"\"
text = \"%s %s\" % [TranslationServer.translate(_base_text), dots]
"
[sub_resource type="AnimationLibrary" id="AnimationLibrary_jqdbn"]
_data = {
&"anim_loading_done": ExtResource("5_aeyqy"),
&"anim_loading_game": ExtResource("6_s70xq")
}
[node name="Loading" type="Control"]
layout_mode = 3
anchors_preset = 2
anchor_top = 1.0
anchor_bottom = 1.0
grow_vertical = 0
[node name="mask" type="Sprite2D" parent="."]
modulate = Color(1, 1, 1, 0)
clip_children = 1
position = Vector2(101.4607, -58.539307)
texture = ExtResource("1_dbd3p")
[node name="frame" type="Sprite2D" parent="mask"]
texture = ExtResource("2_6oitr")
[node name="deco" type="Sprite2D" parent="mask/frame"]
modulate = Color(1, 1, 1, 0)
rotation = -0.261799
texture = ExtResource("3_jqdbn")
[node name="LoadingLabel" type="Label" parent="."]
layout_mode = 0
offset_left = 170.0
offset_top = -37.0
offset_right = 310.00003
offset_bottom = 9.0
text = "loading"
script = SubResource("GDScript_cegan")
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
unique_name_in_owner = true
libraries = {
&"LoadingSpinner": SubResource("AnimationLibrary_jqdbn")
}
autoplay = "init"

View File

@ -26,8 +26,6 @@ func execute() -> String:
continue_button.disabled = false
new_game_button.theme_type_variation = ""
load_game_button.disabled = not save_game_handle.has_existing_saves()
#save_game_handle.visible = save_game_handle.has_existing_saves()
_activate()
@ -44,7 +42,6 @@ func _ready() -> void:
continue_button.pressed.connect(_start_game)
new_game_button.pressed.connect(_new_game)
load_game_button.pressed.connect(_load_save_game)
load_game_button.disabled = not save_game_handle.has_existing_saves()
settings_button.pressed.connect(settings_popup.show_settings)
credits_button.pressed.connect(_choose.bind("credits")) #FIXME: Needs some other encoding, like path
quit_button.pressed.connect(get_tree().quit)
@ -73,6 +70,8 @@ func _choose(choice: String) -> void:
func _activate() -> void:
load_game_button.disabled = not save_game_handle.has_existing_saves()
for child: Control in $PanelContainer.get_children():
child.focus_mode = Control.FOCUS_ALL
child.modulate = Color.WHITE

View File

@ -23,7 +23,7 @@ theme = ExtResource("1_2dg4n")
theme_override_styles/panel = SubResource("StyleBoxEmpty_njt06")
script = ExtResource("2_rm576")
[node name="TextureRect" type="TextureRect" parent="."]
[node name="Logo" type="TextureRect" parent="."]
layout_mode = 1
anchors_preset = 1
anchor_left = 1.0
@ -36,7 +36,7 @@ grow_horizontal = 0
scale = Vector2(0.4, 0.4)
texture = ExtResource("3_cm266")
[node name="TextureRect2" type="TextureRect" parent="."]
[node name="LogoType" type="TextureRect" parent="."]
layout_mode = 1
anchors_preset = 1
anchor_left = 1.0
@ -121,6 +121,7 @@ script = ExtResource("4_iotk1")
metadata/_custom_type_script = "uid://cxton1pffwxk4"
[node name="SettingsContainer" type="CenterContainer" parent="."]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
@ -135,23 +136,5 @@ layout_mode = 2
[node name="SaveGameList" parent="." instance=ExtResource("10_vhfai")]
unique_name_in_owner = true
layout_mode = 1
[node name="CenterContainer" type="CenterContainer" parent="."]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="ScrollContainer" type="ScrollContainer" parent="CenterContainer"]
clip_contents = false
custom_minimum_size = Vector2(0, 900)
layout_mode = 2
horizontal_scroll_mode = 0
[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer/ScrollContainer"]
layout_mode = 2
theme_override_constants/separation = 0

View File

@ -1,4 +1,5 @@
class_name SaveGameList extends Control
class_name SaveGameList
extends Control
signal _picked(save_game: SaveGame)
@ -73,7 +74,8 @@ func _rebuild_buttons() -> void:
func _on_game_picked(id: int) -> void:
_picked.emit(saves[id])
hide()
#_picked.emit(saves[id])
func get_most_recent_save() -> SaveGame: