Compare commits

..

9 Commits

Author SHA1 Message Date
Brazly
e597b86212 cleanup code 2026-02-16 21:00:01 +00:00
Brazly
3684788237 fixed up arrow bug 2026-02-16 20:50:15 +00:00
Brazly
1c9d43a5f7 added arrow keys to move cursor in terminal 2026-02-16 20:20:23 +00:00
Brazly
a7737b10e0 you can cycle through your command history 2026-02-15 19:55:05 +00:00
Brazly
a66f4c95cc tweaked lighting changes 2026-02-01 01:43:11 +00:00
Brazly
6b6ca53fbf added fog to the scene 2026-01-25 01:01:57 +00:00
Brazly
53254ab87b optimised code and made help command easier to read 2026-01-24 14:12:21 +00:00
Brazly
606e203b93 cleaned code and prefixed display text of directories when using the ls command to have an / 2026-01-24 13:39:01 +00:00
Brazly
6f92ab851f fixed scrolling issue 2026-01-23 15:08:07 +00:00
5 changed files with 203 additions and 120 deletions

View File

@@ -29,10 +29,10 @@ func _input(event: InputEvent) -> void:
match event.keycode:
KEY_PAGEUP:
terminal.ScrollUp()
terminal.call_deferred("ScrollUp")
KEY_PAGEDOWN:
terminal.ScrollDown()
terminal.call_deferred("ScrollDown")
KEY_BACKSPACE:
terminal.InputDelChar()
@@ -40,6 +40,18 @@ func _input(event: InputEvent) -> void:
KEY_ENTER:
terminal.EnterCommand()
KEY_UP:
terminal.NavigateHistory(1)
KEY_DOWN:
terminal.NavigateHistory(-1)
KEY_LEFT:
terminal.MoveCursorLeft()
KEY_RIGHT:
terminal.MoveCursorRight()
if event.unicode > 31:
var character = char(event.unicode)

View File

