this ones called "persephone forgets to commit"

rearrange some files
make menu much nicer
add modding support
remove GT files from repo
This commit is contained in:
Persephone Bubblegum-Holiday 2025-07-31 22:31:46 -07:00
parent e71a64c690
commit 72b8578ece
37 changed files with 906 additions and 268 deletions

1
.gitignore vendored
View file

@ -1,5 +1,4 @@
# Godot 4+ specific ignores
.godot/
/android/
/LoadedModContent/
export_presets.cfg

View file

@ -2,16 +2,16 @@
[ext_resource type="Script" uid="uid://dfiwoln8mdwm8" path="res://Scripts/EditorScreen.gd" id="1_sd512"]
[ext_resource type="Theme" uid="uid://dbgs4id7y5d1c" path="res://UI/Themes/EditorDark.tres" id="1_v0ton"]
[ext_resource type="Texture2D" uid="uid://xllpr3qc064c" path="res://UI/Play.png" id="3_g6u4d"]
[ext_resource type="Texture2D" uid="uid://dgacnkv2dc65s" path="res://UI/PlayBackwards.png" id="3_mr8sb"]
[ext_resource type="Texture2D" uid="uid://dts4eh6hyt8p3" path="res://UI/SkipBackwards.png" id="3_r4ytj"]
[ext_resource type="Texture2D" uid="uid://bwhgy4u37jmo1" path="res://UI/Pause.png" id="4_ba3jn"]
[ext_resource type="Texture2D" uid="uid://xllpr3qc064c" path="res://UI/TransportControls/Play.png" id="3_g6u4d"]
[ext_resource type="Texture2D" uid="uid://dgacnkv2dc65s" path="res://UI/TransportControls/PlayBackwards.png" id="3_mr8sb"]
[ext_resource type="Texture2D" uid="uid://dts4eh6hyt8p3" path="res://UI/TransportControls/SkipBackwards.png" id="3_r4ytj"]
[ext_resource type="Texture2D" uid="uid://bwhgy4u37jmo1" path="res://UI/TransportControls/Pause.png" id="4_ba3jn"]
[ext_resource type="Texture2D" uid="uid://s3yr2wasxv03" path="res://UI/BlankCam.png" id="4_v0ton"]
[ext_resource type="Texture2D" uid="uid://dhx2v2fd0egxd" path="res://UI/FastBackwards.png" id="4_wy7jo"]
[ext_resource type="Texture2D" uid="uid://cttgtbu1xllwq" path="res://UI/Stop.png" id="8_20noo"]
[ext_resource type="Texture2D" uid="uid://dsr03w7r667fw" path="res://UI/FastForward.png" id="8_v0ton"]
[ext_resource type="Texture2D" uid="uid://bphwtliq2ahus" path="res://UI/SkipForward.png" id="9_20noo"]
[ext_resource type="Texture2D" uid="uid://ckg2ihy105ttj" path="res://UI/Record.png" id="10_wy7jo"]
[ext_resource type="Texture2D" uid="uid://dhx2v2fd0egxd" path="res://UI/TransportControls/FastBackwards.png" id="4_wy7jo"]
[ext_resource type="Texture2D" uid="uid://cttgtbu1xllwq" path="res://UI/TransportControls/Stop.png" id="8_20noo"]
[ext_resource type="Texture2D" uid="uid://dsr03w7r667fw" path="res://UI/TransportControls/FastForward.png" id="8_v0ton"]
[ext_resource type="Texture2D" uid="uid://bphwtliq2ahus" path="res://UI/TransportControls/SkipForward.png" id="9_20noo"]
[ext_resource type="Texture2D" uid="uid://ckg2ihy105ttj" path="res://UI/TransportControls/Record.png" id="10_wy7jo"]
[ext_resource type="ButtonGroup" uid="uid://bij2tonqeslpt" path="res://Scenes/GUI/FlyoutButtonGroup.tres" id="13_wy7jo"]
[sub_resource type="ViewportTexture" id="ViewportTexture_g6u4d"]
@ -141,6 +141,10 @@ dialog_text = "This showtape is not compatible with the currently selected stage
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
[node name="SubViewport" type="SubViewport" parent="."]
msaa_3d = 1
screen_space_aa = 1
use_debanding = true
use_occlusion_culling = true
mesh_lod_threshold = 0.0
size = Vector2i(1280, 720)
@ -153,7 +157,7 @@ grow_horizontal = 2
grow_vertical = 2
color = Color(0.187176, 0.187176, 0.187176, 1)
[node name="Label" type="Label" parent="."]
[node name="InstructionsLabel" type="Button" parent="."]
layout_mode = 1
anchors_preset = -1
anchor_right = 0.5
@ -166,17 +170,18 @@ grow_horizontal = 2
grow_vertical = 2
text = "Welcome to the Pneumatic Plaything Editor!
You can use the buttons on the top bar to change the
stage, load a showtape, or exit to the menu.
You can use the menu button on the top bar to
create a new Showtape, load an existing Showtape,
or exit to the menu.
The buttons on the side can be used to manually
control aspects of the show, such as flows, the
camera, and cosmetics.
Open the Controls menu (under the Menu button) to see
all of the keybinds."
horizontal_alignment = 1
vertical_alignment = 1
Controls can be viewed from the main menu
Click on this message to dismiss it."
flat = true
[node name="CameraPlaceholder" type="TextureRect" parent="."]
layout_mode = 1
@ -224,7 +229,7 @@ offset_top = 4.0
offset_right = 260.0
offset_bottom = 36.0
selected = 1
item_count = 15
item_count = 16
popup/item_0/text = "Official Stages"
popup/item_0/id = 0
popup/item_0/separator = true
@ -238,32 +243,34 @@ popup/item_4/text = "3-Stage"
popup/item_4/id = 4
popup/item_5/text = "Prototype Road Stage"
popup/item_5/id = 5
popup/item_6/text = "2-Stage"
popup/item_6/text = "Road Stage"
popup/item_6/id = 6
popup/item_7/text = "1-Stage"
popup/item_7/text = "2-Stage"
popup/item_7/id = 7
popup/item_8/text = "Turntable 1-Stage"
popup/item_8/text = "1-Stage"
popup/item_8/id = 8
popup/item_9/text = "Cyberamic 3-Stage"
popup/item_9/text = "Turntable 1-Stage"
popup/item_9/id = 9
popup/item_10/text = "CU-1 Stage"
popup/item_10/text = "Cyberamic 3-Stage"
popup/item_10/id = 10
popup/item_11/text = "Custom Stages"
popup/item_11/text = "CU-1 Stage"
popup/item_11/id = 11
popup/item_11/separator = true
popup/item_12/text = "Helen House"
popup/item_12/text = "Custom Stages"
popup/item_12/id = 12
popup/item_13/text = "Chuck E's Corner"
popup/item_12/separator = true
popup/item_13/text = "Helen House"
popup/item_13/id = 13
popup/item_14/text = "Modded"
popup/item_14/text = "Chuck E's Corner"
popup/item_14/id = 14
popup/item_14/separator = true
popup/item_15/text = "Modded Stages"
popup/item_15/id = 15
popup/item_15/separator = true
[node name="EditingLabel" type="Label" parent="MenuBar"]
layout_mode = 0
offset_left = 264.0
offset_left = 268.0
offset_top = 4.0
offset_right = 520.0
offset_right = 524.0
offset_bottom = 36.0
text = "No showtape loaded."
vertical_alignment = 1
@ -634,135 +641,6 @@ offset_bottom = 388.0
max_value = 0.0
step = 1.0
[node name="ControlsScreen" type="Control" parent="."]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="InputEater" type="Button" parent="ControlsScreen"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/focus = SubResource("StyleBoxEmpty_wy7jo")
theme_override_styles/disabled_mirrored = SubResource("StyleBoxEmpty_v0ton")
theme_override_styles/disabled = SubResource("StyleBoxEmpty_20noo")
theme_override_styles/hover_pressed_mirrored = SubResource("StyleBoxEmpty_mch36")
theme_override_styles/hover_pressed = SubResource("StyleBoxEmpty_fxi2g")
theme_override_styles/hover_mirrored = SubResource("StyleBoxEmpty_bdf35")
theme_override_styles/hover = SubResource("StyleBoxEmpty_j2w5p")
theme_override_styles/pressed_mirrored = SubResource("StyleBoxEmpty_bv2rw")
theme_override_styles/pressed = SubResource("StyleBoxEmpty_gx718")
theme_override_styles/normal_mirrored = SubResource("StyleBoxEmpty_gu086")
theme_override_styles/normal = SubResource("StyleBoxEmpty_othvt")
[node name="DialogPanel" type="Panel" parent="ControlsScreen"]
layout_mode = 1
anchors_preset = -1
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -256.0
offset_top = -192.0
offset_right = 256.0
offset_bottom = 192.0
grow_horizontal = 2
grow_vertical = 2
[node name="Label" type="Label" parent="ControlsScreen/DialogPanel"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
text = "Fullscreen camera view: ESC
Fullscreen program: F11 or Alt+Enter
Play/Pause: Space
Play Reverse: Shift + Space
Fast Forward: Shift + Right Arrow
Fast Reverse: Shift + Left
Step Forward: Right Arrow
Step Backward: Left Arrow
Stop: Home
Change Camera Angle: Tab"
horizontal_alignment = 1
vertical_alignment = 1
[node name="CreditsScreen" type="Control" parent="."]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="InputEater" type="Button" parent="CreditsScreen"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/focus = SubResource("StyleBoxEmpty_wy7jo")
theme_override_styles/disabled_mirrored = SubResource("StyleBoxEmpty_v0ton")
theme_override_styles/disabled = SubResource("StyleBoxEmpty_20noo")
theme_override_styles/hover_pressed_mirrored = SubResource("StyleBoxEmpty_mch36")
theme_override_styles/hover_pressed = SubResource("StyleBoxEmpty_fxi2g")
theme_override_styles/hover_mirrored = SubResource("StyleBoxEmpty_bdf35")
theme_override_styles/hover = SubResource("StyleBoxEmpty_j2w5p")
theme_override_styles/pressed_mirrored = SubResource("StyleBoxEmpty_bv2rw")
theme_override_styles/pressed = SubResource("StyleBoxEmpty_gx718")
theme_override_styles/normal_mirrored = SubResource("StyleBoxEmpty_gu086")
theme_override_styles/normal = SubResource("StyleBoxEmpty_othvt")
[node name="DialogPanel" type="Panel" parent="CreditsScreen"]
layout_mode = 1
anchors_preset = -1
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -256.0
offset_top = -256.0
offset_right = 256.0
offset_bottom = 256.0
grow_horizontal = 2
grow_vertical = 2
[node name="Label" type="Label" parent="CreditsScreen/DialogPanel"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
text = "Pneumatic Plaything Animatronic Simulator
Project Oversight: Persephone (KawaiiZenbo)
Interface Design: Persephone
Simulator Backend: Persephone
3-Stage Bot Models: Persephone
Cyberamic Bot Models: Persephone
C-Stage Model: Persephone
Iris Textures: Avery
Chuck E's Corner Stage: Luigigamin212
Balcony Stage Model: ToastHQ
This project is not associated with CEC Entertainment LLC.
or Creative Engineering Inc."
horizontal_alignment = 1
vertical_alignment = 1
[node name="ShowtapeNewScreen" type="Control" parent="."]
visible = false
layout_mode = 1
@ -1121,6 +999,7 @@ expand_mode = 2
[connection signal="confirmed" from="StageChangeOverwriteConfirmationDialog" to="." method="_on_stage_change_overwrite_confirmation_dialog_confirmed"]
[connection signal="confirmed" from="ExitMenuOverwriteConfirmationDialog" to="." method="_on_exit_menu_overwrite_confirmation_dialog_confirmed"]
[connection signal="confirmed" from="ExitDesktopOverwriteConfirmationDialog" to="." method="_on_exit_desktop_overwrite_confirmation_dialog_2_confirmed"]
[connection signal="pressed" from="InstructionsLabel" to="." method="_on_instructions_label_pressed"]
[connection signal="item_selected" from="MenuBar/StageSelector" to="." method="_on_stage_selector_item_selected"]
[connection signal="pressed" from="SequencerPanel/TransportControls/Centered/StepBackwardsButton" to="." method="_on_step_backwards_button_pressed"]
[connection signal="pressed" from="SequencerPanel/TransportControls/Centered/FastBackwardsButton" to="." method="_on_fast_backwards_button_pressed"]
@ -1139,8 +1018,6 @@ expand_mode = 2
[connection signal="value_changed" from="FlyoutPanel/Movements/VScrollBar" to="." method="_on_movement_v_scroll_bar_value_changed"]
[connection signal="value_changed" from="FlyoutPanel/FlowControls/VScrollBar" to="." method="_on_flow_v_scroll_bar_value_changed"]
[connection signal="value_changed" from="FlyoutPanel/Cosmetics/VScrollBar" to="." method="_on_cosmetics_v_scroll_bar_value_changed"]
[connection signal="pressed" from="ControlsScreen/InputEater" to="." method="_on_input_eater_pressed"]
[connection signal="pressed" from="CreditsScreen/InputEater" to="." method="_on_input_eater_pressed"]
[connection signal="pressed" from="ShowtapeNewScreen/InputEater" to="." method="_on_input_eater_pressed"]
[connection signal="pressed" from="ShowtapeNewScreen/DialogPanel/AudioBrowseButton" to="." method="_on_showtape_new_audio_browse_button_pressed"]
[connection signal="pressed" from="ShowtapeNewScreen/DialogPanel/CancelButton" to="." method="_on_showtape_new_cancel_button_pressed"]

View file

@ -1,30 +1,578 @@
[gd_scene load_steps=3 format=3 uid="uid://1ikkb4b8mw1w"]
[gd_scene load_steps=19 format=3 uid="uid://1ikkb4b8mw1w"]
[ext_resource type="Theme" uid="uid://dbgs4id7y5d1c" path="res://UI/Themes/EditorDark.tres" id="1_dkd36"]
[ext_resource type="Script" uid="uid://b5nh5td5bdsfd" path="res://Scripts/MainMenu.gd" id="1_ocgay"]
[ext_resource type="Texture2D" uid="uid://dbh0vh85wks2l" path="res://UI/logo.png" id="2_6d82g"]
[ext_resource type="Texture2D" uid="uid://6mf6wucl3y6k" path="res://UI/MenuBG/BalconyBG.png" id="2_j6v32"]
[ext_resource type="Texture2D" uid="uid://dr6ir8mgbjrs7" path="res://UI/MenuBG/CStageBG.png" id="3_vaoig"]
[ext_resource type="Texture2D" uid="uid://dyyyg85g3jwip" path="res://UI/MenuBG/ProtoRoadBG.png" id="4_dkd36"]
[sub_resource type="LabelSettings" id="LabelSettings_6d82g"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_dkd36"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ha2rd"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_wdeli"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_wyv1s"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_drn21"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_pcbci"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_he4sq"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_rsjs4"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_rj3vb"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_pocyv"]
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_8uhic"]
[sub_resource type="LabelSettings" id="LabelSettings_dkd36"]
font_size = 48
[node name="MainMenu" type="Control"]
layout_mode = 3
anchors_preset = 0
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("1_dkd36")
script = ExtResource("1_ocgay")
[node name="Label" type="Label" parent="."]
layout_mode = 0
offset_left = 103.0
offset_top = 100.0
offset_right = 580.0
offset_bottom = 167.0
text = "Pneumatic Plaything"
label_settings = SubResource("LabelSettings_6d82g")
[node name="PleaseRestart" type="AcceptDialog" parent="."]
auto_translate_mode = 1
initial_position = 2
dialog_text = "Please restart the game for any changes to apply."
[node name="Button" type="Button" parent="."]
[node name="Backgrounds" type="Control" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="BalconyBG" type="TextureRect" parent="Backgrounds"]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("2_j6v32")
expand_mode = 1
[node name="CStageBG" type="TextureRect" parent="Backgrounds"]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("3_vaoig")
expand_mode = 1
[node name="ProtoRoadBG" type="TextureRect" parent="Backgrounds"]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("4_dkd36")
expand_mode = 1
[node name="TextureRect" type="TextureRect" parent="."]
layout_mode = 0
offset_left = 303.0
offset_top = 349.0
offset_right = 579.0
offset_bottom = 506.0
offset_left = 64.0
offset_top = 64.0
offset_right = 576.0
offset_bottom = 160.0
texture = ExtResource("2_6d82g")
[node name="Buttons" type="Panel" parent="."]
layout_mode = 1
anchors_preset = 2
anchor_top = 1.0
anchor_bottom = 1.0
offset_left = 60.0
offset_top = -380.0
offset_right = 324.0
offset_bottom = -64.0
grow_vertical = 0
[node name="EditorButton" type="Button" parent="Buttons"]
layout_mode = 0
offset_left = 4.0
offset_top = 4.0
offset_right = 260.0
offset_bottom = 52.0
text = "Editor"
[connection signal="pressed" from="Button" to="." method="_on_button_pressed"]
[node name="FreeRoamButton" type="Button" parent="Buttons"]
layout_mode = 0
offset_left = 4.0
offset_top = 56.0
offset_right = 260.0
offset_bottom = 104.0
text = "Free Roam
"
[node name="ModsButton" type="Button" parent="Buttons"]
layout_mode = 0
offset_left = 4.0
offset_top = 108.0
offset_right = 260.0
offset_bottom = 156.0
text = "Manage Mods"
[node name="ControlsButton" type="Button" parent="Buttons"]
layout_mode = 0
offset_left = 4.0
offset_top = 160.0
offset_right = 260.0
offset_bottom = 208.0
text = "Controls"
[node name="CreditsButton" type="Button" parent="Buttons"]
layout_mode = 0
offset_left = 4.0
offset_top = 212.0
offset_right = 260.0
offset_bottom = 260.0
text = "Credits"
[node name="ExitButton" type="Button" parent="Buttons"]
layout_mode = 0
offset_left = 4.0
offset_top = 264.0
offset_right = 260.0
offset_bottom = 312.0
text = "Exit to Desktop"
[node name="FreeRoamChooseScreen" type="Control" parent="."]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="ColorRect" type="ColorRect" parent="FreeRoamChooseScreen"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0.121569, 0.121569, 0.121569, 0.501961)
[node name="InputEater" type="Button" parent="FreeRoamChooseScreen"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/focus = SubResource("StyleBoxEmpty_dkd36")
theme_override_styles/disabled_mirrored = SubResource("StyleBoxEmpty_ha2rd")
theme_override_styles/disabled = SubResource("StyleBoxEmpty_wdeli")
theme_override_styles/hover_pressed_mirrored = SubResource("StyleBoxEmpty_wyv1s")
theme_override_styles/hover_pressed = SubResource("StyleBoxEmpty_drn21")
theme_override_styles/hover_mirrored = SubResource("StyleBoxEmpty_pcbci")
theme_override_styles/hover = SubResource("StyleBoxEmpty_he4sq")
theme_override_styles/pressed_mirrored = SubResource("StyleBoxEmpty_rsjs4")
theme_override_styles/pressed = SubResource("StyleBoxEmpty_rj3vb")
theme_override_styles/normal_mirrored = SubResource("StyleBoxEmpty_pocyv")
theme_override_styles/normal = SubResource("StyleBoxEmpty_8uhic")
[node name="DialogPanel" type="Panel" parent="FreeRoamChooseScreen"]
layout_mode = 1
anchors_preset = -1
anchor_left = 0.5
anchor_right = 1.0
anchor_bottom = 1.0
offset_top = 64.0
offset_right = -64.0
offset_bottom = -64.0
grow_horizontal = 2
grow_vertical = 2
[node name="Label" type="Label" parent="FreeRoamChooseScreen/DialogPanel"]
layout_mode = 1
anchors_preset = -1
anchor_right = 1.0
offset_left = 8.0
offset_top = 8.0
offset_right = -8.0
offset_bottom = 112.0
grow_horizontal = 2
text = "Free Roam"
label_settings = SubResource("LabelSettings_dkd36")
horizontal_alignment = 1
vertical_alignment = 1
[node name="ModsScreen" type="Control" parent="."]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="ColorRect" type="ColorRect" parent="ModsScreen"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0.121569, 0.121569, 0.121569, 0.501961)
[node name="InputEater" type="Button" parent="ModsScreen"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/focus = SubResource("StyleBoxEmpty_dkd36")
theme_override_styles/disabled_mirrored = SubResource("StyleBoxEmpty_ha2rd")
theme_override_styles/disabled = SubResource("StyleBoxEmpty_wdeli")
theme_override_styles/hover_pressed_mirrored = SubResource("StyleBoxEmpty_wyv1s")
theme_override_styles/hover_pressed = SubResource("StyleBoxEmpty_drn21")
theme_override_styles/hover_mirrored = SubResource("StyleBoxEmpty_pcbci")
theme_override_styles/hover = SubResource("StyleBoxEmpty_he4sq")
theme_override_styles/pressed_mirrored = SubResource("StyleBoxEmpty_rsjs4")
theme_override_styles/pressed = SubResource("StyleBoxEmpty_rj3vb")
theme_override_styles/normal_mirrored = SubResource("StyleBoxEmpty_pocyv")
theme_override_styles/normal = SubResource("StyleBoxEmpty_8uhic")
[node name="DialogPanel" type="Panel" parent="ModsScreen"]
layout_mode = 1
anchors_preset = -1
anchor_left = 0.5
anchor_right = 1.0
anchor_bottom = 1.0
offset_top = 64.0
offset_right = -64.0
offset_bottom = -64.0
grow_horizontal = 2
grow_vertical = 2
[node name="Label" type="Label" parent="ModsScreen/DialogPanel"]
layout_mode = 1
anchors_preset = -1
anchor_right = 1.0
offset_left = 8.0
offset_top = 8.0
offset_right = -8.0
offset_bottom = 112.0
grow_horizontal = 2
text = "Mods"
label_settings = SubResource("LabelSettings_dkd36")
horizontal_alignment = 1
vertical_alignment = 1
[node name="ModList" type="ItemList" parent="ModsScreen/DialogPanel"]
layout_mode = 1
anchors_preset = -1
anchor_right = 1.0
anchor_bottom = 0.5
offset_left = 8.0
offset_top = 128.0
offset_right = -8.0
grow_horizontal = 2
grow_vertical = 2
[node name="ModNameText" type="Label" parent="ModsScreen/DialogPanel"]
layout_mode = 1
anchors_preset = -1
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = 8.0
offset_top = 8.0
offset_bottom = 40.0
text = "Select a mod to view its information"
vertical_alignment = 1
clip_text = true
text_overrun_behavior = 3
[node name="ModAuthorText" type="Label" parent="ModsScreen/DialogPanel"]
layout_mode = 1
anchors_preset = -1
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_left = 8.0
offset_top = 8.0
offset_right = -8.0
offset_bottom = 40.0
vertical_alignment = 1
clip_text = true
text_overrun_behavior = 3
[node name="ModVersionText" type="Label" parent="ModsScreen/DialogPanel"]
layout_mode = 1
anchors_preset = -1
anchor_top = 1.0
anchor_right = 0.25
anchor_bottom = 1.0
offset_left = 8.0
offset_top = -40.0
offset_bottom = -8.0
vertical_alignment = 1
clip_text = true
text_overrun_behavior = 3
[node name="ModDescriptionText" type="Label" parent="ModsScreen/DialogPanel"]
layout_mode = 1
anchors_preset = -1
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 8.0
offset_top = 48.0
offset_right = -8.0
offset_bottom = -48.0
grow_horizontal = 2
grow_vertical = 2
autowrap_mode = 2
clip_text = true
text_overrun_behavior = 3
[node name="OpenFolderButton" type="Button" parent="ModsScreen/DialogPanel"]
layout_mode = 1
anchors_preset = -1
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -264.0
offset_top = -40.0
offset_right = -8.0
offset_bottom = -8.0
grow_horizontal = 0
grow_vertical = 0
text = "Open Mods Folder"
[node name="ControlsScreen" type="Control" parent="."]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="ColorRect" type="ColorRect" parent="ControlsScreen"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0.121569, 0.121569, 0.121569, 0.501961)
[node name="InputEater" type="Button" parent="ControlsScreen"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/focus = SubResource("StyleBoxEmpty_dkd36")
theme_override_styles/disabled_mirrored = SubResource("StyleBoxEmpty_ha2rd")
theme_override_styles/disabled = SubResource("StyleBoxEmpty_wdeli")
theme_override_styles/hover_pressed_mirrored = SubResource("StyleBoxEmpty_wyv1s")
theme_override_styles/hover_pressed = SubResource("StyleBoxEmpty_drn21")
theme_override_styles/hover_mirrored = SubResource("StyleBoxEmpty_pcbci")
theme_override_styles/hover = SubResource("StyleBoxEmpty_he4sq")
theme_override_styles/pressed_mirrored = SubResource("StyleBoxEmpty_rsjs4")
theme_override_styles/pressed = SubResource("StyleBoxEmpty_rj3vb")
theme_override_styles/normal_mirrored = SubResource("StyleBoxEmpty_pocyv")
theme_override_styles/normal = SubResource("StyleBoxEmpty_8uhic")
[node name="DialogPanel" type="Panel" parent="ControlsScreen"]
layout_mode = 1
anchors_preset = -1
anchor_left = 0.5
anchor_right = 1.0
anchor_bottom = 1.0
offset_top = 64.0
offset_right = -64.0
offset_bottom = -64.0
grow_horizontal = 2
grow_vertical = 2
[node name="Label" type="Label" parent="ControlsScreen/DialogPanel"]
layout_mode = 1
anchors_preset = -1
anchor_right = 1.0
offset_left = 8.0
offset_top = 8.0
offset_right = -8.0
offset_bottom = 112.0
grow_horizontal = 2
text = "Controls"
label_settings = SubResource("LabelSettings_dkd36")
horizontal_alignment = 1
vertical_alignment = 1
[node name="EditorLabel" type="Label" parent="ControlsScreen/DialogPanel"]
layout_mode = 1
anchors_preset = -1
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = 8.0
offset_top = 128.0
offset_bottom = -8.0
grow_horizontal = 2
grow_vertical = 2
text = "Global:
Fullscreen: F11 or Alt+Enter
In Editor:
Fullscreen camera view: ESC
Play/Pause: Space
Play Reverse: Shift + Space
Fast Forward: Shift + Right Arrow
Fast Reverse: Shift + Left
Step Forward: Right Arrow
Step Backward: Left Arrow
Stop: Home
Change Camera Angle: Tab"
[node name="FreeRoamLabel" type="Label" parent="ControlsScreen/DialogPanel"]
layout_mode = 1
anchors_preset = -1
anchor_left = 0.5
anchor_right = 1.0
anchor_bottom = 1.0
offset_top = 128.0
offset_right = -8.0
offset_bottom = -8.0
grow_horizontal = 2
grow_vertical = 2
text = "
In Free Roam:
Move: W, A, S, D
Jump: Space
Open Menu: ESC"
[node name="CreditsScreen" type="Control" parent="."]
visible = false
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="ColorRect" type="ColorRect" parent="CreditsScreen"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0.121569, 0.121569, 0.121569, 0.501961)
[node name="InputEater" type="Button" parent="CreditsScreen"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme_override_styles/focus = SubResource("StyleBoxEmpty_dkd36")
theme_override_styles/disabled_mirrored = SubResource("StyleBoxEmpty_ha2rd")
theme_override_styles/disabled = SubResource("StyleBoxEmpty_wdeli")
theme_override_styles/hover_pressed_mirrored = SubResource("StyleBoxEmpty_wyv1s")
theme_override_styles/hover_pressed = SubResource("StyleBoxEmpty_drn21")
theme_override_styles/hover_mirrored = SubResource("StyleBoxEmpty_pcbci")
theme_override_styles/hover = SubResource("StyleBoxEmpty_he4sq")
theme_override_styles/pressed_mirrored = SubResource("StyleBoxEmpty_rsjs4")
theme_override_styles/pressed = SubResource("StyleBoxEmpty_rj3vb")
theme_override_styles/normal_mirrored = SubResource("StyleBoxEmpty_pocyv")
theme_override_styles/normal = SubResource("StyleBoxEmpty_8uhic")
[node name="DialogPanel" type="Panel" parent="CreditsScreen"]
layout_mode = 1
anchors_preset = -1
anchor_left = 0.5
anchor_right = 1.0
anchor_bottom = 1.0
offset_top = 64.0
offset_right = -64.0
offset_bottom = -64.0
grow_horizontal = 2
grow_vertical = 2
[node name="Label" type="Label" parent="CreditsScreen/DialogPanel"]
layout_mode = 1
anchors_preset = -1
anchor_right = 1.0
offset_left = 8.0
offset_top = 8.0
offset_right = -8.0
offset_bottom = 112.0
grow_horizontal = 2
text = "Credits"
label_settings = SubResource("LabelSettings_dkd36")
horizontal_alignment = 1
vertical_alignment = 1
[node name="CreditsLabel" type="Label" parent="CreditsScreen/DialogPanel"]
layout_mode = 1
anchors_preset = -1
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 8.0
offset_top = 128.0
offset_right = -8.0
offset_bottom = -8.0
grow_horizontal = 2
grow_vertical = 2
text = "Pneumatic Plaything Animatronic Simulator
Project Oversight: Persephone (KawaiiZenbo)
Interface Design: Persephone
Simulator Backend: Persephone
3-Stage Bot Models: Persephone
Cyberamic Bot Models: Persephone
C-Stage Model: Persephone
Cyberamic Iris Textures: Avery
Chuck E's Corner Stage: Luigigamin212
Balcony Stage Model: ToastHQ
This project is not associated with CEC Entertainment LLC.
or Creative Engineering Inc."
horizontal_alignment = 1
[connection signal="pressed" from="Buttons/EditorButton" to="." method="_on_button_pressed"]
[connection signal="pressed" from="Buttons/FreeRoamButton" to="." method="_on_free_roam_button_pressed"]
[connection signal="pressed" from="Buttons/ModsButton" to="." method="_on_mods_button_pressed"]
[connection signal="pressed" from="Buttons/ControlsButton" to="." method="_on_controls_button_pressed"]
[connection signal="pressed" from="Buttons/CreditsButton" to="." method="_on_credits_button_pressed"]
[connection signal="pressed" from="Buttons/ExitButton" to="." method="_on_exit_button_pressed"]
[connection signal="pressed" from="FreeRoamChooseScreen/InputEater" to="." method="_on_input_eater_pressed"]
[connection signal="pressed" from="ModsScreen/InputEater" to="." method="_on_input_eater_pressed"]
[connection signal="item_selected" from="ModsScreen/DialogPanel/ModList" to="." method="_on_mod_list_item_selected"]
[connection signal="pressed" from="ModsScreen/DialogPanel/OpenFolderButton" to="." method="_on_open_folder_button_pressed"]
[connection signal="pressed" from="ControlsScreen/InputEater" to="." method="_on_input_eater_pressed"]
[connection signal="pressed" from="CreditsScreen/InputEater" to="." method="_on_input_eater_pressed"]

View file

@ -374,3 +374,14 @@ var Cyber3Stage = {
],
"cosmetic_defaults": [ 4, 4, 1, 1, 1, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 3 ]
}
var stages_info = {
"Helen House": HelenHouse,
"Chuck E's Corner": ChuckEsCorner,
"Balcony Stage": BalconyStage,
"C-Stage": CStage,
"Prototype Road Stage": ProtoRoadStage,
"Cyberamic 3-Stage": Cyber3Stage,
}
var loaded_mods = { }

View file

@ -7,22 +7,12 @@ var playback_rate : int = 1
var transport_enabled : bool = false
var erase_validated : bool = false
var cam_index : int = 0
var fullscreen : bool = false
var showtape_loaded : bool = false
var show_name : String
var current_stage : String
var stages_info = {
"Helen House": Stages.HelenHouse,
"Chuck E's Corner": Stages.ChuckEsCorner,
"Balcony Stage": Stages.BalconyStage,
"C-Stage": Stages.CStage,
"Prototype Road Stage": Stages.ProtoRoadStage,
"Cyberamic 3-Stage": Stages.Cyber3Stage,
}
signal step(amount: int)
signal start_recording()
signal end_recording()
@ -47,14 +37,14 @@ func reload_stage() -> void:
if ($SubViewport.get_child_count() > 0):
$SubViewport.get_child(0).queue_free()
cam_index = 0
var stage = load(stages_info[current_stage]["scene"]).instantiate()
var stage = load(Stages.stages_info[current_stage]["scene"]).instantiate()
$SubViewport.add_child(stage)
var cam_offset = 4
for i in range(1, stages_info[current_stage]["camera_count"]+1):
for i in range(1, Stages.stages_info[current_stage]["camera_count"]+1):
var camera_button = load("res://Scenes/GUI/Controls/CameraButton.tscn").instantiate()
camera_button.camera = "Angle " + str(i)
camera_button.base_scene_path = "../../../" + stages_info[current_stage]["scene_ref_base"]
camera_button.base_scene_path = "../../../" + Stages.stages_info[current_stage]["scene_ref_base"]
camera_button.position.y = cam_offset
cam_offset += 36
$FlyoutPanel/Camera.add_child(camera_button)
@ -62,13 +52,13 @@ func reload_stage() -> void:
var cosmetics_offset = 0
var cosmetics_count = 0
for cosmetic_subtable in stages_info[current_stage]["cosmetics"]:
for cosmetic_subtable in Stages.stages_info[current_stage]["cosmetics"]:
for cosmetic in cosmetic_subtable:
var cosmetic_adjustment = load("res://Scenes/GUI/Controls/CosmeticAdjustment.tscn").instantiate()
cosmetic_adjustment.vis_name = cosmetic
cosmetic_adjustment.options = cosmetic_subtable[cosmetic]
cosmetic_adjustment.scene_handle = "../../../../../" + stages_info[current_stage]["scene_ref_base"]
cosmetic_adjustment.drop_index = stages_info[current_stage]["cosmetic_defaults"][cosmetics_count]
cosmetic_adjustment.scene_handle = "../../../../../" + Stages.stages_info[current_stage]["scene_ref_base"]
cosmetic_adjustment.drop_index = Stages.stages_info[current_stage]["cosmetic_defaults"][cosmetics_count]
cosmetic_adjustment.position.y = cosmetics_offset
cosmetics_offset += 44
cosmetics_count += 1
@ -78,12 +68,12 @@ func reload_stage() -> void:
var rows_offset = 0
var flows_offset = 0
var flow_count = 0
for bit_number in stages_info[current_stage]["bit_mapping"]:
var bot = stages_info[current_stage]["bit_mapping"][bit_number]["bot"]
var movement = stages_info[current_stage]["bit_mapping"][bit_number]["movement"]
for bit_number in Stages.stages_info[current_stage]["bit_mapping"]:
var bot = Stages.stages_info[current_stage]["bit_mapping"][bit_number]["bot"]
var movement = Stages.stages_info[current_stage]["bit_mapping"][bit_number]["movement"]
var in_flow = stages_info[current_stage]["bit_mapping"][bit_number]["flow_in"]
var out_flow = stages_info[current_stage]["bit_mapping"][bit_number]["flow_out"]
var in_flow = Stages.stages_info[current_stage]["bit_mapping"][bit_number]["flow_in"]
var out_flow = Stages.stages_info[current_stage]["bit_mapping"][bit_number]["flow_out"]
if (in_flow is not String):
var flow_control = load("res://Scenes/GUI/Controls/FlowControl.tscn").instantiate()
flow_control.position.y = flows_offset
@ -98,7 +88,7 @@ func reload_stage() -> void:
var row = load("res://Scenes/GUI/Controls/MovementRow.tscn").instantiate()
row.name = str(bit_number) + " Bit"
row.position.y = rows_offset
row.base_scene_path = "../../../../../" + stages_info[current_stage]["scene_ref_base"]
row.base_scene_path = "../../../../../" + Stages.stages_info[current_stage]["scene_ref_base"]
row.animatronic = bot
row.current_stage = current_stage
if (in_flow is String): row.flow_path = "None"
@ -108,7 +98,7 @@ func reload_stage() -> void:
var movement_button = load("res://Scenes/GUI/Controls/MovementButton.tscn").instantiate()
movement_button.position.y = rows_offset
movement_button.base_scene_path = "../../../../../" + stages_info[current_stage]["scene_ref_base"]
movement_button.base_scene_path = "../../../../../" + Stages.stages_info[current_stage]["scene_ref_base"]
movement_button.animatronic = bot
movement_button.movement_bit = bit_number
movement_button.current_stage = current_stage
@ -116,8 +106,8 @@ func reload_stage() -> void:
movement_button.movement_name = movement
$FlyoutPanel/Movements/InvisibleMask/MovementHandle.add_child(movement_button)
rows_offset += 44
$SequencerPanel/TimelinePanel/VScrollBar.max_value = stages_info[current_stage]["bits"] - 1
$FlyoutPanel/Movements/VScrollBar.max_value = stages_info[current_stage]["bits"] - 1
$SequencerPanel/TimelinePanel/VScrollBar.max_value = Stages.stages_info[current_stage]["bits"] - 1
$FlyoutPanel/Movements/VScrollBar.max_value = Stages.stages_info[current_stage]["bits"] - 1
$FlyoutPanel/FlowControls/VScrollBar.max_value = flow_count - 1
$CameraPreview.visible = true
@ -149,7 +139,9 @@ func _ready() -> void:
get_tree().get_root().size_changed.connect(_on_size_changed)
erase_all.connect(_erase_all)
$MenuBar/MenuButton.get_popup().id_pressed.connect(_showtape_menu_button_pressed)
OS.request_permissions()
for mod in Stages.loaded_mods:
for moddedStage in Stages.loaded_mods[mod]["implements_stages"]:
$MenuBar/StageSelector.add_item(moddedStage)
current_stage = $MenuBar/StageSelector.get_item_text($MenuBar/StageSelector.selected)
reload_stage()
@ -232,8 +224,8 @@ func _on_showtape_load_open_button_pressed() -> void:
$IncorrectShowtapeDialog.dialog_text = "This showtape is not the correct version!"
$IncorrectShowtapeDialog.show()
return
if (header[3] != stages_info[current_stage]["ust_type"]):
$IncorrectShowtapeDialog.dialog_text = "This showtape is not compatible with the currently selected stage.\nShowtape stage type: %s\n Current stage type: %s" % [ header[3], stages_info[current_stage]["ust_type"] ]
if (header[3] != Stages.stages_info[current_stage]["ust_type"]):
$IncorrectShowtapeDialog.dialog_text = "This showtape is not compatible with the currently selected stage.\nShowtape stage type: %s\n Current stage type: %s" % [ header[3], Stages.stages_info[current_stage]["ust_type"] ]
$IncorrectShowtapeDialog.show()
return
show_name = header[2]
@ -257,7 +249,7 @@ func _on_showtape_save_create_button_pressed() -> void:
if ($ShowtapeSaveScreen/DialogPanel/OutFilePath.text == ""):
$NoFileSpecified.show()
return
var header = "UST,2,"+show_name.replace(",", "_").replace(";", "_")+","+stages_info[current_stage]["ust_type"]+";"
var header = "UST,2,"+show_name.replace(",", "_").replace(";", "_")+","+Stages.stages_info[current_stage]["ust_type"]+";"
var data_out_string = save_data()
var file = FileAccess.open($ShowtapeSaveScreen/DialogPanel/OutFilePath.text, FileAccess.WRITE)
file.store_string(header+data_out_string+";"+Marshalls.raw_to_base64($AudioStreamPlayer.stream.data))
@ -273,34 +265,32 @@ func _on_save_showtape_file_dialog_file_selected(path: String) -> void:
$ShowtapeSaveScreen/DialogPanel/OutFilePath.text = path
func _input(event: InputEvent) -> void:
if event.is_action_pressed("toggle_editor_screen"):
if event.is_action_pressed("editor_toggle_full_camera"):
$CameraPreview.visible = !$CameraPreview.visible;
$CameraFullScreen.visible = !$CameraFullScreen.visible;
if event.is_action_pressed("fullscreen"):
if (!fullscreen):
fullscreen = true
if (!DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_FULLSCREEN):
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN)
else:
fullscreen = false
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
if (event.is_action_pressed("cycle_camera_angle")):
if (event.is_action_pressed("editor_cycle_camera_angle")):
cam_index += 1
get_node(stages_info[current_stage]["scene_ref_base"] + "Angle " + str((cam_index % stages_info[current_stage]["camera_count"])+1)).current = true
get_node(Stages.stages_info[current_stage]["scene_ref_base"] + "Angle " + str((cam_index % Stages.stages_info[current_stage]["camera_count"])+1)).current = true
if (transport_enabled):
if event.is_action_pressed("sequencer_play_pause"):
if event.is_action_pressed("editor_sequencer_play_pause"):
if (playing): _on_pause_button_pressed()
else: _on_play_button_pressed()
elif event.is_action_pressed("sequencer_play_reverse"):
elif event.is_action_pressed("editor_sequencer_play_reverse"):
_on_play_backwards_button_pressed()
elif event.is_action_pressed("sequencer_fast_reverse"):
elif event.is_action_pressed("editor_sequencer_fast_reverse"):
_on_fast_backwards_button_pressed()
elif event.is_action_pressed("sequencer_fast_forward"):
elif event.is_action_pressed("editor_sequencer_fast_forward"):
_on_fast_forward_button_pressed()
elif event.is_action_pressed("sequencer_step_backward"):
elif event.is_action_pressed("editor_sequencer_step_backward"):
_on_step_backwards_button_pressed()
elif event.is_action_pressed("sequencer_step_forward"):
elif event.is_action_pressed("editor_sequencer_step_forward"):
_on_step_forward_button_pressed()
elif event.is_action_pressed("sequencer_home"):
elif event.is_action_pressed("editor_sequencer_home"):
_on_stop_button_pressed()
func _physics_process(_delta: float) -> void:
@ -342,8 +332,6 @@ func _on_credits_button_pressed() -> void:
$CreditsScreen.visible = true
func _on_input_eater_pressed() -> void:
$ControlsScreen.visible = false
$CreditsScreen.visible = false
$ShowtapeNewScreen.visible = false
$ShowtapeLoadScreen.visible = false
$ShowtapeSaveScreen.visible = false
@ -478,7 +466,7 @@ func plot_data(data: String):
if (frame_string == ""): continue
var check_frame_split = frame_string.split()
check_frame_split.reverse()
for i in stages_info[current_stage]["bit_mapping"]:
for i in Stages.stages_info[current_stage]["bit_mapping"]:
var er = false
if ((check_frame_split[(i - 1) / 4].hex_to_int() & int(pow(2, ((i - 1) % 4)))) == int(pow(2, ((i - 1) % 4)))):
er = true
@ -512,3 +500,7 @@ func _on_exit_menu_overwrite_confirmation_dialog_confirmed() -> void:
func _on_exit_desktop_overwrite_confirmation_dialog_2_confirmed() -> void:
get_tree().quit()
func _on_instructions_label_pressed() -> void:
$InstructionsLabel.visible = false

