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:
parent
e71a64c690
commit
72b8578ece
37 changed files with 906 additions and 268 deletions
|
@ -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 = { }
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue