Merge commit 'd104715a3ff6e0a4768f61a5bc5ca59a46f34aa2' into development

This commit is contained in:
betalars 2025-07-21 14:37:58 +02:00
commit 3fa9e82647
110 changed files with 4383 additions and 2700 deletions

View File

@ -66,6 +66,8 @@
- [Rain on Windows, Interior](https://freesound.org/people/InspectorJ/sounds/346641/) by [InspectorJ](https://freesound.org/people/InspectorJ/) CC-BY 3.0
- [Rain and thunder](https://freesound.org/people/MrAuralization/sounds/241294/) by [MrAuralization](https://freesound.org/people/MrAuralization/) CC-BY 3.0
- [Heavy Thunder Strike - no Rain - QUADRO](https://freesound.org/people/BlueDelta/sounds/446753/) by [BlueDelta](https://freesound.org/people/BlueDelta/) CC-BY 3.0
- [SUBWAY_02](https://freesound.org/people/Manicciola/sounds/173311/) by [Manicciola](https://freesound.org/people/Manicciola/), CC-BY 3.0
- [harbour waves calm 01](https://freesound.org/people/klankbeeld/sounds/169181) by [klankbeeld](https://freesound.org/people/klankbeeld/), CC-BY 3.0
## Fonts all using OFL

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 323 KiB

After

Width:  |  Height:  |  Size: 133 KiB

BIN
design/steam-assets/got_therapy.jpg (Stored with Git LFS) Normal file

Binary file not shown.

BIN
design/steam-assets/need_therapy.jpg (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=44 format=3 uid="uid://dgxujvk66rka6"]
[gd_scene load_steps=48 format=3 uid="uid://dgxujvk66rka6"]
[ext_resource type="PackedScene" uid="uid://cb4m4oe32guqi" path="res://base-environments/transition/import/first_station.glb" id="1_yerc2"]
[ext_resource type="Shader" uid="uid://sxauef61xfpx" path="res://base-environments/transition/time_sparks.gdshader" id="2_4y17u"]
@ -13,6 +13,8 @@
[ext_resource type="Material" uid="uid://d3rfe7mryshj1" path="res://base-environments/transition/import/next_room_peak.tres" id="11_sy31e"]
[ext_resource type="PackedScene" uid="uid://dotekvpr6rytk" path="res://base-environments/transition/import/subway_train.glb" id="12_dgbje"]
[ext_resource type="VoxelGIData" uid="uid://fjy2ca233sp4" path="res://base-environments/transition/subway_car_gi.res" id="13_f5y2f"]
[ext_resource type="AudioStream" uid="uid://cr77al1x73vyb" path="res://base-environments/transition/vfx/harbour waves calm 01.mp3" id="14_awhi4"]
[ext_resource type="AudioStream" uid="uid://xn5qegs2ckea" path="res://base-environments/transition/vfx/SUBWAY_02.ogg" id="15_iyklq"]
[sub_resource type="ViewportTexture" id="ViewportTexture_sjsoq"]
viewport_path = NodePath("first_station/MeshInstance3D/SubViewport")
@ -192,10 +194,58 @@ tracks/3/keys = {
"update": 0,
"values": [Color(0.0748178, 0.134808, 0.168364, 1)]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../Control/Sprite2D:self_modulate")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../GPUParticles3D:emitting")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("../AudioStreamPlayer2:volume_db")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("../AudioStreamPlayer:volume_db")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.0]
}
[sub_resource type="Animation" id="Animation_irpux"]
resource_name = "trailer"
length = 10.0
length = 15.0
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
@ -203,10 +253,10 @@ tracks/0/path = NodePath(".:position")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 1.79, 4.23333, 9.76667),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"times": PackedFloat32Array(0.633329, 2.42333, 4.86666, 10.4333, 14.6999),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
"update": 0,
"values": [Vector3(0.785, 2.75, -0.535), Vector3(0.89, 1.895, -1.695), Vector3(0.82, 1.245, -2.975), Vector3(0.82, 1.11, -5.74)]
"values": [Vector3(0.785, 2.75, -0.535), Vector3(0.89, 1.895, -1.695), Vector3(0.82, 1.245, -2.975), Vector3(0.82, 1.11, -5.74), Vector3(1.525, 1.12, -8.26)]
}
tracks/1/type = "value"
tracks/1/imported = false
@ -215,10 +265,10 @@ tracks/1/path = NodePath(".:rotation")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.28, 2.9, 3.92, 5, 6.50333, 9.2),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1),
"times": PackedFloat32Array(0.913329, 3.53333, 4.55333, 5.63333, 7.13666, 9.83333, 12.1705, 14.8928),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1),
"update": 0,
"values": [Vector3(-1.0472, 0, 0), Vector3(-0.671952, 0, 0), Vector3(-0.593412, 0, 0), Vector3(-0.125664, -0.701622, 0.0785398), Vector3(-0.125664, 0.235619, -0.0523599), Vector3(0, -0.235619, 0)]
"values": [Vector3(-1.0472, 0, 0), Vector3(-0.671952, 0, 0), Vector3(-0.593412, 0, 0), Vector3(-0.125664, -0.701622, 0.0785398), Vector3(-0.125664, 0.235619, -0.0523599), Vector3(0, -0.235619, 0), Vector3(0, -2.26718, -0.127409), Vector3(0, -0.235619, 0)]
}
tracks/2/type = "value"
tracks/2/imported = false
@ -227,7 +277,7 @@ tracks/2/path = NodePath("../MeshInstance3D:material_override:emission_energy_mu
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(4.06, 9.98),
"times": PackedFloat32Array(4.69333, 10.6133),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [1.0, 3.0]
@ -239,11 +289,89 @@ tracks/3/path = NodePath("../MeshInstance3D:material_override:emission")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(4.06, 10),
"times": PackedFloat32Array(8.2, 10.6333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(0.0748178, 0.134808, 0.168364, 1), Color(1, 1, 1, 1)]
}
tracks/4/type = "audio"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../AudioStreamPlayer")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"clips": [{
"end_offset": 0.0,
"start_offset": 0.0,
"stream": ExtResource("14_awhi4")
}],
"times": PackedFloat32Array(0.0666667)
}
tracks/4/use_blend = true
tracks/5/type = "audio"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../AudioStreamPlayer2")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"clips": [{
"end_offset": 0.0,
"start_offset": 0.664513,
"stream": ExtResource("15_iyklq")
}],
"times": PackedFloat32Array(0.076102)
}
tracks/5/use_blend = true
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("../Control/Sprite2D:self_modulate")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0.533333, 3.7, 13.3494, 14.3),
"transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0), Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("../GPUParticles3D:emitting")
tracks/7/interp = 0
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0.3, 7.26164),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [false, true]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("../AudioStreamPlayer2:volume_db")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(13.8333, 15),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.0, -80.0]
}
tracks/9/type = "value"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("../AudioStreamPlayer:volume_db")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(13.8667, 15),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.0, -80.0]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_sy31e"]
_data = {
@ -294,8 +422,15 @@ emission_enabled = true
emission = Color(1, 0, 0, 1)
emission_energy_multiplier = 10.0
[sub_resource type="Gradient" id="Gradient_ckmi5"]
colors = PackedColorArray(0, 0, 0, 1, 0, 0, 0, 1)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_iyklq"]
gradient = SubResource("Gradient_ckmi5")
width = 100
height = 100
[node name="Node3D" type="Node3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.252546, 0.415653, 0.0961766)
[node name="first_station" parent="." instance=ExtResource("1_yerc2")]
@ -473,6 +608,7 @@ spot_angle_attenuation = 0.517633
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.8785, 1.08384, -32.4645)
sorting_offset = 100.0
material_override = SubResource("ShaderMaterial_4tj6b")
emitting = false
amount = 10
lifetime = 10.0
explosiveness = 0.5
@ -484,6 +620,7 @@ draw_pass_1 = SubResource("QuadMesh_oo2l3")
[node name="GPUParticles3D2" type="GPUParticles3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.65518, 1.08384, -32.4645)
visible = false
sorting_offset = 100.0
material_override = SubResource("ShaderMaterial_4tj6b")
amount = 5
@ -496,14 +633,15 @@ process_material = SubResource("ParticleProcessMaterial_hvcdc")
draw_pass_1 = SubResource("QuadMesh_oo2l3")
[node name="VoxelGI" type="VoxelGI" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.61825, -33.3675)
subdiv = 3
size = Vector3(20, 10.4688, 124.604)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.53159, -32.7307)
subdiv = 2
size = Vector3(20, 7.1879, 99.7711)
camera_attributes = SubResource("CameraAttributesPractical_f5y2f")
data = ExtResource("4_nmgvo")
[node name="GPUParticles3D3" type="GPUParticles3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.18283, 0.258846, -32.3954)
visible = false
material_override = ExtResource("5_32vcv")
amount = 1000
lifetime = 1.5
@ -518,6 +656,7 @@ draw_pass_1 = SubResource("PlaneMesh_8c2us")
[node name="GPUParticles3D4" type="GPUParticles3D" parent="."]
transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, -6.80088, 0.258846, -32.3954)
visible = false
material_override = ExtResource("5_32vcv")
gi_mode = 2
visibility_range_begin_margin = 1.0
@ -560,7 +699,8 @@ autoplay = "trailer"
material_override = ExtResource("11_sy31e")
[node name="subway_train" parent="." instance=ExtResource("12_dgbje")]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -20.3734, -0.125, -8.52174)
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -6.44337, -0.125, -8.52174)
visible = false
[node name="VoxelGI" type="VoxelGI" parent="subway_train"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -25.5427, 1.26147, 5.72205e-06)
@ -614,3 +754,24 @@ skeleton = NodePath("../MeshInstance3D2")
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.66292, -0.4523, -24.7506)
visible = false
material_override = SubResource("StandardMaterial3D_dgbje")
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
autoplay = true
mix_target = 1
bus = &"waves"
[node name="AudioStreamPlayer2" type="AudioStreamPlayer3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.91435, 0, -13.0111)
autoplay = true
panning_strength = 0.9
bus = &"waves"
[node name="Control" type="Control" parent="."]
layout_mode = 3
anchors_preset = 0
offset_right = 40.0
offset_bottom = 40.0
[node name="Sprite2D" type="Sprite2D" parent="Control"]
scale = Vector2(100, 100)
texture = SubResource("GradientTexture2D_iyklq")

View File

@ -5,7 +5,7 @@ render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_burley, specular_sc
uniform sampler2D spray_texture;
uniform sampler2D lifetime_gradient;
uniform sampler2D SCREEN_TEXTURE: hint_screen_texture, repeat_disable;
//uniform sampler2D SCREEN_TEXTURE: hint_screen_texture, repeat_disable;
varying vec4 passtrough;
varying vec2 screen_pos;
@ -71,7 +71,7 @@ void fragment() {
//EMISSION = COLOR.xyz * max(0, (1.5-pow(passtrough.y, 0.3)*2.0));
//EMISSION = texture(SCREEN_TEXTURE, (SCREEN_UV - screen_pos) * 2.0 + screen_pos).xyz;
EMISSION = sample_blurred(SCREEN_TEXTURE, screen_pos, 4, 0.3, 6.0).xyz;
//EMISSION = sample_blurred(SCREEN_TEXTURE, screen_pos, 4, 0.3, 6.0).xyz;
//EMISSION = pow(textureLod(SCREEN_TEXTURE, screen_pos.xy, 6.0).xyz, vec3(2.2));
}

View File

@ -0,0 +1,7 @@
class_name Station extends Resource
@export var station_name: StringName = ""
@export var memory: Scenes.id = Scenes.id.YOUTH_DRAEVEN
@export_file("*.tscn") var station_path: String = ""
@export var shedule: Dictionary[float, int]
@export var announcement: AudioStream

View File

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

View File

@ -0,0 +1,4 @@
extends RoomTemplate
@export var all_stations: Array[Station] = []
@export var all_lines: Array[TrainLine] = []

View File

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

View File

@ -0,0 +1,12 @@
class_name TrainLine extends Resource
enum id {
NONE,
RING,
}
@export var train_id: id = 0
@export var destination: StringName = ""
@export var via: StringName = ""
@export var stops: Array[Station] = []

View File

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

BIN
src/base-environments/transition/vfx/SUBWAY_02.ogg (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://xn5qegs2ckea"
path="res://.godot/imported/SUBWAY_02.ogg-2ae5d2bec8bfd5a2fb463e110e465b7e.oggvorbisstr"
[deps]
source_file="res://base-environments/transition/vfx/SUBWAY_02.ogg"
dest_files=["res://.godot/imported/SUBWAY_02.ogg-2ae5d2bec8bfd5a2fb463e110e465b7e.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View File

@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://cr77al1x73vyb"
path="res://.godot/imported/harbour waves calm 01.mp3-97b3d792df09eee82f7978014c78aa7a.mp3str"
[deps]
source_file="res://base-environments/transition/vfx/harbour waves calm 01.mp3"
dest_files=["res://.godot/imported/harbour waves calm 01.mp3-97b3d792df09eee82f7978014c78aa7a.mp3str"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

Binary file not shown.

View File

@ -0,0 +1,36 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bji6drfnvgv3j"
path.s3tc="res://.godot/imported/bing_bong.png-881e8f37088d32717048d5c13acb0de0.s3tc.ctex"
path.etc2="res://.godot/imported/bing_bong.png-881e8f37088d32717048d5c13acb0de0.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
[deps]
source_file="res://base-environments/volunteer_room/import/textures/bing_bong.png"
dest_files=["res://.godot/imported/bing_bong.png-881e8f37088d32717048d5c13acb0de0.s3tc.ctex", "res://.godot/imported/bing_bong.png-881e8f37088d32717048d5c13acb0de0.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
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=0

Binary file not shown.

View File

@ -0,0 +1,36 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://nu02kjr4xq3d"
path.s3tc="res://.godot/imported/gem-normal.png-171f0a49d8783557eab6cac24e7f5395.s3tc.ctex"
path.etc2="res://.godot/imported/gem-normal.png-171f0a49d8783557eab6cac24e7f5395.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
[deps]
source_file="res://base-environments/volunteer_room/import/textures/gem-normal.png"
dest_files=["res://.godot/imported/gem-normal.png-171f0a49d8783557eab6cac24e7f5395.s3tc.ctex", "res://.godot/imported/gem-normal.png-171f0a49d8783557eab6cac24e7f5395.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
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=0

Binary file not shown.

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d0o4bf3igb2xo"
path="res://.godot/imported/stickerbomb.png-81acf2412df167480df12c7cbda3c2c6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://base-environments/volunteer_room/import/textures/stickerbomb.png"
dest_files=["res://.godot/imported/stickerbomb.png-81acf2412df167480df12c7cbda3c2c6.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

@ -0,0 +1,13 @@
shader_type spatial;
render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_burley, specular_schlick_ggx;
uniform sampler2D texture_albedo : source_color, filter_nearest, repeat_enable;
uniform float roughness : hint_range(0.0, 1.0);
uniform sampler2D texture_normal_detail : hint_default_white, filter_linear_mipmap, repeat_enable;
void fragment() {
ALBEDO = texture(texture_albedo, UV).xyz * texture(texture_normal_detail, UV * vec2(336.*.125,278.*.125)).w;
NORMAL = texture(texture_normal_detail, UV * vec2(336.*.125,278.*.125)).xyz;
ROUGHNESS = .2;
}

View File

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

View File

@ -10,7 +10,6 @@ var revealed: bool = false:
revealed = reveal
if reveal:
wrapper.show()
ui.reveal()
else:
ui.vanish()
await get_tree().create_timer(1).timeout
@ -33,12 +32,17 @@ func _on_mouse_exited():
ui.is_collapsed = true
has_mouse = false
func reveal():
revealed = true
# TODO: needs to check if it has mouse or player collider!
await get_tree().create_timer(10.0).timeout
if not has_mouse:
revealed = false
func try_reveal(for_player: Player) -> bool:
print("reveal ui!")
revealed = ui.try_reveal()
if revealed:
call_deferred("wait_for_ui_exit", for_player)
return revealed
func wait_for_ui_exit(for_player: Player):
await for_player.ui_exited
collapse()
func collapse():
_on_mouse_exited()

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://dc0cd7dvod7wg"
path="res://.godot/imported/FoM_Lisa_Kindheit_Jui_Jutsu_deutsch_newt.wav-fa9b662f24546f6a75513eb3aa4a2061.sample"
[deps]
source_file="res://base-environments/youth_room/audio/FoM_Lisa_Kindheit_Jui_Jutsu_deutsch_newt.wav"
dest_files=["res://.godot/imported/FoM_Lisa_Kindheit_Jui_Jutsu_deutsch_newt.wav-fa9b662f24546f6a75513eb3aa4a2061.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://b5d4c6n2mw02s"
path="res://.godot/imported/FoM_Lisa_Kindheit_TheaterAG_Deutsch_newt.wav-bc3db9689062d7d5c89c4d6067a32d7a.sample"
[deps]
source_file="res://base-environments/youth_room/audio/FoM_Lisa_Kindheit_TheaterAG_Deutsch_newt.wav"
dest_files=["res://.godot/imported/FoM_Lisa_Kindheit_TheaterAG_Deutsch_newt.wav-bc3db9689062d7d5c89c4d6067a32d7a.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://dupcfwi54fpjx"
path="res://.godot/imported/FoM_Lisa_Kindheit_Voice_Acting_deutsch_newt.wav-53819151e4b2cdc900dec4e093ee3dad.sample"
[deps]
source_file="res://base-environments/youth_room/audio/FoM_Lisa_Kindheit_Voice_Acting_deutsch_newt.wav"
dest_files=["res://.godot/imported/FoM_Lisa_Kindheit_Voice_Acting_deutsch_newt.wav-53819151e4b2cdc900dec4e093ee3dad.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

BIN
src/base-environments/youth_room/audio/board_completed.wav (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://bywmf3patoe56"
path="res://.godot/imported/board_completed.wav-5729ec7ec6afa4c9611784f034fcb0d1.sample"
[deps]
source_file="res://base-environments/youth_room/audio/board_completed.wav"
dest_files=["res://.godot/imported/board_completed.wav-5729ec7ec6afa4c9611784f034fcb0d1.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://bgtohhyd8whbm"
path="res://.godot/imported/board_completed_de.wav-55f9cea3167235e42e73664c3c3b4b28.sample"
[deps]
source_file="res://base-environments/youth_room/audio/board_completed_de.wav"
dest_files=["res://.godot/imported/board_completed_de.wav-55f9cea3167235e42e73664c3c3b4b28.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

BIN
src/base-environments/youth_room/audio/board_incomplete.wav (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://dj8fpajqhj4k7"
path="res://.godot/imported/board_incomplete.wav-49b228daaa12eb0be66520e1d2f3a349.sample"
[deps]
source_file="res://base-environments/youth_room/audio/board_incomplete.wav"
dest_files=["res://.godot/imported/board_incomplete.wav-49b228daaa12eb0be66520e1d2f3a349.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://swlo6elqs4vx"
path="res://.godot/imported/board_incomplete_de.wav-48605bd9d84421a768280982b861fa50.sample"
[deps]
source_file="res://base-environments/youth_room/audio/board_incomplete_de.wav"
dest_files=["res://.godot/imported/board_incomplete_de.wav-48605bd9d84421a768280982b861fa50.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

BIN
src/base-environments/youth_room/audio/board_unfitting.wav (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://brolrc3lhaeid"
path="res://.godot/imported/board_unfitting.wav-afbf1c6abdc3ac1e4cd8ff645b647e50.sample"
[deps]
source_file="res://base-environments/youth_room/audio/board_unfitting.wav"
dest_files=["res://.godot/imported/board_unfitting.wav-afbf1c6abdc3ac1e4cd8ff645b647e50.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://y8fg3wjscvci"
path="res://.godot/imported/board_unfitting_de.wav-710ce6bfcb0548979414d8ee42ba62d8.sample"
[deps]
source_file="res://base-environments/youth_room/audio/board_unfitting_de.wav"
dest_files=["res://.godot/imported/board_unfitting_de.wav-710ce6bfcb0548979414d8ee42ba62d8.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://tbx31bdlhbtr"
path="res://.godot/imported/why-does-it-mean_de.wav-e8cf9c54b25ca486f2d467ef85cdc195.sample"
[deps]
source_file="res://base-environments/youth_room/audio/why-does-it-mean_de.wav"
dest_files=["res://.godot/imported/why-does-it-mean_de.wav-e8cf9c54b25ca486f2d467ef85cdc195.sample"]
[params]
force/8_bit=false
force/mono=false
force/max_rate=false
force/max_rate_hz=44100
edit/trim=false
edit/normalize=false
edit/loop_mode=0
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

Binary file not shown.

View File

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://iyd3561b7vdd"
path="res://.godot/imported/bad-grades.png-406d218979c34bc281fa29c69b5cd3e8.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://base-environments/youth_room/import/textures/bad-grades.png"
dest_files=["res://.godot/imported/bad-grades.png-406d218979c34bc281fa29c69b5cd3e8.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

@ -3,7 +3,7 @@ extends RoomTemplate
signal ini_room
@onready var board_trigger: InteractiveSprite = %MindBoard
@onready var door_trigger: InteractiveSprite = %DoorTrigger
@onready var door_trigger: InteractiveSprite = %Door
@onready var card_board: CardBoard = %Board
@onready var card_picker: CardPicker = %Picker
@ -13,6 +13,9 @@ func start_room():
Scenes.completed_sequences = save_game.mementos_complete
Scenes.started_sequences = save_game.mementos_complete
card_board.initialise_from_save(save_game)
card_board.board_completed.connect(func():
save_game.is_childhood_board_complete = true
save_room())
$logic/PlayerController.process_mode = Node.PROCESS_MODE_INHERIT
ini_room.emit()
if not Scenes.is_sequence_repeating(Scenes.id.YOUTH_DRAEVEN):
@ -46,3 +49,10 @@ func pull_save_state(save: SaveGame) -> void:
func _on_scene_finished(id: int, _repeat:bool):
await get_tree().create_timer(3).timeout
save_room()
func prepare_transition():
save_room()
$AnimationPlayer.play("conserve_performance")
func unload():
$visuals.queue_free()

View File

@ -1,12 +1,12 @@
[gd_scene load_steps=20 format=3 uid="uid://c3l8tm8ku50vt"]
[gd_scene load_steps=21 format=3 uid="uid://c3l8tm8ku50vt"]
[ext_resource type="Script" uid="uid://cb1d5cwtgllvq" path="res://base-environments/youth_room/scnees/scene_player.gd" id="1_40hhx"]
[ext_resource type="Texture2D" uid="uid://d0ucjqi8tx6vt" path="res://import/interface-elements/frame.png" id="1_bkq30"]
[ext_resource type="ArrayMesh" uid="uid://bfc3d4g40n0wy" path="res://logic-scenes/collectable/import/old-mask.res" id="2_jrxfv"]
[ext_resource type="Texture2D" uid="uid://bwicl5q0lw06q" path="res://import/interface-elements/bottom.png" id="3_o63m7"]
[ext_resource type="PackedScene" uid="uid://dvwuhobhka78d" path="res://logic-scenes/misc/skip_control.tscn" id="4_q0fee"]
[ext_resource type="AudioStream" uid="uid://b3cw0e41rjggo" path="res://base-environments/youth_room/audio/childhood_de.wav" id="6_wyhdp"]
[ext_resource type="AudioStream" uid="uid://dfblaqsfgm8le" path="res://base-environments/youth_room/audio/Childhood.wav" id="7_51c6s"]
[ext_resource type="AudioStream" uid="uid://b5d4c6n2mw02s" path="res://base-environments/youth_room/audio/FoM_Lisa_Kindheit_TheaterAG_Deutsch_newt.wav" id="7_htg3l"]
[ext_resource type="Script" uid="uid://c1oub0cs7cph6" path="res://dev-util/stereo-switch.gd" id="8_51c6s"]
[sub_resource type="ViewportTexture" id="ViewportTexture_1k8vs"]
@ -136,126 +136,6 @@ tracks/5/keys = {
"values": [Color(1, 1, 1, 1)]
}
[sub_resource type="Animation" id="Animation_bgeog"]
resource_name = "de"
length = 94.0
tracks/0/type = "audio"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("%AnimationPlayer/Text")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"clips": [{
"end_offset": 0.0,
"start_offset": 0.0,
"stream": ExtResource("6_wyhdp")
}],
"times": PackedFloat32Array(1.3)
}
tracks/0/use_blend = true
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../../..:progress")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1.66667, 6.13333, 7.43333, 13.5, 14.5667, 19.1333, 19.5333, 22.7333, 25.6333, 27.3333, 28.8, 32.7333, 34.8667, 36.6275, 37.7667, 46.2333, 47.5667, 49.4667, 50.8333, 54.6667, 56.3, 60.4667, 61.8333, 68.2028, 69.5667, 72.4, 74.5, 78.493, 80.2, 84.033, 85.3, 88.0997, 89.6667),
"transitions": PackedFloat32Array(1, 0.482968, 1, 0.482968, 1, 0.482968, 1, 0.482968, 1, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968),
"update": 0,
"values": [0.0, 0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 5.0, 5.0, 6.0, 6.0, 7.0, 7.0, 9.0, 9.0, 10.0, 10.0, 11.0, 11.0, 12.0, 12.0, 13.0, 13.0, 14.0, 14.0, 15.0, 15.0, 16.0, 16.0, 17.0, 17.0]
}
tracks/2/type = "method"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("../../..")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(13.3333, 24.7667, 49.7, 68.8667, 85.5, 91.3333),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1),
"values": [{
"args": [],
"method": &"try_scroll"
}, {
"args": [],
"method": &"try_scroll"
}, {
"args": [],
"method": &"try_scroll"
}, {
"args": [],
"method": &"try_scroll"
}, {
"args": [],
"method": &"try_scroll"
}, {
"args": [],
"method": &"_on_text_finished"
}]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("..:custom_minimum_size")
tracks/3/interp = 2
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.7),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(900, 800), Vector2(900, 900)]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath(".:rotation")
tracks/4/interp = 2
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0, 1.8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.174533, 0.349066]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../..:modulate")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0, 0.733333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("../../..:visible")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("../../..:modulate")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
[sub_resource type="Animation" id="Animation_7qabw"]
resource_name = "en"
length = 92.0
@ -376,6 +256,82 @@ tracks/7/keys = {
"values": [Color(1, 1, 1, 1)]
}
[sub_resource type="Animation" id="Animation_51c6s"]
resource_name = "ini"
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../../..:progress")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [17.0]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("..:custom_minimum_size")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(900, 900)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath(".:rotation")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.349066]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("../..:modulate")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../../..:visible")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../../..:modulate")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
[sub_resource type="Animation" id="Animation_x0d5q"]
resource_name = "vanish"
tracks/0/type = "value"
@ -415,11 +371,132 @@ tracks/2/keys = {
"values": [0.349066, 0.698132]
}
[sub_resource type="Animation" id="Animation_ytb2t"]
resource_name = "de"
length = 86.0
tracks/0/type = "audio"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("%AnimationPlayer/Text")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"clips": [{
"end_offset": 0.0,
"start_offset": 0.0,
"stream": ExtResource("7_htg3l")
}],
"times": PackedFloat32Array(2.5)
}
tracks/0/use_blend = true
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../../..:progress")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1.66667, 6.26666, 8.76667, 13.8, 16.0667, 20.7334, 21.6667, 26.1334, 27.4667, 29.5333, 30.0333, 33.4, 34.8999, 36.5941, 37.0333, 45.3001, 45.9667, 49.0666, 50.4333, 54.4, 55.2667, 57.8334, 59.2, 65.6694, 67.0333, 70.0333, 71.0333, 73.3667, 74.9333, 78.4667, 80.1667, 84.6333),
"transitions": PackedFloat32Array(1, 0.482968, 1, 0.482968, 1, 0.482968, 1, 0.482968, 1, 1.23114, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.287175, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968),
"update": 0,
"values": [0.0, 0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 5.0, 5.0, 6.0, 6.0, 7.0, 7.0, 9.0, 9.0, 10.0, 10.0, 11.0, 11.0, 12.0, 12.0, 13.0, 13.0, 14.0, 14.0, 15.0, 15.0, 16.0, 16.0, 17.0]
}
tracks/2/type = "method"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("../../..")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(14.4333, 34.2333, 49.4667, 66.3333, 74.0404, 85.0667),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1),
"values": [{
"args": [],
"method": &"try_scroll"
}, {
"args": [],
"method": &"try_scroll"
}, {
"args": [],
"method": &"try_scroll"
}, {
"args": [],
"method": &"try_scroll"
}, {
"args": [],
"method": &"try_scroll"
}, {
"args": [],
"method": &"_on_text_finished"
}]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("..:custom_minimum_size")
tracks/3/interp = 2
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.7),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(900, 800), Vector2(900, 900)]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath(".:rotation")
tracks/4/interp = 2
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0, 1.8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.174533, 0.349066]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../..:modulate")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0, 0.733333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("../../..:visible")
tracks/6/interp = 0
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [true]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("../../..:modulate")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_dc6th"]
_data = {
&"RESET": SubResource("Animation_ytihj"),
&"de": SubResource("Animation_bgeog"),
&"de": SubResource("Animation_ytb2t"),
&"en": SubResource("Animation_7qabw"),
&"ini": SubResource("Animation_51c6s"),
&"vanish": SubResource("Animation_x0d5q")
}
@ -432,7 +509,7 @@ offset_right = -424.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_40hhx")
story_array = PackedStringArray("Oh, my old mask. I have so many good memories about theatre club. ", "I would stand on my bed for entire afternoons, weeks on end, practicing my lines. Pretending to be on the big stage ... ", "my mom would get mad at me, when she had to call me three or four times for dinner. ", "I just … didn\'t like the interruptions. We both were often mad at each other.", "Dinner was difficult.", "I just couldn\'t bring myself to eat, because I couldn\'t deal with the bread and my mom.", "She was always so worried.", " Lisa, you forgot your homework, Lisa why won\'t you play with the other girls,\"", "\"Lisa why didn\'t Steffi invite you to her birthday, Lisa this, Lisa that.", "But I was fine! She just wouldn\'t listen.", "Yes, I didn\'t do homework, but my teachers didn\'t mind it as much with me ", "- which the other kids wouldn\'t shut up about. But like …", "they also made fun of me reading school books and talking to my teachers during breaks.", "But at least I could fucking talk to teachers and they had stuff to say.", "Mr Thomas probably even understood me better than my own mom.", "He said I was gifted. He said I just didn\'t need homework for good grades.", "But at least I could fucking talk to teachers and they had stuff to say.")
story_array = PackedStringArray("Oh, my old mask. I have so many good memories about theatre club. ", "I would stand on my bed for entire afternoons, weeks on end, practicing my lines. Pretending to be on the big stage ... ", "my mom would get mad at me, when she had to call me three or four times for dinner. ", "I just … didn\'t like the interruptions. We both were often mad at each other.", "Dinner was difficult.", "I just couldn\'t bring myself to eat, because I couldn\'t deal with the bread and my mom.", "She was always so worried.", " Lisa, you forgot your homework, Lisa why won\'t you play with the other girls,\"", "\"Lisa why didn\'t Steffi invite you to her birthday, Lisa this, Lisa that.", "But I was fine! She just wouldn\'t listen.", "Yes, I didn\'t do homework, but my teachers didn\'t mind it as much with me ", "- which the other kids wouldn\'t shut up about. But like …", "they also made fun of me reading school books and talking to my teachers during breaks.", "But at least I could fucking talk to teachers and they had stuff to say.", "Mr Thomas probably even understood me better than my own mom.", "He said I was gifted. He said I just didn\'t need homework for good grades.", "And he also made sure to always include extra credits. So my silly slip-ups wouldn\'t get me a B.")
paragraph_lengths = PackedInt32Array(3, 4, 6, 9, 12, 13, 14, 16)
progress = 17.0
@ -559,7 +636,7 @@ custom_minimum_size = Vector2(800, 10)
layout_mode = 2
size_flags_horizontal = 3
bbcode_enabled = true
text = "[p]Oh, my old mask. I have so many good memories about theatre club. I would stand on my bed for entire afternoons, weeks on end, practicing my lines. Pretending to be on the big stage ... my mom would get mad at me, when she had to call me three or four times for dinner. I just … didn't like the interruptions. We both were often mad at each other. [/p][p][font_size=8] [/font_size][/p][p]Dinner was difficult. [/p][p][font_size=8] [/font_size][/p][p]I just couldn't bring myself to eat, because I couldn't deal with the bread and my mom. She was always so worried. [/p][p][font_size=8] [/font_size][/p][p]Lisa, you forgot your homework, Lisa why won't you play with the other girls,\" \"Lisa why didn't Steffi invite you to her birthday, Lisa this, Lisa that. But I was fine! She just wouldn't listen. [/p][p][font_size=8] [/font_size][/p][p]Yes, I didn't do homework, but my teachers didn't mind it as much with me - which the other kids wouldn't shut up about. But like … they also made fun of me reading school books and talking to my teachers during breaks. [/p][p][font_size=8] [/font_size][/p][p]But at least I could fucking talk to teachers and they had stuff to say. [/p][p][font_size=8] [/font_size][/p][p]Mr Thomas probably even understood me better than my own mom. [/p][p][font_size=8] [/font_size][/p][p]He said I was gifted. He said I just didn't need homework for good grades. But at least I could fucking talk to teachers and they had stuff to say. [/p][p][font_size=8] [/font_size][/p][p][/p]"
text = "[p]Oh, my old mask. I have so many good memories about theatre club. I would stand on my bed for entire afternoons, weeks on end, practicing my lines. Pretending to be on the big stage ... my mom would get mad at me, when she had to call me three or four times for dinner. I just … didn't like the interruptions. We both were often mad at each other. [/p][p][font_size=8] [/font_size][/p][p]Dinner was difficult. [/p][p][font_size=8] [/font_size][/p][p]I just couldn't bring myself to eat, because I couldn't deal with the bread and my mom. She was always so worried. [/p][p][font_size=8] [/font_size][/p][p]Lisa, you forgot your homework, Lisa why won't you play with the other girls,\" \"Lisa why didn't Steffi invite you to her birthday, Lisa this, Lisa that. But I was fine! She just wouldn't listen. [/p][p][font_size=8] [/font_size][/p][p]Yes, I didn't do homework, but my teachers didn't mind it as much with me - which the other kids wouldn't shut up about. But like … they also made fun of me reading school books and talking to my teachers during breaks. [/p][p][font_size=8] [/font_size][/p][p]But at least I could fucking talk to teachers and they had stuff to say. [/p][p][font_size=8] [/font_size][/p][p]Mr Thomas probably even understood me better than my own mom. [/p][p][font_size=8] [/font_size][/p][p]He said I was gifted. He said I just didn't need homework for good grades. And he also made sure to always include extra credits. So my silly slip-ups wouldn't get me a B. [/p][p][font_size=8] [/font_size][/p][p][/p]"
fit_content = true
scroll_active = false
visible_characters_behavior = 1
@ -582,6 +659,7 @@ root_node = NodePath("../PanelContainer/StartFrame/Panel")
libraries = {
&"": SubResource("AnimationLibrary_dc6th")
}
autoplay = "ini"
[node name="Text" type="AudioStreamPlayer" parent="AnimationPlayer"]
mix_target = 2

View File

@ -214,6 +214,21 @@ tracks/6/keys = {
"update": 1,
"values": [true]
}
tracks/7/type = "audio"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("%AnimationPlayer/Music")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"clips": [{
"end_offset": 0.0,
"start_offset": 0.0,
"stream": ExtResource("6_7f2et")
}],
"times": PackedFloat32Array(0.0333333)
}
tracks/7/use_blend = true
[sub_resource type="Animation" id="Animation_egql5"]
resource_name = "debug"
@ -352,18 +367,21 @@ tracks/6/keys = {
"update": 1,
"values": [true]
}
tracks/7/type = "value"
tracks/7/type = "audio"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("%AnimationPlayer/Music:playing")
tracks/7/path = NodePath("%AnimationPlayer/Music")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
"clips": [{
"end_offset": 0.0,
"start_offset": 0.0,
"stream": ExtResource("6_7f2et")
}],
"times": PackedFloat32Array(0.0333333)
}
tracks/7/use_blend = true
[sub_resource type="Animation" id="Animation_d2p1i"]
resource_name = "vanish"
@ -484,7 +502,9 @@ bbcode_enabled = true
text = "[p]Moonlight trickled down through clouds and twigs as Dräven tapped through the night. He had been searching for a while and he knew a special someone must be hiding in the thicket. When a familiar smell first led him to a few bronce hairs as fluffy as his tail, he didn't think much of it. [/p][p][font_size=8] [/font_size][/p][p]But then he saw paw-prints, that matched his own where he had not been. Would he finally find someone of his kind? He was sure of it, as the familiar scent has never been stronger than tonight. [/p][p][font_size=8] [/font_size][/p][p]When suddenly: Was that chatter? [/p][p][font_size=8] [/font_size][/p][p]His wings rustled with joy over the familiar voice and Dräven decided to get a better look. [/p][p][font_size=8] [/font_size][/p][p]A few flaps and leaps brought him up a tree, to get a glimpse of his soon to be friend. But all he saw was a fox. [/p][p][font_size=8] [/font_size][/p][p]He didn't even want to bother it anymore. [/p][p][font_size=8] [/font_size][/p][p]It would just scream and laugh at his wings of leafs, just like the trees crackled at his paws, that were no roots. With a small whimper, Dräven spread his wings, and slid away to at least find comfort by seeing his reflection in the nearby lake. It took him a while to notice, how there was a sudden silence when the clouds broke: [/p][p][font_size=8] [/font_size][/p][p]Northern lights danced through the sky to form wings, that met at a sleek body made of stars and clouds. The whole forest held its breath as it stared into eyes of moonlight gazing down. [/p][p][font_size=8] [/font_size][/p][p]Dräven was moved to tears when he gazed back at it. He was sad for the dragon that was of the moon and the stars and the skies. It must feel so lost in the universe. But his tears were of joy: It was the first time Dräven saw another creature of many kinds. [/p][p][font_size=8] [/font_size][/p][p][/p]"
fit_content = true
scroll_active = false
visible_characters = 0
visible_characters_behavior = 1
visible_ratio = 0.0
[node name="StartBottom" type="TextureRect" parent="PanelContainer/VBoxContainer"]
custom_minimum_size = Vector2(0, 64)

View File

@ -6,12 +6,12 @@
[ext_resource type="PackedScene" uid="uid://dvwuhobhka78d" path="res://logic-scenes/misc/skip_control.tscn" id="5_0qiyf"]
[ext_resource type="Texture2D" uid="uid://sv0nhkkur1tt" path="res://logic-scenes/board/card-textures/cardsheet.png" id="5_s5qj7"]
[ext_resource type="Texture2D" uid="uid://kpmk21d8rlso" path="res://logic-scenes/board/particle_textures/star.png" id="6_0qiyf"]
[ext_resource type="AudioStream" uid="uid://b3cw0e41rjggo" path="res://base-environments/youth_room/audio/childhood_de.wav" id="6_uqngm"]
[ext_resource type="AudioStream" uid="uid://bwh60165c3saj" path="res://base-environments/youth_room/audio/lisa_youth_voice.ogg" id="7_bvh45"]
[ext_resource type="Texture2D" uid="uid://bqilajx05t0eb" path="res://logic-scenes/board/particle_textures/void_nomotion.png" id="7_uqngm"]
[ext_resource type="AudioStream" uid="uid://dpyf2oc5vn30e" path="res://base-environments/youth_room/audio/jiu-jutsu.wav" id="9_uqngm"]
[ext_resource type="AudioStream" uid="uid://1tvopjmo6dp2" path="res://base-environments/youth_room/audio/Azure Studios - mgd-723687677.mp3" id="10_bvh45"]
[ext_resource type="Script" uid="uid://c1oub0cs7cph6" path="res://dev-util/stereo-switch.gd" id="11_0qiyf"]
[ext_resource type="AudioStream" uid="uid://dc0cd7dvod7wg" path="res://base-environments/youth_room/audio/FoM_Lisa_Kindheit_Jui_Jutsu_deutsch_newt.wav" id="11_uqngm"]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_vxads"]
radius = 110.0
@ -100,14 +100,14 @@ 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"]
[sub_resource type="GradientTexture1D" id="GradientTexture1D_uqngm"]
gradient = SubResource("Gradient_nyks3")
[sub_resource type="Curve" id="Curve_cakyx"]
_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"]
[sub_resource type="CurveTexture" id="CurveTexture_bvh45"]
curve = SubResource("Curve_cakyx")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_jikd6"]
@ -131,8 +131,8 @@ tangential_accel_max = 30.0
attractor_interaction_enabled = false
scale_min = 3.0
scale_max = 5.0
scale_curve = SubResource("CurveTexture_cg0w1")
color_ramp = SubResource("GradientTexture1D_xxq8p")
scale_curve = SubResource("CurveTexture_bvh45")
color_ramp = SubResource("GradientTexture1D_uqngm")
turbulence_noise_strength = 0.1
[sub_resource type="Animation" id="Animation_ytihj"]
@ -209,46 +209,181 @@ tracks/5/keys = {
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("%StoryScroll:scroll_vertical")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
[sub_resource type="Animation" id="Animation_bgeog"]
[sub_resource type="Animation" id="Animation_bvh45"]
resource_name = "de"
length = 94.0
length = 203.0
tracks/0/type = "audio"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../../../AnimationPlayer/Text")
tracks/0/path = NodePath("%AnimationPlayer/Text")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"clips": [{
"end_offset": 0.0,
"start_offset": 0.0,
"stream": ExtResource("6_uqngm")
"stream": ExtResource("11_uqngm")
}],
"times": PackedFloat32Array(1.3)
"times": PackedFloat32Array(2.73333)
}
tracks/0/use_blend = true
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../../..:progress")
tracks/1/path = NodePath("../../..:modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1.66667, 6.13333, 7.43333, 13.5, 14.5667, 19.1333, 19.5333, 22.7333, 25.6333, 27.3333, 28.8, 32.7333, 34.8667, 36.6275, 37.7667, 46.2333, 47.5667, 49.4667, 50.8333, 54.6667, 56.3, 60.4667, 61.8333, 68.2028, 69.5667, 72.4, 74.5, 78.493, 80.2, 84.033, 85.3, 88.0997, 89.6667),
"transitions": PackedFloat32Array(1, 0.482968, 1, 0.482968, 1, 0.482968, 1, 0.482968, 1, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968),
"times": PackedFloat32Array(0, 0.4),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.0, 0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 5.0, 5.0, 6.0, 6.0, 7.0, 7.0, 9.0, 9.0, 10.0, 10.0, 11.0, 11.0, 12.0, 12.0, 13.0, 13.0, 14.0, 14.0, 15.0, 15.0, 16.0, 16.0, 17.0, 17.0]
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/2/type = "method"
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("../../..")
tracks/2/interp = 1
tracks/2/path = NodePath("../../..:visible")
tracks/2/interp = 0
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(13.3333, 24.7667, 49.7, 68.8667, 85.5, 91.3333),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1),
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/3/type = "audio"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("%AnimationPlayer/Music")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"clips": [{
"end_offset": 0.0,
"start_offset": 0.0,
"stream": ExtResource("10_bvh45")
}],
"times": PackedFloat32Array(3)
}
tracks/3/use_blend = true
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../../card/BackgroundSprite/GPUParticles2D:emitting")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0, 5.8, 11.3, 18.2, 26.1, 34.4, 43.7, 53.2, 65.1, 75.7, 93),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [false, true, true, true, true, true, true, true, true, true, true]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../../card/BackgroundSprite/GPUParticles2D:amount")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(4, 11.1, 18, 25.9, 34.2, 43.5, 53, 65, 75.6, 92.1),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 1,
"values": [1, 10, 20, 40, 80, 180, 160, 320, 400, 500]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("../../card/BackgroundSprite:noise_speed")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(2, 129.7, 149.1, 167.15),
"transitions": PackedFloat32Array(0.482968, 1.86607, 1, 1),
"update": 0,
"values": [0.0, 10.0, 5.0, 10.0]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("../../card/BackgroundSprite/GPUParticles2D:one_shot")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0, 93),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("../../card/BackgroundSprite/GPUParticles2D:lifetime")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(93, 129.9, 136.6, 164.8),
"transitions": PackedFloat32Array(1, 0.31864, 2.21914, 1),
"update": 0,
"values": [5.0, 1.5, 4.0, 2.0]
}
tracks/9/type = "value"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("../../card/BackgroundSprite/GPUParticles2D:explosiveness")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(96.3, 129.9, 136.6, 159.5, 176.7),
"transitions": PackedFloat32Array(1, 0.31864, 1, 0.406126, 1),
"update": 0,
"values": [0.29, 0.69, 0.74, 0.9, 0.2]
}
tracks/10/type = "value"
tracks/10/imported = false
tracks/10/enabled = true
tracks/10/path = NodePath("../../card/BackgroundSprite/GPUParticles2D:speed_scale")
tracks/10/interp = 1
tracks/10/loop_wrap = true
tracks/10/keys = {
"times": PackedFloat32Array(105.6, 129.8, 150.5, 164.7),
"transitions": PackedFloat32Array(1, 0.466516, 1, 1),
"update": 0,
"values": [1.0, 1.9, 0.4, 1.0]
}
tracks/11/type = "value"
tracks/11/imported = false
tracks/11/enabled = true
tracks/11/path = NodePath("../../card/BackgroundSprite:noise_power")
tracks/11/interp = 1
tracks/11/loop_wrap = true
tracks/11/keys = {
"times": PackedFloat32Array(8.4, 93.4, 129.7, 159.4, 169.4),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
"update": 0,
"values": [5.0, 2.0, 0.3, 0.3, 1.5]
}
tracks/12/type = "method"
tracks/12/imported = false
tracks/12/enabled = true
tracks/12/path = NodePath("../../..")
tracks/12/interp = 1
tracks/12/loop_wrap = true
tracks/12/keys = {
"times": PackedFloat32Array(34.7667, 73, 105.467, 143.633, 163.167, 178.233, 202.067),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1),
"values": [{
"args": [],
"method": &"try_scroll"
@ -263,71 +398,38 @@ tracks/2/keys = {
"method": &"try_scroll"
}, {
"args": [],
"method": &"_emit_thunder"
}, {
"args": [],
"method": &"try_scroll"
}, {
"args": [],
"method": &"_on_text_finished"
}]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("..:custom_minimum_size")
tracks/3/interp = 2
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.7),
"transitions": PackedFloat32Array(1, 1),
tracks/13/type = "value"
tracks/13/imported = false
tracks/13/enabled = true
tracks/13/path = NodePath("../../..:progress")
tracks/13/interp = 1
tracks/13/loop_wrap = true
tracks/13/keys = {
"times": PackedFloat32Array(0.733333, 6.53333, 8.36667, 12.993, 14.7333, 21.3667, 22.8, 32.9333, 35.1667, 41.8461, 43.5, 47.0086, 48.6, 53.2, 54.7667, 64.6474, 66.5667, 72.5333, 74.6, 79.2373, 81, 87.943, 89.8, 94.643, 95.7, 101.345, 103, 104.867, 106.967, 110.867, 113.167, 116.149, 117.4, 118.821, 120.033, 125.029, 126.533, 130.992, 133.333, 141.633, 144.267, 147.767, 149.6, 154.5, 156.433, 161.767, 162.867, 163.933, 165.1, 166.967, 167.6, 169.382, 170.033, 172.833, 177.133, 180.167, 187.62, 188.933, 192.453, 193.433, 201.633),
"transitions": PackedFloat32Array(0.450625, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1),
"update": 0,
"values": [Vector2(900, 800), Vector2(900, 900)]
"values": [0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 5.0, 5.0, 6.0, 6.0, 7.0, 7.0, 8.0, 8.0, 9.0, 9.0, 10.0, 10.0, 11.0, 11.0, 12.0, 12.0, 13.0, 13.0, 14.0, 14.0, 15.0, 15.0, 16.0, 16.0, 17.0, 17.0, 18.0, 18.0, 19.0, 19.0, 20.0, 20.0, 21.0, 21.0, 22.0, 22.0, 23.0, 23.0, 24.0, 24.0, 25.0, 25.0, 26.0, 26.0, 27.0, 28.0, 28.0, 29.0, 29.0, 30.0, 30.0, 31.0]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath(".:rotation")
tracks/4/interp = 2
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0, 1.8),
"transitions": PackedFloat32Array(1, 1),
tracks/14/type = "value"
tracks/14/imported = false
tracks/14/enabled = true
tracks/14/path = NodePath(".:rotation")
tracks/14/interp = 1
tracks/14/loop_wrap = true
tracks/14/keys = {
"times": PackedFloat32Array(0.214991, 1.03196),
"transitions": PackedFloat32Array(0.297302, 1),
"update": 0,
"values": [0.174533, 0.349066]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../..:modulate")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0, 0.733333),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("../../..:visible")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("../../..:modulate")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
"values": [0.15708, 0.349066]
}
[sub_resource type="Animation" id="Animation_nmo1t"]
@ -705,7 +807,7 @@ tracks/2/keys = {
[sub_resource type="AnimationLibrary" id="AnimationLibrary_dc6th"]
_data = {
&"RESET": SubResource("Animation_ytihj"),
&"de": SubResource("Animation_bgeog"),
&"de": SubResource("Animation_bvh45"),
&"en": SubResource("Animation_nmo1t"),
&"en_old": SubResource("Animation_7qabw"),
&"vanish": SubResource("Animation_x0d5q")
@ -768,7 +870,6 @@ layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 2
mouse_filter = 2
scroll_vertical = 100
horizontal_scroll_mode = 0
vertical_scroll_mode = 3
@ -810,6 +911,7 @@ shape = SubResource("CapsuleShape2D_vxads")
clip_children = 2
scale = Vector2(0.6, 0.6)
sprite_frames = SubResource("SpriteFrames_liwtr")
frame = 2
script = SubResource("GDScript_80sa6")
noise_power = 1.5

View File

@ -14,8 +14,6 @@ var max_lines: float = 0
story_array = str_array
if is_node_ready():
substring_sizes = []
if Engine.is_editor_hint():
TranslationServer.set_locale("en")
var p: int = 0
label.text = "[p]"
for i in range(str_array.size()):
@ -89,7 +87,7 @@ func _ready() -> void:
skip_control.skip.connect(skip_text)
if get_tree().root.get_child(-1) == self:
TranslationServer.set_locale("de")
TranslationServer.set_locale("en")
play_scene()
story_array = story_array
progress = progress
@ -115,16 +113,19 @@ func try_scroll():
scroll_target = forward_target
func play_scene():
scroll_target = 0
# FIXME: find out why this needs to be set to prevent scenes from being fully revealed
all_text_revealed = false
animation_complete = false
##FIXME match State.speech_language:
match TranslationServer.get_locale():
"de":
animation_player.queue("en")
"en":
match State.speech_language:
2:
animation_player.queue("de")
_:
animation_player.queue("en")
await text_finished
if name == "draven":

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=18 format=3 uid="uid://cj1ccdk0686ke"]
[gd_scene load_steps=19 format=3 uid="uid://cj1ccdk0686ke"]
[ext_resource type="Script" uid="uid://cb1d5cwtgllvq" path="res://base-environments/youth_room/scnees/scene_player.gd" id="1_543ki"]
[ext_resource type="Texture2D" uid="uid://d0ucjqi8tx6vt" path="res://import/interface-elements/frame.png" id="2_ho85h"]
@ -6,8 +6,8 @@
[ext_resource type="Texture2D" uid="uid://bwicl5q0lw06q" path="res://import/interface-elements/bottom.png" id="4_ayw8a"]
[ext_resource type="ArrayMesh" uid="uid://byjfgvx7jeal" path="res://base-environments/youth_room/import/youth_special_meshes_comic_book_2.res" id="4_kn83e"]
[ext_resource type="PackedScene" uid="uid://dvwuhobhka78d" path="res://logic-scenes/misc/skip_control.tscn" id="5_b3y80"]
[ext_resource type="AudioStream" uid="uid://b3cw0e41rjggo" path="res://base-environments/youth_room/audio/childhood_de.wav" id="6_ya787"]
[ext_resource type="AudioStream" uid="uid://d15ltkofdggly" path="res://base-environments/youth_room/audio/Voice-Training-Workshop.wav" id="8_ho85h"]
[ext_resource type="AudioStream" uid="uid://dupcfwi54fpjx" path="res://base-environments/youth_room/audio/FoM_Lisa_Kindheit_Voice_Acting_deutsch_newt.wav" id="8_kn83e"]
[ext_resource type="Script" uid="uid://c1oub0cs7cph6" path="res://dev-util/stereo-switch.gd" id="9_kn83e"]
[sub_resource type="ViewportTexture" id="ViewportTexture_ho85h"]
@ -147,9 +147,9 @@ tracks/9/keys = {
"values": [Vector3(-0.0872665, -2.08043, 0.171042)]
}
[sub_resource type="Animation" id="Animation_bgeog"]
[sub_resource type="Animation" id="Animation_ayw8a"]
resource_name = "de"
length = 94.0
length = 86.0
tracks/0/type = "audio"
tracks/0/imported = false
tracks/0/enabled = true
@ -158,11 +158,11 @@ tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"clips": [{
"end_offset": 0.0,
"end_offset": 1.36178,
"start_offset": 0.0,
"stream": ExtResource("6_ya787")
"stream": ExtResource("8_kn83e")
}],
"times": PackedFloat32Array(1.3)
"times": PackedFloat32Array(1.16667)
}
tracks/0/use_blend = true
tracks/1/type = "value"
@ -172,10 +172,10 @@ tracks/1/path = NodePath("../../..:progress")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 1.66667, 6.13333, 7.43333, 13.5, 14.5667, 19.1333, 19.5333, 22.7333, 25.6333, 27.3333, 28.8, 32.7333, 34.8667, 36.6275, 37.7667, 46.2333, 47.5667, 49.4667, 50.8333, 54.6667, 56.3, 60.4667, 61.8333, 68.2028, 69.5667, 72.4, 74.5, 78.493, 80.2, 84.033, 85.3, 88.0997, 89.6667),
"transitions": PackedFloat32Array(1, 0.482968, 1, 0.482968, 1, 0.482968, 1, 0.482968, 1, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968),
"times": PackedFloat32Array(0, 1.66667, 4.73332, 6.03333, 11.6, 12.4, 15.8333, 16.4333, 18.9334, 19.6333, 24.5333, 25.6, 29, 30.3667, 36.1333, 39.4, 40.8, 42.2333, 44.6333, 45.2667, 47.0333, 49.2333, 53.4333, 54.6333, 57.1333, 57.8333, 61.1333, 63.2667, 66.5667, 67.5, 72.4597, 74.5, 77.2667, 78.4667, 85.2),
"transitions": PackedFloat32Array(1, 0.482968, 1, 0.482968, 1, 0.482968, 1, 0.482968, 1, 1.23114, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.287175, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968, 0.482968),
"update": 0,
"values": [0.0, 0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 5.0, 5.0, 6.0, 6.0, 7.0, 7.0, 9.0, 9.0, 10.0, 10.0, 11.0, 11.0, 12.0, 12.0, 13.0, 13.0, 14.0, 14.0, 15.0, 15.0, 16.0, 16.0, 17.0, 17.0]
"values": [0.0, 0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 5.0, 5.0, 6.0, 6.0, 7.0, 7.0, 8.0, 8.0, 9.0, 9.0, 10.0, 10.0, 11.0, 11.0, 12.0, 12.0, 13.0, 13.0, 14.0, 14.0, 15.0, 15.0, 16.0, 16.0, 17.0]
}
tracks/2/type = "method"
tracks/2/imported = false
@ -184,8 +184,8 @@ tracks/2/path = NodePath("../../..")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(13.3333, 24.7667, 49.7, 68.8667, 85.5, 91.3333),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1),
"times": PackedFloat32Array(24.8, 47.87, 61.7667, 74.0333, 85.2667),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
"values": [{
"args": [],
"method": &"try_scroll"
@ -200,9 +200,6 @@ tracks/2/keys = {
"method": &"try_scroll"
}, {
"args": [],
"method": &"try_scroll"
}, {
"args": [],
"method": &"_on_text_finished"
}]
}
@ -210,7 +207,7 @@ tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("..:custom_minimum_size")
tracks/3/interp = 2
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.7),
@ -222,7 +219,7 @@ tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath(".:rotation")
tracks/4/interp = 2
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0, 1.8),
@ -246,12 +243,12 @@ tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("../../..:visible")
tracks/6/interp = 1
tracks/6/interp = 0
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"update": 0,
"values": [true]
}
tracks/7/type = "value"
@ -266,6 +263,54 @@ tracks/7/keys = {
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("../TextureRect/SubViewport/Node3D/YouthSpecialMeshesComicBook1:position")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0.0497012, 1.46667),
"transitions": PackedFloat32Array(0.406126, 1),
"update": 0,
"values": [Vector3(-0.025, -0.211, 0.138), Vector3(-0.045, -0.111, 0.033)]
}
tracks/9/type = "value"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("../TextureRect/SubViewport/Node3D/YouthSpecialMeshesComicBook1:rotation")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(0, 1.46667),
"transitions": PackedFloat32Array(0.406126, 1),
"update": 0,
"values": [Vector3(0.280998, -2.77333, 0), Vector3(0.0855211, -1.65632, 0.0855211)]
}
tracks/10/type = "value"
tracks/10/imported = false
tracks/10/enabled = true
tracks/10/path = NodePath("../TextureRect/SubViewport/Node3D/YouthSpecialMeshesComicBook2:position")
tracks/10/interp = 1
tracks/10/loop_wrap = true
tracks/10/keys = {
"times": PackedFloat32Array(0, 1.43333),
"transitions": PackedFloat32Array(0.353554, 1),
"update": 0,
"values": [Vector3(0.05, -0.21, -0.02), Vector3(0.02, -0.055, -0.02)]
}
tracks/11/type = "value"
tracks/11/imported = false
tracks/11/enabled = true
tracks/11/path = NodePath("../TextureRect/SubViewport/Node3D/YouthSpecialMeshesComicBook2:rotation")
tracks/11/interp = 1
tracks/11/loop_wrap = true
tracks/11/keys = {
"times": PackedFloat32Array(0.0446739, 1.43333),
"transitions": PackedFloat32Array(0.353554, 1),
"update": 0,
"values": [Vector3(0.0349066, -2.51327, -0.00174533), Vector3(-0.0872665, -2.08043, 0.171042)]
}
[sub_resource type="Animation" id="Animation_7qabw"]
resource_name = "en"
@ -435,6 +480,130 @@ tracks/11/keys = {
"values": [Vector3(0.0349066, -2.51327, -0.00174533), Vector3(-0.0872665, -2.08043, 0.171042)]
}
[sub_resource type="Animation" id="Animation_kn83e"]
resource_name = "ini"
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../../..:progress")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [17.0]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("..:custom_minimum_size")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(900, 900)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath(".:rotation")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.349066]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("../..:modulate")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("../../..:visible")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("../../..:modulate")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("../TextureRect/SubViewport/Node3D/YouthSpecialMeshesComicBook1:position")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(-0.045, -0.111, 0.033)]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("../TextureRect/SubViewport/Node3D/YouthSpecialMeshesComicBook1:rotation")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(0.0855211, -1.65632, 0.0855211)]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("../TextureRect/SubViewport/Node3D/YouthSpecialMeshesComicBook2:position")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(0.02, -0.055, -0.02)]
}
tracks/9/type = "value"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("../TextureRect/SubViewport/Node3D/YouthSpecialMeshesComicBook2:rotation")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(-0.0872665, -2.08043, 0.171042)]
}
[sub_resource type="Animation" id="Animation_x0d5q"]
resource_name = "vanish"
tracks/0/type = "value"
@ -477,8 +646,9 @@ tracks/2/keys = {
[sub_resource type="AnimationLibrary" id="AnimationLibrary_dc6th"]
_data = {
&"RESET": SubResource("Animation_ytihj"),
&"de": SubResource("Animation_bgeog"),
&"de": SubResource("Animation_ayw8a"),
&"en": SubResource("Animation_7qabw"),
&"ini": SubResource("Animation_kn83e"),
&"vanish": SubResource("Animation_x0d5q")
}
@ -639,6 +809,7 @@ root_node = NodePath("../PanelContainer/StartFrame/Panel")
libraries = {
&"": SubResource("AnimationLibrary_dc6th")
}
autoplay = "ini"
[node name="Text" type="AudioStreamPlayer" parent="AnimationPlayer"]
mix_target = 2

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=112 format=4 uid="uid://b3b0gyvklqn50"]
[gd_scene load_steps=114 format=4 uid="uid://b3b0gyvklqn50"]
[ext_resource type="Script" uid="uid://belkrno67sft0" 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"]
@ -901,6 +901,9 @@ radius = 0.469631
[sub_resource type="ViewportTexture" id="ViewportTexture_hdmps"]
viewport_path = NodePath("logic/MindBoard/UiWrapper/UiSprite/SubViewport")
[sub_resource type="ViewportTexture" id="ViewportTexture_v3447"]
viewport_path = NodePath("logic/Door/UiWrapper/UiSprite/SubViewport")
[sub_resource type="Animation" id="Animation_xum02"]
length = 0.001
tracks/0/type = "value"
@ -987,6 +990,129 @@ tracks/6/keys = {
"update": 0,
"values": [0.0]
}
tracks/7/type = "value"
tracks/7/imported = false
tracks/7/enabled = true
tracks/7/path = NodePath("WorldEnvironment/window_glass/SubViewport:render_target_update_mode")
tracks/7/interp = 1
tracks/7/loop_wrap = true
tracks/7/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [2]
}
tracks/8/type = "value"
tracks/8/imported = false
tracks/8/enabled = true
tracks/8/path = NodePath("WorldEnvironment/window_glass:visible")
tracks/8/interp = 1
tracks/8/loop_wrap = true
tracks/8/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/9/type = "value"
tracks/9/imported = false
tracks/9/enabled = true
tracks/9/path = NodePath("visuals/vfx/lava-lamp:visible")
tracks/9/interp = 1
tracks/9/loop_wrap = true
tracks/9/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
tracks/10/type = "value"
tracks/10/imported = false
tracks/10/enabled = true
tracks/10/path = NodePath("visuals/lights/OmniLight3D4:light_energy")
tracks/10/interp = 1
tracks/10/loop_wrap = true
tracks/10/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [0.1]
}
tracks/11/type = "value"
tracks/11/imported = false
tracks/11/enabled = true
tracks/11/path = NodePath("visuals/lights:visible")
tracks/11/interp = 1
tracks/11/loop_wrap = true
tracks/11/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
[sub_resource type="Animation" id="Animation_v3447"]
resource_name = "conserve_performance"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("WorldEnvironment/window_glass/SubViewport:render_target_update_mode")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [0]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("WorldEnvironment/window_glass:visible")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("visuals/vfx/lava-lamp:visible")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("visuals/lights/OmniLight3D4:light_energy")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [0.1, 0.0]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("visuals/lights:visible")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0.966667, 1),
"transitions": PackedFloat32Array(1, 1),
"update": 1,
"values": [true, false]
}
[sub_resource type="Animation" id="Animation_3ms6b"]
resource_name = "lighting_and_thunder"
@ -1094,6 +1220,7 @@ tracks/7/keys = {
[sub_resource type="AnimationLibrary" id="AnimationLibrary_vwrt1"]
_data = {
&"RESET": SubResource("Animation_xum02"),
&"conserve_performance": SubResource("Animation_v3447"),
&"lighting_and_thunder": SubResource("Animation_3ms6b")
}
@ -1433,15 +1560,15 @@ func _process(delta):
script/source = "extends Control
func show():
visible = true
var vis_tween = create_tween()
vis_tween.tween_property(self, \"modulate\", Color(1, 1, 1, 1), 0.1)
visible = true
var vis_tween = create_tween()
vis_tween.tween_property(self, \"modulate\", Color(1, 1, 1, 1), 0.1)
func hide():
var vis_tween = create_tween()
vis_tween.tween_property(self, \"modulate\", Color(1, 1, 1, 0), 0.1)
await vis_tween.finished
visible = false
var vis_tween = create_tween()
vis_tween.tween_property(self, \"modulate\", Color(1, 1, 1, 0), 0.1)
await vis_tween.finished
visible = false
"
[node name="youth room" type="Node3D" groups=["serializable"]]
@ -1754,6 +1881,7 @@ omni_range = 16.8518
unique_name_in_owner = true
transform = Transform3D(-0.863025, 0, 0.50516, 0, 1, 0, -0.50516, 0, -0.863025, 0.0754588, 0.948372, 2.42068)
collision_layer = 16
collision_mask = 0
script = ExtResource("11_6fwv8")
[node name="collectable_particles" parent="logic/MaskMemento" instance=ExtResource("12_qxx2k")]
@ -1789,6 +1917,7 @@ shape = SubResource("CapsuleShape3D_72g2i")
unique_name_in_owner = true
transform = Transform3D(0.86043, 0, -0.509567, 0, 1, 0, 0.509567, 0, 0.86043, 1.36586, 1.17096, -0.636599)
collision_layer = 16
collision_mask = 0
script = ExtResource("11_6fwv8")
[node name="collectable_particles" parent="logic/ClothesMemento" instance=ExtResource("12_qxx2k")]
@ -1827,6 +1956,7 @@ shape = SubResource("CapsuleShape3D_72g2i")
unique_name_in_owner = true
transform = Transform3D(0.969944, 0, 0.243327, 0, 1, 0, -0.243327, 0, 0.969944, 2.91664, 0.595014, -0.857358)
collision_layer = 16
collision_mask = 0
script = ExtResource("11_6fwv8")
[node name="collectable_particles" parent="logic/ComicMemento" instance=ExtResource("12_qxx2k")]
@ -1865,8 +1995,8 @@ shape = SubResource("CapsuleShape3D_72g2i")
unique_name_in_owner = true
process_mode = 4
transform = Transform3D(0.86043, 0, -0.509567, 0, 1, 0, 0.509567, 0, 0.86043, 0.122875, 4.03863, -0.132712)
visible = false
collision_layer = 16
collision_mask = 0
script = ExtResource("11_6fwv8")
[node name="collectable_particles" parent="logic/CeilingMemento" instance=ExtResource("12_qxx2k")]
@ -1904,6 +2034,7 @@ shape = SubResource("SphereShape3D_c7buh")
unique_name_in_owner = true
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
collision_mask = 0
script = ExtResource("11_6fwv8")
[node name="collectable_particles" parent="logic/MindBoard" instance=ExtResource("12_qxx2k")]
@ -1938,41 +2069,42 @@ is_board = true
transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 0, 0, 0)
shape = SubResource("CapsuleShape3D_72g2i")
[node name="DoorTrigger" type="Area3D" parent="logic" groups=["interactables"]]
[node name="Door" type="Area3D" parent="logic" groups=["interactables"]]
unique_name_in_owner = true
process_mode = 4
transform = Transform3D(-4.37114e-08, 0, 0.999999, 0, 1, 0, -0.999999, 0, -4.37114e-08, 0.09841, 1.17661, -0.865982)
visible = false
transform = Transform3D(0.999999, 0, 4.9738e-14, 0, 1, 0, -4.9738e-14, 0, 0.999999, 0.115203, 1.3931, -0.954428)
collision_layer = 16
script = ExtResource("11_6fwv8")
[node name="collectable_particles" parent="logic/DoorTrigger" instance=ExtResource("12_qxx2k")]
[node name="collectable_particles" parent="logic/Door" 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/DoorTrigger"]
[node name="UiWrapper" type="Area3D" parent="logic/Door"]
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/DoorTrigger/UiWrapper"]
[node name="UI_click_collider" type="CollisionShape3D" parent="logic/Door/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/DoorTrigger/UiWrapper"]
transform = Transform3D(1, 0, 2.4869e-14, 0, 1, 0, -2.4869e-14, 0, 1, 0, 0, 0.610758)
[node name="UiSprite" type="Sprite3D" parent="logic/Door/UiWrapper"]
transform = Transform3D(1, 0, 2.4869e-14, 0, 1, 0, -2.4869e-14, 0, 1, -1.0693e-14, 0, 0.180784)
modulate = Color(0.941183, 0.904347, 0.886647, 1)
pixel_size = 0.015
no_depth_test = true
texture = SubResource("ViewportTexture_hdmps")
texture = SubResource("ViewportTexture_v3447")
[node name="SubViewport" type="SubViewport" parent="logic/DoorTrigger/UiWrapper/UiSprite"]
[node name="SubViewport" type="SubViewport" parent="logic/Door/UiWrapper/UiSprite"]
transparent_bg = true
use_hdr_2d = true
size = Vector2i(400, 350)
render_target_update_mode = 4
[node name="CollectableUi" parent="logic/DoorTrigger/UiWrapper/UiSprite/SubViewport" instance=ExtResource("25_ghmim")]
[node name="CollectableUi" parent="logic/Door/UiWrapper/UiSprite/SubViewport" instance=ExtResource("25_ghmim")]
scene = 4
is_exit = true
[node name="HoverDetect" type="CollisionShape3D" parent="logic/DoorTrigger"]
[node name="HoverDetect" type="CollisionShape3D" parent="logic/Door"]
transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 0, 0, 0)
shape = SubResource("CapsuleShape3D_72g2i")
@ -2011,32 +2143,32 @@ bus = &"outside-rain"
[node name="visuals" type="Node3D" parent="."]
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="visuals"]
[node name="Shadow" type="CSGCombiner3D" parent="visuals"]
cast_shadow = 3
calculate_tangents = false
[node name="CSGBox3D" type="CSGBox3D" parent="visuals/CSGCombiner3D"]
[node name="CSGBox3D" type="CSGBox3D" parent="visuals/Shadow"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.34613, 1.23087, 2.97923)
size = Vector3(5.26758, 2.69583, 0.137207)
[node name="CSGBox3D2" type="CSGBox3D" parent="visuals/CSGCombiner3D"]
[node name="CSGBox3D2" type="CSGBox3D" parent="visuals/Shadow"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.441227, 2.48778, 0.766643)
size = Vector3(3.47876, 0.182022, 4.56238)
[node name="CSGBox3D6" type="CSGBox3D" parent="visuals/CSGCombiner3D"]
[node name="CSGBox3D6" type="CSGBox3D" parent="visuals/Shadow"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.21313, 1.23861, 0.766643)
size = Vector3(0.170044, 2.68037, 4.56238)
[node name="CSGBox3D4" type="CSGBox3D" parent="visuals/CSGCombiner3D"]
[node name="CSGBox3D4" type="CSGBox3D" parent="visuals/Shadow"]
transform = Transform3D(0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 0, 0, 1, 3.1589, 1.73312, 0.766643)
size = Vector3(2.57013, 0.182022, 4.56238)
[node name="CSGBox3D5" type="CSGBox3D" parent="visuals/CSGCombiner3D"]
[node name="CSGBox3D5" type="CSGBox3D" parent="visuals/Shadow"]
transform = Transform3D(0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 0, 0, 1, 3.09781, 1.7764, -0.332882)
operation = 2
size = Vector3(1.25306, 0.312046, 0.893661)
[node name="CSGBox3D3" type="CSGBox3D" parent="visuals/CSGCombiner3D"]
[node name="CSGBox3D3" type="CSGBox3D" parent="visuals/Shadow"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.977913, 1.52551, 2.97298)
operation = 2
calculate_tangents = false
@ -2293,9 +2425,7 @@ light_array = Array[Vector3]([Vector3(-0.545, 0.915, 1.035), Vector3(-0.47, 0.85
[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="board_completed" from="logic/UI/Board" to="logic/UI/ending_button" method="show"]
[connection signal="emit_thunder" from="logic/ScenePlayer/JuiJutsu" to="AnimationPlayer" method="play" binds= ["lighting_and_thunder"]]
[connection signal="finished" from="logic/ScenePlayer/draven" to="logic/ScenePlayer" method="on_draeven_done"]
[connection signal="input_event" from="logic/MaskMemento/UiWrapper" to="logic/MaskMemento/UiWrapper" method="_on_input_event"]
[connection signal="scene_skipped" from="logic/MaskMemento/UiWrapper/UiSprite/SubViewport/CollectableUi" to="logic/UI/Board" method="on_scene_skipped"]
[connection signal="input_event" from="logic/ClothesMemento/UiWrapper" to="logic/ClothesMemento/UiWrapper" method="_on_input_event"]
@ -2306,4 +2436,5 @@ light_array = Array[Vector3]([Vector3(-0.545, 0.915, 1.035), Vector3(-0.47, 0.85
[connection signal="scene_skipped" from="logic/CeilingMemento/UiWrapper/UiSprite/SubViewport/CollectableUi" to="logic/UI/Board" method="on_scene_skipped"]
[connection signal="input_event" from="logic/MindBoard/UiWrapper" to="logic/MindBoard/UiWrapper" method="_on_input_event"]
[connection signal="open_board" from="logic/MindBoard/UiWrapper/UiSprite/SubViewport/CollectableUi" to="logic/UI/Board" method="claim_focus"]
[connection signal="input_event" from="logic/DoorTrigger/UiWrapper" to="logic/DoorTrigger/UiWrapper" method="_on_input_event"]
[connection signal="input_event" from="logic/Door/UiWrapper" to="logic/Door/UiWrapper" method="_on_input_event"]
[connection signal="open_board" from="logic/Door/UiWrapper/UiSprite/SubViewport/CollectableUi" to="logic/UI/Board" method="claim_focus"]

View File

@ -1,4 +1,4 @@
[gd_resource type="AudioBusLayout" load_steps=7 format=3 uid="uid://djkwd76o033io"]
[gd_resource type="AudioBusLayout" load_steps=10 format=3 uid="uid://djkwd76o033io"]
[sub_resource type="AudioEffectLowPassFilter" id="AudioEffectLowPassFilter_ijm2o"]
resource_name = "LowPassFilter"
@ -34,6 +34,28 @@ wet = 0.03
resource_name = "LowPassFilter"
resonance = 0.52
[sub_resource type="AudioEffectDelay" id="AudioEffectDelay_j3pel"]
resource_name = "Delay"
dry = 0.8
tap1_delay_ms = 464.0
tap2_delay_ms = 861.0
[sub_resource type="AudioEffectReverb" id="AudioEffectReverb_g28q7"]
resource_name = "Reverb"
room_size = 0.9
damping = 0.63
hipass = 0.1
dry = 0.83
wet = 0.14
[sub_resource type="AudioEffectDistortion" id="AudioEffectDistortion_j3pel"]
resource_name = "Distortion"
mode = 2
pre_gain = 39.75
keep_hf_hz = 6263.0
drive = 0.44
post_gain = -20.8
[resource]
bus/0/effect/0/effect = SubResource("AudioEffectLowPassFilter_ijm2o")
bus/0/effect/0/enabled = false
@ -71,3 +93,15 @@ bus/4/volume_db = 1.25825
bus/4/send = &"Master"
bus/4/effect/0/effect = SubResource("AudioEffectLowPassFilter_5p17k")
bus/4/effect/0/enabled = true
bus/5/name = &"waves"
bus/5/solo = false
bus/5/mute = false
bus/5/bypass_fx = false
bus/5/volume_db = 0.0
bus/5/send = &"sfx"
bus/5/effect/0/effect = SubResource("AudioEffectDelay_j3pel")
bus/5/effect/0/enabled = true
bus/5/effect/1/effect = SubResource("AudioEffectReverb_g28q7")
bus/5/effect/1/enabled = true
bus/5/effect/2/effect = SubResource("AudioEffectDistortion_j3pel")
bus/5/effect/2/enabled = true

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=29 format=3 uid="uid://cd63barv73rfx"]
[gd_scene load_steps=36 format=3 uid="uid://cd63barv73rfx"]
[ext_resource type="Texture2D" uid="uid://d3ewjumh0b0g6" path="res://logic-scenes/main menu/logo.png" id="1_61qpo"]
[ext_resource type="Texture2D" uid="uid://ds1n0xhxqlp4b" path="res://base-environments/youth_room/shaders/universe_noise.png" id="1_t34p3"]
@ -10,21 +10,53 @@
[ext_resource type="Texture2D" uid="uid://b0kuadlp4jw6j" path="res://addons/input_prompts/icons/keyboard/d.png" id="8_kj67n"]
[ext_resource type="Texture2D" uid="uid://bwhf0tx67yj7a" path="res://addons/input_prompts/icons/keyboard/s.png" id="9_xo70c"]
[ext_resource type="Script" uid="uid://0h0lrkntx0uh" path="res://logic-scenes/main menu/pause_menu.gd" id="10_g425y"]
[ext_resource type="PackedScene" uid="uid://u0bwjr5l6nkh" path="res://logic-scenes/main menu/privacy_settings.tscn" id="10_jirkf"]
[ext_resource type="PackedScene" uid="uid://g2a27jwdapai" path="res://logic-scenes/card_burner/card_burner.tscn" id="10_kj67n"]
[ext_resource type="Script" uid="uid://sa15wakvpj2e" path="res://dev-util/bug_button.gd" id="11_kj67n"]
[ext_resource type="PackedScene" uid="uid://citwb7f4dl3l1" path="res://thank-you.tscn" id="13_xo70c"]
[ext_resource type="AudioStream" uid="uid://cho5neuxkvpyh" path="res://base-environments/youth_room/audio/Voice Loop.wav" id="14_k41g6"]
[sub_resource type="GDScript" id="GDScript_t34p3"]
script/source = "extends Node3D
var has_stage = false
var room = preload(\"res://base-environments/youth_room/youth_room.tscn\")
var loaded_room: RoomTemplate
func _ready() -> void:
State.take_stage(self)
load_room()
State.settings_initialised = true
State.show_content_notes = false
State.text_language = 1
State.speech_language = 1
$Menu/VBoxContainer2/PressStart.grab_focus()
Scenes.sign_up_for_sequence(prepare_transition, Scenes.id.TRANSITION, 0)
Scenes.sign_up_for_sequence(transition, Scenes.id.TRANSITION, 2)
if OS.get_locale_language() == \"de\":
$Menu/VBoxContainer/SpeechButton.select(1)
func prepare_transition(_id):
await get_tree().process_frame
Scenes.continue_sequence(self)
await get_tree().create_timer(5.0).timeout
loaded_room.prepare_transition()
ResourceLoader.load_threaded_request(\"res://base-environments/transition/first_platform.tscn\")
func transition(_id, _repeat):
#$TextureRect.texture = get_tree().root.get_texture()
#$TextureRect.visible = true
loaded_room.unload()
var packed_second_room:PackedScene = ResourceLoader.load_threaded_get(\"res://base-environments/transition/first_platform.tscn\")
loaded_room.queue_free()
%Room.add_child(packed_second_room.instantiate())
await get_tree().create_timer(15.5).timeout
$AudioStreamPlayer/AnimationPlayer.play(\"ending\")
$ending.show()
$ending.mouse_filter = Control.MOUSE_FILTER_STOP
%Room.get_child(0).queue_free()
func load_room():
for child in %Room.get_children():
@ -71,13 +103,16 @@ func _on_cn_box_toggled(toggled_on: bool) -> void:
func _on_motion_box_toggled(toggled_on: bool) -> void:
State.reduce_motion = toggled_on
func _on_option_button_item_selected(index: int) -> void:
func _on_text_button_item_selected(index: int) -> void:
match index:
0:
State.text_language = 1
1:
State.text_language = 2
func _on_speech_button_item_selected(index: int) -> void:
State.speech_language = index + 1
func _unhandled_input(event: InputEvent) -> void:
if event is InputEvent and in_game:
if event.is_action_pressed(\"ui_menu\"):
@ -96,7 +131,7 @@ func toggle_pause_menu():
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
"
[sub_resource type="Shader" id="Shader_duh8f"]
[sub_resource type="Shader" id="Shader_jirkf"]
code = "shader_type canvas_item;
render_mode blend_premul_alpha;
@ -138,7 +173,7 @@ void fragment() {
"
[sub_resource type="ShaderMaterial" id="ShaderMaterial_k41g6"]
shader = SubResource("Shader_duh8f")
shader = SubResource("Shader_jirkf")
shader_parameter/nebula_brightness = 2.4
shader_parameter/nebula_scale = Vector2(1.3, 1.6)
shader_parameter/starlight_noise = ExtResource("1_t34p3")
@ -148,56 +183,70 @@ shader_parameter/rotation_pivot = Vector2(0.8, 0.8)
shader_parameter/drift_compensation = Vector2(0.1, -0.2)
shader_parameter/noise_strength = 0.2
[sub_resource type="Gradient" id="Gradient_7nxov"]
[sub_resource type="Gradient" id="Gradient_kt5p7"]
interpolation_color_space = 2
colors = PackedColorArray(1, 1, 1, 1, 0, 0, 0, 0)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_jirkf"]
gradient = SubResource("Gradient_7nxov")
gradient = SubResource("Gradient_kt5p7")
width = 2048
height = 1536
fill = 1
fill_from = Vector2(0.538462, 0.491453)
fill_to = Vector2(1.3, -0.3)
[sub_resource type="InputEventKey" id="InputEventKey_xo70c"]
[sub_resource type="InputEventKey" id="InputEventKey_jirkf"]
device = -1
physical_keycode = 87
unicode = 119
[sub_resource type="InputEventJoypadMotion" id="InputEventJoypadMotion_k41g6"]
device = -1
axis = 1
axis_value = -1.0
[sub_resource type="InputEventKey" id="InputEventKey_jirkf"]
device = -1
physical_keycode = 65
unicode = 97
[sub_resource type="InputEventJoypadMotion" id="InputEventJoypadMotion_kt5p7"]
device = -1
axis = 1
axis_value = -1.0
[sub_resource type="InputEventKey" id="InputEventKey_mivr6"]
device = -1
physical_keycode = 68
unicode = 100
physical_keycode = 65
unicode = 97
[sub_resource type="InputEventJoypadMotion" id="InputEventJoypadMotion_52c3j"]
device = -1
axis_value = 1.0
axis_value = -1.0
[sub_resource type="InputEventKey" id="InputEventKey_b7q2n"]
device = -1
physical_keycode = 68
unicode = 100
[sub_resource type="InputEventJoypadMotion" id="InputEventJoypadMotion_qhf78"]
device = -1
axis_value = 1.0
[sub_resource type="InputEventKey" id="InputEventKey_gatj6"]
device = -1
physical_keycode = 83
unicode = 115
[sub_resource type="InputEventJoypadMotion" id="InputEventJoypadMotion_qhf78"]
[sub_resource type="InputEventJoypadMotion" id="InputEventJoypadMotion_ol51q"]
device = -1
axis = 1
axis_value = 1.0
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_kt5p7"]
bg_color = Color(0.0288289, 0.0448641, 0.121276, 1)
border_width_left = 10
border_width_top = 10
border_width_right = 10
border_width_bottom = 10
border_color = Color(0.0288289, 0.0448641, 0.121276, 1)
corner_radius_top_left = 20
corner_radius_top_right = 20
corner_radius_bottom_right = 20
corner_radius_bottom_left = 20
expand_margin_left = 20.0
expand_margin_right = 20.0
[sub_resource type="Shader" id="Shader_gatj6"]
code = "shader_type canvas_item;
render_mode blend_premul_alpha;
@ -262,6 +311,30 @@ fill = 1
fill_from = Vector2(0.538462, 0.491453)
fill_to = Vector2(1.3, -0.3)
[sub_resource type="Animation" id="Animation_kt5p7"]
resource_name = "ending"
length = 120.0
tracks/0/type = "audio"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"clips": [{
"end_offset": 0.0,
"start_offset": 8.34472,
"stream": ExtResource("14_k41g6")
}],
"times": PackedFloat32Array(0.517639)
}
tracks/0/use_blend = true
[sub_resource type="AnimationLibrary" id="AnimationLibrary_mivr6"]
_data = {
&"ending": SubResource("Animation_kt5p7")
}
[node name="DemoMain" type="Node3D"]
process_mode = 3
script = SubResource("GDScript_t34p3")
@ -290,9 +363,9 @@ grow_vertical = 2
material = SubResource("ShaderMaterial_k41g6")
layout_mode = 0
offset_left = 2073.0
offset_top = 1290.0
offset_top = 1497.0
offset_right = 4353.0
offset_bottom = 3000.0
offset_bottom = 3530.0
rotation = -3.14159
texture = SubResource("GradientTexture2D_jirkf")
@ -388,9 +461,23 @@ text = "reduce motion and flickering"
[node name="Label2" type="Label" parent="Menu/VBoxContainer"]
layout_mode = 2
theme_type_variation = &"HeaderMedium"
text = "Text Language"
text = "Written Text"
[node name="OptionButton" type="OptionButton" parent="Menu/VBoxContainer"]
[node name="TextButton" type="OptionButton" parent="Menu/VBoxContainer"]
layout_mode = 2
selected = 0
item_count = 2
popup/item_0/text = "englisch"
popup/item_0/id = 1
popup/item_1/text = "deutsch"
popup/item_1/id = 2
[node name="Label3" type="Label" parent="Menu/VBoxContainer"]
layout_mode = 2
theme_type_variation = &"HeaderMedium"
text = "Spoken Text"
[node name="SpeechButton" type="OptionButton" parent="Menu/VBoxContainer"]
layout_mode = 2
selected = 0
item_count = 2
@ -399,6 +486,10 @@ popup/item_0/id = 0
popup/item_1/text = "deutsch"
popup/item_1/id = 1
[node name="Button" type="Button" parent="Menu/VBoxContainer"]
layout_mode = 2
text = "Privacy Info"
[node name="Control" type="Control" parent="Menu"]
layout_mode = 1
anchors_preset = 2
@ -420,7 +511,7 @@ stretch_mode = 5
script = ExtResource("5_6w5b4")
action = "player_forwards"
icon = 4
events = Array[InputEvent]([SubResource("InputEventKey_xo70c"), SubResource("InputEventJoypadMotion_k41g6")])
events = Array[InputEvent]([SubResource("InputEventKey_jirkf"), SubResource("InputEventJoypadMotion_kt5p7")])
metadata/_custom_type_script = "uid://bbs1u7ojno7xo"
[node name="ActionPrompt2" type="TextureRect" parent="Menu/Control"]
@ -435,7 +526,7 @@ stretch_mode = 5
script = ExtResource("5_6w5b4")
action = "player_left"
icon = 4
events = Array[InputEvent]([SubResource("InputEventKey_jirkf"), SubResource("InputEventJoypadMotion_kt5p7")])
events = Array[InputEvent]([SubResource("InputEventKey_mivr6"), SubResource("InputEventJoypadMotion_52c3j")])
metadata/_custom_type_script = "uid://bbs1u7ojno7xo"
[node name="ActionPrompt4" type="TextureRect" parent="Menu/Control"]
@ -450,7 +541,7 @@ stretch_mode = 5
script = ExtResource("5_6w5b4")
action = "player_right"
icon = 4
events = Array[InputEvent]([SubResource("InputEventKey_mivr6"), SubResource("InputEventJoypadMotion_52c3j")])
events = Array[InputEvent]([SubResource("InputEventKey_b7q2n"), SubResource("InputEventJoypadMotion_qhf78")])
metadata/_custom_type_script = "uid://bbs1u7ojno7xo"
[node name="ActionPrompt3" type="TextureRect" parent="Menu/Control"]
@ -465,7 +556,7 @@ stretch_mode = 5
script = ExtResource("5_6w5b4")
action = "player_backwards"
icon = 4
events = Array[InputEvent]([SubResource("InputEventKey_b7q2n"), SubResource("InputEventJoypadMotion_qhf78")])
events = Array[InputEvent]([SubResource("InputEventKey_gatj6"), SubResource("InputEventJoypadMotion_ol51q")])
metadata/_custom_type_script = "uid://bbs1u7ojno7xo"
[node name="Label" type="Label" parent="Menu/Control"]
@ -477,6 +568,37 @@ offset_bottom = -40.0
theme_type_variation = &"HeaderMedium"
text = "Move trough the room"
[node name="PrivacyPanel" type="PanelContainer" parent="Menu"]
visible = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -701.5
offset_top = -464.5
offset_right = 701.5
offset_bottom = 464.5
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_kt5p7")
[node name="PrivacyAndDataProtection" parent="Menu/PrivacyPanel" instance=ExtResource("10_jirkf")]
layout_mode = 2
[node name="TextureRect" type="TextureRect" parent="."]
visible = false
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
[node name="CardBurner" parent="." instance=ExtResource("10_kj67n")]
visible = false
[node name="PauseContainer" type="CenterContainer" parent="."]
unique_name_in_owner = true
visible = false
@ -551,7 +673,21 @@ visible = false
layout_mode = 2
text = "Skip this Story"
[node name="ending" parent="." instance=ExtResource("13_xo70c")]
visible = false
mouse_filter = 2
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
[node name="AnimationPlayer" type="AnimationPlayer" parent="AudioStreamPlayer"]
libraries = {
&"": SubResource("AnimationLibrary_mivr6")
}
[connection signal="pressed" from="Menu/VBoxContainer2/PressStart" to="." method="_on_start_button_pressed"]
[connection signal="toggled" from="Menu/VBoxContainer/CNBox" to="." method="_on_cn_box_toggled"]
[connection signal="toggled" from="Menu/VBoxContainer/MotionBox" to="." method="_on_motion_box_toggled"]
[connection signal="item_selected" from="Menu/VBoxContainer/OptionButton" to="." method="_on_option_button_item_selected"]
[connection signal="item_selected" from="Menu/VBoxContainer/TextButton" to="." method="_on_text_button_item_selected"]
[connection signal="item_selected" from="Menu/VBoxContainer/SpeechButton" to="." method="_on_speech_button_item_selected"]
[connection signal="pressed" from="Menu/VBoxContainer/Button" to="Menu/PrivacyPanel" method="show"]
[connection signal="leave_stage" from="Menu/PrivacyPanel/PrivacyAndDataProtection" to="Menu/PrivacyPanel" method="hide"]

View File

@ -0,0 +1,71 @@
[gd_scene load_steps=10 format=3 uid="uid://de1jhrkfs5qc6"]
[ext_resource type="Material" uid="uid://clfshh25jwfm1" path="res://logic-scenes/card_burner/card_fire.material" id="1_5xkf6"]
[ext_resource type="PackedScene" uid="uid://dy5rd437h5hsw" path="res://logic-scenes/board/card.tscn" id="2_wi77g"]
[ext_resource type="SpriteFrames" uid="uid://j7e7me3hl6xt" path="res://logic-scenes/board/card-textures/card-sprites.tres" id="3_2ph0d"]
[ext_resource type="PackedScene" uid="uid://bp6fd5lms3apa" path="res://logic-scenes/card_burner/card_sut.tscn" id="3_5xkf6"]
[ext_resource type="PackedScene" uid="uid://uc6urpgv7n1y" path="res://logic-scenes/card_burner/cursor_candle.tscn" id="3_f606e"]
[sub_resource type="Gradient" id="Gradient_pt3n6"]
colors = PackedColorArray(1, 1, 1, 1, 0, 0, 0, 1)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_f606e"]
gradient = SubResource("Gradient_pt3n6")
width = 407
height = 315
fill = 1
fill_from = Vector2(0.499433, 0.470085)
fill_to = Vector2(0.23814, 0.858974)
[sub_resource type="GDScript" id="GDScript_2ph0d"]
script/source = "@tool
extends Sprite2D
var flame_progression: float = 0
func _process(delta: float) -> void:
flame_progression = fmod( flame_progression + delta*.2 , 2.0)
material.set_shader_parameter(\"fire_progression\", flame_progression)
$AnimatedSprite2D/Sprite2D.material.set_shader_parameter(\"fire_progression\", flame_progression)
"
[sub_resource type="Environment" id="Environment_cfpbc"]
background_mode = 3
ambient_light_source = 2
tonemap_mode = 2
glow_enabled = true
glow_intensity = 1.0
glow_blend_mode = 1
[node name="Node2D" type="Node2D"]
[node name="ColorRect" type="ColorRect" parent="."]
offset_right = 1936.0
offset_bottom = 1093.0
color = Color(0.170168, 0.163934, 0.303063, 1)
[node name="Sprite2D2" type="Sprite2D" parent="."]
material = ExtResource("1_5xkf6")
position = Vector2(840, 622)
scale = Vector2(1.54492, 1.69531)
texture = SubResource("GradientTexture2D_f606e")
script = SubResource("GDScript_2ph0d")
[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Sprite2D2"]
show_behind_parent = true
clip_children = 2
position = Vector2(-9.06201, -0.589877)
scale = Vector2(0.647283, 0.589863)
sprite_frames = ExtResource("3_2ph0d")
[node name="Node2D" parent="Sprite2D2/AnimatedSprite2D" instance=ExtResource("3_5xkf6")]
material = null
position = Vector2(6, -11)
[node name="CursorCandle" parent="." instance=ExtResource("3_f606e")]
position = Vector2(1206, 675)
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_cfpbc")
[node name="card" parent="." instance=ExtResource("2_wi77g")]
position = Vector2(2447, 467)

View File

@ -0,0 +1,7 @@
[gd_scene load_steps=2 format=3 uid="uid://d13scho6nihoo"]
[ext_resource type="PackedScene" uid="uid://dotekvpr6rytk" path="res://base-environments/transition/import/subway_train.glb" id="1_nha1s"]
[node name="Node3D" type="Node3D"]
[node name="subway_train" parent="." instance=ExtResource("1_nha1s")]

View File

@ -7,9 +7,9 @@ static var source_dicts: Array[Dictionary] = [
"c_confusion": ["p_inner_conflict", "p_outer_conflict", []]
},
{
"c_homework": ["p_good_grades", "p_upset_peers", []],
"c_homework": ["p_good_grades", "p_worried_mother", []],
"c_teachers": ["p_volunteering", "p_becoming_teacher", []],
"c_joy": ["p_worried_mother", "p_thomas_gifted", []]
"c_gifted": ["p_upset_peers", "p_joy", []]
},
{
"c_comic_heroes": ["p_effort", "p_agent_q", []],
@ -27,6 +27,7 @@ static var id_reference: Dictionary[StringName, StringName] = generate_id_refere
static var card_id_reference: Dictionary[StringName, StringName] = generate_id_reference(true, false)
static var sticky_id_reference: Dictionary[StringName, StringName] = generate_id_reference(false, true)
static var obscure_reference: Dictionary[StringName, StringName] = generate_obscure_reference()
static func generate_id_reference(include_cards: bool, include_sticky: bool) -> Dictionary[StringName, StringName]:
var out:Dictionary[StringName, StringName] = {}
@ -42,6 +43,22 @@ static func generate_id_reference(include_cards: bool, include_sticky: bool) ->
return out
static func generate_obscure_reference():
var out:Dictionary[StringName, StringName] = {}
randomize()
var salt = randi_range(1111, 9999)
for id in range(source_dicts.size()):
for card_name:String in source_dicts[id].keys():
out[card_name] = StringName("%d.%d" % [id, card_name.hash() % salt ])
for sticky_name in source_dicts[id][card_name]:
if sticky_name is String:
out[sticky_name] = StringName("%d.%s.%s" % [id, card_name.hash() % salt, sticky_name.hash() % salt])
return out
static func get_child_names_of(parent_id: StringName) -> Array[StringName]:
var out: Array[StringName]
@ -55,6 +72,12 @@ static func get_child_names_of(parent_id: StringName) -> Array[StringName]:
static func get_children_of(parent_id: StringName) -> Array:
return get_cards_by_name_array(get_child_names_of(parent_id))["sticky_notes"]
static func get_obscure_name(card_name: StringName):
if State.obscure_logs and not OS.is_debug_build():
return obscure_reference[card_name]
else:
return card_name
func arrange(cards: Array[Card], rect: Rect2, obstacles: Array[Area2D]) -> Array[Card]:
var total_cards = cards.size()

View File

@ -20,3 +20,9 @@ func pull_save_state(save: SaveGame) -> void:
func save_room():
pull_save_state(save_game)
save_game.save_to_file(get_tree().root.get_texture())
func prepare_transition():
pass
func unload():
pass

View File

@ -21,10 +21,11 @@ var _is_initialised: bool = false
set(value):
mementos_complete = value
if _is_initialised: changed.emit()
@export var board_state: Dictionary = {"cards": {}, "stickies": {}}:
@export var board_state: Dictionary = {"cards": {}, "stickies": {}, "randoms": []}:
set(value):
board_state = value
if _is_initialised: changed.emit()
@export var is_childhood_board_complete: bool = false
@export var thumbnail: Texture = preload("res://import/interface-elements/empty_save_slot.png"):
set(value):
thumbnail = value
@ -84,6 +85,7 @@ func read_save_file():
parsed["current_room"] is float and
parsed["mementos_complete"] is float and
parsed["board_state"] is Dictionary and
parsed["is_childhood_board_complete"] is bool and
parsed["last_saved"] is float and
parsed["demo"] is bool and last_saved != 0
)
@ -100,15 +102,19 @@ func read_save_file():
var cards: Dictionary[StringName, Variant]
var stickies: Dictionary[StringName, Variant]
var randoms: Array[StringName]
for cardname:String in board_state["cards"]:
cards[StringName(cardname)] = board_state["cards"][cardname]
for sticky_name:String in board_state["stickies"]:
stickies[StringName(sticky_name)] = board_state["stickies"][sticky_name]
for random_name:StringName in board_state["randoms"]:
randoms.append( board_state["randoms"][random_name] )
board_state = {
"cards": cards,
"stickies": stickies
"stickies": stickies,
"randoms": randoms
}
is_valid = are_types_valid \
@ -131,6 +137,7 @@ func _get_save_dict() -> Dictionary:
"current_room": current_room,
"mementos_complete": mementos_complete,
"board_state": board_state,
"is_childhood_board_complete": is_childhood_board_complete,
"last_saved": last_saved,
"is_demo": is_demo
}

View File

@ -1,7 +1,10 @@
extends Node
var has_initialized
func _ready() -> void:
var initialize_response: Dictionary = Steam.steamInitEx()
print("Did Steam initialize?: %s " % initialize_response)
if State.disconnect_steam:
Steam.steamShutdown()
else:
has_initialized = initialize_response["status"] == 0

View File

@ -1,11 +1,24 @@
class_name StereoSwitch extends AudioStreamPlayer
@export var alternate_streams: Dictionary[String, AudioStream]
var default_stream: AudioStream
func _ready() -> void:
State.settings_changed.connect(update_mix_target)
update_mix_target()
default_stream = stream
func update_mix_target():
if State.force_stereo:
if State.force_stereo or true:
mix_target = AudioStreamPlayer.MIX_TARGET_STEREO
else:
mix_target = AudioStreamPlayer.MIX_TARGET_CENTER
func play(from:float = 0.0) -> void:
match State.speech_language:
1: stream = default_stream
2:
if alternate_streams.keys().has("de"):
stream = alternate_streams["de"]
super.play(from)

File diff suppressed because one or more lines are too long

View File

@ -168,16 +168,16 @@ p_upset_peers,my peers were upset about that.,meine Klasse war deswegen sauer.,,
c_teachers,"I like my teachers more than my classmates, ","Ich komm mit meinen Lehrern besser klar, als mit meiner Klasse, ",,,
p_volunteering,doing voluntary social service at my school would be great.,vielleicht sollte ich ein FSJ vor dem Studium machen.,,,
p_becoming_teacher,Maybe I want to become a teacher.,vielleicht sollte ich Lehrerin werden.,,,
c_joy,"I can put ages into things I enjoy, ","Ich versinke in Dingen, die mir Freude machen,",,,
c_gifted,Mr Thomas said that I was gifted,Herr Thomas sagt ich sei hochbegabt,,,
p_worried_mother,my mother would be worried about that.,meiner Mutter macht das Sorgen.,,,
p_thomas_gifted,Mr. Thomas thinks that makes me gifted.,Herr Thomas denkt das macht mich begabt.,,,
p_joy,"I can put ages into things I enjoy, ","Ich versinke schnell in Dingen, die mir Freude machen.",,,
c_comic_heroes,"Comic heroes are my role models, ","Comic Helden sind meine Vorbilder,",,,
p_effort,"when I put in the effort, I can make the world a better place!","wenn ich mich nur anstrenge, kann ich die Welt verbessern!",,,
p_agent_q,and I want to be like Agent Q!,"Ich will so sein, wie Agent Q!",,,
c_boy_stuff,"I like boy stuff, ","Ich mag Jungs Kram,",,,
p_pretending,yet they think I'm just pretending.,aber die denken ich tu einfach nur so.,,,
p_girls,and girls don't get that.,und Mädchen verstehen das einfach nicht!,,,
c_teasing,"When Jojo got bullied for trying, I pretty much exploded","Ich bin ausgerastet, weil Jojo für ihre Mühe gemobbt wurde,",,,
c_teasing,"When my friend got teased, I lashed out to defend them","Ich verteidige mit vollem Elan Freund*innen, die geärgert werden",,,
p_stubborn,"I wouldn't have it any other way, even if it was for my own good.","das würde ich nicht aufgeben, selbst wenn es mir helfen würde.",,,
p_good_intended,I will always stand up for the good intended!,"ich werde immer für Menschen einstehen, die das Richtige wollen!",,,
c_jui_jutsu,"I stopped doing jiu-jitsu, ","Ich habe mit Jiu Jitsu aufgehört,",,,
@ -190,7 +190,7 @@ p_vent,and that's a great vent.,ich kann da gut Frust ablassen.,,,
p_wet,"I was wet, so I must have been into it?","Ich war feucht, also hab ich es wohl gewollt?",,,This line on itself should seem like a intrusive thought on its own without the contect above.
"Lukas jumped me, he didn't even explain a thing or ask consent. I was confused and paralised, so ","Lukas jumped me, he didn't even explain a thing or ask consent. I was confused and paralised, so ","Lukas hat mich überrumpelt, er hat nichts erklärt oder überhaupt gefragt, was ich wollte. Ich war im Moment nicht mehr ich selbst und",,,It is very crucial that this sentence and the next line form a complete sentence
p_stop,I didnt say stop.,Ich habe nicht Stopp gesagt.,,,This line on itself should seem like a intrusive thought on its own without the contect above.
c_out_of_world,"I feel like I am not from of this world, ","Ich fühl mich wie von einer anderen Welt,",,,
c_out_of_world,"I feel like I am not of this world, ","Ich fühl mich wie von einer anderen Welt,",,,
p_unique,I like being unique like that.,ich mag es so besonders zu sein.,,,
p_few_friends,I am thankful for the few friends that get me.,"gut, dass ich ein paar Freunde habe, die das verstehen.",,,
c_rejection,"I fear being rejected, ","Ich habe Angst, ausgeschlossen zu werden,",,,
@ -199,95 +199,95 @@ p_laughed_at,I'm afraid I will just get laughed at?,"was, wenn ich deswegen ausg
c_confusion,"I am just too many things at once, ","Ich bin zu vieles gleichzeitig, ",,,
p_inner_conflict,it is just so overwhealming for me.,das ist einfach überfordernd für mich.,,,
p_outer_conflict,this is just too much for others.,das ist einfach überfordernd für andere.,,,
"Oh, my old mask. I have so many good memories about theatre club. ","Oh, my old mask. I have so many good memories about theatre club.","Nahw, meine gute alte Maske. Ich habe so schöne Erinnerungen an die Theater-AG. ",,,
"I would stand on my bed for entire afternoons, weeks on end, practicing my lines. Pretending to be on the big stage ... ","I would stand on my bed for entire afternoons, weeks on end, practicing my lines. Pretending to be on the big stage ... ","Ich hab den ganzen Nachmittag geübt, wochenlang. Mein Bett eine große Bühne. ",,,
"my mom would get mad at me, when she had to call me three or four times for dinner. ","my mom would get mad at me, when she had to call me three or four times for dinner. ","Es gab so oft Zoff, weil mich meine Mutter immer wieder zum Essen rufen musste.",,,
I just … didn't like the interruptions. We both were often mad at each other.,I just … didn't like the interruptions. We both were often mad at each other.,Ich konnte die Unterbrechungen einfach nicht ab. Wir haben uns so oft deswegen gestritten.,,,
Dinner was difficult.,Dinner was difficult.,Abendbrot war die Hölle.,,,
"I just couldn't bring myself to eat, because I couldn't deal with the bread and my mom.","I just couldn't bring myself to eat, because I couldn't deal with the bread and my mom.","Ich weiß nicht, was mich mehr gestört hat: das Brot oder Mom.",,,
She was always so worried.,She was always so worried:,Sie war immer besorgt.,,,
" Lisa, you forgot your homework, Lisa why won't you play with the other girls,""","Lisa, you forgot your homework, Lisa why won't you play with the other girls, ","“Lisa, deine Hausaufgaben!, Lisa, warum warst du heute nicht bei den Mädels draußen?, ",,,
"""Lisa why didn't Steffi invite you to her birthday, Lisa this, Lisa that.","Lisa why didn't Steffi invite you to her birthday, Lisa this, Lisa that.","Lisa, warum hat dich Steffi nicht eingeladen?, Lisa dies, Lisa das.”",,,
But I was fine! She just wouldn't listen.,But I was fine! She just wouldn't listen.,"Mir ging gut, okay? Als ob sie das je interessiert hätte.",,,
"Yes, I didn't do homework, but my teachers didn't mind it as much with me ","Yes, I didn't do homework, but my teachers didn't mind it as much with me ","Natürlich habe ich keine Hausaufgaben gemacht, aber das hat in der Schule bei mir auch niemand' interessiert, ",,,
- which the other kids wouldn't shut up about. But like …,", which the other kids wouldn't shut up about. But like ","außer meine Klasse vielleicht, aber wer interessiert sich schon für die? ",,,
they also made fun of me reading school books and talking to my teachers during breaks.,they also made fun of me reading school books and talking to my teachers during breaks.,"Vielleicht hätten die auch mal ein Buch in die Hand nehmen sollen statt sich darüber zu zerreißen, dass ich in der Pause lieber mit den Erwachsenen geredet habe. ",,,
But at least I could fucking talk to teachers and they had stuff to say.,But at least I could fucking talk to teachers and they had stuff to say.,Immerhin konnte man mit denen reden und die haben auch was erzählt.,,,
Mr Thomas probably even understood me better than my own mom.,Mr Thomas probably even understood me better than my own mom.,"Herr Thomas hat mich vermutlich besser verstanden, als meine eigene Mutter.",,,
He said I was gifted. He said I just didn't need homework for good grades.,He said I was gifted. He said I just didn't need homework for good grades.,"Er hat immer gesagt ich bin begabt, weil ich gute Noten auch ohne Hausaufgaben geschafft habe.",,,
And he also made sure to always include extra credits. So my silly slip-ups wouldn't get me a B.,And he also made sure to always include extra credits. So my silly slip-ups wouldn't get me a B.,"Und er hat immer Fleißaufgaben gehabt, damit ich auch mit Schusselfehlern eine Eins bekomme.",,,
Moonlight trickled down through clouds and twigs as Dräven tapped through the night.,Moonlight trickled down through clouds and twigs as Dräven tapped through the night.,"Das Mondlicht spielte mit Wolken und Geäst, da lief Dräven durch die Nacht. ",,,
He had been searching for a while and he knew a special someone must be hiding in the thicket.,He had been searching for a while and he knew a special someone must be hiding in the thicket.,"Lang schon suchte er vergeblich, doch war er sich heute gewiss: jemand ganz besonderes hält sich zwischen Farnen und Gestrüpp versteckt.",,,
"When a familiar smell first led him to a few bronce hairs as fluffy as his tail, he didn't think much of it.","When a familiar smell first led him to a few bronce hairs as fluffy as his tail, he didn't think much of it. ","Er dachte sich nichts dabei, als ihn neulich ein vertrauter Geruch zu einem Büschel Haare führte: Bronzen und so weich, wie sein eig'ner Schweif. ",,,
"But then he saw paw-prints, that matched his own where he had not been. Would he finally find someone of his kind?","But then he saw paw-prints, that matched his own where he had not been. Would he finally find someone of his kind?","Doch dann Spuren, die den seinen glichen, wo er noch nicht gewesen war. Würde er endlich seinesgleichen finden?",,,
"He was sure of it, as the familiar scent has never been stronger than tonight.","He was sure of it, as the familiar scent has never been stronger than tonight.","Bestimmt, denn der vertraute Duft war heute Nacht so stark, wie nie..",,,
When suddenly: Was that chatter?,When suddenly: Was that chatter?,Plötzlich: war das Keckern?,,,
His wings rustled with joy over the familiar voice and Dräven decided to get a better look.,His wings rustled with joy over the familiar voice and Dräven decided to get a better look.,Seine Flügel raschelten vor Freude über die vertraute Stimme und Drävens Neugier war geweckt.,,,
"A few flaps and leaps brought him up a tree, to get a glimpse of his soon to be friend.","A few flaps and leaps brought him up a tree, to get a glimpse of his soon to be friend.","Flatternd sprang er in Wipfel, um einen Blick auf seinen baldigen Freund zu erhaschen.",,,
But all he saw was a fox.,But all he saw was a fox.,Doch er sah nichts als einen Fuchs.,,,
He didn't even want to bother it anymore.,He didn't even want to bother it anymore.,Er wollte sich dem Tier nicht einmal mehr nähern.,,,
"It would just scream and laugh at his wings of leafs, just like the trees crackled at his paws, that were no roots.","It would just scream and laugh at his wings of leafs, just like the trees crackled at his paws, that were no roots. ","Es würde eh nur Kreischen vor Lachen über seine Flügel aus Blättern. Genau wie die Bäume sich geschüttelt haben über seine Pfoten, die keine Wurzeln sind. ",,,
"With a small whimper, Dräven spread his wings, and slid away to at least find comfort by seeing his reflection in the nearby lake.","With a small whimper, Dräven spread his wings, and slid away to at least find comfort by seeing his reflection in the nearby lake.",Wimmernd schlug Dräven seine Flügel auf und glitt davon zu seinem Lieblingsplatz am See. Vielleicht vermochte ihn sein Spiegelbild zu trösten.,,,
"Oh, my old mask. I have so many good memories about theatre club. ","Oh, my old mask. I have so many good memories about theatre club. ","Nahw, meine gute alte Maske. Ich habe so schöne Erinnerungen an die Theater-AG. ",,,
"I would stand on my bed for entire afternoons, weeks on end, practicing my lines. Pretending to be on the big stage ... ","I would stand on my bed for entire afternoons, weeks on end, practicing my lines. Pretending to be on the big stage … ","Ich hab den ganzen Nachmittag geübt, wochenlang. Mein Bett eine große Bühne … ",,,
"my mom would get mad at me, when she had to call me three or four times for dinner. ",The way my mom would call me down over and over for dinner was just -,"Es gab so oft Zoff, weil mich meine Mutter immer wieder zum Essen rufen musste. ",,,
I just … didn't like the interruptions. We both were often mad at each other.,I did not like the interruptions. We would get so mad at each other. ,Ich konnte die Unterbrechungen einfach nicht ab. Wir haben uns so oft deswegen gestritten. ,,,
Dinner was difficult.,Dinner was difficult. ,Abendbrot war die Hölle. ,,,
"I just couldn't bring myself to eat, because I couldn't deal with the bread and my mom.","I just couldn't bring myself to eat, because I couldn't deal with the bread and my mom. ","Ich weiß nicht, was mich mehr gestört hat: das Brot oder Mom. ",,,
She was always so worried.,She was always so worried: ,Sie war immer besorgt. ,,,
" Lisa, you forgot your homework, Lisa why won't you play with the other girls,""","Lisa, you forgot your homework! Lisa why won't you play with the other girls? ","“Lisa, deine Hausaufgaben! Lisa, warum warst du heute nicht bei den Mädels draußen? ",,,
"""Lisa why didn't Steffi invite you to her birthday, Lisa this, Lisa that.",Lisa why didn't Steffi invite you to her birthday? Lisa this.Lisa that. ,"Lisa, warum hat dich Steffi nicht eingeladen? Lisa dies. Lisa das.” ",,,
But I was fine! She just wouldn't listen.,But I was fine! She just wouldn't listen. ,"Mir ging es gut, okay? Als ob sie das je interessiert hätte. ",,,
"Yes, I didn't do homework, but my teachers didn't mind it as much with me ","Yes, I didn't do homework, but my teachers didn't mind it as much with me, ","Natürlich habe ich keine Hausaufgaben gemacht, aber das hat in der Schule bei mir auch niemand' interessiert, ",,,
- which the other kids wouldn't shut up about. But like …,which the other kids wouldn't shut up about. But like…,"außer meine Klasse vielleicht, aber wer interessiert sich schon für die? ",,,
they also made fun of me reading school books and talking to my teachers during breaks.,they also made fun of me reading school books and talking to my teachers during breaks. ,"Vielleicht hätten die auch mal ein Buch in die Hand nehmen sollen, statt sich darüber zu zerreißen, dass ich in der Pause lieber mit den Erwachsenen geredet habe. ",,,
But at least I could fucking talk to teachers and they had stuff to say.,But at least I could fucking talk to teachers and they had stuff to say. ,Immerhin konnte man mit denen reden und die haben auch was erzählt. ,,,
Mr Thomas probably even understood me better than my own mom.,Mr. Thomas probably even understood me better than my own mom. ,Herr Thomas hat mich vermutlich besser verstanden als meine eigene Mutter. ,,,
He said I was gifted. He said I just didn't need homework for good grades.,He said I was gifted. He said I just didn't need homework for good grades. ,"Er hat immer gesagt, ich bin begabt, weil ich gute Noten auch ohne Hausaufgaben geschafft habe. ",,,
And he also made sure to always include extra credits. So my silly slip-ups wouldn't get me a B.,And he also always made sure to include extra credits. So my silly slip-ups wouldn't get me a B.,"Und er hat immer Fleißaufgaben gehabt, damit ich auch mit Schusselfehlern eine Eins bekomme. ",,,
Moonlight trickled down through clouds and twigs as Dräven tapped through the night.,Moonlight trickled down through clouds and twigs as Dräven tapped through the night. ,"Das Mondlicht spielte mit Wolken und Geäst, da lief Dräven durch die Nacht. ",,,
He had been searching for a while and he knew a special someone must be hiding in the thicket.,"He had been searching for a while, and he knew a special someone must be hiding in the thicket. ","Lange schon suchte er vergeblich, doch war er sich heute gewiss: jemand ganz besonderes hält sich zwischen Farnen und Gestrüpp versteckt. ",,,
"When a familiar smell first led him to a few bronce hairs as fluffy as his tail, he didn't think much of it.","When a familiar smell first led him to a few bronze hairs as fluffy as his tail, he didn't think much of it. ","Er dachte sich nichts dabei, als ihn neulich ein vertrauter Geruch zu einem Büschel Haare führte: Bronzen und so weich, wie sein eigener Schweif. ",,,
"But then he saw paw-prints, that matched his own where he had not been. Would he finally find someone of his kind?","But then he saw paw prints, that matched his own where he had not been. Would he finally find someone of his kind? ","Doch dann Spuren, die den seinen glichen, wo er noch nicht gewesen war. Würde er endlich seinesgleichen finden? ",,,
"He was sure of it, as the familiar scent has never been stronger than tonight.","He was sure of it, as the familiar scent has never been stronger than tonight. ","Bestimmt, denn der vertraute Duft war heute Nacht so stark wie nie. ",,,
When suddenly: Was that chatter?,When suddenly: Was that chatter? ,Plötzlich: War das Keckern? ,,,
His wings rustled with joy over the familiar voice and Dräven decided to get a better look.,His wings rustled with joy over the familiar voice and Dräven decided to get a better look. ,Seine Flügel raschelten vor Freude über die vertraute Stimme und Drävens Neugier war geweckt. ,,,
"A few flaps and leaps brought him up a tree, to get a glimpse of his soon to be friend.","A few flaps and leaps brought him up a tree, to get a glimpse of his soon to be friend. ","Flatternd sprang er in Wipfel, um einen Blick auf seinen baldigen Freund zu erhaschen. ",,,
But all he saw was a fox.,But all he saw was a fox. ,Doch er sah nichts als einen Fuchs. ,,,
He didn't even want to bother it anymore.,He didn't even want to bother it anymore. ,Er wollte sich dem Tier nicht einmal mehr nähern. ,,,
"It would just scream and laugh at his wings of leafs, just like the trees crackled at his paws, that were no roots.","It would just scream and laugh at his wings of leaves, just like the trees crackled at his paws, that were no roots. ","Es würde eh nur Kreischen vor Lachen über seine Flügel aus Blättern. Genau wie die Bäume sich geschüttelt haben über seine Pfoten, die keine Wurzeln sind. ",,,
"With a small whimper, Dräven spread his wings, and slid away to at least find comfort by seeing his reflection in the nearby lake.","With a small whimper, Dräven spread his wings, and slid away to at least find comfort by seeing his reflection in the nearby lake. ",Wimmernd schlug Dräven seine Flügel auf und glitt davon zu seinem Lieblingsplatz am See. Vielleicht vermochte ihn sein Spiegelbild zu trösten. ,,,
"It took him a while to notice, how there was a sudden silence when the clouds broke: ","It took him a while to notice, how there was a sudden silence when the clouds broke: ","Dräven hätte fast nicht gemerkt, wie der Wald den Atem anhielt, als sich die Wolken teilten. ",,,
"Northern lights danced through the sky to form wings, that met at a sleek body made of stars and clouds.","Northern lights danced through the sky to form wings, that met at a sleek body made of stars and clouds.",Nordlicht tanzte durch den Himmel und wurde zu Flügeln an einem schlanken Körper aus Sternenlicht und Wolken.,,,
The whole forest held its breath as it stared into eyes of moonlight gazing down.,The whole forest held its breath as it stared into eyes of moonlight gazing down.,"Der ganze Wald sah ehrfürchtig zu Augen aus Mondlicht hinauf, die verträumt den Blick erwiderten. ",,,
Dräven was moved to tears when he gazed back at it. He was sad for the dragon that was of the moon and the stars and the skies.,Dräven was moved to tears when he gazed back at it. He was sad for the dragon that was of the moon and the stars and the skies.,"Dräven war zu Tränen gerührt, als er in hinauf sah. Voller Trauer um dem Drachen, der von Wolken, Sternen und Mondlicht war. ",,,
It must feel so lost in the universe.,It must feel so lost in the universe.,Er muss sich so verloren fühlen am Himmel.,,,
But his tears were of joy: It was the first time Dräven saw another creature of many kinds.,But his tears were of joy: It was the first time Dräven saw another creature of many kinds.,"Doch es waren Tränen der Freude. Denn es war das erste mal, dass Dräven ein anderes Viel-Wesen sah.",,,
Why do i still have this junk lying around? its not like I want to do ju jutsu ever again. I just fucked it.,Why do i still have this junk lying around? its not like I want to do ju jutsu ever again. I just fucked it.,"Boar, warum hängt hier noch dieser Müll? Ich hab Jiu Jutsu einfach verkackt.",,,
I mean I did enjoy it while it lasted. Being able to properly hit people was great.,I mean I did enjoy it while it lasted. Being able to properly hit people was great.,Ich meine … ich hatte Spaß damals. Leute gut Schlagen können ist großartig.,,,
"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. ","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.","Es gab mir Selbstvertrauen. Ich konnte Leute einschüchtern, wenn sie darum gebettelt haben aufs Maul zu bekommen und weil ich das nur einmal tatsächlich getan habe, war es auch ein super Ventil.",,,
I mean my tits just about killed me during warmup and the changing room really didn't need mirrors - thank you I know my hips are fat and disgusting - but at least there was Lukas.,I mean my tits just about killed me during warmup and the changing room really didn't need mirrors - thank you I know my hips are fat and disgusting - but at least there was Lukas.,"Ich meine … meine Titten waren die Hölle beim aufwärmen und die Umkleide hat wirklich keinen Spiegel gebraucht. Vielen Dank, ich brauche keine Erinnerung an meinen fetten Arsch. Aber wenigstens hatte ich Lukas.",,,
He was such a huge nerd. He studied math in his third semester and could talk for hours about his passion.,He was such a huge nerd. He studied math in his third semester and could talk for hours about his passion.,Er war so ein Nerd. Er konnte so gut reden. Über Mathe. Er war in seinem dritten Semester und konnte stundenlang erzählen.,,,
Also: my math grades pretty much leaped for my final year in high school thanks to him.,Also: my math grades pretty much leaped for my final year in high school thanks to him.,Und ich glaube mein Mathe-Abi war bestimmt drei Punkte besser durch ihn.,,,
"He also helped me so much with jiu jitsu, as he properly floored me when I slipped up. ","He also helped me so much with jiu jitsu, as he properly floored me when I slipped up.","Und ach bei Jui Jutsu … es hat mir so sehr geholfen, dass er mich einfach anständig hingelegt hat, wenn ich gefailed habe.",,,
Also - unlike everyone else - he understood that I didn't want people to mind my chest.,Also - unlike everyone else - he understood that I didn't want people to mind my chest.,"Und er war der einzige, der wirklich verstanden hat, dass mir egal war, ob Leute mir an die Brüste kommen.",,,
So Fighting for wins with him was actually rewarding even tho more often than not I ended up having to tap out.,So Fighting for wins with him was actually rewarding even tho more often than not I ended up having to tap out.,"Mit ihm war Kämpfen so gut auch wenn ich üblicherweise diejenige war, die abschlagen musste und nicht er.",,,
We also had my first proper kiss. I thought I loved him. But now?,We also had my first proper kiss. I thought I loved him. But now?,"Wir hatten auch meinen ersten richtigen Kuss. Ich war so verliebt, und jetzt?",,,
He was weird that evening. Even more huggy and hyperactive than usual.,He was weird that evening. Even more huggy and hyperactive than usual.,Es war so merkwürdig. Irgendwie noch hibbeliger und näher als so schon.,,,
"We were under my bed, reading my secret comic stash when I got tired of the floor and told him we should go upstairs.","We were under my bed, reading my secret comic stash when I got tired of the floor and told him we should go upstairs. ","Wir waren unterm Bett, haben meine geheime Comic-Kiste gelesen als ich keine Lust mehr auf Boden hatte und gesagt hab lass hoch gehen.",,,
We had a play fight on my mattress. I've never seen him fight like this.,We had a play fight on my mattress. I've never seen him fight like this.,Wir haben auf meiner Matraze gekabbelt. Es war so … anders.,,,
"His fingers Curled across my Skin without grabbing me, like he would normally do. And he let me win","His fingers Curled across my Skin without grabbing me, like he would normally do. And he let me win ",Seine Finger sind über meinen Körper geglitten ohne mich zu greifen - und er hat mich gewinnen lassen.,,,
… with this smirk on his face.,… with this smirk on his face.,mit diesem Grinsen!,,,
"I rolled over exhausted when suddenly he sat on top of me, a pearl of sweat dropped from his nose on my throat.","I rolled over exhausted when suddenly he sat on top of me, a pearl of sweat dropped from his nose on my throat. ","Ich habe mich erschöpft zur Seite gerollt, als er plötzlich auf mir saß. Eine Perle Schweiß fiel von seiner Nase auf meinen Hals",,,
He started undoing his shirt.,He started undoing his shirt.,Er hat sein Hemd auf gemacht.,,,
Do you have condoms?,”Do you have condoms?”,Hast du Kondome?,,,
"Yes, of course everybody has Why did he ask that?","”Yes, of course everybody has Why did he ask that?”.","Natürlich, jeder hat Kondome, warum hat er das gefragt?",,,
"I saw my body lying on the bed, getting undressed. I was drifting away, towards the stars.","I saw my body lying on the bed, getting undressed. I was drifting away, towards the stars.","Ich habe gesehen, wie mein Körper entkleidet wurde. Ich war schwerelos zwischen den Sternen.",,,
My body didn't move. It didn't say a word when the butterflies tried to escape from its stomach as he kissed it.,My body didn't move. It didn't say a word when the butterflies tried to escape from its stomach as he kissed it.,"Mein Körper hat sich nicht bewegt. Mein Mund hat nichts gesagt, als die Schmetterlinge aus meinem Bauch ausbrechen wollten, weil der geküsst wurde.",,,
"I … observed him from afar. He … didn't seem to notice, that I had left.","I … observed him from afar. He … didn't seem to notice, that I had left. ","Ich habe Lukas von Weitem beobachtet. Ihm ist nicht aufgefallen, dass ich nicht mehr da war.",,,
That I didn't return to kiss him goodbye. That I didn't hug him when he went home.,That I didn't return to kiss him goodbye. That I didn't hug him when he went home.,Dass ich ihm keinen Abschiedskuss gegeben habe. Dass ich ihn an der Tür nicht umarmt habe.,,,
My hands knocked on my brothers door. He let me lie on his carpet.,My hands knocked on my brothers door. He let me lie on his carpet.,Meine Hände klopften an Fabis tür. Ich durfte auf seinem Teppich liegen.,,,
"I saw my body lying on the bed, getting undressed. I was drifting away, towards the stars.","I saw my body lying on the bed, getting undressed. I was drifting away, towards the stars. ","Ich habe gesehen, wie mein Körper entkleidet wurde. Ich war schwerelos zwischen den Sternen.",,,
My body didnt move. It didnt say a word when the butterflies tried to escape from its stomach as he kissed it.,My body didnt move. It didnt say a word when the butterflies tried to escape from its stomach as he kissed it.,"Mein Körper hat sich nicht bewegt. Mein Mund hat nichts gesagt, als die Schmetterlinge aus meinem Bauch ausbrechen wollten, weil der geküsst wurde.",,,
"I … observed him from afar. He … didn't seem to notice, that I had left.","I … observed him from afar. He … didnt seem to notice, that I had left. ","Ich habe Lukas von Weitem beobachtet. Ihm ist nicht aufgefallen, dass ich nicht mehr da war.",,,
That I didnt return to kiss him good bye. That I didnt hug him when he went home.,That I didnt return to kiss him good bye. That I didnt hug him when he went home.,Dass ich ihm keinen Abschiedskuss gegeben habe. Dass ich ihn an der Tür nicht umarmt habe.,,,
My hands knocked on my brothers door. He let me lie on his carpet.,My hands knocked on my brothers door. He let me lie on his carpet.,Meine Hände Klopften an Fabis tür. Ich durfte auf seinem Teppich liegen.,,,
I slowly returned.,I slowly returned.,Langsam bin ich zurück gekehrt.,,,
"""How did it go?, Fabian asked.","""How did it go?, Fabian asked.","“Wie wars?”, fragte mein Bruder.",,,
"""It was moist”, I said.","""It was moist”, I said.","“Feucht?”, fragte ich.",,,
“That usually helps.”,“That usually helps.”,"“Das hilft.""",,,
"He laughed awkwardly. I just wanted to also laugh, but curled into a ball and cried.","He laughed awkwardly. I just wanted to also laugh, but curled into a ball and cried.","Er lachte peinlich berührt. Ich wollte auch lachen, aber ich habe mich zusammen gerollt und geweint.",,,
It took him a while to say something. “I … you … it's fine Lisa. I know it hurts the first time.”,It took him a while to say something. “I … you … it's fine Lisa. I know it hurts the first time.”,"Er hat eine Weile gebraucht um etwas zu sagen. “Ich … du … Lisa, es ist okay. Ich weiß das erste mal tut weh.""",,,
He gently stroked the back I was curling towards him.,He gently stroked the back I was curling towards him.,"Sanft streichelte er den Rücken, den ich ihm hin hielt.",,,
That was good. He was a sweet angel. Why must he be so bad at comforting?,That was good. He was a sweet angel. Why must he be so bad at comforting?,Das war gut. Fabi ist so gut zu mir. Warum muss er so schlecht im Trösten sein?,,,
My secret comic stash. I remember playing Clue-Men with the boys.,My secret comic stash. I remember playing Clue-Men with the boys.,Meine geheime Comic-Kiste. Wir hatten damals mit den Jungs so viel Clue-Men gespielt.,,,
I had a voice for every character in that comic. But more often than not I played him: Agent Q.,I had a voice for every character in that comic. But more often than not I played him: Agent Q.,Ich hatte eine Stimme für jeden Charakter in diesem Comic. Am liebsten aber war ich er: Agent Clue.,,,
"Going under the radar, putting in precise work to save the world.","Going under the radar, putting in precise work to save the world. ","Mit chirurgischer Präzision im Verborgenen arbeiten, um die Welt zu retten.",,,
Not having to deal with being a girl.,Not having to deal with being a girl.,Kein Mädchen sein müssen.,,,
"Boys were so much easier. They like cars, bikes, guns and agents.","Boys were so much easier. They like cars, bikes, guns and agents.","Jungs sind so viel einfacher. Sie mögen Autos, Motorräder, Waffen und Agenten.",,,
They don't talk behind your back. They don't think everything is about relationships.,They don't talk behind your back. They don't think everything is about relationships.,Jungs reden nicht hinter deinem Rücken. Jungs denken nicht alles dreht sich um Beziehungen.,,,
"Girls don't get that. I knew they talked behind my back about me only “pretending” to like boy stuff, so Id get laid ","Girls don't get that. I knew they talked behind my back about me only “pretending” to like boy stuff, so Id get laid ","Mädchen verstehen das nicht. Ich weiß sie haben über mich gelästert. Dass ich Jungs Kram nur gemocht hätte, um jemanden ins Bett zu kriegen.",,,
"… I mean, maybe they were right?","… I mean, maybe they were right?","… ich meine, vielleicht war was dran?",,,
Like I won't deny I was probably the first girl in my class to see a dick.,Like I won't deny I was probably the first girl in my class to see a dick.,Ich hab vermutlich als erstes Mädchen meiner Stufe einen Schwanz gesehen.,,,
"But like - thats what the boys do, right?","But like - thats what the boys do, right?","Aber das machen Jungs halt miteinander, oder?",,,
At least it has gotten better after me and Jojo became friends.,At least it has gotten better after me and Jojo became friends.,"Zumindest hat es sich gebessert, nachdem Jojo und ich Freundinnen wurden.",,,
I still remember how that happend. I did a voice acting workshop in art class. ,I still remember how that happend. I did a voice acting workshop in art class. ,Die Geschichte ist großartig. Ich durfte in Kunst einen Vortag über Voice Acting halten.,,,
Being allowed to share my technique in front of everyone was just :D,Being allowed to share my technique in front of everyone was just :D ,Meine Technik mit allen teilen können war einfach nur :D,,,
I mean next to nobody put in any effort. But Jojo did.,I mean next to nobody put in any effort. But Jojo did.,"Ich meine … nieman hat sich wirklich angesträngt, außer Jojo halt.",,,
"When our Mr Funny then decided to ape her attempts instead of just minding his own, I pretty much exploded.","When our Mr Funny then decided to ape her attempts instead of just minding his own, I pretty much exploded.","Als unser Klassencloun sie dann nachäffen musste anstatt sich um seinen Scheiß zu kümmern, bin ich einfach eplodiert.",,,
"After this, we suddenly were besties. And my class finally started to just leave me be. ","After this, we suddenly were besties. And my class finally started to just leave me be. ",Danach hatte ich plötzlich eine beste Freundin und endlich meine Ruhe.,,,
Maybe because I for once was friends with another girl. Maybe because I scared them. Maybe both.,Maybe because I for once was friends with another girl. Maybe because I scared them. Maybe both.,"Vielleicht, weil ich nun auch mit einem Mädchen befreundet war. Vielleicht weil die Mobber plötzlich Angst vor mir hatten. Vermutlich beides.",,,
"Northern lights danced through the sky to form wings, that met at a sleek body made of stars and clouds.",Northern lights danced through the sky to form wings that met at a sleek body made of stars and clouds. ,Nordlicht tanzte durch den Himmel und wurde zu Flügeln an einem schlanken Körper aus Sternenlicht und Wolken. ,,,
The whole forest held its breath as it stared into eyes of moonlight gazing down.,The whole forest held its breath as it stared into eyes of moonlight gazing down. ,"Der ganze Wald sah ehrfürchtig zu Augen aus Mondlicht hinauf, die verträumt den Blick erwiderten. ",,,
Dräven was moved to tears when he gazed back at it. He was sad for the dragon that was of the moon and the stars and the skies.,Dräven was moved to tears when he gazed back at it. He was sad for the dragon that was of the moon and the stars and the skies. ,"Dräven war zu Tränen gerührt, als er in hinauf sah. Voller Trauer um den Drachen, der von Wolken, Sternen und Mondlicht war. ",,,
It must feel so lost in the universe.,It must feel so lost in the universe. ,Er muss sich so verloren fühlen am Himmel. ,,,
But his tears were of joy: It was the first time Dräven saw another creature of many kinds.,But his tears were of joy: It was the first time Dräven saw another creature of many kinds. ,"Doch es waren Tränen der Freude. Denn es war das erste Mal, dass Dräven ein anderes Viel-Wesen sah. ",,,
Why do i still have this junk lying around? its not like I want to do ju jutsu ever again. I just fucked it.,Why do I still have this junk lying around? It's not like I want to do jiu-jitsu ever again. I just fucked it. ,"Boah, warum hängt hier noch dieser Müll? Ich hab Jiu Jitsu einfach verkackt. ",,,
I mean I did enjoy it while it lasted. Being able to properly hit people was great.,I mean I did enjoy it while it lasted. Being able to properly hit people was great. ,Ich meine… Ich hatte Spaß damals. Leute gut schlagen können ist großartig. ,,,
"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. ",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. ,"Es gab mir Selbstvertrauen. Ich konnte Leute einschüchtern, wenn sie darum gebettelt haben aufs Maul zu bekommen und weil ich das nur einmal tatsächlich getan habe, war es auch ein super Ventil. ",,,
I mean my tits just about killed me during warmup and the changing room really didn't need mirrors - thank you I know my hips are fat and disgusting - but at least there was Lukas.,I mean my tits just about killed me during warmup and the changing room really didn't need mirrors - thank you I know my hips are fat and disgusting - but at least there was Lukas. ,"Ich meine… Meine Titten waren die Hölle beim Aufwärmen und die Umkleide hat wirklich keinen Spiegel gebraucht. Vielen Dank, ich brauche keine Erinnerung an meinen fetten Arsch. Aber wenigstens hatte ich Lukas. ",,,
He was such a huge nerd. He studied math in his third semester and could talk for hours about his passion.,He was such a huge nerd. He studied math in his third semester and could talk for hours about his passion. ,Er war so ein Nerd. Er konnte so gut reden. Über Mathe. Er war in seinem dritten Semester und konnte stundenlang erzählen. ,,,
Also: my math grades pretty much leaped for my final year in high school thanks to him.,So my math grades pretty much leaped for my final year in high school thanks to him. ,Und ich glaube mein Mathe-Abi war bestimmt drei Punkte besser durch ihn. ,,,
"He also helped me so much with jiu jitsu, as he properly floored me when I slipped up. ",And he helped me so much with jiu-jitsu.,"Und ach, bei Jiu Jitsu… Es hat mir so sehr geholfen, dass er mich einfach anständig hingelegt hat, wenn ich gefailed habe. ",,,
Also - unlike everyone else - he understood that I didn't want people to mind my chest.,"Unlike everyone else - he understood that I didn't want people to mind my chest, and he probably made me hit the floor whenever I made a mistake.","Und er war der einzige, der wirklich verstanden hat, dass mir egal war, ob Leute mir an die Brüste kommen. ",,,
So Fighting for wins with him was actually rewarding even tho more often than not I ended up having to tap out.,So fighting for wins was actually rewarding even though more often than not I ended up having to tap out. ,"Mit ihm war Kämpfen so gut auch wenn ich üblicherweise diejenige war, die abschlagen musste und nicht er. ",,,
We also had my first proper kiss. I thought I loved him. But now?,We also had my first proper kiss. I thought I loved him. But now? ,"Wir hatten auch meinen ersten richtigen Kuss. Ich war so verliebt, und jetzt? ",,,
He was weird that evening. Even more huggy and hyperactive than usual.,Uhm... he was weird that evening. Even more huggy and hyperactive than usual. ,Es war so merkwürdig. Irgendwie noch hibbeliger und näher als so schon. ,,,
"We were under my bed, reading my secret comic stash when I got tired of the floor and told him we should go upstairs.","We were under my bed, reading my secret comic stash when I got tired of the floor and told him we should go upstairs. ","Wir waren unterm Bett, haben meine geheime Comic-Kiste gelesen, als ich keine Lust mehr auf Boden hatte und gesagt hab, lass hoch gehen. ",,,
We had a play fight on my mattress. I've never seen him fight like this.,We had a play fight on my mattress. I've never seen him fight like this. ,Wir haben auf meiner Matratze gekabbelt. Es war so… anders. ,,,
"His fingers Curled across my Skin without grabbing me, like he would normally do. And he let me win","His fingers curled across my skin without grabbing me, like he would normally do. And he let me win… ","Seine Finger sind über meinen Körper geglitten, ohne mich zu greifen - und er hat mich gewinnen lassen, ",,,
… with this smirk on his face.,with this smirk on his face.,mit diesem Grinsen. ,,,
"I rolled over exhausted when suddenly he sat on top of me, a pearl of sweat dropped from his nose on my throat.","I rolled over exhausted when suddenly he sat on top of me, a pearl of sweat dropped from his nose on to my throat. ","Ich habe mich erschöpft zur Seite gerollt, als er plötzlich auf mir saß. Eine Perle Schweiß fiel von seiner Nase auf meinen Hals. ",,,
He started undoing his shirt.,He started undoing his shirt. ,Er hat sein Hemd aufgemacht. ,,,
Do you have condoms?,”Do you have condoms?” ,"""Hast du Kondome?"" ",,,
"Yes, of course everybody has Why did he ask that?","”Yes, of course everybody has."" Why did he ask that? ","""Natürlich, jeder hat Kondome."" Warum hat er das gefragt? ",,,
"I saw my body lying on the bed, getting undressed. I was drifting away, towards the stars.","I saw my body lying on the bed, getting undressed. I was drifting away, towards the stars. ","Ich habe gesehen, wie mein Körper entkleidet wurde. Ich war schwerelos zwischen den Sternen. ",,,
My body didn't move. It didn't say a word when the butterflies tried to escape from its stomach as he kissed it.,My body didn't move. It didn't say a word when the butterflies tried to escape from my stomach as he kissed it. ,"Mein Körper hat sich nicht bewegt. Mein Mund hat nichts gesagt, als die Schmetterlinge aus meinem Bauch ausbrechen wollten, weil der geküsst wurde. ",,,
"I … observed him from afar. He … didn't seem to notice, that I had left.",I… observed him from afar. He… didn't seem to notice that I had left. ,"Ich habe Lukas von Weitem beobachtet. Ihm ist nicht aufgefallen, dass ich nicht mehr da war. ",,,
That I didn't return to kiss him goodbye. That I didn't hug him when he went home.,That I didn't return to kiss him goodbye. That I didn't hug him when he went home. ,Dass ich ihm keinen Abschiedskuss gegeben habe. Dass ich ihn an der Tür nicht umarmt habe. ,,,
My hands knocked on my brothers door. He let me lie on his carpet.,My hands knocked on my brothers door. He let me lie on his carpet. ,Meine Hände klopften an Fabis Tür. Ich durfte auf seinem Teppich liegen. ,,,
"I saw my body lying on the bed, getting undressed. I was drifting away, towards the stars.","I saw my body lying on the bed, getting undressed. I was drifting away, towards the stars. ","Ich habe gesehen, wie mein Körper entkleidet wurde. Ich war schwerelos zwischen den Sternen. ",,,
My body didnt move. It didnt say a word when the butterflies tried to escape from its stomach as he kissed it.,My body didnt move. It didnt say a word when the butterflies tried to escape from my stomach as he kissed it. ,"Mein Körper hat sich nicht bewegt. Mein Mund hat nichts gesagt, als die Schmetterlinge aus meinem Bauch ausbrechen wollten, weil der geküsst wurde. ",,,
"I … observed him from afar. He … didn't seem to notice, that I had left.",I… observed him from afar. He… didnt seem to notice that I had left. ,"Ich habe Lukas von Weitem beobachtet. Ihm ist nicht aufgefallen, dass ich nicht mehr da war. ",,,
That I didnt return to kiss him good bye. That I didnt hug him when he went home.,That I didnt return to kiss him goodbye. That I didnt hug him when he went home. ,Dass ich ihm keinen Abschiedskuss gegeben habe. Dass ich ihn an der Tür nicht umarmt habe. ,,,
My hands knocked on my brothers door. He let me lie on his carpet.,My hands knocked on my brothers door. He let me lie on his carpet. ,Meine Hände Klopften an Fabis tür. Ich durfte auf seinem Teppich liegen. ,,,
I slowly returned.,I slowly returned. ,Langsam bin ich zurückgekehrt. ,,,
"""How did it go?, Fabian asked.","""How did it go?, Fabian asked. ","“Wie wars?”, fragte mein Bruder. ",,,
"""It was moist”, I said.","""It was... moist”, I said. ","“Feucht?”, sagte ich. ",,,
“That usually helps.”,“That usually helps.” ,"“Das hilft normalerweise."" ",,,
"He laughed awkwardly. I just wanted to also laugh, but curled into a ball and cried.","He laughed awkwardly. I just wanted to also laugh, but... curled into a ball and cried. ","Er lachte peinlich berührt. Ich wollte auch lachen, aber ich habe mich zusammen gerollt und geweint. ",,,
It took him a while to say something. “I … you … it's fine Lisa. I know it hurts the first time.”,It took him a while to say something. “I… you… it's fine Lisa. I know it hurts the first time.” ,"Er hat eine Weile gebraucht um etwas zu sagen. “Ich… du… Lisa, es ist okay. Ich weiß das erste Mal tut weh."" ",,,
He gently stroked the back I was curling towards him.,He gently stroked the back I was curling towards him. ,"Sanft streichelte er den Rücken, den ich ihm hin hielt. ",,,
That was good. He was a sweet angel. Why must he be so bad at comforting?,That was good. He was a sweet angel. Why must he be so bad at comforting? ,Das war gut. Fabi ist so gut zu mir. Warum muss er so schlecht im Trösten sein? ,,,
My secret comic stash. I remember playing Clue-Men with the boys.,My secret comic stash! I remember playing Clue-Men with the boys. ,Meine geheime Comic-Kiste. Wir hatten damals mit den Jungs so viel Clue-Men gespielt. ,,,
I had a voice for every character in that comic. But more often than not I played him: Agent Q.,I had a voice for every character in that comic. But more often than not I played him: Agent Q. ,Ich hatte eine Stimme für jeden Charakter in diesem Comic. Am liebsten aber war ich er: Agent Q. ,,,
"Going under the radar, putting in precise work to save the world.","Going under the radar, putting in precise work to save the world. ","Mit chirurgischer Präzision im Verborgenen arbeiten, um die Welt zu retten. ",,,
Not having to deal with being a girl.,Not having to deal with being a girl. ,Kein Mädchen sein müssen. ,,,
"Boys were so much easier. They like cars, bikes, guns and agents.","Boys were so much easier. They like cars, bikes, guns and agents. ","Jungs sind so viel einfacher. Sie mögen Autos, Motorräder, Waffen und Agenten. ",,,
They don't talk behind your back. They don't think everything is about relationships.,They don't talk behind your back. They don't think everything is about relationships. ,Jungs reden nicht hinter deinem Rücken. Jungs denken nicht alles dreht sich um Beziehungen. ,,,
"Girls don't get that. I knew they talked behind my back about me only “pretending” to like boy stuff, so Id get laid ","Girls don't get that. I knew they talked behind my back about me only “pretending” to like boy stuff, so Id get laid.","Mädchen verstehen das nicht. Ich weiß sie haben über mich gelästert. Dass ich Jungs Kram nur gemocht hätte, um jemanden ins Bett zu kriegen",,,
"… I mean, maybe they were right?","I mean, maybe they were right? ","Ich meine, vielleicht war was dran? ",,,
Like I won't deny I was probably the first girl in my class to see a dick.,Like I won't deny I was probably the first girl in my class to see a dick. ,Ich hab vermutlich als erstes Mädchen meiner Stufe einen Schwanz gesehen. ,,,
"But like - thats what the boys do, right?","But like - thats what the boys do, right? ","Aber das machen Jungs halt miteinander, oder? ",,,
At least it has gotten better after me and Jojo became friends.,At least it has gotten better after me and Jojo became friends. ,"Zumindest hat es sich gebessert, nachdem Jojo und ich Freundinnen wurden. ",,,
I still remember how that happend. I did a voice acting workshop in art class. ,I still remember how that happened. I did a voice acting workshop in art class. ,Die Geschichte ist großartig. Ich durfte in Kunst einen Vortrag über Voice Acting halten. ,,,
Being allowed to share my technique in front of everyone was just :D,Being allowed to share my technique in front of everyone was just :D ,Meine Technik mit allen teilen können war einfach nur :D ,,,
I mean next to nobody put in any effort. But Jojo did.,"I mean next to nobody put in any effort in, but Jojo did. ","Ich meine… Niemand hat sich wirklich angestrengt, außer Jojo halt. ",,,
"When our Mr Funny then decided to ape her attempts instead of just minding his own, I pretty much exploded.","When our Mr. Funny then decided to ape her attempts instead of just minding his own, I pretty much exploded. ","Als unser Klassenclown sie dann nachäffen musste, anstatt sich um seinen Scheiß zu kümmern, bin ich einfach explodiert. ",,,
"After this, we suddenly were besties. And my class finally started to just leave me be. ","After this, we suddenly were besties and my class finally started to just leave me be. ",Danach hatte ich plötzlich eine beste Freundin und endlich meine Ruhe. ,,,
Maybe because I for once was friends with another girl. Maybe because I scared them. Maybe both.,Maybe because I for once was friends with another girl. Maybe because I scared them. Maybe both. ,"Vielleicht, weil ich nun auch mit einem Mädchen befreundet war. Vielleicht weil die Mobber plötzlich Angst vor mir hatten. Vermutlich beides. ",,,
skip reading (hold),skip reading (hold),zum Ende springen (gedrückt halten),,,
,,,,,
"*USK-Kennzeichnung bezieht sich auf den Games for Family-Stand der Spielraum-Messe Dresden.
@ -297,7 +297,8 @@ Die Kennzeichnung überträgt sich nicht auf das finale Spiel.",,,
Start the Demo!,Start the demo!,Starte die Demo!,,,
Move trough the room,Move trough the room,Durch den Raum bewegen,,,
show Content Notes,show Content Notes,Content Notes anzeigen,,,
Text Language,Text Language,Textsprache,,,
Written Text,Written Language,Geschriebener Text,,,
Spoken Text,Spoken Language,Gesprochener Text,,,
Childhood,Childhood,Kindheit,,,
voice Training,Voice Training,Stimmtechnik,,,
Collect Memento,Collect Memento,Erinnerung einsammeln,,,
@ -319,3 +320,50 @@ reveal full text (hold),reveal full text (hold),vollen Text anzeigen (halten),,,
skip scene,skip scene,Szene überspringen,,,
continue,continue,Fotfahren,,,
keep reading,keep reading,weiterhin lesen,,,
quit,Quit,Beenden,,,
Thanks for Playing the Demo!,Thanks for playing the demo!,Vielen Dank fürs Demo spielen!,,,
We hope you are looking forward to finding a better frame of mind. ,We hope you are looking forward to finding a better Frame of Mind. ,Wir hoffen ihr freut euch darauf dieses Gedankenspiel weiter zu erkunden.,,,
demo-credits,"Frame of Mind is made by betalars.
They were supported by:
Adrian Schmid, April and somebody that I used to know Programming
Jas Arianna and Newt Voice Acting
STTLE OST
Dieu Linh Vu, Polynormal Games - Producing, Publishing and Marketing
Frame of Mind was created in Godot 4.
Special thanks to: nase, Jenny, nek0, map-c, Svenja, caesey, Milo, Francis, Christoph,
the R42 Games Accellerator and to the contributers of blender, godot and inkscape.
Frame of mind is would not have been possible without purple sloth games.","Frame of Mind ist made by betalars.
Dey wurde unterstützt von:
Adrian Schmid, April und einer Person, die ich mal kannte Programmierung
Jas Arianna and Newt Voice Acting
STTLE OST
Dieu Linh Vu, Polynormal Games - Producing, Publishing und Marketing
Frame of Mind wurde mit Godot 4 entwickelt.
Besonderen Dank an: nase, Jenny, nek0, map-c, Svenja, caesey, Milo, Francis, Christoph,
den R42 Games Accellerator und an die Mitwirkenden von blender, godot und inkscape.
Frame of mind wäre nicht möglich gewesen ohne Purple Sloth Studios. ",,,
Quit,Quit,Beenden,,,
These Creative Commons pojects made frame of mind possible.,These Creative Commons pojects made Frame of Mind possible.,Diese Creative Commons Projekte haben Frame of Mind möglich gemacht. ,,,
Wishlist for a better frame of mind,Wishlist for a better frame of mind,Wishlisten für ein besseres Frame of Mind,,,
"You can move on, but you may not have understood Lisa.","You can move on, but may not have understood Lisa. ","Du kannst weitermachen, aber hast vermutlich Lisa nicht ganz verstanden. ",,,
"You may leave the room, but Lisa only agrees with %d of the %d connections.","You may leave the room, but Lisa only agrees with %d of the %d connections.","Du kannst das Zimmer verlassen, aber Lisa stimmt dir nur in %d von %d Verbindungen zu.",,,
Lisa would like you to leave her room and move on.,Lisa would like you to leave her room and move on.,"Lisa möchte, dass du ihr Jugendzimmer verlässt und weiter machst.",,,
Move on,Move on,Weitermachen,,,
"Life gave you some thoughts you did not choose to keep.
You may try to burn one.","Life gave you some thoughts you did not choose to keep.
You may try to burn one.","Das Leben hat dir ein paar Gedanken mitgegeben die du nicht ausgesucht hast.
Du darfst versuchen, einen zu verbrennen. ",,,
Keep all thoughts,Keep all Thoughts,Behalte alle Gedanken,,,
Leave room,Leave room,Den Raum verlassen,,,
Combine cards to order your thoughts.,Combine cards to order your thoughts.,"Klebe Karten aufeinander, um die Gedanken zu sortieren.",,,
There are three Mementos left to find.,Find all three Momentos to collect all thoughts.,"Finde all drei Erinnerungen, um alle Gedanken zu sammeln. ",,,
You have collected half of the mementos.,Find two more Momentos to collect all cards.,"Finde zwei weitere Erinnerungen, um alle Karten zu sammeln.",,,
Find the last Memento to complete the Board.,Find the last remaining Momento.,Finde die letzte Erinnerung. ,,,

1 keys en de es ja notes
168 "Lisa why didn't Steffi invite you to her birthday, Lisa this, Lisa that.’ Lisa why didn't Steffi invite you to her birthday, Lisa this, Lisa that.’ Lisa why didn't Steffi invite you to her birthday? Lisa this.Lisa that.’ Lisa, warum hat dich Steffi nicht eingeladen?, Lisa dies, Lisa das.” Lisa, warum hat dich Steffi nicht eingeladen? Lisa dies. Lisa das.”
169 But I was fine! She just wouldn't listen. But I was fine! She just wouldn't listen. But I was fine! She just wouldn't listen. Mir ging gut, okay? Als ob sie das je interessiert hätte. Mir ging es gut, okay? Als ob sie das je interessiert hätte.
170 Yes, I didn't do homework, but my teachers didn't mind it as much with me Yes, I didn't do homework, but my teachers didn't mind it as much with me Yes, I didn't do homework, but my teachers didn't mind it as much with me, Natürlich habe ich keine Hausaufgaben gemacht, aber das hat in der Schule bei mir auch niemand' interessiert,
171 - which the other kids wouldn't shut up about. But like … , which the other kids wouldn't shut up about. But like … which the other kids wouldn't shut up about. But like… außer meine Klasse vielleicht, aber wer interessiert sich schon für die?
172 they also made fun of me reading school books and talking to my teachers during breaks. they also made fun of me reading school books and talking to my teachers during breaks. they also made fun of me reading school books and talking to my teachers during breaks. Vielleicht hätten die auch mal ein Buch in die Hand nehmen sollen statt sich darüber zu zerreißen, dass ich in der Pause lieber mit den Erwachsenen geredet habe. Vielleicht hätten die auch mal ein Buch in die Hand nehmen sollen, statt sich darüber zu zerreißen, dass ich in der Pause lieber mit den Erwachsenen geredet habe.
173 But at least I could fucking talk to teachers and they had stuff to say. But at least I could fucking talk to teachers and they had stuff to say. But at least I could fucking talk to teachers and they had stuff to say. Immerhin konnte man mit denen reden und die haben auch was erzählt. Immerhin konnte man mit denen reden und die haben auch was erzählt.
174 Mr Thomas probably even understood me better than my own mom. Mr Thomas probably even understood me better than my own mom. Mr. Thomas probably even understood me better than my own mom. Herr Thomas hat mich vermutlich besser verstanden, als meine eigene Mutter. Herr Thomas hat mich vermutlich besser verstanden als meine eigene Mutter.
175 He said I was gifted. He said I just didn't need homework for good grades. He said I was gifted. He said I just didn't need homework for good grades. He said I was gifted. He said I just didn't need homework for good grades. Er hat immer gesagt ich bin begabt, weil ich gute Noten auch ohne Hausaufgaben geschafft habe. Er hat immer gesagt, ich bin begabt, weil ich gute Noten auch ohne Hausaufgaben geschafft habe.
176 And he also made sure to always include extra credits. So my silly slip-ups wouldn't get me a B. And he also made sure to always include extra credits. So my silly slip-ups wouldn't get me a B. And he also always made sure to include extra credits. So my silly slip-ups wouldn't get me a B. Und er hat immer Fleißaufgaben gehabt, damit ich auch mit Schusselfehlern eine Eins bekomme. Und er hat immer Fleißaufgaben gehabt, damit ich auch mit Schusselfehlern eine Eins bekomme.
177 Moonlight trickled down through clouds and twigs as Dräven tapped through the night. Moonlight trickled down through clouds and twigs as Dräven tapped through the night. Moonlight trickled down through clouds and twigs as Dräven tapped through the night. Das Mondlicht spielte mit Wolken und Geäst, da lief Dräven durch die Nacht.
178 He had been searching for a while and he knew a special someone must be hiding in the thicket. He had been searching for a while and he knew a special someone must be hiding in the thicket. He had been searching for a while, and he knew a special someone must be hiding in the thicket. Lang schon suchte er vergeblich, doch war er sich heute gewiss: jemand ganz besonderes hält sich zwischen Farnen und Gestrüpp versteckt. Lange schon suchte er vergeblich, doch war er sich heute gewiss: jemand ganz besonderes hält sich zwischen Farnen und Gestrüpp versteckt.
179 When a familiar smell first led him to a few bronce hairs as fluffy as his tail, he didn't think much of it. When a familiar smell first led him to a few bronce hairs as fluffy as his tail, he didn't think much of it. When a familiar smell first led him to a few bronze hairs as fluffy as his tail, he didn't think much of it. Er dachte sich nichts dabei, als ihn neulich ein vertrauter Geruch zu einem Büschel Haare führte: Bronzen und so weich, wie sein eig'ner Schweif. Er dachte sich nichts dabei, als ihn neulich ein vertrauter Geruch zu einem Büschel Haare führte: Bronzen und so weich, wie sein eigener Schweif.
180 But then he saw paw-prints, that matched his own where he had not been. Would he finally find someone of his kind? But then he saw paw-prints, that matched his own where he had not been. Would he finally find someone of his kind? But then he saw paw prints, that matched his own where he had not been. Would he finally find someone of his kind? Doch dann Spuren, die den seinen glichen, wo er noch nicht gewesen war. Würde er endlich seinesgleichen finden? Doch dann Spuren, die den seinen glichen, wo er noch nicht gewesen war. Würde er endlich seinesgleichen finden?
181 He was sure of it, as the familiar scent has never been stronger than tonight. He was sure of it, as the familiar scent has never been stronger than tonight. He was sure of it, as the familiar scent has never been stronger than tonight. Bestimmt, denn der vertraute Duft war heute Nacht so stark, wie nie.. Bestimmt, denn der vertraute Duft war heute Nacht so stark wie nie.
182 When suddenly: Was that chatter? When suddenly: Was that chatter? When suddenly: Was that chatter? Plötzlich: war das Keckern? Plötzlich: War das Keckern?
183 His wings rustled with joy over the familiar voice and Dräven decided to get a better look. His wings rustled with joy over the familiar voice and Dräven decided to get a better look. His wings rustled with joy over the familiar voice and Dräven decided to get a better look. Seine Flügel raschelten vor Freude über die vertraute Stimme und Drävens Neugier war geweckt. Seine Flügel raschelten vor Freude über die vertraute Stimme und Drävens Neugier war geweckt.
190 Northern lights danced through the sky to form wings, that met at a sleek body made of stars and clouds. Northern lights danced through the sky to form wings, that met at a sleek body made of stars and clouds. Northern lights danced through the sky to form wings that met at a sleek body made of stars and clouds. Nordlicht tanzte durch den Himmel und wurde zu Flügeln an einem schlanken Körper aus Sternenlicht und Wolken. Nordlicht tanzte durch den Himmel und wurde zu Flügeln an einem schlanken Körper aus Sternenlicht und Wolken.
191 The whole forest held its breath as it stared into eyes of moonlight gazing down. The whole forest held its breath as it stared into eyes of moonlight gazing down. The whole forest held its breath as it stared into eyes of moonlight gazing down. Der ganze Wald sah ehrfürchtig zu Augen aus Mondlicht hinauf, die verträumt den Blick erwiderten.
192 Dräven was moved to tears when he gazed back at it. He was sad for the dragon that was of the moon and the stars and the skies. Dräven was moved to tears when he gazed back at it. He was sad for the dragon that was of the moon and the stars and the skies. Dräven was moved to tears when he gazed back at it. He was sad for the dragon that was of the moon and the stars and the skies. Dräven war zu Tränen gerührt, als er in hinauf sah. Voller Trauer um dem Drachen, der von Wolken, Sternen und Mondlicht war. Dräven war zu Tränen gerührt, als er in hinauf sah. Voller Trauer um den Drachen, der von Wolken, Sternen und Mondlicht war.
193 It must feel so lost in the universe. It must feel so lost in the universe. It must feel so lost in the universe. Er muss sich so verloren fühlen am Himmel. Er muss sich so verloren fühlen am Himmel.
194 But his tears were of joy: It was the first time Dräven saw another creature of many kinds. But his tears were of joy: It was the first time Dräven saw another creature of many kinds. But his tears were of joy: It was the first time Dräven saw another creature of many kinds. Doch es waren Tränen der Freude. Denn es war das erste mal, dass Dräven ein anderes Viel-Wesen sah. Doch es waren Tränen der Freude. Denn es war das erste Mal, dass Dräven ein anderes Viel-Wesen sah.
195 Why do i still have this junk lying around? its not like I want to do ju jutsu ever again. I just fucked it. Why do i still have this junk lying around? its not like I want to do ju jutsu ever again. I just fucked it. Why do I still have this junk lying around? It's not like I want to do jiu-jitsu ever again. I just fucked it. Boar, warum hängt hier noch dieser Müll? Ich hab Jiu Jutsu einfach verkackt. Boah, warum hängt hier noch dieser Müll? Ich hab Jiu Jitsu einfach verkackt.
196 I mean I did enjoy it while it lasted. Being able to properly hit people was great. I mean I did enjoy it while it lasted. Being able to properly hit people was great. I mean I did enjoy it while it lasted. Being able to properly hit people was great. Ich meine … ich hatte Spaß damals. Leute gut Schlagen können ist großartig. Ich meine… Ich hatte Spaß damals. Leute gut schlagen können ist großartig.
199 He was such a huge nerd. He studied math in his third semester and could talk for hours about his passion. He was such a huge nerd. He studied math in his third semester and could talk for hours about his passion. He was such a huge nerd. He studied math in his third semester and could talk for hours about his passion. Er war so ein Nerd. Er konnte so gut reden. Über Mathe. Er war in seinem dritten Semester und konnte stundenlang erzählen. Er war so ein Nerd. Er konnte so gut reden. Über Mathe. Er war in seinem dritten Semester und konnte stundenlang erzählen.
200 Also: my math grades pretty much leaped for my final year in high school thanks to him. Also: my math grades pretty much leaped for my final year in high school thanks to him. So my math grades pretty much leaped for my final year in high school thanks to him. Und ich glaube mein Mathe-Abi war bestimmt drei Punkte besser durch ihn. Und ich glaube mein Mathe-Abi war bestimmt drei Punkte besser durch ihn.
201 He also helped me so much with jiu jitsu, as he properly floored me when I slipped up. He also helped me so much with jiu jitsu, as he properly floored me when I slipped up. And he helped me so much with jiu-jitsu. Und ach bei Jui Jutsu … es hat mir so sehr geholfen, dass er mich einfach anständig hingelegt hat, wenn ich gefailed habe. Und ach, bei Jiu Jitsu… Es hat mir so sehr geholfen, dass er mich einfach anständig hingelegt hat, wenn ich gefailed habe.
202 Also - unlike everyone else - he understood that I didn't want people to mind my chest. Also - unlike everyone else - he understood that I didn't want people to mind my chest. Unlike everyone else - he understood that I didn't want people to mind my chest, and he probably made me hit the floor whenever I made a mistake. Und er war der einzige, der wirklich verstanden hat, dass mir egal war, ob Leute mir an die Brüste kommen. Und er war der einzige, der wirklich verstanden hat, dass mir egal war, ob Leute mir an die Brüste kommen.
203 So Fighting for wins with him was actually rewarding even tho more often than not I ended up having to tap out. So Fighting for wins with him was actually rewarding even tho more often than not I ended up having to tap out. So fighting for wins was actually rewarding even though more often than not I ended up having to tap out. Mit ihm war Kämpfen so gut – auch wenn ich üblicherweise diejenige war, die abschlagen musste und nicht er. Mit ihm war Kämpfen so gut – auch wenn ich üblicherweise diejenige war, die abschlagen musste und nicht er.
204 We also had my first proper kiss. I thought I loved him. But now? We also had my first proper kiss. I thought I loved him. But now? We also had my first proper kiss. I thought I loved him. But now? Wir hatten auch meinen ersten richtigen Kuss. Ich war so verliebt, und jetzt? Wir hatten auch meinen ersten richtigen Kuss. Ich war so verliebt, und jetzt?
205 He was weird that evening. Even more huggy and hyperactive than usual. He was weird that evening. Even more huggy and hyperactive than usual. Uhm... he was weird that evening. Even more huggy and hyperactive than usual. Es war so merkwürdig. Irgendwie noch hibbeliger und näher als so schon. Es war so merkwürdig. Irgendwie noch hibbeliger und näher als so schon.
206 We were under my bed, reading my secret comic stash when I got tired of the floor and told him we should go upstairs. We were under my bed, reading my secret comic stash when I got tired of the floor and told him we should go upstairs. Wir waren unterm Bett, haben meine geheime Comic-Kiste gelesen als ich keine Lust mehr auf Boden hatte und gesagt hab lass hoch gehen. Wir waren unterm Bett, haben meine geheime Comic-Kiste gelesen, als ich keine Lust mehr auf Boden hatte und gesagt hab, lass hoch gehen.
207 We had a play fight on my mattress. I've never seen him fight like this. We had a play fight on my mattress. I've never seen him fight like this. We had a play fight on my mattress. I've never seen him fight like this. Wir haben auf meiner Matraze gekabbelt. Es war so … anders. Wir haben auf meiner Matratze gekabbelt. Es war so… anders.
208 His fingers Curled across my Skin without grabbing me, like he would normally do. And he let me win His fingers Curled across my Skin without grabbing me, like he would normally do. And he let me win His fingers curled across my skin without grabbing me, like he would normally do. And he let me win… Seine Finger sind über meinen Körper geglitten ohne mich zu greifen - und er hat mich gewinnen lassen. Seine Finger sind über meinen Körper geglitten, ohne mich zu greifen - und er hat mich gewinnen lassen,
209 … with this smirk on his face. … with this smirk on his face. with this smirk on his face. mit diesem Grinsen! mit diesem Grinsen.
210 I rolled over exhausted when suddenly he sat on top of me, a pearl of sweat dropped from his nose on my throat. I rolled over exhausted when suddenly he sat on top of me, a pearl of sweat dropped from his nose on my throat. I rolled over exhausted when suddenly he sat on top of me, a pearl of sweat dropped from his nose on to my throat. Ich habe mich erschöpft zur Seite gerollt, als er plötzlich auf mir saß. Eine Perle Schweiß fiel von seiner Nase auf meinen Hals Ich habe mich erschöpft zur Seite gerollt, als er plötzlich auf mir saß. Eine Perle Schweiß fiel von seiner Nase auf meinen Hals.
211 He started undoing his shirt. He started undoing his shirt. He started undoing his shirt. Er hat sein Hemd auf gemacht. Er hat sein Hemd aufgemacht.
212 Do you have condoms? ”Do you have condoms?” ”Do you have condoms?” Hast du Kondome? "Hast du Kondome?"
213 Yes, of course everybody has Why did he ask that? ”Yes, of course everybody has Why did he ask that?”. ”Yes, of course everybody has." Why did he ask that? Natürlich, jeder hat Kondome, warum hat er das gefragt? "Natürlich, jeder hat Kondome." Warum hat er das gefragt?
214 I saw my body lying on the bed, getting undressed. I was drifting away, towards the stars. I saw my body lying on the bed, getting undressed. I was drifting away, towards the stars. I saw my body lying on the bed, getting undressed. I was drifting away, towards the stars. Ich habe gesehen, wie mein Körper entkleidet wurde. Ich war schwerelos zwischen den Sternen. Ich habe gesehen, wie mein Körper entkleidet wurde. Ich war schwerelos zwischen den Sternen.
215 My body didn't move. It didn't say a word when the butterflies tried to escape from its stomach as he kissed it. My body didn't move. It didn't say a word when the butterflies tried to escape from its stomach as he kissed it. My body didn't move. It didn't say a word when the butterflies tried to escape from my stomach as he kissed it. Mein Körper hat sich nicht bewegt. Mein Mund hat nichts gesagt, als die Schmetterlinge aus meinem Bauch ausbrechen wollten, weil der geküsst wurde. Mein Körper hat sich nicht bewegt. Mein Mund hat nichts gesagt, als die Schmetterlinge aus meinem Bauch ausbrechen wollten, weil der geküsst wurde.
216 I … observed him from afar. He … didn't seem to notice, that I had left. I … observed him from afar. He … didn't seem to notice, that I had left. I… observed him from afar. He… didn't seem to notice that I had left. Ich habe Lukas von Weitem beobachtet. Ihm ist nicht aufgefallen, dass ich nicht mehr da war. Ich habe Lukas von Weitem beobachtet. Ihm ist nicht aufgefallen, dass ich nicht mehr da war.
217 That I didn't return to kiss him goodbye. That I didn't hug him when he went home. That I didn't return to kiss him goodbye. That I didn't hug him when he went home. That I didn't return to kiss him goodbye. That I didn't hug him when he went home. Dass ich ihm keinen Abschiedskuss gegeben habe. Dass ich ihn an der Tür nicht umarmt habe. Dass ich ihm keinen Abschiedskuss gegeben habe. Dass ich ihn an der Tür nicht umarmt habe.
218 My hands knocked on my brother’s door. He let me lie on his carpet. My hands knocked on my brother’s door. He let me lie on his carpet. My hands knocked on my brother’s door. He let me lie on his carpet. Meine Hände klopften an Fabis tür. Ich durfte auf seinem Teppich liegen. Meine Hände klopften an Fabis Tür. Ich durfte auf seinem Teppich liegen.
219 I saw my body lying on the bed, getting undressed. I was drifting away, towards the stars. I saw my body lying on the bed, getting undressed. I was drifting away, towards the stars. Ich habe gesehen, wie mein Körper entkleidet wurde. Ich war schwerelos zwischen den Sternen. Ich habe gesehen, wie mein Körper entkleidet wurde. Ich war schwerelos zwischen den Sternen.
220 My body didn’t move. It didn’t say a word when the butterflies tried to escape from it’s stomach as he kissed it. My body didn’t move. It didn’t say a word when the butterflies tried to escape from it’s stomach as he kissed it. My body didn’t move. It didn’t say a word when the butterflies tried to escape from my stomach as he kissed it. Mein Körper hat sich nicht bewegt. Mein Mund hat nichts gesagt, als die Schmetterlinge aus meinem Bauch ausbrechen wollten, weil der geküsst wurde. Mein Körper hat sich nicht bewegt. Mein Mund hat nichts gesagt, als die Schmetterlinge aus meinem Bauch ausbrechen wollten, weil der geküsst wurde.
221 I … observed him from afar. He … didn't seem to notice, that I had left. I … observed him from afar. He … didn’t seem to notice, that I had left. I… observed him from afar. He… didn’t seem to notice that I had left. Ich habe Lukas von Weitem beobachtet. Ihm ist nicht aufgefallen, dass ich nicht mehr da war. Ich habe Lukas von Weitem beobachtet. Ihm ist nicht aufgefallen, dass ich nicht mehr da war.
222 That I didn’t return to kiss him good bye. That I didn’t hug him when he went home. That I didn’t return to kiss him good bye. That I didn’t hug him when he went home. That I didn’t return to kiss him goodbye. That I didn’t hug him when he went home. Dass ich ihm keinen Abschiedskuss gegeben habe. Dass ich ihn an der Tür nicht umarmt habe. Dass ich ihm keinen Abschiedskuss gegeben habe. Dass ich ihn an der Tür nicht umarmt habe.
223 My hands knocked on my brother’s door. He let me lie on his carpet. My hands knocked on my brother’s door. He let me lie on his carpet. My hands knocked on my brother’s door. He let me lie on his carpet. Meine Hände Klopften an Fabis tür. Ich durfte auf seinem Teppich liegen. Meine Hände Klopften an Fabis tür. Ich durfte auf seinem Teppich liegen.
224 I slowly returned. I slowly returned. I slowly returned. Langsam bin ich zurück gekehrt. Langsam bin ich zurückgekehrt.
225 "How did it go?, Fabian asked. "How did it go?, Fabian asked. "How did it go?, Fabian asked. “Wie wars?”, fragte mein Bruder. “Wie wars?”, fragte mein Bruder.
226 "It was moist”, I said. "It was moist”, I said. "It was... moist”, I said. “Feucht?”, fragte ich. “Feucht?”, sagte ich.
227 “That usually helps.” “That usually helps.” “That usually helps.” “Das hilft." “Das hilft normalerweise."
228 He laughed awkwardly. I just wanted to also laugh, but curled into a ball and cried. He laughed awkwardly. I just wanted to also laugh, but curled into a ball and cried. He laughed awkwardly. I just wanted to also laugh, but... curled into a ball and cried. Er lachte peinlich berührt. Ich wollte auch lachen, aber ich habe mich zusammen gerollt und geweint. Er lachte peinlich berührt. Ich wollte auch lachen, aber ich habe mich zusammen gerollt und geweint.
229 It took him a while to say something. “I … you … it's fine Lisa. I know it hurts the first time.” It took him a while to say something. “I … you … it's fine Lisa. I know it hurts the first time.” It took him a while to say something. “I… you… it's fine Lisa. I know it hurts the first time.” Er hat eine Weile gebraucht um etwas zu sagen. “Ich … du … Lisa, es ist okay. Ich weiß das erste mal tut weh." Er hat eine Weile gebraucht um etwas zu sagen. “Ich… du… Lisa, es ist okay. Ich weiß das erste Mal tut weh."
230 He gently stroked the back I was curling towards him. He gently stroked the back I was curling towards him. He gently stroked the back I was curling towards him. Sanft streichelte er den Rücken, den ich ihm hin hielt. Sanft streichelte er den Rücken, den ich ihm hin hielt.
231 That was good. He was a sweet angel. Why must he be so bad at comforting? That was good. He was a sweet angel. Why must he be so bad at comforting? That was good. He was a sweet angel. Why must he be so bad at comforting? Das war gut. Fabi ist so gut zu mir. Warum muss er so schlecht im Trösten sein? Das war gut. Fabi ist so gut zu mir. Warum muss er so schlecht im Trösten sein?
232 My secret comic stash. I remember playing Clue-Men with the boys. My secret comic stash. I remember playing Clue-Men with the boys. My secret comic stash! I remember playing Clue-Men with the boys. Meine geheime Comic-Kiste. Wir hatten damals mit den Jungs so viel Clue-Men gespielt. Meine geheime Comic-Kiste. Wir hatten damals mit den Jungs so viel Clue-Men gespielt.
233 I had a voice for every character in that comic. But more often than not I played him: Agent Q. I had a voice for every character in that comic. But more often than not I played him: Agent Q. I had a voice for every character in that comic. But more often than not I played him: Agent Q. Ich hatte eine Stimme für jeden Charakter in diesem Comic. Am liebsten aber war ich er: Agent Clue. Ich hatte eine Stimme für jeden Charakter in diesem Comic. Am liebsten aber war ich er: Agent Q.
234 Going under the radar, putting in precise work to save the world. Going under the radar, putting in precise work to save the world. Mit chirurgischer Präzision im Verborgenen arbeiten, um die Welt zu retten. Mit chirurgischer Präzision im Verborgenen arbeiten, um die Welt zu retten.
235 Not having to deal with being a girl. Not having to deal with being a girl. Not having to deal with being a girl. Kein Mädchen sein müssen. Kein Mädchen sein müssen.
236 Boys were so much easier. They like cars, bikes, guns and agents. Boys were so much easier. They like cars, bikes, guns and agents. Boys were so much easier. They like cars, bikes, guns and agents. Jungs sind so viel einfacher. Sie mögen Autos, Motorräder, Waffen und Agenten. Jungs sind so viel einfacher. Sie mögen Autos, Motorräder, Waffen und Agenten.
237 They don't talk behind your back. They don't think everything is about relationships. They don't talk behind your back. They don't think everything is about relationships. They don't talk behind your back. They don't think everything is about relationships. Jungs reden nicht hinter deinem Rücken. Jungs denken nicht alles dreht sich um Beziehungen. Jungs reden nicht hinter deinem Rücken. Jungs denken nicht alles dreht sich um Beziehungen.
238 Girls don't get that. I knew they talked behind my back about me only “pretending” to like boy stuff, so I’d get laid Girls don't get that. I knew they talked behind my back about me only “pretending” to like boy stuff, so I’d get laid Girls don't get that. I knew they talked behind my back about me only “pretending” to like boy stuff, so I’d get laid. Mädchen verstehen das nicht. Ich weiß sie haben über mich gelästert. Dass ich Jungs Kram nur gemocht hätte, um jemanden ins Bett zu kriegen. Mädchen verstehen das nicht. Ich weiß sie haben über mich gelästert. Dass ich Jungs Kram nur gemocht hätte, um jemanden ins Bett zu kriegen…
239 … I mean, maybe they were right? … I mean, maybe they were right? I mean, maybe they were right? … ich meine, vielleicht war was dran? Ich meine, vielleicht war was dran?
240 Like I won't deny I was probably the first girl in my class to see a dick. Like I won't deny I was probably the first girl in my class to see a dick. Like I won't deny I was probably the first girl in my class to see a dick. Ich hab vermutlich als erstes Mädchen meiner Stufe einen Schwanz gesehen. Ich hab vermutlich als erstes Mädchen meiner Stufe einen Schwanz gesehen.
241 But like - that’s what the boys do, right? But like - that’s what the boys do, right? But like - that’s what the boys do, right? Aber das machen Jungs halt miteinander, oder? Aber das machen Jungs halt miteinander, oder?
242 At least it has gotten better after me and Jojo became friends. At least it has gotten better after me and Jojo became friends. At least it has gotten better after me and Jojo became friends. Zumindest hat es sich gebessert, nachdem Jojo und ich Freundinnen wurden. Zumindest hat es sich gebessert, nachdem Jojo und ich Freundinnen wurden.
243 I still remember how that happend. I did a voice acting workshop in art class. I still remember how that happend. I did a voice acting workshop in art class. I still remember how that happened. I did a voice acting workshop in art class. Die Geschichte ist großartig. Ich durfte in Kunst einen Vortag über Voice Acting halten. Die Geschichte ist großartig. Ich durfte in Kunst einen Vortrag über Voice Acting halten.
244 Being allowed to share my technique in front of everyone was just :D Being allowed to share my technique in front of everyone was just :D Meine Technik mit allen teilen können war einfach nur :D Meine Technik mit allen teilen können war einfach nur :D
245 I mean next to nobody put in any effort. But Jojo did. I mean next to nobody put in any effort. But Jojo did. I mean next to nobody put in any effort in, but Jojo did. Ich meine … nieman hat sich wirklich angesträngt, außer Jojo halt. Ich meine… Niemand hat sich wirklich angestrengt, außer Jojo halt.
246 When our Mr Funny then decided to ape her attempts instead of just minding his own, I pretty much exploded. When our Mr Funny then decided to ape her attempts instead of just minding his own, I pretty much exploded. When our Mr. Funny then decided to ape her attempts instead of just minding his own, I pretty much exploded. Als unser Klassencloun sie dann nachäffen musste anstatt sich um seinen Scheiß zu kümmern, bin ich einfach eplodiert. Als unser Klassenclown sie dann nachäffen musste, anstatt sich um seinen Scheiß zu kümmern, bin ich einfach explodiert.
247 After this, we suddenly were besties. And my class finally started to just leave me be. After this, we suddenly were besties. And my class finally started to just leave me be. After this, we suddenly were besties and my class finally started to just leave me be. Danach hatte ich plötzlich eine beste Freundin und endlich meine Ruhe. Danach hatte ich plötzlich eine beste Freundin und endlich meine Ruhe.
248 Maybe because I for once was friends with another girl. Maybe because I scared them. Maybe both. Maybe because I for once was friends with another girl. Maybe because I scared them. Maybe both. Maybe because I for once was friends with another girl. Maybe because I scared them. Maybe both. Vielleicht, weil ich nun auch mit einem Mädchen befreundet war. Vielleicht weil die Mobber plötzlich Angst vor mir hatten. Vermutlich beides. Vielleicht, weil ich nun auch mit einem Mädchen befreundet war. Vielleicht weil die Mobber plötzlich Angst vor mir hatten. Vermutlich beides.
249 skip reading (hold) skip reading (hold) zum Ende springen (gedrückt halten)
250
251 *USK-Kennzeichnung bezieht sich auf den Games for Family-Stand der Spielraum-Messe Dresden. Die Kennzeichnung trifft nicht zwangsläufig auf das finale Spiel zu. *USK-rating is related to the Games for Family-booth at Spielraum-Messe Dresden. Rating does not transfer to the final game. *USK-Kennzeichnung bezieht sich auf den Games for Family-Stand der Spielraum-Messe Dresden. Die Kennzeichnung überträgt sich nicht auf das finale Spiel.
252 Start the Demo! Start the demo! Starte die Demo!
253 Move trough the room Move trough the room Durch den Raum bewegen
254 show Content Notes show Content Notes Content Notes anzeigen
255 Text Language Written Text Text Language Written Language Textsprache Geschriebener Text
256 Childhood Spoken Text Childhood Spoken Language Kindheit Gesprochener Text
257 voice Training Childhood Voice Training Childhood Stimmtechnik Kindheit
258 Collect Memento voice Training Collect Memento Voice Training Erinnerung einsammeln Stimmtechnik
259 Mind Board Collect Memento Mind Board Collect Memento Korkwand Erinnerung einsammeln
260 listen again Mind Board Listen Again Mind Board Erneut anhören Korkwand
261 Why does that story mean so much to me? listen again Why does that story mean so much to me? Listen Again Warum geht mir diese Geschichte so nah? Erneut anhören
262 lang-disclaimer Why does that story mean so much to me? "Frame of Mind" is as of now not yet fully localised for German. Why does that story mean so much to me? "Frame of Mind" ist noch nicht voll ins Deutsche übersetzt. Warum geht mir diese Geschichte so nah?
263 Dräven lang-disclaimer Dräven "Frame of Mind" is as of now not yet fully localised for German. Dräven "Frame of Mind" ist noch nicht voll ins Deutsche übersetzt.
264 Jui Jutsu Dräven Jiu-Jitsu Dräven Jiu Jitsu Dräven
265 Sports Clothes Jui Jutsu Sports Clothes Jiu-Jitsu Sportklamotten Jiu Jitsu
266 crafted Mask Sports Clothes Crafted Mask Sports Clothes Gebastelte Maske Sportklamotten
267 secret Comic Stash crafted Mask Secret Comic Stash Crafted Mask Comic Geheimversteck Gebastelte Maske
268 find connections secret Comic Stash Find Connections Secret Comic Stash Zusammenhänge finden Comic Geheimversteck
269 Find all three Momentos to collect all thoughts. find connections Find all three Momentos to gather all thoughts. Find Connections Finde die drei Erinnerungen um alle Gedanken zu sammeln. Zusammenhänge finden
270 Find two more Momentos to collect all cards. Find all three Momentos to collect all thoughts. Find two more Momentos to collect all cards. Find all three Momentos to gather all thoughts. Finde zwei weitere Erinnerungen um alle Karten zu sammeln. Finde die drei Erinnerungen um alle Gedanken zu sammeln.
271 Find the last remaining Momento. Find two more Momentos to collect all cards. Find the last remaining Momento. Find two more Momentos to collect all cards. Finde die letzte Erinnerung. Finde zwei weitere Erinnerungen um alle Karten zu sammeln.
272 Attribution Find the last remaining Momento. Attribution Find the last remaining Momento. Mitwirkende und Danksagung Finde die letzte Erinnerung.
273 reveal full text (hold) Attribution reveal full text (hold) Attribution vollen Text anzeigen (halten) Mitwirkende und Danksagung
274 skip scene reveal full text (hold) skip scene reveal full text (hold) Szene überspringen vollen Text anzeigen (halten)
275 continue skip scene continue skip scene Fotfahren Szene überspringen
276 keep reading continue keep reading continue weiterhin lesen Fotfahren
277 keep reading keep reading weiterhin lesen
278 quit Quit Beenden
279 Thanks for Playing the Demo! Thanks for playing the demo! Vielen Dank für’s Demo spielen!
280 We hope you are looking forward to finding a better frame of mind. We hope you are looking forward to finding a better Frame of Mind. Wir hoffen ihr freut euch darauf dieses Gedankenspiel weiter zu erkunden.
281 demo-credits Frame of Mind is made by betalars. They were supported by: Adrian Schmid, April and somebody that I used to know – Programming Jas Arianna and Newt – Voice Acting STTLE – OST Dieu Linh Vu, Polynormal Games - Producing, Publishing and Marketing Frame of Mind was created in Godot 4. Special thanks to: nase, Jenny, nek0, map-c, Svenja, caesey, Milo, Francis, Christoph, the R42 Games Accellerator and to the contributers of blender, godot and inkscape. Frame of mind is would not have been possible without purple sloth games. Frame of Mind ist made by betalars. Dey wurde unterstützt von: Adrian Schmid, April und einer Person, die ich mal kannte – Programmierung Jas Arianna and Newt – Voice Acting STTLE – OST Dieu Linh Vu, Polynormal Games - Producing, Publishing und Marketing Frame of Mind wurde mit Godot 4 entwickelt. Besonderen Dank an: nase, Jenny, nek0, map-c, Svenja, caesey, Milo, Francis, Christoph, den R42 Games Accellerator und an die Mitwirkenden von blender, godot und inkscape. Frame of mind wäre nicht möglich gewesen ohne Purple Sloth Studios.
282 Quit Quit Beenden
283 These Creative Commons pojects made frame of mind possible. These Creative Commons pojects made Frame of Mind possible. Diese Creative Commons Projekte haben Frame of Mind möglich gemacht.
284 Wishlist for a better frame of mind Wishlist for a better frame of mind Wishlisten für ein besseres Frame of Mind
285 You can move on, but you may not have understood Lisa. You can move on, but may not have understood Lisa. Du kannst weitermachen, aber hast vermutlich Lisa nicht ganz verstanden.
286 You may leave the room, but Lisa only agrees with %d of the %d connections. You may leave the room, but Lisa only agrees with %d of the %d connections. Du kannst das Zimmer verlassen, aber Lisa stimmt dir nur in %d von %d Verbindungen zu.
287 Lisa would like you to leave her room and move on. Lisa would like you to leave her room and move on. Lisa möchte, dass du ihr Jugendzimmer verlässt und weiter machst.
288 Move on Move on Weitermachen
289 Life gave you some thoughts you did not choose to keep. You may try to burn one. Life gave you some thoughts you did not choose to keep. You may try to burn one. Das Leben hat dir ein paar Gedanken mitgegeben die du nicht ausgesucht hast. Du darfst versuchen, einen zu verbrennen.
290 Keep all thoughts Keep all Thoughts Behalte alle Gedanken
291 Leave room Leave room Den Raum verlassen
292 Combine cards to order your thoughts. Combine cards to order your thoughts. Klebe Karten aufeinander, um die Gedanken zu sortieren.
293 There are three Mementos left to find. Find all three Momentos to collect all thoughts. Finde all drei Erinnerungen, um alle Gedanken zu sammeln.
297
298
299
300
301
302
303
304
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369

View File

@ -129,11 +129,10 @@ func _ready():
dropzone_size = get_viewport_rect().size - Vector2(dropzone_padding + size_reference.minimum_size.x, dropzone_padding)
if get_parent() == get_tree().root:
populate_board(["c_void", 'c_joy', "p_wet", "p_effort"])
populate_board(["c_void", 'c_joy', "p_wet", "p_worried_mother"])
populate_board(["c_jui_jutsu", 'c_hit', "p_girly", "p_vent"])
populate_board(["c_comic_heroes", 'c_teasing', "p_agent_q", "p_good_intended"])
populate_board(["c_out_of_world", 'c_confusion', "p_outer_conflict", "p_unique"])
mementos_collected = 2
has_stage = has_stage
@ -147,7 +146,7 @@ func _ready():
#last_save_dict = get_save_dict()
func reclaim_lost_focus():
func reclaim_lost_focus(_thief):
if has_stage:
grab_focus()
@ -156,17 +155,21 @@ func reclaim_lost_focus():
# if has_stage and !Input.is_mouse_button_pressed(MOUSE_BUTTON_LEFT) and current_context == DRAG:
# currently_active_node.is_dragged = false
# Will be used later to spawn Cards and Post-Its and remember them in the dictionary
## Will be used later to spawn Cards and Post-Its and remember them in the dictionary
func populate_board(card_names: Array[StringName]):
mementos_collected += 1
var all_new:Dictionary = HardCards.get_cards_by_name_array(card_names)
# spawning the cards and adding them to the dictionary
for new_card in all_new["cards"]:
for new_card: Card in all_new["cards"]:
add_card(new_card, false)
for new_sticky_note in all_new["sticky_notes"]: # spawning a sticky note
# marking the first card as random picks
new_card.picked_random = new_card.name == card_names[1]
for new_sticky_note: StickyNote in all_new["sticky_notes"]: # spawning a sticky note
add_sticky_note(new_sticky_note, false)
# marking the first sticky as random picks
new_sticky_note.picked_random = new_sticky_note.name == card_names[3]
#currently_active_node = area_dict["dropzone_content"][0] # set first Card as currently selected node by default
currently_active_node = dropzone.get_child(0)
@ -225,9 +228,15 @@ func handle_mouse_button(input: InputEventMouseButton, to_handle = currently_act
to_handle = area.exchange_sticky_note_with(to_handle)
to_handle.reparent(dropzone)
to_handle.on_board = true
# FIXME: this caused an error when all stickies were attatched ...
sticky_note_container.get_child(current_sticky_note_id).attached_sticky_note = to_handle
to_handle.attached_to = sticky_note_container.get_child(current_sticky_note_id)
if sticky_note_container.get_child_count() > 0:
sticky_note_container.get_child(current_sticky_note_id).attached_sticky_note = to_handle
to_handle.attached_to = sticky_note_container.get_child(current_sticky_note_id)
else:
var new_panel = StickyNotePanel.new()
sticky_note_container.add_child(new_panel, true, Node.INTERNAL_MODE_DISABLED)
new_panel.owner = self
new_panel.attatch_sticky_note(to_handle, self, false)
current_sticky_note_id = 0
to_handle.reset_drag()
current_context = NAVIGATE
_return_sticky_notes_to_panels()
@ -238,13 +247,16 @@ func handle_mouse_button(input: InputEventMouseButton, to_handle = currently_act
if sticky_note_container.get_child_count() > 0:
sticky_note_container.get_child(current_sticky_note_id).clear_if_empty()
current_context = NAVIGATE
if is_board_complete(): board_completed.emit()
check_board_comnpletion()
return
else:
var i: int = 0
for panel: StickyNotePanel in sticky_note_container.get_children():
i += 1
if panel.is_gapped or i == sticky_note_container.get_child_count():
if panel.is_empty:
if panel.get_global_rect().intersects(Rect2(to_handle.global_position - Vector2(to_handle.diameter/2, 10), Vector2(to_handle.diameter/2, 10))):
panel.attatch_sticky_note(to_handle, self)
elif panel.is_gapped or i == sticky_note_container.get_child_count():
panel.collapse_gap()
var new_panel = StickyNotePanel.new()
sticky_note_container.add_child(new_panel)
@ -274,6 +286,7 @@ func handle_mouse_button(input: InputEventMouseButton, to_handle = currently_act
func _return_sticky_notes_to_panels():
return #FIXME this is an early return to prevent race conditions. Check if it is save to be removed.
for panel:StickyNotePanel in sticky_note_container.get_children():
panel.reclaim_sticky_note()
@ -281,7 +294,18 @@ func _return_sticky_notes_to_panels():
if node is StickyNote:
node.is_dragable = true
func is_board_complete() -> bool:
var board_was_completed: bool = false
func check_board_comnpletion():
if is_board_complete():
for child:StickyNotePanel in sticky_note_container.get_children():
child.clear_if_empty()
if not board_was_completed:
board_was_completed = true
board_completed.emit()
if board_was_completed:
give_lore_feedback()
func is_board_complete():
if mementos_collected == 4:
for card in dropzone.get_children():
if card is Card:
@ -290,6 +314,44 @@ func is_board_complete() -> bool:
return true
return false
var unfitting: bool = false
var incomplete: bool = false
var complete: bool = false
func give_lore_feedback():
var fitting_card_count: int = 0
var total_card_count: int = 0
for child in dropzone.get_children():
if child is Card:
if child.has_sticky_note_attached():
fitting_card_count += int(child.card_id == child.get_attached_sticky_note().parent_id)
total_card_count += 1
if float(fitting_card_count) / float(total_card_count) < 0.2:
instructions.text = "You can move on, but you may not have understood Lisa."
if not unfitting:
if State.speech_language == 2:
$AnimationPlayer.play("unfitting_de")
else:
$AnimationPlayer.play("unfitting")
unfitting = true
elif fitting_card_count != total_card_count or total_card_count != dropzone.get_child_count() or sticky_note_container.get_child_count() != 0:
instructions.text = TranslationServer.translate("You may leave the room, but Lisa only agrees with %d of the %d connections.") % [fitting_card_count, total_card_count]
if not incomplete:
if State.speech_language == 2:
$AnimationPlayer.play("incomplete_de")
else:
$AnimationPlayer.play("incomplete")
incomplete = true
else:
instructions.text = "Lisa would like you to leave her room and move on."
if not complete:
if State.speech_language == 2:
$AnimationPlayer.play("complete_de")
else:
$AnimationPlayer.play("complete")
complete = true
func is_board_lore() -> bool:
for card in dropzone.get_children():
if card is Card:
@ -392,7 +454,7 @@ func _input(event):
current_context = NAVIGATE
current_sticky_note_id += 1
current_dropzone_id = find_first_free_card()
if is_board_complete(): emit_signal("board_completed")
check_board_comnpletion()
else:
if !focus_stickies and card.has_sticky_note_attached():
currently_active_node = card.remove_sticky_note()
@ -440,15 +502,20 @@ func on_sticky_panel_cleared():
func get_save_dict() -> Dictionary:
var cards: Dictionary = {}
var stickies: Dictionary = {}
var randoms: Array[StringName]
for child in dropzone.get_children():
if child is Card:
# Save position of Card.
cards[child.name] = child.transform.origin
if child.picked_random:
randoms.append(child.name)
if child.has_sticky_note_attached():
# Saves Card Name as position of it's children.
stickies[child.get_attached_sticky_note().name] = child.name
if child.get_attached_sticky_note().picked_random:
randoms.append(child.get_attached_sticky_note().name)
elif child is StickyNote:
# Save position of StickyNote.
@ -460,7 +527,8 @@ func get_save_dict() -> Dictionary:
stickies[child.attached_sticky_note.name] = -1
return {
"cards": cards,
"stickies": stickies
"stickies": stickies,
"randoms": randoms
}
@ -476,6 +544,9 @@ func rebuild_from_savedict(board_state:Dictionary):
var stickies: Dictionary[StringName, Variant]
if board_state["stickies"] != {} :
stickies = board_state["stickies"]
var randoms: Array[StringName]
if board_state["randoms"] != [] :
randoms = board_state["randoms"]
if cards == null and stickies == null: return
@ -486,6 +557,7 @@ func rebuild_from_savedict(board_state:Dictionary):
card.transform.origin = cards[card.name]# Replacing position reference with card reference! Needed in next loop.
cards[card.name] = card
text_recovery[card.name] = card.text
card.picked_random == randoms.has( card.card_id )
for sticky:StickyNote in card_pile["sticky_notes"]:
text_recovery[sticky.name] = sticky.text
if stickies[sticky.name] == -1:
@ -495,6 +567,7 @@ func rebuild_from_savedict(board_state:Dictionary):
else:
insert_area(dropzone, sticky)
sticky.transform.origin = stickies[sticky.name]
sticky.picked_random == randoms.has( sticky.card_id )
func validate_board():
return

View File

@ -4,6 +4,13 @@ class_name Card
var card_id
enum burned {
NOT,
SINGED,
BURNING,
TORCHED
}
#FIXME remove this legacy stuff without loosing the evil notes ...
var compatible_sticky_notes: Array[StickyNote] = []
@export var evil_sticky_notes: Array[StickyNote] = []
@ -29,6 +36,9 @@ var transfor_arr: Array[Transform2D] = [
_on_text_updated()
var label:Label
var background_sprite: AnimatedSprite2D
@export var picked_random: bool = false
@export var wiggle_strength: float = 0.2
@export var wiggle_speed: float = 5
@export_range(1, 2) var scale_bump: float = 1.05
@ -62,6 +72,58 @@ var background_sprite: AnimatedSprite2D
@export var voice_line: AudioStream = null
@export var is_dragable: bool = false
@export var diameter = 336.0
@export_range(0, 2) var burn_progress: float = 0:
set(burn):
if is_node_ready():
if burn > 0 and background_sprite.material == null:
if background_sprite != null:
background_sprite.material = crumble_material.duplicate()
add_child(card_fire, false, Node.INTERNAL_MODE_FRONT)
card_fire.material = card_fire.material.duplicate()
elif burn_progress > 0 and burn <= 0:
background_sprite.material.set_shader_parameter("fire_progression", 0)
card_fire.material.set_shader_parameter("fire_progression", 0)
background_sprite.material = null
remove_child(card_fire)
burn_progress = burn
if background_sprite != null and card_fire != null and burn_progress > 0:
background_sprite.material.set_shader_parameter("fire_progression", burn_progress)
card_fire.material.set_shader_parameter("fire_progression", burn_progress)
background_sprite.visible = burn_progress < 2
card_fire.visible = burn_progress < 2
label.modulate = Color.WHITE.lerp(Color(0,0,0,0), clampf(burn_progress*3-3, 0, 1))
var burn_tween: Tween
signal has_burned
@export var burn_state: burned = burned.NOT:
set(burning):
if burning != burn_state:
if burn_tween != null:
burn_tween.kill()
match burning:
burned.NOT:
burn_tween = get_tree().create_tween()
burn_tween.tween_property(self, "burn_progress", 0, 0.5)
burned.SINGED:
burn_tween = get_tree().create_tween()
burn_tween.set_ease(Tween.EASE_OUT)
burn_tween.set_trans(Tween.TRANS_SINE)
burn_tween.tween_property(self, "burn_progress", 0.5, 2)
burned.BURNING:
burn_tween = get_tree().create_tween()
burn_tween.tween_property(self, "burn_progress", 2.0, 2)
burn_tween.tween_callback(_torch).set_delay(1.0)
burned.TORCHED:
print("Card %s has been burned." % HardCards.get_obscure_name(name))
has_burned.emit()
burn_state = burning
func _torch():
burn_state = burned.TORCHED
var crumble_material: ShaderMaterial = preload("res://logic-scenes/card_burner/card_crumble.material")
var card_fire: Sprite2D = preload("res://logic-scenes/card_burner/card_fire.tscn").instantiate()
var sticky_note_position: Vector2 = Vector2(-66, 83)
var collider: Shape2D
@ -88,6 +150,7 @@ func _ready():
background_sprite = AnimatedSprite2D.new()
background_sprite.sprite_frames = preload("res://logic-scenes/board/card-textures/card-sprites.tres")
background_sprite.clip_children = CanvasItem.CLIP_CHILDREN_AND_DRAW
label = Label.new()
label.theme_type_variation = "card_text"
@ -120,7 +183,6 @@ func _on_text_updated():
if text == "":
if background_sprite.get_child_count() == 0:
background_sprite.add_child(load("res://logic-scenes/board/void_stuff.tscn").instantiate(), false, Node.INTERNAL_MODE_DISABLED)
background_sprite.clip_children = CanvasItem.CLIP_CHILDREN_AND_DRAW
else:
if background_sprite.get_child_count() > 0:
background_sprite.get_child(0).queue_free()
@ -132,6 +194,8 @@ func _on_text_updated():
label.rotation = deg_to_rad(transfor_arr[curr_frame].get_rotation())
label.position = transfor_arr[curr_frame].origin
burn_progress = burn_progress
if not Engine.is_editor_hint():
_handle_wiggle(0)
@ -182,6 +246,8 @@ func _on_mouse_entered():
func _on_mouse_exited():
highlighted = false
is_mouse_entered = false
if burn_state == burned.SINGED:
burn_state = burned.NOT
func _on_input_event(_viewport, event, _shape_idx):
@ -221,7 +287,7 @@ func attach_sticky_note(sticky_note: StickyNote) -> bool:
current_sticky_note = sticky_note
sticky_note.attached_to = self
if text == "hit" and sticky_note.text == "effort":
if name == "c_hit" and sticky_note.name == "c_effort" and Steamworks.has_initialized:
Steam.setAchievement("FIGHT_FOR_GOOD")
Steam.storeStats()

View File

@ -28,7 +28,11 @@ func attatch_sticky_note(attatchment: StickyNote, custom_owner: Node, tween:bool
await get_tree().process_frame
var height_tween: Tween = create_tween()
height_tween.tween_property(self, "custom_minimum_size", minimum_size, 0.1)
attatchment.tween_transform_to(Transform2D(0, get_screen_position() + ancor_position - Vector2(0, minimum_size.y)))
var target_post = get_global_transform().origin+ancor_position
for panel: StickyNotePanel in get_parent().get_children():
if panel.attached_sticky_note == attatchment and panel.get_index() < get_index():
target_post = get_global_transform().origin+ancor_position - Vector2(0, minimum_size.y)
attatchment.tween_transform_to(Transform2D(0, target_post))
await attatchment.transform_tween_finished
await get_tree().process_frame
attatchment.reparent(self)

View File

@ -1,9 +1,16 @@
[gd_scene load_steps=9 format=3 uid="uid://bnskiyx1sksww"]
[gd_scene load_steps=24 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" uid="uid://kyd37e0s6fdu" path="res://logic-scenes/board/physics-board.gdshader" id="1_ggnth"]
[ext_resource type="Script" uid="uid://cqsor57nvowni" path="res://logic-scenes/board/card-board.gd" id="3_8v4c4"]
[ext_resource type="AudioStream" uid="uid://bywmf3patoe56" path="res://base-environments/youth_room/audio/board_completed.wav" id="5_qjqy3"]
[ext_resource type="AudioStream" uid="uid://bgtohhyd8whbm" path="res://base-environments/youth_room/audio/board_completed_de.wav" id="6_ni75f"]
[ext_resource type="AudioStream" uid="uid://dj8fpajqhj4k7" path="res://base-environments/youth_room/audio/board_incomplete.wav" id="6_vtvtf"]
[ext_resource type="Script" uid="uid://ddy8kb2hjvgss" path="res://logic-scenes/board/card collider.gd" id="6_wpxls"]
[ext_resource type="AudioStream" uid="uid://brolrc3lhaeid" path="res://base-environments/youth_room/audio/board_unfitting.wav" id="7_0phgc"]
[ext_resource type="AudioStream" uid="uid://swlo6elqs4vx" path="res://base-environments/youth_room/audio/board_incomplete_de.wav" id="7_2qppy"]
[ext_resource type="Script" uid="uid://c1oub0cs7cph6" path="res://dev-util/stereo-switch.gd" id="8_ni75f"]
[ext_resource type="AudioStream" uid="uid://y8fg3wjscvci" path="res://base-environments/youth_room/audio/board_unfitting_de.wav" id="10_kvxnu"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ttqei"]
shader = ExtResource("1_ggnth")
@ -18,6 +25,134 @@ size = Vector2(4262, 766.5)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_ivo5o"]
size = Vector2(4249, 766.5)
[sub_resource type="Animation" id="Animation_qjqy3"]
length = 0.001
[sub_resource type="Animation" id="Animation_2qppy"]
resource_name = "complete"
length = 14.5
tracks/0/type = "audio"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("AnimationPlayer/LisaFeedback")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"clips": [{
"end_offset": 0.0,
"start_offset": 0.42,
"stream": ExtResource("5_qjqy3")
}],
"times": PackedFloat32Array(0.1)
}
tracks/0/use_blend = true
[sub_resource type="Animation" id="Animation_vtvtf"]
resource_name = "complete_de"
length = 14.5
tracks/0/type = "audio"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("AnimationPlayer/LisaFeedback")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"clips": [{
"end_offset": 0.0,
"start_offset": 0.0,
"stream": ExtResource("6_ni75f")
}],
"times": PackedFloat32Array(0.533333)
}
tracks/0/use_blend = true
[sub_resource type="Animation" id="Animation_kvxnu"]
resource_name = "incomplete"
length = 11.0
tracks/0/type = "audio"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("AnimationPlayer/LisaFeedback")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"clips": [{
"end_offset": 0.0,
"start_offset": 0.0,
"stream": ExtResource("7_2qppy")
}],
"times": PackedFloat32Array(0.533333)
}
tracks/0/use_blend = true
[sub_resource type="Animation" id="Animation_0phgc"]
resource_name = "incomplete_de"
length = 12.0
tracks/0/type = "audio"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("AnimationPlayer/LisaFeedback")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"clips": [{
"end_offset": 0.0,
"start_offset": 0.36,
"stream": ExtResource("6_vtvtf")
}],
"times": PackedFloat32Array(0.1)
}
tracks/0/use_blend = true
[sub_resource type="Animation" id="Animation_k5h0q"]
resource_name = "unfitting"
length = 9.0
tracks/0/type = "audio"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("AnimationPlayer/LisaFeedback")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"clips": [{
"end_offset": 1.06,
"start_offset": 0.59,
"stream": ExtResource("7_0phgc")
}],
"times": PackedFloat32Array(0.333333)
}
tracks/0/use_blend = true
[sub_resource type="Animation" id="Animation_ni75f"]
resource_name = "unfitting_de"
length = 8.0
tracks/0/type = "audio"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("AnimationPlayer/LisaFeedback")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"clips": [{
"end_offset": 0.0,
"start_offset": 0.0,
"stream": ExtResource("10_kvxnu")
}],
"times": PackedFloat32Array(0.133333)
}
tracks/0/use_blend = true
[sub_resource type="AnimationLibrary" id="AnimationLibrary_htay1"]
_data = {
&"RESET": SubResource("Animation_qjqy3"),
&"complete": SubResource("Animation_2qppy"),
&"complete_de": SubResource("Animation_vtvtf"),
&"incomplete": SubResource("Animation_kvxnu"),
&"incomplete_de": SubResource("Animation_0phgc"),
&"unfitting": SubResource("Animation_k5h0q"),
&"unfitting_de": SubResource("Animation_ni75f")
}
[node name="board" type="PanelContainer"]
material = SubResource("ShaderMaterial_ttqei")
clip_contents = true
@ -128,3 +263,14 @@ custom_minimum_size = Vector2(15, 0)
layout_mode = 2
[node name="Timer" type="Timer" parent="."]
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
&"": SubResource("AnimationLibrary_htay1")
}
[node name="LisaFeedback" type="AudioStreamPlayer" parent="AnimationPlayer"]
volume_db = 10.0
mix_target = 2
bus = &"text"
script = ExtResource("8_ni75f")

View File

@ -31,6 +31,8 @@ var content: Node2D
var label: Label
var background_sprite: AnimatedSprite2D
@export var picked_random: bool = false
@export var shift_by: Vector2 = Vector2(-32, 0)
@export_color_no_alpha var highlight_color: Color = Color(1.5, 1.5, 1.5)
@export var highlighted: bool = false:
@ -77,8 +79,8 @@ var on_board: bool = false
func _init(sticky_name: String = "sticky_note", card_id: StringName = "-1") -> void:
name = sticky_name
text = sticky_name
parent_id = card_id
sticky_id = StringName( "%s.%s" % [parent_id, sticky_name] )
parent_id = StringName(card_id.rsplit(".", false, 1)[0])
sticky_id = card_id
func _ready() -> void:
if get_child_count() == 0:

Binary file not shown.

View File

@ -0,0 +1,10 @@
shader_type canvas_item;
render_mode blend_add;
uniform sampler2D heat_gradient;
void fragment() {
float gradient = pow(max(0.0, 1.0-(length(UV-.5)*(3.0-COLOR.r))), 1.5-COLOR.r*1.0);
gradient *= mix(1.0, pow(length(UV*vec2(1.7, 1.7)-vec2(0.85, 0.1))*1.5, 4.2), COLOR.r);
COLOR = vec4(texture(heat_gradient, vec2(COLOR.b)).xyz, min(gradient, 1.0))*.25 * pow(COLOR.g, 2.2);
}

View File

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

View File

@ -0,0 +1,56 @@
class_name CardBurner extends CenterContainer
var has_stage = false:
set(focus):
if not focus == has_stage:
if focus:
process_mode = Node.PROCESS_MODE_INHERIT
self.show()
self.mouse_filter = Control.MOUSE_FILTER_PASS
Input.mouse_mode = Input.MOUSE_MODE_HIDDEN
else:
self.mouse_filter = Control.MOUSE_FILTER_IGNORE
self.hide()
process_mode = Node.PROCESS_MODE_DISABLED
has_stage = focus
func _ready():
Scenes.sign_up_for_sequence(burn_cards, Scenes.id.TRANSITION, 1)
%SkipButton.pressed.connect(card_burned.emit)
func burn_cards(_id, _repeat):
var random_card_names: Array = State.active_save_game.board_state["randoms"]
for card_name in random_card_names:
if card_name.begins_with("p"):
random_card_names.erase(card_name)
var random_cards: Array = HardCards.get_cards_by_name_array(random_card_names)["cards"]
random_cards.shuffle()
for ancor:Control in [%Ancor1, %Ancor2, %Ancor3, %Ancor4]:
if random_cards.size() > 0:
ancor.get_child(0).queue_free()
var new_child: Card = random_cards.pop_front()
ancor.add_child(new_child)
new_child.owner = self
new_child.has_burned.connect(card_burned.emit)
await card_burned
$AnimationPlayer.play("vanish")
await $AnimationPlayer.animation_finished
Scenes.continue_sequence(self)
signal card_burned
func handle_hover(to_handle: Area2D):
if to_handle is Card:
if to_handle.burn_state == Card.burned.NOT:
to_handle.burn_state = Card.burned.SINGED
func handle_mouse_button(event: InputEventMouseButton, card: Card):
if event.button_index == MOUSE_BUTTON_MASK_LEFT and event.is_pressed() and not event.is_echo():
card.burn_state = Card.burned.BURNING

View File

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

View File

@ -0,0 +1,216 @@
[gd_scene load_steps=13 format=3 uid="uid://g2a27jwdapai"]
[ext_resource type="Script" uid="uid://bbia2hcdwctyn" path="res://logic-scenes/card_burner/card_burner.gd" id="1_copuj"]
[ext_resource type="Script" uid="uid://2loic2eeec5b" path="res://logic-scenes/board/card.gd" id="2_l4ogr"]
[ext_resource type="Texture2D" uid="uid://615hvpuiacvm" path="res://addons/input_prompts/icons/xbox/X.png" id="3_ckmi5"]
[ext_resource type="PackedScene" uid="uid://uc6urpgv7n1y" path="res://logic-scenes/card_burner/cursor_candle.tscn" id="3_l4ogr"]
[ext_resource type="Script" uid="uid://bbs1u7ojno7xo" path="res://addons/input_prompts/action_prompt/action_prompt.gd" id="4_x6cxt"]
[sub_resource type="InputEventKey" id="InputEventKey_ckmi5"]
device = -1
physical_keycode = 88
unicode = 120
[sub_resource type="InputEventJoypadButton" id="InputEventJoypadButton_x6cxt"]
device = -1
button_index = 2
pressed = true
[sub_resource type="Gradient" id="Gradient_ckmi5"]
colors = PackedColorArray(0, 0, 0, 1, 0, 0, 0, 1)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_x6cxt"]
gradient = SubResource("Gradient_ckmi5")
width = 100
height = 100
[sub_resource type="Animation" id="Animation_57mhv"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../Sprite2D:self_modulate")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 0)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../../CursorCandle:color")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
[sub_resource type="Animation" id="Animation_23lqb"]
resource_name = "vanish"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../Sprite2D:self_modulate")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("../../CursorCandle:color")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0.69, 1),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(0, 0, 0, 1)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_kaqqi"]
_data = {
&"RESET": SubResource("Animation_57mhv"),
&"vanish": SubResource("Animation_23lqb")
}
[node name="CardBurner" type="CenterContainer"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_copuj")
[node name="Control" type="Control" parent="."]
layout_mode = 2
[node name="Label" type="Label" parent="Control"]
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -373.5
offset_top = -249.0
offset_right = 373.5
offset_bottom = -149.0
grow_horizontal = 2
grow_vertical = 0
theme_type_variation = &"HeaderMedium"
text = "Life gave you some thoughts you did not choose to keep.
You may try to burn one."
horizontal_alignment = 1
[node name="Ancor1" type="Control" parent="Control"]
unique_name_in_owner = true
layout_mode = 2
anchors_preset = 0
offset_left = -518.0
offset_top = 14.0
offset_right = -518.0
offset_bottom = 14.0
rotation = -0.0352522
[node name="Card" type="Area2D" parent="Control/Ancor1"]
script = ExtResource("2_l4ogr")
text = "card"
metadata/_custom_type_script = "uid://2loic2eeec5b"
[node name="Ancor2" type="Control" parent="Control"]
unique_name_in_owner = true
layout_mode = 2
anchors_preset = 0
offset_left = -183.0
offset_top = 35.0
offset_right = -183.0
offset_bottom = 35.0
rotation = 0.0120591
[node name="card" type="Area2D" parent="Control/Ancor2"]
script = ExtResource("2_l4ogr")
text = "card"
metadata/_custom_type_script = "uid://2loic2eeec5b"
[node name="Ancor3" type="Control" parent="Control"]
unique_name_in_owner = true
layout_mode = 2
anchors_preset = 0
offset_left = 153.0
offset_top = 22.0
offset_right = 153.0
offset_bottom = 22.0
rotation = -0.0139755
[node name="card" type="Area2D" parent="Control/Ancor3"]
script = ExtResource("2_l4ogr")
text = "card"
metadata/_custom_type_script = "uid://2loic2eeec5b"
[node name="Ancor4" type="Control" parent="Control"]
unique_name_in_owner = true
layout_mode = 2
anchors_preset = 0
offset_left = 495.0
offset_top = 15.0
offset_right = 495.0
offset_bottom = 15.0
rotation = 0.0245775
[node name="card" type="Area2D" parent="Control/Ancor4"]
script = ExtResource("2_l4ogr")
text = "card"
metadata/_custom_type_script = "uid://2loic2eeec5b"
[node name="HSplitContainer" type="HSplitContainer" parent="Control"]
layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -156.0
offset_top = 197.0
offset_right = 157.0
offset_bottom = 244.0
grow_horizontal = 2
[node name="ActionPrompt" type="TextureRect" parent="Control/HSplitContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
texture = ExtResource("3_ckmi5")
expand_mode = 2
stretch_mode = 5
script = ExtResource("4_x6cxt")
action = "skip"
icon = 0
events = Array[InputEvent]([null, SubResource("InputEventKey_ckmi5"), SubResource("InputEventJoypadButton_x6cxt")])
metadata/_custom_type_script = "uid://bbs1u7ojno7xo"
[node name="SkipButton" type="Button" parent="Control/HSplitContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "Keep all thoughts"
[node name="Sprite2D" type="Sprite2D" parent="Control"]
self_modulate = Color(1, 1, 1, 0)
scale = Vector2(100, 100)
texture = SubResource("GradientTexture2D_x6cxt")
[node name="CursorCandle" parent="." instance=ExtResource("3_l4ogr")]
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
root_node = NodePath("../Control/HSplitContainer")
libraries = {
&"": SubResource("AnimationLibrary_kaqqi")
}

View File

@ -0,0 +1,59 @@
shader_type canvas_item;
uniform float fire_progression = 0;
uniform sampler2D disp_noise: repeat_enable;
uniform sampler2D crackle_noise: repeat_enable;
uniform sampler2D ash_gradient: repeat_disable;
vec3 RNGV3(vec3 p) {
vec3 a = fract(sin(vec3(p.x, p.y, p.z)) * vec3(111.11,333.33,444.44));
a += dot(a, a+33.51);
return fract(vec3(a.x*a.y, a.y*a.z, a.z*a.x)); //outputs a random vec2 between 0 and 1
}
vec4 voronoy(vec3 loc, float scale){
loc = loc*scale;
vec4 output = vec4(0., 0., 0., 10.);
for(float y=-1.; y<=1.; y++){
for(float x=-1.; x<=1.; x++){
for(float z=-1.; z<=1.; z++){
vec3 offs = vec3(x,y,z);
vec3 n = RNGV3(floor(loc)+offs)*2.0-1.0;
vec3 p = offs+sin(n) * .5;
float d = length((fract(loc)-0.5)-p);
if(d<output.q){
vec3 rng = RNGV3(floor(loc)+offs);
output = vec4(rng.x, rng.y, rng.z, d);
}
}
}
}
return output;
}
vec4 smooth_voronoi(vec3 loc, float scale, int steps, float scatter){
vec4 result = vec4(.0);
scatter = scatter/float(steps)/scale;
for (float x = 0.0; x<float(steps); x++) {
for (float y = 0.0; y<float(steps); y++) {
for (float z = 0.0; z<float(steps); z++) {
result += voronoy(loc + vec3(x, y, z) * scatter, scale);
}
}
}
return result / pow(float(steps), 3.);
}
void fragment() {
//COLOR.w *= max(.0, 1.0-length(UV-0.5)*2.0);
vec2 card_uv = fract(UV*vec2(2, 3));
float burn_gradient = max(0, length(vec2(.7, .2) - card_uv) * 3.0) + sin(TIME*2.0)*.1 + sin(TIME*3.5)*.02;
float burn_texture = texture(crackle_noise, UV + (texture(disp_noise, UV).xy-.5)*fire_progression*0.3).r;
COLOR.w *= clamp(texture(crackle_noise, UV + (texture(disp_noise, UV).xy-.5)*fire_progression*0.2).r*3.0-(fire_progression+burn_gradient*.3-1.2)*3.0, .0, 1.0);
vec4 sut_texture = texture(ash_gradient, vec2(smooth_voronoi(vec3(UV, .0), 12.0, 2, .2).w * .6 - burn_gradient - fire_progression*2.0 + COLOR.w * 3.0));
COLOR = mix(COLOR.rgba, vec4(COLOR.rgb*sut_texture.rgb, COLOR.w), sut_texture.w);
//COLOR.rg = card_uv;
}

View File

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

Binary file not shown.

View File

@ -0,0 +1,54 @@
shader_type canvas_item;
render_mode blend_add;
uniform float fire_progression = 0;
uniform sampler2D flame_noise: repeat_enable;
uniform sampler2D flame_gradoent;
vec3 RNGV3(vec3 p) {
vec3 a = fract(sin(vec3(p.x, p.y, p.z)) * vec3(111.11,333.33,444.44));
a += dot(a, a+33.51);
return fract(vec3(a.x*a.y, a.y*a.z, a.z*a.x)); //outputs a random vec2 between 0 and 1
}
vec4 voronoy(vec3 loc, float scale){
loc = loc*scale;
vec4 output = vec4(0., 0., 0., 10.);
for(float y=-1.; y<=1.; y++){
for(float x=-1.; x<=1.; x++){
for(float z=-1.; z<=1.; z++){
vec3 offs = vec3(x,y,z);
vec3 n = RNGV3(floor(loc)+offs)*2.0-1.0;
vec3 p = offs+sin(n) * .5;
float d = length((fract(loc)-0.5)-p);
if(d<output.q){
vec3 rng = RNGV3(floor(loc)+offs);
output = vec4(rng.x, rng.y, rng.z, d);
}
}
}
}
return output;
}
vec4 smooth_voronoi(vec3 loc, float scale, int steps, float scatter){
vec4 result = vec4(.0);
scatter = scatter/float(steps)/scale;
for (float x = 0.0; x<float(steps); x++) {
for (float y = 0.0; y<float(steps); y++) {
for (float z = 0.0; z<float(steps); z++) {
result += voronoy(loc + vec3(x, y, z) * scatter, scale);
}
}
}
return result / pow(float(steps), 3.);
}
void fragment() {
vec2 flame_uv = UV * 2.0+ texture(flame_noise, UV+vec2(0, TIME*3.0) *.1).z*vec2(0.1, 0.7);
flame_uv = UV + pow(smooth_voronoi(vec3(flame_uv + vec2(.0, TIME*2.0) , TIME*1.0), 2.0, 3, .3).w, 1.5-voronoy(vec3(flame_uv, -TIME + COLOR.r*.5)*.7, 5.0).w) - 1.3 - COLOR.r*.5 + fire_progression;
COLOR = pow(texture(flame_gradoent, flame_uv.yx), vec4(2.2)) * sin((fire_progression)*(PI/2.0)) * pow(COLOR.r, 0.5) *3.0;
}

View File

@ -0,0 +1 @@
uid://7mdypxgh5yix

Binary file not shown.

View File

@ -0,0 +1,19 @@
[gd_scene load_steps=4 format=3 uid="uid://dgj8krsb45s0l"]
[ext_resource type="Material" uid="uid://clfshh25jwfm1" path="res://logic-scenes/card_burner/card_fire.material" id="1_ktflc"]
[sub_resource type="Gradient" id="Gradient_uu85p"]
offsets = PackedFloat32Array(0.343681, 1)
colors = PackedColorArray(1, 1, 1, 1, 0, 0, 0, 1)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_av2w6"]
gradient = SubResource("Gradient_uu85p")
width = 400
height = 400
fill = 1
fill_from = Vector2(0.568376, 0.388889)
fill_to = Vector2(0.260684, 0.722222)
[node name="CardFire" type="Sprite2D"]
material = ExtResource("1_ktflc")
texture = SubResource("GradientTexture2D_av2w6")

View File

@ -0,0 +1,52 @@
shader_type canvas_item;
render_mode blend_mix;
uniform float fire_progression = 0;
uniform sampler2D flame_noise: repeat_enable;
uniform sampler2D ash_gradoent: repeat_disable;
uniform sampler2D help: hint_screen_texture;
vec3 RNGV3(vec3 p) {
vec3 a = fract(sin(vec3(p.x, p.y, p.z)) * vec3(111.11,333.33,444.44));
a += dot(a, a+33.51);
return fract(vec3(a.x*a.y, a.y*a.z, a.z*a.x)); //outputs a random vec2 between 0 and 1
}
vec4 voronoy(vec3 loc, float scale){
loc = loc*scale;
vec4 output = vec4(0., 0., 0., 10.);
for(float y=-1.; y<=1.; y++){
for(float x=-1.; x<=1.; x++){
for(float z=-1.; z<=1.; z++){
vec3 offs = vec3(x,y,z);
vec3 n = RNGV3(floor(loc)+offs)*2.0-1.0;
vec3 p = offs+sin(n) * .5;
float d = length((fract(loc)-0.5)-p);
if(d<output.q){
vec3 rng = RNGV3(floor(loc)+offs);
output = vec4(rng.x, rng.y, rng.z, d);
}
}
}
}
return output;
}
vec4 smooth_voronoi(vec3 loc, float scale, int steps, float scatter){
vec4 result = vec4(.0);
scatter = scatter/float(steps)/scale;
for (float x = 0.0; x<float(steps); x++) {
for (float y = 0.0; y<float(steps); y++) {
for (float z = 0.0; z<float(steps); z++) {
result += voronoy(loc + vec3(x, y, z) * scatter, scale);
}
}
}
return result / pow(float(steps), 3.);
}
void fragment() {
COLOR *= texture(ash_gradoent, vec2(smooth_voronoi(vec3(UV, .0), 5.0, 2, .2).w * .6 + COLOR.r*3.0 - fire_progression*2.0 +.5));
}

View File

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

Binary file not shown.

View File

@ -0,0 +1,19 @@
[gd_scene load_steps=4 format=3 uid="uid://bp6fd5lms3apa"]
[ext_resource type="Material" uid="uid://0mocn41t2rq8" path="res://logic-scenes/card_burner/card_sut.material" id="3_u7lv4"]
[sub_resource type="Gradient" id="Gradient_pt3n6"]
colors = PackedColorArray(1, 1, 1, 1, 0, 0, 0, 1)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_wi77g"]
gradient = SubResource("Gradient_pt3n6")
width = 407
height = 300
fill = 1
fill_from = Vector2(1, 0)
fill_to = Vector2(0, 1)
[node name="Sut" type="Sprite2D"]
material = ExtResource("3_u7lv4")
scale = Vector2(1.54492, 1.69531)
texture = SubResource("GradientTexture2D_wi77g")

View File

@ -0,0 +1,49 @@
[gd_scene load_steps=6 format=3 uid="uid://uc6urpgv7n1y"]
[ext_resource type="Material" uid="uid://ppu1xnd8b7td" path="res://logic-scenes/card_burner/candle.material" id="1_61aak"]
[sub_resource type="Gradient" id="Gradient_wi77g"]
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 1)
[sub_resource type="GradientTexture2D" id="GradientTexture2D_2ph0d"]
gradient = SubResource("Gradient_wi77g")
height = 80
[sub_resource type="Gradient" id="Gradient_2ph0d"]
interpolation_mode = 2
interpolation_color_space = 1
offsets = PackedFloat32Array(0, 0.254593, 0.902887, 1)
colors = PackedColorArray(0.6, 0.443137, 0, 1, 1, 0.917647, 0.388235, 1, 0.513726, 0.772549, 0.862745, 1, 0.443137, 0.635294, 1, 1)
[sub_resource type="GDScript" id="GDScript_cfpbc"]
script/source = "extends CPUParticles2D
var noise: = FastNoiseLite.new()
var noise_position:= 0.0
var noise_offset:= Vector2.ZERO
func _process(delta: float) -> void:
var diff: Vector2 = position - noise_offset - get_viewport().get_mouse_position()
noise_position += delta * 100
noise_offset = Vector2(noise.get_noise_1d(noise_position), noise.get_noise_1d(-noise_position))*30.0
position = get_viewport().get_mouse_position() + noise_offset
rotation = lerp(rotation, clamp(-PI/3, diff.x *.05, PI/3), delta*20.0)
lifetime = max(0.01, lerp(lifetime, .25 * (1.0/(1.0+diff.length()*.1) - noise_offset.length()*.02), 0.2))
"
[node name="CursorCandle" type="CPUParticles2D"]
material = ExtResource("1_61aak")
amount = 256
texture = SubResource("GradientTexture2D_2ph0d")
lifetime = 0.25
emission_shape = 1
emission_sphere_radius = 5.0
particle_flag_align_y = true
direction = Vector2(0, -1)
spread = 0.0
gravity = Vector2(0, 800)
initial_velocity_min = 500.0
initial_velocity_max = 600.0
color_ramp = SubResource("Gradient_2ph0d")
script = SubResource("GDScript_cfpbc")

View File

@ -27,6 +27,7 @@ var has_stage = false:
var _input_locked = true
var selection_state = INI:
set(state):
print("Setting picker state to %s" % ["INI","CARDS","CARDS_SELECTED","TRANSITION","POSTS","POSTS_SELECTED","DONE"][state])
selection_state = state
_input_locked = !(state == CARDS or state == POSTS)
@ -173,21 +174,23 @@ func pick(id: int):
var i:int = 0
for option:StickyNote in options:
if option.parent_id == parent_id:
options.erase(options)
options.erase(option)
anim_players[i].play("unshuffle")
anim_players.remove_at(i)
print("Removed StickyNote %s from options pool" % option.sticky_id)
print("Removed StickyNote %s from options pool" % HardCards.get_obscure_name(option.name))
i += 1
var winning_id
print("Randomly selected card %s" % options[1].text)
if not current_scene_id == Scenes.id.YOUTH_JUI_JUTSU:
print("Randomly selected card %s" % HardCards.get_obscure_name(options[1].name))
if not (current_scene_id == Scenes.id.YOUTH_JUI_JUTSU and selection_state == CARDS_SELECTED):
randomize()
winning_id = randi() % options.size()
# investigate if this fixes error on line 197
winning_id = randi() % options.size() - ( 1 if selection_state == POSTS_SELECTED else 0)
else:
winning_id = 1 if id == 0 else 0
Steam.setAchievement("FIGHT_BACK")
Steam.storeStats()
if Steamworks.has_initialized:
Steam.setAchievement("FIGHT_BACK")
Steam.storeStats()
output.append(options.pop_at(winning_id))
random_player = anim_players[winning_id]
@ -218,15 +221,16 @@ func transition():
elif selection_state == POSTS_SELECTED:
var out_str:Array[StringName] = []
for card in output:
out_str.append(card.text if card.text != "" else "void")
out_str.append(card.text if card.text != "" else "c_void")
cards_picked.emit(out_str)
selection_state = DONE
Scenes.end_current_sequence()
func show_posts():
selection_state = POSTS
for player:AnimationPlayer in anim_players:
player.play("RESET")
await get_tree().create_timer(.5).timeout
selection_state = POSTS
func handle_hover(new_highlight):
@ -235,7 +239,7 @@ func handle_hover(new_highlight):
func handle_mouse_button(button_event: InputEventMouseButton, new_selection: Node):
if not _input_locked:
if button_event.button_index == MOUSE_BUTTON_LEFT and button_event.pressed:
if button_event.button_index == MOUSE_BUTTON_LEFT and button_event.pressed and not button_event.is_echo():
pick(options.find(new_selection))
@ -250,6 +254,7 @@ func pick_cards(id: int, repeat: bool):
selection_state = CARDS
if id == Scenes.id.YOUTH_DRAEVEN and not repeat:
$Meaning.play()
else:
Scenes.end_current_sequence()

View File

@ -1,10 +1,11 @@
[gd_scene load_steps=72 format=3 uid="uid://brk4hjdf2x81a"]
[gd_scene load_steps=73 format=3 uid="uid://brk4hjdf2x81a"]
[ext_resource type="Script" uid="uid://bdb6n10apk1en" path="res://logic-scenes/card_picker/card_picker.gd" id="1_pjntm"]
[ext_resource type="Script" uid="uid://2loic2eeec5b" path="res://logic-scenes/board/card.gd" id="2_f4sp4"]
[ext_resource type="Script" uid="uid://r12efqgk6t4n" path="res://logic-scenes/board/sticky-note.gd" id="3_f4sp4"]
[ext_resource type="AudioStream" uid="uid://bakwypwhs7a5n" path="res://base-environments/youth_room/audio/why-does-it-mean.wav" id="4_ujc5a"]
[ext_resource type="Script" uid="uid://c1oub0cs7cph6" path="res://dev-util/stereo-switch.gd" id="5_et74x"]
[ext_resource type="AudioStream" uid="uid://tbx31bdlhbtr" path="res://base-environments/youth_room/audio/why-does-it-mean_de.wav" id="6_et74x"]
[sub_resource type="Animation" id="Animation_dinvx"]
length = 0.001
@ -1911,3 +1912,6 @@ stream = ExtResource("4_ujc5a")
mix_target = 2
bus = &"text"
script = ExtResource("5_et74x")
alternate_streams = Dictionary[String, AudioStream]({
"de": ExtResource("6_et74x")
})

View File

@ -125,8 +125,21 @@ class_name CollectableUi extends CenterContainer
else:
scene = scene
collected_box.show()
@export var is_exit:bool = false:
set(exit):
is_exit = exit
if is_inside_tree():
if exit:
if title_override == "": title_label.text = "Move on"
if subtitle_override == "": %CollectLabel.text = "Leave room"
collected_box.hide()
else:
scene = scene
collected_box.show()
signal open_board
signal exit_room
#TODO implement proper scene skipping
signal scene_skipped(i: int)
@ -149,13 +162,17 @@ func _on_context_updated():
func update_state():
scene = scene
is_board = is_board
is_exit = is_exit
_on_context_updated()
func reveal():
func try_reveal() -> bool:
if is_exit and not State.active_save_game.is_childhood_board_complete: return false
if not visible:
update_state()
visible = true
animation_player.play("reveal")
return true
return false
#func _process(_delta: float) -> void:
# if not visible or Engine.is_editor_hint(): return
@ -169,14 +186,16 @@ func reveal():
#FIXME something was eating all my inputs, maybe I can use the more pretty pattern when I figure out the culprit
func _input(event: InputEvent) -> void:
print("handle input")
if not visible: return
if event.is_action_pressed("collect_memento_ui"):
if not is_board:
collect_memento()
get_viewport().set_input_as_handled()
else:
open_board.emit()
if is_board:
open_board.emit()
if is_exit:
exit_room.emit()
elif event.is_action_pressed("option_memento_ui"):
is_expanded = true
get_viewport().set_input_as_handled()
@ -192,6 +211,7 @@ func vanish():
func collect_memento():
Scenes.start_sequence(scene)
State.leave_stage(self)
if scene == Scenes.id.TRANSITION: vanish()
#get_tree().call_group("scene_actors", "play_scene", scene, collected)
if was_skipped: scene_skipped.emit(-1)
is_collected = true

View File

@ -880,7 +880,7 @@ self_modulate = Color(0, 0, 0, 1)
layout_mode = 2
size_flags_horizontal = 4
theme_type_variation = &"HeaderLarge"
text = "Crafted Mask"
text = "crafted Mask"
[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"]
layout_mode = 2
@ -927,6 +927,7 @@ text = "options"
[node name="ContentNoteLabel" type="RichTextLabel" parent="VBoxContainer"]
unique_name_in_owner = true
visible = false
modulate = Color(0, 0, 0, 1)
custom_minimum_size = Vector2(350, 90)
layout_mode = 2

Some files were not shown because too many files have changed in this diff Show More