View file

@ -1,5 +1,79 @@
extends Control
func _ready():
OS.request_permissions()
randomize()
$Backgrounds.get_child(randi() % $Backgrounds.get_child_count()).visible = true
var moddir = DirAccess.open("user://Mods")
if moddir == null:
print("Mod folder was not found. Creating.")
var temp = DirAccess.open("user://")
temp.make_dir("Mods")
moddir = DirAccess.open("user://Mods")
moddir.list_dir_begin()
for file: String in moddir.get_files():
if (!file.ends_with(".pck")): return
ProjectSettings.load_resource_pack("user://Mods/%s" % file, false)
var dir = DirAccess.open("res://LoadedModContent/ModManifest")
if dir == null:
print("No mods were found.")
return
dir.list_dir_begin()
var tempLoadedList = []
for file: String in dir.get_files():
var modManifest = load(dir.get_current_dir() + "/" + file.trim_suffix(".remap")).new()
if (Stages.loaded_mods.get(modManifest.ModInfo["mod_name"]) != null):
if (tempLoadedList.find(modManifest.ModInfo["mod_name"]) == -1):
$ModsScreen/DialogPanel/ModList.add_item(modManifest.ModInfo["mod_name"], null, true)
return
Stages.loaded_mods[modManifest.ModInfo["mod_name"]] = modManifest.ModInfo
for stage in modManifest.ModInfo["implements_stages"]:
Stages.stages_info[stage] = modManifest.ModInfo["implements_stages"][stage]
$ModsScreen/DialogPanel/ModList.add_item(modManifest.ModInfo["mod_name"], null, true)
tempLoadedList.append(modManifest.ModInfo["mod_name"])
print("Loaded Mod \"%s\"" % modManifest.ModInfo["mod_name"])
func _on_button_pressed() -> void:
get_tree().change_scene_to_file("res://Scenes/GUI/EditorScreen.tscn")
func _on_exit_button_pressed() -> void:
get_tree().quit()
func _on_credits_button_pressed() -> void:
$CreditsScreen.visible = true
func _on_controls_button_pressed() -> void:
$ControlsScreen.visible = true
func _on_free_roam_button_pressed() -> void:
$FreeRoamChooseScreen.visible = true
func _on_mods_button_pressed() -> void:
$ModsScreen.visible = true
func _on_input_eater_pressed() -> void:
$CreditsScreen.visible = false
$ControlsScreen.visible = false
$FreeRoamChooseScreen.visible = false
$ModsScreen.visible = false
func _input(event: InputEvent) -> void:
if event.is_action_pressed("fullscreen"):
if (!DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_FULLSCREEN):
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN)
else:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
func _on_mod_list_item_selected(index: int) -> void:
var itext = $ModsScreen/DialogPanel/ModList.get_item_text(index)
$ModsScreen/DialogPanel/ModNameText.text = Stages.loaded_mods[itext]["mod_name"]
$ModsScreen/DialogPanel/ModAuthorText.text = "by %s" % Stages.loaded_mods[itext]["mod_creator"]
$ModsScreen/DialogPanel/ModVersionText.text = "Mod version %s" % Stages.loaded_mods[itext]["mod_version"]
$ModsScreen/DialogPanel/ModDescriptionText.text = Stages.loaded_mods[itext]["mod_description"]
func _on_open_folder_button_pressed() -> void:
OS.shell_open(ProjectSettings.globalize_path("user://Mods"))
$PleaseRestart.show()

