Compare commits

...

121 Commits

Author SHA1 Message Date
betalars b752779526 importing and syncing german voicelines 2026-01-26 17:38:00 +01:00
tiger tiger tiger c603b2247b fix: rebake lights, optimize perf 2026-01-24 17:11:05 +01:00
tiger tiger tiger 791ba9946d fix: trains left invisible 2026-01-24 17:06:58 +01:00
tiger tiger tiger 7bd81643cc fix: rebake lights, optimize perf 2026-01-24 17:03:00 +01:00
tiger tiger tiger 6e67e083f8 fix: crash 2026-01-24 14:16:46 +01:00
tiger tiger tiger 6f2c278bfa fix: subways couldn't stop at endstation and would travel into limbo 2026-01-24 14:12:31 +01:00
tiger tiger tiger 2ceb9216e0 feat: working on train labels 2026-01-24 13:59:14 +01:00
tiger tiger tiger 2e473e4b4e feat: working on subway labeling and coloring system 2026-01-24 13:18:36 +01:00
tiger tiger tiger 6e9bd9b790 fix: voluntary room starting pitch was still overridden 2026-01-24 11:07:47 +01:00
tiger tiger tiger e813129cbe fix: card uniqueness 2026-01-24 11:01:49 +01:00
tiger tiger tiger dc9a06e375 fix: player animation track path fix 2026-01-24 10:57:55 +01:00
tiger tiger tiger 1dca96614e fix: player animation tracks no longer cut them down by 1 head's size 2026-01-24 10:50:38 +01:00
tiger tiger tiger 9fae245381 tweak: improved log message 2026-01-24 10:19:00 +01:00
tiger tiger tiger fd5ac294b3 test: reduced some normal map resolutions 2026-01-24 10:17:28 +01:00
tiger tiger tiger c645a39eba fix: reduced voxel GI resolution in youth room to restore light range 2026-01-24 10:14:20 +01:00
tiger tiger tiger b555ffaf46 tweak: added a (missing story caption) default for missing story captions. 2026-01-24 10:08:51 +01:00
tiger tiger tiger 5b1a989f66 fix: wrong interpolation method... 2026-01-23 17:38:32 +01:00
tiger tiger tiger fc3ad3a555 feat: back button maybe standard bottom right? 2026-01-23 16:31:14 +01:00
tiger tiger tiger f8f50a0755 feat: board can now be left with the mouse :D 2026-01-23 16:25:28 +01:00
tiger tiger tiger a1766d5c3c fix: wrong memento action was hooked up 2026-01-23 16:08:11 +01:00
tiger tiger tiger d78cece129 fix: had corrupted a translation key by removing punctuation 2026-01-23 16:05:46 +01:00
tiger tiger tiger a07ec30716 feat: game instruction shown in youth room for as long as no memento has been hovered and the room is not solved 2026-01-23 16:05:09 +01:00
tiger tiger tiger 34872b6b12 fix: removed custom positioning of interactables in youth room 2026-01-23 15:41:39 +01:00
tiger tiger tiger f6df5131dd fix: icons now refresh when icons change. 2026-01-23 15:38:21 +01:00
tiger tiger tiger 83a8973e6b feat: first prompts implemented, various small fixed 2026-01-23 15:30:58 +01:00
tiger tiger tiger 46a79eae61 feat: first basic prompt 2026-01-23 15:23:53 +01:00
tiger tiger tiger 86af2e812a feat: prompter is now an autoload 2026-01-23 15:05:24 +01:00
tiger tiger tiger a49325eb37 feat: can now add things to prompter and it can perform things. 2026-01-23 14:47:10 +01:00
tiger tiger tiger 6b9a338a20 fix: tool scripts were causing havoc on inherited scene editing§ 2026-01-23 14:12:12 +01:00
tiger tiger tiger f9655a47e6 feat: basic prompt button, needs work 2026-01-23 13:39:47 +01:00
tiger tiger tiger 1d9a264324 feat: started working on prompter class. feat: curtain now hides itself entirely in debug boot. change: skip action is now called scene_skip 2026-01-23 11:30:42 +01:00
tiger tiger tiger 14453c12b9 fix: no double escape press / settings menu doesnt steal focus 2026-01-22 20:29:22 +01:00
tiger tiger tiger 0de7f96064 fix: can now leave canvas (still bug needs double ESC) 2026-01-22 19:51:39 +01:00
tiger tiger tiger c0f3bd40a9 fix: can now leave canvas (still bug needs double ESC) 2026-01-22 19:42:28 +01:00
tiger tiger tiger 92879b6bbf feat: added scroll keys and better scrolling 2026-01-22 19:31:52 +01:00
tiger tiger tiger 53fd4a7501 fix: scrolling of stories. 2026-01-22 19:09:46 +01:00
tiger tiger tiger 54569c7adc fix: game never set state PLAY 2026-01-22 18:46:28 +01:00
tiger tiger tiger b57aa76e23 fix: Pause Menu now halts the app state and restores it, and ensures savegame 2026-01-22 18:41:44 +01:00
tiger tiger tiger d58225f21b fix: Pause Menu works. 2026-01-22 18:36:36 +01:00
tiger tiger tiger 03f427b76a fix: cards now properly talk to the right handler. 2026-01-22 17:58:56 +01:00
tiger tiger tiger 9990a80845 refactor: some events turned into gui_input 2026-01-22 17:42:56 +01:00
tiger tiger tiger 69cec724f5 fix: reduce debug spam 2026-01-22 17:05:27 +01:00
tiger tiger tiger 6c9bbe871d fix: reduce debug spam, refactor unhandled input 2026-01-22 16:43:25 +01:00
tiger tiger tiger 982c426439 fix: adding ui_pause input action, and logging unhandled input (very spammy) 2026-01-22 16:21:12 +01:00
tiger tiger tiger 059b4b96cc refactor: named the get_ready and start_room functions _async so it's clearer how they work differently 2026-01-22 16:06:11 +01:00
tiger tiger tiger 9ea0d05d72 tweak: remove demo ending 2026-01-22 16:00:01 +01:00
tiger tiger tiger 1edc6106ff tweak: remove demo ending button 2026-01-22 15:59:44 +01:00
tiger tiger tiger 72f79386db tweak: light now in keyhole of door 2026-01-22 15:59:01 +01:00
betalars f7c8b84531 revert removing export from progress variable 2026-01-22 15:52:03 +01:00
tiger tiger tiger b745593eb7 Merge branch 'development' of https://community.rokojori.com/betalars/frame-of-mind into development 2026-01-22 15:13:38 +01:00
betalars 2452081c45 adding existing audio clips into scenes 2026-01-22 15:12:25 +01:00
betalars 3de31d61b2 add blend1 files back to gitignore 2026-01-22 15:12:25 +01:00
tiger tiger tiger 406d7e5002 fix: pause menu cleanup 2026-01-22 15:12:24 +01:00
tiger tiger tiger b79780835e fix: void card 2026-01-22 14:56:16 +01:00
tiger tiger tiger 350361395d fix: can now debug-play StoryPlayables 2026-01-22 14:25:36 +01:00
tiger tiger tiger 95e7160920 fix: added doorinteractive to volunteer room 2026-01-22 14:19:22 +01:00
tiger tiger tiger e23f496b70 fix: add %UI node to subway_sequence 2026-01-22 12:04:41 +01:00
tiger tiger tiger 48242e954f fix: ensuring %DoorInteractable gets unlocked. 2026-01-22 12:02:18 +01:00
tiger tiger tiger 294a5c2a7d refactor: interactables also spawn more controlled, and there's a delayed inversion of control to ensure cardboard is ready. 2026-01-22 11:57:59 +01:00
tiger tiger tiger 7653be9555 refactor: rooms now ensure ID, rooms now share initialization code 2026-01-22 11:02:58 +01:00
tiger tiger tiger 2b949d8e73 tweak: doors unlock the collider on the up flank 2026-01-22 01:47:15 +01:00
tiger tiger tiger efc2488dff fix: loading in both board rooms unified 2026-01-22 01:36:54 +01:00
tiger tiger tiger 071c0de5a7 fix: loading savegame 3 times after merge 2026-01-22 01:28:34 +01:00
tiger tiger tiger a9af1e5995 merge: linux changes 2026-01-22 01:18:35 +01:00
tiger tiger tiger cc73e1e4b6 fix: card loading 2026-01-22 01:15:53 +01:00
tiger tiger tiger cdcf6609d7 fix: improper order of operations / delegation for cardboard caused it to be not loaded 2026-01-21 23:46:46 +01:00
tiger tiger tiger 7c8428af01 chore: remove count logic that was cause for a bug before 2026-01-21 23:40:53 +01:00
tiger tiger tiger 75c2200bd8 fix: evaluations now count correctly 2026-01-21 23:36:11 +01:00
tiger tiger tiger b5a4bd2896 fix: Id type now stricter 2026-01-21 23:32:55 +01:00
tiger tiger tiger 99632f6043 fix: bootup problems resolved. 2026-01-21 23:23:00 +01:00
tiger tiger tiger 80eb4a727f chore: debugging cardboard, better movement, but now save state has problems§ 2026-01-21 22:35:35 +01:00
tiger tiger tiger 69e05f7562 chore: clean up old code 2026-01-21 21:40:30 +01:00
tiger tiger tiger b47801ae5c fix: card-board uses more single-responsibility, and now allows cards to slide nicely into the gaps 2026-01-21 21:38:31 +01:00
tiger tiger tiger 666df45e06 fix: trying to make cards a bit more robust 2026-01-21 20:43:13 +01:00
tiger tiger tiger 9749736e7d fix: rosenthal station actually therapizes 2026-01-21 18:22:53 +01:00
tiger tiger tiger 8561310d9e feat: train easings exposed 2026-01-21 18:16:11 +01:00
tiger tiger tiger f0ad263e57 fix: godot chopped up music streams, and I found a lot of pcm compressed stuff 2026-01-21 18:01:56 +01:00
tiger tiger tiger 23d2d3bb9e fix: music playing 2026-01-21 17:38:43 +01:00
tiger tiger tiger cd42b64d1c fix: couldn't load into adult room correctly if going through the entire game 2026-01-21 17:11:25 +01:00
tiger tiger tiger c19b395d98 chore: regenerate lighting in volunteer room, and fixup collider on interactables. 2026-01-21 16:36:13 +01:00
tiger tiger tiger f2a2c13e65 fix: small sorting bug, tested adult room 2026-01-21 16:25:16 +01:00
tiger tiger tiger 7abff22ccc feat: interactable have a faint glow 2026-01-21 16:04:17 +01:00
tiger tiger tiger 2fccf9d545 feat: interactable have a faint glow 2026-01-21 16:01:51 +01:00
tiger tiger tiger 3fe7d4a6f5 fix: interactables now handle input as delegated by player, scene_finished etc. are not emitted twice 2026-01-21 15:41:40 +01:00
tiger tiger tiger c115e7b2d6 fix: room identification and save games were getting tangled up 2026-01-21 15:09:59 +01:00
tiger tiger tiger 3295c44ce9 fix: glitchy appearance of storyplayables 2026-01-21 13:33:13 +01:00
tiger tiger tiger 7fc85783cc fix: moved some audio sources 2026-01-21 13:25:38 +01:00
tiger tiger tiger 9eee693670 fix: moved some audio sources 2026-01-21 13:23:54 +01:00
tiger tiger tiger a0f6261c1e fix: train timings, minor transition issue to adult room, train audio 2026-01-21 13:23:04 +01:00
tiger tiger tiger 098eef6fe5 fix: youth room dof blur 2026-01-21 02:21:50 +01:00
tiger tiger tiger 525926086b fix: draeven animation from older version had a different name 2026-01-21 02:18:16 +01:00
tiger tiger tiger cef278dced feat: endstation 2026-01-21 01:54:01 +01:00
tiger tiger tiger 28186aaf6a fix: can ride train safely now, BUT in order to move while it is under acceleration, we would need to refactor the player controller to use a Player Body instead. 2026-01-21 01:13:47 +01:00
tiger tiger tiger f3fa31f12e fix: character uses force, not impulse, now 2026-01-21 00:58:31 +01:00
tiger tiger tiger 3cd721e522 fix: tweaks to fahrplan and to backface culling on trains 2026-01-20 23:52:16 +01:00
tiger tiger tiger d26ace7dff feat: fahrplan, poc 2026-01-20 23:19:20 +01:00
tiger tiger tiger 0d150d31fc fix: need to clean again? 2026-01-20 22:53:12 +01:00
tiger tiger tiger 6fcc13abe7 feat: fahrplan, but needs fixes 2026-01-20 22:47:44 +01:00
tiger tiger tiger 31b17e802d feat: player can now leave the train 2026-01-20 21:35:12 +01:00
tiger tiger tiger 4b07eaf6c5 feat: player can now enter train. 2026-01-20 21:07:41 +01:00
tiger tiger tiger 88cb69fc88 fix: some audio polish 2026-01-20 20:01:59 +01:00
tiger tiger tiger e676c416ef fix: escalator sound loop 2026-01-20 19:49:54 +01:00
tiger tiger tiger 9cada12210 feat: ambient sounds 2026-01-20 19:49:18 +01:00
tiger tiger tiger 371334d85a feat: enhanced sounds 2026-01-20 18:35:37 +01:00
tiger tiger tiger 09e8f5b882 feat: enhanced sounds 2026-01-20 18:18:10 +01:00
tiger tiger tiger 7f5b2d685f feat: basic subway sound 2026-01-20 17:23:11 +01:00
tiger tiger tiger fac8919b8b chore: just testing 2026-01-20 15:53:11 +01:00
tiger tiger tiger 9361f6fd66 fix: remove duplicate script 2026-01-20 15:40:20 +01:00
tiger tiger tiger 71625825dc fix: restore animations of youth room 2026-01-20 15:33:59 +01:00
tiger tiger tiger 00c6e13702 wip: need to repair animations from ref version, no idea what happened 2026-01-20 13:06:32 +01:00
tiger tiger tiger e998d3154b chore: reassign viewport material to maps 2026-01-20 12:46:51 +01:00
tiger tiger tiger 20927d4af0 chore: Recalculate GI 2026-01-20 12:42:03 +01:00
tiger tiger tiger 8fe40f44d4 wip: train dollies 2026-01-20 12:37:17 +01:00
tiger tiger tiger 7e74639207 wip: Trains, lighting, and station dollies. 2026-01-20 12:09:04 +01:00
tiger tiger tiger 489241f5db wip: need to test on new godot, viewport bug 2026-01-20 10:40:24 +01:00
tiger tiger tiger f87b0455f3 fix: lighting artifacts 2026-01-20 10:14:30 +01:00
tiger tiger tiger 520dfa8174 fix: starting a fresh subway_sequence.tscn 2026-01-20 10:08:19 +01:00
tiger tiger tiger 899a606199 chore: update gitignore 2026-01-19 23:29:16 +01:00
tiger tiger tiger d9e5ca8443 test: independent display 2026-01-19 23:08:05 +01:00
tiger tiger tiger e421a37ccc feat: now with 2 rails 2026-01-19 22:48:22 +01:00
tiger tiger tiger d51e0ae65e feat: subway signage, subway lighting, subway structural refactor 2026-01-19 22:36:41 +01:00
209 changed files with 3922 additions and 6943 deletions

5
.gitignore vendored
View File

@ -8,6 +8,10 @@ export.cfg
export_credentials.cfg export_credentials.cfg
*.tmp *.tmp
# Mics Backup and temp files
*.blend1
*.md.backup
# Imported translations (automatically generated from CSV files) # Imported translations (automatically generated from CSV files)
*.translation *.translation
@ -36,6 +40,7 @@ mono_crash.*.json
AGENTS.md AGENTS.md
CHANGELOG.md CHANGELOG.md
ISSUES.md ISSUES.md
.devcontainer/
**/.idea **/.idea
**/.DS_Store **/.DS_Store

View File

@ -47,6 +47,7 @@ func _update_events():
# TODO: Find a cleaner way to cast these values # TODO: Find a cleaner way to cast these values
var tmp: Array = [] var tmp: Array = []
if Engine.is_editor_hint(): if Engine.is_editor_hint():
print("reading project settings")
tmp = ProjectSettings.get_setting("input/" + action)["events"] tmp = ProjectSettings.get_setting("input/" + action)["events"]
else: else:
tmp = InputMap.action_get_events(action) tmp = InputMap.action_get_events(action)

View File

@ -5,5 +5,5 @@ func _ready() -> void:
$MarkdownLabel.display_file("res://addons/markdownlabel/README.md") $MarkdownLabel.display_file("res://addons/markdownlabel/README.md")
$MarkdownLabel.task_checkbox_clicked.connect( $MarkdownLabel.task_checkbox_clicked.connect(
func(id: int, line: int, checked: bool, text: String) -> void: func(id: int, line: int, checked: bool, text: String) -> void:
print_debug("%s task #%d on line %d: %s" % ["Checked" if checked else "Unchecked", id, line, text]) print("%s task #%d on line %d: %s" % ["Checked" if checked else "Unchecked", id, line, text])
) )

View File