@@ -4,8 +4,15 @@ class_name TerminalControls
@onready var historyContainer = $MarginContainer/ScrollContainer/VBoxContainer
@onready var caret = $MarginContainer/ScrollContainer/VBoxContainer/Label/Caret
@onready var blink_timer = $MarginContainer/ScrollContainer/VBoxContainer/Label/CaretTimer
@onready var ruler: Label = $"caret-ruler"
@onready var scroll: ScrollContainer = $MarginContainer/ScrollContainer
@export var terminalLine: RichTextLabel
var terminalHistory: Array[String] = []
var historyIndex: int = -1
var cursorIndexFromEnd: int = 0
var command: String
var directory: String = "~/"
var fileSystem: Dictionary = {
@@ -32,7 +39,7 @@ func _ready() -> void:
func _on_caret_timer_timeout() -> void:
caret.visible = !caret.visible
func reset_blink() -> void:
func ResetBlink() -> void:
caret.visible = true
blink_timer.start() # Resets the countdown
@@ -40,18 +47,37 @@ func reset_blink() -> void:
func InputChar(input) -> void:
if input == null:
return
else:
command = input
terminalLine.text += command
UpdateCaretPos()
await get_tree().create_timer(.01).timeout
reset_blink()
var fullText = terminalLine.text
var insertPos = fullText.length() - cursorIndexFromEnd
var before = fullText.left(insertPos)
var after = fullText.right(cursorIndexFromEnd)
terminalLine.text = before + input + after
UpdateCaretPos()
await get_tree().physics_frame
ResetBlink()
func InputDelChar() -> void:
if terminalLine.text.length() > ("user@work " + directory).length() + 1:
terminalLine.text = terminalLine.text.left(-1)
var minLength = ("user@work " + directory).length() + 1
if terminalLine.text.length() <= minLength:
return
var fullText = terminalLine.text
var deletePos = fullText.length() - cursorIndexFromEnd
if deletePos > minLength:
var before = fullText.left(deletePos - 1)
var after = fullText.right(cursorIndexFromEnd)
terminalLine.text = before + after
UpdateCaretPos()
await get_tree().create_timer(.01).timeout
reset_blink()
await get_tree().physics_frame
ResetBlink()
func EnterCommand() -> void:
var fullText = terminalLine.text
@@ -61,6 +87,11 @@ func EnterCommand() -> void:
if historyContainer.get_child_count() <24:
CreateHistoryEntry(fullText)
if userInput != "":
terminalHistory.append(userInput)
historyIndex = terminalHistory.size()
cursorIndexFromEnd = 0
match parts[0]:
"ls", "list":
var currentDirData
@@ -70,8 +101,13 @@ func EnterCommand() -> void:
currentDirData = GetDirAtPath(directory)
if currentDirData is Dictionary:
var list = ""
var file: String
for key in currentDirData.keys():
list += key + " "
file = key
if file.ends_with(".txt"):
list += key + " "
else:
list += key + "/ "
CreateHistoryEntry(list)
else:
CreateHistoryEntry("error: Directory not found")
@@ -108,39 +144,67 @@ func EnterCommand() -> void:
UpdateCaretPos()
GetBottomScroll()
func MoveCursorLeft():
var fullText = terminalLine.get_parsed_text()
var lastNewlinePos = fullText.rfind("\n")
# The prompt starts after the last newline (or at 0 if it's the first line)
var promptStartIndex = lastNewlinePos + 1 if lastNewlinePos != -1 else 0
var promptLength = ("user@work " + directory + " ").length()
# The absolute index we aren't allowed to go before
var minAllowedIndex = promptStartIndex + promptLength
# Calculate current target index
var currentTarget = fullText.length() - cursorIndexFromEnd
if currentTarget > minAllowedIndex:
cursorIndexFromEnd += 1
UpdateCaretPos()
ResetBlink()
func MoveCursorRight():
cursorIndexFromEnd = clampi(cursorIndexFromEnd - 1, 0, terminalLine.text.length())
UpdateCaretPos()
ResetBlink()
# --- History and FileSystem Helpers ---
func NavigateHistory(direction: int):
if terminalHistory.is_empty():
return
historyIndex -= direction
if historyIndex >= terminalHistory.size():
historyIndex = terminalHistory.size()
terminalLine.text = "user@work "+ directory + " "
else:
historyIndex = clamp(historyIndex, 0, terminalHistory.size() - 1)
var historyCommand = terminalHistory[historyIndex]
terminalLine.text = "user@work "+ directory + " " + historyCommand
UpdateCaretPos()
func CreateHistoryEntry(content: String) -> void:
# var label = Label.new()
# label.text = content
# label.label_settings = LabelSettings.new()
# label.label_settings.font_size = 42
# label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
# label.custom_minimum_size = Vector2(1400, 0)
#
#if terminalLine.text.length() > 200:
#for child in historyContainer.get_children():
#if child != terminalLine:
#child.queue_free()
# historyContainer.add_child(label)
# historyContainer.move_child(label, historyContainer.get_child_count() - 2)
var rtl = RichTextLabel.new()
rtl.bbcode_enabled = true
rtl.fit_content = true # Important for VBoxContainer
rtl.fit_content = true
rtl.text = content
rtl.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
rtl.custom_minimum_size = Vector2(1400, 0)
rtl.add_theme_font_size_override("normal_font_size", 42)
# Optional: Set a theme or font override here
# rtl.add_theme_font_size_override("normal_font_size", 42)
historyContainer.add_child(rtl)
# Moves the entry above the input line
historyContainer.move_child(rtl, historyContainer.get_child_count() - 2)
func ResolvePath(current: String, target: String) -> String:
if target.begins_with("~/"):
return target if target.ends_with("/") else target + "/"
@@ -202,60 +266,57 @@ func RetrieveData(inputPath: String):
func Help(commandName: String = "default"):
match commandName:
"default": CreateHistoryEntry("--- AVAILABLE COMMANDS ---
ls (or list) [folder] : List all files and directories/folders
cd [folder] : Change directory (use '..' to go up a directory/folder)
cat (or view) [file] : Read the contents of a file
clear (or cls) : Clear the terminal screen
help : Show this menu
-------------------------")
"default": CreateHistoryEntry("--- AVAILABLE COMMANDS --- \n
ls (or list) [folder] ------------ : List all files and directories/folders
cd [folder] ---------------------- : Change directory (use '..' to go up a directory/folder)
cat (or view) [file] ------------- : Read the contents of a file
clear (or cls) ------------------- : Clear the terminal screen
help ----------------------------- : Show this menu
\n
")
func ScrollUp():
#var scroll: ScrollContainer = $MarginContainer/ScrollContainer
#await get_tree().create_timer(.0001).timeout
#scroll.set_deferred("scroll_vertical", scroll.get_v_scroll_bar().value - 10 )
#call_deferred("ScrollUp")
var scrolli: RichTextLabel = $MarginContainer/ScrollContainer/VBoxContainer/Label
var scroll = scrolli.get_v_scroll_bar()
var tween: = create_tween()
tween.tween_property(scroll, "value", scroll.value - (scroll.page - scroll.page * 0.1), 0.1)
get_tree().get_root().set_input_as_handled()
await get_tree().physics_frame
scroll.set_deferred("scroll_vertical", scroll.get_v_scroll_bar().value - 100 )
func ScrollDown():
var scroll: ScrollContainer = $MarginContainer/ScrollContainer
await get_tree().create_timer(.0001).timeout
scroll.set_deferred("scroll_vertical", scroll.get_v_scroll_bar().value + 10 )
call_deferred("ScrollDown")
await get_tree().physics_frame
scroll.set_deferred("scroll_vertical", scroll.get_v_scroll_bar().value + 100 )
func GetBottomScroll():
var scroll: ScrollContainer = $MarginContainer/ScrollContainer
var scrollMax: float = scroll.get_v_scroll_bar().max_value
await get_tree().create_timer(.01).timeout
scroll.set_deferred("scroll_vertical", scrollMax)
#scroll.vertical_scroll_mode = ScrollContainer.SCROLL_MODE_SHOW_NEVER
call_deferred("GetBottomScroll")
func UpdateCaretPos():
await get_tree().physics_frame
var visibleText = terminalLine.get_parsed_text()
await get_tree().create_timer(.01).timeout
var visible_text = terminalLine.get_parsed_text()
var ruler: Label = $"caret-ruler"
ruler.text = visibleText
ruler.custom_minimum_size.x = terminalLine.size.x
ruler.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
ruler.autowrap_mode =TextServer.AUTOWRAP_WORD_SMART
ruler.text = visible_text
var totalLen = visibleText.length()
var targetIndex = clampi(totalLen - cursorIndexFromEnd, 0, totalLen)
var last_char_index = ruler.text.length() - 1
var char_rect = ruler.get_character_bounds(max(0, last_char_index))
caret.position.x = char_rect.end.x + 1
caret.position.y = terminalLine.get_content_height() - 50
if totalLen == 0:
caret.position = Vector2.ZERO
return
var lastCharBounds = ruler.get_character_bounds(max(0, totalLen - 1))
var targetCharBounds = ruler.get_character_bounds(targetIndex)
if cursorIndexFromEnd == 0:
caret.position.x = lastCharBounds.end.x
caret.position.y = lastCharBounds.position.y
else:
caret.position.x = targetCharBounds.position.x
caret.position.y = targetCharBounds.position.y
caret.position.x += 1

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=23 format=3 uid="uid://cqtabc6coc58l"]
[gd_scene format=3 uid="uid://cqtabc6coc58l"]
[ext_resource type="Script" uid="uid://dmtpstry0o0a3" path="res://Assets/Scripts/Player Controls/player_movement.gd" id="1_48dl1"]
[ext_resource type="PackedScene" uid="uid://cbpsnsta7u3wl" path="res://Scenes/Special_Effects/PSX_style.tscn" id="2_gba58"]
@@ -14,7 +14,6 @@
background_mode = 1
background_color = Color(0.680932, 0.369129, 0.248985, 1)
background_energy_multiplier = 0.04
ssr_enabled = true
ssao_enabled = true
ssao_radius = 6.6
ssao_intensity = 5.34
@@ -27,8 +26,14 @@ sdfgi_enabled = true
sdfgi_use_occlusion = true
glow_enabled = true
glow_normalized = true
fog_light_energy = 15.32
fog_enabled = true
fog_light_energy = 0.87
fog_sun_scatter = 1.95
fog_density = 0.015
fog_height = -22.02
fog_height_density = 0.0195
volumetric_fog_density = 0.1974
volumetric_fog_emission_energy = 13.8
adjustment_enabled = true
adjustment_brightness = 0.75
@@ -51,13 +56,13 @@ emission_shape = 3
emission_box_extents = Vector3(1.49, 1.73, 2.42)
initial_velocity_min = 1.0
initial_velocity_max = 2.0
angular_velocity_min = 30.0
angular_velocity_max = 60.0
angular_velocity_min = 49.99998
angular_velocity_max = 49.99998
gravity = Vector3(0, 0, 0)
scale_curve = SubResource("CurveTexture_nmbs0")
color_ramp = SubResource("GradientTexture1D_cx0fw")
turbulence_enabled = true
turbulence_noise_scale = 1.85
turbulence_noise_scale = 0.375
collision_mode = 1
collision_friction = 1.0
collision_bounce = 0.0
@@ -91,25 +96,25 @@ font_color = Color(0, 0, 0, 1)
[sub_resource type="Theme" id="Theme_nmbs0"]
default_font_size = 42
[node name="Node3D" type="Node3D"]
[node name="Node3D" type="Node3D" unique_id=1638198756]
[node name="PlayerController" type="Node3D" parent="."]
[node name="PlayerController" type="Node3D" parent="." unique_id=1986808415]
process_mode = 1
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.370835, 0, 0)
script = ExtResource("1_48dl1")
psxScene = ExtResource("2_gba58")
[node name="Camera3D" type="Camera3D" parent="PlayerController" node_paths=PackedStringArray("terminal")]
[node name="Camera3D" type="Camera3D" parent="PlayerController" unique_id=160035236 node_paths=PackedStringArray("terminal")]
transform = Transform3D(0.0188834, 0, -0.999822, 0, 1, 0, 0.999822, 0, 0.0188834, -0.0640411, 1.42725, 1.30117)
fov = 45.2
near = 0.001
script = ExtResource("2_vwrhx")
terminal = NodePath("../../Interactables/PC/Sprite3D/SubViewport")
[node name="CanvasLayer" type="CanvasLayer" parent="PlayerController/Camera3D"]
[node name="CanvasLayer" type="CanvasLayer" parent="PlayerController/Camera3D" unique_id=672407600]
layer = 2
[node name="Control" type="Control" parent="PlayerController/Camera3D/CanvasLayer"]
[node name="Control" type="Control" parent="PlayerController/Camera3D/CanvasLayer" unique_id=462631869]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
@@ -119,7 +124,7 @@ grow_vertical = 2
size_flags_horizontal = 4
size_flags_vertical = 4
[node name="CrosshairCenter" type="CenterContainer" parent="PlayerController/Camera3D/CanvasLayer/Control"]
[node name="CrosshairCenter" type="CenterContainer" parent="PlayerController/Camera3D/CanvasLayer/Control" unique_id=1304360326]
unique_name_in_owner = true
layout_mode = 1
anchors_preset = 8
@@ -135,40 +140,40 @@ grow_horizontal = 2
grow_vertical = 2
script = ExtResource("3_vwrhx")
[node name="PauseMenu" type="CanvasLayer" parent="."]
[node name="PauseMenu" type="CanvasLayer" parent="." unique_id=1877883325]
[node name="CanvasLayer" type="CanvasLayer" parent="PauseMenu"]
[node name="CanvasLayer" type="CanvasLayer" parent="PauseMenu" unique_id=1881425996]
layer = 5
[node name="PauseMenu" parent="PauseMenu/CanvasLayer" instance=ExtResource("3_cx0fw")]
[node name="PauseMenu" parent="PauseMenu/CanvasLayer" unique_id=854219268 instance=ExtResource("3_cx0fw")]
process_mode = 3
z_index = 5
[node name="security office_UwU" parent="." instance=ExtResource("4_vwrhx")]
[node name="security office_UwU" parent="." unique_id=1463044162 instance=ExtResource("4_vwrhx")]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, -6.54)
[node name="Lighting" type="Node3D" parent="."]
[node name="Lighting" type="Node3D" parent="." unique_id=1400238474]
[node name="OmniLight3D" type="OmniLight3D" parent="Lighting"]
[node name="OmniLight3D" type="OmniLight3D" parent="Lighting" unique_id=1346598309]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.894977, 0.0786453, 0.971773)
light_color = Color(0.558852, 0.138576, 0.131343, 1)
light_energy = 0.048
[node name="OmniLight3D2" type="OmniLight3D" parent="Lighting"]
[node name="OmniLight3D2" type="OmniLight3D" parent="Lighting" unique_id=1151573255]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.982613, 0.0786453, 1.15155)
light_color = Color(0.558852, 0.138576, 0.131343, 1)
light_energy = 0.048
[node name="WorldEnvironment" type="WorldEnvironment" parent="Lighting"]
[node name="WorldEnvironment" type="WorldEnvironment" parent="Lighting" unique_id=720032518]
environment = SubResource("Environment_cumm5")
[node name="SpotLight3D" type="SpotLight3D" parent="Lighting"]
transform = Transform3D(0.313684, -0.884661, -0.344931, -0.446955, -0.458073, 0.768376, -0.837755, -0.0868584, -0.539093, 0.388222, 1.32097, 0.177619)
[node name="SpotLight3D" type="SpotLight3D" parent="Lighting" unique_id=140986413]
transform = Transform3D(0.31368402, -0.8846609, -0.34493113, -0.44695503, -0.4580729, 0.7683752, -0.8377551, -0.08685833, -0.5390938, 0.388222, 1.2932032, 0.21602583)
light_color = Color(1, 0.733333, 0.690196, 1)
light_energy = 0.543
shadow_enabled = true
[node name="OmniLight3D3" type="OmniLight3D" parent="Lighting"]
[node name="OmniLight3D3" type="OmniLight3D" parent="Lighting" unique_id=942914936]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.520964, 3.19324, 0.238268)
light_color = Color(0.101961, 0.054902, 0.0431373, 1)
light_energy = 2.111
@@ -176,62 +181,62 @@ light_indirect_energy = 3.59
shadow_enabled = true
script = ExtResource("5_nmbs0")
[node name="Timer" type="Timer" parent="Lighting/OmniLight3D3"]
[node name="Timer" type="Timer" parent="Lighting/OmniLight3D3" unique_id=1125547548]
wait_time = 0.5
autostart = true
[node name="VFX" type="Node3D" parent="Lighting"]
[node name="VFX" type="Node3D" parent="Lighting" unique_id=2114940519]
[node name="GPUParticles3D" type="GPUParticles3D" parent="Lighting/VFX"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.72499, 0.354899)
[node name="GPUParticles3D" type="GPUParticles3D" parent="Lighting/VFX" unique_id=538377545]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.1867385, 1.4605813, 0.354899)
amount = 800
lifetime = 20.0
randomness = 1.0
visibility_aabb = AABB(-0.105, -0.43, -0.4, 0.56, 0.32, 0.935)
process_material = SubResource("ParticleProcessMaterial_cx0fw")
draw_pass_1 = SubResource("QuadMesh_nmbs0")
[node name="GPUParticlesCollisionHeightField3D" type="GPUParticlesCollisionHeightField3D" parent="Lighting/VFX"]
[node name="GPUParticlesCollisionHeightField3D" type="GPUParticlesCollisionHeightField3D" parent="Lighting/VFX" unique_id=1642546253]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0385742, -0.168518, 0.386719)
size = Vector3(2.96582, 0.391724, 4.91016)
[node name="GPUParticlesCollisionHeightField3D2" type="GPUParticlesCollisionHeightField3D" parent="Lighting/VFX"]
[node name="GPUParticlesCollisionHeightField3D2" type="GPUParticlesCollisionHeightField3D" parent="Lighting/VFX" unique_id=1170671609]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.794207, 0.898239, 1.10249)
size = Vector3(1.29651, 0.0705109, 2.49951)
[node name="GPUParticlesAttractorSphere3D" type="GPUParticlesAttractorSphere3D" parent="Lighting/VFX"]
[node name="GPUParticlesAttractorSphere3D" type="GPUParticlesAttractorSphere3D" parent="Lighting/VFX" unique_id=77874923]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.447443, 1.25731, 0.393826)
strength = 3.0
radius = 0.409208
[node name="GPUParticlesAttractorSphere3D2" type="GPUParticlesAttractorSphere3D" parent="Lighting/VFX"]
[node name="GPUParticlesAttractorSphere3D2" type="GPUParticlesAttractorSphere3D" parent="Lighting/VFX" unique_id=1702502091]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.569778, 3.12136, 0.370614)
strength = 3.0
radius = 1.01
[node name="Interactables" type="Node3D" parent="."]
[node name="Interactables" type="Node3D" parent="." unique_id=1770190637]
[node name="PC" type="StaticBody3D" parent="Interactables"]
[node name="PC" type="StaticBody3D" parent="Interactables" unique_id=1312421362]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.521656, 1.06554, 1.25256)
physics_material_override = SubResource("PhysicsMaterial_vwrhx")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Interactables/PC"]
[node name="CollisionShape3D" type="CollisionShape3D" parent="Interactables/PC" unique_id=1917188444]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0478516, 0.229821, 0.0582275)
shape = SubResource("BoxShape3D_nmbs0")
[node name="Sprite3D" type="Sprite3D" parent="Interactables/PC"]
[node name="Sprite3D" type="Sprite3D" parent="Interactables/PC" unique_id=1343884150]
transform = Transform3D(0.024902493, 0.0022058422, 0, -0.0022058422, 0.024902493, 0, 0, 0, 0.024999999, 0.053893626, 0.32362998, 0.038876176)
layers = 2
flip_h = true
axis = 0
texture = SubResource("ViewportTexture_vwrhx")
[node name="SubViewport" type="SubViewport" parent="Interactables/PC/Sprite3D" node_paths=PackedStringArray("terminalLine")]
[node name="SubViewport" type="SubViewport" parent="Interactables/PC/Sprite3D" unique_id=969845837 node_paths=PackedStringArray("terminalLine")]
transparent_bg = true
size = Vector2i(1830, 1400)
script = ExtResource("10_gba58")
terminalLine = NodePath("MarginContainer/ScrollContainer/VBoxContainer/Label")
[node name="caret-ruler" type="Label" parent="Interactables/PC/Sprite3D/SubViewport"]
[node name="caret-ruler" type="Label" parent="Interactables/PC/Sprite3D/SubViewport" unique_id=1978172905]
clip_contents = true
custom_minimum_size = Vector2(1800, 0)
offset_right = 1800.0
@@ -240,23 +245,23 @@ text = "a0ifjaojkfna"
label_settings = SubResource("LabelSettings_nmbs0")
autowrap_mode = 3
[node name="MarginContainer" type="MarginContainer" parent="Interactables/PC/Sprite3D/SubViewport"]
[node name="MarginContainer" type="MarginContainer" parent="Interactables/PC/Sprite3D/SubViewport" unique_id=1395914383]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="ScrollContainer" type="ScrollContainer" parent="Interactables/PC/Sprite3D/SubViewport/MarginContainer"]
[node name="ScrollContainer" type="ScrollContainer" parent="Interactables/PC/Sprite3D/SubViewport/MarginContainer" unique_id=1077906655]
layout_mode = 2
scroll_horizontal_custom_step = 0.001
scroll_vertical_custom_step = 0.001
[node name="VBoxContainer" type="VBoxContainer" parent="Interactables/PC/Sprite3D/SubViewport/MarginContainer/ScrollContainer"]
[node name="VBoxContainer" type="VBoxContainer" parent="Interactables/PC/Sprite3D/SubViewport/MarginContainer/ScrollContainer" unique_id=1160436627]
custom_minimum_size = Vector2(1800, 0)
layout_mode = 2
[node name="Label" type="RichTextLabel" parent="Interactables/PC/Sprite3D/SubViewport/MarginContainer/ScrollContainer/VBoxContainer"]
[node name="Label" type="RichTextLabel" parent="Interactables/PC/Sprite3D/SubViewport/MarginContainer/ScrollContainer/VBoxContainer" unique_id=1332732238]
clip_contents = false
layout_mode = 2
size_flags_vertical = 0
@@ -265,13 +270,13 @@ bbcode_enabled = true
text = "afafafafafafa"
fit_content = true
[node name="Caret" type="ColorRect" parent="Interactables/PC/Sprite3D/SubViewport/MarginContainer/ScrollContainer/VBoxContainer/Label"]
[node name="Caret" type="ColorRect" parent="Interactables/PC/Sprite3D/SubViewport/MarginContainer/ScrollContainer/VBoxContainer/Label" unique_id=568444873]
layout_mode = 0
offset_top = -62.0
offset_right = 24.0
offset_bottom = -20.0
[node name="CaretTimer" type="Timer" parent="Interactables/PC/Sprite3D/SubViewport/MarginContainer/ScrollContainer/VBoxContainer/Label"]
[node name="CaretTimer" type="Timer" parent="Interactables/PC/Sprite3D/SubViewport/MarginContainer/ScrollContainer/VBoxContainer/Label" unique_id=1438556533]
wait_time = 0.5
autostart = true

View File

@@ -1,5 +1,5 @@
[gd_scene load_steps=2 format=3 uid="uid://cmyf6lhbn1x6p"]
[gd_scene format=3 uid="uid://cmyf6lhbn1x6p"]
[ext_resource type="PackedScene" uid="uid://b56h0sioa3yax" path="res://Assets/Model/Interior/Security_Office/security office.UwU.glb" id="1_o43w0"]
[node name="security office_UwU" instance=ExtResource("1_o43w0")]
[node name="security office_UwU" unique_id=696635579 instance=ExtResource("1_o43w0")]

View File

@@ -8,11 +8,16 @@
config_version=5
[animation]
compatibility/default_parent_skeleton_in_mesh_instance_3d=true
[application]
config/name="FNaF Game Show Project"
run/main_scene="uid://dq5ojxx2ytfwv"
config/features=PackedStringArray("4.5", "Forward Plus")
config/features=PackedStringArray("4.6", "Forward Plus")
run/max_fps=60
config/icon="res://icon.svg"
[autoload]