BIN
UI/MenuBG/BalconyBG.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 465 KiB

View file

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

BIN
UI/MenuBG/CStageBG.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 718 KiB

View file

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

BIN
UI/MenuBG/ProtoRoadBG.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 607 KiB

View file

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

View file

Before

Width:  |  Height:  |  Size: 362 B

After

Width:  |  Height:  |  Size: 362 B

Before After
Before After

View file

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dhx2v2fd0egxd"
path="res://.godot/imported/FastBackwards.png-f55ba91d8d237cb6919d5f2a056db594.ctex"
path="res://.godot/imported/FastBackwards.png-baafc41184f250c6fa4ffe3e374078aa.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://UI/FastBackwards.png"
dest_files=["res://.godot/imported/FastBackwards.png-f55ba91d8d237cb6919d5f2a056db594.ctex"]
source_file="res://UI/TransportControls/FastBackwards.png"
dest_files=["res://.godot/imported/FastBackwards.png-baafc41184f250c6fa4ffe3e374078aa.ctex"]
[params]

View file

Before

Width:  |  Height:  |  Size: 337 B

After

Width:  |  Height:  |  Size: 337 B

Before After
Before After

View file

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dsr03w7r667fw"
path="res://.godot/imported/FastForward.png-acbfeb2710bea5385ca8ad13fa6699e8.ctex"
path="res://.godot/imported/FastForward.png-fb55633376434284021e6fcb868d095e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://UI/FastForward.png"
dest_files=["res://.godot/imported/FastForward.png-acbfeb2710bea5385ca8ad13fa6699e8.ctex"]
source_file="res://UI/TransportControls/FastForward.png"
dest_files=["res://.godot/imported/FastForward.png-fb55633376434284021e6fcb868d095e.ctex"]
[params]

