draft of transition sequence

This commit is contained in:
betalars 2025-10-29 22:48:41 +01:00
parent 93d71f040a
commit 0fe6f08e88
9 changed files with 737 additions and 57 deletions

File diff suppressed because one or more lines are too long

View File

@ -2,3 +2,158 @@ extends RoomTemplate
@export var all_stations: Dictionary[Station.id, Station] @export var all_stations: Dictionary[Station.id, Station]
@export var all_lines: Dictionary[TrainLine.id, TrainLine] @export var all_lines: Dictionary[TrainLine.id, TrainLine]
func _ready() -> void:
%LeftDetection.body_entered.connect(on_left_train_enter)
%RightDetection.body_entered.connect(on_right_train_enter)
%LeftDetection.body_exited.connect(on_left_train_exit)
%RightDetection.body_exited.connect(on_right_train_exit)
func start_room():
State.pass_stage_to(%PlayerController)
on_first_station()
var left_first_station: bool = false
func on_first_station():
Scenes.enabled_sequences += 1 << Scenes.id.ADULT_DND
await get_tree().create_timer(5.0).timeout
%ShedulePlayer_R.play("train_arriving")
await get_tree().create_timer(12.0).timeout
if left_first_station: return
%ShedulePlayer_R.play("train_leaving")
await get_tree().create_timer(3.0).timeout
%RightLabel.text = "do not board"
await get_tree().create_timer(6.0).timeout
%ShedulePlayer_L.play("train_arriving")
var on_second_platform: bool = false
func on_first_transition(_is_left: bool = false):
%StationPlayer.play("first_transition")
await get_tree().create_timer(1.0).timeout
on_second_platform = true
func on_second_transition():
%StationPlayer.play("second_transition")
func on_third_transition():
%StationPlayer.play("third_transition")
func pull_save_state(save: SaveGame) -> void:
save.sequences_enabled = Scenes.enabled_sequences
func prepare_transition():
pass
func unload():
pass
func on_left_train_enter(_body):
if not left_first_station:
left_first_station = true
await get_tree().create_timer(2.0).timeout
%Train2.get_child(0).door_open = false
on_first_transition(true)
await get_tree().create_timer(5.0).timeout
Scenes.enabled_sequences += 1 << Scenes.id.ADULD_VOLUNTARY
%SubwayMap.current_station = Scenes.id.ADULD_VOLUNTARY
%RightLabel.text = "U3 Gesundquell \n via Rosenthal Hospital"
await get_tree().create_timer(5.0).timeout
Scenes.enabled_sequences += 1 << Scenes.id.ADULD_CHRISTMAS
%SubwayMap.current_station = Scenes.id.ADULD_CHRISTMAS
await get_tree().create_timer(5.0).timeout
%Train2.get_child(0).door_open = true
await get_tree().create_timer(5.0).timeout
if not changeover:
%Train2.get_child(0).door_open = false
on_second_transition()
await get_tree().create_timer(5.0).timeout
Scenes.enabled_sequences += 1 << Scenes.id.ADULT_UNI
%SubwayMap.current_station = Scenes.id.ADULT_UNI
%RightLabel.text = "do not board"
%LeftLabel.text = "do not board"
on_final = true
await get_tree().create_timer(5.0).timeout
%Train2.get_child(0).door_open = true
else:
%ShedulePlayer_L.play("train_leaving")
%LeftLabel.text = "do not board"
return
if changeover:
%ShedulePlayer_R.play("train_leaving")
await get_tree().create_timer(2.0).timeout
%Train2.get_child(0).door_open = false
on_second_transition()
await get_tree().create_timer(5.0).timeout
Scenes.enabled_sequences += 1 << Scenes.id.ADULT_THERAPY
%SubwayMap.current_station = Scenes.id.ADULT_THERAPY
%RightLabel.text = "do not board"
%LeftLabel.text = "do not board"
on_final = true
await get_tree().create_timer(5.0).timeout
%Train2.get_child(0).door_open = true
var on_final: bool = false
var on_direct_path: bool = false
func on_right_train_enter(_body):
if not left_first_station:
on_direct_path = true
%Train.get_child(0).door_open = false
await get_tree().create_timer(2.0).timeout
left_first_station = true
on_first_transition(false)
await get_tree().create_timer(5.0).timeout
Scenes.enabled_sequences += 1 << Scenes.id.ADULT_EATING
%SubwayMap.current_station = Scenes.id.ADULT_EATING
%LeftLabel.text = "U8 Gesundquell \n via Rosenthal Hospital"
await get_tree().create_timer(5.0).timeout
Scenes.enabled_sequences += 1 << Scenes.id.ADULT_UNI
%SubwayMap.current_station = Scenes.id.ADULT_UNI
await get_tree().create_timer(5.0).timeout
%Train.get_child(0).door_open = true
await get_tree().create_timer(5.0).timeout
if not changeover:
%Train.get_child(0).door_open = false
on_second_transition()
await get_tree().create_timer(5.0).timeout
Scenes.enabled_sequences += 1 << Scenes.id.ADULT_BURNOUT
%SubwayMap.current_station = Scenes.id.ADULT_BURNOUT
%RightLabel.text = "do not board"
%LeftLabel.text = "do not board"
on_final = true
await get_tree().create_timer(5.0).timeout
%Train.get_child(0).door_open = true
else:
%ShedulePlayer_R.play("train_leaving")
%RightLabel.text = "do not board"
return
if changeover:
on_second_transition()
if on_direct_path: %ShedulePlayer_L.play("train_leaving")
await get_tree().create_timer(5.0).timeout
Scenes.enabled_sequences += 1 << Scenes.id.ADULD_CHRISTMAS
%SubwayMap.current_station = Scenes.id.ADULD_CHRISTMAS
await get_tree().create_timer(2.0).timeout
%Train2.get_child(0).door_open = false
%RightLabel.text = "do not board"
%LeftLabel.text = "do not board"
on_final = true
await get_tree().create_timer(5.0).timeout
%Train.get_child(0).door_open = true
var changeover: bool = false
func on_left_train_exit(_body):
if on_second_platform and not on_final:
changeover = true
%ShedulePlayer_R.play("train_arriving")
func on_right_train_exit(_body):
if on_second_platform and not on_final:
changeover = true
%ShedulePlayer_L.play("train_arriving")
await get_tree().create_timer(10).timeout
%RightLabel.text = "U1 weissnicht \n via Saint-Exupery Sq."
await get_tree().create_timer(5).timeout
%ShedulePlayer_R.play("train_arriving")

