Merge commit '9e4e3a21f335ac6af09727f2f4b1b627a107ae65'

This commit is contained in:
betalars 2023-08-06 00:05:07 +02:00
commit 345bb0f145
34 changed files with 7920 additions and 832 deletions

View File

@ -29,6 +29,7 @@
## Music
- [Foundations I by Azure Studios](https://azurestudios.bandcamp.com/album/foundations-i-24bit), CC-BY 3.0
- [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

1
design/godot_logo.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

4717
design/splash-screen.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 364 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 309 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 278 KiB

After

Width:  |  Height:  |  Size: 256 KiB

View File

@ -35,11 +35,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1689078114,
"narHash": "sha256-osG8BrX5RpKJ7wH+vI6auOU+ctvNOblT4XXCgknK47c=",
"lastModified": 1689752456,
"narHash": "sha256-VOChdECcEI8ixz8QY+YC4JaNEFwQd1V8bA0G4B28Ki0=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "b6cc7ff8fee93789bc871a267ab876c3fca042cb",
"rev": "7f256d7da238cb627ef189d56ed590739f42f13b",
"type": "github"
},
"original": {

View File

@ -30,3 +30,10 @@ func _update_scene(new_mode) -> int:
emit_signal("freeze")
return new_mode
func get_ready():
self.show()
$sfx/distant_rain.play()
$"sfx/rain on window".play()
await get_tree().create_timer(0.1).timeout
$logic/UI/board.hide()

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=105 format=3 uid="uid://b3b0gyvklqn50"]
[gd_scene load_steps=113 format=3 uid="uid://b3b0gyvklqn50"]
[ext_resource type="Script" path="res://base-environments/youth_room/room_handle.gd" id="1_aitp0"]
[ext_resource type="PackedScene" uid="uid://c0i4ydmxtxfho" path="res://base-environments/youth_room/import/youth_room.glb" id="1_jf3oi"]
@ -9,6 +9,7 @@
[ext_resource type="Texture2D" uid="uid://bwicl5q0lw06q" path="res://import/interface-elements/bottom.png" id="3_xqd4w"]
[ext_resource type="PackedScene" uid="uid://bnskiyx1sksww" path="res://logic-scenes/board/physics-board.tscn" id="4_gyjxx"]
[ext_resource type="AudioStream" uid="uid://1tvopjmo6dp2" path="res://base-environments/youth_room/audio/Azure Studios - mgd-723687677.mp3" id="5_fe1yj"]
[ext_resource type="PackedScene" uid="uid://citwb7f4dl3l1" path="res://thank-you.tscn" id="5_kts6y"]
[ext_resource type="ArrayMesh" uid="uid://wuxbl6u3s8yo" path="res://base-environments/youth_room/shaders/starlight-mesh.res" id="6_gy6jv"]
[ext_resource type="AudioStream" uid="uid://d1r1tvb1paup4" path="res://base-environments/youth_room/audio/draeven.ogg" id="7_125rh"]
[ext_resource type="AudioStream" uid="uid://cudna8k7fw06t" path="res://base-environments/youth_room/audio/Moving Loop.wav" id="8_egnow"]
@ -24,6 +25,7 @@
[ext_resource type="PackedScene" uid="uid://bdnesuqroi7ss" path="res://vfx/collectable_particles.tscn" id="12_qxx2k"]
[ext_resource type="Texture2D" uid="uid://bqilajx05t0eb" path="res://logic-scenes/board/particle_textures/void_nomotion.png" id="12_xnele"]
[ext_resource type="Texture2D" uid="uid://d005qvnbnishb" path="res://import/interface-elements/cursor_grab.png" id="13_lqj71"]
[ext_resource type="PackedScene" uid="uid://dvwuhobhka78d" path="res://logic-scenes/misc/skip_control.tscn" id="15_7nc4e"]
[ext_resource type="PackedScene" uid="uid://brk4hjdf2x81a" path="res://logic-scenes/card_picker/card_picker.tscn" id="19_a4n1o"]
[ext_resource type="ArrayMesh" uid="uid://bfc3d4g40n0wy" path="res://logic-scenes/collectable/import/old-mask.res" id="19_jr2bb"]
[ext_resource type="PackedScene" uid="uid://dwtxjvprjyx8p" path="res://base-environments/youth_room/lava-lamp.tscn" id="21_0k2gr"]
@ -31,9 +33,6 @@
[ext_resource type="PackedScene" uid="uid://bpjympn3ps3wo" path="res://logic-scenes/luna/luna_imported.tscn" id="27_pb1jl"]
[ext_resource type="Material" uid="uid://ct7uc5i5yp5qf" path="res://base-environments/youth_room/import/materials/wall.tres" id="28_oiweb"]
[sub_resource type="BoxShape3D" id="BoxShape3D_0eexn"]
size = Vector3(0.0600758, 0.423278, 0.723589)
[sub_resource type="BoxShape3D" id="BoxShape3D_j3mqx"]
size = Vector3(0.711297, 2.53136, 1.74815)
@ -121,6 +120,27 @@ size = Vector3(1.63347, 0.305693, 0.775269)
[sub_resource type="BoxShape3D" id="BoxShape3D_bq15k"]
size = Vector3(0.244565, 1, 0.245859)
[sub_resource type="InputEventKey" id="InputEventKey_p2hyr"]
device = -1
keycode = 88
unicode = 120
[sub_resource type="InputEventJoypadButton" id="InputEventJoypadButton_e2vy5"]
button_index = 2
pressed = true
[sub_resource type="Shortcut" id="Shortcut_b3maf"]
events = [SubResource("InputEventKey_p2hyr"), SubResource("InputEventJoypadButton_e2vy5")]
[sub_resource type="GDScript" id="GDScript_uy50s"]
script/source = "extends Panel
func show():
mouse_filter = MOUSE_FILTER_STOP
visible = true
"
[sub_resource type="Animation" id="Animation_nwry8"]
length = 0.001
tracks/0/type = "value"
@ -145,7 +165,7 @@ tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [-80.0]
"values": [0.0]
}
tracks/2/type = "value"
tracks/2/imported = false
@ -157,7 +177,7 @@ tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
"values": [-80.0]
}
tracks/3/type = "value"
tracks/3/imported = false
@ -169,7 +189,7 @@ tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
"values": [-80.0]
}
tracks/4/type = "value"
tracks/4/imported = false
@ -639,6 +659,18 @@ tracks/42/keys = {
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/43/type = "value"
tracks/43/imported = false
tracks/43/enabled = true
tracks/43/path = NodePath("ScenePlayer/Jui_Jutsu:volume_db")
tracks/43/interp = 1
tracks/43/loop_wrap = true
tracks/43/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
}
[sub_resource type="Animation" id="Animation_g5l1m"]
resource_name = "childhood"
@ -785,7 +817,7 @@ tracks/11/path = NodePath("ScenePlayer")
tracks/11/interp = 1
tracks/11/loop_wrap = true
tracks/11/keys = {
"times": PackedFloat32Array(9.7),
"times": PackedFloat32Array(93.7),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [],
@ -1037,7 +1069,7 @@ tracks/19/path = NodePath("ScenePlayer")
tracks/19/interp = 1
tracks/19/loop_wrap = true
tracks/19/keys = {
"times": PackedFloat32Array(138.4),
"times": PackedFloat32Array(140.5),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [],
@ -1349,7 +1381,7 @@ tracks/19/path = NodePath("ScenePlayer")
tracks/19/interp = 1
tracks/19/loop_wrap = true
tracks/19/keys = {
"times": PackedFloat32Array(205.6),
"times": PackedFloat32Array(204.5),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [],
@ -1466,7 +1498,7 @@ tracks/8/path = NodePath("ScenePlayer")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(95.2),
"times": PackedFloat32Array(95.1),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [],
@ -1517,14 +1549,19 @@ _data = {
script/source = "extends AnimationPlayer
var has_stage
var is_repeating = false
func start_soundtrack():
$Moving.play(70)
$Childhood.play(70)
$VoiceTraining.play(70)
func play_scene(id: int):
State.queue_for_stage(self)
func play_scene(id: int, repeat = false):
get_tree().call_group(\"interactables\", \"collapse\")
State.pass_stage_to(self)
State.lock_focus = true
is_repeating = repeat
Input.mouse_mode = Input.MOUSE_MODE_HIDDEN
match id:
Scenes.id.YOUTH_CHILDHOOD:
play(\"childhood\")
@ -1532,24 +1569,34 @@ func play_scene(id: int):
play(\"voice training\")
Scenes.id.YOUTH_JUI_JUTSU:
play(\"jui_jutsu\")
Scenes.id.YOUTH_DRAEVEN:
play(\"draeven\")
func _on_ini_room():
play(\"intro\")
func on_childhood_done():
get_tree().call_group(\"animation_player\", \"scene_finished\", Scenes.id.YOUTH_CHILDHOOD)
get_tree().call_group(\"animation_player\", \"scene_finished\", Scenes.id.YOUTH_CHILDHOOD, is_repeating)
$childhood.hide()
State.lock_focus = is_repeating
func on_voice_training_done():
get_tree().call_group(\"animation_player\", \"scene_finished\", Scenes.id.YOUTH_VOICE_TRAINING)
get_tree().call_group(\"animation_player\", \"scene_finished\", Scenes.id.YOUTH_VOICE_TRAINING, is_repeating)
$\"Voice Training\".hide()
State.lock_focus = is_repeating
func on_jui_jutsu_done():
get_tree().call_group(\"animation_player\", \"scene_finished\", Scenes.id.YOUTH_JUI_JUTSU)
get_tree().call_group(\"animation_player\", \"scene_finished\", Scenes.id.YOUTH_JUI_JUTSU, is_repeating)
$jui_jutsu.hide()
State.lock_focus = is_repeating
func on_draeven_done():
get_tree().call_group(\"animation_player\", \"scene_finished\", Scenes.id.YOUTH_DRAEVEN)
get_tree().call_group(\"animation_player\", \"scene_finished\", Scenes.id.YOUTH_DRAEVEN, is_repeating)
$draeven.hide()
State.lock_focus = is_repeating
func scene_finished(_id):
play(\"RESET\")
queue(\"RESET\")
"
[sub_resource type="ViewportTexture" id="ViewportTexture_2cudi"]
@ -1743,6 +1790,15 @@ viewport_path = NodePath("logic/clothes_interaction/UiWrapper/UiSprite/SubViewpo
[sub_resource type="ViewportTexture" id="ViewportTexture_nn6wl"]
viewport_path = NodePath("logic/Comic-interaction/UiWrapper/UiSprite/SubViewport")
[sub_resource type="ViewportTexture" id="ViewportTexture_8rywf"]
viewport_path = NodePath("logic/Draeven-interaction/UiWrapper/UiSprite/SubViewport")
[sub_resource type="SphereShape3D" id="SphereShape3D_c7buh"]
radius = 0.469631
[sub_resource type="ViewportTexture" id="ViewportTexture_hdmps"]
viewport_path = NodePath("logic/Mind Board/UiWrapper/UiSprite/SubViewport")
[sub_resource type="GDScript" id="GDScript_35dmj"]
script/source = "extends SpotLight3D
@ -1879,10 +1935,10 @@ script/source = "extends AnimationPlayer
func _on_ini_room():
play(\"light_up\")
func play_scene(_id: int):
func play_scene(_id: int, _repeat):
queue(\"lights_out\")
func scene_finished(_id: int):
func scene_finished(_id: int, _repeat):
queue(\"light_up\")
"
@ -1973,11 +2029,11 @@ func focus_object():
var dof_strength_tween: Tween = create_tween()
dof_strength_tween.tween_property(camera_attributes, \"dof_blur_amount\", 0.4, 1)
func play_scene(_id: int):
func play_scene(_id: int, _repeat):
focus_object()
func scene_finished(_id: int):
pass
func _on_picker_cards_picked(_cards):
focus_env()
"
[sub_resource type="QuadMesh" id="QuadMesh_n875y"]
@ -2009,13 +2065,6 @@ script = ExtResource("1_aitp0")
[node name="logic" type="Node3D" parent="."]
[node name="Area3D" type="Area3D" parent="logic"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.896754, 0.847242, 1.36975)
[node name="CollisionShape3D" type="CollisionShape3D" parent="logic/Area3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.346071, 0.364297)
shape = SubResource("BoxShape3D_0eexn")
[node name="PlayerController" parent="logic" groups=["camera_owner"] instance=ExtResource("3_foj4y")]
transform = Transform3D(0.686123, 0, 0.727485, 0, 1, 0, -0.727485, 0, 0.686123, 0.63, 0, 0.925)
@ -2180,6 +2229,20 @@ grow_horizontal = 2
grow_vertical = 2
mouse_filter = 1
[node name="ending_button" type="Button" parent="logic/UI"]
visible = false
top_level = true
layout_mode = 0
offset_left = 16.0
offset_top = 12.0
offset_right = 400.0
offset_bottom = 100.0
shortcut = SubResource("Shortcut_b3maf")
text = "You have completed
ordering your thoughts.
This is as far as the alpha goes.
Press x or [ ] to wrap up."
[node name="picker" parent="logic/UI" groups=["animation_player"] instance=ExtResource("19_a4n1o")]
unique_name_in_owner = true
visible = false
@ -2189,6 +2252,12 @@ layout_mode = 1
visible = false
layout_mode = 1
[node name="ending" parent="logic/UI" instance=ExtResource("5_kts6y")]
visible = false
layout_mode = 1
mouse_filter = 2
script = SubResource("GDScript_uy50s")
[node name="ScenePlayer" type="AnimationPlayer" parent="logic" groups=["animation_player"]]
autoplay = "RESET"
libraries = {
@ -2201,11 +2270,11 @@ bus = &"text"
[node name="Moving" type="AudioStreamPlayer" parent="logic/ScenePlayer"]
stream = ExtResource("8_egnow")
volume_db = -80.0
bus = &"music"
[node name="Childhood" type="AudioStreamPlayer" parent="logic/ScenePlayer"]
stream = ExtResource("9_i8mqk")
volume_db = -80.0
bus = &"music"
[node name="childhood" type="CenterContainer" parent="logic/ScenePlayer"]
@ -2342,8 +2411,12 @@ texture = ExtResource("3_xqd4w")
expand_mode = 2
stretch_mode = 4
[node name="skip_control" parent="logic/ScenePlayer/childhood/PanelContainer" instance=ExtResource("15_7nc4e")]
layout_mode = 2
[node name="VoiceTraining" type="AudioStreamPlayer" parent="logic/ScenePlayer"]
stream = ExtResource("10_wwwdq")
volume_db = -80.0
bus = &"music"
[node name="Voice Training" type="CenterContainer" parent="logic/ScenePlayer"]
@ -2427,13 +2500,14 @@ texture = ExtResource("3_xqd4w")
expand_mode = 2
stretch_mode = 4
[node name="skip_control2" parent="logic/ScenePlayer/Voice Training/PanelContainer" instance=ExtResource("15_7nc4e")]
layout_mode = 2
[node name="Jui_Jutsu" type="AudioStreamPlayer" parent="logic/ScenePlayer"]
volume_db = -10.0
bus = &"music"
[node name="jui_jutsu" type="CenterContainer" parent="logic/ScenePlayer"]
visible = false
modulate = Color(1, 1, 1, 0)
self_modulate = Color(1, 1, 1, 0.923078)
anchors_preset = 15
anchor_right = 1.0
@ -2485,7 +2559,7 @@ vertical_scroll_mode = 3
layout_mode = 2
size_flags_horizontal = 3
text = "Why do i still have this junk lying around? Its not like I want to do ju jutsu ever again. I just fucked it.
I mean I did enjoy it while it lasted. Being able to properly hit people was great. It gave me the confidence to intimidate students, that were begging to get folded and - as I only once actually golt to do that - it also was a great vent for anger. I mean my tits just about killed me during warmup and the changing room really didnt need mirrors - thank you I know my hips are fat and disgusting - but at least there was Lukas.
I mean I did enjoy it while it lasted. Being able to properly hit people was great. It gave me the confidence to intimidate students, that were begging to get folded and - as I only once actually got to do that - it also was a great vent for anger. I mean my tits just about killed me during warmup and the changing room really didnt need mirrors - thank you I know my hips are fat and disgusting - but at least there was Lukas.
He was such a huge nerd. He studied math in his third semester and could talk for hours about his passion. Also: my math grades pretty much leaped for my final year in high shool thanks to him.
He also helped me so much with jui jitsu, as he properly floored me when I slipped up. Also - unlike everyone else - he understood that I didnt want people to mind my chest. So Fighting for wins with him was actually rewarding even tho more often than not I ended up having to tap out.
@ -2517,7 +2591,7 @@ That was good. He was a sweet angel. Why must he be so bad at comforting?
autowrap_mode = 3
visible_characters = 43
visible_characters_behavior = 1
visible_ratio = 0.0169225
visible_ratio = 0.0169291
[node name="StartBottom" type="TextureRect" parent="logic/ScenePlayer/jui_jutsu/PanelContainer/VBoxContainer"]
custom_minimum_size = Vector2(0, 64)
@ -2561,6 +2635,9 @@ visible = false
scale = Vector2(0.4, 0.4)
texture = ExtResource("12_xnele")
[node name="skip_control3" parent="logic/ScenePlayer/jui_jutsu/PanelContainer" instance=ExtResource("15_7nc4e")]
layout_mode = 2
[node name="draeven" type="CenterContainer" parent="logic/ScenePlayer"]
visible = false
modulate = Color(1, 1, 1, 0)
@ -2634,6 +2711,9 @@ texture = ExtResource("3_xqd4w")
expand_mode = 2
stretch_mode = 4
[node name="skip_control4" parent="logic/ScenePlayer/draeven/PanelContainer" instance=ExtResource("15_7nc4e")]
layout_mode = 2
[node name="starlight_mesh" type="MeshInstance3D" parent="logic/ScenePlayer/draeven"]
transform = Transform3D(0.999, 0, 0, 0, 0.999, 0, 0, 0, 0.999, 0, 0, 0)
layers = 2
@ -2802,7 +2882,7 @@ render_target_update_mode = 4
visible = false
scene = 1
is_story = true
item_name = "my secret comic stash"
item_name = "comic stash"
content_notes = "internalised mysoginy, genitals, bullying, fictional guns"
[node name="HoverDetect" type="CollisionShape3D" parent="logic/Comic-interaction"]
@ -2810,7 +2890,7 @@ transform = Transform3D(1, 0, 2.98023e-08, 0, 1, 0, -2.98023e-08, 0, 1, 0, -0.23
shape = SubResource("CapsuleShape3D_72g2i")
[node name="Draeven-interaction" type="Area3D" parent="logic" groups=["interactables"]]
transform = Transform3D(0.86043, 0, -0.509567, 0, 1, 0, 0.509567, 0, 0.86043, 3.5364, 0.447547, -0.697444)
transform = Transform3D(0.86043, 0, -0.509567, 0, 1, 0, 0.509567, 0, 0.86043, 0.122875, 2.03863, -0.132712)
collision_layer = 16
script = ExtResource("11_6fwv8")
@ -2830,7 +2910,7 @@ shape = SubResource("BoxShape3D_cb3g8")
transform = Transform3D(1, 0, 2.4869e-14, 0, 1, 0, -2.4869e-14, 0, 1, 0, 0, 0.610758)
pixel_size = 0.015
no_depth_test = true
texture = SubResource("ViewportTexture_nn6wl")
texture = SubResource("ViewportTexture_8rywf")
[node name="SubViewport" type="SubViewport" parent="logic/Draeven-interaction/UiWrapper/UiSprite"]
transparent_bg = true
@ -2839,10 +2919,50 @@ render_target_update_mode = 4
[node name="Collectable_ui" parent="logic/Draeven-interaction/UiWrapper/UiSprite/SubViewport" instance=ExtResource("11_jxai0")]
visible = false
item_name = "Mind Board"
scene = 3
is_story = true
item_name = "Starlight"
content_notes = "Alienation"
[node name="HoverDetect" type="CollisionShape3D" parent="logic/Draeven-interaction"]
transform = Transform3D(1, 0, 2.98023e-08, 0, 1, 0, -2.98023e-08, 0, 1, 0, -0.237872, 0)
shape = SubResource("SphereShape3D_c7buh")
[node name="Mind Board" type="Area3D" parent="logic" groups=["interactables"]]
transform = Transform3D(-4.37114e-08, 0, 0.999999, 0, 1, 0, -0.999999, 0, -4.37114e-08, -0.907206, 1.17661, 1.74337)
collision_layer = 16
script = ExtResource("11_6fwv8")
[node name="collectable_particles" parent="logic/Mind Board" instance=ExtResource("12_qxx2k")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00898492, -0.14171, 0.152755)
visible = false
[node name="UiWrapper" type="Area3D" parent="logic/Mind Board"]
transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0, 0, 0)
script = ExtResource("11_7uxd8")
billboard = false
[node name="UI_click_collider" type="CollisionShape3D" parent="logic/Mind Board/UiWrapper"]
transform = Transform3D(2.56, -5.96046e-08, 4.76837e-07, 1.78814e-07, 2.56, -4.17233e-07, -2.38419e-07, -5.96046e-08, 2.56, 0, 1.90735e-06, 0.238397)
shape = SubResource("BoxShape3D_cb3g8")
[node name="UiSprite" type="Sprite3D" parent="logic/Mind Board/UiWrapper"]
transform = Transform3D(1, 0, 2.4869e-14, 0, 1, 0, -2.4869e-14, 0, 1, 0, 0, 0.610758)
pixel_size = 0.015
no_depth_test = true
texture = SubResource("ViewportTexture_hdmps")
[node name="SubViewport" type="SubViewport" parent="logic/Mind Board/UiWrapper/UiSprite"]
transparent_bg = true
size = Vector2i(300, 350)
render_target_update_mode = 4
[node name="Collectable_ui" parent="logic/Mind Board/UiWrapper/UiSprite/SubViewport" instance=ExtResource("11_jxai0")]
visible = false
item_name = "Mind Board"
[node name="HoverDetect" type="CollisionShape3D" parent="logic/Mind Board"]
transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 0, 0, 0)
shape = SubResource("CapsuleShape3D_72g2i")
[node name="sfx" type="Node3D" parent="."]
@ -2852,7 +2972,6 @@ transform = Transform3D(-0.410985, -0.460061, 0.787042, -0.904759, 0.311726, -0.
stream = ExtResource("2_3haaq")
attenuation_model = 1
volume_db = -15.367
autoplay = true
panning_strength = 0.5
bus = &"sfx"
emission_angle_enabled = true
@ -2868,7 +2987,6 @@ bus = &"sfx"
stream = ExtResource("22_xrkbj")
attenuation_model = 3
pitch_scale = 0.8
autoplay = true
panning_strength = 0.2
bus = &"outside-rain"
@ -3059,14 +3177,15 @@ surface_material_override/0 = SubResource("StandardMaterial3D_5u6i4")
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.57896, 0)
material_override = SubResource("StandardMaterial3D_qifbj")
amount = 1000
visibility_aabb = AABB(-2.68266, -0.69998, -0.431825, 5.36533, 1.39996, 0.86365)
visibility_aabb = AABB(-2.68266, -2.50574, -0.431825, 5.36533, 5.01148, 0.86365)
process_material = SubResource("ParticleProcessMaterial_g3ayx")
draw_pass_1 = SubResource("QuadMesh_rb6dt")
[node name="VoxelGI" type="VoxelGI" parent="."]
[connection signal="ini_room" from="." to="logic/PlayerController" method="_on_ini_room"]
[connection signal="ini_room" from="." to="logic/ScenePlayer" method="_on_ini_room"]
[connection signal="ini_room" from="." to="visuals/lights/light_animation" method="_on_ini_room"]
[connection signal="mouse_entered" from="logic/Area3D" to="." method="_on_area_3d_mouse_entered"]
[connection signal="ui_entered" from="logic/PlayerController" to="SceneUI" method="show"]
[connection signal="ui_exited" from="logic/PlayerController" to="SceneUI" method="hide"]
[connection signal="body_entered" from="logic/Bed and Ladders/ladder_trigger" to="logic/PlayerController" method="_on_bed_enter"]
@ -3076,11 +3195,29 @@ draw_pass_1 = SubResource("QuadMesh_rb6dt")
[connection signal="body_entered" from="logic/Bed and Ladders/bed_enter" to="logic/PlayerController" method="_on_bed_enter"]
[connection signal="body_exited" from="logic/Bed and Ladders/bed_reset" to="logic/PlayerController" method="_on_bed_exit"]
[connection signal="body_exited" from="logic/Bed and Ladders/reset_failover" to="logic/PlayerController" method="_on_bed_exit"]
[connection signal="pressed" from="logic/UI/ending_button" to="logic/UI/ending_button" method="hide"]
[connection signal="pressed" from="logic/UI/ending_button" to="logic/UI/ending" method="show"]
[connection signal="cards_picked" from="logic/UI/picker" to="logic/UI/board" method="populate_board"]
[connection signal="cards_picked" from="logic/UI/picker" to="WorldEnvironment" method="_on_picker_cards_picked"]
[connection signal="board_completed" from="logic/UI/board" to="logic/UI/ending_button" method="show"]
[connection signal="skip" from="logic/ScenePlayer/childhood/PanelContainer/skip_control" to="logic/ScenePlayer" method="on_childhood_done"]
[connection signal="skip" from="logic/ScenePlayer/childhood/PanelContainer/skip_control" to="logic/ScenePlayer" method="play" binds= ["RESET"]]
[connection signal="skip" from="logic/ScenePlayer/Voice Training/PanelContainer/skip_control2" to="logic/ScenePlayer" method="on_voice_training_done"]
[connection signal="skip" from="logic/ScenePlayer/Voice Training/PanelContainer/skip_control2" to="logic/ScenePlayer" method="play" binds= ["RESET"]]
[connection signal="input_event" from="logic/ScenePlayer/jui_jutsu/PanelContainer/card" to="logic/ScenePlayer/jui_jutsu/PanelContainer/card" method="_on_input_event" flags=18]
[connection signal="mouse_entered" from="logic/ScenePlayer/jui_jutsu/PanelContainer/card" to="logic/ScenePlayer/jui_jutsu/PanelContainer/card" method="_on_mouse_entered" flags=18]
[connection signal="mouse_exited" from="logic/ScenePlayer/jui_jutsu/PanelContainer/card" to="logic/ScenePlayer/jui_jutsu/PanelContainer/card" method="_on_mouse_exited" flags=18]
[connection signal="skip" from="logic/ScenePlayer/jui_jutsu/PanelContainer/skip_control3" to="logic/ScenePlayer" method="on_jui_jutsu_done"]
[connection signal="skip" from="logic/ScenePlayer/jui_jutsu/PanelContainer/skip_control3" to="logic/ScenePlayer" method="play" binds= ["RESET"]]
[connection signal="skip" from="logic/ScenePlayer/draeven/PanelContainer/skip_control4" to="logic/ScenePlayer" method="on_draeven_done"]
[connection signal="skip" from="logic/ScenePlayer/draeven/PanelContainer/skip_control4" to="logic/ScenePlayer" method="play" binds= ["RESET"]]
[connection signal="input_event" from="logic/Mask-interaction/UiWrapper" to="logic/Mask-interaction/UiWrapper" method="_on_input_event" flags=18]
[connection signal="scene_skipped" from="logic/Mask-interaction/UiWrapper/UiSprite/SubViewport/Collectable_ui" to="logic/UI/board" method="on_scene_skipped"]
[connection signal="input_event" from="logic/clothes_interaction/UiWrapper" to="logic/clothes_interaction/UiWrapper" method="_on_input_event" flags=18]
[connection signal="scene_skipped" from="logic/clothes_interaction/UiWrapper/UiSprite/SubViewport/Collectable_ui" to="logic/UI/board" method="on_scene_skipped"]
[connection signal="input_event" from="logic/Comic-interaction/UiWrapper" to="logic/Comic-interaction/UiWrapper" method="_on_input_event" flags=18]
[connection signal="scene_skipped" from="logic/Comic-interaction/UiWrapper/UiSprite/SubViewport/Collectable_ui" to="logic/UI/board" method="on_scene_skipped"]
[connection signal="input_event" from="logic/Draeven-interaction/UiWrapper" to="logic/Draeven-interaction/UiWrapper" method="_on_input_event" flags=18]
[connection signal="scene_skipped" from="logic/Draeven-interaction/UiWrapper/UiSprite/SubViewport/Collectable_ui" to="logic/UI/board" method="on_scene_skipped"]
[connection signal="input_event" from="logic/Mind Board/UiWrapper" to="logic/Mind Board/UiWrapper" method="_on_input_event" flags=18]
[connection signal="open_board" from="logic/Mind Board/UiWrapper/UiSprite/SubViewport/Collectable_ui" to="logic/UI/board" method="claim_focus"]

View File

@ -1,5 +1,6 @@
[gd_scene load_steps=3 format=3 uid="uid://bvowj4l8dtceu"]
[gd_scene load_steps=4 format=3 uid="uid://bvowj4l8dtceu"]
[ext_resource type="Script" path="res://dev-util/devs_board.gd" id="1_ols6o"]
[ext_resource type="PackedScene" uid="uid://dy5rd437h5hsw" path="res://logic-scenes/board/card.tscn" id="1_xrckx"]
[ext_resource type="PackedScene" uid="uid://vkcdj8c3ytbq" path="res://logic-scenes/board/post-it.tscn" id="2_ucudl"]
@ -10,6 +11,7 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_ols6o")
[node name="childhood" type="Control" parent="."]
anchors_preset = 0
@ -25,7 +27,7 @@ text = "I never put in much effort for homework "
position = Vector2(-32, 50)
text = "but at least I get good grades."
[node name="p_upset_peers" parent="childhood/c_homework" groups=["c_Joy", "c_boy_stuff", "c_comic_heroes", "c_homework", "c_teachers", "c_teasing"] instance=ExtResource("2_ucudl")]
[node name="p_upset_peers" parent="childhood/c_homework" groups=["c_boy_stuff", "c_comic_heroes", "c_homework", "c_joy", "c_teachers", "c_teasing"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 140)
text = "my peers were upset about that."
@ -33,23 +35,23 @@ text = "my peers were upset about that."
position = Vector2(0, 300)
text = "I like my teachers more than my classmates "
[node name="p_volunteering" parent="childhood/c_teachers" groups=["c_Joy", "c_boy_stuff", "c_teachers"] instance=ExtResource("2_ucudl")]
[node name="p_volunteering" parent="childhood/c_teachers" groups=["c_boy_stuff", "c_comic_heroes", "c_joy", "c_teachers"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 50)
text = "doing voluntary social service at my school would be great."
[node name="p_becoming_teacher" parent="childhood/c_teachers" groups=["c_Joy", "c_homework", "c_teachers", "c_teasing"] instance=ExtResource("2_ucudl")]
[node name="p_becoming_teacher" parent="childhood/c_teachers" groups=["c_homework", "c_joy", "c_teachers", "c_teasing"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 140)
text = "maybe I want to become a teacher."
[node name="c_Joy" parent="childhood" instance=ExtResource("1_xrckx")]
[node name="c_joy" parent="childhood" instance=ExtResource("1_xrckx")]
position = Vector2(0, 600)
text = "I can put ages into things I enjoy "
[node name="p_worried_mother" parent="childhood/c_Joy" groups=["c_Joy", "c_body", "c_boy_stuff", "c_comic_heroes", "c_fighting", "c_homework", "c_teachers", "c_teasing"] instance=ExtResource("2_ucudl")]
[node name="p_worried_mother" parent="childhood/c_joy" groups=["c_body", "c_boy_stuff", "c_comic_heroes", "c_fighting", "c_homework", "c_joy", "c_teachers", "c_teasing"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 50)
text = "my mother would be worried about that"
[node name="p_thomas" parent="childhood/c_Joy" groups=["c_Joy", "c_comic_heroes", "c_confusion", "c_hit", "c_homework", "c_out-of-world", "c_teachers"] instance=ExtResource("2_ucudl")]
[node name="p_thomas" parent="childhood/c_joy" groups=["c_comic_heroes", "c_confusion", "c_hit", "c_homework", "c_joy", "c_out-of-world", "c_teachers"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 140)
text = "Mr Thomas thinks that makes me gifted."
@ -63,11 +65,11 @@ offset_bottom = 141.0
[node name="c_comic_heroes" parent="voice_training" instance=ExtResource("1_xrckx")]
text = "Comic heroes are my role models "
[node name="p_effort" parent="voice_training/c_comic_heroes" groups=["c_Joy", "c_hit", "c_homework", "c_teachers", "c_teasing"] instance=ExtResource("2_ucudl")]
[node name="p_effort" parent="voice_training/c_comic_heroes" groups=["c_comic_heroes", "c_hit", "c_homework", "c_joy", "c_teachers", "c_teasing"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 50)
text = "when I put in the effort, I can make the world a better place"
[node name="p_agent_q" parent="voice_training/c_comic_heroes" groups=["c_Joy", "c_body", "c_boy_stuff", "c_hit", "c_homework"] instance=ExtResource("2_ucudl")]
[node name="p_agent_q" parent="voice_training/c_comic_heroes" groups=["c_body", "c_boy_stuff", "c_comic_heroes", "c_hit", "c_homework", "c_joy"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 140)
text = "and I want to be like agent q!"
@ -75,19 +77,19 @@ text = "and I want to be like agent q!"
position = Vector2(0, 300)
text = "I like boy stuff "
[node name="p_pretending" parent="voice_training/c_boy_stuff" groups=["c_Joy", "c_body", "c_hit", "c_homework", "c_teachers", "c_teasing"] instance=ExtResource("2_ucudl")]
[node name="p_pretending" parent="voice_training/c_boy_stuff" groups=["c_body", "c_boy_stuff", "c_hit", "c_homework", "c_joy", "c_teachers", "c_teasing"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 50)
text = "yet they think I'm just pretending"
[node name="p_girls" parent="voice_training/c_boy_stuff" groups=["c_Joy", "c_body", "c_comic_heroes", "c_hit", "c_homework", "c_teachers", "c_teasing"] instance=ExtResource("2_ucudl")]
[node name="p_girls" parent="voice_training/c_boy_stuff" groups=["c_body", "c_boy_stuff", "c_comic_heroes", "c_hit", "c_homework", "c_joy", "c_teachers", "c_teasing"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 140)
text = "and girls don't get that."
[node name="c_teasing" parent="voice_training" instance=ExtResource("1_xrckx")]
position = Vector2(0, 600)
text = "When Jojo got tased for trying, I pretty much exploded"
text = "When Jojo got teased for trying, I pretty much exploded"
[node name="p_stubborn" parent="voice_training/c_teasing" groups=["c_Joy", "c_boy_stuff", "c_comic_heroes", "c_confusion", "c_fighting", "c_hit", "c_homework", "c_out-of-world", "c_teasing"] instance=ExtResource("2_ucudl")]
[node name="p_stubborn" parent="voice_training/c_teasing" groups=["c_boy_stuff", "c_comic_heroes", "c_confusion", "c_fighting", "c_hit", "c_homework", "c_joy", "c_out-of-world", "c_teasing"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 50)
text = "I wouldn't have it any other way, even if it was for my own good"
@ -113,18 +115,6 @@ text = "My body just didn't feel right"
position = Vector2(-32, 140)
text = "I just hate being treated like a girl"
[node name="c_hit" parent="juijutsu" instance=ExtResource("1_xrckx")]
position = Vector2(0, 300)
text = "I know how to properly hit people "
[node name="p_confidence" parent="juijutsu/c_hit" groups=["c_Joy", "c_boy_stuff", "c_comic_heroes", "c_hit", "c_homework", "c_teasing"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 50)
text = "..., that gives me a lot of confidence."
[node name="p_vent" parent="juijutsu/c_hit" groups=["c_Joy", "c_boy_stuff", "c_comic_heroes", "c_hit", "c_homework", "c_teachers"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 140)
text = "and thats a great vent."
[node name="c_void" parent="juijutsu" instance=ExtResource("1_xrckx")]
position = Vector2(0, 600)
@ -136,6 +126,18 @@ text = "I was wet, so I must have been into it."
position = Vector2(-32, 140)
text = "I didnt say stop."
[node name="c_hit" parent="juijutsu" instance=ExtResource("1_xrckx")]
position = Vector2(0, 300)
text = "I know how to properly hit people "
[node name="p_confidence" parent="juijutsu/c_hit" groups=["c_boy_stuff", "c_comic_heroes", "c_hit", "c_homework", "c_joy", "c_teasing"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 50)
text = "..., that gives me a lot of confidence."
[node name="p_vent" parent="juijutsu/c_hit" groups=["c_boy_stuff", "c_comic_heroes", "c_hit", "c_homework", "c_joy", "c_teachers"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 140)
text = "and thats a great vent."
[node name="draeven" type="Control" parent="."]
anchors_preset = 0
offset_left = 1234.0
@ -146,11 +148,11 @@ offset_bottom = 181.0
[node name="c_out-of-world" parent="draeven" instance=ExtResource("1_xrckx")]
text = "I feel like I am not from of this world"
[node name="p_unique" parent="draeven/c_out-of-world" groups=["c_Joy", "c_comic_heroes", "c_confusion", "c_hit", "c_homework", "c_out-of-world", "c_teachers"] instance=ExtResource("2_ucudl")]
[node name="p_unique" parent="draeven/c_out-of-world" groups=["c_comic_heroes", "c_confusion", "c_hit", "c_homework", "c_joy", "c_out-of-world", "c_teachers"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 50)
text = "I like being unique like that"
[node name="p_few_friends" parent="draeven/c_out-of-world" groups=["c_Joy", "c_comic_heroes", "c_fighting", "c_out-of-world", "c_teachers", "c_teasing"] instance=ExtResource("2_ucudl")]
[node name="p_few_friends" parent="draeven/c_out-of-world" groups=["c_comic_heroes", "c_fighting", "c_joy", "c_out-of-world", "c_rejection", "c_teachers", "c_teasing"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 140)
text = "I am thankful for the few friends that get me"
@ -158,11 +160,11 @@ text = "I am thankful for the few friends that get me"
position = Vector2(0, 300)
text = "I fear being rejected"
[node name="p_friends" parent="draeven/c_rejection" groups=["c_Joy", "c_boy_stuff", "c_comic_heroes", "c_fighting", "c_homework", "c_out-of-world", "c_teachers"] instance=ExtResource("2_ucudl")]
[node name="p_friends" parent="draeven/c_rejection" groups=["c_boy_stuff", "c_comic_heroes", "c_fighting", "c_homework", "c_joy", "c_out-of-world", "c_rejection", "c_teachers"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 50)
text = "that makes it hard to find friends"
[node name="p_laughed" parent="draeven/c_rejection" groups=["c_Joy", "c_boy_stuff", "c_comic_heroes", "c_confusion", "c_homework", "c_teachers"] instance=ExtResource("2_ucudl")]
[node name="p_laughed" parent="draeven/c_rejection" groups=["c_boy_stuff", "c_comic_heroes", "c_confusion", "c_homework", "c_joy", "c_rejection", "c_teachers"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 140)
text = "I'm afraid I will just get laughed at"
@ -174,7 +176,7 @@ text = "I am just too many things at once"
position = Vector2(-32, 50)
text = "it is just so overwhealming for me"
[node name="p_outer_conflict" parent="draeven/c_confusion" groups=["c_Joy", "c_boy_stuff", "c_confusion", "c_fighting", "c_hit", "c_homework", "c_out-of-world", "c_rejection", "c_teachers"] instance=ExtResource("2_ucudl")]
[node name="p_outer_conflict" parent="draeven/c_confusion" groups=["c_boy_stuff", "c_confusion", "c_fighting", "c_hit", "c_homework", "c_joy", "c_out-of-world", "c_rejection", "c_teachers"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 140)
text = "this is just too much for others"
@ -198,11 +200,11 @@ text = "random 1"
[node name="c_pick" parent="test2" instance=ExtResource("1_xrckx")]
position = Vector2(0, 300)
[node name="p_pick" parent="test2/c_pick" groups=["c_Joy", "c_boy_stuff", "c_comic_heroes", "c_homework"] instance=ExtResource("2_ucudl")]
[node name="p_pick" parent="test2/c_pick" groups=["c_boy_stuff", "c_comic_heroes", "c_homework", "c_joy"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 50)
text = "pick me 2"
[node name="p_goof" parent="test2/c_pick" groups=["c_Joy", "c_boy_stuff", "c_comic_heroes", "c_homework", "c_teachers"] instance=ExtResource("2_ucudl")]
[node name="p_goof" parent="test2/c_pick" groups=["c_boy_stuff", "c_comic_heroes", "c_homework", "c_joy", "c_teachers"] instance=ExtResource("2_ucudl")]
position = Vector2(-32, 140)
text = "you done goofed"

View File

@ -1,15 +1,17 @@
extends Area3D
@export var billboard = true
@onready var sprite: Sprite3D = $UiSprite
@onready var viewport: SubViewport = $UiSprite/SubViewport
func _process(_delta):
var camera = get_viewport().get_camera_3d()
var up = (camera.global_position - global_position)
up = up.cross(Vector3.UP).cross(up)
look_at(global_position - (camera.global_position - global_position), up)
if billboard:
var camera = get_viewport().get_camera_3d()
var up = (camera.global_position - global_position)
up = up.cross(Vector3.UP).cross(up)
look_at(global_position - (camera.global_position - global_position), up)
func _unhandled_input(event):
viewport.push_input(event)

View File

@ -0,0 +1,40 @@
extends Control
func get_cards_by_scene_id(id: int) -> Array:
var output:Array
var scene = get_child(id)
for i in range(scene.get_child_count()):
output.append(scene.get_child(i))
for post in output[i].get_children():
if post is PostIt:
output[i].remove_child(post)
for card in output:
card.transform = Transform3D()
for postIt in card.own_postits:
postIt.transform = Transform3D()
return output
func get_cards_by_name_array(names: Array) -> Dictionary:
var output:Dictionary = {
"cards": [],
"postIts": []
}
for scene in get_children():
for card in scene.get_children():
for postIt in card.get_children():
if names.has(postIt.name):
postIt.transform = Transform3D()
output['postIts'].append(postIt)
if names.has(card.name):
card.transform = Transform3D()
output['cards'].append(card)
for child in card.get_children():
if child is PostIt:
card.remove_child(child)
return output

View File

@ -83,10 +83,13 @@ text = "Welcome to the frame of mind alpha"
[node name="Label2" type="Label" parent="childhood/PanelContainer/VBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
text = "Thank you for participating in our public alpha. The goal is to see if the premise of our game works, if the mechanics are interesting and, if the game makes sense.
text = "Thank you for participating in our public alpha. The goal is to see if the core of
our game works, if the mechanics are interesting and, if the game makes sense.
We would like to inform you: especially the acessibility settings right now are not functional. This will be our main focus while we wait for the first batch of alpha feedback.
There are also no save-games yet.
Right now and acessibility settings are spotty.
They will be worked on while the alpha is running.
You will also not be able to help Lisa find a better frame of mind, as the second chapter is not yet implemented. Please know that many disruptive thoughts Lisa has in the first chapter were designed to be resolved later in the game.
The game also does not support save games yet.
Frame of Mind uses a Creative Commons Non Commercial Share Alike 4.0 license. You can use the game and it's assets freely, as long as you also contribute back to the creative Commons Community. Feel free to reach out if you need a commercial License.
Twokinds is created by Thomas J. Fischbach, who granted us permission to use it in a Creative Commons Project."
@ -98,7 +101,7 @@ layout_mode = 2
size_flags_horizontal = 4
theme_override_fonts/font = ExtResource("2_rmsdo")
theme_override_font_sizes/font_size = 50
text = "Start the alpha!"
text = "I understand, please start the alpha"
[node name="Label3" type="Label" parent="childhood/PanelContainer/VBoxContainer"]
layout_mode = 2

View File

@ -8,18 +8,17 @@ custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="../build/linux/frame-of-mind.x86_64"
export_path="../../export-testing/frame-of-mind.x86_64"
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
script_encryption_key=""
[preset.0.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_script=1
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/bptc=true
texture_format/s3tc=true
@ -38,3 +37,65 @@ unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
rm -rf \"{temp_dir}\""
[preset.1]
name="Windows Desktop"
platform="Windows Desktop"
runnable=true
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="../../export-testing/frame-of-mind.exe"
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
[preset.1.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/bptc=true
texture_format/s3tc=true
texture_format/etc=false
texture_format/etc2=false
binary_format/architecture="x86_64"
codesign/enable=false
codesign/timestamp=true
codesign/timestamp_server_url=""
codesign/digest_algorithm=1
codesign/description=""
codesign/custom_options=PackedStringArray()
application/modify_resources=true
application/icon=""
application/console_wrapper_icon=""
application/icon_interpolation=4
application/file_version=""
application/product_version=""
application/company_name=""
application/product_name=""
application/file_description=""
application/copyright=""
application/trademarks=""
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
$trigger = New-ScheduledTaskTrigger -Once -At 00:00
$settings = New-ScheduledTaskSettingsSet
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
Start-ScheduledTask -TaskName godot_remote_debug
while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
Remove-Item -Recurse -Force '{temp_dir}'"

View File

@ -13,6 +13,7 @@ var has_stage = false:
if focus:
has_stage = true
self.mouse_filter = Control.MOUSE_FILTER_PASS
get_tree().call_group("interactables", "collapse")
else:
has_stage = false
self.mouse_filter = Control.MOUSE_FILTER_IGNORE
@ -22,11 +23,14 @@ var has_stage = false:
child.process_mode = Node.PROCESS_MODE_INHERIT
else:
child.process_mode = Node.PROCESS_MODE_DISABLED
visible = has_stage
@onready var dropzone = $HBoxContainer/dropzone
var dropzone_size: Vector2
@export var dropzone_padding = 100
@onready var postit_container = $HBoxContainer/ScrollContainer/VBoxContainer
@onready var board_of_devs = $"board of devs"
@onready var base_postit_panel = $HBoxContainer/ScrollContainer/VBoxContainer/Panel
var base_postit_panel: Panel
@onready var active_context = ui_context.DROPZONE # 0 = dropzone, 1 = post it list
@onready var instructions = $instructions_panel/HBoxContainer/cards_remaining
@ -52,14 +56,21 @@ var selected_dropzone_element: int = -1
var selected_postit_list_element: int = 0
var selected_card_for_assignment
var cache: Array = []
signal board_completed
# Called when the node enters the scene tree for the first time.
func _ready():
base_postit_panel = $HBoxContainer/ScrollContainer/VBoxContainer/Panel
postit_container.remove_child(base_postit_panel)
#var test_arr = ["c_Joy","p_effort","c_backlash","c_body","c_hit","p_slut","p_worried_mother","p_cross_friend"]
#var test_arr = ["c_Joy","c_body","c_hit"]
dropzone_size = get_viewport_rect().size - Vector2(dropzone_padding + base_postit_panel.custom_minimum_size.x, dropzone_padding)
if get_parent() == get_tree().root:
populate_board(["c_void", 'c_joy', "p_wet", "p_thomas"])
populate_board(["c_fighting", 'c_hit', "p_girly", "p_vent"])
#populate_board(test_arr)
#reorder_areas("dropzone_content")
active_context = ui_context.DROPZONE
has_stage = has_stage
@ -73,66 +84,34 @@ func _process(delta):
is_area_dragged = false
currently_dragged_area = null
# we should maybe consider moving this to _input() for consistency
if Input.is_action_just_pressed("ui_cancel"):
populate_board(["c_Joy","p_effort","c_backlash","c_body","c_void","p_reward","p_worried_mother","p_cross_friend"])
# Will be used later to spawn Cards and Post-Its and remember them in the dictionary
func populate_board(card_names: Array):
mementos_collected += 1
var all_cards = Array()
var all_postits = Array()
var all_new:Dictionary = board_of_devs.get_cards_by_name_array(card_names)
# to remember panel positions
area_dict["post_it_panels"] = [base_postit_panel]
var new_cards:Array = all_new["cards"]
var new_postits:Array = all_new["postIts"]
# check how many post-it panels we need
var amount = -1 # starting with -1 to compensate for the base panel
for card_name in card_names:
if "p_" in card_name:
amount += 1
while amount > 0: # creating panels up to the number of post-its
# spawning the cards and adding them to the dictionary
for new_card in all_new["cards"]:
new_card.position = Vector2(randi_range(dropzone_padding, dropzone_size.x), randi_range(dropzone_padding, dropzone_size.y))
new_card.reparent(dropzone, false)
new_card.set_owner(self)
area_dict["dropzone_content"].push_back(new_card)
area_dict["cards"].push_back(new_card)
new_card.is_dragable = true
for new_postit in all_new["postIts"]: # spawning a post-it
var new_panel = base_postit_panel.duplicate()
postit_container.add_child(new_panel)
new_panel.set_owner(self)
area_dict["post_it_panels"].push_back(new_panel)
amount -= 1
# get all the cards and post-its from the board of devs
for child in board_of_devs.get_children():
for child_2 in child.get_children(): # put all cards in all_cards array
all_cards.push_back(child_2)
for child_3 in child_2.get_children(): # put all post-its in all_postits array
if "p_" in child_3.name: # post-its are currently children of cards.
all_postits.push_back(child_3) # If this changes, this logic needs to be adjusted.
# spawning the cards and adding them to the dictionary
for card_name in card_names:
if "c_" in card_name: # spawning a card
var new_card = _find_area_by_string(all_cards, card_name).duplicate()
for child in new_card.get_children(): # We need to clear all the post-its from the cards on the dev-board
if "p_" in child.name:
new_card.remove_child(child) # dev-board has post-its attached to the cards, which need to be removed
new_card.position = Vector2(randi_range(0, dropzone.size.x), randi_range(0, dropzone.size.y))
dropzone.add_child(new_card)
new_card.set_owner(self)
area_dict["dropzone_content"].push_back(new_card)
area_dict["cards"].push_back(new_card)
#new_card.position = Vector2(randf_range(new_card.diameter, dropzone.size.x), randf_range(new_card.diameter, dropzone.size.y)) - Vector2(new_card.diameter/2, new_card.diameter/2)
new_card.is_dragable = true
if "p_" in card_name: # spawning a post-it
var new_postit = _find_area_by_string(all_postits, card_name).duplicate()
for panel in area_dict["post_it_panels"]: # still mad I can't use the return_postit-func for this...
if panel.get_child_count() == 1:
panel.add_child(new_postit)
new_postit.set_owner(self)
area_dict["post_its_in_list"].push_back(new_postit)
new_postit.position = panel.get_child(0).position
new_postit.is_dragable = true
break
area_dict["post_it_panels"].append(new_panel)
new_panel.add_child(new_postit)
new_postit.set_owner(self)
area_dict["post_its_in_list"].push_back(new_postit)
new_postit.position = new_panel.get_child(0).position
new_postit.is_dragable = true
currently_selected_node = area_dict["dropzone_content"][0] # set first Card as currently selected node by default
@ -140,15 +119,6 @@ func populate_board(card_names: Array):
reorder_areas("cards")
reorder_areas("post_its_in_list")
# Handy function to filter an array of areas by the name of a card
func _find_area_by_string(area_arr: Array, name: String) -> Area2D:
for area in area_arr:
if area.name == name:
return area
return null
# Checks if a Node is currently inside the dropzone
func is_in_dropzone(to_check: Node) -> bool:
if (dropzone.size.x < to_check.global_position.x or dropzone.size.y < to_check.global_position.y):
@ -229,8 +199,14 @@ func attach_postit_to_card(postit: Area2D, card: Area2D, update_dict = false):
reorder_areas("dropzone_content")
reorder_areas("cards")
reorder_areas("post_its_in_list")
if mementos_collected == 4:
for fluff in area_dict["dropzone_content"]:
if fluff is Card:
if not fluff.has_postit_attached():
return
emit_signal("board_completed")
# Mark area that was hovered over as currently selected
func handle_hover(to_handle: Area2D):
if to_handle != currently_selected_node:
@ -264,6 +240,9 @@ func reorder_areas(reorder: String):
# Takes the inputs for control inputs
func _input(event):
if event.is_action_pressed("ui_cancel"):
State.leave_stage(self)
# Return, if the input is a mouse event (mouse events are handled separately)
if event is InputEventMouse or !has_stage or not is_instance_valid(currently_selected_node): return
@ -377,17 +356,21 @@ func _leave_assignment_context():
# handles everything to return a post it to the panels
func _return_postit_to_panels(post_it: Area2D):
for panel in area_dict["post_it_panels"]:
print(area_dict["post_it_panels"])
if panel.get_child_count() == 1:
area_dict["dropzone_content"].erase(post_it)
post_it.on_board = false
area_dict["post_its_in_list"].push_back(post_it)
post_it.tween_transform_to(panel.get_child(0).position)
post_it.rotation = post_it.base_rotation
post_it.scale = post_it.base_scale
#post_it.tween_transform_to(panel.get_child(0).position)
post_it.reparent(panel)
post_it.transform = panel.get_child(0).transform
post_it.set_owner(self)
reorder_areas("dropzone_content")
reorder_areas("post_its_in_list")
break
func on_scene_skipped(i: int):
mementos_collected += i
func claim_focus():
State.pass_stage_to(self)

View File

@ -19,8 +19,6 @@ var scale_tween
if !Engine.is_editor_hint():
wiggle_pos = float(text.hash() % 100)
_handle_wiggle(0)
if get_children() != [] and !Engine.is_editor_hint() and text == "":
$BackgroundSprite.void_active = true
@export var wiggle_strength: float = 0.2
@export var wiggle_speed: float = 5
@export_range(1, 2) var scale_bump: float = 1.05
@ -81,7 +79,6 @@ func _ready():
$BackgroundSprite.frame = text.hash() % $BackgroundSprite.sprite_frames.get_frame_count($BackgroundSprite.animation)
$Label.text = self.text
if not Engine.is_editor_hint(): $BackgroundSprite.void_active = text == ""
wiggle_pos = float(text.hash() % 100)
if not Engine.is_editor_hint():
@ -96,12 +93,15 @@ func _process(delta: float) -> void:
if area is Card or area is CardCollider:
if area is CardCollider:
position += area.direction * delta
elif not area.highlighted or self.highlighted:
elif not (area.highlighted or self.highlighted) and area.is_dragable:
var diff:Vector2 = position - area.position
position -= diff.normalized() * ((diff.length()-diameter)/diameter) * bounce_speed * (delta/(1.0/60))
_move_card()
func get_text() -> String:
return $Label.text
func _handle_wiggle(delta):
wiggle_pos += delta * wiggle_speed * wiggle_intensity

View File

@ -1,10 +1,8 @@
[gd_scene load_steps=21 format=3 uid="uid://dy5rd437h5hsw"]
[gd_scene load_steps=11 format=3 uid="uid://dy5rd437h5hsw"]
[ext_resource type="Script" path="res://logic-scenes/board/card.gd" id="1_emip0"]
[ext_resource type="Texture2D" uid="uid://sv0nhkkur1tt" path="res://logic-scenes/board/card-textures/cardsheet.png" id="2_ioijn"]
[ext_resource type="Texture2D" uid="uid://kpmk21d8rlso" path="res://logic-scenes/board/particle_textures/star.png" id="3_bwtbh"]
[ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/messy.theme" id="3_rktsa"]
[ext_resource type="Texture2D" uid="uid://bqilajx05t0eb" path="res://logic-scenes/board/particle_textures/void_nomotion.png" id="4_fwm1k"]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_foovg"]
radius = 110.0
@ -53,105 +51,6 @@ animations = [{
"speed": 5.0
}]
[sub_resource type="GDScript" id="GDScript_8bs16"]
script/source = "extends AnimatedSprite2D
@onready var particles = $GPUParticles2D
@onready var initial_position = position
var noise_position = randf()
var noise: Noise = FastNoiseLite.new()
var void_active:
set(become_void):
if not (void_active == become_void):
if is_inside_tree():
$GPUParticles2D.is_void = become_void
$GPUParticles2D.emitting = become_void
$Sprite2D.is_void = become_void
void_active = become_void
func _process(delta):
if void_active != $GPUParticles2D.is_void:
$GPUParticles2D.is_void = void_active
$GPUParticles2D.emitting = void_active
$Sprite2D.is_void = void_active
if void_active and not State.reduce_motion:
noise_position += delta * 10
var random_position = Vector2(noise.get_noise_1d(noise_position*2), noise.get_noise_1d(-noise_position))
random_position = random_position.normalized() * pow(random_position.length()*2, 3) * 5
position = initial_position - random_position
rotation = noise.get_noise_1d(noise_position*10) * random_position.length() * 0.01
particles.position = random_position
else: position = initial_position
"
[sub_resource type="Gradient" id="Gradient_v70nd"]
interpolation_mode = 2
offsets = PackedFloat32Array(0, 0.0529197, 0.191606, 1)
colors = PackedColorArray(1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0.491329, 1, 1, 1, 0)
[sub_resource type="GradientTexture1D" id="GradientTexture1D_xxq8p"]
gradient = SubResource("Gradient_v70nd")
[sub_resource type="Curve" id="Curve_q6cmf"]
_data = [Vector2(0, 0), 0.0, 3.16529, 0, 0, Vector2(0.241056, 0.191336), 0.132446, 0.132446, 0, 0, Vector2(1, 1), 3.94797, 0.0, 0, 0]
point_count = 3
[sub_resource type="CurveTexture" id="CurveTexture_cg0w1"]
curve = SubResource("Curve_q6cmf")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_by44l"]
emission_shape = 6
emission_ring_axis = Vector3(0, 0, 1)
emission_ring_height = 0.0
emission_ring_radius = 180.0
emission_ring_inner_radius = 185.0
particle_flag_disable_z = true
spread = 180.0
gravity = Vector3(0, 0, 0)
initial_velocity_min = -10.0
initial_velocity_max = 10.0
angular_velocity_min = -150.0
angular_velocity_max = -150.0
orbit_velocity_min = 0.0
orbit_velocity_max = 0.0
radial_accel_min = -20.0
radial_accel_max = -5.0
tangential_accel_min = 20.0
tangential_accel_max = 30.0
scale_min = 3.0
scale_max = 5.0
scale_curve = SubResource("CurveTexture_cg0w1")
color_ramp = SubResource("GradientTexture1D_xxq8p")
turbulence_noise_strength = 0.1
attractor_interaction_enabled = false
[sub_resource type="GDScript" id="GDScript_vjwk7"]
script/source = "extends GPUParticles2D
var is_void:bool = false
func _process(_delta):
self.visible = !State.reduce_motion and is_void
"
[sub_resource type="GDScript" id="GDScript_tgc0b"]
script/source = "extends Sprite2D
var is_void:bool = false
func _process(_delta):
self.visible = State.reduce_motion and is_void
"
[node name="card" type="Area2D"]
script = ExtResource("1_emip0")
metadata/type = "card"
@ -166,25 +65,6 @@ clip_children = 2
scale = Vector2(0.6, 0.6)
sprite_frames = SubResource("SpriteFrames_ckivt")
frame = 1
script = SubResource("GDScript_8bs16")
[node name="GPUParticles2D" type="GPUParticles2D" parent="BackgroundSprite"]
visible = false
amount = 500
process_material = SubResource("ParticleProcessMaterial_by44l")
texture = ExtResource("3_bwtbh")
lifetime = 2.5
speed_scale = 1.3
explosiveness = 0.2
randomness = 0.14
local_coords = true
script = SubResource("GDScript_vjwk7")
[node name="Sprite2D" type="Sprite2D" parent="BackgroundSprite"]
visible = false
scale = Vector2(0.4, 0.4)
texture = ExtResource("4_fwm1k")
script = SubResource("GDScript_tgc0b")
[node name="Label" type="Label" parent="."]
anchors_preset = 8

View File

@ -0,0 +1,9 @@
[gd_scene format=3 uid="uid://chwf61qpn2sqw"]
[node name="Panel" type="Panel"]
self_modulate = Color(1, 1, 1, 0)
custom_minimum_size = Vector2(400, 120)
mouse_filter = 1
[node name="post-it_anchor1" type="Node2D" parent="."]
position = Vector2(105, 57)

View File

@ -1,10 +1,11 @@
[gd_scene load_steps=10 format=3 uid="uid://bnskiyx1sksww"]
[gd_scene load_steps=11 format=3 uid="uid://bnskiyx1sksww"]
[ext_resource type="Texture2D" uid="uid://bi3xqdknw5tpe" path="res://logic-scenes/board/board-texture/Cork002_2K_Color.png" id="1_8brxc"]
[ext_resource type="Shader" path="res://logic-scenes/board/physics-board.gdshader" id="1_ggnth"]
[ext_resource type="Script" path="res://logic-scenes/board/card-board.gd" id="3_8v4c4"]
[ext_resource type="PackedScene" uid="uid://dy5rd437h5hsw" path="res://logic-scenes/board/card.tscn" id="3_mg053"]
[ext_resource type="PackedScene" uid="uid://bvowj4l8dtceu" path="res://dev-util/board of devs.tscn" id="4_sskx2"]
[ext_resource type="PackedScene" uid="uid://chwf61qpn2sqw" path="res://logic-scenes/board/empty_postIt_panel.tscn" id="5_dr0qs"]
[ext_resource type="Script" path="res://logic-scenes/board/card collider.gd" id="6_wpxls"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ttqei"]
@ -61,14 +62,8 @@ horizontal_scroll_mode = 0
[node name="VBoxContainer" type="VBoxContainer" parent="HBoxContainer/ScrollContainer"]
layout_mode = 2
[node name="Panel" type="Panel" parent="HBoxContainer/ScrollContainer/VBoxContainer"]
self_modulate = Color(1, 1, 1, 0)
custom_minimum_size = Vector2(400, 120)
[node name="Panel" parent="HBoxContainer/ScrollContainer/VBoxContainer" instance=ExtResource("5_dr0qs")]
layout_mode = 2
mouse_filter = 1
[node name="post-it_anchor1" type="Node2D" parent="HBoxContainer/ScrollContainer/VBoxContainer/Panel"]
position = Vector2(105, 57)
[node name="board of devs" parent="." instance=ExtResource("4_sskx2")]
process_mode = 4
@ -133,9 +128,11 @@ shape = SubResource("RectangleShape2D_ivo5o")
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 0
mouse_filter = 2
[node name="HBoxContainer" type="HBoxContainer" parent="instructions_panel"]
layout_mode = 2
mouse_filter = 2
[node name="VSeparator2" type="VSeparator" parent="instructions_panel/HBoxContainer"]
custom_minimum_size = Vector2(15, 0)
@ -144,7 +141,7 @@ layout_mode = 2
[node name="cards_remaining" type="Label" parent="instructions_panel/HBoxContainer"]
layout_mode = 2
size_flags_vertical = 0
text = "Collect Mementos to fill the mind-board."
text = "Collect all four Mementos to fill the mind-board. "
horizontal_alignment = 1
vertical_alignment = 1

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=20 format=3 uid="uid://dp4eps03igd3w"]
[gd_scene load_steps=21 format=3 uid="uid://dp4eps03igd3w"]
[ext_resource type="Script" path="res://logic-scenes/board/card.gd" id="1_6ceun"]
[ext_resource type="Texture2D" uid="uid://sv0nhkkur1tt" path="res://logic-scenes/board/card-textures/cardsheet.png" id="2_buevv"]
@ -6,6 +6,10 @@
[ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/messy.theme" id="3_mi4ah"]
[ext_resource type="Texture2D" uid="uid://bqilajx05t0eb" path="res://logic-scenes/board/particle_textures/void_nomotion.png" id="4_jam8u"]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_foovg"]
radius = 110.0
height = 336.0
[sub_resource type="AtlasTexture" id="AtlasTexture_ykk13"]
atlas = ExtResource("2_buevv")
region = Rect2(0, 0, 600, 440)
@ -56,17 +60,11 @@ script/source = "extends AnimatedSprite2D
@onready var initial_position = position
var noise_position = randf()
var noise: Noise = FastNoiseLite.new()
var void_active:
set(become_void):
if not (void_active == become_void):
if is_inside_tree():
$GPUParticles2D.is_void = become_void
$GPUParticles2D.emitting = become_void
$Sprite2D.is_void = become_void
void_active = become_void
func _process(delta):
if void_active and not State.reduce_motion:
if not State.reduce_motion:
noise_position += delta * 10
var random_position = Vector2(noise.get_noise_1d(noise_position*2), noise.get_noise_1d(-noise_position))
@ -116,8 +114,8 @@ radial_accel_min = -20.0
radial_accel_max = -5.0
tangential_accel_min = 20.0
tangential_accel_max = 30.0
scale_min = 1.5
scale_max = 3.0
scale_min = 3.0
scale_max = 5.0
scale_curve = SubResource("CurveTexture_cg0w1")
color_ramp = SubResource("GradientTexture1D_xxq8p")
turbulence_noise_strength = 0.1
@ -126,37 +124,31 @@ attractor_interaction_enabled = false
[sub_resource type="GDScript" id="GDScript_vjwk7"]
script/source = "extends GPUParticles2D
var is_void:bool = false
func _process(_delta):
self.visible = !State.reduce_motion and is_void
self.visible = !State.reduce_motion
"
[sub_resource type="GDScript" id="GDScript_tgc0b"]
script/source = "extends Sprite2D
var is_void:bool = false
func _process(_delta):
self.visible = State.reduce_motion and is_void
self.visible = State.reduce_motion
"
[node name="card" type="Control"]
layout_mode = 3
anchors_preset = 0
offset_left = -150.0
offset_top = -110.0
offset_right = 150.0
offset_bottom = 110.0
focus_mode = 2
[node name="card" type="Area2D"]
script = ExtResource("1_6ceun")
metadata/type = "card"
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
position = Vector2(-0.0713516, 0.997451)
rotation = 1.5708
shape = SubResource("CapsuleShape2D_foovg")
[node name="BackgroundSprite" type="AnimatedSprite2D" parent="."]
clip_children = 2
position = Vector2(150, 110)
scale = Vector2(0.6, 0.6)
sprite_frames = SubResource("SpriteFrames_ckivt")
frame = 2
frame = 1
script = SubResource("GDScript_8bs16")
[node name="GPUParticles2D" type="GPUParticles2D" parent="BackgroundSprite"]
@ -167,6 +159,7 @@ lifetime = 2.5
speed_scale = 1.3
explosiveness = 0.2
randomness = 0.14
local_coords = true
script = SubResource("GDScript_vjwk7")
[node name="Sprite2D" type="Sprite2D" parent="BackgroundSprite"]
@ -176,7 +169,6 @@ texture = ExtResource("4_jam8u")
script = SubResource("GDScript_tgc0b")
[node name="Label" type="Label" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
@ -192,13 +184,9 @@ theme = ExtResource("3_mi4ah")
theme_type_variation = &"card_text"
autowrap_mode = 3
[node name="postit anchor" type="Control" parent="."]
anchors_preset = 0
offset_left = 100.0
offset_top = 148.0
offset_right = 140.0
offset_bottom = 188.0
[node name="postit anchor" type="Node2D" parent="."]
position = Vector2(-65.6478, 60.3852)
[connection signal="focus_entered" from="." to="." method="_on_focus_entered"]
[connection signal="focus_exited" from="." to="." method="_on_focus_exited"]
[connection signal="focus_entered" from="postit anchor" to="." method="_on_postit_anchor_focus_entered"]
[connection signal="input_event" from="." to="." method="_on_input_event"]
[connection signal="mouse_entered" from="." to="." method="_on_mouse_entered"]
[connection signal="mouse_exited" from="." to="." method="_on_mouse_exited"]

View File

@ -7,22 +7,23 @@ enum {
CARDS_SELECTED,
TRANSITION,
POSTS,
POSTS_SELECTED,
DONE
}
@onready var debug_board:Control = $"board of devs"
@onready var source_board:Control = $"board of devs"
var has_stage = false:
set(focus):
if not focus == has_stage:
if focus:
if selection_state == INI or CARDS:
for player in anim_players: player.play("reveal")
process_mode = Node.PROCESS_MODE_INHERIT
self.show()
self.mouse_filter = Control.MOUSE_FILTER_IGNORE
else:
self.mouse_filter = Control.MOUSE_FILTER_STOP
self.hide()
process_mode = Node.PROCESS_MODE_DISABLED
has_stage = focus
var _input_locked = true
@ -30,8 +31,11 @@ var selection_state = INI:
set(state):
selection_state = state
_input_locked = !(state == CARDS or state == POSTS)
if state == DONE:
reset()
var anim_players:Array
var anim_players:Array = []
var curr_selection_id: int = -1:
set(new_id):
if selection_state == CARDS or selection_state == POSTS:
@ -47,40 +51,59 @@ var curr_selection_id: int = -1:
print(curr_selection_id)
var output:Array
var options:Array
var output:Array = []
var options:Array = []
signal cards_picked(Array)
# Called when the node enters the scene tree for the first time.
func _ready():
if get_parent() == get_tree().root: selection_state = CARDS
reset()
func reset():
output = []
options = []
anim_players = []
var card_controls = $cards.get_children()
for control in card_controls:
options.append(control.get_child(1))
anim_players.append(control.get_child(0))
fill_card_slots(0)
curr_selection_id = 0
for player in anim_players: player.play("reveal")
func fill_card_slots(id: int):
for i in range($cards.get_child_count()):
var card:Card = $cards.get_child(i).get_child(1)
card.replace_with(debug_board.get_child(id).get_child(i) as Card)
card.connect("mouse_entered", Callable(self, "get_highlight"))
card.owner = self
var new_cards = source_board.get_cards_by_scene_id(id)
for i in range(new_cards.size()):
$cards.get_child(i).remove_child($cards.get_child(i).get_child(1))
var new_card = new_cards[i]
new_card.reparent($cards.get_child(i), false)
new_card.owner = self
new_card.connect("mouse_entered", Callable(self, "get_highlight"))
options.append(new_card)
anim_players.append($cards.get_child(i).get_child(0))
reset()
func fill_post_slots():
var post_its: Array[PostIt] = []
for card in output:
post_its.append_array(card.own_postits)
print(card.own_postits)
post_its.shuffle()
options = []
for ancor in $postIts.get_children():
ancor.remove_child(ancor.get_child(1))
for i in range(post_its.size()):
options[i].replace_with(post_its[i])
options.append(post_its[i])
$postIts.get_child(i).add_child(options[i], false)
options[i].owner = self
func _unhandled_input(event):
func _input(event):
if event.is_action_pressed("ui_end"):
fill_card_slots(3)
selection_state = CARDS
if has_stage and not _input_locked:
if event.is_action_pressed("ui_up") or event.is_action_pressed("ui_left") or event.is_action_pressed("ui_focus_next"):
curr_selection_id -= 1
@ -88,10 +111,9 @@ func _unhandled_input(event):
curr_selection_id += 1
if event.is_action_pressed("ui_accept"):
pick(curr_selection_id)
if event.is_action_pressed("ui_end"):
scene_finished(1)
func pick(id: int):
print("PICK")
if id == -1:
curr_selection_id = 0
return
@ -99,29 +121,35 @@ func pick(id: int):
if selection_state == CARDS:
selection_state = CARDS_SELECTED
elif selection_state == POSTS:
selection_state = DONE
selection_state = POSTS_SELECTED
anim_players[id].play("pick")
var yield_to = anim_players[id].animation_finished
output.append(options[id])
var sibling_id = -1
if selection_state == POSTS:
sibling_id = options.find(options[id].sibling)
print("yeet sibling ", sibling_id)
options.remove_at(id)
anim_players.remove_at(id)
randomize()
var winning_id = randi() % options.size()
var sibling_id = -1
if selection_state == POSTS_SELECTED:
sibling_id = options.find(output.back().sibling)
options.remove_at(sibling_id)
anim_players[sibling_id].play("unshuffle")
anim_players.remove_at(sibling_id)
print("yeet sibling ", sibling_id)
print("Winning ID ", id)
if winning_id == sibling_id:
winning_id = (winning_id + 1) % options.size()
var winning_id
print(options[1].text)
if !(options[1].text == "" and not id == 1):
randomize()
winning_id = randi() % options.size()
print("Winning ID ", id)
elif options[0].text == "":
winning_id = 0
else:
winning_id = 1
output.append(options.pop_at(winning_id))
anim_players.pop_at(winning_id).play("shuffle")
@ -145,11 +173,13 @@ func pick(id: int):
await anim_players[0].animation_finished
selection_state = POSTS
elif selection_state == DONE:
elif selection_state == POSTS_SELECTED:
var out_str:Array[String] = []
for card in output:
out_str.append(card.name)
emit_signal("cards_picked", out_str)
print(out_str)
selection_state = DONE
State.leave_stage(self)
func handle_hover(new_highlight):
@ -161,10 +191,13 @@ func handle_mouse_button(new_selection: Node, button_event: InputEventMouseButto
if button_event.button_index == MOUSE_BUTTON_LEFT and button_event.pressed:
pick(options.find(new_selection))
func scene_finished(id: int):
fill_card_slots(id)
State.transition_stage_to(self)
selection_state = CARDS
func scene_finished(id: int, repeat):
print(name, id, repeat)
if not repeat:
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
fill_card_slots(id)
State.transition_stage_to(self)
selection_state = CARDS
func play_scene(_id):
func play_scene(_id, _repeat):
pass

View File

@ -139,6 +139,18 @@ tracks/1/keys = {
"update": 0,
"values": [0.174533, -0.109599]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath(".:scale")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.5),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 1)]
}
[sub_resource type="Animation" id="Animation_ldr2c"]
resource_name = "select"
@ -369,6 +381,18 @@ tracks/1/keys = {
"update": 0,
"values": [0.349066, 0.0]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath(".:scale")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.5),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 1)]
}
[sub_resource type="Animation" id="Animation_2c94q"]
resource_name = "select"
@ -599,6 +623,18 @@ tracks/1/keys = {
"update": 0,
"values": [0.349066, 0.10472]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath(".:scale")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0.5),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 1)]
}
[sub_resource type="Animation" id="Animation_pcu23"]
resource_name = "select"
@ -1589,6 +1625,5 @@ libraries = {
text = "Post 4"
[node name="board of devs" parent="." instance=ExtResource("4_1kvte")]
process_mode = 4
visible = false
layout_mode = 2

View File

@ -21,7 +21,11 @@ class_name Collectable_Ui
if collapse and has_stage: State.leave_stage(self)
@export var is_story: bool = false
@export var is_story: bool = false:
set(story):
is_story = story
if not story:
$Panel/Content/Buttons/VBoxContainer/collect_or_listen.text = "Order Thoughts"
@export var has_stage: bool = false:
set(focused):
print("set focus of card to ", focused)
@ -30,13 +34,9 @@ class_name Collectable_Ui
if focused:
has_stage = true
print(visible)
if not visible: show()
collapsed = false
if collected:
$Panel/Content/Buttons/VBoxContainer/put_back.grab_focus()
else:
$Panel/Content/Buttons/VBoxContainer/collect_or_listen.grab_focus()
if not visible: show()
$Panel/Content/Buttons/VBoxContainer/collect_or_listen.grab_focus()
elif has_stage:
has_stage = false
get_viewport().gui_release_focus()
@ -72,6 +72,8 @@ class_name Collectable_Ui
$Panel/Content/ContentNotes.text = new_notes
signal card_collected
signal open_board
signal scene_skipped(i: int)
# Called when the node enters the scene tree for the first time.
func _ready():
@ -82,6 +84,7 @@ func _ready():
item_name = item_name
content_notes = content_notes
is_story = is_story
func _hide_buttons():
if is_inside_tree():
@ -108,6 +111,8 @@ func hide():
func show():
if !visible:
$Panel/Content/ContentNotes.visible = State.show_content_notes
$Panel/Content/Buttons/VBoxContainer/skip.visible = State.allow_skipping and is_story and not skipped
if not collapsed:
_show_buttons()
modulate = Color()
@ -122,8 +127,20 @@ func _yoink_focus():
func _on_pick_button_pressed():
print("card collected!")
if scene != null:
get_tree().call_group("animation_player", "play_scene", scene)
State.leave_stage(self)
func _on_pick_button_released():
State.leave_stage(self)
get_tree().call_group("animation_player", "play_scene", scene, collected)
if skipped: emit_signal("scene_skipped", -1)
collected = true
else:
emit_signal("open_board")
hide()
func _on_skip_pressed():
print("Scene skipped!")
if scene != null:
emit_signal("scene_skipped", 1)
skipped = true
$Panel/Content/Buttons/VBoxContainer/collect_or_listen.text = "collect (un-skip)"
State.leave_stage(self)

View File

@ -133,22 +133,25 @@ size_flags_vertical = 3
[node name="collect_or_listen" type="Button" parent="Panel/Content/Buttons/VBoxContainer"]
layout_mode = 2
tooltip_text = "Take this with you, and listen to it's story."
text = "Collect"
text = "Order Thoughts"
script = SubResource("GDScript_g0qhf")
[node name="Summary" type="Button" parent="Panel/Content/Buttons/VBoxContainer"]
visible = false
layout_mode = 2
tooltip_text = "Take this with you, but get a neutral description of it's story."
text = "get neutral summary"
script = SubResource("GDScript_g0qhf")
[node name="skip" type="Button" parent="Panel/Content/Buttons/VBoxContainer"]
visible = false
layout_mode = 2
tooltip_text = "Choose this to entirely skip this Item without being unable to progress in the story. Skipped Segments can still be interacted with via the Pause Screen, if you decide to change your mind."
text = "skip"
script = SubResource("GDScript_g0qhf")
[node name="put_back" type="Button" parent="Panel/Content/Buttons/VBoxContainer"]
visible = false
layout_mode = 2
text = "put back"
script = SubResource("GDScript_g0qhf")
@ -166,10 +169,9 @@ libraries = {
"": SubResource("AnimationLibrary_jad23")
}
[connection signal="resized" from="Panel/Content/Buttons/VBoxContainer" to="Panel/Content/Buttons" method="_on_v_box_container_resized"]
[connection signal="button_up" from="Panel/Content/Buttons/VBoxContainer/collect_or_listen" to="." method="_on_pick_button_released"]
[connection signal="focus_entered" from="Panel/Content/Buttons/VBoxContainer/collect_or_listen" to="." method="_yoink_focus"]
[connection signal="pressed" from="Panel/Content/Buttons/VBoxContainer/collect_or_listen" to="." method="_on_pick_button_pressed"]
[connection signal="focus_entered" from="Panel/Content/Buttons/VBoxContainer/Summary" to="." method="_yoink_focus"]
[connection signal="focus_entered" from="Panel/Content/Buttons/VBoxContainer/skip" to="." method="_yoink_focus"]
[connection signal="pressed" from="Panel/Content/Buttons/VBoxContainer/skip" to="." method="_on_skip_pressed"]
[connection signal="focus_entered" from="Panel/Content/Buttons/VBoxContainer/put_back" to="." method="_yoink_focus"]

View File

@ -89,6 +89,7 @@ bones/61/rotation = Quaternion(-0.0756927, -0.222034, 0.0605057, 0.970211)
bones/62/rotation = Quaternion(-0.139385, -0.0586047, 0.0728769, 0.985813)
[node name="Loona_main" parent="Armature/Skeleton3D" index="0"]
gi_mode = 2
surface_material_override/0 = SubResource("StandardMaterial3D_jdvnl")
[node name="wings" parent="Armature/Skeleton3D" index="1"]

View File

@ -0,0 +1,46 @@
extends Control
signal skip
@export var skip_delay: float = 0.5
@export var costum_owner: NodePath
var time_pressed: float = 0
@onready var button: Button = $"Skip Button"
@onready var progress: ProgressBar = $ProgressBar
var pressed: bool
func _ready():
owner = get_node(costum_owner)
if owner == null:
owner = get_parent().get_parent()
owner.connect("visibility_changed", Callable(self, "owner_visibility_changed"))
visible = owner.visible
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
if pressed and visible:
time_pressed += delta
progress.value = time_pressed / skip_delay
if time_pressed >= skip_delay:
emit_signal("skip")
pressed = false
time_pressed = 0
func _input(event):
if visible:
if event.is_action_pressed("skip"):
pressed = true
elif event.is_action_released("skip"):
pressed = false
time_pressed = 0
func owner_visibility_changed():
visible = owner.visible
func _on_skip_button_toggled(button_pressed):
if button_pressed:
pressed = true
else:
pressed = false
time_pressed = 0

View File

@ -0,0 +1,43 @@
[gd_scene load_steps=2 format=3 uid="uid://dvwuhobhka78d"]
[ext_resource type="Script" path="res://logic-scenes/misc/skip_control.gd" id="1_s6riu"]
[node name="skip_control" type="Control"]
layout_mode = 3
anchors_preset = 0
size_flags_horizontal = 4
size_flags_vertical = 8
script = ExtResource("1_s6riu")
[node name="ProgressBar" type="ProgressBar" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -160.0
offset_top = -19.5
offset_right = 160.0
offset_bottom = 19.5
grow_horizontal = 2
grow_vertical = 2
max_value = 1.0
show_percentage = false
[node name="Skip Button" type="Button" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -108.0
offset_top = -21.5
offset_right = 108.0
offset_bottom = 21.5
grow_horizontal = 2
grow_vertical = 2
text = "hold x or [ ] to skip"
[connection signal="toggled" from="Skip Button" to="." method="_on_skip_button_toggled"]

View File

@ -164,10 +164,14 @@ func _input(event:InputEvent):
State.take_stage(self, true)
get_tree().call_group("interactables", "collapse")
func play_scene(id: int):
func play_scene(id: int, _repeat):
if id == Scenes.id.YOUTH_DRAEVEN:
var rotation_tween = create_tween()
func scene_finished(_id, repeat: bool):
if repeat:
State.take_stage(self, true)
func _on_bed_enter(_body):
if not (crouched or on_crouch_cooldown):
$PlayerAnimationPlayer.queue("crouch")

View File

@ -8,9 +8,117 @@
[sub_resource type="GDScript" id="GDScript_a78qq"]
script/source = "extends Panel
@onready var show_navigation_buttons = $\"CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/margin/show nav ui\"
func starting():
$\"CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/navbuttons/Next\".grab_focus()
# toggle for disable rendering
func _on_disable_rendering_toggled(button_pressed):
State.disable_rendering = button_pressed
# toggle for simplified controls
func _on_simplified_controls_toggled(button_pressed):
State.simplified_navigation = button_pressed # this is how you reach the global state
show_navigation_buttons.disabled = not button_pressed # if simpl. controls was toggled - disabled = false
# toggle for show nav buttons
func _on_show_nav_ui_toggled(button_pressed):
State.show_navigation_buttons = button_pressed
# toggle streaming notes
func _on_streaming_notes_toggled(button_pressed):
State.streaming_content_notes = button_pressed
# select font
# still needs handling to change the style
func _on_font_style_selected(index):
match index:
0:
print_debug(\"messy handwriting selected\")
#self.theme.set_font(\"NanumBrushScript.ttf\")
return
1:
print_debug(\"easy handwriting selected\")
#owner.theme.set_font(\"NanumPenScript.ttf\")
return
2:
print_debug(\"legible serif selected\")
#owner.theme.set_font(\"Eczar-VariableFont_wght.ttf\")
return
3:
print_debug(\"hyperlegible sans selected\")
#owner.theme.set_font(\"AtkinsonHyperlegible.ttf\")
return
4:
print_debug(\"system front selected\")
#owner.theme.set_font(SystemFont.fallbacks[0])
return
func _on_subtitle_option_selected(index):
match index:
0:
State.enable_subtitles = false
State.enable_closed_caption = false
1:
State.enable_subtitles = true
State.enable_closed_caption = false
2:
State.enable_subtitles = true
State.enable_closed_caption = true
print_debug(State.print_settings())
# Volume Settings
func _on_mute_soundtrack_toggled(button_pressed):
AudioServer.set_bus_mute(AudioServer.get_bus_index(\"music\"),button_pressed)
func _on_mute_sfx_toggled(button_pressed):
AudioServer.set_bus_mute(AudioServer.get_bus_index(\"sfx\"),button_pressed)
func _on_music_volume_changed(value):
AudioServer.set_bus_volume_db(AudioServer.get_bus_index(\"music\"), linear_to_db(value))
func _on_sfx_volume_changed(value):
AudioServer.set_bus_volume_db(AudioServer.get_bus_index(\"sfx\"), linear_to_db(value))
func _on_text_volume_changed(value):
AudioServer.set_bus_volume_db(AudioServer.get_bus_index(\"text\"), linear_to_db(value))
func _on_master_volume_changed(value):
AudioServer.set_bus_volume_db(AudioServer.get_bus_index(\"Master\"), linear_to_db(value))
# Final Page
func _on_content_notes_toggled(button_pressed):
State.show_content_notes = button_pressed
func _on_provide_summaries_toggled(button_pressed):
State.provide_summaries = button_pressed
func _on_allow_skipping_toggled(button_pressed):
State.allow_skipping = button_pressed
func hide():
get_parent().get_child(0).get_ready()
var child_tween = create_tween()
child_tween.tween_property($CenterContainer, \"modulate\", Color(1, 1, 1, 0), .5)
await child_tween.finished
var self_tween = create_tween()
self_tween.tween_property(self, \"modulate\", Color(1, 1, 1, 0), .5)
await self_tween.finished
self.visible = false
"
[sub_resource type="GDScript" id="GDScript_ia432"]
@ -18,6 +126,9 @@ script/source = "extends TabContainer
var focus_list: Array
@onready var disable_rendering = $\"physical Accessibility/Container2/margin2/show nav buttons\"
@onready var simplified_controls = $\"physical Accessibility/Container2/simplified controls\"
func _ready():
for child in get_children():
focus_list.append(_find_selectable_in(child))
@ -58,6 +169,14 @@ func previous():
focus_list[current_tab].grab_focus()
else:
current_tab -= 1
func _on_screenreader_toggled(button_pressed):
State.screen_reader = button_pressed # this is how you reach the global state
disable_rendering.disabled = not button_pressed # if screenreader was toggled - disabled = false
simplified_controls.button_pressed = button_pressed
State.simplified_navigation = button_pressed
"
[sub_resource type="GDScript" id="GDScript_v567h"]
@ -143,12 +262,16 @@ layout_mode = 2
theme_type_variation = &"HeaderLarge"
text = "physical Accessibility"
[node name="Label4" type="Label" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility"]
layout_mode = 2
text = "sorry none of these work yet :c"
[node name="Container2" type="VBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility"]
layout_mode = 2
[node name="Screenreader" type="CheckBox" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2"]
layout_mode = 2
button_pressed = true
disabled = true
text = "activate Screenreader"
script = SubResource("GDScript_v567h")
@ -162,6 +285,7 @@ text = "disable rendering"
[node name="simplified controls" type="CheckBox" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2"]
layout_mode = 2
disabled = true
text = "simplified Controls"
[node name="margin" type="MarginContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2"]
@ -170,7 +294,6 @@ layout_mode = 2
[node name="show nav ui" type="CheckBox" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/margin"]
layout_mode = 2
disabled = true
button_pressed = true
text = "show Navigation Buttons"
[node name="GridContainer" type="GridContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2"]
@ -188,6 +311,7 @@ layout_mode = 2
[node name="ItemList" type="OptionButton" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer"]
layout_mode = 2
size_flags_vertical = 4
disabled = true
item_count = 5
selected = 1
popup/item_0/text = "messy handwriting"
@ -206,12 +330,13 @@ layout_mode = 2
text = "Subtitles:"
[node name="VSeparator2" type="VSeparator" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer"]
custom_minimum_size = Vector2(30, 0)
custom_minimum_size = Vector2(30, 60)
layout_mode = 2
[node name="ItemList2" type="OptionButton" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer"]
layout_mode = 2
size_flags_vertical = 4
disabled = true
item_count = 3
selected = 1
popup/item_0/text = "none"
@ -221,6 +346,19 @@ popup/item_1/id = 1
popup/item_2/text = "text and audio"
popup/item_2/id = 2
[node name="Label3" type="Label" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer"]
layout_mode = 2
text = "UI scale:"
[node name="VSeparator3" type="VSeparator" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer"]
custom_minimum_size = Vector2(30, 60)
layout_mode = 2
[node name="HSlider" type="HSlider" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer"]
custom_minimum_size = Vector2(0, 60)
layout_mode = 2
editable = false
[node name="navbuttons" type="VSplitContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility"]
layout_mode = 2
size_flags_horizontal = 4
@ -270,9 +408,9 @@ text = "Music"
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
max_value = 2.0
max_value = 1.0
step = 0.05
value = 1.0
value = 0.5
ticks_on_borders = true
script = ExtResource("3_q2gbh")
@ -284,9 +422,9 @@ text = "Sounds"
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
max_value = 2.0
max_value = 1.0
step = 0.05
value = 1.0
value = 0.5
[node name="Label4" type="Label" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Audio Settings/VBoxContainer/GridContainer"]
layout_mode = 2
@ -297,9 +435,22 @@ text = "Speech
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
max_value = 2.0
max_value = 1.0
step = 0.05
value = 1.0
value = 0.5
[node name="Label5" type="Label" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Audio Settings/VBoxContainer/GridContainer"]
layout_mode = 2
text = "Sum
"
[node name="Sum" type="HSlider" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Audio Settings/VBoxContainer/GridContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 4
max_value = 1.0
step = 0.05
value = 0.5
[node name="Audio Sliders" type="HBoxContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Audio Settings/VBoxContainer"]
layout_mode = 2
@ -441,13 +592,18 @@ You can always choose to just get a neutral summary of scenes or skip them entir
[/ul]"
fit_content = true
[node name="CheckBox" type="CheckBox" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer5/VBoxContainer"]
[node name="content_notes" type="CheckBox" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer5/VBoxContainer"]
layout_mode = 2
text = "show content notes relevant to the current context"
text = "show content notes during the game"
[node name="CheckBox2" type="CheckBox" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer5/VBoxContainer"]
[node name="allow_skipping" type="CheckBox" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer5/VBoxContainer"]
layout_mode = 2
text = "prompt me with content notes before playing a scene"
text = "allow me to skip scenes"
[node name="provide_summary" type="CheckBox" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer5/VBoxContainer"]
layout_mode = 2
disabled = true
text = "Provide me with an optional neutral summary when skipping a scene."
[node name="navbuttons" type="VSplitContainer" parent="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes"]
layout_mode = 2
@ -519,6 +675,7 @@ size_flags_vertical = 8
text = "skip all"
[node name="CheckBox" type="CheckBox" parent="continue"]
visible = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
@ -533,13 +690,30 @@ grow_horizontal = 2
grow_vertical = 2
text = "I stream this game, please show content notes."
[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/Screenreader" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer" method="_on_screenreader_toggled"]
[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/margin2/show nav buttons" to="." method="_on_disable_rendering_toggled"]
[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/simplified controls" to="." method="_on_simplified_controls_toggled"]
[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/margin/show nav ui" to="." method="_on_show_nav_ui_toggled"]
[connection signal="item_selected" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer/ItemList" to="." method="_on_font_style_selected"]
[connection signal="item_selected" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/Container2/GridContainer/ItemList2" to="." method="_on_subtitle_option_selected"]
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/navbuttons/Next" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer" method="next"]
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/physical Accessibility/navbuttons/previous" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer" method="previous"]
[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Audio Settings/VBoxContainer/CheckBox" to="." method="_on_mute_soundtrack_toggled"]
[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Audio Settings/VBoxContainer/CheckBox2" to="." method="_on_mute_sfx_toggled"]
[connection signal="value_changed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Audio Settings/VBoxContainer/GridContainer/Music" to="." method="_on_music_volume_changed"]
[connection signal="value_changed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Audio Settings/VBoxContainer/GridContainer/Sounds" to="." method="_on_sfx_volume_changed"]
[connection signal="value_changed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Audio Settings/VBoxContainer/GridContainer/Speech" to="." method="_on_text_volume_changed"]
[connection signal="value_changed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Audio Settings/VBoxContainer/GridContainer/Sum" to="." method="_on_master_volume_changed"]
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Audio Settings/navbuttons/Next" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer" method="next"]
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Audio Settings/navbuttons/previous" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer" method="previous"]
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/show content Notes" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes" method="show"]
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/show content Notes" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/show content Notes" method="set_disabled" binds= [true]]
[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer5/VBoxContainer/content_notes" to="." method="_on_content_notes_toggled"]
[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer5/VBoxContainer/allow_skipping" to="." method="_on_provide_summaries_toggled"]
[connection signal="toggled" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/ScrollContainer/Content Notes/VBoxContainer5/VBoxContainer/provide_summary" to="." method="_on_allow_skipping_toggled"]
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/navbuttons/Next" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer" method="next"]
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Content Notes/navbuttons/previous" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer" method="previous"]
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Managing Expectations/navbuttons/Next" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer" method="next"]
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Managing Expectations/navbuttons/Next" to="." method="hide"]
[connection signal="pressed" from="CenterContainer/PanelContainer/VBoxContainer/TabContainer/Managing Expectations/navbuttons/previous" to="CenterContainer/PanelContainer/VBoxContainer/TabContainer" method="previous"]
[connection signal="pressed" from="continue" to="." method="hide"]
[connection signal="toggled" from="continue/CheckBox" to="." method="_on_streaming_notes_toggled"]

View File

@ -1,6 +1,5 @@
[gd_scene load_steps=10 format=3 uid="uid://befxf8uruwnrl"]
[gd_scene load_steps=9 format=3 uid="uid://befxf8uruwnrl"]
[ext_resource type="Texture2D" uid="uid://balmcptv73l2j" path="res://dev-util/menu_background.png" id="1_0oiki"]
[ext_resource type="PackedScene" uid="uid://gldtxysavetf" path="res://logic-scenes/startup/startup.tscn" id="1_v5rpm"]
[ext_resource type="PackedScene" uid="uid://b3b0gyvklqn50" path="res://base-environments/youth_room/youth_room.tscn" id="2_23ia3"]
[ext_resource type="Theme" uid="uid://b056fn288p8ha" path="res://logic-scenes/themes/messy.theme" id="3_8hrj7"]
@ -13,21 +12,12 @@
[sub_resource type="GDScript" id="GDScript_8sq0u"]
script/source = "extends Label
func _process(delta):
func _process(_delta):
text = str(Engine.get_frames_per_second())
"
[node name="root" type="Node3D"]
[node name="MenuBackground" type="TextureRect" parent="."]
visible = false
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("1_0oiki")
[node name="youth room" parent="." instance=ExtResource("2_23ia3")]
[node name="Main Menu" type="Panel" parent="."]
@ -76,7 +66,6 @@ offset_bottom = 35.0
script = SubResource("GDScript_8sq0u")
[node name="Startup Menu" parent="." instance=ExtResource("1_v5rpm")]
visible = false
[node name="Disclaimer" parent="." instance=ExtResource("7_t45fc")]

View File

@ -12,8 +12,11 @@ config_version=5
config/name="Frame of Mind"
run/main_scene="res://main.tscn"
config/features=PackedStringArray("4.0", "Forward Plus")
config/features=PackedStringArray("4.1", "Forward Plus")
run/max_fps=60
boot_splash/bg_color=Color(0.0313726, 0.0117647, 0.129412, 1)
boot_splash/image="res://splash.png"
boot_splash/fullsize=false
config/icon="res://icon.png"
[autoload]
@ -77,7 +80,7 @@ player_backwards={
}
mouse_left={
"deadzone": 0.5,
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"pressed":false,"double_click":false,"script":null)
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
]
}
look_right={
@ -100,6 +103,12 @@ look_down={
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":3,"axis_value":1.0,"script":null)
]
}
skip={
"deadzone": 0.5,
"events": [null, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":88,"key_label":0,"unicode":120,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":2,"pressure":0.0,"pressed":true,"script":null)
]
}
[layer_names]

View File

@ -1,15 +1,15 @@
extends Node
var screen_reader:bool = false
var disable_rendering: bool = false
var simplified_navigation:bool = false
var show_navigation_buttons: bool = false
var enable_subtitles: bool = false
var enable_closed_caption: bool = false
var reduce_motion: bool = false
var streaming_content_notes: bool = false
var show_content_notes: bool = false
var provide_summaries: bool = false
# For Startup Scene:
var screen_reader:bool = false # Screenreader
var disable_rendering: bool = false # show nav button
var simplified_navigation:bool = false # simplified controls
var show_navigation_buttons: bool = false # show nav ui
var enable_subtitles: bool = false # ItemList2
var enable_closed_caption: bool = false # ItemList2
var reduce_motion: bool = false # ?
var streaming_content_notes: bool = false # continue/CheckBox
var show_content_notes: bool = false # ContentNotes/.../Checkbox
var provide_summaries: bool = false # ContentNotes/.../Checkbox2
var allow_skipping: bool = false
var stage_list:Array = []
@ -24,6 +24,7 @@ func _ready():
# Intented for use when an actor wants focus for itself, can reclaim focus, thus dropping the stack that focused.
func take_stage(actor: Object, reclaim: bool = false) -> bool:
if lock_focus: return false
if reclaim:
stage_list.front().has_stage = false
if stage_list.has(actor):
@ -36,11 +37,11 @@ func take_stage(actor: Object, reclaim: bool = false) -> bool:
# Element no longer wants focus, if Element itself is also dropped, this option can be chosen aswell.
func leave_stage(actor:Object, dropObject: bool = false) -> bool:
if lock_focus or get_tree().paused:
push_error(actor, " wanted to drop focus while it was locked or tree is paused.")
if get_tree().paused:
push_error(actor, " wanted to drop focus while tree is paused.")
if not dropObject: actor.has_stage = false
lock_focus = false
stage_list.erase(actor)
if stage_list != []:
@ -53,10 +54,10 @@ func leave_stage(actor:Object, dropObject: bool = false) -> bool:
func get_current_actor(): return stage_list.front()
# Used to put a new target on top of the Focus Stack.
func pass_stage_to(target:Object) -> bool:
func pass_stage_to(target:Object, force = false) -> bool:
if "pass_to_actor" in target:
pass_stage_to(target.pass_to_actor)
if lock_focus or get_tree().paused:
if (lock_focus or get_tree().paused) and not force:
push_error(target, " requested focus while it was locked or tree is paused.")
elif !is_instance_valid(target):
push_error("Focus instance not valid")
@ -77,13 +78,28 @@ func pass_stage_to(target:Object) -> bool:
# Currently focused element loses focus, but remains in stack.
func free_focus():
if lock_focus: return false
if stage_list.size() > 0: stage_list.front().has_stage = false
func transition_stage_to(thief: Object):
if stage_list.size() > 0:
if stage_list.front().has_stage:
stage_list.pop_front().has_stage = false
return pass_stage_to(thief)
return pass_stage_to(thief, true)
func queue_for_stage(target: Object, index: int = 1):
stage_list.insert(index, target)
func print_settings():
print_debug("Screenreader: ", screen_reader, " / ",
"Disable rendering: ", disable_rendering, " / ",
"Simplified controls: ", simplified_navigation, " / ",
"Show navigation buttons: ", show_navigation_buttons, " / ",
"Enable subtitles: ", enable_subtitles, " / ",
"Enable CC: ", enable_closed_caption, " / ")

BIN
src/splash.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

34
src/splash.png.import Normal file
View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cnv7ggin2e0nk"
path="res://.godot/imported/splash.png-929ed8a00b89ba36c51789452f874c77.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://splash.png"
dest_files=["res://.godot/imported/splash.png-929ed8a00b89ba36c51789452f874c77.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@ -1,15 +1,18 @@
[gd_scene load_steps=6 format=3 uid="uid://citwb7f4dl3l1"]
[gd_scene load_steps=9 format=3 uid="uid://citwb7f4dl3l1"]
[ext_resource type="Texture2D" uid="uid://d0ucjqi8tx6vt" path="res://import/interface-elements/frame.png" id="1_picwm"]
[ext_resource type="FontFile" uid="uid://cb66e4mqysgf8" path="res://import/fonts/title_handwriting.tres" id="2_jb5y5"]
[ext_resource type="Texture2D" uid="uid://bwicl5q0lw06q" path="res://import/interface-elements/bottom.png" id="3_oob40"]
[ext_resource type="PackedScene" uid="uid://dy5rd437h5hsw" path="res://logic-scenes/board/card.tscn" id="4_48hwg"]
[ext_resource type="PackedScene" uid="uid://vkcdj8c3ytbq" path="res://logic-scenes/board/post-it.tscn" id="5_sfuv4"]
[sub_resource type="GDScript" id="GDScript_d32iw"]
[sub_resource type="GDScript" id="GDScript_ugp0t"]
script/source = "extends Button
func _pressed():
OS.shell_open(\"https://gitlab.com/betalars/frame-of-mind/-/wikis/home\")
OS.shell_open(\"https://cryptpad.fr/form/#/2/form/view/T9XKMBPfCz85HoGGnt8nwl1OMyU18dMi7ubZZUJlBTM/\")
get_tree().quit()
"
[sub_resource type="GDScript" id="GDScript_m3ofj"]
@ -20,6 +23,14 @@ func _pressed():
OS.shell_open(\"https://gitlab.com/betalars/frame-of-mind/-/blob/main/design/contributions.md\")
"
[sub_resource type="GDScript" id="GDScript_unahj"]
script/source = "extends Button
func _on_pressed():
get_tree().quit()
"
[node name="ending" type="Panel"]
anchors_preset = 15
anchor_right = 1.0
@ -33,6 +44,7 @@ layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_right = -478.0
grow_horizontal = 2
grow_vertical = 2
@ -74,7 +86,8 @@ horizontal_alignment = 1
[node name="Label2" type="Label" parent="childhood/PanelContainer/VBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
text = "By testing the alpha, you help us make the game as good as it can get.
text = "We are sorry, that you did not yet have the ability to resolve Lisas thoughts.
By testing the alpha, you help us make the game as good as it can get.
Frame of mind is
made by betalars
@ -101,7 +114,7 @@ size_flags_horizontal = 4
theme_override_fonts/font = ExtResource("2_jb5y5")
theme_override_font_sizes/font_size = 50
text = "Quit and fill out the Survey"
script = SubResource("GDScript_d32iw")
script = SubResource("GDScript_ugp0t")
[node name="Label3" type="Label" parent="childhood/PanelContainer/VBoxContainer"]
layout_mode = 2
@ -124,3 +137,36 @@ size_flags_vertical = 8
texture = ExtResource("3_oob40")
expand_mode = 2
stretch_mode = 4
[node name="card" parent="childhood/PanelContainer" instance=ExtResource("4_48hwg")]
process_mode = 4
position = Vector2(1164, 301)
text = "Lukas did not ask for consent, he didn't explain a thing, I didnt even move! Yet he dared to assume, that "
[node name="post-it" parent="childhood/PanelContainer/card" instance=ExtResource("5_sfuv4")]
position = Vector2(-61, 110)
text = "I was wet so I must have been into it"
[node name="card2" parent="childhood/PanelContainer" instance=ExtResource("4_48hwg")]
process_mode = 4
position = Vector2(1170, 589)
text = "Lukas jumped me, he didn't even explain a thing or ask consent. I was confused and paralised, so "
[node name="post-it" parent="childhood/PanelContainer/card2" instance=ExtResource("5_sfuv4")]
position = Vector2(-61, 110)
text = "I didn't say stop"
[node name="Button" type="Button" parent="."]
layout_mode = 1
anchors_preset = 1
anchor_left = 1.0
anchor_right = 1.0
offset_left = -75.0
offset_top = 17.0
offset_right = -24.0
offset_bottom = 60.0
grow_horizontal = 0
text = "quit"
script = SubResource("GDScript_unahj")
[connection signal="pressed" from="Button" to="Button" method="_on_pressed"]