View file

Before

Width:  |  Height:  |  Size: 138 B

After

Width:  |  Height:  |  Size: 138 B

Before After
Before After

View file

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bwhgy4u37jmo1"
path="res://.godot/imported/Pause.png-90c47ed988bd7d26b746eb81a6aaeedf.ctex"
path="res://.godot/imported/Pause.png-6e00544a0fac9a91b2c20976bb7ce799.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://UI/Pause.png"
dest_files=["res://.godot/imported/Pause.png-90c47ed988bd7d26b746eb81a6aaeedf.ctex"]
source_file="res://UI/TransportControls/Pause.png"
dest_files=["res://.godot/imported/Pause.png-6e00544a0fac9a91b2c20976bb7ce799.ctex"]
[params]

View file

Before

Width:  |  Height:  |  Size: 346 B

After

Width:  |  Height:  |  Size: 346 B

Before After
Before After

View file

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://xllpr3qc064c"
path="res://.godot/imported/Play.png-eec0d54380d32c59b84e7db5fa226d5e.ctex"
path="res://.godot/imported/Play.png-afe759610dc1045a62cd8cc2e725ba25.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://UI/Play.png"
dest_files=["res://.godot/imported/Play.png-eec0d54380d32c59b84e7db5fa226d5e.ctex"]
source_file="res://UI/TransportControls/Play.png"
dest_files=["res://.godot/imported/Play.png-afe759610dc1045a62cd8cc2e725ba25.ctex"]
[params]

View file

Before

Width:  |  Height:  |  Size: 353 B

After

Width:  |  Height:  |  Size: 353 B

Before After
Before After

View file

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dgacnkv2dc65s"
path="res://.godot/imported/PlayBackwards.png-52f3d5b871717feab369f20308dd695c.ctex"
path="res://.godot/imported/PlayBackwards.png-fa19f96c52d7ee8953d0dc88bd9de225.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://UI/PlayBackwards.png"
dest_files=["res://.godot/imported/PlayBackwards.png-52f3d5b871717feab369f20308dd695c.ctex"]
source_file="res://UI/TransportControls/PlayBackwards.png"
dest_files=["res://.godot/imported/PlayBackwards.png-fa19f96c52d7ee8953d0dc88bd9de225.ctex"]
[params]

View file

Before

Width:  |  Height:  |  Size: 411 B

After

Width:  |  Height:  |  Size: 411 B

Before After
Before After

View file

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://ckg2ihy105ttj"
path="res://.godot/imported/Record.png-52d5a1455899304e32054af5c940c434.ctex"
path="res://.godot/imported/Record.png-feac6691f8b44c91b371c385fd49720a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://UI/Record.png"
dest_files=["res://.godot/imported/Record.png-52d5a1455899304e32054af5c940c434.ctex"]
source_file="res://UI/TransportControls/Record.png"
dest_files=["res://.godot/imported/Record.png-feac6691f8b44c91b371c385fd49720a.ctex"]
[params]