View File

@ -50,7 +50,6 @@ func try_reveal(for_player: Player) -> bool:
call_deferred("wait_for_ui_exit", for_player) call_deferred("wait_for_ui_exit", for_player)
return revealed return revealed
func wait_for_ui_exit(for_player: Player): func wait_for_ui_exit(for_player: Player):
await for_player.ui_exited await for_player.ui_exited
collapse() collapse()

View File

@ -23,7 +23,7 @@ func start_room():
State.queue_for_stage(%PlayerController) State.queue_for_stage(%PlayerController)
else: else:
State.pass_stage_to(%PlayerController) State.pass_stage_to(%PlayerController)
%LightAnimation.lights_on() %LightAnimation.lights_on()
func get_ready(): func get_ready():
@ -31,7 +31,7 @@ func get_ready():
$sfx/distant_rain.play() $sfx/distant_rain.play()
$"sfx/rain on window".play() $"sfx/rain on window".play()
await get_tree().create_timer(0.1).timeout await get_tree().create_timer(0.1).timeout
$logic/UI/board.hide() %Board.hide()
func _ready(): func _ready():
Scenes.scene_finished.connect(_on_scene_finished) Scenes.scene_finished.connect(_on_scene_finished)
@ -50,6 +50,8 @@ func _on_scene_finished(id: int, _repeat:bool):
func prepare_transition(): func prepare_transition():
save_room() save_room()
$AnimationPlayer.play("conserve_performance") $AnimationPlayer.play("conserve_performance")
await $AnimationPlayer.animation_finished
unload()
func unload(): func unload():
$visuals.queue_free() $visuals.queue_free()