@ -640,7 +640,7 @@ func _reset_escaped_chars(_text: String,code:=false) -> String:
func _debug(string: String) -> void: func _debug(string: String) -> void:
if not _debug_mode: if not _debug_mode:
return return
print_debug(string) print(string)
func _denotes_fenced_code_block(line: String, character: String) -> bool: func _denotes_fenced_code_block(line: String, character: String) -> bool:
var stripped_line := line.strip_edges() var stripped_line := line.strip_edges()

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://dbwcsy5klf2o1"
path="res://.godot/imported/107215__keithpeter__birmingham-erdington-canal-transformer-3.wav-abc5cb917678fd9eb9a68b1f697f63cc.sample"
[deps]
source_file="res://base-environments/transition/audio/107215__keithpeter__birmingham-erdington-canal-transformer-3.wav"
dest_files=["res://.godot/imported/107215__keithpeter__birmingham-erdington-canal-transformer-3.wav-abc5cb917678fd9eb9a68b1f697f63cc.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=2
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://31dunmt6i7ck"
path="res://.godot/imported/328953__sandermotions__escalator-1.wav-13ca6f1515b00824916859f10801afb8.sample"
[deps]
source_file="res://base-environments/transition/audio/328953__sandermotions__escalator-1.wav"
dest_files=["res://.godot/imported/328953__sandermotions__escalator-1.wav-13ca6f1515b00824916859f10801afb8.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=2
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://dxxhtgf3k8ueh"
path="res://.godot/imported/388049__jacekksiazek__fluorescent-lamp-with-broken-ignitor.wav-d0e93eab8a188d5d7663547820e28a04.sample"
[deps]
source_file="res://base-environments/transition/audio/388049__jacekksiazek__fluorescent-lamp-with-broken-ignitor.wav"
dest_files=["res://.godot/imported/388049__jacekksiazek__fluorescent-lamp-with-broken-ignitor.wav-d0e93eab8a188d5d7663547820e28a04.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=2
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

View File

@ -0,0 +1,19 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://cwfr6sgcwg7sl"
path="res://.godot/imported/450918__kyles__metro-subway-montreal-verdun-station-arrive-and-leave-semidistant-from-bridge-over-tracks-overpass.ogg-12fe2c5a0e3d8b5a363ae7108e4bdca5.oggvorbisstr"
[deps]
source_file="res://base-environments/transition/audio/450918__kyles__metro-subway-montreal-verdun-station-arrive-and-leave-semidistant-from-bridge-over-tracks-overpass.ogg"
dest_files=["res://.godot/imported/450918__kyles__metro-subway-montreal-verdun-station-arrive-and-leave-semidistant-from-bridge-over-tracks-overpass.ogg-12fe2c5a0e3d8b5a363ae7108e4bdca5.oggvorbisstr"]
[params]
loop=false
loop_offset=0.0
bpm=0.0
beat_count=0
bar_beats=4

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://ba7s5uqc4iu66"
path="res://.godot/imported/537769__janbezouska__factory-fluorescent-light-buzz.wav-895aa9e245e1ca30292a119cee78a69d.sample"
[deps]
source_file="res://base-environments/transition/audio/537769__janbezouska__factory-fluorescent-light-buzz.wav"
dest_files=["res://.godot/imported/537769__janbezouska__factory-fluorescent-light-buzz.wav-895aa9e245e1ca30292a119cee78a69d.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=2
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

View File

@ -0,0 +1,19 @@
[remap]
importer="mp3"
type="AudioStreamMP3"
uid="uid://d4i1dsvl7tm5o"
path="res://.godot/imported/717561__trp__220401-fluorescent-light-buzz-high-pitched-videontg.mp3-d33503667b4af35637fb18c6ddbf4a5f.mp3str"
[deps]
source_file="res://base-environments/transition/audio/717561__trp__220401-fluorescent-light-buzz-high-pitched-videontg.mp3"
dest_files=["res://.godot/imported/717561__trp__220401-fluorescent-light-buzz-high-pitched-videontg.mp3-d33503667b4af35637fb18c6ddbf4a5f.mp3str"]
[params]
loop=true
loop_offset=0
bpm=0
beat_count=0
bar_beats=4

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,123 @@
## A dolly tweens all contents to and from two destination points, and to its origin.
class_name Dolly
extends Node3D
@export var index : int = -1
@export var signage_group : String
@export_group("Motion")
@export_subgroup("Arrival")
@export var pre_arrival_time : float = 17.0 # hold train for this long (to sync with audio!)
@export var arrival_time : float = 15.0 # train takes this long to enter (shorter = faster)
@export var trans_arrival : Tween.TransitionType = Tween.TRANS_CIRC
@export var ease_arrival : Tween.EaseType = Tween.EASE_OUT
@export_subgroup("In Station")
@export var station_wait_time : float = 20.0
@export_subgroup("Departure")
@export var door_close_time : float = 1.0
@export var leave_time : float = 15.0 # train takes this long to leave the platform
@export var trans_departure : Tween.TransitionType = Tween.TRANS_QUAD
@export var ease_departure : Tween.EaseType = Tween.EASE_IN
@onready var origination : Node3D = $Origination
@onready var destination : Node3D = $Destination
@onready var subway : SubwayTrain = $Subway
@onready var subway_audio_main : AudioStreamPlayer3D = %SubwayTrainAudio
@onready var subway_audio_2 : AudioStreamPlayer3D = %SubwayTrainAudioIntense
var player_on_board : bool:
get: return %EntryDetect.overlaps_body(State.player)
var tween : Tween = null
## Player is about to arrive
signal train_approaching(track : Dolly)
## Player has fully arrived at station
signal train_arrived(track : Dolly)
## Player is departing in train
signal train_departing(track : Dolly)
## Player has fully left the station with train
signal train_left(track : Dolly)
func _ready() -> void:
reset()
func set_line(line: StringName):
subway.set_line(line)
## One arrival and departure
func cycle() -> void:
await arrive()
await leave()
func reset() -> void:
if tween: tween.kill()
subway.global_position = origination.global_position
func _seat_player() -> void:
prints("Player departs inside Train", self.name)
State.player.reparent(subway)
func _unseat_player() -> void:
prints("Player arrives on Train", self.name)
State.player.reparent(get_parent())
func arrive(endstation : bool = false) -> void:
subway_audio_main.play()
subway_audio_2.play()
await get_tree().create_timer(pre_arrival_time).timeout
if player_on_board:
train_approaching.emit(self)
if tween: tween.kill()
tween = create_tween().set_trans(trans_arrival).set_ease(ease_arrival)
tween.parallel().tween_property(subway, "global_position", self.global_position, arrival_time)
await tween.finished
subway.door_open = true
if player_on_board:
_unseat_player()
train_arrived.emit(self)
if endstation:
subway_audio_main.stop()
subway_audio_2.stop()
func leave() -> void:
await get_tree().create_timer(station_wait_time).timeout
subway.door_open = false
await get_tree().create_timer(door_close_time).timeout
if player_on_board:
_seat_player()
train_departing.emit(self)
if tween: tween.kill()
tween = create_tween().set_trans(trans_departure).set_ease(ease_departure)
tween.parallel().tween_property(subway, "global_position", destination.global_position, leave_time)
# Player is on board and will be leaving
await tween.finished
# Player was on board and has left the station
if player_on_board: train_left.emit(self)
reset() # Warp back / rewind train position

View File

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

View File

@ -0,0 +1,104 @@
class_name Fahrplan extends Node3D
## easy graph: <station> : [Track1Train1 (next halt), Track1Train2], [Track2Train1(next halt), ...]
## CAVEAT: These must be direct children of the fahrplan!
@onready var fahrplan : Dictionary[Station, Array] = {
$hirschfeld: [["u2", $uni_mensa, "u1", $parity_square],[]],
$uni_mensa : [["u2", $uni_main],[]],
$uni_main: [["u2", $ministry],["u8", $rosenthal, "u2", $uni_mensa, "u1", $saint_exupery]],
$parity_square : [["u4", $saint_exupery, "u1", $saint_exupery], []],
$saint_exupery : [["u4", $rosenthal], ["u1", $uni_main]],
$ministry : [null, null], # Endstation
$rosenthal : [null, null], # Endstation
}
## List of all registered station nodes, used to unparent them
@onready var stations : Array[Station] = fahrplan.keys()
@onready var tracks : Array[Dolly] = [%Track0Dolly, %Track1Dolly]
@export var empty_train_random_delay : Vector2 = Vector2(5.0, 20.0)
func _set_signage_texts(group: StringName, message: String) -> void:
get_tree().set_group(group, "text", "")
for i in range(len(message)):
get_tree().set_group(group, "text", message.substr(0, i+1))
await get_tree().create_timer(0.05).timeout
func _ready() -> void:
await get_tree().process_frame
tracks[0].train_left.connect(_player_train_left)
tracks[1].train_left.connect(_player_train_left)
_unparent_all_stations_except($hirschfeld)
enter_station(current)
## The current station
var current : Station
var stop := false
var destinations : Array[Station] = [null, null]
## Begins the scheduled traffic (looping through the list of destinations) on a given track
func _begin_traffic_loop(track: Dolly, cancel: Array) -> void:
if not track.player_on_board and fahrplan[current][track.index] == null: # empty trains dont arrive at endstation
_set_signage_texts(track.signage_group, "Gleis gesperrt")
return
if fahrplan[current][track.index] == null: # empty trains dont arrive at endstation
track.arrive(true)
_set_signage_texts(track.signage_group, "Endstation")
return
var routes : Array = fahrplan[current][track.index]
if routes.is_empty():
_set_signage_texts(track.signage_group, "Verkehr z. Zt.\nunregelmäßig")
return
while true:
if cancel.is_empty(): return # abort the loop
var line : StringName = routes.pop_front()
var next : Station = routes.pop_front()
routes.append(line) # It's a ring buffer
routes.append(next) # It's a ring buffer
destinations[track.index] = next
track.set_line(line)
_set_signage_texts(track.signage_group, current.get_label(line, next)) # TODO: load nice string
# Vary our schedule a little by making empty trains wait a random amount of time
if not track.player_on_board:
await get_tree().create_timer(randf_range(empty_train_random_delay.x, empty_train_random_delay.y)).timeout
if cancel.is_empty(): return # abort the loop
await track.cycle() # arrive and depart
var cancellation_token : Array
func enter_station(station: Station):
prints("------------", "ENTER STATION", station, station.name, "------------")
remove_child(current)
current = station
add_child(station)
cancellation_token = ["go"] # Allocate a new stopping token
_begin_traffic_loop(tracks[0], cancellation_token)
_begin_traffic_loop(tracks[1], cancellation_token)
func _player_train_left(track: Dolly) -> void:
cancellation_token.clear()
enter_station(destinations[track.index])
func _unparent_all_stations_except(except : Node3D):
for station in stations:
assert(station.get_parent() == self, "A station that isn't a child of Fahrplan is in the Fahrplan: %s" % station.name)
station.visible = true # Make visible by default, parenting handles visibility and collision
if station == except:
current = station
continue
remove_child(station)

View File

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

View File

@ -0,0 +1,8 @@
extends Node3D
class_name Station
@export var i18n_key : StringName
@export var train_labels : Dictionary[StringName,String] = {}
func get_label(line: StringName, next_stop: Station) -> String:
return train_labels.get(line+next_stop.name, line+next_stop.name)

View File

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

View File

@ -0,0 +1,24 @@
extends Room
class_name SubwaySequence
func _ready() -> void:
id = State.rooms.TRANSITION
super._ready()
func get_ready_async() -> void:
await super.get_ready_async()
func start_room_async():
await super.start_room_async()
Scenes.player_enable.emit(true)
await Main.curtain.open()
func pull_save_state(save: SaveGame) -> void:
save.sequences_enabled = Scenes.enabled_sequences
save_game = save
# Call parent to restore player position
super.pull_save_state(save)

View File

@ -1,12 +1,22 @@
extends Node3D extends Node3D
class_name SubwayTrain
@export var materials : Dictionary[StringName, Material] = {}
@export var door_open: bool: @export var door_open: bool:
set(open): set(open):
if door_open == open: return
if is_node_ready() and door_open != open:
if open:
$AnimationPlayer.play("door_open")
else:
$AnimationPlayer.play("door_close")
door_open=open door_open=open
if open:
%TrainModel/AnimationPlayer.play("door_open")
else:
%TrainModel/AnimationPlayer.play("door_close")
%FrontWallClosed.disabled = door_open
func set_line(line : StringName):
$TrainModel/traun_hull.material_overlay = materials[line]
$TrainModel/LineLabelBack.text = line.to_upper()
$TrainModel/LineLabelFront.text = line.to_upper()

View File

@ -37,6 +37,29 @@ import_script/path=""
materials/extract=1 materials/extract=1
materials/extract_format=0 materials/extract_format=0
materials/extract_path="res://base-environments/transition/import/textures" materials/extract_path="res://base-environments/transition/import/textures"
_subresources={} _subresources={
"materials": {
"ParedTunel": {
"use_external/enabled": true,
"use_external/fallback_path": "res://base-environments/transition/import/textures/ParedTunel.tres",
"use_external/path": "uid://bcim2jku0oi5s"
},
"station_floor": {
"use_external/enabled": true,
"use_external/fallback_path": "res://base-environments/transition/import/textures/station_floor.tres",
"use_external/path": "uid://duhe1nn0uwulo"
},
"station_tiles": {
"use_external/enabled": true,
"use_external/fallback_path": "res://base-environments/transition/import/textures/station_tiles.tres",
"use_external/path": "uid://b3wybjajg4dr3"
},
"unlit_station_tiles": {
"use_external/enabled": true,
"use_external/fallback_path": "res://base-environments/transition/import/textures/unlit_station_tiles.tres",
"use_external/path": "uid://85u11etmwhac"
}
}
}
gltf/naming_version=2 gltf/naming_version=2
gltf/embedded_image_handling=1 gltf/embedded_image_handling=1

View File

@ -14,7 +14,8 @@ metallic_texture_channel = 2
roughness_texture = ExtResource("2_i1m4q") roughness_texture = ExtResource("2_i1m4q")
roughness_texture_channel = 1 roughness_texture_channel = 1
emission_enabled = true emission_enabled = true
emission_energy_multiplier = 30.0 emission_energy_multiplier = 4.0
emission_on_uv2 = true
emission_texture = ExtResource("3_fnaaw") emission_texture = ExtResource("3_fnaaw")
normal_enabled = true normal_enabled = true
normal_texture = ExtResource("4_wnwnf") normal_texture = ExtResource("4_wnwnf")

View File

@ -15,7 +15,7 @@ metallic_texture_channel = 2
roughness_texture = ExtResource("2_5i5r4") roughness_texture = ExtResource("2_5i5r4")
roughness_texture_channel = 1 roughness_texture_channel = 1
emission_enabled = true emission_enabled = true
emission_energy_multiplier = 5.0 emission_energy_multiplier = 3.0
emission_texture = ExtResource("3_68xv4") emission_texture = ExtResource("3_68xv4")
normal_enabled = true normal_enabled = true
normal_texture = ExtResource("4_5bw0m") normal_texture = ExtResource("4_5bw0m")

View File

@ -4,4 +4,6 @@
resource_name = "display" resource_name = "display"
cull_mode = 2 cull_mode = 2
albedo_color = Color(0.16613327, 0.10919999, 0.28, 1) albedo_color = Color(0.16613327, 0.10919999, 0.28, 1)
roughness = 0.1 metallic = 0.1
metallic_specular = 0.3
roughness = 0.15

View File

@ -1,9 +1,11 @@
[gd_scene load_steps=10 format=3 uid="uid://tuv111h6jsnu"] [gd_scene load_steps=12 format=3 uid="uid://tuv111h6jsnu"]
[ext_resource type="PackedScene" uid="uid://swh2v0icrwum" path="res://base-environments/transition/import/meta_station.glb" id="1_yekr5"] [ext_resource type="PackedScene" uid="uid://swh2v0icrwum" path="res://base-environments/transition/import/meta_station.glb" id="1_yekr5"]
[ext_resource type="Shader" uid="uid://i3k8blcd043t" path="res://base-environments/transition/shaders/escalator_disp.gdshader" id="2_klf6x"] [ext_resource type="Shader" uid="uid://i3k8blcd043t" path="res://base-environments/transition/shaders/escalator_disp.gdshader" id="2_klf6x"]
[ext_resource type="AudioStream" uid="uid://dbwcsy5klf2o1" path="res://base-environments/transition/audio/107215__keithpeter__birmingham-erdington-canal-transformer-3.wav" id="2_yyrp7"]
[ext_resource type="Texture2D" uid="uid://dfkqm1qqjq7sg" path="res://base-environments/transition/import/meta_station_stairs_albedo-stairs_alpha.png" id="3_e0ljd"] [ext_resource type="Texture2D" uid="uid://dfkqm1qqjq7sg" path="res://base-environments/transition/import/meta_station_stairs_albedo-stairs_alpha.png" id="3_e0ljd"]
[ext_resource type="Texture2D" uid="uid://bkakclhq1uwda" path="res://base-environments/transition/shaders/stairs_normal.png" id="4_yyrp7"] [ext_resource type="Texture2D" uid="uid://bkakclhq1uwda" path="res://base-environments/transition/shaders/stairs_normal.png" id="4_yyrp7"]
[ext_resource type="FontFile" uid="uid://8es6n8tktmx6" path="res://import/fonts/Doto-ExtraBold.ttf" id="5_e0ljd"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_jh12p"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_jh12p"]
render_priority = 0 render_priority = 0
@ -62,11 +64,47 @@ gi_mode = 0
[node name="water" parent="." index="1"] [node name="water" parent="." index="1"]
gi_mode = 0 gi_mode = 0
[node name="signal_lights_004" parent="." index="21"]
gi_mode = 2
[node name="TransformerBuzzAudio" type="AudioStreamPlayer3D" parent="signal_lights_004" index="0"]
transform = Transform3D(1, 0, 0, 0, 1, -8.526513e-14, 0, 8.526513e-14, 1, 2.947373, 0.36035156, 1.2887176e-07)
stream = ExtResource("2_yyrp7")
unit_size = 2.0
autoplay = true
bus = &"sfx"
[node name="signal_lights_003" parent="." index="22"]
gi_mode = 2
[node name="signal_lights_002" parent="." index="23"]
gi_mode = 2
[node name="TransformerBuzzAudio" type="AudioStreamPlayer3D" parent="signal_lights_002" index="0"]
transform = Transform3D(1, 0, -8.351873e-23, 0, 1, 1.9106857e-15, -8.351873e-23, 0, 1, -8.365656, -0.024308532, 3.6567445e-07)
stream = ExtResource("2_yyrp7")
unit_size = 2.0
autoplay = true
bus = &"sfx"
[node name="signal_lights_001" parent="." index="24"]
gi_mode = 2
[node name="railway_lighting" parent="." index="35"]
cast_shadow = 0
gi_mode = 2
[node name="FluorescentLuz" parent="." index="41"]
cast_shadow = 0
[node name="escalator_stairs_L" parent="." index="43"] [node name="escalator_stairs_L" parent="." index="43"]
custom_aabb = AABB(-0.8, 0, -1, 1.6, 3.5, 7) custom_aabb = AABB(-0.8, 0, -1, 1.6, 3.5, 7)
gi_mode = 0 gi_mode = 0
surface_material_override/0 = SubResource("ShaderMaterial_jh12p") surface_material_override/0 = SubResource("ShaderMaterial_jh12p")
[node name="Ceiling" parent="." index="44"]
cast_shadow = 0
[node name="escalator_stairs_L_001" parent="." index="46"] [node name="escalator_stairs_L_001" parent="." index="46"]
transform = Transform3D(1, 0, 2.3841858e-07, 0, 1, 0, -2.3841858e-07, 0, 1, -0.854971, 3.1997495, 4.8378654) transform = Transform3D(1, 0, 2.3841858e-07, 0, 1, 0, -2.3841858e-07, 0, 1, -0.854971, 3.1997495, 4.8378654)
material_override = SubResource("ShaderMaterial_klf6x") material_override = SubResource("ShaderMaterial_klf6x")
@ -110,3 +148,203 @@ material_override = SubResource("ShaderMaterial_e0ljd")
gi_mode = 0 gi_mode = 0
mesh = SubResource("PlaneMesh_yyrp7") mesh = SubResource("PlaneMesh_yyrp7")
skeleton = NodePath("") skeleton = NodePath("")
[node name="station_display_R" parent="." index="48"]
cast_shadow = 0
[node name="Label3D" type="Label3D" parent="station_display_R" index="0" groups=["signage2"]]
transform = Transform3D(1, 0, 1.9895195e-13, 0, 1, 0, -1.9895195e-13, 0, 1, -0.8458553, 0.35, 0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
text = "Loem Ipsum
dolor sit amed"
font = ExtResource("5_e0ljd")
outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Label3D2" type="Label3D" parent="station_display_R" index="1" groups=["signage2"]]
transform = Transform3D(-1, 0, -8.742282e-08, 0, 1, 0, 8.742282e-08, 0, -1, 0.85590327, 0.35, -0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
text = "Loem Ipsum
dolor sit amed"
font = ExtResource("5_e0ljd")
outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Cube_012" parent="." index="49"]
cast_shadow = 0
[node name="Label3D" type="Label3D" parent="Cube_012" index="0" groups=["signage1"]]
transform = Transform3D(1, 0, 1.9895197e-13, 0, 1, 0, -1.9895197e-13, 0, 1, -0.8458555, 0.35, 0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
text = "Loem Ipsum
dolor sit amed"
font = ExtResource("5_e0ljd")
outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Label3D2" type="Label3D" parent="Cube_012" index="1" groups=["signage1"]]
transform = Transform3D(-1, 0, -8.742293e-08, 0, 1, 0, 8.742293e-08, 0, -1, 0.85590315, 0.35, -0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
text = "Loem Ipsum
dolor sit amed"
font = ExtResource("5_e0ljd")
outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Cube_014" parent="." index="50"]
cast_shadow = 0
[node name="Label3D" type="Label3D" parent="Cube_014" index="0" groups=["signage2"]]
transform = Transform3D(1, 0, 1.9895195e-13, 0, 1, 0, -1.9895195e-13, 0, 1, -0.8458553, 0.35, 0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
text = "Loem Ipsum
dolor sit amed"
font = ExtResource("5_e0ljd")
outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Label3D2" type="Label3D" parent="Cube_014" index="1" groups=["signage2"]]
transform = Transform3D(-1, 0, -8.742282e-08, 0, 1, 0, 8.742282e-08, 0, -1, 0.85590327, 0.35, -0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
text = "Loem Ipsum
dolor sit amed"
font = ExtResource("5_e0ljd")
outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Cube_016" parent="." index="51"]
cast_shadow = 0
[node name="Label3D" type="Label3D" parent="Cube_016" index="0" groups=["signage1", "signage2"]]
transform = Transform3D(1, 0, 1.9895197e-13, 0, 1, 0, -1.9895197e-13, 0, 1, -0.8458553, 0.35, 0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
text = "Loem Ipsum
dolor sit amed"
font = ExtResource("5_e0ljd")
outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Label3D2" type="Label3D" parent="Cube_016" index="1" groups=["signage1"]]
transform = Transform3D(-1, 0, -8.742293e-08, 0, 1, 0, 8.742293e-08, 0, -1, 0.85590315, 0.35, -0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
text = "Loem Ipsum
dolor sit amed"
font = ExtResource("5_e0ljd")
outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Cube_010" parent="." index="52"]
cast_shadow = 0
[node name="Label3D" type="Label3D" parent="Cube_010" index="0" groups=["signage2"]]
transform = Transform3D(1, 0, 1.9895195e-13, 0, 1, 0, -1.9895195e-13, 0, 1, -0.8458553, 0.35, 0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
text = "Loem Ipsum
dolor sit amed"
font = ExtResource("5_e0ljd")
outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Label3D2" type="Label3D" parent="Cube_010" index="1" groups=["signage2"]]
transform = Transform3D(-1, 0, -8.742282e-08, 0, 1, 0, 8.742282e-08, 0, -1, 0.85590327, 0.35, -0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
text = "Loem Ipsum
dolor sit amed"
font = ExtResource("5_e0ljd")
outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Cube_017" parent="." index="53"]
cast_shadow = 0
[node name="Label3D" type="Label3D" parent="Cube_017" index="0" groups=["signage1"]]
transform = Transform3D(1, 0, 1.9895197e-13, 0, 1, 0, -1.9895197e-13, 0, 1, -0.8458555, 0.35, 0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
text = "Loem Ipsum
dolor sit amed"
font = ExtResource("5_e0ljd")
outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Label3D2" type="Label3D" parent="Cube_017" index="1" groups=["signage1"]]
transform = Transform3D(-1, 0, -8.742293e-08, 0, 1, 0, 8.742293e-08, 0, -1, 0.855903, 0.35, -0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
text = "Loem Ipsum
dolor sit amed"
font = ExtResource("5_e0ljd")
outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Cube_018" parent="." index="54"]
cast_shadow = 0
[node name="Label3D" type="Label3D" parent="Cube_018" index="0" groups=["signage2"]]
transform = Transform3D(1, 0, 1.9895195e-13, 0, 1, 0, -1.9895195e-13, 0, 1, -0.8458553, 0.35, 0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
text = "Loem Ipsum
dolor sit amed"
font = ExtResource("5_e0ljd")
outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Label3D2" type="Label3D" parent="Cube_018" index="1" groups=["signage2"]]
transform = Transform3D(-1, 0, -8.742282e-08, 0, 1, 0, 8.742282e-08, 0, -1, 0.85590327, 0.35, -0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
text = "Loem Ipsum
dolor sit amed"
font = ExtResource("5_e0ljd")
outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Cube_019" parent="." index="55"]
cast_shadow = 0
[node name="Label3D" type="Label3D" parent="Cube_019" index="0" groups=["signage1"]]
transform = Transform3D(1, 0, 1.9895197e-13, 0, 1, 0, -1.9895197e-13, 0, 1, -0.8458553, 0.35, 0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
text = "Loem Ipsum
dolor sit amed"
font = ExtResource("5_e0ljd")
outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0
[node name="Label3D2" type="Label3D" parent="Cube_019" index="1" groups=["signage1"]]
transform = Transform3D(-1, 0, -8.742293e-08, 0, 1, 0, 8.742293e-08, 0, -1, 0.85590315, 0.35, -0.1)
transparency = 0.6
modulate = Color(2.454227, 1.0085243, 0.54216844, 1)
text = "Loem Ipsum
dolor sit amed"
font = ExtResource("5_e0ljd")
outline_size = 2
horizontal_alignment = 0
vertical_alignment = 0

View File

@ -9,15 +9,18 @@
[resource] [resource]
resource_name = "station_ceiling" resource_name = "station_ceiling"
vertex_color_use_as_albedo = true vertex_color_use_as_albedo = true
albedo_color = Color(0.48570347, 0.48570353, 0.48570347, 1)
albedo_texture = ExtResource("1_fw6ln") albedo_texture = ExtResource("1_fw6ln")
metallic = 0.5
metallic_specular = 0.2
metallic_texture = ExtResource("2_ilmcm") metallic_texture = ExtResource("2_ilmcm")
roughness_texture = ExtResource("2_ilmcm")
roughness_texture_channel = 1 roughness_texture_channel = 1
emission_enabled = true emission_enabled = true
emission = Color(0.9894878, 0.815461, 0.7171153, 1) emission = Color(0.9894878, 0.815461, 0.7171153, 1)
emission_energy_multiplier = 0.5
emission_operator = 1 emission_operator = 1
emission_texture = ExtResource("4_4f468") emission_texture = ExtResource("4_4f468")
normal_enabled = true
normal_scale = 0.2
normal_texture = ExtResource("3_k7xpx") normal_texture = ExtResource("3_k7xpx")
ao_enabled = true ao_enabled = true
ao_light_affect = 0.5 ao_light_affect = 0.5

View File

@ -8,6 +8,7 @@
[resource] [resource]
resource_name = "train_windows" resource_name = "train_windows"
transparency = 4 transparency = 4
cull_mode = 2
albedo_texture = ExtResource("1_qqnyp") albedo_texture = ExtResource("1_qqnyp")
metallic = 1.0 metallic = 1.0
metallic_texture = ExtResource("2_orwl3") metallic_texture = ExtResource("2_orwl3")

View File

@ -9,6 +9,7 @@
resource_name = "train_windows_transparent" resource_name = "train_windows_transparent"
transparency = 1 transparency = 1
blend_mode = 4 blend_mode = 4
cull_mode = 2
albedo_texture = ExtResource("1_p8q8d") albedo_texture = ExtResource("1_p8q8d")
metallic = 1.0 metallic = 1.0
metallic_texture = ExtResource("2_eds1u") metallic_texture = ExtResource("2_eds1u")

View File

@ -1,5 +1,5 @@
shader_type spatial; shader_type spatial;
render_mode cull_back, blend_add, unshaded; render_mode cull_disabled, blend_add, unshaded;
varying vec3 world_pos; varying vec3 world_pos;
uniform float state = 0.0; uniform float state = 0.0;

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,18 +0,0 @@
class_name Station extends Resource
enum id {
HIRSCHFELD,
PARITY,
EXUPERY,
ROSENTHAL,
UNI_1,
UNI_2,
MINISTRY
}
@export var station_name: StringName = ""
@export var memory: Scenes.id = Scenes.id.YOUTH_DRAVEN
@export_file("*.tscn") var station_path: String = ""
@export var arriving_lines: Dictionary[TrainLine.id, float]
@export var departing_lines: Dictionary[TrainLine.id, float]
@export var announcement: AudioStream

View File

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

View File

@ -1,6 +1,8 @@
extends Node3D extends Station
signal leave_room
func _ready() -> void: func _ready() -> void:
%PlayerDetect.body_entered.connect(func(body): if body is PlayerController: leave_room.emit()) %PlayerDetect.body_entered.connect(func(body):
if visible and body is PlayerController:
State.room.save_game.subway_burnout = true
await Main.curtain.black()
State.room.proceed.emit(Main.adulthood_room_path))

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,8 @@
extends Station
func _ready() -> void:
%PlayerDetect.body_entered.connect(func(body):
if visible and body is PlayerController:
State.room.save_game.subway_burnout = false
await Main.curtain.black()
State.room.proceed.emit(Main.adulthood_room_path))

View File

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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,185 +0,0 @@
extends RoomTemplate
@export var all_stations: Dictionary[Station.id, Station]
@export var all_lines: Dictionary[TrainLine.id, TrainLine]
func _ready() -> void:
super._ready()
id = State.rooms.TRANSITION
func start_room():
super.start_room()
%LeftDetection.body_entered.connect(on_left_train_enter)
%RightDetection.body_entered.connect(on_right_train_enter)
%LeftDetection.body_exited.connect(on_left_train_exit)
%RightDetection.body_exited.connect(on_right_train_exit)
%burnout_station.leave_room.connect(func():
proceed.emit(Main.adulthood_room_path))
%PlayerController.process_mode = Node.PROCESS_MODE_INHERIT
# Give player control immediately, then open
Scenes.player_enable.emit(true)
await Main.curtain.open()
var left_first_station: bool = false
func on_first_station() -> void:
Scenes.enabled_sequences += 1 << Scenes.id.ADULT_DND
await get_tree().create_timer(5.0).timeout
%ShedulePlayer_R.play("train_arriving")
await get_tree().create_timer(12.0).timeout
if left_first_station: return
%ShedulePlayer_R.play("train_leaving")
await get_tree().create_timer(3.0).timeout
%RightLabel.text = "do not board"
await get_tree().create_timer(6.0).timeout
%ShedulePlayer_L.play("train_arriving")
var on_second_platform: bool = false
func on_first_transition(_is_left: bool = false):
%StationPlayer.play("first_transition")
await get_tree().create_timer(1.0).timeout
on_second_platform = true
func on_second_transition():
%StationPlayer.play("second_transition")
func on_third_transition():
%StationPlayer.play("third_transition")
func pull_save_state(save: SaveGame) -> void:
#FIXME
save.sequences_enabled = Scenes.enabled_sequences
save.current_room = State.rooms.ADULTHOOD
save_game = save
# Call parent to restore player position
super.pull_save_state(save)
func prepare_transition():
for child in %Stations.get_children():
if child is Node3D:
if not child.name == "burnout_station":
child.queue_free()
func unload():
pass
func on_left_train_enter(_body) -> void:
if not left_first_station:
left_first_station = true
await get_tree().create_timer(2.0).timeout
%Train2.get_child(0).door_open = false
on_first_transition(true)
await get_tree().create_timer(5.0).timeout
Scenes.enabled_sequences += 1 << Scenes.id.ADULT_VOLUNTARY
%SubwayMap.current_station = Scenes.id.ADULT_VOLUNTARY
%RightLabel.text = "U3 Gesundquell \n via Rosenthal Hospital"
await get_tree().create_timer(5.0).timeout
Scenes.enabled_sequences += 1 << Scenes.id.ADULT_AUTISM
%SubwayMap.current_station = Scenes.id.ADULT_AUTISM
await get_tree().create_timer(5.0).timeout
%Train2.get_child(0).door_open = true
await get_tree().create_timer(5.0).timeout
if not changeover:
%Train2.get_child(0).door_open = false
on_second_transition()
await get_tree().create_timer(5.0).timeout
Scenes.enabled_sequences += 1 << Scenes.id.ADULT_SELF_ADVOCACY
%SubwayMap.current_station = Scenes.id.ADULT_SELF_ADVOCACY
%RightLabel.text = "do not board"
%LeftLabel.text = "do not board"
on_final = true
await get_tree().create_timer(5.0).timeout
%Train2.get_child(0).door_open = true
else:
%ShedulePlayer_L.play("train_leaving")
%LeftLabel.text = "do not board"
return
if changeover:
%ShedulePlayer_R.play("train_leaving")
await get_tree().create_timer(2.0).timeout
%Train2.get_child(0).door_open = false
on_second_transition()
await get_tree().create_timer(5.0).timeout
save_game.seen.append(str(Scenes.id.ADULT_THERAPY_UNI))
%SubwayMap.current_station = Scenes.id.ADULT_THERAPY_UNI
%RightLabel.text = "do not board"
%LeftLabel.text = "do not board"
on_final = true
await get_tree().create_timer(5.0).timeout
%Train2.get_child(0).door_open = true
var on_final: bool = false:
set(final):
#FIXME: this needs to be a proper sequence!
on_final = final
await get_tree().create_timer(0.5).timeout
if final: prepare_transition()
var on_direct_path: bool = false
func on_right_train_enter(_body) -> void:
if not left_first_station:
on_direct_path = true
%Train.get_child(0).door_open = false
await get_tree().create_timer(2.0).timeout
left_first_station = true
on_first_transition(false)
await get_tree().create_timer(5.0).timeout
Scenes.enabled_sequences += 1 << Scenes.id.ADULT_EATING
%SubwayMap.current_station = Scenes.id.ADULT_EATING
%LeftLabel.text = "U8 Gesundquell \n via Rosenthal Hospital"
await get_tree().create_timer(5.0).timeout
Scenes.enabled_sequences += 1 << Scenes.id.ADULT_SELF_ADVOCACY
%SubwayMap.current_station = Scenes.id.ADULT_SELF_ADVOCACY
await get_tree().create_timer(5.0).timeout
%Train.get_child(0).door_open = true
await get_tree().create_timer(5.0).timeout
if not changeover:
%Train.get_child(0).door_open = false
on_second_transition()
await get_tree().create_timer(5.0).timeout
Scenes.enabled_sequences += 1 << Scenes.id.ADULT_BURNOUT
%SubwayMap.current_station = Scenes.id.ADULT_BURNOUT
%RightLabel.text = "do not board"
%LeftLabel.text = "do not board"
on_final = true
await get_tree().create_timer(5.0).timeout
%Train.get_child(0).door_open = true
else:
%ShedulePlayer_R.play("train_leaving")
%RightLabel.text = "do not board"
return
if changeover:
on_second_transition()
if on_direct_path: %ShedulePlayer_L.play("train_leaving")
await get_tree().create_timer(5.0).timeout
Scenes.enabled_sequences += 1 << Scenes.id.ADULT_AUTISM
%SubwayMap.current_station = Scenes.id.ADULT_AUTISM
await get_tree().create_timer(2.0).timeout
%Train2.get_child(0).door_open = false
%RightLabel.text = "do not board"
%LeftLabel.text = "do not board"
on_final = true
await get_tree().create_timer(5.0).timeout
%Train.get_child(0).door_open = true
var changeover: bool = false
func on_left_train_exit(_body):
if on_second_platform and not on_final:
changeover = true
%ShedulePlayer_R.play("train_arriving")
func on_right_train_exit(_body):
if on_second_platform and not on_final:
changeover = true
%ShedulePlayer_L.play("train_arriving")
await get_tree().create_timer(10).timeout
%RightLabel.text = "U1 weissnicht \n via Saint-Exupery Sq."
await get_tree().create_timer(5).timeout
%ShedulePlayer_R.play("train_arriving")

View File

@ -0,0 +1,575 @@
[gd_scene load_steps=46 format=3 uid="uid://fgp3tbah7msy"]
[ext_resource type="Script" uid="uid://snugj1gnggjj" path="res://base-environments/transition/code/subway_sequence.gd" id="1_yfan7"]
[ext_resource type="PackedScene" uid="uid://mkccbig41bqb" path="res://logic-scenes/player_controller/player_controller.tscn" id="2_il5go"]
[ext_resource type="Script" uid="uid://bi4cwmajhpa5f" path="res://base-environments/transition/code/fahrplan.gd" id="4_yfan7"]
[ext_resource type="PackedScene" uid="uid://d2j0d88axhfue" path="res://base-environments/transition/stations/dungeon_station.tscn" id="5_rum2v"]
[ext_resource type="VoxelGIData" uid="uid://d0ywd1vewvryc" path="res://base-environments/transition/vfx/dungeon_VoxelGI.res" id="6_ii0j1"]
[ext_resource type="AudioStream" uid="uid://ba7s5uqc4iu66" path="res://base-environments/transition/audio/537769__janbezouska__factory-fluorescent-light-buzz.wav" id="7_rkl48"]
[ext_resource type="PackedScene" uid="uid://bk1l1a7eae838" path="res://base-environments/transition/misc/subway_map.tscn" id="8_rcbu2"]
[ext_resource type="PackedScene" uid="uid://dmvn3x67nduqp" path="res://base-environments/transition/stations/uni_station.tscn" id="9_bdj4u"]
[ext_resource type="Script" uid="uid://pmhadgsfinjc" path="res://base-environments/transition/code/station.gd" id="10_iq74k"]
[ext_resource type="VoxelGIData" uid="uid://pb8f1dk8ginr" path="res://base-environments/transition/vfx/ministry_gi.res" id="11_il5go"]
[ext_resource type="VoxelGIData" uid="uid://b5b1dkf1rrsh6" path="res://base-environments/transition/vfx/saint_exupery_gi.tres" id="11_iq74k"]
[ext_resource type="VoxelGIData" uid="uid://bwsoyukt82gvb" path="res://base-environments/transition/uni_mensa_gi.tres" id="11_rum2v"]
[ext_resource type="PackedScene" uid="uid://inavuxjmq6hi" path="res://base-environments/transition/stations/burnout_station.tscn" id="11_vomua"]
[ext_resource type="VoxelGIData" uid="uid://dram781e770bj" path="res://base-environments/transition/vfx/uni_voxelGI.tres" id="12_ii0j1"]
[ext_resource type="Script" uid="uid://c3wiasfotoy5" path="res://base-environments/transition/stations/therapy_station.gd" id="12_il5go"]
[ext_resource type="PackedScene" uid="uid://uhayiqixlv0e" path="res://base-environments/transition/stations/volunteer_station.tscn" id="13_265nv"]
[ext_resource type="VoxelGIData" uid="uid://uml26uico8na" path="res://base-environments/transition/vfx/rosenthal_gi.tres" id="14_iq74k"]
[ext_resource type="Material" uid="uid://dchm78gv31r6a" path="res://base-environments/transition/shaders/timetravel.tres" id="15_hdxw7"]
[ext_resource type="Script" uid="uid://br1w2nt4pj8lt" path="res://vfx/post_processing/post_process_shader_template.gd" id="16_a6spw"]
[ext_resource type="VoxelGIData" uid="uid://wr8uuicetrvx" path="res://base-environments/transition/vfx/parity_square_gi.tres" id="16_iq74k"]
[ext_resource type="Script" uid="uid://mgertkn5ub0g" path="res://dev-util/hdr_sdr_switch.gd" id="17_ov8kk"]
[ext_resource type="PackedScene" uid="uid://df3ur5wll8vx7" path="res://base-environments/transition/subway_track.tscn" id="17_yfan7"]
[sub_resource type="ViewportTexture" id="ViewportTexture_rkl48"]
viewport_path = NodePath("Logic/Fahrplan/hirschfeld/SubwayMap3D/MapViewport")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_il5go"]
resource_local_to_scene = true
albedo_color = Color(0.70380783, 0.70380783, 0.70380783, 1)
albedo_texture = SubResource("ViewportTexture_rkl48")
metallic = 0.3
metallic_specular = 0.3
roughness = 0.15
emission_enabled = true
emission = Color(1, 1, 1, 1)
emission_energy_multiplier = 0.1
emission_operator = 1
emission_texture = SubResource("ViewportTexture_rkl48")
[sub_resource type="QuadMesh" id="QuadMesh_rkl48"]
resource_local_to_scene = true
material = SubResource("StandardMaterial3D_il5go")
size = Vector2(1.505, 1)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_rkl48"]
resource_name = "beam_metal.001"
cull_mode = 2
albedo_color = Color(0.27999386, 0.27999386, 0.27999386, 1)
metallic = 0.8
metallic_specular = 0.3
roughness = 0.2
uv1_scale = Vector3(0.1, 0.1, 0.1)
[sub_resource type="BoxMesh" id="BoxMesh_rkl48"]
material = SubResource("StandardMaterial3D_rkl48")
size = Vector3(0.1, 0.7, 1.5)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_sofnd"]
albedo_color = Color(0.5953387, 0.22751653, 9.62615e-08, 1)
metallic = 0.7
roughness = 0.5
clearcoat_enabled = true
clearcoat_roughness = 0.1
[sub_resource type="BoxMesh" id="BoxMesh_8c5ii"]
size = Vector3(0.15, 1.2, 1.7)
[sub_resource type="BoxMesh" id="BoxMesh_symoa"]
size = Vector3(0.3, 1, 1.5)
[sub_resource type="WorldBoundaryShape3D" id="WorldBoundaryShape3D_rkl48"]
[sub_resource type="BoxShape3D" id="BoxShape3D_yfan7"]
size = Vector3(8, 2.5, 0.5)
[sub_resource type="BoxShape3D" id="BoxShape3D_il5go"]
size = Vector3(4, 2.5, 0.4)
[sub_resource type="BoxShape3D" id="BoxShape3D_iq74k"]
size = Vector3(4.392578, 2.5, 0.4)
[sub_resource type="BoxShape3D" id="BoxShape3D_biibr"]
size = Vector3(4.392578, 2.5, 0.4)
[sub_resource type="BoxShape3D" id="BoxShape3D_rum2v"]
size = Vector3(4.393, 2.5, 0.6)
[sub_resource type="BoxShape3D" id="BoxShape3D_ii0j1"]
size = Vector3(0.4, 2.5, 0.5)
[sub_resource type="BoxShape3D" id="BoxShape3D_ltric"]
size = Vector3(2.393, 1.0219727, 1.1)
[sub_resource type="BoxShape3D" id="BoxShape3D_rcbu2"]
size = Vector3(4.325035, 0.5001221, 29.45169)
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_wgcl8"]
sky_top_color = Color(0.138464, 0.0447571, 0.169373, 1)
sky_horizon_color = Color(4.62055e-06, 0.722684, 0.905603, 1)
ground_bottom_color = Color(0.578219, 0.40697, 0.222187, 1)
ground_horizon_color = Color(0.138283, 0.487665, 0.674041, 1)
ground_curve = 0.165643
ground_energy_multiplier = 0.2
[sub_resource type="Sky" id="Sky_5ahgt"]
sky_material = SubResource("ProceduralSkyMaterial_wgcl8")
[sub_resource type="Environment" id="Environment_8c5ii"]
sky = SubResource("Sky_5ahgt")
ambient_light_color = Color(0.15686275, 0.15686275, 0.15686275, 1)
ambient_light_sky_contribution = 0.0
tonemap_mode = 3
tonemap_exposure = 1.1
ssao_enabled = true
sdfgi_read_sky_light = false
sdfgi_cascades = 3
sdfgi_min_cell_size = 0.01953125
sdfgi_energy = 0.5
glow_enabled = true
glow_levels/2 = 0.05
glow_levels/3 = 0.1
glow_levels/4 = 0.2
glow_levels/5 = 0.4
glow_levels/6 = 0.5
glow_normalized = true
glow_intensity = 0.5
glow_strength = 0.7
glow_mix = 1.0
glow_bloom = 0.2
glow_hdr_threshold = 0.5
glow_hdr_luminance_cap = 50.0
fog_enabled = true
fog_light_color = Color(0.03529412, 0.15294118, 0.1882353, 1)
fog_density = 0.02
fog_height = 0.25
fog_height_density = 0.5
volumetric_fog_density = 0.03
volumetric_fog_albedo = Color(0.395, 0.6122501, 0.79, 1)
adjustment_enabled = true
adjustment_contrast = 0.99
[sub_resource type="CameraAttributesPractical" id="CameraAttributesPractical_symoa"]
[sub_resource type="CompositorEffect" id="CompositorEffect_820wi"]
resource_local_to_scene = false
resource_name = ""
enabled = false
effect_callback_type = 4
needs_motion_vectors = false
needs_normal_roughness = false
script = ExtResource("16_a6spw")
shader_code = "//color.rgb = pow(color.rgb, vec3(1.3));
color.rgb = max(vec3(0.0), pow(color.rgb, vec3(1.6, 1.5, 1.4)) * vec3(5.0, 4.0, 4.0) + vec3(-0.01, 0.01, -0.0));
//float gray = color.r * 0.2125 + color.g * 0.7154 + color.b * 0.0721;
//color.rgb = vec3(gray);"
metadata/_custom_type_script = "uid://br1w2nt4pj8lt"
[sub_resource type="Compositor" id="Compositor_e75no"]
compositor_effects = Array[CompositorEffect]([SubResource("CompositorEffect_820wi")])
[node name="SubwaySequence" type="Node3D"]
script = ExtResource("1_yfan7")
id = 2
[node name="Logic" type="Node3D" parent="." groups=["labels"]]
unique_name_in_owner = true
[node name="PlayerController" parent="Logic" instance=ExtResource("2_il5go")]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.0218763, 6.1035156e-05, -5.6086483)
continuous_cd = true
[node name="Track0Dolly" parent="Logic" instance=ExtResource("17_yfan7")]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.2, -0.2, -32.5)
index = 0
signage_group = "signage2"
[node name="Track1Dolly" parent="Logic" instance=ExtResource("17_yfan7")]
unique_name_in_owner = true
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, -6.2, -0.2, -32.5)
index = 1
signage_group = "signage1"
[node name="Fahrplan" type="Node3D" parent="Logic"]
script = ExtResource("4_yfan7")
metadata/_custom_type_script = "uid://bi4cwmajhpa5f"
[node name="hirschfeld" parent="Logic/Fahrplan" groups=["signage1"] instance=ExtResource("5_rum2v")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.015596004, 0.007891655, -0.018885009)
script = ExtResource("10_iq74k")
i18n_key = &"Hirschfeld-Str."
train_labels = Dictionary[StringName, String]({
&"u1lise_meitner": "U1 Ring ↺",
&"u1parity_square": "U1 Ring ↻",
&"u2uni_mensa": "U2 Ambitz"
})
[node name="VoxelGI" type="VoxelGI" parent="Logic/Fahrplan/hirschfeld"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.020572662, 1.5449562, -25.981638)
size = Vector3(20, 3.75, 84)
data = ExtResource("6_ii0j1")
[node name="SubwayMap3D" type="Node3D" parent="Logic/Fahrplan/hirschfeld"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.021, 1.4, -22.606)
[node name="MapPanel1" type="MeshInstance3D" parent="Logic/Fahrplan/hirschfeld/SubwayMap3D"]
transform = Transform3D(-6.389512e-08, 0, 1.46175, 0, 1.46175, 0, -1.46175, 0, -6.389512e-08, 0, 0, 0)
mesh = SubResource("QuadMesh_rkl48")
[node name="MapPanel2" type="MeshInstance3D" parent="Logic/Fahrplan/hirschfeld/SubwayMap3D"]
transform = Transform3D(-6.389512e-08, 0, -1.46175, 0, 1.46175, 0, 1.46175, 0, -6.389512e-08, 0, 0, 0)
mesh = SubResource("QuadMesh_rkl48")
[node name="Stand" type="MeshInstance3D" parent="Logic/Fahrplan/hirschfeld/SubwayMap3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.15, 0)
mesh = SubResource("BoxMesh_rkl48")
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="Logic/Fahrplan/hirschfeld/SubwayMap3D"]
transform = Transform3D(1.46175, 0, 0, 0, 1.46175, 0, 0, 0, 1.46175, 0, 0, 0)
material_override = SubResource("StandardMaterial3D_sofnd")
use_collision = true
[node name="CSGMesh3D" type="CSGMesh3D" parent="Logic/Fahrplan/hirschfeld/SubwayMap3D/CSGCombiner3D"]
transform = Transform3D(1, 0, -7.1054274e-15, 0, 1, 0, 7.1054274e-15, 0, 1, 0, 0, 0)
mesh = SubResource("BoxMesh_8c5ii")
[node name="CSGMesh3D2" type="CSGMesh3D" parent="Logic/Fahrplan/hirschfeld/SubwayMap3D/CSGCombiner3D"]
transform = Transform3D(1, 0, -7.1054274e-15, 0, 1, 0, 7.1054274e-15, 0, 1, 0, 0, 0)
operation = 2
mesh = SubResource("BoxMesh_symoa")
[node name="MapViewport" type="SubViewport" parent="Logic/Fahrplan/hirschfeld/SubwayMap3D"]
disable_3d = true
size = Vector2i(2896, 2048)
render_target_update_mode = 4
[node name="SubwayMap" parent="Logic/Fahrplan/hirschfeld/SubwayMap3D/MapViewport" instance=ExtResource("8_rcbu2")]
unique_name_in_owner = true
[node name="SubwayMapAudio" type="AudioStreamPlayer3D" parent="Logic/Fahrplan/hirschfeld/SubwayMap3D"]
stream = ExtResource("7_rkl48")
unit_size = 2.0
max_db = -5.0
autoplay = true
panning_strength = 0.5
bus = &"sfx"
[node name="uni_mensa" parent="Logic/Fahrplan" instance=ExtResource("9_bdj4u")]
visible = false
script = ExtResource("10_iq74k")
i18n_key = &"Uni (Alte Mensa)"
train_labels = Dictionary[StringName, String]({
&"u2hirschfeld": "U2 Turingplatz",
&"u2uni_main": "U2 Ambitz"
})
[node name="VoxelGI" type="VoxelGI" parent="Logic/Fahrplan/uni_mensa"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.020572662, 1.5449562, -25.981638)
size = Vector3(11, 3.7785034, 84)
data = ExtResource("11_rum2v")
[node name="SubwayMap3D" type="Node3D" parent="Logic/Fahrplan/uni_mensa"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.021, 1.4, -22.606)
[node name="MapPanel1" type="MeshInstance3D" parent="Logic/Fahrplan/uni_mensa/SubwayMap3D"]
transform = Transform3D(-6.389512e-08, 0, 1.46175, 0, 1.46175, 0, -1.46175, 0, -6.389512e-08, 0, 0, 0)
mesh = SubResource("QuadMesh_rkl48")
[node name="MapPanel2" type="MeshInstance3D" parent="Logic/Fahrplan/uni_mensa/SubwayMap3D"]
transform = Transform3D(-6.389512e-08, 0, -1.46175, 0, 1.46175, 0, 1.46175, 0, -6.389512e-08, 0, 0, 0)
mesh = SubResource("QuadMesh_rkl48")
[node name="Stand" type="MeshInstance3D" parent="Logic/Fahrplan/uni_mensa/SubwayMap3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.15, 0)
mesh = SubResource("BoxMesh_rkl48")
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="Logic/Fahrplan/uni_mensa/SubwayMap3D"]
transform = Transform3D(1.46175, 0, 0, 0, 1.46175, 0, 0, 0, 1.46175, 0, 0, 0)
material_override = SubResource("StandardMaterial3D_sofnd")
use_collision = true
[node name="CSGMesh3D" type="CSGMesh3D" parent="Logic/Fahrplan/uni_mensa/SubwayMap3D/CSGCombiner3D"]
transform = Transform3D(1, 0, -7.1054274e-15, 0, 1, 0, 7.1054274e-15, 0, 1, 0, 0, 0)
mesh = SubResource("BoxMesh_8c5ii")
[node name="CSGMesh3D2" type="CSGMesh3D" parent="Logic/Fahrplan/uni_mensa/SubwayMap3D/CSGCombiner3D"]
transform = Transform3D(1, 0, -7.1054274e-15, 0, 1, 0, 7.1054274e-15, 0, 1, 0, 0, 0)
operation = 2
mesh = SubResource("BoxMesh_symoa")
[node name="uni_main" parent="Logic/Fahrplan" instance=ExtResource("9_bdj4u")]
visible = false
script = ExtResource("10_iq74k")
i18n_key = &"Universität"
train_labels = Dictionary[StringName, String]({
&"u1saint_exupery": "U1 Ring ↺",
&"u1saint_jude": "U1 Ring ↻",
&"u2ministry": "U2 Ambitz",
&"u2uni_mensa": "U2 Turingplatz",
&"u8rosenthal": "U8 Gesundquell",
&"u8saint_jude": "U8 Südstadt"
})
[node name="VoxelGI" type="VoxelGI" parent="Logic/Fahrplan/uni_main"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.020572662, 1.5449562, -25.981638)
size = Vector3(11, 3.7785034, 84)
data = ExtResource("12_ii0j1")
[node name="SubwayMap3D" type="Node3D" parent="Logic/Fahrplan/uni_main"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.021, 1.4, -22.606)
[node name="MapPanel1" type="MeshInstance3D" parent="Logic/Fahrplan/uni_main/SubwayMap3D"]
transform = Transform3D(-6.389512e-08, 0, 1.46175, 0, 1.46175, 0, -1.46175, 0, -6.389512e-08, 0, 0, 0)
mesh = SubResource("QuadMesh_rkl48")
[node name="MapPanel2" type="MeshInstance3D" parent="Logic/Fahrplan/uni_main/SubwayMap3D"]
transform = Transform3D(-6.389512e-08, 0, -1.46175, 0, 1.46175, 0, 1.46175, 0, -6.389512e-08, 0, 0, 0)
mesh = SubResource("QuadMesh_rkl48")
[node name="Stand" type="MeshInstance3D" parent="Logic/Fahrplan/uni_main/SubwayMap3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.15, 0)
mesh = SubResource("BoxMesh_rkl48")
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="Logic/Fahrplan/uni_main/SubwayMap3D"]
transform = Transform3D(1.46175, 0, 0, 0, 1.46175, 0, 0, 0, 1.46175, 0, 0, 0)
material_override = SubResource("StandardMaterial3D_sofnd")
use_collision = true
[node name="CSGMesh3D" type="CSGMesh3D" parent="Logic/Fahrplan/uni_main/SubwayMap3D/CSGCombiner3D"]
transform = Transform3D(1, 0, -7.1054274e-15, 0, 1, 0, 7.1054274e-15, 0, 1, 0, 0, 0)
mesh = SubResource("BoxMesh_8c5ii")
[node name="CSGMesh3D2" type="CSGMesh3D" parent="Logic/Fahrplan/uni_main/SubwayMap3D/CSGCombiner3D"]
transform = Transform3D(1, 0, -7.1054274e-15, 0, 1, 0, 7.1054274e-15, 0, 1, 0, 0, 0)
operation = 2
mesh = SubResource("BoxMesh_symoa")
[node name="saint_exupery" parent="Logic/Fahrplan" instance=ExtResource("11_vomua")]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1.2, 0, 0, 0)
visible = false
script = ExtResource("12_il5go")
train_labels = Dictionary[StringName, String]({
&"u1parity_suqare": "U1 Ring ↺",
&"u1uni_main": "U1 Ring ↻",
&"u4rosenthal": "U4 Gesundquell"
})
[node name="VoxelGI" type="VoxelGI" parent="Logic/Fahrplan/saint_exupery"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.020572662, 1.5449562, -25.981638)
subdiv = 2
size = Vector3(11, 3.7785034, 84)
data = ExtResource("11_iq74k")
[node name="ministry" parent="Logic/Fahrplan" instance=ExtResource("11_vomua")]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1.2, 0, 0, 0)
visible = false
i18n_key = &"Bildungsministerium"
train_labels = Dictionary[StringName, String]({
&"u2ambitz": "U2 Ambitz",
&"u2uni_main": "U2 Turingplatz"
})
[node name="VoxelGI" type="VoxelGI" parent="Logic/Fahrplan/ministry"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.020572662, 1.5449562, -25.981638)
size = Vector3(11, 3.7785034, 84)
data = ExtResource("11_il5go")
[node name="rosenthal" parent="Logic/Fahrplan" instance=ExtResource("11_vomua")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1.2, 0, 0, 0)
visible = false
script = ExtResource("12_il5go")
i18n_key = &"Rosenthal Klinik"
train_labels = Dictionary[StringName, String]({
&"u4gertrud_koch": "U4 Gesundquell",
&"u4saint_exupery": "U4 Nordstadt",
&"u8gertrud_koch": "U8 Gesundquell",
&"u8uni_main": "U8 Südstadt"
})
[node name="VoxelGI" type="VoxelGI" parent="Logic/Fahrplan/rosenthal"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.020572662, 1.5449562, -25.981638)
subdiv = 2
size = Vector3(11, 3.7785034, 84)
data = ExtResource("14_iq74k")
[node name="parity_square" parent="Logic/Fahrplan" instance=ExtResource("13_265nv")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1.3, 0, 0, 0)
visible = false
script = ExtResource("10_iq74k")
i18n_key = &"Parity Square"
train_labels = Dictionary[StringName, String]({
&"u1hirschfeld": "U1 Ring ↺",
&"u1saint_exupery": "U1 Ring ↻",
&"u4saint_exupery": "U4 Gesundquell"
})
[node name="VoxelGI" type="VoxelGI" parent="Logic/Fahrplan/parity_square"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 0.7692308, 0.020572662, 1.5449562, -27.640734)
subdiv = 2
size = Vector3(11, 3.7785034, 104.75287)
data = ExtResource("16_iq74k")
[node name="SubwayMap3D" type="Node3D" parent="Logic/Fahrplan/parity_square"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.021, 1.4, -22.606)
[node name="MapPanel1" type="MeshInstance3D" parent="Logic/Fahrplan/parity_square/SubwayMap3D"]
transform = Transform3D(-6.389512e-08, 0, 1.46175, 0, 1.46175, 0, -1.46175, 0, -6.389512e-08, 0, 0, 0)
mesh = SubResource("QuadMesh_rkl48")
[node name="MapPanel2" type="MeshInstance3D" parent="Logic/Fahrplan/parity_square/SubwayMap3D"]
transform = Transform3D(-6.389512e-08, 0, -1.46175, 0, 1.46175, 0, 1.46175, 0, -6.389512e-08, 0, 0, 0)
mesh = SubResource("QuadMesh_rkl48")
[node name="Stand" type="MeshInstance3D" parent="Logic/Fahrplan/parity_square/SubwayMap3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.15, 0)
mesh = SubResource("BoxMesh_rkl48")
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="Logic/Fahrplan/parity_square/SubwayMap3D"]
transform = Transform3D(1.46175, 0, 0, 0, 1.46175, 0, 0, 0, 1.46175, 0, 0, 0)
material_override = SubResource("StandardMaterial3D_sofnd")
use_collision = true
[node name="CSGMesh3D" type="CSGMesh3D" parent="Logic/Fahrplan/parity_square/SubwayMap3D/CSGCombiner3D"]
transform = Transform3D(1, 0, -7.1054274e-15, 0, 1, 0, 7.1054274e-15, 0, 1, 0, 0, 0)
mesh = SubResource("BoxMesh_8c5ii")
[node name="CSGMesh3D2" type="CSGMesh3D" parent="Logic/Fahrplan/parity_square/SubwayMap3D/CSGCombiner3D"]
transform = Transform3D(1, 0, -7.1054274e-15, 0, 1, 0, 7.1054274e-15, 0, 1, 0, 0, 0)
operation = 2
mesh = SubResource("BoxMesh_symoa")
[node name="MapViewport" type="SubViewport" parent="Logic/Fahrplan/parity_square/SubwayMap3D"]
disable_3d = true
size = Vector2i(2896, 2048)
render_target_update_mode = 4
[node name="SubwayMap" parent="Logic/Fahrplan/parity_square/SubwayMap3D/MapViewport" instance=ExtResource("8_rcbu2")]
[node name="Collision" type="StaticBody3D" parent="Logic"]
[node name="World Boundary (Floor)" type="CollisionShape3D" parent="Logic/Collision"]
shape = SubResource("WorldBoundaryShape3D_rkl48")
debug_color = Color(0.5019608, 0.003921569, 0.9607843, 1)
[node name="CollisionShape3D3" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.143, 1, -66.5)
shape = SubResource("BoxShape3D_yfan7")
[node name="CollisionShape3D4" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.143, 1, 0.25)
shape = SubResource("BoxShape3D_yfan7")
[node name="CollisionShape3D5" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 1.8523458, 1, -1.1576476)
shape = SubResource("BoxShape3D_il5go")
[node name="CollisionShape3D7" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 1.567, 1.031, -2)
shape = SubResource("BoxShape3D_iq74k")
[node name="CollisionShape3D8" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -1.567, 1.031, -2)
shape = SubResource("BoxShape3D_biibr")
[node name="CollisionShape3D9" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 0, 1.031, -2)
shape = SubResource("BoxShape3D_rum2v")
[node name="CollisionShape3D10" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 2.5282154e-07, 1.031, -7.783883)
shape = SubResource("BoxShape3D_ii0j1")
[node name="CollisionShape3D11" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 3.259746e-07, 0.29198635, -9.45743)
shape = SubResource("BoxShape3D_ltric")
[node name="CollisionShape3D12" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 2.5282154e-07, 1.031, -17.783882)
shape = SubResource("BoxShape3D_ii0j1")
[node name="CollisionShape3D13" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 3.259746e-07, 0.29198635, -19.45743)
shape = SubResource("BoxShape3D_ltric")
[node name="CollisionShape3D14" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 3.259746e-07, 0.29198635, -16.102852)
shape = SubResource("BoxShape3D_ltric")
[node name="CollisionShape3D15" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 2.5282154e-07, 1.031, -27.783882)
shape = SubResource("BoxShape3D_ii0j1")
[node name="CollisionShape3D16" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 3.259746e-07, 0.29198635, -29.45743)
shape = SubResource("BoxShape3D_ltric")
[node name="CollisionShape3D17" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 3.259746e-07, 0.29198635, -26.102852)
shape = SubResource("BoxShape3D_ltric")
[node name="CollisionShape3D18" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 2.5282154e-07, 1.031, -37.783882)
shape = SubResource("BoxShape3D_ii0j1")
[node name="CollisionShape3D19" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 3.259746e-07, 0.29198635, -39.457428)
shape = SubResource("BoxShape3D_ltric")
[node name="CollisionShape3D20" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 3.259746e-07, 0.29198635, -36.10285)
shape = SubResource("BoxShape3D_ltric")
[node name="CollisionShape3D21" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 2.5282154e-07, 1.031, -47.783882)
shape = SubResource("BoxShape3D_ii0j1")
[node name="CollisionShape3D22" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 3.259746e-07, 0.29198635, -49.457428)
shape = SubResource("BoxShape3D_ltric")
[node name="CollisionShape3D23" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 3.259746e-07, 0.29198635, -46.10285)
shape = SubResource("BoxShape3D_ltric")
[node name="CollisionShape3D24" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 2.5282154e-07, 1.031, -57.783882)
shape = SubResource("BoxShape3D_ii0j1")
[node name="CollisionShape3D26" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 3.259746e-07, 0.29198635, -56.10285)
shape = SubResource("BoxShape3D_ltric")
[node name="CollisionShape3D6" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -1.8618617, 1, -1.1576476)
shape = SubResource("BoxShape3D_il5go")
[node name="train" type="CollisionShape3D" parent="Logic/Collision"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.0680046, -0.24993896, -32.189793)
shape = SubResource("BoxShape3D_rcbu2")
[node name="MapViewport" type="SubViewport" parent="Logic"]
disable_3d = true
size = Vector2i(2896, 2048)
render_target_update_mode = 4
[node name="SubwayMap" parent="Logic/MapViewport" instance=ExtResource("8_rcbu2")]
[node name="material_helper" type="MeshInstance3D" parent="Logic"]
material_override = ExtResource("15_hdxw7")
cast_shadow = 0
skeleton = NodePath("../SceneAnimationPlayer")
[node name="SceneAnimationPlayer" type="AnimationPlayer" parent="Logic"]
unique_name_in_owner = true
autoplay = "RESET"
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_8c5ii")
camera_attributes = SubResource("CameraAttributesPractical_symoa")
compositor = SubResource("Compositor_e75no")
script = ExtResource("17_ov8kk")
[node name="UI" type="Control" parent="."]
unique_name_in_owner = true
layout_mode = 3
anchors_preset = 0
offset_right = 40.0
offset_bottom = 40.0
[editable path="Logic/PlayerController"]

View File

@ -0,0 +1,244 @@
[gd_scene load_steps=31 format=3 uid="uid://df3ur5wll8vx7"]
[ext_resource type="PackedScene" uid="uid://4j1tlhfm3p40" path="res://base-environments/transition/subway_train.tscn" id="1_2h2xx"]
[ext_resource type="Script" uid="uid://dgfje4druu3sw" path="res://base-environments/transition/code/dolly.gd" id="1_5jpg8"]
[ext_resource type="Script" uid="uid://cyohujvfoiof7" path="res://base-environments/transition/code/subway_train.gd" id="2_aacjs"]
[ext_resource type="AudioStream" uid="uid://cwfr6sgcwg7sl" path="res://base-environments/transition/audio/450918__kyles__metro-subway-montreal-verdun-station-arrive-and-leave-semidistant-from-bridge-over-tracks-overpass.ogg" id="3_4h0n7"]
[ext_resource type="Material" uid="uid://cl7e6lpjalm0c" path="res://base-environments/transition/shaders/u1.material" id="3_j8pin"]
[ext_resource type="Material" uid="uid://c0baqy42xdxtg" path="res://base-environments/transition/shaders/u2.material" id="4_3w708"]
[ext_resource type="Material" uid="uid://bw4y5b5lnw3cn" path="res://base-environments/transition/shaders/u4.material" id="5_3x5rc"]
[ext_resource type="Material" uid="uid://cor0uho8hnfqc" path="res://base-environments/transition/shaders/u7.material" id="6_ckebf"]
[ext_resource type="Material" uid="uid://d0kk76pja0orj" path="res://base-environments/transition/shaders/u8.material" id="7_dyyau"]
[ext_resource type="FontFile" uid="uid://b231f0liphck" path="res://import/fonts/AtkinsonHyperlegible-Regular.ttf" id="10_3w708"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_aacjs"]
shading_mode = 0
albedo_color = Color(0.03529412, 0.15294118, 0.1882353, 1)
[sub_resource type="BoxMesh" id="BoxMesh_aacjs"]
material = SubResource("StandardMaterial3D_aacjs")
size = Vector3(1, 50, 150)
[sub_resource type="Shader" id="Shader_tpaj8"]
code = "shader_type spatial;
render_mode depth_prepass_alpha;
uniform float time;
uniform sampler2D horizontal_gradient: repeat_disable;
uniform sampler2D horizontal_emission: repeat_disable;
uniform sampler2D vertical_gradient: repeat_disable;
uniform sampler2D vertical_emission: repeat_disable;
void vertex() {
// Called for every vertex the material is visible on.
}
void fragment() {
float anim_progress = time;
//float anim_progress = fract(TIME * 0.25);
ALBEDO = texture(horizontal_gradient, UV.yx).xyz * mix(vec3(1.0), texture(vertical_gradient, UV * vec2(anim_progress)).xyz, anim_progress);
ALPHA = min(clamp(3.0-anim_progress*2.0, 0.0, 1.0), texture(horizontal_gradient, UV.yx).w * texture(vertical_gradient, UV).w * pow(anim_progress, 0.6));
EMISSION = texture(horizontal_emission, UV.yx).xyz * mix(vec3(1.0), texture(vertical_emission, UV * vec2(anim_progress)).xyz, min(1.0, anim_progress));
ROUGHNESS = 0.5;
SPECULAR = 0.4;
METALLIC = 0.3;
}
//void light() {
// // Called for every pixel for every light affecting the material.
// // Uncomment to replace the default light processing function with this one.
//}
"
[sub_resource type="Gradient" id="Gradient_sofnd"]
offsets = PackedFloat32Array(0.190283, 0.237517, 0.252362, 0.263158, 0.358974, 0.620783)
colors = PackedColorArray(0, 0, 0, 1, 0.498876, 0.371803, 0.25703, 1, 0.999199, 0.798087, 0.641907, 1, 0.552793, 0.341064, 0.190397, 1, 0.428199, 0.393103, 0.309389, 1, 0, 0, 0, 1)
[sub_resource type="GradientTexture1D" id="GradientTexture1D_bjefl"]
gradient = SubResource("Gradient_sofnd")
[sub_resource type="Gradient" id="Gradient_csq32"]
offsets = PackedFloat32Array(0, 0.0526316, 0.165992, 0.62753, 0.647773, 0.704453, 0.731444, 1)
colors = PackedColorArray(0.0563103, 0.372397, 0.669528, 1, 0, 0, 0, 0.968627, 0.0844204, 0.319764, 0.485866, 0.796078, 0.0554195, 0.372493, 0.670199, 0.871024, 0, 0, 0, 0.933333, 0.0507, 0.237315, 0.39, 1, 0.0563103, 0.372397, 0.669528, 1, 0.0261, 0.092075, 0.29, 0.894118)
[sub_resource type="GradientTexture1D" id="GradientTexture1D_tpaj8"]
gradient = SubResource("Gradient_csq32")
width = 1024
[sub_resource type="Gradient" id="Gradient_grftg"]
offsets = PackedFloat32Array(0.147099, 0.159244, 0.195682, 0.213225, 0.267206, 0.287449, 0.31444, 0.34143, 0.364372, 0.398111, 0.430499, 0.442645, 0.480432, 0.511471, 1)
colors = PackedColorArray(0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0.194349, 0.194349, 0.194349, 1, 0.194349, 0.194349, 0.194349, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1)
[sub_resource type="GradientTexture1D" id="GradientTexture1D_v43sq"]
gradient = SubResource("Gradient_grftg")
[sub_resource type="Gradient" id="Gradient_l33v1"]
offsets = PackedFloat32Array(0.022942, 0.11471, 0.2045054, 0.21741071, 0.25024083, 0.26036772, 0.438596, 0.45614, 0.473684, 0.866397, 1)
colors = PackedColorArray(1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0.0820244, 0.0820244, 0.0820244, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)
[sub_resource type="GradientTexture1D" id="GradientTexture1D_nnax0"]
gradient = SubResource("Gradient_l33v1")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_0vobo"]
render_priority = 1
shader = SubResource("Shader_tpaj8")
shader_parameter/time = 0.0
shader_parameter/horizontal_gradient = SubResource("GradientTexture1D_tpaj8")
shader_parameter/horizontal_emission = SubResource("GradientTexture1D_bjefl")
shader_parameter/vertical_gradient = SubResource("GradientTexture1D_nnax0")
shader_parameter/vertical_emission = SubResource("GradientTexture1D_v43sq")
[sub_resource type="QuadMesh" id="QuadMesh_ppxbm"]
[sub_resource type="BoxShape3D" id="BoxShape3D_j8pin"]
size = Vector3(30.020142, 3.5859985, 3.5711975)
[sub_resource type="BoxShape3D" id="BoxShape3D_aacjs"]
size = Vector3(31.245972, 4.7752075, 1)
[sub_resource type="BoxShape3D" id="BoxShape3D_4h0n7"]
size = Vector3(16.285, 4.775, 1)
[sub_resource type="BoxShape3D" id="BoxShape3D_xhnml"]
size = Vector3(6.041, 4.775, 1)
[sub_resource type="BoxShape3D" id="BoxShape3D_5b47p"]
size = Vector3(5.908, 4.775, 1)
[sub_resource type="SphereShape3D" id="SphereShape3D_5jpg8"]
radius = 2.0
[sub_resource type="BoxShape3D" id="BoxShape3D_q8slu"]
size = Vector3(31.194, 0.8, 3.8)
[node name="TrainDolly" type="Node3D"]
script = ExtResource("1_5jpg8")
metadata/_custom_type_script = "uid://dgfje4druu3sw"
[node name="Destination" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 150)
[node name="PotemkinsFacade" type="MeshInstance3D" parent="Destination"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.2, 0, 0)
mesh = SubResource("BoxMesh_aacjs")
[node name="Origination" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -150)
[node name="Subway" type="Node3D" parent="."]
script = ExtResource("2_aacjs")
materials = Dictionary[StringName, Material]({
&"u1": ExtResource("3_j8pin"),
&"u2": ExtResource("4_3w708"),
&"u4": ExtResource("5_3x5rc"),
&"u7": ExtResource("6_ckebf"),
&"u8": ExtResource("7_dyyau")
})
metadata/_custom_type_script = "uid://cyohujvfoiof7"
[node name="WarpEffecScreen" type="MeshInstance3D" parent="Subway"]
transform = Transform3D(-4.108744e-06, 0.1808367, -2.8743172, -6.330816e-06, -2.8743172, -0.1808367, 42.01, -4.1546687e-07, -3.0837123e-07, 2.4883583, 1.286, 3.9468384)
material_override = SubResource("ShaderMaterial_0vobo")
mesh = SubResource("QuadMesh_ppxbm")
skeleton = NodePath("../Collider")
[node name="EntryDetect" type="Area3D" parent="Subway"]
unique_name_in_owner = true
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 0, 0, 0)
[node name="InteriorTriggerShape" type="CollisionShape3D" parent="Subway/EntryDetect"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.7977905, 1.3545837, -0.13719177)
shape = SubResource("BoxShape3D_j8pin")
debug_color = Color(0.7607843, 0.8117647, 0, 0.7176471)
[node name="SpotLight3D" type="SpotLight3D" parent="Subway"]
transform = Transform3D(-0.9620134, -0.0361063, -0.27060416, -2.0788793e-10, 0.9912155, -0.13225639, 0.27300233, -0.12723242, -0.9535627, -1.7471651, 0.40866053, 14.344355)
light_energy = 5.0
light_specular = 0.0
light_bake_mode = 0
distance_fade_begin = 150.0
distance_fade_length = 50.0
spot_range = 200.0
spot_attenuation = 0.2
spot_angle = 15.0
[node name="SubwayTrainAudio" type="AudioStreamPlayer3D" parent="Subway"]
unique_name_in_owner = true
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 0, -0.742, -11.098)
stream = ExtResource("3_4h0n7")
unit_size = 100.0
max_polyphony = 2
panning_strength = 0.7
bus = &"sfx"
playback_type = 1
[node name="SubwayTrainAudioIntense" type="AudioStreamPlayer3D" parent="Subway"]
unique_name_in_owner = true
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 0, -0.802, 10.908)
stream = ExtResource("3_4h0n7")
attenuation_model = 1
unit_size = 15.0
max_polyphony = 2
panning_strength = 0.9
bus = &"sfx"
playback_type = 1
[node name="TrainModel" parent="Subway" instance=ExtResource("1_2h2xx")]
unique_name_in_owner = true
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -3.4114173e-08, 0, -0.7804413)
[node name="LineLabelFront" type="Label3D" parent="Subway/TrainModel"]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -15.413577, 2.7434583, -6.737489e-07)
text = "U0"
font = ExtResource("10_3w708")
font_size = 64
[node name="LineLabelBack" type="Label3D" parent="Subway/TrainModel"]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 15.410003, 2.7434583, 6.9981036e-07)
text = "U0"
font = ExtResource("10_3w708")
font_size = 64
[node name="Collider" type="AnimatableBody3D" parent="Subway"]
unique_name_in_owner = true
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 0, 0, 0)
input_ray_pickable = false
sync_to_physics = false
[node name="FrontWallClosed" type="CollisionShape3D" parent="Subway/Collider"]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.8395386, 1.4940796, -1.533)
shape = SubResource("BoxShape3D_aacjs")
[node name="FrontWallOpen1" type="CollisionShape3D" parent="Subway/Collider"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.8054885, 1.4940796, -1.4447353)
shape = SubResource("BoxShape3D_4h0n7")
[node name="FrontWallOpen2" type="CollisionShape3D" parent="Subway/Collider"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.442047, 1.4940796, -1.4447353)
shape = SubResource("BoxShape3D_xhnml")
[node name="FrontWallOpen3" type="CollisionShape3D" parent="Subway/Collider"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11.829376, 1.4940796, -1.4447353)
shape = SubResource("BoxShape3D_5b47p")
[node name="RearWall" type="CollisionShape3D" parent="Subway/Collider"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.344, 1.457)
shape = SubResource("BoxShape3D_aacjs")
[node name="DriverCabin1" type="CollisionShape3D" parent="Subway/Collider"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 15.448963, 1.0697384, 0)
shape = SubResource("SphereShape3D_5jpg8")
debug_color = Color(0, 0.46666667, 0.54901963, 0.9254902)
[node name="DriverCabin2" type="CollisionShape3D" parent="Subway/Collider"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -13.730333, 1.0697384, 0)
shape = SubResource("SphereShape3D_5jpg8")
debug_color = Color(0, 0.46666667, 0.54901963, 0.9254902)
[node name="TrainFloor" type="CollisionShape3D" parent="Subway/Collider"]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.2, 0)
shape = SubResource("BoxShape3D_q8slu")
debug_color = Color(0.5375858, 0, 0.22143945, 1)

File diff suppressed because one or more lines are too long

View File

@ -1,14 +0,0 @@
class_name TrainLine extends Resource
enum id {
NONE,
RING,
U2,
U3,
U8
}
@export var train_id: id = id.NONE
@export var destination: StringName = ""
@export var via: StringName = ""
@export var stops: Dictionary[Station, float]

View File

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

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -41,5 +41,5 @@ process/premult_alpha=false
process/normal_map_invert_y=false process/normal_map_invert_y=false
process/hdr_as_srgb=false process/hdr_as_srgb=false
process/hdr_clamp_exposure=false process/hdr_clamp_exposure=false
process/size_limit=2048 process/size_limit=1024
detect_3d/compress_to=0 detect_3d/compress_to=0

View File

@ -41,5 +41,5 @@ process/premult_alpha=false
process/normal_map_invert_y=false process/normal_map_invert_y=false
process/hdr_as_srgb=false process/hdr_as_srgb=false
process/hdr_clamp_exposure=false process/hdr_clamp_exposure=false
process/size_limit=2048 process/size_limit=1024
detect_3d/compress_to=0 detect_3d/compress_to=0

Binary file not shown.

View File

@ -1,24 +0,0 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://dg4cq1texkil5"
path="res://.godot/imported/FoM_xavier_therapie_1.wav-5b326af67128f51afe9b270b12a8a195.sample"
[deps]
source_file="res://base-environments/volunteer_room/scenes/FoM_xavier_therapie_1.wav"
dest_files=["res://.godot/imported/FoM_xavier_therapie_1.wav-5b326af67128f51afe9b270b12a8a195.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

View File

@ -4,7 +4,7 @@
[ext_resource type="Texture2D" uid="uid://d0ucjqi8tx6vt" path="res://import/interface-elements/frame.png" id="2_abtq0"] [ext_resource type="Texture2D" uid="uid://d0ucjqi8tx6vt" path="res://import/interface-elements/frame.png" id="2_abtq0"]
[ext_resource type="Texture2D" uid="uid://bwicl5q0lw06q" path="res://import/interface-elements/bottom.png" id="3_pcx8t"] [ext_resource type="Texture2D" uid="uid://bwicl5q0lw06q" path="res://import/interface-elements/bottom.png" id="3_pcx8t"]
[ext_resource type="PackedScene" uid="uid://dvwuhobhka78d" path="res://ui/skip_control/skip_control.tscn" id="4_w4vem"] [ext_resource type="PackedScene" uid="uid://dvwuhobhka78d" path="res://ui/skip_control/skip_control.tscn" id="4_w4vem"]
[ext_resource type="AudioStream" uid="uid://dupcfwi54fpjx" path="res://base-environments/youth_room/audio/FoM_Lisa_Kindheit_Voice_Acting_deutsch_newt.wav" id="5_0dsyx"] [ext_resource type="AudioStream" uid="uid://cw1s2g8wg3120" path="res://base-environments/volunteer_room/sounds/FoM_xavier_unifood.wav" id="5_86ec2"]
[ext_resource type="AudioStream" uid="uid://d15ltkofdggly" path="res://base-environments/youth_room/audio/Voice-Training-Workshop.wav" id="6_fiu8d"] [ext_resource type="AudioStream" uid="uid://d15ltkofdggly" path="res://base-environments/youth_room/audio/Voice-Training-Workshop.wav" id="6_fiu8d"]
[ext_resource type="Script" uid="uid://c1oub0cs7cph6" path="res://dev-util/stereo-switch.gd" id="7_sh3ja"] [ext_resource type="Script" uid="uid://c1oub0cs7cph6" path="res://dev-util/stereo-switch.gd" id="7_sh3ja"]
@ -99,7 +99,7 @@ tracks/5/keys = {
[sub_resource type="Animation" id="Animation_ayw8a"] [sub_resource type="Animation" id="Animation_ayw8a"]
resource_name = "de" resource_name = "de"
length = 86.0 length = 66.0
tracks/0/type = "audio" tracks/0/type = "audio"
tracks/0/imported = false tracks/0/imported = false
tracks/0/enabled = true tracks/0/enabled = true
@ -108,11 +108,11 @@ tracks/0/interp = 1
tracks/0/loop_wrap = true tracks/0/loop_wrap = true
tracks/0/keys = { tracks/0/keys = {
"clips": [{ "clips": [{
"end_offset": 1.36178, "end_offset": 0.3525498,
"start_offset": 0.0, "start_offset": 1.6578125,
"stream": ExtResource("5_0dsyx") "stream": ExtResource("5_86ec2")
}], }],
"times": PackedFloat32Array(1.16667) "times": PackedFloat32Array(2.2000003)
} }
tracks/0/use_blend = true tracks/0/use_blend = true
tracks/1/type = "value" tracks/1/type = "value"
@ -122,10 +122,10 @@ tracks/1/path = NodePath("../../..:progress")
tracks/1/interp = 1 tracks/1/interp = 1
tracks/1/loop_wrap = true tracks/1/loop_wrap = true
tracks/1/keys = { tracks/1/keys = {
"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), "times": PackedFloat32Array(0, 1.66667, 4.73332, 6.03333, 11.6, 12.766666, 15.8333, 16.4333, 18.266666, 19.6333, 27.1, 29.8, 35.466633, 37.3, 39.933334, 41.233334, 43.800034, 45.233334, 52.833275, 53.466667, 58.166664, 59.6, 64.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), "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),
"update": 0, "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, 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] "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]
} }
tracks/2/type = "method" tracks/2/type = "method"
tracks/2/imported = false tracks/2/imported = false
@ -134,8 +134,8 @@ tracks/2/path = NodePath("../../..")
tracks/2/interp = 1 tracks/2/interp = 1
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/keys = { tracks/2/keys = {
"times": PackedFloat32Array(24.8, 47.87, 61.7667, 74.0333, 85.2667), "times": PackedFloat32Array(18.9, 40.766666, 65.2),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1), "transitions": PackedFloat32Array(1, 1, 1),
"values": [{ "values": [{
"args": [], "args": [],
"method": &"try_scroll" "method": &"try_scroll"
@ -144,12 +144,6 @@ tracks/2/keys = {
"method": &"try_scroll" "method": &"try_scroll"
}, { }, {
"args": [], "args": [],
"method": &"try_scroll"
}, {
"args": [],
"method": &"try_scroll"
}, {
"args": [],
"method": &"_on_text_finished" "method": &"_on_text_finished"
}] }]
} }
@ -469,6 +463,7 @@ script = ExtResource("1_86ec2")
scene_id = 8 scene_id = 8
story_array = PackedStringArray("God I am so \"happy\" mom took care of everything at home. The dishes, the laundry, the trash, the groceries, the food.", "But guess what: when you are at university, they don\'t provide a mom with your dorm.", "And suddenly, you don\'t just need to study for your first semester, you need to learn to survive on your own. Good luck building good habits with that.", "I got really thin.", "I didn\'t really manage to eat at home, I didn\'t have the money to eat takeout all the time and oh my god:", "how do students manage to survive in a cafeteria?", "I mean: How do they manage to socialise, attend all the lectures, find relationships and even look passable with all that going on?", "Is it just me? I don\'t know.", "Who I am glad about tho is Jules. She has an eating order history and someday had enough of seeing my body crumble and decieded to basically adopt me.", "I could never really relate with her former eating discorder thoughts she was probably trying to get out of my head.", "But I can\'t argue against her coping strategies helping my body get the food it needed.") story_array = PackedStringArray("God I am so \"happy\" mom took care of everything at home. The dishes, the laundry, the trash, the groceries, the food.", "But guess what: when you are at university, they don\'t provide a mom with your dorm.", "And suddenly, you don\'t just need to study for your first semester, you need to learn to survive on your own. Good luck building good habits with that.", "I got really thin.", "I didn\'t really manage to eat at home, I didn\'t have the money to eat takeout all the time and oh my god:", "how do students manage to survive in a cafeteria?", "I mean: How do they manage to socialise, attend all the lectures, find relationships and even look passable with all that going on?", "Is it just me? I don\'t know.", "Who I am glad about tho is Jules. She has an eating order history and someday had enough of seeing my body crumble and decieded to basically adopt me.", "I could never really relate with her former eating discorder thoughts she was probably trying to get out of my head.", "But I can\'t argue against her coping strategies helping my body get the food it needed.")
paragraph_lengths = PackedInt32Array(1, 2, 6, 8, 10) paragraph_lengths = PackedInt32Array(1, 2, 6, 8, 10)
progress = -1.0
[node name="PanelContainer" type="PanelContainer" parent="."] [node name="PanelContainer" type="PanelContainer" parent="."]
layout_mode = 2 layout_mode = 2

View File

@ -4,7 +4,7 @@
[ext_resource type="Texture2D" uid="uid://d0ucjqi8tx6vt" path="res://import/interface-elements/frame.png" id="2_00crh"] [ext_resource type="Texture2D" uid="uid://d0ucjqi8tx6vt" path="res://import/interface-elements/frame.png" id="2_00crh"]
[ext_resource type="Texture2D" uid="uid://bwicl5q0lw06q" path="res://import/interface-elements/bottom.png" id="3_3iy8l"] [ext_resource type="Texture2D" uid="uid://bwicl5q0lw06q" path="res://import/interface-elements/bottom.png" id="3_3iy8l"]
[ext_resource type="PackedScene" uid="uid://dvwuhobhka78d" path="res://ui/skip_control/skip_control.tscn" id="4_32a0r"] [ext_resource type="PackedScene" uid="uid://dvwuhobhka78d" path="res://ui/skip_control/skip_control.tscn" id="4_32a0r"]
[ext_resource type="AudioStream" uid="uid://dupcfwi54fpjx" path="res://base-environments/youth_room/audio/FoM_Lisa_Kindheit_Voice_Acting_deutsch_newt.wav" id="5_bfggg"] [ext_resource type="AudioStream" uid="uid://cnhkrhtk4cirx" path="res://base-environments/volunteer_room/sounds/FoM_xavier_therapie_1.wav" id="5_x5h0q"]
[ext_resource type="AudioStream" uid="uid://d15ltkofdggly" path="res://base-environments/youth_room/audio/Voice-Training-Workshop.wav" id="6_hdxjv"] [ext_resource type="AudioStream" uid="uid://d15ltkofdggly" path="res://base-environments/youth_room/audio/Voice-Training-Workshop.wav" id="6_hdxjv"]
[ext_resource type="Script" uid="uid://c1oub0cs7cph6" path="res://dev-util/stereo-switch.gd" id="7_xkdnh"] [ext_resource type="Script" uid="uid://c1oub0cs7cph6" path="res://dev-util/stereo-switch.gd" id="7_xkdnh"]
@ -99,7 +99,7 @@ tracks/5/keys = {
[sub_resource type="Animation" id="Animation_ayw8a"] [sub_resource type="Animation" id="Animation_ayw8a"]
resource_name = "de" resource_name = "de"
length = 86.0 length = 92.0
tracks/0/type = "audio" tracks/0/type = "audio"
tracks/0/imported = false tracks/0/imported = false
tracks/0/enabled = true tracks/0/enabled = true
@ -108,11 +108,11 @@ tracks/0/interp = 1
tracks/0/loop_wrap = true tracks/0/loop_wrap = true
tracks/0/keys = { tracks/0/keys = {
"clips": [{ "clips": [{
"end_offset": 1.36178, "end_offset": 0.0,
"start_offset": 0.0, "start_offset": 0.3923047,
"stream": ExtResource("5_bfggg") "stream": ExtResource("5_x5h0q")
}], }],
"times": PackedFloat32Array(1.16667) "times": PackedFloat32Array(1.9333333)
} }
tracks/0/use_blend = true tracks/0/use_blend = true
tracks/1/type = "value" tracks/1/type = "value"
@ -122,10 +122,10 @@ tracks/1/path = NodePath("../../..:progress")
tracks/1/interp = 1 tracks/1/interp = 1
tracks/1/loop_wrap = true tracks/1/loop_wrap = true
tracks/1/keys = { tracks/1/keys = {
"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), "times": PackedFloat32Array(0, 1.66667, 4.73332, 7.0333333, 11.6, 13.033334, 17.433332, 19.166666, 26.733334, 27.933332, 29.733202, 30.799902, 34.1999, 35.5666, 39.866665, 41.3, 46.400066, 47.833366, 52.1666, 52.8, 55.1667, 56.5, 59.033333, 60.233334, 64.9, 66.86667, 67.26674, 69.40013, 73.6, 75.46662, 78.46667, 79.4, 87.9),
"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), "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),
"update": 0, "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, 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] "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]
} }
tracks/2/type = "method" tracks/2/type = "method"
tracks/2/imported = false tracks/2/imported = false
@ -134,7 +134,7 @@ tracks/2/path = NodePath("../../..")
tracks/2/interp = 1 tracks/2/interp = 1
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/keys = { tracks/2/keys = {
"times": PackedFloat32Array(24.8, 47.87, 61.7667, 74.0333, 85.2667), "times": PackedFloat32Array(18.166666, 49.3, 59.666668, 74.76667, 91.63333),
"transitions": PackedFloat32Array(1, 1, 1, 1, 1), "transitions": PackedFloat32Array(1, 1, 1, 1, 1),
"values": [{ "values": [{
"args": [], "args": [],
@ -469,6 +469,7 @@ script = ExtResource("1_ym0sv")
scene_id = 6 scene_id = 6
story_array = PackedStringArray("I sometimes wish I could go back in time to save myself from Lukas.", "Sometimes I even want to fight him one last time to make him feel how much he hurt me.", "I don\'t like these thoughts, because all they do is make my head spiral into an endless void of anger and doubt.", "So on a calm mind, I just hope he learned his lesson so his next love doesn\'t need to become a survivor.", "But do I regret being one?", "I mean it has made me go to therapy and that was a good thing.", "My therapist was pretty young and still in training.", "Talking to *him* about sex never really worked for me.", "So I still don\'t know what to do about my cravings. I\'d rather not have them but I can\'t deny they exist.", "At least he gave me the tools to figure it out on my own.", "Old thoughts are here to stay, he always said. But you can choose how to react.", "And while I choose to not react to my cravings for now, I can choose something different in the future.", "He also helped me manage the gauntlet that is an ADHD diagnosis. I suspect I wouldn\'t have the executive skills to get that on my own.", "So I guess I got my medication thanks to Lukas?", "And I can tell when to brace for my period because the weird urge to make my ex hit some very hard ground is quite specific.") story_array = PackedStringArray("I sometimes wish I could go back in time to save myself from Lukas.", "Sometimes I even want to fight him one last time to make him feel how much he hurt me.", "I don\'t like these thoughts, because all they do is make my head spiral into an endless void of anger and doubt.", "So on a calm mind, I just hope he learned his lesson so his next love doesn\'t need to become a survivor.", "But do I regret being one?", "I mean it has made me go to therapy and that was a good thing.", "My therapist was pretty young and still in training.", "Talking to *him* about sex never really worked for me.", "So I still don\'t know what to do about my cravings. I\'d rather not have them but I can\'t deny they exist.", "At least he gave me the tools to figure it out on my own.", "Old thoughts are here to stay, he always said. But you can choose how to react.", "And while I choose to not react to my cravings for now, I can choose something different in the future.", "He also helped me manage the gauntlet that is an ADHD diagnosis. I suspect I wouldn\'t have the executive skills to get that on my own.", "So I guess I got my medication thanks to Lukas?", "And I can tell when to brace for my period because the weird urge to make my ex hit some very hard ground is quite specific.")
paragraph_lengths = PackedInt32Array(2, 3, 4, 5, 8, 11, 12, 14) paragraph_lengths = PackedInt32Array(2, 3, 4, 5, 8, 11, 12, 14)
progress = -1.0
[node name="PanelContainer" type="PanelContainer" parent="."] [node name="PanelContainer" type="PanelContainer" parent="."]
layout_mode = 2 layout_mode = 2

View File

@ -1,54 +0,0 @@
extends RoomTemplate
@onready var card_picker: CardPicker = %Picker
@onready var player: PlayerController = %PlayerController
func _ready():
super._ready()
id = State.rooms.ADULTHOOD
func get_ready() -> void:
super.get_ready()
Scenes.scene_finished.connect(_on_scene_finished)
card_picker.cards_picked.connect(card_board.populate_board)
save_game = State.save_game
save_game.current_room = State.rooms.ADULTHOOD
Scenes.completed_sequences = save_game.mementos_complete
Scenes.started_sequences = save_game.mementos_complete
Scenes.enabled_sequences = save_game.sequences_enabled
#FIXME: fix the bloddy card board loading algorythm
#card_board.initialise_from_save(save_game)
card_board.board_completed.connect(func():
#TODO: hook in ending
save_room()
)
func start_room():
super.start_room()
%UI.show()
%PlayerController.process_mode = Node.PROCESS_MODE_INHERIT
# Give player control immediately, then open
Scenes.player_enable.emit(true)
await Main.curtain.open()
func _on_scene_finished(_id: int, _repeat:bool):
await get_tree().create_timer(3).timeout
save_room()
func save_room():
# Update board state before saving
card_board.save_to_resource(save_game)
save_game.mementos_complete = Scenes.completed_sequences
save_game.sequences_enabled = Scenes.enabled_sequences
super.save_room()
func prepare_transition():
pass
func unload():
pass

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://datmg48duktt1"
path="res://.godot/imported/FoM_xavier_DnD.wav-a689cfa18e7eb4ed0e110e9622a5b653.sample"
[deps]
source_file="res://base-environments/volunteer_room/sounds/FoM_xavier_DnD.wav"
dest_files=["res://.godot/imported/FoM_xavier_DnD.wav-a689cfa18e7eb4ed0e110e9622a5b653.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

View File

@ -0,0 +1,34 @@
extends RoomWithBoard
class_name VolunteerRoom
func _ready() -> void:
super._ready() # UwU, superclass _ready is not called by Godot automatically...
prints("volunteer_room.gd", "_ready()", self)
func get_ready_async() -> void:
await super.get_ready_async()
%TherapyVoluntaryInteractable.visible = not save_game.subway_burnout
%TherapyUniInteractable.visible = save_game.subway_burnout
card_board.board_completed.connect(func():
save_game.childhood_board_complete = true
#%DoorInteractable.show()
)
func start_room_async():
await super.start_room_async()
# Give player control immediately, then open
%PlayerController.process_mode = Node.PROCESS_MODE_INHERIT
Scenes.player_enable.emit(true)
await Main.curtain.open()
func prepare_transition():
pass
func unload():
pass

View File

@ -1,7 +1,7 @@
[gd_scene load_steps=49 format=3 uid="uid://flisupth27th"] [gd_scene load_steps=49 format=3 uid="uid://flisupth27th"]
[ext_resource type="PackedScene" uid="uid://dwbhei5kywqbd" path="res://volunteer_room_visuals.tscn" id="1_ln5pp"] [ext_resource type="PackedScene" uid="uid://dwbhei5kywqbd" path="res://volunteer_room_visuals.tscn" id="1_ln5pp"]
[ext_resource type="Script" uid="uid://wiw2j1gw230e" path="res://base-environments/volunteer_room/shared_flat.gd" id="1_wdfvq"] [ext_resource type="Script" uid="uid://wiw2j1gw230e" path="res://base-environments/volunteer_room/volunteer_room.gd" id="1_wdfvq"]
[ext_resource type="PackedScene" uid="uid://mkccbig41bqb" path="res://logic-scenes/player_controller/player_controller.tscn" id="2_upyac"] [ext_resource type="PackedScene" uid="uid://mkccbig41bqb" path="res://logic-scenes/player_controller/player_controller.tscn" id="2_upyac"]
[ext_resource type="Script" uid="uid://c281w7earok6w" path="res://base-environments/youth_room/crouch_volume.gd" id="3_fli74"] [ext_resource type="Script" uid="uid://c281w7earok6w" path="res://base-environments/youth_room/crouch_volume.gd" id="3_fli74"]
[ext_resource type="PackedScene" uid="uid://dreokijo757l1" path="res://logic-scenes/interactable/interactable.tscn" id="5_my8p4"] [ext_resource type="PackedScene" uid="uid://dreokijo757l1" path="res://logic-scenes/interactable/interactable.tscn" id="5_my8p4"]
@ -201,11 +201,14 @@ func _on_environment_settings_update():
[node name="SharedFlat" type="Node3D"] [node name="SharedFlat" type="Node3D"]
script = ExtResource("1_wdfvq") script = ExtResource("1_wdfvq")
id = 3
[node name="PlayerController" parent="." instance=ExtResource("2_upyac")] [node name="PlayerController" parent="." instance=ExtResource("2_upyac")]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2.2023005, 0, 0.7319784) transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 2.2023005, 0, 0.7319784)
initial_pitch = 0.0
[node name="Camera3D" parent="PlayerController/Yaw/Pitch/Mount" index="0"]
transform = Transform3D(1, 0, 0, 0, 1.0000006, 0, 0, 0, 1.0000006, 0, 0.202, 0.157)
[node name="volunteer_room" parent="." instance=ExtResource("1_ln5pp")] [node name="volunteer_room" parent="." instance=ExtResource("1_ln5pp")]
@ -226,53 +229,58 @@ shape = SubResource("CapsuleShape3D_2fihi")
[node name="Collectables" type="Node3D" parent="."] [node name="Collectables" type="Node3D" parent="."]
[node name="KitchenInteractable" parent="Collectables" instance=ExtResource("5_my8p4")] [node name="KitchenInteractable" parent="Collectables" instance=ExtResource("5_my8p4")]
transform = Transform3D(-0.999999, 0, 8.742269e-08, 0, 1, 0, -8.742269e-08, 0, -0.999999, 3.46201, 1.8257881, -4.097006) transform = Transform3D(0.999999, 0, 0, 0, 1, 0, 0, 0, 0.999999, 0.8310573, 1.0068259, -2.7083611)
interaction = ExtResource("12_6rb4d") interaction = ExtResource("12_6rb4d")
[node name="BurnoutInteractable" parent="Collectables" instance=ExtResource("5_my8p4")] [node name="BurnoutInteractable" parent="Collectables" instance=ExtResource("5_my8p4")]
transform = Transform3D(1.3113409e-07, 0, 0.999999, 0, 1, 0, -0.999999, 0, 1.3113409e-07, -2.1812932, 0.8092947, 5.313688) transform = Transform3D(0.32358676, 0, -0.94619733, 0, 1, 0, 0.94619733, 0, 0.32358676, -2.1812932, 0.8092947, 5.313688)
interaction = ExtResource("11_kmoh8") interaction = ExtResource("11_kmoh8")
[node name="DiceInteractable" parent="Collectables" instance=ExtResource("5_my8p4")] [node name="DiceInteractable" parent="Collectables" instance=ExtResource("5_my8p4")]
transform = Transform3D(-0.70710593, 0, 0.70710605, 0, 1, 0, -0.70710605, 0, -0.70710593, -2.07945, 0.5828748, 3.3940656) transform = Transform3D(0.7071059, 0, -0.7071061, 0, 1, 0, 0.7071061, 0, 0.7071059, -2.07945, 0.5828748, 3.3940656)
interaction = ExtResource("16_e1uao") interaction = ExtResource("16_e1uao")
[node name="VoluntaryInteractable" parent="Collectables" instance=ExtResource("5_my8p4")] [node name="VoluntaryInteractable" parent="Collectables" instance=ExtResource("5_my8p4")]
transform = Transform3D(-4.3711392e-08, 0, -0.999999, 0, 1, 0, 0.999999, 0, -4.3711392e-08, 0.36332494, 1.2541859, 4.9624853) transform = Transform3D(-4.3711346e-08, 0, 0.999999, 0, 1, 0, -0.999999, 0, -4.3711346e-08, 0.36332494, 1.2541859, 4.9624853)
interaction = ExtResource("17_my8p4") interaction = ExtResource("17_my8p4")
billboard = false billboard = false
[node name="TherapyVoluntaryInteractable" parent="Collectables" instance=ExtResource("5_my8p4")] [node name="TherapyVoluntaryInteractable" parent="Collectables" instance=ExtResource("5_my8p4")]
transform = Transform3D(-0.999999, 0, 8.742269e-08, 0, 1, 0, -8.742269e-08, 0, -0.999999, 0.399901, 1.21835, 1.29166) unique_name_in_owner = true
transform = Transform3D(0.999999, 0, 0, 0, 1, 0, 0, 0, 0.999999, 0.399901, 1.21835, 1.29166)
interaction = ExtResource("15_ci4rn") interaction = ExtResource("15_ci4rn")
billboard = false billboard = false
[node name="TherapyUniInteractable" parent="Collectables" instance=ExtResource("5_my8p4")] [node name="TherapyUniInteractable" parent="Collectables" instance=ExtResource("5_my8p4")]
transform = Transform3D(-0.999999, 0, 8.742269e-08, 0, 1, 0, -8.742269e-08, 0, -0.999999, 0.399901, 1.21835, 1.29166) unique_name_in_owner = true
transform = Transform3D(0.999999, 0, 0, 0, 1, 0, 0, 0, 0.999999, 0.399901, 1.21835, 1.29166)
interaction = ExtResource("14_upyac") interaction = ExtResource("14_upyac")
billboard = false billboard = false
[node name="UniversityInteractable" parent="Collectables" instance=ExtResource("5_my8p4")] [node name="UniversityInteractable" parent="Collectables" instance=ExtResource("5_my8p4")]
transform = Transform3D(-4.371135e-08, 0, 0.9999991, 0, 1, 0, -0.9999991, 0, -4.371135e-08, -2.7745893, 1.593935, -3.0279322) transform = Transform3D(-4.371135e-08, 0, -0.9999991, 0, 1, 0, 0.9999991, 0, -4.371135e-08, -2.7745893, 1.4022808, -3.0279322)
interaction = ExtResource("13_5s6pb") interaction = ExtResource("13_5s6pb")
billboard = false billboard = false
[node name="OldThougtsInteractable" parent="Collectables" instance=ExtResource("5_my8p4")] [node name="OldThougtsInteractable" parent="Collectables" instance=ExtResource("5_my8p4")]
transform = Transform3D(1.3113399e-07, 0, 0.999999, 0, 1, 0, -0.999999, 0, 1.3113399e-07, -2.40979, 0.41340256, 0.403546) transform = Transform3D(-4.3711346e-08, 0, -0.999999, 0, 1, 0, 0.999999, 0, -4.3711346e-08, -2.40979, 0.41340256, 0.403546)
interaction = ExtResource("17_my8p4") interaction = ExtResource("17_my8p4")
[node name="AutismInteractable" parent="Collectables" instance=ExtResource("5_my8p4")] [node name="AutismInteractable" parent="Collectables" instance=ExtResource("5_my8p4")]
transform = Transform3D(0.49999908, 0, 0.86602396, 0, 1, 0, -0.86602396, 0, 0.49999908, -1.8407239, 1.0439266, -3.8908288) transform = Transform3D(-0.75470823, 0, -0.65605795, 0, 1, 0, 0.65605795, 0, -0.75470823, -1.8407239, 1.0439266, -3.8908288)
interaction = ExtResource("10_gcdra") interaction = ExtResource("10_gcdra")
[node name="Board" parent="Collectables" instance=ExtResource("5_my8p4")] [node name="Board" parent="Collectables" instance=ExtResource("5_my8p4")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -2.6904116, 1.240494, 4.441236) transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -2.7652016, 1.2894461, 4.522677)
interaction = ExtResource("19_ci4rn") interaction = ExtResource("19_ci4rn")
billboard = false billboard = false
[node name="DoorInteractable" type="Node3D" parent="Collectables"]
unique_name_in_owner = true
[node name="VoxelGI" type="VoxelGI" parent="."] [node name="VoxelGI" type="VoxelGI" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.08276367, 1.3269348, 0.05317688) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.08276367, 1.3269348, 0.09955597)
size = Vector3(6.132324, 2.9212036, 12.054474) size = Vector3(6.132324, 2.9212036, 12.147232)
data = ExtResource("8_fli74") data = ExtResource("8_fli74")
[node name="Collision" type="Node3D" parent="."] [node name="Collision" type="Node3D" parent="."]
@ -374,7 +382,7 @@ shape = SubResource("BoxShape3D_2ixm0")
[node name="Scenes" type="Node3D" parent="."] [node name="Scenes" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.4831846, 0, 2.44453) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.4831846, 0, 2.44453)
[node name="ScenePlayer" type="AnimationPlayer" parent="Scenes"] [node name="SceneAnimationPlayer" type="AnimationPlayer" parent="Scenes"]
unique_name_in_owner = true unique_name_in_owner = true
libraries = { libraries = {
&"": SubResource("AnimationLibrary_br20t") &"": SubResource("AnimationLibrary_br20t")
@ -406,3 +414,5 @@ script = SubResource("GDScript_ri8p0")
environment = SubResource("Environment_pdgua") environment = SubResource("Environment_pdgua")
camera_attributes = SubResource("CameraAttributesPractical_0bxa6") camera_attributes = SubResource("CameraAttributesPractical_0bxa6")
script = SubResource("GDScript_3k3rl") script = SubResource("GDScript_3k3rl")
[editable path="PlayerController"]

View File

@ -26,5 +26,5 @@ func scene_finished(_id: Scenes.id, _repeat: bool):
queue("RESET") queue("RESET")
func play(anin_name: StringName = "", a: float = -1, b: float = 1, c: bool = false) -> void: func play(anin_name: StringName = "", a: float = -1, b: float = 1, c: bool = false) -> void:
print_debug("anim player accessed!") print("anim player accessed!")
super.play(anin_name, a, b, c) super.play(anin_name, a, b, c)

View File

@ -21,4 +21,4 @@ edit/normalize=false
edit/loop_mode=2 edit/loop_mode=2
edit/loop_begin=0 edit/loop_begin=0
edit/loop_end=-1 edit/loop_end=-1
compress/mode=0 compress/mode=2

View File

@ -21,4 +21,4 @@ edit/normalize=false
edit/loop_mode=2 edit/loop_mode=2
edit/loop_begin=0 edit/loop_begin=0
edit/loop_end=-1 edit/loop_end=-1
compress/mode=0 compress/mode=2

View File

@ -21,4 +21,4 @@ edit/normalize=false
edit/loop_mode=2 edit/loop_mode=2
edit/loop_begin=0 edit/loop_begin=0
edit/loop_end=-1 edit/loop_end=-1
compress/mode=0 compress/mode=2

View File

@ -21,4 +21,4 @@ edit/normalize=false
edit/loop_mode=0 edit/loop_mode=0
edit/loop_begin=0 edit/loop_begin=0
edit/loop_end=-1 edit/loop_end=-1
compress/mode=0 compress/mode=2

View File

@ -1,50 +1,11 @@
[gd_scene load_steps=9 format=3 uid="uid://cg70r0102t8nl"] [gd_scene load_steps=9 format=3 uid="uid://cg70r0102t8nl"]
[ext_resource type="Script" uid="uid://d2lwghq7ye7ng" path="res://base-environments/youth_room/fairylights_animation_player.gd" id="1_mdd6t"]
[ext_resource type="Texture2D" uid="uid://i75aktvgsdwg" path="res://base-environments/youth_room/import/textures/wires_normal.png" id="1_p3lcj"] [ext_resource type="Texture2D" uid="uid://i75aktvgsdwg" path="res://base-environments/youth_room/import/textures/wires_normal.png" id="1_p3lcj"]
[ext_resource type="Texture2D" uid="uid://chisldkpt6bf5" path="res://base-environments/youth_room/import/textures/wires_albedo.png" id="1_xsr58"] [ext_resource type="Texture2D" uid="uid://chisldkpt6bf5" path="res://base-environments/youth_room/import/textures/wires_albedo.png" id="1_xsr58"]
[ext_resource type="Script" uid="uid://f26vfrf8n4l" path="res://addons/LineRenderer/line_renderer.gd" id="2_javfj"] [ext_resource type="Script" uid="uid://f26vfrf8n4l" path="res://addons/LineRenderer/line_renderer.gd" id="2_javfj"]
[ext_resource type="ArrayMesh" uid="uid://f5fr2e5gq313" path="res://base-environments/youth_room/shaders/fairy_light_diode.res" id="4_qh8yy"] [ext_resource type="ArrayMesh" uid="uid://f5fr2e5gq313" path="res://base-environments/youth_room/shaders/fairy_light_diode.res" id="4_qh8yy"]
[sub_resource type="GDScript" id="GDScript_2caij"]
script/source = "
extends Node3D
@export var light_array: Array[Vector3]:
set(points):
light_array = points
if is_inside_tree():
rebuild()
@onready var wires:LineRenderer3D = $wires
@onready var diodes:MultiMeshInstance3D = $diodes
@export var rng_seed:int = 42
var rng = RandomNumberGenerator.new()
@export var size:float = 0.1:
set(new_size):
size = new_size
rebuild()
if is_inside_tree():
wires.end_thickness = size*0.1
wires.start_thickness = size*0.1
# Called when the node enters the scene tree for the first time.
func _ready():
rebuild()
func rebuild():
rng.seed = rng_seed
rng.state = 0
for child in wires.get_children(): child.free()
wires.points = light_array
diodes.multimesh.instance_count = light_array.size()
var meshBuffer:PackedFloat32Array
for point in light_array:
var base:Basis = Basis(Vector3(rng.randf_range(-1, 1), rng.randf_range(-1, 1), rng.randf_range(-1, 1)).normalized(), rng.randf_range(0, PI*2))
base = base.scaled(Vector3(size, size, size))
meshBuffer.append_array([base.x.x, base.x.y, base.x.z, point.x, base.y.x, base.y.y, base.y.z, point.y, base.z.x, base.z.y, base.z.z, point.z])
diodes.multimesh.buffer = meshBuffer
"
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_5ca5e"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_5ca5e"]
transparency = 2 transparency = 2
alpha_scissor_threshold = 0.5 alpha_scissor_threshold = 0.5
@ -55,7 +16,7 @@ albedo_texture = ExtResource("1_xsr58")
normal_enabled = true normal_enabled = true
normal_texture = ExtResource("1_p3lcj") normal_texture = ExtResource("1_p3lcj")
[sub_resource type="ImmediateMesh" id="ImmediateMesh_30v5y"] [sub_resource type="ImmediateMesh" id="ImmediateMesh_hnqbx"]
[sub_resource type="MultiMesh" id="MultiMesh_ic3h7"] [sub_resource type="MultiMesh" id="MultiMesh_ic3h7"]
transform_format = 1 transform_format = 1
@ -64,13 +25,13 @@ mesh = ExtResource("4_qh8yy")
buffer = PackedFloat32Array(0.09981685, 0.0048210253, -0.0036542376, -0.545, -0.004285584, 0.09898752, 0.013531633, 0.915, 0.0042696027, -0.013350244, 0.09901284, 1.035, 0.07000746, -0.035884943, 0.061735135, -0.47, 0.052533384, 0.084440574, -0.010489702, 0.855, -0.048365276, 0.03977513, 0.077966265, 0.905, 0.004258701, 0.09203124, -0.038885914, -0.44, -0.0057153255, 0.039081898, 0.09186915, 0.871, 0.09974567, -0.0016899735, 0.00692427, 0.78, 0.021999925, -0.08708059, -0.0439656, -0.385, 0.08009742, 0.041850984, -0.042812362, 0.91, 0.055681296, -0.025796626, 0.0789565, 0.69, 0.09233354, 0.028834114, -0.025359664, -0.38, -0.035966184, 0.08807498, -0.0308096, 0.995, 0.013451844, 0.0375685, 0.091693275, 0.595, 0.041037153, 0.023612177, 0.08808186, -0.39, -0.08183642, -0.033079606, 0.0469951, 0.925, 0.040233698, -0.091368504, 0.005748424, 0.465, 0.096389726, 0.024975834, -0.009231994, -0.364, -0.025152955, 0.09678175, -0.0007887144, 0.86, 0.008737898, 0.0030823578, 0.09956982, 0.211, 0.09051618, -0.035352834, 0.023600822, -0.295, 0.009805123, 0.07139074, 0.06933414, 0.82, -0.04136038, -0.060444523, 0.06808656, 0.06, 0.099969886, -0.00044002375, 0.0024142524, -0.255, 0.00037742994, 0.099965714, 0.0025912046, 0.805, -0.0024248264, -0.0025813123, 0.09993727, -0.15, 0.06669522, -0.074469164, 0.002468294, -0.175, 0.066979624, 0.061372936, 0.04179824, 0.83, -0.03264166, -0.026224172, 0.090811975, -0.355, 0.008275211, 0.052801844, -0.08451915, -0.135, 0.09518374, -0.029311886, -0.008992719, 0.955, -0.029522488, -0.07970432, -0.052684378, -0.515, 0.09839882, -0.010216827, 0.014604448, -0.025, 0.0064255283, 0.09676424, 0.024400702, 0.78, -0.01662486, -0.023071585, 0.09587135, -0.615, -0.034177337, -0.07165746, -0.06080394, 0.115, 0.014493376, 0.059907008, -0.07874703, 0.63, 0.092853926, -0.035726182, -0.010089032, -0.695, -0.023289097, -0.071124874, 0.06632399, 0.245, 0.07954721, -0.053165104, -0.02908116, 0.555, 0.055945147, 0.045986135, 0.06895951, -0.745, -0.05999255, -0.025455302, -0.07584802, 0.37, -0.07084022, 0.060961187, 0.03557245, 0.595, 0.03718277, 0.07507172, -0.054604758, -0.805, 0.010777453, 0.09121187, 0.03955051, 0.455, 0.027344523, -0.04096749, 0.08702841, 0.745, 0.09558308, 0.0014354527, -0.029356688, -0.84, 0.0745873, 0.007008575, -0.06623908, 0.505, -0.03662421, 0.08737851, -0.03199474, 0.89, 0.055636343, 0.048123557, 0.067740105, -0.87, -0.052477725, -0.040816348, -0.07470016, 0.445, -0.07717951, -0.014203754, 0.061980464, 1.175, -0.035908382, 0.090179145, -0.024048049, -0.87, 0.065261625, -0.074675135, 0.012827498, 0.26, -0.071961984, -0.06638678, -0.020353615, 1.28, 0.023714853, 0.004052181, -0.0970628, -0.815, 0.04776166, -0.086053446, 0.017709581, 0.125, -0.045023393, -0.0066644074, 0.08904202, 1.35, -0.075443484, -0.050501395, -0.04192721, -0.8, 0.05265527, -0.07790997, -0.034021474, -0.037, -0.057078417, -0.0027407527, -0.08206426, 1.479, 0.06300379, 0.06263008, -0.04591292, -0.834, 0.07262851, 0.053707976, 0.042901676, -0.2, -0.03499957, 0.082609534, -0.044166677, 1.601, -0.0591619, 0.017062197, 0.07879563, -0.851, 0.058154207, 0.02977618, -0.07570646, -0.359, -0.046415366, 0.0885717, -0.00081792625, 1.769, 0.06681094, 0.035615087, 0.06532889, -0.85, 0.08759906, -0.04253812, 0.022735743, -0.5, 0.033643764, 0.0876653, 0.034393217, 1.949, -0.034561586, -0.022478973, 0.091105394, -0.85, 0.09468309, -0.029932225, -0.011797212, -0.594, 0.019968888, 0.025923345, 0.09449457, 2.126, -0.0252261, -0.09182615, 0.030522157, -0.85, 0.062641285, -0.07662324, 0.014316082, -0.634, 0.07794788, 0.0616799, -0.010941619, 2.238, -0.0004463233, 0.01801305, 0.098363265, -0.85, 0.051075388, -0.039760582, 0.07622598, -0.634, -0.015580878, 0.0829139, 0.053689104, 2.035, -0.08454904, -0.0392986, 0.03615355, -0.85, -0.055891007, -0.07219604, -0.040791273, -0.614, -0.07006708, 0.014808285, 0.06979484, 1.875, -0.044348616, 0.06759029, -0.058862157, -0.85, -0.05453172, 0.05173852, -0.06595012, -0.65, 0.038997572, 0.085303895, 0.034676112, 1.655, 0.07419893, -0.006809469, -0.06669445, -0.85, 0.08583314, 0.043052655, -0.027913136, -0.65, 0.030251084, -0.0864024, -0.04024298, 1.475, -0.04144329, 0.026097784, -0.08718578, -0.87) buffer = PackedFloat32Array(0.09981685, 0.0048210253, -0.0036542376, -0.545, -0.004285584, 0.09898752, 0.013531633, 0.915, 0.0042696027, -0.013350244, 0.09901284, 1.035, 0.07000746, -0.035884943, 0.061735135, -0.47, 0.052533384, 0.084440574, -0.010489702, 0.855, -0.048365276, 0.03977513, 0.077966265, 0.905, 0.004258701, 0.09203124, -0.038885914, -0.44, -0.0057153255, 0.039081898, 0.09186915, 0.871, 0.09974567, -0.0016899735, 0.00692427, 0.78, 0.021999925, -0.08708059, -0.0439656, -0.385, 0.08009742, 0.041850984, -0.042812362, 0.91, 0.055681296, -0.025796626, 0.0789565, 0.69, 0.09233354, 0.028834114, -0.025359664, -0.38, -0.035966184, 0.08807498, -0.0308096, 0.995, 0.013451844, 0.0375685, 0.091693275, 0.595, 0.041037153, 0.023612177, 0.08808186, -0.39, -0.08183642, -0.033079606, 0.0469951, 0.925, 0.040233698, -0.091368504, 0.005748424, 0.465, 0.096389726, 0.024975834, -0.009231994, -0.364, -0.025152955, 0.09678175, -0.0007887144, 0.86, 0.008737898, 0.0030823578, 0.09956982, 0.211, 0.09051618, -0.035352834, 0.023600822, -0.295, 0.009805123, 0.07139074, 0.06933414, 0.82, -0.04136038, -0.060444523, 0.06808656, 0.06, 0.099969886, -0.00044002375, 0.0024142524, -0.255, 0.00037742994, 0.099965714, 0.0025912046, 0.805, -0.0024248264, -0.0025813123, 0.09993727, -0.15, 0.06669522, -0.074469164, 0.002468294, -0.175, 0.066979624, 0.061372936, 0.04179824, 0.83, -0.03264166, -0.026224172, 0.090811975, -0.355, 0.008275211, 0.052801844, -0.08451915, -0.135, 0.09518374, -0.029311886, -0.008992719, 0.955, -0.029522488, -0.07970432, -0.052684378, -0.515, 0.09839882, -0.010216827, 0.014604448, -0.025, 0.0064255283, 0.09676424, 0.024400702, 0.78, -0.01662486, -0.023071585, 0.09587135, -0.615, -0.034177337, -0.07165746, -0.06080394, 0.115, 0.014493376, 0.059907008, -0.07874703, 0.63, 0.092853926, -0.035726182, -0.010089032, -0.695, -0.023289097, -0.071124874, 0.06632399, 0.245, 0.07954721, -0.053165104, -0.02908116, 0.555, 0.055945147, 0.045986135, 0.06895951, -0.745, -0.05999255, -0.025455302, -0.07584802, 0.37, -0.07084022, 0.060961187, 0.03557245, 0.595, 0.03718277, 0.07507172, -0.054604758, -0.805, 0.010777453, 0.09121187, 0.03955051, 0.455, 0.027344523, -0.04096749, 0.08702841, 0.745, 0.09558308, 0.0014354527, -0.029356688, -0.84, 0.0745873, 0.007008575, -0.06623908, 0.505, -0.03662421, 0.08737851, -0.03199474, 0.89, 0.055636343, 0.048123557, 0.067740105, -0.87, -0.052477725, -0.040816348, -0.07470016, 0.445, -0.07717951, -0.014203754, 0.061980464, 1.175, -0.035908382, 0.090179145, -0.024048049, -0.87, 0.065261625, -0.074675135, 0.012827498, 0.26, -0.071961984, -0.06638678, -0.020353615, 1.28, 0.023714853, 0.004052181, -0.0970628, -0.815, 0.04776166, -0.086053446, 0.017709581, 0.125, -0.045023393, -0.0066644074, 0.08904202, 1.35, -0.075443484, -0.050501395, -0.04192721, -0.8, 0.05265527, -0.07790997, -0.034021474, -0.037, -0.057078417, -0.0027407527, -0.08206426, 1.479, 0.06300379, 0.06263008, -0.04591292, -0.834, 0.07262851, 0.053707976, 0.042901676, -0.2, -0.03499957, 0.082609534, -0.044166677, 1.601, -0.0591619, 0.017062197, 0.07879563, -0.851, 0.058154207, 0.02977618, -0.07570646, -0.359, -0.046415366, 0.0885717, -0.00081792625, 1.769, 0.06681094, 0.035615087, 0.06532889, -0.85, 0.08759906, -0.04253812, 0.022735743, -0.5, 0.033643764, 0.0876653, 0.034393217, 1.949, -0.034561586, -0.022478973, 0.091105394, -0.85, 0.09468309, -0.029932225, -0.011797212, -0.594, 0.019968888, 0.025923345, 0.09449457, 2.126, -0.0252261, -0.09182615, 0.030522157, -0.85, 0.062641285, -0.07662324, 0.014316082, -0.634, 0.07794788, 0.0616799, -0.010941619, 2.238, -0.0004463233, 0.01801305, 0.098363265, -0.85, 0.051075388, -0.039760582, 0.07622598, -0.634, -0.015580878, 0.0829139, 0.053689104, 2.035, -0.08454904, -0.0392986, 0.03615355, -0.85, -0.055891007, -0.07219604, -0.040791273, -0.614, -0.07006708, 0.014808285, 0.06979484, 1.875, -0.044348616, 0.06759029, -0.058862157, -0.85, -0.05453172, 0.05173852, -0.06595012, -0.65, 0.038997572, 0.085303895, 0.034676112, 1.655, 0.07419893, -0.006809469, -0.06669445, -0.85, 0.08583314, 0.043052655, -0.027913136, -0.65, 0.030251084, -0.0864024, -0.04024298, 1.475, -0.04144329, 0.026097784, -0.08718578, -0.87)
[node name="fairylights" type="Node3D"] [node name="fairylights" type="Node3D"]
script = SubResource("GDScript_2caij") script = ExtResource("1_mdd6t")
light_array = Array[Vector3]([Vector3(0, 0, 0), Vector3(0, 1, 0)]) light_array = Array[Vector3]([Vector3(0, 0, 0), Vector3(0, 1, 0)])
[node name="wires" type="MeshInstance3D" parent="."] [node name="wires" type="MeshInstance3D" parent="."]
material_override = SubResource("StandardMaterial3D_5ca5e") material_override = SubResource("StandardMaterial3D_5ca5e")
gi_mode = 0 gi_mode = 0
mesh = SubResource("ImmediateMesh_30v5y") mesh = SubResource("ImmediateMesh_hnqbx")
script = ExtResource("2_javfj") script = ExtResource("2_javfj")
points = Array[Vector3]([Vector3(0, 0, 0), Vector3(0, 1, 0)]) points = Array[Vector3]([Vector3(0, 0, 0), Vector3(0, 1, 0)])
start_thickness = 0.01 start_thickness = 0.01

View File

@ -0,0 +1,37 @@
extends Node3D
@export var light_array: Array[Vector3]:
set(points):
light_array = points
if is_inside_tree():
rebuild()
@onready var wires:LineRenderer3D = $wires
@onready var diodes:MultiMeshInstance3D = $diodes
@export var rng_seed:int = 42
var rng = RandomNumberGenerator.new()
@export var size:float = 0.1:
set(new_size):
size = new_size
rebuild()
if is_inside_tree():
wires.end_thickness = size*0.1
wires.start_thickness = size*0.1
# Called when the node enters the scene tree for the first time.
func _ready():
rebuild()
func rebuild():
rng.seed = rng_seed
rng.state = 0
for child in wires.get_children(): child.free()
wires.points = light_array
diodes.multimesh.instance_count = light_array.size()
var meshBuffer:PackedFloat32Array
for point in light_array:
var base:Basis = Basis(Vector3(rng.randf_range(-1, 1), rng.randf_range(-1, 1), rng.randf_range(-1, 1)).normalized(), rng.randf_range(0, PI*2))
base = base.scaled(Vector3(size, size, size))
meshBuffer.append_array([base.x.x, base.x.y, base.x.z, point.x, base.y.x, base.y.y, base.y.z, point.y, base.z.x, base.z.y, base.z.z, point.z])
diodes.multimesh.buffer = meshBuffer

View File

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

View File

@ -1,4 +1,4 @@
[gd_resource type="ShaderMaterial" format=3 uid="uid://ct7uc5i5yp5qf"] [gd_resource type="ShaderMaterial" load_steps=5 format=3 uid="uid://ct7uc5i5yp5qf"]
[ext_resource type="Texture2D" uid="uid://c61ekclk8loxn" path="res://base-environments/youth_room/import/textures/red_plaster_weathered_rough_4k.png" id="1_2nxvx"] [ext_resource type="Texture2D" uid="uid://c61ekclk8loxn" path="res://base-environments/youth_room/import/textures/red_plaster_weathered_rough_4k.png" id="1_2nxvx"]
[ext_resource type="Texture2D" uid="uid://kf0vfm4sf0o3" path="res://base-environments/youth_room/import/textures/red_plaster_weathered_nor_gl_4k.png" id="2_80i0p"] [ext_resource type="Texture2D" uid="uid://kf0vfm4sf0o3" path="res://base-environments/youth_room/import/textures/red_plaster_weathered_nor_gl_4k.png" id="2_80i0p"]

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