View file

Before

Width:  |  Height:  |  Size: 352 B

After

Width:  |  Height:  |  Size: 352 B

Before After
Before After

View file

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dts4eh6hyt8p3"
path="res://.godot/imported/SkipBackwards.png-dfebc48054bc60d9671fc8d69c696237.ctex"
path="res://.godot/imported/SkipBackwards.png-07ed2723ebfa991c5eb7dd5b04bbdcc5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://UI/SkipBackwards.png"
dest_files=["res://.godot/imported/SkipBackwards.png-dfebc48054bc60d9671fc8d69c696237.ctex"]
source_file="res://UI/TransportControls/SkipBackwards.png"
dest_files=["res://.godot/imported/SkipBackwards.png-07ed2723ebfa991c5eb7dd5b04bbdcc5.ctex"]
[params]

View file

Before

Width:  |  Height:  |  Size: 331 B

After

Width:  |  Height:  |  Size: 331 B

Before After
Before After

View file

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bphwtliq2ahus"
path="res://.godot/imported/SkipForward.png-ca36b20fa5c982368f6b620245865f56.ctex"
path="res://.godot/imported/SkipForward.png-d4be5716d356f8b0d5ac15243372a7e3.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://UI/SkipForward.png"
dest_files=["res://.godot/imported/SkipForward.png-ca36b20fa5c982368f6b620245865f56.ctex"]
source_file="res://UI/TransportControls/SkipForward.png"
dest_files=["res://.godot/imported/SkipForward.png-d4be5716d356f8b0d5ac15243372a7e3.ctex"]
[params]