View File

@ -21,10 +21,10 @@ var has_stage = false:
@onready var ancors: Array[Control] = [%Ancor1, %Ancor2, %Ancor3, %Ancor4] @onready var ancors: Array[Control] = [%Ancor1, %Ancor2, %Ancor3, %Ancor4]
func _ready(): func _ready():
Scenes.sign_up_for_sequence(burn_cards, Scenes.id.TRANSITION, 1) Scenes.sign_up_for_sequence(burn_cards, Scenes.id.TRANSITION, 0)
%SkipButton.pressed.connect(card_burned.emit) %SkipButton.pressed.connect(card_burned.emit)
func burn_cards(_id, _repeat): func burn_cards(_id):
var random_card_names: Array = State.active_save_game.board_state["randoms"] var random_card_names: Array = State.active_save_game.board_state["randoms"]
for card_name in random_card_names: for card_name in random_card_names:
@ -48,7 +48,8 @@ func burn_cards(_id, _repeat):
await $AnimationPlayer.animation_finished await $AnimationPlayer.animation_finished
Scenes.continue_sequence(self) #Scenes.continue_sequence(self)
Scenes.end_current_sequence()
signal card_burned signal card_burned

View File

@ -58,8 +58,10 @@ signal cards_picked(cardnames: Array[String])
# Called when the node enters the scene tree for the first time. # Called when the node enters the scene tree for the first time.
func _ready(): func _ready():
for id in range(Scenes.id.YOUTH_DRAEVEN, Scenes.id.YOUTH_JUI_JUTSU + 1): Scenes.sign_up_for_sequence(pick_cards, Scenes.id.YOUTH_DRAEVEN, 2)
Scenes.sign_up_for_sequence(pick_cards, id, 1) Scenes.sign_up_for_sequence(pick_cards, Scenes.id.YOUTH_CHILDHOOD, 1)
Scenes.sign_up_for_sequence(pick_cards, Scenes.id.YOUTH_VOICE_TRAINING, 2)
Scenes.sign_up_for_sequence(pick_cards, Scenes.id.YOUTH_JUI_JUTSU, 1)
if get_tree().root == self.get_parent(): if get_tree().root == self.get_parent():
pick_cards(3, false) pick_cards(3, false)

View File

