From 0a2f405b9077baa1ff774c2a96a875bc0e8cb8e3 Mon Sep 17 00:00:00 2001 From: MSLaFaver Date: Sun, 22 Mar 2026 03:18:16 -0400 Subject: [PATCH] Compatibility with BRML Neo --- .../StarPanda-ChallengePack/config.tscn | 139 ++++++++++++++ .../extensions/scripts/BurnerPhone.gd | 4 - .../extensions/scripts/DeathManager.gd | 9 - .../extensions/scripts/ItemManager.gd | 18 -- .../extensions/scripts/ShellExamine.gd | 4 - .../extensions/scripts/ShellLoader.gd | 140 -------------- .../extensions/scripts/ShellSpawner.gd | 41 ---- .../StarPanda-ChallengePack/manifest.json | 46 +++-- .../StarPanda-ChallengePack/mod_main.gd | 69 ++++--- .../patches/main-patch.gd | 18 +- .../patches/menu-patch.gd | 33 ---- .../StarPanda-ChallengePack/patches/patch.gd | 1 + .../scripts/DeathManager.gd | 11 ++ .../scripts/ItemManager.gd | 15 ++ .../scripts/ShellLoader.gd | 150 +++++++++++++++ .../scripts/ShellSpawner.gd | 48 +++++ .../util/CPButtonUtil.gd | 72 ------- .../util/CPGameOptionsMenuManager.gd | 179 ------------------ .../util/CPModConfig.gd | 23 --- .../StarPanda-ChallengePack/util/config.gd | 54 ++++++ 20 files changed, 497 insertions(+), 577 deletions(-) create mode 100644 mods-unpacked/StarPanda-ChallengePack/config.tscn delete mode 100644 mods-unpacked/StarPanda-ChallengePack/extensions/scripts/BurnerPhone.gd delete mode 100644 mods-unpacked/StarPanda-ChallengePack/extensions/scripts/DeathManager.gd delete mode 100644 mods-unpacked/StarPanda-ChallengePack/extensions/scripts/ItemManager.gd delete mode 100644 mods-unpacked/StarPanda-ChallengePack/extensions/scripts/ShellExamine.gd delete mode 100644 mods-unpacked/StarPanda-ChallengePack/extensions/scripts/ShellLoader.gd delete mode 100644 mods-unpacked/StarPanda-ChallengePack/extensions/scripts/ShellSpawner.gd delete mode 100644 mods-unpacked/StarPanda-ChallengePack/patches/menu-patch.gd create mode 100644 mods-unpacked/StarPanda-ChallengePack/scripts/DeathManager.gd create mode 100644 mods-unpacked/StarPanda-ChallengePack/scripts/ItemManager.gd create mode 100644 mods-unpacked/StarPanda-ChallengePack/scripts/ShellLoader.gd create mode 100644 mods-unpacked/StarPanda-ChallengePack/scripts/ShellSpawner.gd delete mode 100644 mods-unpacked/StarPanda-ChallengePack/util/CPButtonUtil.gd delete mode 100644 mods-unpacked/StarPanda-ChallengePack/util/CPGameOptionsMenuManager.gd delete mode 100644 mods-unpacked/StarPanda-ChallengePack/util/CPModConfig.gd create mode 100644 mods-unpacked/StarPanda-ChallengePack/util/config.gd diff --git a/mods-unpacked/StarPanda-ChallengePack/config.tscn b/mods-unpacked/StarPanda-ChallengePack/config.tscn new file mode 100644 index 0000000..7170682 --- /dev/null +++ b/mods-unpacked/StarPanda-ChallengePack/config.tscn @@ -0,0 +1,139 @@ +[gd_scene load_steps=4 format=3 uid="uid://c4t1e3midlfm3"] + +[ext_resource type="Script" path="res://mods-unpacked/StarPanda-ChallengePack/util/config.gd" id="1_ul10s"] +[ext_resource type="FontFile" uid="uid://vhj3kkn6yn8o" path="res://fonts/fake receipt.otf" id="7_7yqn7"] +[ext_resource type="Script" path="res://scripts/ButtonClass.gd" id="8_dan4x"] + +[node name="config" type="Control" node_paths=PackedStringArray("button_class_mode", "button_class_items", "button_class_shuffle", "button_class_turn")] +layout_mode = 3 +anchors_preset = 0 +offset_bottom = 40.0 +script = ExtResource("1_ul10s") +button_class_mode = NodePath("true button_challengepack_mode custom/button class_challengepack_mode custom") +button_class_items = NodePath("true button_challengepack_items custom/button class_challengepack_items custom") +button_class_shuffle = NodePath("true button_challengepack_shuffle custom/button class_challengepack_shuffle custom") +button_class_turn = NodePath("true button_challengepack_turn custom/button class_challengepack_turn custom") + +[node name="button_challengepack_mode custom" type="Label" parent="."] +layout_mode = 0 +offset_top = 165.0 +offset_right = 960.0 +offset_bottom = 204.0 +scale = Vector2(0.760005, 1) +pivot_offset = Vector2(480, 0) +theme_override_colors/font_shadow_color = Color(0, 0, 0, 1) +theme_override_fonts/font = ExtResource("7_7yqn7") +theme_override_font_sizes/font_size = 26 +text = "SHELL VISIBILITY: DEFAULT" +horizontal_alignment = 1 + +[node name="true button_challengepack_mode custom" type="Button" parent="."] +modulate = Color(1, 1, 1, 0) +self_modulate = Color(1, 1, 1, 0) +layout_mode = 0 +offset_left = 310.0 +offset_top = 170.0 +offset_right = 650.0 +offset_bottom = 193.0 + +[node name="button class_challengepack_mode custom" type="Node" parent="true button_challengepack_mode custom" node_paths=PackedStringArray("ui")] +script = ExtResource("8_dan4x") +alias = "challengepack_mode" +isActive = true +isDynamic = true +ui = NodePath("../../button_challengepack_mode custom") +playing = true +ui_opacity_active = 0.5 + +[node name="button_challengepack_items custom" type="Label" parent="."] +layout_mode = 0 +offset_top = 200.0 +offset_right = 960.0 +offset_bottom = 239.0 +scale = Vector2(0.760005, 1) +pivot_offset = Vector2(480, 0) +theme_override_colors/font_shadow_color = Color(0, 0, 0, 1) +theme_override_fonts/font = ExtResource("7_7yqn7") +theme_override_font_sizes/font_size = 26 +text = "ITEMS VISIBILITY: DEFAULT" +horizontal_alignment = 1 + +[node name="true button_challengepack_items custom" type="Button" parent="."] +modulate = Color(1, 1, 1, 0) +self_modulate = Color(1, 1, 1, 0) +layout_mode = 0 +offset_left = 312.0 +offset_top = 205.0 +offset_right = 651.0 +offset_bottom = 229.0 + +[node name="button class_challengepack_items custom" type="Node" parent="true button_challengepack_items custom" node_paths=PackedStringArray("ui")] +script = ExtResource("8_dan4x") +alias = "challengepack_items" +isActive = true +isDynamic = true +ui = NodePath("../../button_challengepack_items custom") +playing = true +ui_opacity_active = 0.5 + +[node name="button_challengepack_shuffle custom" type="Label" parent="."] +layout_mode = 0 +offset_top = 235.0 +offset_right = 960.0 +offset_bottom = 274.0 +scale = Vector2(0.760005, 1) +pivot_offset = Vector2(480, 0) +theme_override_colors/font_shadow_color = Color(0, 0, 0, 1) +theme_override_fonts/font = ExtResource("7_7yqn7") +theme_override_font_sizes/font_size = 26 +text = "SHUFFLE BULLETS: YES" +horizontal_alignment = 1 + +[node name="true button_challengepack_shuffle custom" type="Button" parent="."] +modulate = Color(1, 1, 1, 0) +self_modulate = Color(1, 1, 1, 0) +layout_mode = 0 +offset_left = 344.0 +offset_top = 240.0 +offset_right = 616.0 +offset_bottom = 263.0 + +[node name="button class_challengepack_shuffle custom" type="Node" parent="true button_challengepack_shuffle custom" node_paths=PackedStringArray("ui")] +script = ExtResource("8_dan4x") +alias = "challengepack_shuffle" +isActive = true +isDynamic = true +ui = NodePath("../../button_challengepack_shuffle custom") +playing = true +ui_opacity_active = 0.5 + +[node name="button_challengepack_turn custom" type="Label" parent="."] +layout_mode = 0 +offset_top = 305.0 +offset_right = 960.0 +offset_bottom = 344.0 +scale = Vector2(0.760005, 1) +pivot_offset = Vector2(480, 0) +theme_override_colors/font_shadow_color = Color(0, 0, 0, 1) +theme_override_fonts/font = ExtResource("7_7yqn7") +theme_override_font_sizes/font_size = 26 +text = "FIRST TURN: ALWAYS FIRST" +horizontal_alignment = 1 + +[node name="true button_challengepack_turn custom" type="Button" parent="."] +modulate = Color(1, 1, 1, 0) +self_modulate = Color(1, 1, 1, 0) +layout_mode = 0 +offset_left = 317.0 +offset_top = 310.0 +offset_right = 643.0 +offset_bottom = 333.0 + +[node name="button class_challengepack_turn custom" type="Node" parent="true button_challengepack_turn custom" node_paths=PackedStringArray("ui")] +script = ExtResource("8_dan4x") +alias = "challengepack_turn" +isActive = true +isDynamic = true +ui = NodePath("../../button_challengepack_turn custom") +playing = true +ui_opacity_active = 0.5 diff --git a/mods-unpacked/StarPanda-ChallengePack/extensions/scripts/BurnerPhone.gd b/mods-unpacked/StarPanda-ChallengePack/extensions/scripts/BurnerPhone.gd deleted file mode 100644 index 31cbe8e..0000000 --- a/mods-unpacked/StarPanda-ChallengePack/extensions/scripts/BurnerPhone.gd +++ /dev/null @@ -1,4 +0,0 @@ -extends "res://scripts/BurnerPhone.gd" - -# No additional code -# Extension added due to strange import errors when ShellSpawner is extended diff --git a/mods-unpacked/StarPanda-ChallengePack/extensions/scripts/DeathManager.gd b/mods-unpacked/StarPanda-ChallengePack/extensions/scripts/DeathManager.gd deleted file mode 100644 index f34a537..0000000 --- a/mods-unpacked/StarPanda-ChallengePack/extensions/scripts/DeathManager.gd +++ /dev/null @@ -1,9 +0,0 @@ -extends "res://scripts/DeathManager.gd" - -const STPND_CHALLENGEPACK_LOG := "StarPanda-ChallengePack:DeathManager" - -signal cp_death - -func MainDeathRoutine(): - await super() - cp_death.emit() diff --git a/mods-unpacked/StarPanda-ChallengePack/extensions/scripts/ItemManager.gd b/mods-unpacked/StarPanda-ChallengePack/extensions/scripts/ItemManager.gd deleted file mode 100644 index a936bb2..0000000 --- a/mods-unpacked/StarPanda-ChallengePack/extensions/scripts/ItemManager.gd +++ /dev/null @@ -1,18 +0,0 @@ -extends "res://scripts/ItemManager.gd" - -const STPND_CHALLENGEPACK_LOG := "StarPanda-ChallengePack:ItemManager" - -signal cp_steal_start -signal cp_steal_end - -func SetupItemSteal(): - await super() - cp_steal_start.emit() - -func RevertItemSteal(): - await super() - cp_steal_end.emit() - -func RevertItemSteal_Timeout(): - await super() - cp_steal_end.emit() diff --git a/mods-unpacked/StarPanda-ChallengePack/extensions/scripts/ShellExamine.gd b/mods-unpacked/StarPanda-ChallengePack/extensions/scripts/ShellExamine.gd deleted file mode 100644 index 4c88c44..0000000 --- a/mods-unpacked/StarPanda-ChallengePack/extensions/scripts/ShellExamine.gd +++ /dev/null @@ -1,4 +0,0 @@ -extends "res://scripts/ShellExamine.gd" - -# No additional code -# Extension added due to strange import errors when ShellSpawner is extended diff --git a/mods-unpacked/StarPanda-ChallengePack/extensions/scripts/ShellLoader.gd b/mods-unpacked/StarPanda-ChallengePack/extensions/scripts/ShellLoader.gd deleted file mode 100644 index 3852e3c..0000000 --- a/mods-unpacked/StarPanda-ChallengePack/extensions/scripts/ShellLoader.gd +++ /dev/null @@ -1,140 +0,0 @@ -extends "res://scripts/ShellLoader.gd" - -const CPGameConfig = preload("res://mods-unpacked/StarPanda-ChallengePack/util/CPGameConfig.gd") - -var modePhrases := { - CPGameConfig.GameMode.QUANTITY: ["Some of them are live.", "Now this is a real game."], - CPGameConfig.GameMode.HIDDEN: ["You won't know their real number.", "Now this is a real game."] -} -var dealerFirstMessageShown := false -var rnd = RandomNumberGenerator.new() -var lastTurn := 1 - -func LoadShells(): - var current_mode = ProjectSettings.get_setting("challengepack_mode", 0) - - # ORIGINAL CODE - camera.BeginLerp("enemy") - if (!roundManager.shellLoadingSpedUp): await get_tree().create_timer(.8, false).timeout - await(DealerHandsGrabShotgun()) - await get_tree().create_timer(.2, false).timeout - animator_shotgun.play("grab shotgun_pointing enemy") - await get_tree().create_timer(.45, false).timeout - # END ORIGINAL CODE - - _cpIntroductionPhrases(current_mode) - - # ORIGINAL CODE - var numberOfShells = roundManager.roundArray[roundManager.currentRound].amountBlank + roundManager.roundArray[roundManager.currentRound].amountLive - # END ORIGINAL CODE - if (current_mode == CPGameConfig.GameMode.HIDDEN): - numberOfShells = 8 - - # ORIGINAL CODE - for i in range(numberOfShells): - speaker_loadShell.play() - animator_dealerHandRight.play("load single shell") - if(roundManager.shellLoadingSpedUp): await get_tree().create_timer(.17, false).timeout - else: await get_tree().create_timer(.32, false).timeout - pass - animator_dealerHandRight.play("RESET") - dealerAI.Speaker_HandCrack() - if (roundManager.shellLoadingSpedUp): await get_tree().create_timer(.17, false).timeout - else: await get_tree().create_timer(.42, false).timeout - #INTRODUCTION DIALOGUE - if (roundManager.roundArray[roundManager.currentRound].hasIntroductoryText): - dialogue.ShowText_Forever(introductionDialogues[0]) - await get_tree().create_timer(1.9, false).timeout - dialogue.ShowText_Forever(introductionDialogues[1]) - await get_tree().create_timer(3, false).timeout - dialogue.ShowText_Forever(introductionDialogues[2]) - await get_tree().create_timer(3, false).timeout - dialogue.ShowText_Forever(introductionDialogues[3]) - await get_tree().create_timer(3, false).timeout - dialogue.ShowText_Forever(introductionDialogues[4]) - await get_tree().create_timer(3, false).timeout - dialogue.ShowText_Forever(introductionDialogues[5]) - await get_tree().create_timer(3.7, false).timeout - dialogue.ShowText_Forever(introductionDialogues[6]) - await get_tree().create_timer(3.7, false).timeout - dialogue.ShowText_Forever(introductionDialogues[7]) - await get_tree().create_timer(3.7, false).timeout - dialogue.ShowText_Forever(introductionDialogues[8]) - await get_tree().create_timer(2.5, false).timeout - roundManager.playerData.hasReadIntroduction = true - dialogue.HideText() - #RACK SHOTGUN, PLACE ON TABLE - #speaker_rackShotgun.play() - animator_shotgun.play("enemy rack shotgun start") - await get_tree().create_timer(.8, false).timeout - animator_shotgun.play("enemy put down shotgun") - DealerHandsDropShotgun() - # END ORIGINAL CODE - - _cpResolveNextTurn() - -func _cpIntroductionPhrases(current_mode: int): - if (current_mode == CPGameConfig.GameMode.DEFAULT): - # ORIGINAL CODE (from LoadShells) - if (roundManager.playerData.numberOfDialogueRead < 3): - if (diaindex == loadingDialogues.size()): - diaindex = 0 - var stringshow - if (diaindex == 0): stringshow = tr("SHELL INSERT1") - if (diaindex == 1): stringshow = tr("SHELL INSERT2") - dialogue.ShowText_ForDuration(stringshow, 3) - diaindex += 1 - await get_tree().create_timer(3, false).timeout - roundManager.playerData.numberOfDialogueRead += 1 - # END ORIGINAL CODE - return - - var phrases = modePhrases[current_mode] - var phrasesAmount = phrases.size() - - # TODO: Replace 3 with actual phrase amount - if (roundManager.playerData.numberOfDialogueRead < 3): - if (diaindex == phrasesAmount): - diaindex = 0 - dialogue.ShowText_ForDuration(phrases[diaindex], 3) - diaindex += 1 - await get_tree().create_timer(3, false).timeout - roundManager.playerData.numberOfDialogueRead += 1 - -func _cpResolveNextTurn(): - var turn_mode = ProjectSettings.get_setting("challengepack_turn", 0) - if (turn_mode == CPGameConfig.TurnMode.ALWAYS_FIRST): - await _cpTurnPlayer() - return - - var next_turn = 1 if (lastTurn == 0) else 0 - if (turn_mode == CPGameConfig.TurnMode.RANDOM): - next_turn = rnd.randi_range(0, 1) - - if (next_turn == 0): - await _cpTurnPlayer() - else: - await _cpTurnDealer() - lastTurn = next_turn - -func _cpTurnPlayer() -> void: - # ORIGINAL CODE (from LoadShells) - camera.BeginLerp("home") - #ALLOW INTERACTION - roundManager.playerCurrentTurnItemArray = [] - await get_tree().create_timer(.6, false).timeout - perm.SetStackInvalidIndicators() - cursor.SetCursor(true, true) - perm.SetIndicators(true) - perm.SetInteractionPermissions(true) - roundManager.SetupDeskUI() - # END ORIGINAL CODE - -func _cpTurnDealer() -> void: - await get_tree().create_timer(.6, false).timeout - if (!dealerFirstMessageShown): - dialogue.ShowText_Forever("I'll be the first") - await get_tree().create_timer(1.9, false).timeout - dialogue.HideText() - dealerFirstMessageShown = true - dealerAI.BeginDealerTurn() diff --git a/mods-unpacked/StarPanda-ChallengePack/extensions/scripts/ShellSpawner.gd b/mods-unpacked/StarPanda-ChallengePack/extensions/scripts/ShellSpawner.gd deleted file mode 100644 index 2267aab..0000000 --- a/mods-unpacked/StarPanda-ChallengePack/extensions/scripts/ShellSpawner.gd +++ /dev/null @@ -1,41 +0,0 @@ -extends "res://scripts/ShellSpawner.gd" - -const CPGameConfig = preload("res://mods-unpacked/StarPanda-ChallengePack/util/CPGameConfig.gd") - -func SpawnShells(numberOfShells : int, numberOfLives : int, numberOfBlanks : int, shufflingArray : bool): - var current_mode = ProjectSettings.get_setting("challengepack_mode", 0) - var shuffle_mode = ProjectSettings.get_setting("challengepack_shuffle", 0) - var needShuffle = shufflingArray if (shuffle_mode == CPGameConfig.ShuffleMode.YES) else false; - - super(numberOfShells, numberOfLives, numberOfBlanks, needShuffle) - - if (current_mode != CPGameConfig.GameMode.DEFAULT): - roundManager.playerData.skippingShellDescription = true - if (current_mode == CPGameConfig.GameMode.QUANTITY): - _cpRecolorShells() - -func MainShellRoutine(): - var shuffleRound = roundManager.roundArray[roundManager.currentRound].insertingInRandomOrder - var shuffle_mode = ProjectSettings.get_setting("challengepack_shuffle", 0) - var needShuffle = shuffleRound if (shuffle_mode == CPGameConfig.ShuffleMode.YES) else false; - - if not needShuffle: - roundManager.roundArray[roundManager.currentRound].insertingInRandomOrder = false - await super() - -func PlayLatchSound(): - var current_mode = ProjectSettings.get_setting("challengepack_mode", 0) - if (current_mode == CPGameConfig.GameMode.HIDDEN): - return - super() - -func PlayAudioIndicators(): - var current_mode = ProjectSettings.get_setting("challengepack_mode", 0) - if (current_mode == CPGameConfig.GameMode.HIDDEN): - return - await super() - -func _cpRecolorShells(): - for shell in spawnedShellObjectArray: - var branch = shell.get_child(0) - branch.mesh.set_surface_override_material(1, branch.mat_blank) diff --git a/mods-unpacked/StarPanda-ChallengePack/manifest.json b/mods-unpacked/StarPanda-ChallengePack/manifest.json index a97efbb..4b06baa 100644 --- a/mods-unpacked/StarPanda-ChallengePack/manifest.json +++ b/mods-unpacked/StarPanda-ChallengePack/manifest.json @@ -1,21 +1,29 @@ { - "name": "ChallengePack", - "namespace": "StarPanda", - "version_number": "1.4.2", - "description": "No mercy, now game become very dangerous! Test your luck dancing on the edge of life and death!", - "website_url": "https://github.com/StarPandaBeg/ChallengePack", - "dependencies": [], - "extra": { - "godot": { - "compatible_mod_loader_version": ["4.0.0"], - "compatible_game_version": ["1.2.0", "1.2.1", "1.2.2"], - "authors": ["StarPanda"], - "tags": [], - "description_rich": "", - "optional_dependencies": [], - "load_before": [], - "incompatibilities": [], - "config_schema": {} - } - } + "name": "ChallengePack", + "namespace": "StarPanda", + "version_number": "1.4.2", + "description": "No mercy. The game is now very dangerous! Test your luck dancing on the edge of life and death!", + "website_url": "https://github.com/StarPandaBeg/ChallengePack", + "dependencies": ["MSLaFaver-ModMenu"], + "extra": { + "godot": { + "compatible_mod_loader_version": ["7.0.1"], + "compatible_game_version": ["1.2.2", "2.2.0"], + "authors": ["StarPanda"], + "tags": [], + "description_rich": "", + "optional_dependencies": [], + "load_before": [], + "incompatibilities": [], + "config_schema": { + "type": "object", + "properties": { + "unused": { + "type": "boolean", + "default": false + } + } + } + } + } } diff --git a/mods-unpacked/StarPanda-ChallengePack/mod_main.gd b/mods-unpacked/StarPanda-ChallengePack/mod_main.gd index f9da015..7a5edb0 100644 --- a/mods-unpacked/StarPanda-ChallengePack/mod_main.gd +++ b/mods-unpacked/StarPanda-ChallengePack/mod_main.gd @@ -1,24 +1,44 @@ extends Node +const id = "StarPanda-ChallengePack" const STPND_CHALLENGEPACK_LOG := "StarPanda-ChallengePack:Main" -const CPModConfig = preload("./util/CPModConfig.gd") +const CPGameConfig = preload("res://mods-unpacked/StarPanda-ChallengePack/util/CPGameConfig.gd") -var mod_dir_path := "" -var patches_dir_path := "" +const hooks = [ + "scripts/DeathManager.gd", + "scripts/ItemManager.gd", + "scripts/ShellSpawner.gd", + "scripts/ShellLoader.gd" +] var patches := {} var last_scene := "" +var config_data + +signal cp_death +signal cp_steal_start +signal cp_steal_end + +var config_defaults = { + "mode": CPGameConfig.GameMode.DEFAULT, + "items": CPGameConfig.ItemMode.DEFAULT, + "shuffle": CPGameConfig.ShuffleMode.YES, + "turn": CPGameConfig.TurnMode.ALWAYS_FIRST +} func _init() -> void: ModLoaderLog.debug("Init phase started", STPND_CHALLENGEPACK_LOG) - mod_dir_path = CPModConfig.get_root_path() randomize() - add_extensions() + + for hook in hooks: + ModLoaderMod.install_script_hooks("res://%s" % hook, + "res://mods-unpacked/%s/%s" % [id, hook]) + add_patches() ModLoaderLog.debug("Init phase finished", STPND_CHALLENGEPACK_LOG) func add_patches() -> void: - patches_dir_path = mod_dir_path + "/patches" + var patches_dir_path = "res://mods-unpacked/%s/patches" % id var dir = DirAccess.open(patches_dir_path) for file in dir.get_files(): @@ -31,34 +51,29 @@ func add_patches() -> void: if !(patches.has(obj.getSceneName())): patches[obj.getSceneName()] = [] patches[obj.getSceneName()].append(obj) - -func add_extensions() -> void: - ModLoaderMod.install_script_extension(mod_dir_path+"/extensions/scripts/DeathManager.gd") - ModLoaderMod.install_script_extension(mod_dir_path+"/extensions/scripts/ItemManager.gd") - ModLoaderMod.install_script_extension(mod_dir_path+"/extensions/scripts/BurnerPhone.gd") - ModLoaderMod.install_script_extension(mod_dir_path+"/extensions/scripts/ShellExamine.gd") - ModLoaderMod.install_script_extension(mod_dir_path+"/extensions/scripts/ShellSpawner.gd") - ModLoaderMod.install_script_extension(mod_dir_path+"/extensions/scripts/ShellLoader.gd") func _ready() -> void: + ModLoader.get_node("MSLaFaver-ModMenu").config_init(id, config_defaults) + ModLoaderLog.info("Mod Ready!", STPND_CHALLENGEPACK_LOG) -func _process(delta): +func apply_patches(): var scene := get_scene_name() - if (!scene): - return - if !(patches.has(scene.name)): - return + if scene and patches.has(scene.name): + var repeated = (last_scene == scene.name) + last_scene = scene.name - var repeated = (last_scene == scene.name) - last_scene = scene.name - - if (!repeated): - ModLoaderLog.debug("Scene loaded: " + last_scene, STPND_CHALLENGEPACK_LOG) + if (!repeated): + ModLoaderLog.debug("Scene loaded: " + last_scene, STPND_CHALLENGEPACK_LOG) + + var config = ModLoaderConfig.get_config(id, "user") + if config != null: + config_data = config.data - var patchArr = patches[scene.name] - for patch in patchArr: - patch.apply(scene, repeated) + var patchArr = patches[scene.name] + for patch in patchArr: + patch.mod_main = self + patch.apply(scene, repeated) func get_scene_name() -> Node: return get_tree().current_scene; diff --git a/mods-unpacked/StarPanda-ChallengePack/patches/main-patch.gd b/mods-unpacked/StarPanda-ChallengePack/patches/main-patch.gd index f81f09a..3756d55 100644 --- a/mods-unpacked/StarPanda-ChallengePack/patches/main-patch.gd +++ b/mods-unpacked/StarPanda-ChallengePack/patches/main-patch.gd @@ -1,7 +1,8 @@ -extends "./patch.gd" +extends "res://mods-unpacked/StarPanda-ChallengePack/patches/patch.gd" +const id = "StarPanda-ChallengePack" const STPND_CHALLENGEPACK_LOG := "StarPanda-ChallengePack:MainPatch" -const CPGameConfig = preload("../util/CPGameConfig.gd") +const CPGameConfig = preload("res://mods-unpacked/StarPanda-ChallengePack/util/CPGameConfig.gd") var applied_main = false @@ -23,14 +24,15 @@ func _apply(root: Node): return true func _spawn_protectors(root: Node): - var item_mode = ProjectSettings.get_setting("challengepack_item", 0) + var item_mode = mod_main.config_data.items if (item_mode != CPGameConfig.ItemMode.HIDDEN): return var parent = root.get_node("tabletop parent/main tabletop") - var protector = preload("../instances/protector.tscn") + var protector = preload("res://mods-unpacked/StarPanda-ChallengePack/instances/protector.tscn") var protectorObj = protector.instantiate() + protectorObj.position = Vector3(0.14, -0.04, 0.0) parent.add_child(protectorObj) ModLoaderLog.debug("Item covers instantiated", STPND_CHALLENGEPACK_LOG) @@ -38,13 +40,13 @@ func _spawn_protectors(root: Node): func _register_death_listener(root: Node): var deathManager = root.get_node("standalone managers/death manager") - deathManager.connect("cp_death", _on_deathmanager_death) + mod_main.connect("cp_death", _on_deathmanager_death) ModLoaderLog.debug("Death signal connected", STPND_CHALLENGEPACK_LOG) func _register_item_steal_listener(root: Node): var itemManager = root.get_node("standalone managers/item manager") - itemManager.connect("cp_steal_start", func(): _on_itemmanager_steal_start(root)) - itemManager.connect("cp_steal_end", func(): _on_itemmanager_steal_end(root)) + mod_main.connect("cp_steal_start", func(): _on_itemmanager_steal_start(root)) + mod_main.connect("cp_steal_end", func(): _on_itemmanager_steal_end(root)) ModLoaderLog.debug("Item steal signal connected", STPND_CHALLENGEPACK_LOG) func _replace_shell_animations(root: Node): @@ -52,7 +54,7 @@ func _replace_shell_animations(root: Node): var animationPlayer = shellSpawner.anim_compartment var animationLibrary = animationPlayer.get_animation_library("") - var currentMode = ProjectSettings.get_setting("challengepack_mode", 0) + var currentMode = mod_main.config_data.mode if (currentMode != CPGameConfig.GameMode.HIDDEN): if (animationLibrary.has_animation("show shells blocked")): animationLibrary.rename_animation("show shells blocked", "show shells") diff --git a/mods-unpacked/StarPanda-ChallengePack/patches/menu-patch.gd b/mods-unpacked/StarPanda-ChallengePack/patches/menu-patch.gd deleted file mode 100644 index 51a690b..0000000 --- a/mods-unpacked/StarPanda-ChallengePack/patches/menu-patch.gd +++ /dev/null @@ -1,33 +0,0 @@ -extends "./patch.gd" - -const CPGameOptionsMenuManager = preload("../util/CPGameOptionsMenuManager.gd") -const STPND_CHALLENGEPACK_LOG := "StarPanda-ChallengePack:MenuPatch" - -var manager: CPGameOptionsMenuManager - -func _init(): - scene_name = "menu" - -func _apply(root: Node): - ModLoaderLog.debug("Apply phase started", STPND_CHALLENGEPACK_LOG) - self.manager = _create_custom_manager(root) - ModLoaderLog.debug("Custom menu created", STPND_CHALLENGEPACK_LOG) - - var menu_manager = root.get_node("standalone managers/menu manager") - var mod_manager = self.manager - - menu_manager.buttons[0].disconnect("is_pressed", menu_manager.Start); - menu_manager.buttons[0].connect("is_pressed", _on_custom_start_click) - ModLoaderLog.debug("Start button rebind successfull", STPND_CHALLENGEPACK_LOG) - ModLoaderLog.debug("Apply phase finished", STPND_CHALLENGEPACK_LOG) - return true - -func _on_custom_start_click(): - ModLoaderLog.debug("Trying to show mod menu", STPND_CHALLENGEPACK_LOG) - self.manager.show() - -func _create_custom_manager(root: Node): - var parent = root.get_node("standalone managers") - var manager = CPGameOptionsMenuManager.new(root) - parent.add_child(manager) - return manager diff --git a/mods-unpacked/StarPanda-ChallengePack/patches/patch.gd b/mods-unpacked/StarPanda-ChallengePack/patches/patch.gd index 6bc780d..91f0ca3 100644 --- a/mods-unpacked/StarPanda-ChallengePack/patches/patch.gd +++ b/mods-unpacked/StarPanda-ChallengePack/patches/patch.gd @@ -1,5 +1,6 @@ class_name ScenePatch +var mod_main var scene_name: String = "" var applied: bool = false var repeatable: bool = false diff --git a/mods-unpacked/StarPanda-ChallengePack/scripts/DeathManager.gd b/mods-unpacked/StarPanda-ChallengePack/scripts/DeathManager.gd new file mode 100644 index 0000000..9cc3d71 --- /dev/null +++ b/mods-unpacked/StarPanda-ChallengePack/scripts/DeathManager.gd @@ -0,0 +1,11 @@ +extends Object + +const id = "StarPanda-ChallengePack" + +func _ready(chain: ModLoaderHookChain): + chain.execute_next_async() + ModLoader.get_node(id).apply_patches() + +func MainDeathRoutine(chain: ModLoaderHookChain): + chain.execute_next_async() + ModLoader.get_node(id).cp_death.emit() diff --git a/mods-unpacked/StarPanda-ChallengePack/scripts/ItemManager.gd b/mods-unpacked/StarPanda-ChallengePack/scripts/ItemManager.gd new file mode 100644 index 0000000..05e5e41 --- /dev/null +++ b/mods-unpacked/StarPanda-ChallengePack/scripts/ItemManager.gd @@ -0,0 +1,15 @@ +extends Object + +const id = "StarPanda-ChallengePack" + +func SetupItemSteal(chain: ModLoaderHookChain): + chain.execute_next_async() + ModLoader.get_node(id).cp_steal_start.emit() + +func RevertItemSteal(chain: ModLoaderHookChain): + chain.execute_next_async() + ModLoader.get_node(id).cp_steal_end.emit() + +func RevertItemSteal_Timeout(chain: ModLoaderHookChain): + chain.execute_next_async() + ModLoader.get_node(id).cp_steal_end.emit() diff --git a/mods-unpacked/StarPanda-ChallengePack/scripts/ShellLoader.gd b/mods-unpacked/StarPanda-ChallengePack/scripts/ShellLoader.gd new file mode 100644 index 0000000..e6f8a64 --- /dev/null +++ b/mods-unpacked/StarPanda-ChallengePack/scripts/ShellLoader.gd @@ -0,0 +1,150 @@ +extends Object + +const id = "StarPanda-ChallengePack" +const CPGameConfig = preload("res://mods-unpacked/StarPanda-ChallengePack/util/CPGameConfig.gd") + +var modePhrases := { + CPGameConfig.GameMode.QUANTITY: ["Some of them are live.", "Now this is a real game."], + CPGameConfig.GameMode.HIDDEN: ["You won't know their real number.", "Now this is a real game."] +} +var dealerFirstMessageShown := false +var rnd = RandomNumberGenerator.new() +var lastTurn := 1 + +func LoadShells(chain: ModLoaderHookChain): + var shellLoader = chain.reference_object + + var current_mode = ModLoader.get_node(id).config_data.mode + + # ORIGINAL CODE + shellLoader.camera.BeginLerp("enemy") + if (not shellLoader.roundManager.shellLoadingSpedUp): + await shellLoader.get_tree().create_timer(.8, false).timeout + await(shellLoader.DealerHandsGrabShotgun()) + await shellLoader.get_tree().create_timer(.2, false).timeout + shellLoader.animator_shotgun.play("grab shotgun_pointing enemy") + await shellLoader.get_tree().create_timer(.45, false).timeout + # END ORIGINAL CODE + + await _cpIntroductionPhrases(shellLoader, current_mode) + + # ORIGINAL CODE + var numberOfShells = shellLoader.roundManager.roundArray[shellLoader.roundManager.currentRound].amountBlank \ + + shellLoader.roundManager.roundArray[shellLoader.roundManager.currentRound].amountLive + # END ORIGINAL CODE + if (current_mode == CPGameConfig.GameMode.HIDDEN): + numberOfShells = 8 + + # ORIGINAL CODE + for i in range(numberOfShells): + shellLoader.speaker_loadShell.play() + shellLoader.animator_dealerHandRight.play("load single shell") + if(shellLoader.roundManager.shellLoadingSpedUp): + await shellLoader.get_tree().create_timer(.17, false).timeout + else: + await shellLoader.get_tree().create_timer(.32, false).timeout + shellLoader.animator_dealerHandRight.play("RESET") + shellLoader.dealerAI.Speaker_HandCrack() + if (shellLoader.roundManager.shellLoadingSpedUp): + await shellLoader.get_tree().create_timer(.17, false).timeout + else: + await shellLoader.get_tree().create_timer(.42, false).timeout + #INTRODUCTION DIALOGUE + if (shellLoader.roundManager.roundArray[shellLoader.roundManager.currentRound].hasIntroductoryText): + shellLoader.dialogue.ShowText_Forever(shellLoader.introductionDialogues[0]) + await shellLoader.get_tree().create_timer(1.9, false).timeout + shellLoader.dialogue.ShowText_Forever(shellLoader.introductionDialogues[1]) + await shellLoader.get_tree().create_timer(3, false).timeout + shellLoader.dialogue.ShowText_Forever(shellLoader.introductionDialogues[2]) + await shellLoader.get_tree().create_timer(3, false).timeout + shellLoader.dialogue.ShowText_Forever(shellLoader.introductionDialogues[3]) + await shellLoader.get_tree().create_timer(3, false).timeout + shellLoader.dialogue.ShowText_Forever(shellLoader.introductionDialogues[4]) + await shellLoader.get_tree().create_timer(3, false).timeout + shellLoader.dialogue.ShowText_Forever(shellLoader.introductionDialogues[5]) + await shellLoader.get_tree().create_timer(3.7, false).timeout + shellLoader.dialogue.ShowText_Forever(shellLoader.introductionDialogues[6]) + await shellLoader.get_tree().create_timer(3.7, false).timeout + shellLoader.dialogue.ShowText_Forever(shellLoader.introductionDialogues[7]) + await shellLoader.get_tree().create_timer(3.7, false).timeout + shellLoader.dialogue.ShowText_Forever(shellLoader.introductionDialogues[8]) + await shellLoader.get_tree().create_timer(2.5, false).timeout + shellLoader.roundManager.playerData.hasReadIntroduction = true + shellLoader.dialogue.HideText() + #RACK SHOTGUN, PLACE ON TABLE + #speaker_rackShotgun.play() + shellLoader.animator_shotgun.play("enemy rack shotgun start") + await shellLoader.get_tree().create_timer(.8, false).timeout + shellLoader.animator_shotgun.play("enemy put down shotgun") + shellLoader.DealerHandsDropShotgun() + # END ORIGINAL CODE + + _cpResolveNextTurn(shellLoader) + +func _cpIntroductionPhrases(shellLoader: ShellLoader, current_mode: int): + if (current_mode == CPGameConfig.GameMode.DEFAULT): + # ORIGINAL CODE (from LoadShells) + if (shellLoader.roundManager.playerData.numberOfDialogueRead < 3): + if (shellLoader.diaindex == shellLoader.loadingDialogues.size()): + shellLoader.diaindex = 0 + var stringshow + if (shellLoader.diaindex == 0): + stringshow = tr("SHELL INSERT1") + if (shellLoader.diaindex == 1): + stringshow = tr("SHELL INSERT2") + shellLoader.dialogue.ShowText_ForDuration(stringshow, 3) + shellLoader.diaindex += 1 + await shellLoader.get_tree().create_timer(3, false).timeout + shellLoader.roundManager.playerData.numberOfDialogueRead += 1 + # END ORIGINAL CODE + return + + var phrases = modePhrases[current_mode] + var phrasesAmount = phrases.size() + + # TODO: Replace 3 with actual phrase amount + if (shellLoader.roundManager.playerData.numberOfDialogueRead < 3): + if (shellLoader.diaindex == phrasesAmount): + shellLoader.diaindex = 0 + shellLoader.dialogue.ShowText_ForDuration(phrases[shellLoader.diaindex], 3) + shellLoader.diaindex += 1 + await shellLoader.get_tree().create_timer(3, false).timeout + shellLoader.roundManager.playerData.numberOfDialogueRead += 1 + +func _cpResolveNextTurn(shellLoader: ShellLoader): + var turn_mode = ModLoader.get_node(id).config_data.turn + if (turn_mode == CPGameConfig.TurnMode.ALWAYS_FIRST): + await _cpTurnPlayer(shellLoader) + return + + var next_turn = 1 if (lastTurn == 0) else 0 + if (turn_mode == CPGameConfig.TurnMode.RANDOM): + next_turn = rnd.randi_range(0, 1) + + if (next_turn == 0): + await _cpTurnPlayer(shellLoader) + else: + await _cpTurnDealer(shellLoader) + lastTurn = next_turn + +func _cpTurnPlayer(shellLoader: ShellLoader) -> void: + # ORIGINAL CODE (from LoadShells) + shellLoader.camera.BeginLerp("home") + #ALLOW INTERACTION + shellLoader.roundManager.playerCurrentTurnItemArray = [] + await shellLoader.get_tree().create_timer(.6, false).timeout + shellLoader.perm.SetStackInvalidIndicators() + shellLoader.cursor.SetCursor(true, true) + shellLoader.perm.SetIndicators(true) + shellLoader.perm.SetInteractionPermissions(true) + shellLoader.roundManager.SetupDeskUI() + # END ORIGINAL CODE + +func _cpTurnDealer(shellLoader: ShellLoader) -> void: + await shellLoader.get_tree().create_timer(.6, false).timeout + if (not dealerFirstMessageShown): + shellLoader.dialogue.ShowText_Forever("I'll be the first") + await shellLoader.get_tree().create_timer(1.9, false).timeout + shellLoader.dialogue.HideText() + dealerFirstMessageShown = true + shellLoader.dealerAI.BeginDealerTurn() diff --git a/mods-unpacked/StarPanda-ChallengePack/scripts/ShellSpawner.gd b/mods-unpacked/StarPanda-ChallengePack/scripts/ShellSpawner.gd new file mode 100644 index 0000000..97a03bb --- /dev/null +++ b/mods-unpacked/StarPanda-ChallengePack/scripts/ShellSpawner.gd @@ -0,0 +1,48 @@ +extends Object + +const id = "StarPanda-ChallengePack" +const CPGameConfig = preload("res://mods-unpacked/StarPanda-ChallengePack/util/CPGameConfig.gd") + +func SpawnShells(chain: ModLoaderHookChain, numberOfShells : int, numberOfLives : int, numberOfBlanks : int, shufflingArray : bool): + var shellSpawner = chain.reference_object + + var config_data = ModLoader.get_node(id).config_data + + var current_mode = config_data.mode + var shuffle_mode = config_data.shuffle + var needShuffle = shufflingArray if (shuffle_mode == CPGameConfig.ShuffleMode.YES) else false; + + chain.execute_next_async([numberOfShells, numberOfLives, numberOfBlanks, needShuffle]) + + if (current_mode != CPGameConfig.GameMode.DEFAULT): + shellSpawner.roundManager.playerData.skippingShellDescription = true + if (current_mode == CPGameConfig.GameMode.QUANTITY): + _cpRecolorShells(shellSpawner.spawnedShellObjectArray) + +func MainShellRoutine(chain: ModLoaderHookChain): + var shellSpawner = chain.reference_object + + var shuffleRound = shellSpawner.roundManager.roundArray[shellSpawner.roundManager.currentRound].insertingInRandomOrder + var shuffle_mode = ModLoader.get_node(id).config_data.shuffle + var needShuffle = shuffleRound if (shuffle_mode == CPGameConfig.ShuffleMode.YES) else false; + + if not needShuffle: + shellSpawner.roundManager.roundArray[shellSpawner.roundManager.currentRound].insertingInRandomOrder = false + chain.execute_next_async() + +func PlayLatchSound(chain: ModLoaderHookChain): + var current_mode = ModLoader.get_node(id).config_data.mode + if (current_mode == CPGameConfig.GameMode.HIDDEN): + return + chain.execute_next_async() + +func PlayAudioIndicators(chain: ModLoaderHookChain): + var current_mode = ModLoader.get_node(id).config_data.mode + if (current_mode == CPGameConfig.GameMode.HIDDEN): + return + chain.execute_next_async() + +func _cpRecolorShells(spawnedShellObjectArray): + for shell in spawnedShellObjectArray: + var branch = shell.get_child(0) + branch.mesh.set_surface_override_material(1, branch.mat_blank) diff --git a/mods-unpacked/StarPanda-ChallengePack/util/CPButtonUtil.gd b/mods-unpacked/StarPanda-ChallengePack/util/CPButtonUtil.gd deleted file mode 100644 index 9847ddf..0000000 --- a/mods-unpacked/StarPanda-ChallengePack/util/CPButtonUtil.gd +++ /dev/null @@ -1,72 +0,0 @@ -class_name CPButtonUtil - -const ButtonClass = preload("res://scripts/ButtonClass.gd") -static var font = load("res://fonts/fake receipt.otf") - -static func createButtonLogic(root: Node, label: Label) -> ButtonClass: - var cursor_manager = root.get_node("standalone managers/cursor manager") - var button_logic = ButtonClass.new() - - button_logic.cursor = cursor_manager - button_logic.isActive = true - button_logic.playing = true - button_logic.isDynamic = true - button_logic.ui = label - button_logic.speaker_press = root.get_node("speaker_press") - button_logic.speaker_hover = root.get_node("speaker_hover") - return button_logic - -static func createButton() -> Button: - var button = Button.new() - - button.size = Vector2(8, 8) - button.modulate = Color.TRANSPARENT - button.self_modulate = Color.TRANSPARENT - button.mouse_filter = Control.MOUSE_FILTER_STOP - return button - -static func createButtonLabel() -> Label: - var label = Label.new() - - label.size = Vector2(960, 35) - label.scale = Vector2(0.76, 1) - label.pivot_offset = Vector2(480, 0) - label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER - label.set("theme_override_colors/font_shadow_color", Color.BLACK) - label.set("theme_override_fonts/font", font) - label.set("theme_override_font_sizes/font_size", 26) - return label - -static func setState(button: ButtonClass, state: bool) -> void: - button.SetFilter("stop" if state else "ignore") - button.isActive = state - button.ui.visible = state - -static func createButtonWithConfig(root: Node, config: Dictionary) -> ButtonClass: - var uiRoot = _resolveNode(config["ui_root"], root) - - var label = createButtonLabel() - var button = createButton() - var logic = createButtonLogic(root, label) - - label.name = config.get("label_name", "button_label") - label.text = config.get("label_text", "") - label.position = config.get("label_position", Vector2()) - label.horizontal_alignment = config.get("label_align", HORIZONTAL_ALIGNMENT_CENTER) - - button.name = config.get("button_name", "button") - button.position = config.get("button_position", Vector2()) - button.scale = config.get("button_scale", Vector2()) - logic.name = config.get("logic_name", "logic") - - button.add_child(logic) - uiRoot.add_child(button) - uiRoot.add_child(label) - setState(logic, config.get("state", false)) - - return logic - -static func _resolveNode(node, root: Node) -> Node: - if (node is Node): - return node - return root.get_node(node) diff --git a/mods-unpacked/StarPanda-ChallengePack/util/CPGameOptionsMenuManager.gd b/mods-unpacked/StarPanda-ChallengePack/util/CPGameOptionsMenuManager.gd deleted file mode 100644 index d84d576..0000000 --- a/mods-unpacked/StarPanda-ChallengePack/util/CPGameOptionsMenuManager.gd +++ /dev/null @@ -1,179 +0,0 @@ -class_name CPGameOptionsMenuManager extends Node - -const ButtonClass = preload("res://scripts/ButtonClass.gd") -const MenuManager = preload("res://scripts/MenuManager.gd") -const CPModConfig = preload("./CPModConfig.gd") -const CPGameConfig = preload("./CPGameConfig.gd") -const CPButtonUtil = preload("../util/CPButtonUtil.gd") - -var totalGameModes = len(CPGameConfig.GameMode.keys()) -var totalItemModes = len(CPGameConfig.ItemMode.keys()) -var totalShuffleModes = len(CPGameConfig.ShuffleMode.keys()) -var totalTurnModes = len(CPGameConfig.TurnMode.keys()) - -var menu_manager: MenuManager -var menu_items: Array[Control] -var menu_buttons: Array[ButtonClass] -var shown: bool - -var button_return_config := { - "ui_root": "Camera/dialogue UI/menu ui", - "label_text": "return", - "label_name": "button_challengepack_exit custom", - "button_name": "true button_challengepack_return custom", - "logic_name": "button class_challengepack_return custom", - "label_position": Vector2(0, 424), - "button_position": Vector2(439, 430), - "button_scale": Vector2(10.154, 2.807), -} -var button_start_config := { - "ui_root": "Camera/dialogue UI/menu ui", - "label_text": "start", - "label_name": "button_challengepack_start_game custom", - "button_name": "true button_challengepack_start_game custom", - "logic_name": "button class_challengepack_start_game custom", - "label_position": Vector2(0, 394), - "button_position": Vector2(439, 400), - "button_scale": Vector2(10.154, 2.807), -} - -var button_mode_config := { - "ui_root": "Camera/dialogue UI/menu ui", - "label_name": "button_challengepack_mode custom", - "button_name": "true button_challengepack_mode custom", - "logic_name": "button class_challengepack_mode custom", - "label_position": Vector2(0, 204), - "button_position": Vector2(280, 210), - "button_scale": Vector2(50, 3), -} -var button_items_config := { - "ui_root": "Camera/dialogue UI/menu ui", - "label_name": "button_challengepack_items custom", - "button_name": "true button_challengepack_items custom", - "logic_name": "button class_challengepack_items custom", - "label_position": Vector2(0, 234), - "button_position": Vector2(280, 240), - "button_scale": Vector2(50, 3), -} -var button_shuffle_config := { - "ui_root": "Camera/dialogue UI/menu ui", - "label_name": "button_challengepack_shuffle custom", - "button_name": "true button_challengepack_shuffle custom", - "logic_name": "button class_challengepack_shuffle custom", - "label_position": Vector2(0, 264), - "button_position": Vector2(280, 270), - "button_scale": Vector2(50, 3), -} -var button_turn_config := { - "ui_root": "Camera/dialogue UI/menu ui", - "label_name": "button_challengepack_turn custom", - "button_name": "true button_challengepack_turn custom", - "logic_name": "button class_challengepack_turn custom", - "label_position": Vector2(0, 324), - "button_position": Vector2(280, 330), - "button_scale": Vector2(50, 3), -} - -func show() -> void: - menu_manager.Show("e") - _set_menu_visibility(true) - -func hide() -> void: - _set_menu_visibility(false) - menu_manager.Show("main") - menu_manager.ResetButtons() - -func _init(root: Node): - name = "challengepack menu manager" - _configure(root) - -func _ready(): - var managers_root = get_parent() - menu_manager = managers_root.get_node("menu manager") - _set_menu_visibility(false) - -func _configure(root: Node) -> void: - _create_title(root) - _create_version_label(root) - _create_buttons(root) - # _reinit_start_button(root) - -func _create_title(root: Node) -> void: - var label = CPButtonUtil.createButtonLabel() - var parent = root.get_node("Camera/dialogue UI/menu ui") - - label.name = "challengepack_title" - label.text = "game configuration" - label.position = Vector2(0, 100) - label.set("theme_override_font_sizes/font_size", 36) - - parent.add_child(label) - menu_items.append(label) - -func _create_version_label(root: Node) -> void: - var label = CPButtonUtil.createButtonLabel() - var parent = root.get_node("Camera/dialogue UI/menu ui") - - label.name = "challengepack_version" - label.text = "ChallengePack v" + CPModConfig.get_version() - label.position = Vector2(-93, 515) - label.horizontal_alignment = HORIZONTAL_ALIGNMENT_LEFT - label.set("theme_override_colors/font_color", Color.WEB_GRAY) - label.set("theme_override_font_sizes/font_size", 16) - - parent.add_child(label) - menu_items.append(label) - -func _create_buttons(root: Node) -> void: - var btn_return_logic = CPButtonUtil.createButtonWithConfig(root, button_return_config) - var btn_start_logic = CPButtonUtil.createButtonWithConfig(root, button_start_config) - var btn_mode_logic = CPButtonUtil.createButtonWithConfig(root, button_mode_config) - var btn_items_logic = CPButtonUtil.createButtonWithConfig(root, button_items_config) - var btn_shuffle_logic = CPButtonUtil.createButtonWithConfig(root, button_shuffle_config) - var btn_turn_logic = CPButtonUtil.createButtonWithConfig(root, button_turn_config) - - btn_start_logic.connect("is_pressed", func(): _on_start_click()) - btn_return_logic.connect("is_pressed", hide) - btn_mode_logic.connect("is_pressed", func(): _on_mode_button_click("challengepack_mode", totalGameModes)) - btn_items_logic.connect("is_pressed", func(): _on_mode_button_click("challengepack_item", totalItemModes)) - btn_shuffle_logic.connect("is_pressed", func(): _on_mode_button_click("challengepack_shuffle", totalShuffleModes)) - btn_turn_logic.connect("is_pressed", func(): _on_mode_button_click("challengepack_turn", totalTurnModes)) - - _register_button(btn_return_logic) - _register_button(btn_mode_logic) - _register_button(btn_items_logic) - _register_button(btn_shuffle_logic) - _register_button(btn_turn_logic) - _register_button(btn_start_logic) - _update_labels() - -func _on_start_click() -> void: - _set_menu_visibility(false) - menu_manager.Start() - -func _set_menu_visibility(state: bool) -> void: - for logic in menu_buttons: - CPButtonUtil.setState(logic, state) - for item in menu_items: - item.visible = state - -func _register_button(logic: ButtonClass) -> void: - menu_items.append(logic.ui) - menu_buttons.append(logic) - -func _on_mode_button_click(setting_name, total_modes, default_value = 0) -> void: - var mode_id = ProjectSettings.get_setting(setting_name, default_value) - var next_mode = (mode_id + 1) if (mode_id + 1 < total_modes) else 0 - ProjectSettings.set_setting(setting_name, next_mode) - _update_labels() - -func _update_labels(): - var mode_id = ProjectSettings.get_setting("challengepack_mode", 0) - var item_mode_id = ProjectSettings.get_setting("challengepack_item", 0) - var shuffle_mode_id = ProjectSettings.get_setting("challengepack_shuffle", 0) - var turn_mode_id = ProjectSettings.get_setting("challengepack_turn", 0) - - menu_buttons[1].ui.text = "shell visibility: " + CPGameConfig.GameMode.keys()[mode_id] - menu_buttons[2].ui.text = "items visibility: " + CPGameConfig.ItemMode.keys()[item_mode_id] - menu_buttons[3].ui.text = "shuffle bullets: " + CPGameConfig.ShuffleMode.keys()[shuffle_mode_id] - menu_buttons[4].ui.text = "first turn: " + CPGameConfig.TurnMode.keys()[turn_mode_id].replace("_", " ") diff --git a/mods-unpacked/StarPanda-ChallengePack/util/CPModConfig.gd b/mods-unpacked/StarPanda-ChallengePack/util/CPModConfig.gd deleted file mode 100644 index ddf6876..0000000 --- a/mods-unpacked/StarPanda-ChallengePack/util/CPModConfig.gd +++ /dev/null @@ -1,23 +0,0 @@ -class_name CPModConfig - -const ROOT_DIR_NAME := "StarPanda-ChallengePack" - -static var loaded := false -static var manifest : Dictionary - -static func get_version() -> String: - _load() - if (!loaded): - return "-" - return manifest["version_number"] - -static func get_root_path() -> String: - return ModLoaderMod.get_unpacked_dir() + ROOT_DIR_NAME - -static func _load() -> void: - if (loaded): - return - var manifest_path = get_root_path() + "/manifest.json" - var manifest_text = FileAccess.get_file_as_string(manifest_path) - manifest = JSON.parse_string(manifest_text) - loaded = true diff --git a/mods-unpacked/StarPanda-ChallengePack/util/config.gd b/mods-unpacked/StarPanda-ChallengePack/util/config.gd new file mode 100644 index 0000000..256cf52 --- /dev/null +++ b/mods-unpacked/StarPanda-ChallengePack/util/config.gd @@ -0,0 +1,54 @@ +extends Control + +const CPGameConfig = preload("res://mods-unpacked/StarPanda-ChallengePack/util/CPGameConfig.gd") + +@export var button_class_mode: ButtonClass +@export var button_class_items: ButtonClass +@export var button_class_shuffle: ButtonClass +@export var button_class_turn: ButtonClass + +const id = "StarPanda-ChallengePack" + +var totalGameModes = len(CPGameConfig.GameMode.keys()) +var totalItemModes = len(CPGameConfig.ItemMode.keys()) +var totalShuffleModes = len(CPGameConfig.ShuffleMode.keys()) +var totalTurnModes = len(CPGameConfig.TurnMode.keys()) + +var buttons: Array[ButtonClass] + +func _ready(): + buttons = [button_class_mode, button_class_items, button_class_shuffle, button_class_turn] + for button in buttons: + button.cursor = get_node("/root/menu/standalone managers/cursor manager") + button.speaker_press = get_node("/root/menu/speaker_press") + button.speaker_hover = get_node("/root/menu/speaker_hover") + + button_class_mode.connect("is_pressed", func(): _on_mode_button_click("mode", totalGameModes)) + button_class_items.connect("is_pressed", func(): _on_mode_button_click("items", totalItemModes)) + button_class_shuffle.connect("is_pressed", func(): _on_mode_button_click("shuffle", totalShuffleModes)) + button_class_turn.connect("is_pressed", func(): _on_mode_button_click("turn", totalTurnModes)) + + _update_labels() + +func _on_mode_button_click(setting_name, total_modes) -> void: + var config = ModLoaderConfig.get_config(id, "user") + if config != null: + var mode_id = config.data[setting_name] + var next_mode = (mode_id + 1) if (mode_id + 1 < total_modes) else 0 + + config.data[setting_name] = next_mode + ModLoaderConfig.update_config(config) + _update_labels() + +func _update_labels(): + var config = ModLoaderConfig.get_config(id, "user") + if config != null: + var mode_id = config.data.mode + var item_mode_id = config.data.items + var shuffle_mode_id = config.data.shuffle + var turn_mode_id = config.data.turn + + buttons[0].ui.text = "shell visibility: " + CPGameConfig.GameMode.keys()[mode_id] + buttons[1].ui.text = "items visibility: " + CPGameConfig.ItemMode.keys()[item_mode_id] + buttons[2].ui.text = "shuffle bullets: " + CPGameConfig.ShuffleMode.keys()[shuffle_mode_id] + buttons[3].ui.text = "first turn: " + CPGameConfig.TurnMode.keys()[turn_mode_id].replace("_", " ")