View file

Before

Width:  |  Height:  |  Size: 138 B

After

Width:  |  Height:  |  Size: 138 B

Before After
Before After

View file

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://d007317123e27"
path="res://.godot/imported/SmallLock.png-0c9e5ce04a7421f0922124b2fb1d8696.ctex"
path="res://.godot/imported/SmallLock.png-c01b2981fa753e94bcf44ea7af0f5dc4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://UI/SmallLock.png"
dest_files=["res://.godot/imported/SmallLock.png-0c9e5ce04a7421f0922124b2fb1d8696.ctex"]
source_file="res://UI/TransportControls/SmallLock.png"
dest_files=["res://.godot/imported/SmallLock.png-c01b2981fa753e94bcf44ea7af0f5dc4.ctex"]
[params]

View file

Before

Width:  |  Height:  |  Size: 164 B

After

Width:  |  Height:  |  Size: 164 B

Before After
Before After

View file

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cn5xdrxdv622h"
path="res://.godot/imported/SmallX.png-fca237bd1b13d37241a1ac9e982c446b.ctex"
path="res://.godot/imported/SmallX.png-3e04f0094c67e8b6434dfe5dacc07c39.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://UI/SmallX.png"
dest_files=["res://.godot/imported/SmallX.png-fca237bd1b13d37241a1ac9e982c446b.ctex"]
source_file="res://UI/TransportControls/SmallX.png"
dest_files=["res://.godot/imported/SmallX.png-3e04f0094c67e8b6434dfe5dacc07c39.ctex"]
[params]