@ -17,6 +17,7 @@ var has_stage: bool = false:
@onready var main_menu:MainMenu = %"Main Menu" @onready var main_menu:MainMenu = %"Main Menu"
@onready var pause_menu = %PauseMenu @onready var pause_menu = %PauseMenu
@onready var menu_animation: AnimationTree = %MenuAnimationTree @onready var menu_animation: AnimationTree = %MenuAnimationTree
@onready var state_machine = menu_animation["parameters/playback"]
@onready var focus_forward = %"Main Menu" @onready var focus_forward = %"Main Menu"
var current_room_id: State.rooms var current_room_id: State.rooms
@ -40,14 +41,20 @@ var currently_loading_room: String = "":
func _ready(): func _ready():
currently_loading_room = get_room_path_from_id(main_menu.save_game_handle.get_most_recent_save().current_room) currently_loading_room = get_room_path_from_id(main_menu.save_game_handle.get_most_recent_save().current_room)
main_menu.start_game.connect(load_save) main_menu.start_game.connect(load_save)
main_menu.roll_credits.connect(func(): state_machine.travel("credits_roll"))
get_tree().tree_process_mode_changed.connect(pause_mode_changed) get_tree().tree_process_mode_changed.connect(pause_mode_changed)
await get_tree().process_frame await get_tree().process_frame
State.pass_stage_to(main_menu) State.pass_stage_to(main_menu)
Scenes.scene_starting.connect(prepare_transition)
Scenes.scene_finished.connect(transition)
func _process(_delta: float) -> void: func _process(_delta: float) -> void:
if currently_loading_room != "": if currently_loading_room != "" and not await_swap:
if ResourceLoader.load_threaded_get_status(currently_loading_room) == 3: if ResourceLoader.load_threaded_get_status(currently_loading_room) == 3:
current_room = ResourceLoader.load_threaded_get(youth_room_path).instantiate() if not current_room == null:
current_room.queue_free()
current_room = ResourceLoader.load_threaded_get(currently_loading_room).instantiate()
print("add room") print("add room")
add_child(current_room) add_child(current_room)
move_child(current_room, 0) move_child(current_room, 0)
@ -137,3 +144,21 @@ func start_demo():
func pause_mode_changed(): func pause_mode_changed():
print(get_tree().paused) print(get_tree().paused)
var await_swap: bool = false
func prepare_transition(scene_id: Scenes.id, _repeat):
if scene_id == Scenes.id.TRANSITION:
#FIXME: this does not need to be part of the sequence
await(get_tree().process_frame)
current_room.prepare_transition()
await_swap = true
currently_loading_room = get_room_path_from_id(State.rooms.TRANSITION)
func transition(scene_id: Scenes.id, _repeat):
if scene_id == Scenes.id.TRANSITION:
State.reset_focus()
await_swap = false
await room_loaded
State.queue_for_stage(current_room)
Scenes.end_current_sequence()

View File

@ -304,13 +304,13 @@ tracks/0/type = "value"
tracks/0/imported = false tracks/0/imported = false
tracks/0/enabled = true tracks/0/enabled = true
tracks/0/path = NodePath("../../Main Menu:visible") tracks/0/path = NodePath("../../Main Menu:visible")
tracks/0/interp = 1 tracks/0/interp = 0
tracks/0/loop_wrap = true tracks/0/loop_wrap = true
tracks/0/keys = { tracks/0/keys = {
"times": PackedFloat32Array(0), "times": PackedFloat32Array(0.6666667, 0.9),
"transitions": PackedFloat32Array(1), "transitions": PackedFloat32Array(1, 1),
"update": 1, "update": 1,
"values": [false] "values": [true, false]
} }
tracks/1/type = "audio" tracks/1/type = "audio"
tracks/1/imported = false tracks/1/imported = false
@ -387,6 +387,18 @@ tracks/6/keys = {
"update": 0, "update": 0,
"values": [Vector2(0, 220), Vector2(0, -4134)] "values": [Vector2(0, 220), Vector2(0, -4134)]
} }
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("%Main Menu:modulate")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0, 0.63),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
}
[sub_resource type="Animation" id="Animation_lh4gu"] [sub_resource type="Animation" id="Animation_lh4gu"]
resource_name = "hide_pause_menu" resource_name = "hide_pause_menu"
@ -1133,7 +1145,7 @@ states/reveal_pause_menu/position = Vector2(783.91, -112.734)
states/start_game/node = SubResource("AnimationNodeAnimation_5umfs") states/start_game/node = SubResource("AnimationNodeAnimation_5umfs")
states/start_game/position = Vector2(698, 32) states/start_game/position = Vector2(698, 32)
transitions = ["Start", "init", SubResource("AnimationNodeStateMachineTransition_dxdg4"), "init", "loading", SubResource("AnimationNodeStateMachineTransition_0hpxy"), "loading", "loading_done", SubResource("AnimationNodeStateMachineTransition_ipapo"), "loading_done", "start_game", SubResource("AnimationNodeStateMachineTransition_0t1lp"), "start_game", "init", SubResource("AnimationNodeStateMachineTransition_66nmg"), "loading_done", "load_savegame", SubResource("AnimationNodeStateMachineTransition_6b86u"), "load_savegame", "loading_game", SubResource("AnimationNodeStateMachineTransition_y626i"), "loading_game", "start_game", SubResource("AnimationNodeStateMachineTransition_52bss"), "start_game", "credits_roll", SubResource("AnimationNodeStateMachineTransition_x8oth"), "credits_roll", "loading_done", SubResource("AnimationNodeStateMachineTransition_5ge3a"), "loading_done", "credits_roll", SubResource("AnimationNodeStateMachineTransition_44pd3"), "start_game", "reveal_pause_menu", SubResource("AnimationNodeStateMachineTransition_pc6pe"), "reveal_pause_menu", "hide_pause_menu", SubResource("AnimationNodeStateMachineTransition_dx61n"), "hide_pause_menu", "start_game", SubResource("AnimationNodeStateMachineTransition_lp1dx"), "hide_pause_menu", "init", SubResource("AnimationNodeStateMachineTransition_mqlnh")] transitions = ["Start", "init", SubResource("AnimationNodeStateMachineTransition_dxdg4"), "init", "loading", SubResource("AnimationNodeStateMachineTransition_0hpxy"), "loading", "loading_done", SubResource("AnimationNodeStateMachineTransition_ipapo"), "loading_done", "start_game", SubResource("AnimationNodeStateMachineTransition_0t1lp"), "start_game", "init", SubResource("AnimationNodeStateMachineTransition_66nmg"), "loading_done", "load_savegame", SubResource("AnimationNodeStateMachineTransition_6b86u"), "load_savegame", "loading_game", SubResource("AnimationNodeStateMachineTransition_y626i"), "loading_game", "start_game", SubResource("AnimationNodeStateMachineTransition_52bss"), "start_game", "credits_roll", SubResource("AnimationNodeStateMachineTransition_x8oth"), "credits_roll", "loading_done", SubResource("AnimationNodeStateMachineTransition_5ge3a"), "loading_done", "credits_roll", SubResource("AnimationNodeStateMachineTransition_44pd3"), "start_game", "reveal_pause_menu", SubResource("AnimationNodeStateMachineTransition_pc6pe"), "reveal_pause_menu", "hide_pause_menu", SubResource("AnimationNodeStateMachineTransition_dx61n"), "hide_pause_menu", "start_game", SubResource("AnimationNodeStateMachineTransition_lp1dx"), "hide_pause_menu", "init", SubResource("AnimationNodeStateMachineTransition_mqlnh")]
graph_offset = Vector2(-524.25, -260.734) graph_offset = Vector2(-306.25, -187.73401)
[sub_resource type="Shader" id="Shader_cegan"] [sub_resource type="Shader" id="Shader_cegan"]
code = "shader_type canvas_item; code = "shader_type canvas_item;
@ -1227,6 +1239,8 @@ script = ExtResource("19_1u8w0")
process_mode = 3 process_mode = 3
script = ExtResource("1_rqkns") script = ExtResource("1_rqkns")
youth_room_path = "res://base-environments/youth_room/youth_room.tscn" youth_room_path = "res://base-environments/youth_room/youth_room.tscn"
transition_room_path = "uid://fgp3s28h7msy"
adulthood_room_path = "uid://flisupth27th"
[node name="Panel" type="Panel" parent="."] [node name="Panel" type="Panel" parent="."]
visible = false visible = false
@ -1283,7 +1297,7 @@ visible = false
layout_mode = 0 layout_mode = 0
offset_left = 100.0 offset_left = 100.0
offset_top = -37.0 offset_top = -37.0
offset_right = 239.99991 offset_right = 239.99973
offset_bottom = 9.0 offset_bottom = 9.0
text = "loading" text = "loading"
script = SubResource("GDScript_cegan") script = SubResource("GDScript_cegan")
@ -1299,9 +1313,6 @@ autoplay = "init"
[node name="MenuAnimationTree" type="AnimationTree" parent="MenuAnimationPlayer"] [node name="MenuAnimationTree" type="AnimationTree" parent="MenuAnimationPlayer"]
unique_name_in_owner = true unique_name_in_owner = true
root_node = NodePath("%MenuAnimationPlayer/../Control/mask") root_node = NodePath("%MenuAnimationPlayer/../Control/mask")
libraries = {
&"": SubResource("AnimationLibrary_ogbs1")
}
tree_root = SubResource("AnimationNodeStateMachine_uwcb5") tree_root = SubResource("AnimationNodeStateMachine_uwcb5")
anim_player = NodePath("..") anim_player = NodePath("..")
parameters/conditions/load_save = false parameters/conditions/load_save = false
@ -1394,8 +1405,239 @@ offset_top = 220.0
offset_right = 1926.0 offset_right = 1926.0
offset_bottom = 5260.0 offset_bottom = 5260.0
bbcode_enabled = true bbcode_enabled = true
text = "[center]
[img=512]res://logic-scenes/main menu/logo.png[/img]
[img][/img]
[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 fit_content = true
script = ExtResource("12_074og") script = ExtResource("12_074og")
markdown_text = "[center]
[img=512]res://logic-scenes/main menu/logo.png[/img]
![This is an image]()
## 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") h1 = SubResource("Resource_0odxb")
h2 = SubResource("Resource_lswn8") h2 = SubResource("Resource_lswn8")
h3 = SubResource("Resource_a6jrf") h3 = SubResource("Resource_a6jrf")

View File

@ -403,7 +403,7 @@ pivot_offset = Vector2(374, 378.5)
[node name="TabContainer" type="TabContainer" parent="CenterContainer2/SettingsPopup"] [node name="TabContainer" type="TabContainer" parent="CenterContainer2/SettingsPopup"]
modulate = Color(1, 1, 1, 0) modulate = Color(1, 1, 1, 0)
layout_mode = 2 layout_mode = 2
current_tab = 4 current_tab = 3
use_hidden_tabs_for_min_size = true use_hidden_tabs_for_min_size = true
script = ExtResource("5_lhfti") script = ExtResource("5_lhfti")
@ -426,51 +426,15 @@ metadata/_tab_index = 2
[node name="Gameplay Settings" parent="CenterContainer2/SettingsPopup/TabContainer" instance=ExtResource("6_p7ypt")] [node name="Gameplay Settings" parent="CenterContainer2/SettingsPopup/TabContainer" instance=ExtResource("6_p7ypt")]
unique_name_in_owner = true unique_name_in_owner = true
visible = false
layout_mode = 2 layout_mode = 2
metadata/_tab_index = 3 metadata/_tab_index = 3
[node name="Content Notes" parent="CenterContainer2/SettingsPopup/TabContainer" instance=ExtResource("7_pnd48")] [node name="Content Notes" parent="CenterContainer2/SettingsPopup/TabContainer" instance=ExtResource("7_pnd48")]
unique_name_in_owner = true unique_name_in_owner = true
visible = false
layout_mode = 2 layout_mode = 2
metadata/_tab_index = 4 metadata/_tab_index = 4
[node name="Popup" type="Popup" parent="CenterContainer2"]
oversampling_override = 1.0
initial_position = 2
size = Vector2i(879, 132)
visible = true
[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer2/Popup"]
offset_left = 113.0
offset_right = 153.0
offset_bottom = 40.0
[node name="Label" type="Label" parent="CenterContainer2/Popup/VBoxContainer"]
layout_mode = 2
text = "Settings have been modified.
Do you really want to leave without saving?"
horizontal_alignment = 1
[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer2/Popup/VBoxContainer"]
layout_mode = 2
alignment = 1
[node name="ConfirmExit" type="Button" parent="CenterContainer2/Popup/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "leave"
[node name="ConfirmSave" type="Button" parent="CenterContainer2/Popup/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "save"
[node name="ConfirmAbort" type="Button" parent="CenterContainer2/Popup/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "abort"
[node name="SaveGameHandle" type="CenterContainer" parent="."] [node name="SaveGameHandle" type="CenterContainer" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
visible = false visible = false