View file

Before

Width:  |  Height:  |  Size: 132 B

After

Width:  |  Height:  |  Size: 132 B

Before After
Before After

View file

@ -3,15 +3,15 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cttgtbu1xllwq"
path="res://.godot/imported/Stop.png-28cf49bd72d354d073c38f19027d6ddb.ctex"
path="res://.godot/imported/Stop.png-fb014661ae7c7c34a81ed967c5cf7ad4.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://UI/Stop.png"
dest_files=["res://.godot/imported/Stop.png-28cf49bd72d354d073c38f19027d6ddb.ctex"]
source_file="res://UI/TransportControls/Stop.png"
dest_files=["res://.godot/imported/Stop.png-fb014661ae7c7c34a81ed967c5cf7ad4.ctex"]
[params]

BIN
UI/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

34
UI/logo.png.import Normal file
View file

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

View file

@ -338,55 +338,55 @@ ui_swap_input_direction={
"deadzone": 0.5,
"events": []
}
toggle_editor_screen={
editor_toggle_full_camera={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":6,"pressure":0.0,"pressed":true,"script":null)
]
}
sequencer_play_pause={
editor_sequencer_play_pause={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":0,"pressure":0.0,"pressed":true,"script":null)
]
}
sequencer_play_reverse={
editor_sequencer_play_reverse={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":true,"script":null)
]
}
sequencer_fast_forward={
editor_sequencer_fast_forward={
"deadzone": 0.2,
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":5,"axis_value":1.0,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
sequencer_fast_reverse={
editor_sequencer_fast_reverse={
"deadzone": 0.2,
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":4,"axis_value":1.0,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
sequencer_step_forward={
editor_sequencer_step_forward={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":10,"pressure":0.0,"pressed":true,"script":null)
]
}
sequencer_step_backward={
editor_sequencer_step_backward={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":9,"pressure":0.0,"pressed":true,"script":null)
]
}
cycle_camera_angle={
editor_cycle_camera_angle={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194306,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":3,"pressure":0.0,"pressed":false,"script":null)
]
}
sequencer_home={
editor_sequencer_home={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194317,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":2,"pressure":0.0,"pressed":false,"script":null)
@ -401,8 +401,9 @@ fullscreen={
[rendering]
renderer/rendering_method="gl_compatibility"
renderer/rendering_method.mobile="gl_compatibility"
textures/vram_compression/import_etc2_astc=true
anti_aliasing/quality/msaa_3d=1
limits/opengl/max_renderable_lights=128
limits/opengl/max_lights_per_object=128
anti_aliasing/quality/screen_space_aa=1
anti_aliasing/quality/use_debanding=true