From 89c0c666c788989f5a66dc334d341e45ab3e6a3a Mon Sep 17 00:00:00 2001 From: LifeHckr Date: Thu, 8 May 2025 16:04:13 -0700 Subject: [PATCH 01/19] Created Event, Elite, and Shop Handling MapArea and StageProducer should now be ready for new planned stages --- Classes/MapAreas/MapLevels.cs | 30 +++++++++++++++++--------- Globals/FunkEngineNameSpace.cs | 5 ++++- Globals/StageProducer.cs | 15 +++++++++++++ Scenes/Maps/InBetween.tscn | 2 +- Scenes/Maps/Scripts/Cartographer.cs | 9 ++++---- Scenes/UI/TitleScreen/TitleScreen.tscn | 6 +++--- 6 files changed, 48 insertions(+), 19 deletions(-) diff --git a/Classes/MapAreas/MapLevels.cs b/Classes/MapAreas/MapLevels.cs index 16d7fa2e..906b137c 100644 --- a/Classes/MapAreas/MapLevels.cs +++ b/Classes/MapAreas/MapLevels.cs @@ -32,21 +32,26 @@ public MapConfig AddSetRoom(int height, Stages roomType) return this; } - public const int NumStages = 2; - - public static readonly Stages[] StagsToRoll = new[] { Stages.Battle, Stages.Chest }; + public static readonly Stages[] StagesToRoll = new[] + { + Stages.Battle, + Stages.Chest, + Stages.Elite, + Stages.Event, + Stages.Shop, + }; /// /// The odds for each stage to appear in a non-set room position. /// - public float[] StageOdds = new float[2]; + public float[] StageOdds = new float[5]; public MapConfig(int width, int height, int paths, float[] odds) { Width = width; Height = height; Paths = paths; - for (int i = 0; i < NumStages; i++) + for (int i = 0; i < StagesToRoll.Length; i++) { StageOdds[i] = odds[i]; } @@ -75,6 +80,7 @@ private MapLevels( int[] battleSongs, int[] eliteSongs, int[] bossSongs, + int[] eventIds, int nextLevelId = -1, string backgroundPath = "res://SharedAssets/BackGround_Full.png" ) @@ -84,6 +90,7 @@ private MapLevels( NormalBattles = battleSongs; EliteBattles = eliteSongs; BossBattles = bossSongs; + EventIds = eventIds; NextLevel = nextLevelId; BackgroundPath = backgroundPath; } @@ -97,18 +104,21 @@ private MapLevels( public int[] NormalBattles { get; private set; } public int[] EliteBattles { get; private set; } public int[] BossBattles { get; private set; } + public int[] EventIds { get; private set; } #region Preset Levels - private static readonly MapConfig FirstMapConfig = new MapConfig(7, 6, 3, [10, 1]) + private static readonly MapConfig FirstMapConfig = new MapConfig(7, 7, 3, [10, 1, 5, 5, 5]) .AddSetRoom(3, Stages.Chest) - .AddMinHeight(Stages.Chest, 2); + .AddMinHeight(Stages.Chest, 2) + .AddMinHeight(Stages.Shop, 3) + .AddMinHeight(Stages.Elite, 3); - private static readonly MapConfig TutorialMapConfig = new MapConfig(1, 2, 1, [10, 0]); + private static readonly MapConfig TutorialMapConfig = new MapConfig(1, 2, 1, [10, 0, 0, 0, 0]); private static readonly MapLevels[] PresetLevels = new[] { - new MapLevels(0, TutorialMapConfig, [4], [], [5], 1), - new MapLevels(1, FirstMapConfig, [1, 2, 3], [], [0], -1), + new MapLevels(0, TutorialMapConfig, [4], [0], [5], [], 1), + new MapLevels(1, FirstMapConfig, [1, 3], [2], [0], [], -1), }; #endregion diff --git a/Globals/FunkEngineNameSpace.cs b/Globals/FunkEngineNameSpace.cs index f9d87b60..3154c75e 100644 --- a/Globals/FunkEngineNameSpace.cs +++ b/Globals/FunkEngineNameSpace.cs @@ -259,6 +259,9 @@ public enum Stages { Battle = 0, Chest = 1, + Elite = 2, + Event = 3, + Shop = 4, Boss, Quit, Map, @@ -387,7 +390,7 @@ private Stages PickRoomType(int x, int y, MapLevels.MapConfig curConfig) } } int idx = (int)StageProducer.GlobalRng.RandWeighted(validRooms); - return MapLevels.MapConfig.StagsToRoll[idx]; + return MapLevels.MapConfig.StagesToRoll[idx]; } //Asserts that if there is a room at the same x, but y+1 they are connected diff --git a/Globals/StageProducer.cs b/Globals/StageProducer.cs index c3a01789..5e243fd0 100644 --- a/Globals/StageProducer.cs +++ b/Globals/StageProducer.cs @@ -132,6 +132,7 @@ public void PreloadScene(int nextRoomIdx) Config = MakeBattleConfig(nextStage, nextRoomIdx); switch (nextStage) { + case Stages.Elite: case Stages.Battle: case Stages.Boss: _loadTask = Task.Run(() => @@ -140,6 +141,8 @@ public void PreloadScene(int nextRoomIdx) .Instantiate(); }); break; + case Stages.Shop: + case Stages.Event: case Stages.Chest: _loadTask = Task.Run(() => { @@ -163,6 +166,9 @@ public void TransitionStage(Stages nextStage, int nextRoomIdx = -1) break; case Stages.Battle: //Currently these are only ever entered from map. Be aware if we change case Stages.Boss: //this, scenes either need to be preloaded first, or a different setup is needed. + case Stages.Event: + case Stages.Elite: + case Stages.Shop: case Stages.Chest: _loadTask.Wait(); //Should always finish by the time it gets here, this guarantees it. GetTree().GetCurrentScene().Free(); @@ -218,6 +224,13 @@ private BattleConfig MakeBattleConfig(Stages nextRoom, int nextRoomIdx) .SongDictionary[CurLevel.NormalBattles[songIdx]] .EnemyScenePath; break; + case Stages.Elite: + int elitIdx = stageRng.RandiRange(0, CurLevel.EliteBattles.Length - 1); + result.CurSong = Scribe.SongDictionary[CurLevel.EliteBattles[elitIdx]]; + result.EnemyScenePath = Scribe + .SongDictionary[CurLevel.BossBattles[elitIdx]] + .EnemyScenePath; + break; case Stages.Boss: int bossIdx = stageRng.RandiRange(0, CurLevel.BossBattles.Length - 1); result.CurSong = Scribe.SongDictionary[CurLevel.BossBattles[bossIdx]]; @@ -225,6 +238,8 @@ private BattleConfig MakeBattleConfig(Stages nextRoom, int nextRoomIdx) .SongDictionary[CurLevel.BossBattles[bossIdx]] .EnemyScenePath; break; + case Stages.Event: + case Stages.Shop: case Stages.Chest: break; default: diff --git a/Scenes/Maps/InBetween.tscn b/Scenes/Maps/InBetween.tscn index 7d57aa3f..76d2a863 100644 --- a/Scenes/Maps/InBetween.tscn +++ b/Scenes/Maps/InBetween.tscn @@ -20,5 +20,5 @@ offset_bottom = 284.0 theme = ExtResource("2_dapxv") text = "INBETWEEN_CONTINUE" script = ExtResource("3_35xdc") -ScenePath = 4 +ScenePath = 9 _startFocused = true diff --git a/Scenes/Maps/Scripts/Cartographer.cs b/Scenes/Maps/Scripts/Cartographer.cs index b60a8a17..7ed4716d 100644 --- a/Scenes/Maps/Scripts/Cartographer.cs +++ b/Scenes/Maps/Scripts/Cartographer.cs @@ -24,14 +24,14 @@ public partial class Cartographer : Node2D private Button _focusedButton; - private static readonly Dictionary StageIcons = new Dictionary< - Stages, - Texture2D - > + private static readonly Dictionary StageIcons = new() { { Stages.Battle, GD.Load("res://Scenes/Maps/Assets/BattleIcon.png") }, + { Stages.Elite, GD.Load("res://Scenes/Maps/Assets/BossIcon.png") }, { Stages.Boss, GD.Load("res://Scenes/Maps/Assets/BossIcon.png") }, { Stages.Chest, GD.Load("res://Scenes/Maps/Assets/ChestIcon.png") }, + { Stages.Shop, GD.Load("res://Scenes/Maps/Assets/ChestIcon.png") }, + { Stages.Event, GD.Load("res://Scenes/Maps/Assets/ChestIcon.png") }, }; public override void _Ready() @@ -80,6 +80,7 @@ private void DrawMap() private void DrawMapSprite(MapGrid.Room room) { + GD.Print(room.Type); var newButton = new Button(); newButton.Theme = ButtonTheme; newButton.CustomMinimumSize = MapIconSize; diff --git a/Scenes/UI/TitleScreen/TitleScreen.tscn b/Scenes/UI/TitleScreen/TitleScreen.tscn index d16c8ea4..6245525f 100644 --- a/Scenes/UI/TitleScreen/TitleScreen.tscn +++ b/Scenes/UI/TitleScreen/TitleScreen.tscn @@ -183,7 +183,7 @@ theme = ExtResource("13_v0au1") theme_override_font_sizes/font_size = 24 text = "TITLE_START" script = ExtResource("2_7f3m6") -ScenePath = 4 +ScenePath = 7 _startFocused = true [node name="MarginContainer3" type="MarginContainer" parent="VBoxContainer/HBoxContainer"] @@ -206,7 +206,7 @@ theme = ExtResource("13_v0au1") theme_override_font_sizes/font_size = 24 text = "TITLE_CONTINUE" script = ExtResource("2_7f3m6") -ScenePath = 5 +ScenePath = 9 [node name="MarginContainer2" type="MarginContainer" parent="VBoxContainer/HBoxContainer"] layout_mode = 2 @@ -227,7 +227,7 @@ theme = ExtResource("13_v0au1") theme_override_font_sizes/font_size = 24 text = "TITLE_QUIT" script = ExtResource("2_7f3m6") -ScenePath = 3 +ScenePath = 6 [node name="OptionsMargin" type="MarginContainer" parent="VBoxContainer"] layout_mode = 2 From 5aac2cfb95dd0ae802508d581e83009ccee453a4 Mon Sep 17 00:00:00 2001 From: LifeHckr Date: Thu, 8 May 2025 17:35:54 -0700 Subject: [PATCH 02/19] Added Sprites Added Elite, Shop, and Event map icons Added money icon --- Scenes/Maps/Assets/EliteIcon.png | Bin 0 -> 862 bytes Scenes/Maps/Assets/EliteIcon.png.import | 34 ++++++++++++++++++++++++ Scenes/Maps/Assets/EventIcon.png | Bin 0 -> 335 bytes Scenes/Maps/Assets/EventIcon.png.import | 34 ++++++++++++++++++++++++ Scenes/Maps/Assets/ShopIcon.png | Bin 0 -> 589 bytes Scenes/Maps/Assets/ShopIcon.png.import | 34 ++++++++++++++++++++++++ Scenes/Maps/Scripts/Cartographer.cs | 6 ++--- Scenes/UI/Inventory.tscn | 22 ++++++++++++--- Scenes/UI/ScoreScreen.tscn | 17 +++++++++--- SharedAssets/Money.png | Bin 0 -> 233 bytes SharedAssets/Money.png.import | 34 ++++++++++++++++++++++++ 11 files changed, 172 insertions(+), 9 deletions(-) create mode 100644 Scenes/Maps/Assets/EliteIcon.png create mode 100644 Scenes/Maps/Assets/EliteIcon.png.import create mode 100644 Scenes/Maps/Assets/EventIcon.png create mode 100644 Scenes/Maps/Assets/EventIcon.png.import create mode 100644 Scenes/Maps/Assets/ShopIcon.png create mode 100644 Scenes/Maps/Assets/ShopIcon.png.import create mode 100644 SharedAssets/Money.png create mode 100644 SharedAssets/Money.png.import diff --git a/Scenes/Maps/Assets/EliteIcon.png b/Scenes/Maps/Assets/EliteIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..0537440475b03954bef918d81e2b8ec30a379c41 GIT binary patch literal 862 zcmV-k1EKthP)Px&7)eAyR9J-;(e5dk;YO$%X*@IF1*IkODLj8u_1! z$O-s0c}|2TK$1J>W+J4YpU79zskIh7UzR0?Vc>btu;m0U(GgUfE?(%F_pB@46fd*Anc z)M${YboMXjW;MV_)oPijsw&tI!vODnxHNKWEl#IXR12yAPA@McBFL>vMKCGb@ga#(ky|hE1sCoWKR7I}#sB~S07*qoM6N<$f^P_h#{d8T literal 0 HcmV?d00001 diff --git a/Scenes/Maps/Assets/EliteIcon.png.import b/Scenes/Maps/Assets/EliteIcon.png.import new file mode 100644 index 00000000..4b35faab --- /dev/null +++ b/Scenes/Maps/Assets/EliteIcon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bo6pprsk2p8fn" +path="res://.godot/imported/EliteIcon.png-3fb4b7e324eb40bf5441f47b2b3a396b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Scenes/Maps/Assets/EliteIcon.png" +dest_files=["res://.godot/imported/EliteIcon.png-3fb4b7e324eb40bf5441f47b2b3a396b.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 diff --git a/Scenes/Maps/Assets/EventIcon.png b/Scenes/Maps/Assets/EventIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..07ae24cfbf2af68910001138ffe725222539a64c GIT binary patch literal 335 zcmV-V0kHmwP)Px$2}wjjR9J=WSHTg3FbuPMU5qh2h9_YR#$X+`P(PSUX#hJ3rQB674wP87=Z<}DO?qZWY(+-mXU}+L|hq_ta*6E zlw{>y;}UQtHa)=1oSu9~W3@gj#&L9w;;sozgkA4(FGXs;uIt<*Nc009s1{J#`z9!v z`%{8P`<|kx1ue^de-mCVp!V%|?+P^k0*b)KkiI$lIT5wNFZVz(TD8FaS-uXQo`fZT hM23G0szuZWe*s=+5vF7?D7*jw002ovPDHLkV1k$Ch~@wQ literal 0 HcmV?d00001 diff --git a/Scenes/Maps/Assets/EventIcon.png.import b/Scenes/Maps/Assets/EventIcon.png.import new file mode 100644 index 00000000..3aa726f8 --- /dev/null +++ b/Scenes/Maps/Assets/EventIcon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bi08ruf8ld4mn" +path="res://.godot/imported/EventIcon.png-59b4b2ec31a8401aaa31d4b2033bc7ef.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Scenes/Maps/Assets/EventIcon.png" +dest_files=["res://.godot/imported/EventIcon.png-59b4b2ec31a8401aaa31d4b2033bc7ef.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 diff --git a/Scenes/Maps/Assets/ShopIcon.png b/Scenes/Maps/Assets/ShopIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..9e15a2c8e09f7cc1dc0f24998d9619e4b9065abf GIT binary patch literal 589 zcmV-T0Px%2T4RhR9J<@mm#);Fc3vwdcH@sJ1DXaS2mH#vI-Qg7S&bMmQ4hQL$U-=T|vI! zOil<13H);YlMv?JnPgyK*dQsTv|VS6v9+;&wwTs+t*%#9WnB{r<6T5S^E?LtaLzFd zgLSPCLan)8uR$P-H>H%4jMFro-RGPGm{x%xbdV(o>lWx)+l+Pd`~5z-PV0pb3XI~} zKxP2GtabAx(X&-mVHgG+k4H!;r3rEH1#p?iaXic36-Nl+JU5dHQ1&6_YeW#XDky-x z%ykI;Ob~=~3v4pYo2JBx@BhUdSot2<9l*8?)G|%e;QfAo z9e@Gjizv%7oK7caHxxwy04U26z`Q+m`3|cP0?+3Yj4>8Gl991Zu2*tM*USLgw#DUg z3FYzv`5+F!IH|l|FZ6wn&*u}=l3TxudifQ=UJChIDu69j=(-MF*98Na*#nlTSnr4^ ziWbj9Q51^+=Co{@0}ETASHe||vMdqDvGqK-Ms-uxd7Xv@sssQ;Q3L?1JA^U^>|?q2 z$0W-#08k)0%n}e~Z7X{)06_p_HAp&)DS~@E9;3lue$8wkCJX?a&*zD0i1BIw7tAEs bhTrpFC@n9;nGjM?00000NkvXXu0mjfaZdU9 literal 0 HcmV?d00001 diff --git a/Scenes/Maps/Assets/ShopIcon.png.import b/Scenes/Maps/Assets/ShopIcon.png.import new file mode 100644 index 00000000..70de0b02 --- /dev/null +++ b/Scenes/Maps/Assets/ShopIcon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://thmkt407eqbo" +path="res://.godot/imported/ShopIcon.png-db80b24a389b2b47bc99151013ec8cd6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Scenes/Maps/Assets/ShopIcon.png" +dest_files=["res://.godot/imported/ShopIcon.png-db80b24a389b2b47bc99151013ec8cd6.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 diff --git a/Scenes/Maps/Scripts/Cartographer.cs b/Scenes/Maps/Scripts/Cartographer.cs index 7ed4716d..7cc487eb 100644 --- a/Scenes/Maps/Scripts/Cartographer.cs +++ b/Scenes/Maps/Scripts/Cartographer.cs @@ -28,10 +28,10 @@ public partial class Cartographer : Node2D { { Stages.Battle, GD.Load("res://Scenes/Maps/Assets/BattleIcon.png") }, { Stages.Elite, GD.Load("res://Scenes/Maps/Assets/BossIcon.png") }, - { Stages.Boss, GD.Load("res://Scenes/Maps/Assets/BossIcon.png") }, + { Stages.Boss, GD.Load("res://Scenes/Maps/Assets/EliteIcon.png") }, { Stages.Chest, GD.Load("res://Scenes/Maps/Assets/ChestIcon.png") }, - { Stages.Shop, GD.Load("res://Scenes/Maps/Assets/ChestIcon.png") }, - { Stages.Event, GD.Load("res://Scenes/Maps/Assets/ChestIcon.png") }, + { Stages.Shop, GD.Load("res://Scenes/Maps/Assets/ShopIcon.png") }, + { Stages.Event, GD.Load("res://Scenes/Maps/Assets/EventIcon.png") }, }; public override void _Ready() diff --git a/Scenes/UI/Inventory.tscn b/Scenes/UI/Inventory.tscn index dde8d6c5..4e031711 100644 --- a/Scenes/UI/Inventory.tscn +++ b/Scenes/UI/Inventory.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=5 format=3 uid="uid://be6fb2sr5i515"] +[gd_scene load_steps=6 format=3 uid="uid://be6fb2sr5i515"] [ext_resource type="Script" uid="uid://kqa0ovjph1hd" path="res://Scenes/UI/Scripts/Inventory.cs" id="1_8rcwd"] [ext_resource type="Texture2D" uid="uid://ck16vyh1q68ri" path="res://Scenes/UI/Assets/UI_ForestBackground.png" id="2_s6pj7"] [ext_resource type="Texture2D" uid="uid://8u3xvcma81d" path="res://Scenes/UI/Assets/UI_CrystalFrame.png" id="3_s6pj7"] [ext_resource type="Texture2D" uid="uid://burj10os057fx" path="res://Scenes/UI/Assets/UI_CrystalFrameInset.png" id="4_b6trj"] +[ext_resource type="Texture2D" uid="uid://dyt1cvag13aik" path="res://SharedAssets/Money.png" id="5_si1x5"] [node name="Inventory" type="Control" node_paths=PackedStringArray("_relics", "_notes", "_description", "_tabs", "_moneyLabel")] process_mode = 1 @@ -18,7 +19,7 @@ _relics = NodePath("MarginContainer/InvenVBox/Tabs/INVENTORY_TAB_RELICS/MarginCo _notes = NodePath("MarginContainer/InvenVBox/Tabs/INVENTORY_TAB_NOTES/MarginContainer/NotesBox/NotesGrid") _description = NodePath("MarginContainer/InvenVBox/DescBox/DescMargin/MarginContainer/Description") _tabs = NodePath("MarginContainer/InvenVBox/Tabs") -_moneyLabel = NodePath("MoneyContainer/MoneyFrame/MarginContainer/MoneyLabel") +_moneyLabel = NodePath("MoneyContainer/MoneyFrame/MarginContainer/HBoxContainer/MoneyLabel") [node name="Background" type="NinePatchRect" parent="."] self_modulate = Color(1, 1, 1, 0.75) @@ -199,9 +200,24 @@ grow_horizontal = 2 grow_vertical = 2 theme_override_constants/margin_right = 8 -[node name="MoneyLabel" type="Label" parent="MoneyContainer/MoneyFrame/MarginContainer"] +[node name="HBoxContainer" type="HBoxContainer" parent="MoneyContainer/MoneyFrame/MarginContainer"] layout_mode = 2 + +[node name="MarginContainer" type="MarginContainer" parent="MoneyContainer/MoneyFrame/MarginContainer/HBoxContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 6 + +[node name="TextureRect" type="TextureRect" parent="MoneyContainer/MoneyFrame/MarginContainer/HBoxContainer/MarginContainer"] +layout_mode = 2 +size_flags_vertical = 4 +texture = ExtResource("5_si1x5") + +[node name="MoneyLabel" type="Label" parent="MoneyContainer/MoneyFrame/MarginContainer/HBoxContainer"] +custom_minimum_size = Vector2(91, 0) +layout_mode = 2 +size_flags_horizontal = 10 size_flags_vertical = 1 text = "0" horizontal_alignment = 2 vertical_alignment = 1 +clip_text = true diff --git a/Scenes/UI/ScoreScreen.tscn b/Scenes/UI/ScoreScreen.tscn index 30ff0c18..5fa20eb6 100644 --- a/Scenes/UI/ScoreScreen.tscn +++ b/Scenes/UI/ScoreScreen.tscn @@ -1,10 +1,11 @@ -[gd_scene load_steps=6 format=3 uid="uid://d3ulgssit1dcv"] +[gd_scene load_steps=7 format=3 uid="uid://d3ulgssit1dcv"] [ext_resource type="Script" uid="uid://b5bw86d25uwdd" path="res://Scenes/UI/Scripts/ScoringScreen.cs" id="1_ma4hf"] [ext_resource type="Texture2D" uid="uid://ck16vyh1q68ri" path="res://Scenes/UI/Assets/UI_ForestBackground.png" id="1_ws5ov"] [ext_resource type="Texture2D" uid="uid://8u3xvcma81d" path="res://Scenes/UI/Assets/UI_CrystalFrame.png" id="2_usavq"] [ext_resource type="Texture2D" uid="uid://burj10os057fx" path="res://Scenes/UI/Assets/UI_CrystalFrameInset.png" id="3_usavq"] [ext_resource type="Theme" uid="uid://d37e3tpsbxwak" path="res://Scenes/UI/Assets/GeneralTheme.tres" id="4_1rsqt"] +[ext_resource type="Texture2D" uid="uid://dyt1cvag13aik" path="res://SharedAssets/Money.png" id="5_0mn6u"] [node name="ScoreScreen" type="CanvasLayer" node_paths=PackedStringArray("_styleLabel", "_styleAmount", "_perfectsLabel", "_perfectsAmount", "_placedLabel", "_placedAmount", "_totalLabel", "_totalAmount", "_relicLabel", "_relicAmount", "_acceptButton")] process_mode = 3 @@ -16,7 +17,7 @@ _perfectsAmount = NodePath("Bg/WindowMargin/PanelBg/VBoxContainer/MarginContaine _placedLabel = NodePath("Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/LabelMargin/LabelVbox/PlacedLabel") _placedAmount = NodePath("Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox/PlacedLabel") _totalLabel = NodePath("Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/LabelMargin/LabelVbox/TotalLabel") -_totalAmount = NodePath("Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox/TotalLabel") +_totalAmount = NodePath("Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox/HBoxContainer/TotalLabel") _relicLabel = NodePath("Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/LabelMargin/LabelVbox/RelicLabel") _relicAmount = NodePath("Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox/RelicLabel") _acceptButton = NodePath("Bg/WindowMargin/PanelBg/VBoxContainer/ButtonMargin/AcceptButton") @@ -196,8 +197,18 @@ horizontal_alignment = 2 layout_mode = 2 horizontal_alignment = 2 -[node name="TotalLabel" type="Label" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox"] +[node name="HBoxContainer" type="HBoxContainer" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox"] layout_mode = 2 + +[node name="MoneyIcon" type="TextureRect" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 4 +texture = ExtResource("5_0mn6u") + +[node name="TotalLabel" type="Label" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 10 text = "999" horizontal_alignment = 2 diff --git a/SharedAssets/Money.png b/SharedAssets/Money.png new file mode 100644 index 0000000000000000000000000000000000000000..2fbfe6e67cc623312e7f8060dc2a698d81d3775f GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k#^NA%Cx&(BWL^R}i#=T&Lo_C~ zPTDQlV!-1vUm~mUMV!JC_UBp$En8QJJDD%$KG5^_u|;asdw1nXiBos?zIAoERVUY( zc5L7KB~z^Sa6RXmCCTu5mypvAS?zc4^puRY7ApT-x$M=tRV@NHw!NL0k+x%ZIj3cM zQqOzN_3QJS<`}Qya?oTAbq%%bTP)1+C7LNOF?*X1cYO4!P_LhsmuioGD=1j^ Date: Thu, 8 May 2025 19:13:50 -0700 Subject: [PATCH 03/19] Flipped Shop and Money sprites --- Scenes/Maps/Assets/ShopIcon.png | Bin 589 -> 554 bytes SharedAssets/Money.png | Bin 233 -> 236 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Scenes/Maps/Assets/ShopIcon.png b/Scenes/Maps/Assets/ShopIcon.png index 9e15a2c8e09f7cc1dc0f24998d9619e4b9065abf..47c478ccdbef07c2db40c9d4551241221af9bbd2 100644 GIT binary patch delta 516 zcmV+f0{i{V1gZp(Fnu*Os=<Aj|TvtX&OI141@n2UPJ#|0?7_K=UiBHYEIpUnsF2u+%ll7=!!$ zo`fI}t@V!?12Ve>)b%h7=(>(I=G3+=3(+)(v@J0iH^yr@B7)g>-Eakp!jdM8-x&|XiG-M)5k8SlyORn0AZwCHH{zm zodZG$p|$qgs9Kdgdabpy_&q>Qdv%|Z2UwFr-}li3OnoWUJ-}>AxfPLnsYofa6E9~D zWNty21h<~0lv#6YZDgKOc3ZyYElD$d97h1~odf)~eDTACw$v$*aA}b#83SNrF9sk8 z0JvN(Gn1*psB>Lc0Zc(cnD_e~T|=fN#?=5Rn5fu_&+~6@_h&@}PODx30000lWx)+l+Pd z`~5z-PV0pb3XI~}KxP2GtabAx(X&-mVHgG+k4H!;r3rEH1#p?iaXic36-Nl+JU5dH zQ1&6_YeW#XDky-x%ykI;Ob~=~3v4pYo2Jjf5CYHV6O1tyJd%;I zO|DmRNY~5&+P1~zatY<~0{I{gz&NSAUN7{0kI&~5)PIs&zlwVK6~JB!`C2M~Emi2c z4qev;1DV+amZ@0ph$xB{&qGlZivZ@dY?=cLTcB6MRgJPN5y!FhJh(=6Q`UK%h6Snw z07Ov)0INHMG6(Eqx%bB;%Q65^AUezv5M^yEdoTb&0An>sI*ciTdpsVa!C!vOY#=5K q0G!X~i6Lo-@oE4U%p}-`-}7H6Eic2F5K>S80000L_t(2k$sY}4aFb~M4!KyC1rMjk{!}BLi+4L8FopTo;gVK zZ2^jMolkc@%eF9~wbuGtM5M3XEG(q}a2yBQwi&NRr(zWiirH?k$No4 zLI`2t+*@}=jFFr(DJ4t!Ojy^IecuP})9?n@7uR)>a|YnPZ#)1}N<)h1Y^4;NRnZH* x_k3Iy8{8({=N77c^M3|(K=4A@c{E)R9VFnAXoqZ002ovPDHLkV1hK|SbhKi delta 192 zcmV;x06+ii0qFsdF@K{;L_t(2k%f}G5ri-dM4uRHap+zkqzC6J!8wJf7eY6q3&4!+ z<2Yqn??)q97|Pwf?L|b|ejbTt#=h^Qlsdc$=L(t`0PDIELbx3(?(QxkGPQ9d`KhMr zuBwC(*tYGFXlA&(cL_OXVvO$zudi={oHMElKq&=PMO8VDqd5}@^jiXMVQaQ53twBR uRZ96e(tXADaB!~p!cXFLI2jE7evJ>qy;g>s`7osb0000 Date: Thu, 8 May 2025 21:33:34 -0700 Subject: [PATCH 04/19] Setting Up second area level Also tweaking cartographer camera scroll --- Classes/MapAreas/MapLevels.cs | 21 +++++++++++++-- Globals/FunkEngineNameSpace.cs | 2 ++ Globals/StageProducer.cs | 3 ++- Scenes/Maps/Assets/FirstIcon.png | Bin 0 -> 693 bytes Scenes/Maps/Assets/FirstIcon.png.import | 34 ++++++++++++++++++++++++ Scenes/Maps/Assets/StartIcon.png | Bin 0 -> 678 bytes Scenes/Maps/Assets/StartIcon.png.import | 34 ++++++++++++++++++++++++ Scenes/Maps/Cartographer.tscn | 14 +++++++--- Scenes/Maps/InBetween.tscn | 2 +- Scenes/Maps/Scripts/Cartographer.cs | 16 ++++++----- Scenes/UI/Scripts/RewardSelect.cs | 26 +++++++++++++----- Scenes/UI/TitleScreen/TitleScreen.tscn | 2 +- SharedAssets/BackGround_City.png | Bin 0 -> 85970 bytes SharedAssets/BackGround_City.png.import | 34 ++++++++++++++++++++++++ 14 files changed, 166 insertions(+), 22 deletions(-) create mode 100644 Scenes/Maps/Assets/FirstIcon.png create mode 100644 Scenes/Maps/Assets/FirstIcon.png.import create mode 100644 Scenes/Maps/Assets/StartIcon.png create mode 100644 Scenes/Maps/Assets/StartIcon.png.import create mode 100644 SharedAssets/BackGround_City.png create mode 100644 SharedAssets/BackGround_City.png.import diff --git a/Classes/MapAreas/MapLevels.cs b/Classes/MapAreas/MapLevels.cs index 906b137c..96aacc86 100644 --- a/Classes/MapAreas/MapLevels.cs +++ b/Classes/MapAreas/MapLevels.cs @@ -107,18 +107,35 @@ private MapLevels( public int[] EventIds { get; private set; } #region Preset Levels - private static readonly MapConfig FirstMapConfig = new MapConfig(7, 7, 3, [10, 1, 5, 5, 5]) + private static readonly MapConfig FirstMapConfig = new MapConfig(7, 7, 3, [10, 2, 5, 6, 5]) .AddSetRoom(3, Stages.Chest) .AddMinHeight(Stages.Chest, 2) .AddMinHeight(Stages.Shop, 3) .AddMinHeight(Stages.Elite, 3); + private static readonly MapConfig CityMapConfig = new MapConfig(9, 10, 5, [12, 1, 5, 5, 4]) + .AddSetRoom(2, Stages.Chest) + .AddSetRoom(4, Stages.Shop) + .AddMinHeight(Stages.Chest, 1) + .AddMinHeight(Stages.Shop, 3) + .AddMinHeight(Stages.Elite, 2); + private static readonly MapConfig TutorialMapConfig = new MapConfig(1, 2, 1, [10, 0, 0, 0, 0]); private static readonly MapLevels[] PresetLevels = new[] { new MapLevels(0, TutorialMapConfig, [4], [0], [5], [], 1), - new MapLevels(1, FirstMapConfig, [1, 3], [2], [0], [], -1), + new MapLevels(1, FirstMapConfig, [1, 2], [3], [0], [], 2), + new MapLevels( + 2, + CityMapConfig, + [1, 2], + [3], + [0], + [], + -1, + "res://SharedAssets/BackGround_City.png" + ), }; #endregion diff --git a/Globals/FunkEngineNameSpace.cs b/Globals/FunkEngineNameSpace.cs index 3154c75e..7f76605f 100644 --- a/Globals/FunkEngineNameSpace.cs +++ b/Globals/FunkEngineNameSpace.cs @@ -291,6 +291,7 @@ public class MapGrid private int[,] _map; private Room[] _rooms; private int _curIdx; + public int Width { get; private set; } public Room[] GetRooms() { @@ -330,6 +331,7 @@ public void AddChild(int newIdx) */ public void InitMapGrid(MapLevels.MapConfig curConfig) { + Width = curConfig.Width; _curIdx = 0; _rooms = []; _map = new int[curConfig.Width, curConfig.Height]; //x,y diff --git a/Globals/StageProducer.cs b/Globals/StageProducer.cs index 5e243fd0..f228f83e 100644 --- a/Globals/StageProducer.cs +++ b/Globals/StageProducer.cs @@ -228,7 +228,7 @@ private BattleConfig MakeBattleConfig(Stages nextRoom, int nextRoomIdx) int elitIdx = stageRng.RandiRange(0, CurLevel.EliteBattles.Length - 1); result.CurSong = Scribe.SongDictionary[CurLevel.EliteBattles[elitIdx]]; result.EnemyScenePath = Scribe - .SongDictionary[CurLevel.BossBattles[elitIdx]] + .SongDictionary[CurLevel.EliteBattles[elitIdx]] .EnemyScenePath; break; case Stages.Boss: @@ -275,6 +275,7 @@ public static bool IsMoreLevels() public void ProgressLevels() { + GD.Print(CurLevel.Id); CurLevel = CurLevel.GetNextLevel(); Map = new(); diff --git a/Scenes/Maps/Assets/FirstIcon.png b/Scenes/Maps/Assets/FirstIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..0c25138c6787e1e5c4f13e179cb86c616e6475ab GIT binary patch literal 693 zcmV;m0!safP)Px%Z%IT!R9J`TV*He1jvHs)jVFMUmP*MHLoT#Z%NGu_T1x2^No7 z*C*I3xYKWTy4yeQG41ZQb57694h!%l%sgkgxqVu7Y^6KznVPW{`YPfD8@*TImpB*#3=&krots^lmOt<;ie!- z5&*wnO=6`8UmDsz;M?OAkdw)Kj@#{Kt<%_tP9xGluiiQWSV5hLu|B>pL5G8<8s*IWV@*OO$2VNrlq^t+i7CcSM4xNp@2%Sc-6N!=flGyLm7lIe#vS zBJ2Gqimc~2Iu4KsKF9wBX{~z$%3~T8v0QKYIuRV`6C_dBwKbN{%BD2y4`tsWQ*JZ) btX%&K1&WbwN%Crr00000NkvXXu0mjf)SNIy literal 0 HcmV?d00001 diff --git a/Scenes/Maps/Assets/FirstIcon.png.import b/Scenes/Maps/Assets/FirstIcon.png.import new file mode 100644 index 00000000..e0dac93f --- /dev/null +++ b/Scenes/Maps/Assets/FirstIcon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dxiceak20m0l7" +path="res://.godot/imported/FirstIcon.png-51362bbefd81dee000fc3aedbade09ac.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Scenes/Maps/Assets/FirstIcon.png" +dest_files=["res://.godot/imported/FirstIcon.png-51362bbefd81dee000fc3aedbade09ac.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 diff --git a/Scenes/Maps/Assets/StartIcon.png b/Scenes/Maps/Assets/StartIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..3b5e91351ff6e99309b27c794ba6177ea70684ff GIT binary patch literal 678 zcmV;X0$KfuP)Px%U`a$lR9J=0S38oUFc5uAIag$g!ntE#fPi>1r<{Tta05<(L$08J3lKwW3PYq5 zXoKC>wh)-l%xvwea+Q$O{a&l3mh9mmwAPw`d!FYV@w3~Ah^Ks{XRnacQR3_MYK>Dr zo3}~Gs(>Zp%jIItqwl>!76rT`4#N;#*Eu#p5Fn1@T|yiIM~J^7#0c0+ETy!*iEyuw z6Lsz-PSX^5o;&S5LOjp&PDH+yILk6*S>}*T$F>O3TI&-|>LrQ6u zKF@PhRRsWuqG&OPOOR4p_DPb!_kHAfZn%IQmr)po@O|IvtLqv;5FiKwt6vD=6sjc{ z0c1c0<-0+fkaJlArprBzpzFHXd!X-o^nJf7fPB7QFEmYqD2i+W<2d4cK3fWD5^yX9 z+@5?+kL(9E?)SSfpbb}5m06i1;P&J*iXuyxa|*axj<2SG`+R!}_%Y<*Dd1!LY4-W~ zIZFt@I))rZz_gyPfmci+1Rjsas?A)L+*}8iQULtEFPf&Az0~HwgFRG;q?FEm0RXq# z&9t``qL1|{KMQ9ChG8&~j^k+h-=%;y7Jnm5?N StageIcons = new() { { Stages.Battle, GD.Load("res://Scenes/Maps/Assets/BattleIcon.png") }, - { Stages.Elite, GD.Load("res://Scenes/Maps/Assets/BossIcon.png") }, - { Stages.Boss, GD.Load("res://Scenes/Maps/Assets/EliteIcon.png") }, + { Stages.Elite, GD.Load("res://Scenes/Maps/Assets/EliteIcon.png") }, + { Stages.Boss, GD.Load("res://Scenes/Maps/Assets/BossIcon.png") }, { Stages.Chest, GD.Load("res://Scenes/Maps/Assets/ChestIcon.png") }, { Stages.Shop, GD.Load("res://Scenes/Maps/Assets/ShopIcon.png") }, { Stages.Event, GD.Load("res://Scenes/Maps/Assets/EventIcon.png") }, + { Stages.Map, GD.Load("res://Scenes/Maps/Assets/FirstIcon.png") }, }; public override void _Ready() @@ -54,7 +55,7 @@ public override void _EnterTree() private Vector2 GetPosition(int x, int y) { - return new Vector2((float)x * 640 / 8 + 32, y * 48 + 16); + return new Vector2((float)(x + 1) * 640 / (StageProducer.Map.Width + 1), y * 48 + 16); } private void DrawMap() @@ -80,7 +81,6 @@ private void DrawMap() private void DrawMapSprite(MapGrid.Room room) { - GD.Print(room.Type); var newButton = new Button(); newButton.Theme = ButtonTheme; newButton.CustomMinimumSize = MapIconSize; @@ -118,16 +118,20 @@ private void DrawMapSprite(MapGrid.Room room) } newButton.Icon = StageIcons[room.Type]; + if (room.Y == 0) + newButton.Icon = StageIcons[Stages.Map]; newButton.ZIndex = 1; newButton.Position = GetPosition(room.X, room.Y) - newButton.Size / 2; if (room == StageProducer.GetCurRoom()) { PlayerSprite.Position = newButton.Position + newButton.Size * .5f; - Camera.Position -= //TODO: Better camera matching for areas. + Camera.Position -= ( (GetViewportRect().Size / 2) - (newButton.Position + newButton.Size * .5f) - ).Normalized() * 20; + ).Normalized() + * room.X + * 48; } } diff --git a/Scenes/UI/Scripts/RewardSelect.cs b/Scenes/UI/Scripts/RewardSelect.cs index 4d39ca83..a00cdf8c 100644 --- a/Scenes/UI/Scripts/RewardSelect.cs +++ b/Scenes/UI/Scripts/RewardSelect.cs @@ -71,20 +71,32 @@ private void AddButton(IDisplayable displayable) private void GenerateSelection() { - if (_roomType == Stages.Battle) + switch (_roomType) { - GenerateNoteChoices(_amount); - } - else - { - GenerateRelicChoices(_amount); + case Stages.Battle: + GenerateNoteChoices(_amount); + break; + case Stages.Boss: + GenerateRelicChoices(_amount, [1, 5, 5, 5, 0]); + break; + default: + GenerateRelicChoices(_amount); + break; } } - private void GenerateRelicChoices(int amount = 1) + private void GenerateRelicChoices(int amount = 1, int[] addedOdds = null) { if (amount < 1) GD.PushError("Error: In RewardSelect: amount < 1"); + int[] fullOdds = new int[_player.RarityOdds.Length]; + bool extraOdds = addedOdds != null && addedOdds.Length == _player.RarityOdds.Length; + for (int i = 0; i < _player.RarityOdds.Length; i++) + { + fullOdds[i] = _player.RarityOdds[i]; + if (extraOdds) + fullOdds[i] += addedOdds[i]; + } _rChoices = Scribe.GetRandomRelics( amount, StageProducer.CurRoom + 10 * _curRerolls, diff --git a/Scenes/UI/TitleScreen/TitleScreen.tscn b/Scenes/UI/TitleScreen/TitleScreen.tscn index 6245525f..4eff8c85 100644 --- a/Scenes/UI/TitleScreen/TitleScreen.tscn +++ b/Scenes/UI/TitleScreen/TitleScreen.tscn @@ -206,7 +206,7 @@ theme = ExtResource("13_v0au1") theme_override_font_sizes/font_size = 24 text = "TITLE_CONTINUE" script = ExtResource("2_7f3m6") -ScenePath = 9 +ScenePath = 8 [node name="MarginContainer2" type="MarginContainer" parent="VBoxContainer/HBoxContainer"] layout_mode = 2 diff --git a/SharedAssets/BackGround_City.png b/SharedAssets/BackGround_City.png new file mode 100644 index 0000000000000000000000000000000000000000..42206dee354a49fc0a6d64e05465ec70de3524fd GIT binary patch literal 85970 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 JR(u?D^M5)Mr!@co literal 0 HcmV?d00001 diff --git a/SharedAssets/BackGround_City.png.import b/SharedAssets/BackGround_City.png.import new file mode 100644 index 00000000..cdb64a4b --- /dev/null +++ b/SharedAssets/BackGround_City.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bct14w72jt3gv" +path="res://.godot/imported/BackGround_City.png-d23ac72f201ffb7936eaec08855f457c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://SharedAssets/BackGround_City.png" +dest_files=["res://.godot/imported/BackGround_City.png-d23ac72f201ffb7936eaec08855f457c.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 From 294936f89121da0340d7fbd3e3c20c5cb1c296c3 Mon Sep 17 00:00:00 2001 From: cornerloan Date: Wed, 7 May 2025 22:33:59 -0700 Subject: [PATCH 05/19] Event room added currently not accessible in the game, but can be tested through running the scene --- Classes/Events/Assets/TEMP.png | Bin 0 -> 26591 bytes Classes/Events/Assets/TEMP.png.import | 34 ++++++++ Classes/Events/EventDatabase.cs | 34 ++++++++ Classes/Events/EventDatabase.cs.uid | 1 + Classes/Events/EventTemplate.cs | 33 +++++++ Classes/Events/EventTemplate.cs.uid | 1 + Scenes/EventScene/EventScene.cs | 67 +++++++++++++++ Scenes/EventScene/EventScene.cs.uid | 1 + Scenes/EventScene/EventScene.tscn | 119 ++++++++++++++++++++++++++ 9 files changed, 290 insertions(+) create mode 100644 Classes/Events/Assets/TEMP.png create mode 100644 Classes/Events/Assets/TEMP.png.import create mode 100644 Classes/Events/EventDatabase.cs create mode 100644 Classes/Events/EventDatabase.cs.uid create mode 100644 Classes/Events/EventTemplate.cs create mode 100644 Classes/Events/EventTemplate.cs.uid create mode 100644 Scenes/EventScene/EventScene.cs create mode 100644 Scenes/EventScene/EventScene.cs.uid create mode 100644 Scenes/EventScene/EventScene.tscn diff --git a/Classes/Events/Assets/TEMP.png b/Classes/Events/Assets/TEMP.png new file mode 100644 index 0000000000000000000000000000000000000000..c789df6a251ead3400b22187c0b3bff95441fdd7 GIT binary patch literal 26591 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 iwd3DE|Ni-9ef~eRt-N@!lUqjs0000 literal 0 HcmV?d00001 diff --git a/Classes/Events/Assets/TEMP.png.import b/Classes/Events/Assets/TEMP.png.import new file mode 100644 index 00000000..0d7c4160 --- /dev/null +++ b/Classes/Events/Assets/TEMP.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cy15tmixv0b6" +path="res://.godot/imported/TEMP.png-782c35a0eebabf4d103f16dcac6860f5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Classes/Events/Assets/TEMP.png" +dest_files=["res://.godot/imported/TEMP.png-782c35a0eebabf4d103f16dcac6860f5.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 diff --git a/Classes/Events/EventDatabase.cs b/Classes/Events/EventDatabase.cs new file mode 100644 index 00000000..04a0cfca --- /dev/null +++ b/Classes/Events/EventDatabase.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using Godot; + +/// +/// Holds all game events and their associated logic. +/// +public partial class EventDatabase : Node +{ + public static readonly EventTemplate[] EventDictionary = new[] + { + new EventTemplate( + 1, + "A wild creature appears in the forest.", + new string[] { "Fight", "Run", "Mysterious third option" }, + new EventAction[] + { + () => + { + GD.Print("You chose to fight"); + }, + () => + { + GD.Print("You chose to run"); + }, + () => + { + GD.Print("You chose to Mysterious third option"); + }, + }, + GD.Load("res://Classes/Events/Assets/TEMP.png") + ), + }; +} diff --git a/Classes/Events/EventDatabase.cs.uid b/Classes/Events/EventDatabase.cs.uid new file mode 100644 index 00000000..df77bf1c --- /dev/null +++ b/Classes/Events/EventDatabase.cs.uid @@ -0,0 +1 @@ +uid://c7pukvtaeda8h diff --git a/Classes/Events/EventTemplate.cs b/Classes/Events/EventTemplate.cs new file mode 100644 index 00000000..917bfc2c --- /dev/null +++ b/Classes/Events/EventTemplate.cs @@ -0,0 +1,33 @@ +using System; +using FunkEngine; +using Godot; + +public delegate void EventAction(); + +public partial class EventTemplate : Resource +{ + public int Id; + public string EventDescription; + public string[] ButtonDescriptions; + public Texture2D Texture; + + // Note: Actions are NOT exported since delegates cannot be serialized + public EventAction[] OptionActions; + + public EventTemplate() { } + + public EventTemplate( + int id, + string eventDescription, + string[] buttonDescriptions, + EventAction[] optionActions, + Texture2D texture + ) + { + Id = id; + EventDescription = eventDescription; + ButtonDescriptions = buttonDescriptions; + OptionActions = optionActions; + Texture = texture; + } +} diff --git a/Classes/Events/EventTemplate.cs.uid b/Classes/Events/EventTemplate.cs.uid new file mode 100644 index 00000000..197ac53a --- /dev/null +++ b/Classes/Events/EventTemplate.cs.uid @@ -0,0 +1 @@ +uid://4ro8fwi5f8uk diff --git a/Scenes/EventScene/EventScene.cs b/Scenes/EventScene/EventScene.cs new file mode 100644 index 00000000..9d87fded --- /dev/null +++ b/Scenes/EventScene/EventScene.cs @@ -0,0 +1,67 @@ +using System; +using FunkEngine; +using Godot; + +public partial class EventScene : Node +{ + public static readonly string LoadPath = "res://Scenes/ChestScene/ChestScene.tscn"; + private PlayerPuppet _player; + + [Export] + public Marker2D PlayerMarker; + + [Export] + public Sprite2D EventSprite; + + [Export] + private Label _eventDescription; + + [Export] + private VBoxContainer _buttonContainer; + + private Theme _buttonTheme; // Store the theme + + public override void _Ready() + { + _player = GD.Load(PlayerPuppet.LoadPath).Instantiate(); + PlayerMarker.AddChild(_player); + + // Load the theme from the path + _buttonTheme = GD.Load("res://Scenes/UI/Assets/GeneralTheme.tres"); + + DisplayEvent(0); + } + + /// + /// Displays the event with the given index. + /// + /// Index of the event in EventDatabase. + public void DisplayEvent(int eventIndex) + { + var eventTemplate = EventDatabase.EventDictionary[eventIndex]; + + _eventDescription.Text = eventTemplate.EventDescription; + EventSprite.Texture = eventTemplate.Texture; + + for (int i = 0; i < eventTemplate.ButtonDescriptions.Length; i++) + { + var button = new Button + { + Text = eventTemplate.ButtonDescriptions[i], + Theme = _buttonTheme, + }; + + button.SizeFlagsVertical = Control.SizeFlags.Expand | Control.SizeFlags.Fill; + + int capturedIndex = i; // was given a warning to capture the index + button.Pressed += () => + { + GD.Print($"Selected option: {eventTemplate.ButtonDescriptions[capturedIndex]}"); + eventTemplate.OptionActions[capturedIndex]?.Invoke(); + StageProducer.LiveInstance.TransitionStage(Stages.Map); + }; + + _buttonContainer.AddChild(button); + } + } +} diff --git a/Scenes/EventScene/EventScene.cs.uid b/Scenes/EventScene/EventScene.cs.uid new file mode 100644 index 00000000..cb060cd4 --- /dev/null +++ b/Scenes/EventScene/EventScene.cs.uid @@ -0,0 +1 @@ +uid://md1vhln8ji5h diff --git a/Scenes/EventScene/EventScene.tscn b/Scenes/EventScene/EventScene.tscn new file mode 100644 index 00000000..61efc189 --- /dev/null +++ b/Scenes/EventScene/EventScene.tscn @@ -0,0 +1,119 @@ +[gd_scene load_steps=7 format=3 uid="uid://u7oppwtmvmci"] + +[ext_resource type="Script" uid="uid://md1vhln8ji5h" path="res://Scenes/EventScene/EventScene.cs" id="1_x82kl"] +[ext_resource type="AudioStream" uid="uid://be5ial13ynf3o" path="res://Audio/Song1.ogg" id="2_vywvm"] +[ext_resource type="Texture2D" uid="uid://qhwve7fik4do" path="res://SharedAssets/BackGround_Full.png" id="4_l56en"] +[ext_resource type="Texture2D" uid="uid://8u3xvcma81d" path="res://Scenes/UI/Assets/UI_CrystalFrame.png" id="5_erk58"] +[ext_resource type="Script" uid="uid://cp6t6haqyef7o" path="res://Scenes/AreaBasedBackground.cs" id="5_v3lan"] +[ext_resource type="Texture2D" uid="uid://burj10os057fx" path="res://Scenes/UI/Assets/UI_CrystalFrameInset.png" id="6_4prsq"] + +[node name="EventScene" type="Node2D" node_paths=PackedStringArray("PlayerMarker", "EventSprite", "_eventDescription", "_buttonContainer")] +process_mode = 1 +script = ExtResource("1_x82kl") +PlayerMarker = NodePath("PlayerMarker") +EventSprite = NodePath("EventSprite") +_eventDescription = NodePath("Control/MarginContainer/PanelContainer/HBoxContainer/DescBox/DescMargin/Description") +_buttonContainer = NodePath("Control/MarginContainer/PanelContainer/HBoxContainer/ButtonContainer/VBoxContainer") + +[node name="Audio" type="AudioStreamPlayer" parent="."] +unique_name_in_owner = true +stream = ExtResource("2_vywvm") +autoplay = true + +[node name="PlayerMarker" type="Marker2D" parent="."] +position = Vector2(158, 125) + +[node name="EventSprite" type="Sprite2D" parent="."] +position = Vector2(385, 125) + +[node name="BackGround" type="TextureRect" parent="."] +z_index = -1 +offset_right = 640.0 +offset_bottom = 178.0 +texture = ExtResource("4_l56en") +script = ExtResource("5_v3lan") + +[node name="Control" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 0 +offset_right = 650.0 +offset_bottom = 40.0 + +[node name="MarginContainer" type="MarginContainer" parent="Control"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -50.0 +offset_top = 160.0 +offset_right = 40.0 +offset_bottom = 340.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_constants/margin_left = 50 +theme_override_constants/margin_top = 20 +theme_override_constants/margin_right = 50 +theme_override_constants/margin_bottom = 20 + +[node name="PanelContainer" type="PanelContainer" parent="Control/MarginContainer"] +layout_mode = 2 + +[node name="SelectionBG" type="NinePatchRect" parent="Control/MarginContainer/PanelContainer"] +self_modulate = Color(1, 1, 1, 0.75) +custom_minimum_size = Vector2(540, 105) +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +texture = ExtResource("5_erk58") +patch_margin_left = 30 +patch_margin_top = 10 +patch_margin_right = 20 +patch_margin_bottom = 27 + +[node name="HBoxContainer" type="HBoxContainer" parent="Control/MarginContainer/PanelContainer"] +layout_mode = 2 + +[node name="DescBox" type="MarginContainer" parent="Control/MarginContainer/PanelContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_constants/margin_top = 7 +theme_override_constants/margin_right = -10 +theme_override_constants/margin_bottom = 7 + +[node name="DescBackground" type="NinePatchRect" parent="Control/MarginContainer/PanelContainer/HBoxContainer/DescBox"] +layout_mode = 2 +texture = ExtResource("6_4prsq") +patch_margin_left = 7 +patch_margin_top = 7 +patch_margin_right = 7 +patch_margin_bottom = 7 + +[node name="DescMargin" type="MarginContainer" parent="Control/MarginContainer/PanelContainer/HBoxContainer/DescBox"] +layout_mode = 2 +theme_override_constants/margin_left = 0 +theme_override_constants/margin_top = 0 +theme_override_constants/margin_right = 0 +theme_override_constants/margin_bottom = 0 + +[node name="Description" type="Label" parent="Control/MarginContainer/PanelContainer/HBoxContainer/DescBox/DescMargin"] +layout_mode = 2 +size_flags_vertical = 1 +text = ":HeathCliff:" +horizontal_alignment = 1 +vertical_alignment = 1 +autowrap_mode = 2 +clip_text = true +text_overrun_behavior = 1 + +[node name="ButtonContainer" type="MarginContainer" parent="Control/MarginContainer/PanelContainer/HBoxContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 10 +theme_override_constants/margin_top = 7 +theme_override_constants/margin_right = 10 +theme_override_constants/margin_bottom = 7 + +[node name="VBoxContainer" type="VBoxContainer" parent="Control/MarginContainer/PanelContainer/HBoxContainer/ButtonContainer"] +layout_mode = 2 From 8ffb8cbf2361b1e00dddad118c4b98c2f3f21e63 Mon Sep 17 00:00:00 2001 From: cornerloan Date: Wed, 7 May 2025 23:01:31 -0700 Subject: [PATCH 06/19] added translations to event --- Classes/Events/EventDatabase.cs | 4 ++-- Globals/Translations/Translations.csv | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Classes/Events/EventDatabase.cs b/Classes/Events/EventDatabase.cs index 04a0cfca..0e1c7d09 100644 --- a/Classes/Events/EventDatabase.cs +++ b/Classes/Events/EventDatabase.cs @@ -11,8 +11,8 @@ public partial class EventDatabase : Node { new EventTemplate( 1, - "A wild creature appears in the forest.", - new string[] { "Fight", "Run", "Mysterious third option" }, + "EVENT_EVENT1_DESC", + new string[] { "EVENT_EVENT1_OPTION1", "EVENT_EVENT1_OPTION2", "EVENT_EVENT1_OPTION3" }, new EventAction[] { () => diff --git a/Globals/Translations/Translations.csv b/Globals/Translations/Translations.csv index 120aa74c..fde3125c 100644 --- a/Globals/Translations/Translations.csv +++ b/Globals/Translations/Translations.csv @@ -126,4 +126,8 @@ TUTORIAL_PLACE_6,"Now go ahead, place a note in the bottom lane!",(TODO) TUTORIAL_FINAL_1,"Good job, you placed a note! You either healed yourself, or dealt damage. I can't tell I'm just a Strawman.",(TODO) TUTORIAL_FINAL_2,"As a refresher: Hit notes to build a combo and fill the bar. When the bar is full, press one of your buttons for a lane that doesn't have a note at the current beat. Notes in the chart will loop around. Keep it up to win.",(TODO) TUTORIAL_FINAL_3,"Good luck! I believe in you.",(TODO) -TUTORIAL_BOSS,"This may take some getting used to, but death is ok in the grand scheme of things. Just have some patience with yourself, you'll learn in the end.",(TODO) \ No newline at end of file +TUTORIAL_BOSS,"This may take some getting used to, but death is ok in the grand scheme of things. Just have some patience with yourself, you'll learn in the end.",(TODO) +EVENT_EVENT1_DESC,"A wild creature appears in the forest.",(TODO) +EVENT_EVENT1_OPTION1,Fight,(TODO) +EVENT_EVENT1_OPTION2,Run,(TODO) +EVENT_EVENT1_OPTION3,Mysterious Third Option,(TODO) \ No newline at end of file From 40a728105e39e3e411c3c34ccf8fbc606ec956d2 Mon Sep 17 00:00:00 2001 From: LifeHckr Date: Thu, 8 May 2025 12:37:51 -0700 Subject: [PATCH 07/19] Fix up EventScene Prep for eventual integration --- Classes/Events/EventDatabase.cs | 2 +- Classes/Events/EventTemplate.cs | 2 +- Scenes/AreaBasedBackground.cs | 5 +++- Scenes/EventScene/EventScene.cs | 28 ++++++++++++++++++---- Scenes/EventScene/EventScene.tscn | 39 ++++++++++++++++++------------- 5 files changed, 52 insertions(+), 24 deletions(-) diff --git a/Classes/Events/EventDatabase.cs b/Classes/Events/EventDatabase.cs index 0e1c7d09..e1dbd1db 100644 --- a/Classes/Events/EventDatabase.cs +++ b/Classes/Events/EventDatabase.cs @@ -5,7 +5,7 @@ /// /// Holds all game events and their associated logic. /// -public partial class EventDatabase : Node +public partial class EventDatabase { public static readonly EventTemplate[] EventDictionary = new[] { diff --git a/Classes/Events/EventTemplate.cs b/Classes/Events/EventTemplate.cs index 917bfc2c..b433b020 100644 --- a/Classes/Events/EventTemplate.cs +++ b/Classes/Events/EventTemplate.cs @@ -4,7 +4,7 @@ public delegate void EventAction(); -public partial class EventTemplate : Resource +public partial class EventTemplate { public int Id; public string EventDescription; diff --git a/Scenes/AreaBasedBackground.cs b/Scenes/AreaBasedBackground.cs index 3ae8150a..5dc2a560 100644 --- a/Scenes/AreaBasedBackground.cs +++ b/Scenes/AreaBasedBackground.cs @@ -6,6 +6,9 @@ public partial class AreaBasedBackground : TextureRect { public override void _Ready() { - Texture = GD.Load(StageProducer.CurLevel.BackgroundPath); + if (StageProducer.CurLevel == null) + Texture = GD.Load("res://SharedAssets/BackGround_Full.png"); + else + Texture = GD.Load(StageProducer.CurLevel.BackgroundPath); } } diff --git a/Scenes/EventScene/EventScene.cs b/Scenes/EventScene/EventScene.cs index 9d87fded..be494186 100644 --- a/Scenes/EventScene/EventScene.cs +++ b/Scenes/EventScene/EventScene.cs @@ -19,19 +19,34 @@ public partial class EventScene : Node [Export] private VBoxContainer _buttonContainer; - private Theme _buttonTheme; // Store the theme + private static Theme _buttonTheme = GD.Load("res://Scenes/UI/Assets/GeneralTheme.tres"); // Store the theme + public static EventScene NewEventScene(int eventId = 0) + { + EventScene result = GD.Load(LoadPath).Instantiate(); + result._player = GD.Load(PlayerPuppet.LoadPath).Instantiate(); + result.PlayerMarker.AddChild(result._player); + result.DisplayEvent(eventId); + return result; + } + + //Eventually remove this, once integrated into game public override void _Ready() { _player = GD.Load(PlayerPuppet.LoadPath).Instantiate(); PlayerMarker.AddChild(_player); - // Load the theme from the path - _buttonTheme = GD.Load("res://Scenes/UI/Assets/GeneralTheme.tres"); - DisplayEvent(0); } + public override void _Process(double delta) + { + if (GetViewport().GuiGetFocusOwner() == null && _buttonContainer != null) + { + _buttonContainer.GetChild(0).GrabFocus(); + } + } + /// /// Displays the event with the given index. /// @@ -60,7 +75,10 @@ public void DisplayEvent(int eventIndex) eventTemplate.OptionActions[capturedIndex]?.Invoke(); StageProducer.LiveInstance.TransitionStage(Stages.Map); }; - + if (capturedIndex == 0) + { + button.GrabFocus(); + } _buttonContainer.AddChild(button); } } diff --git a/Scenes/EventScene/EventScene.tscn b/Scenes/EventScene/EventScene.tscn index 61efc189..7e0d84c4 100644 --- a/Scenes/EventScene/EventScene.tscn +++ b/Scenes/EventScene/EventScene.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=7 format=3 uid="uid://u7oppwtmvmci"] +[gd_scene load_steps=8 format=3 uid="uid://u7oppwtmvmci"] [ext_resource type="Script" uid="uid://md1vhln8ji5h" path="res://Scenes/EventScene/EventScene.cs" id="1_x82kl"] [ext_resource type="AudioStream" uid="uid://be5ial13ynf3o" path="res://Audio/Song1.ogg" id="2_vywvm"] +[ext_resource type="Script" uid="uid://pl57giqyhckb" path="res://Scenes/UI/Scripts/MenuModule.cs" id="2_x82kl"] [ext_resource type="Texture2D" uid="uid://qhwve7fik4do" path="res://SharedAssets/BackGround_Full.png" id="4_l56en"] [ext_resource type="Texture2D" uid="uid://8u3xvcma81d" path="res://Scenes/UI/Assets/UI_CrystalFrame.png" id="5_erk58"] [ext_resource type="Script" uid="uid://cp6t6haqyef7o" path="res://Scenes/AreaBasedBackground.cs" id="5_v3lan"] @@ -15,6 +16,10 @@ EventSprite = NodePath("EventSprite") _eventDescription = NodePath("Control/MarginContainer/PanelContainer/HBoxContainer/DescBox/DescMargin/Description") _buttonContainer = NodePath("Control/MarginContainer/PanelContainer/HBoxContainer/ButtonContainer/VBoxContainer") +[node name="UILayer" type="CanvasLayer" parent="." node_paths=PackedStringArray("CurSceneNode")] +script = ExtResource("2_x82kl") +CurSceneNode = NodePath("..") + [node name="Audio" type="AudioStreamPlayer" parent="."] unique_name_in_owner = true stream = ExtResource("2_vywvm") @@ -35,27 +40,28 @@ script = ExtResource("5_v3lan") [node name="Control" type="Control" parent="."] layout_mode = 3 -anchors_preset = 0 -offset_right = 650.0 -offset_bottom = 40.0 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = 640.0 +offset_bottom = 360.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 [node name="MarginContainer" type="MarginContainer" parent="Control"] +custom_minimum_size = Vector2(0, 180) layout_mode = 1 -anchors_preset = 15 +anchors_preset = 12 +anchor_top = 1.0 anchor_right = 1.0 anchor_bottom = 1.0 -offset_left = -50.0 -offset_top = 160.0 -offset_right = 40.0 -offset_bottom = 340.0 +offset_top = -105.0 grow_horizontal = 2 -grow_vertical = 2 +grow_vertical = 0 size_flags_horizontal = 3 size_flags_vertical = 3 -theme_override_constants/margin_left = 50 -theme_override_constants/margin_top = 20 -theme_override_constants/margin_right = 50 -theme_override_constants/margin_bottom = 20 [node name="PanelContainer" type="PanelContainer" parent="Control/MarginContainer"] layout_mode = 2 @@ -79,9 +85,10 @@ layout_mode = 2 layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -theme_override_constants/margin_top = 7 +theme_override_constants/margin_left = 5 +theme_override_constants/margin_top = 5 theme_override_constants/margin_right = -10 -theme_override_constants/margin_bottom = 7 +theme_override_constants/margin_bottom = 5 [node name="DescBackground" type="NinePatchRect" parent="Control/MarginContainer/PanelContainer/HBoxContainer/DescBox"] layout_mode = 2 From b3532993ac57046b889fe856cddce1f8a67f5723 Mon Sep 17 00:00:00 2001 From: cornerloan Date: Thu, 8 May 2025 13:47:10 -0700 Subject: [PATCH 08/19] Event outcomes added --- Classes/Events/EventDatabase.cs | 6 ++++ Classes/Events/EventTemplate.cs | 3 ++ Globals/Translations/Translations.csv | 6 +++- Scenes/EventScene/EventScene.cs | 46 +++++++++++++++++++++------ 4 files changed, 50 insertions(+), 11 deletions(-) diff --git a/Classes/Events/EventDatabase.cs b/Classes/Events/EventDatabase.cs index e1dbd1db..14ac2c18 100644 --- a/Classes/Events/EventDatabase.cs +++ b/Classes/Events/EventDatabase.cs @@ -13,6 +13,12 @@ public partial class EventDatabase 1, "EVENT_EVENT1_DESC", new string[] { "EVENT_EVENT1_OPTION1", "EVENT_EVENT1_OPTION2", "EVENT_EVENT1_OPTION3" }, + new string[] + { + "EVENT_EVENT1_OUTCOME1", + "EVENT_EVENT1_OUTCOME2", + "EVENT_EVENT1_OUTCOME3", + }, new EventAction[] { () => diff --git a/Classes/Events/EventTemplate.cs b/Classes/Events/EventTemplate.cs index b433b020..15b42631 100644 --- a/Classes/Events/EventTemplate.cs +++ b/Classes/Events/EventTemplate.cs @@ -9,6 +9,7 @@ public partial class EventTemplate public int Id; public string EventDescription; public string[] ButtonDescriptions; + public string[] OutcomeDescriptions; public Texture2D Texture; // Note: Actions are NOT exported since delegates cannot be serialized @@ -20,6 +21,7 @@ public EventTemplate( int id, string eventDescription, string[] buttonDescriptions, + string[] outcomeDescriptions, EventAction[] optionActions, Texture2D texture ) @@ -27,6 +29,7 @@ Texture2D texture Id = id; EventDescription = eventDescription; ButtonDescriptions = buttonDescriptions; + OutcomeDescriptions = outcomeDescriptions; OptionActions = optionActions; Texture = texture; } diff --git a/Globals/Translations/Translations.csv b/Globals/Translations/Translations.csv index fde3125c..57f4437f 100644 --- a/Globals/Translations/Translations.csv +++ b/Globals/Translations/Translations.csv @@ -127,7 +127,11 @@ TUTORIAL_FINAL_1,"Good job, you placed a note! You either healed yourself, or de TUTORIAL_FINAL_2,"As a refresher: Hit notes to build a combo and fill the bar. When the bar is full, press one of your buttons for a lane that doesn't have a note at the current beat. Notes in the chart will loop around. Keep it up to win.",(TODO) TUTORIAL_FINAL_3,"Good luck! I believe in you.",(TODO) TUTORIAL_BOSS,"This may take some getting used to, but death is ok in the grand scheme of things. Just have some patience with yourself, you'll learn in the end.",(TODO) +EVENT_CONTINUE_BUTTON,"Continue",(TODO) EVENT_EVENT1_DESC,"A wild creature appears in the forest.",(TODO) EVENT_EVENT1_OPTION1,Fight,(TODO) EVENT_EVENT1_OPTION2,Run,(TODO) -EVENT_EVENT1_OPTION3,Mysterious Third Option,(TODO) \ No newline at end of file +EVENT_EVENT1_OPTION3,Mysterious Third Option,(TODO) +EVENT_EVENT1_OUTCOME1,"You chose to fight.",(TODO) +EVENT_EVENT1_OUTCOME2,"You chose to run.",(TODO) +EVENT_EVENT1_OUTCOME3,"You chose the third option.",(TODO) \ No newline at end of file diff --git a/Scenes/EventScene/EventScene.cs b/Scenes/EventScene/EventScene.cs index be494186..5d1cebb1 100644 --- a/Scenes/EventScene/EventScene.cs +++ b/Scenes/EventScene/EventScene.cs @@ -21,6 +21,8 @@ public partial class EventScene : Node private static Theme _buttonTheme = GD.Load("res://Scenes/UI/Assets/GeneralTheme.tres"); // Store the theme + private EventTemplate _eventReference; + public static EventScene NewEventScene(int eventId = 0) { EventScene result = GD.Load(LoadPath).Instantiate(); @@ -36,6 +38,7 @@ public override void _Ready() _player = GD.Load(PlayerPuppet.LoadPath).Instantiate(); PlayerMarker.AddChild(_player); + _eventReference = EventDatabase.EventDictionary[0]; DisplayEvent(0); } @@ -53,16 +56,14 @@ public override void _Process(double delta) /// Index of the event in EventDatabase. public void DisplayEvent(int eventIndex) { - var eventTemplate = EventDatabase.EventDictionary[eventIndex]; - - _eventDescription.Text = eventTemplate.EventDescription; - EventSprite.Texture = eventTemplate.Texture; + _eventDescription.Text = _eventReference.EventDescription; + EventSprite.Texture = _eventReference.Texture; - for (int i = 0; i < eventTemplate.ButtonDescriptions.Length; i++) + for (int i = 0; i < _eventReference.ButtonDescriptions.Length; i++) { var button = new Button { - Text = eventTemplate.ButtonDescriptions[i], + Text = _eventReference.ButtonDescriptions[i], Theme = _buttonTheme, }; @@ -71,15 +72,40 @@ public void DisplayEvent(int eventIndex) int capturedIndex = i; // was given a warning to capture the index button.Pressed += () => { - GD.Print($"Selected option: {eventTemplate.ButtonDescriptions[capturedIndex]}"); - eventTemplate.OptionActions[capturedIndex]?.Invoke(); - StageProducer.LiveInstance.TransitionStage(Stages.Map); + GD.Print($"Selected option: {_eventReference.ButtonDescriptions[capturedIndex]}"); + _eventReference.OptionActions[capturedIndex]?.Invoke(); + AnyButtonPressed(capturedIndex); }; if (capturedIndex == 0) { - button.GrabFocus(); + button.CallDeferred("grab_focus"); } + _buttonContainer.AddChild(button); } } + + private void AnyButtonPressed(int capturedIndex) + { + foreach (var choices in _buttonContainer.GetChildren()) + { + if (choices is not Button) + continue; + choices.QueueFree(); + } + + _eventDescription.Text = _eventReference.OutcomeDescriptions[capturedIndex]; + var button = new Button { Text = "EVENT_CONTINUE_BUTTON", Theme = _buttonTheme }; + + button.Pressed += ContinuePressed; + + button.SizeFlagsVertical = Control.SizeFlags.Expand | Control.SizeFlags.Fill; + button.CallDeferred("grab_focus"); + _buttonContainer.AddChild(button); + } + + private void ContinuePressed() + { + StageProducer.LiveInstance.TransitionStage(Stages.Map); + } } From f93670a7ce3112fffa197d6d1e19b10fcfc7e94e Mon Sep 17 00:00:00 2001 From: cornerloan Date: Thu, 8 May 2025 14:12:20 -0700 Subject: [PATCH 09/19] First event added I don't see any reasons why this shouldnt work, but I haven't tested it --- Classes/Events/EventDatabase.cs | 14 +++++++++++--- Globals/Translations/Translations.csv | 14 +++++++------- Scenes/Puppets/Scripts/PlayerStats.cs | 22 ++++++++++++++++++++++ 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/Classes/Events/EventDatabase.cs b/Classes/Events/EventDatabase.cs index 14ac2c18..731f95ec 100644 --- a/Classes/Events/EventDatabase.cs +++ b/Classes/Events/EventDatabase.cs @@ -23,15 +23,23 @@ public partial class EventDatabase { () => { - GD.Print("You chose to fight"); + int randIndex = StageProducer.GlobalRng.RandiRange( + 0, + StageProducer.PlayerStats.CurNotes.Length + ); + StageProducer.PlayerStats.RemoveNote(randIndex); }, () => { - GD.Print("You chose to run"); + int randIndex = StageProducer.GlobalRng.RandiRange( + 0, + StageProducer.PlayerStats.CurRelics.Length + ); + StageProducer.PlayerStats.RemoveRelic(randIndex); }, () => { - GD.Print("You chose to Mysterious third option"); + StageProducer.PlayerStats.Money = (int)StageProducer.PlayerStats.Money / 2; }, }, GD.Load("res://Classes/Events/Assets/TEMP.png") diff --git a/Globals/Translations/Translations.csv b/Globals/Translations/Translations.csv index 57f4437f..d057a86e 100644 --- a/Globals/Translations/Translations.csv +++ b/Globals/Translations/Translations.csv @@ -128,10 +128,10 @@ TUTORIAL_FINAL_2,"As a refresher: Hit notes to build a combo and fill the bar. W TUTORIAL_FINAL_3,"Good luck! I believe in you.",(TODO) TUTORIAL_BOSS,"This may take some getting used to, but death is ok in the grand scheme of things. Just have some patience with yourself, you'll learn in the end.",(TODO) EVENT_CONTINUE_BUTTON,"Continue",(TODO) -EVENT_EVENT1_DESC,"A wild creature appears in the forest.",(TODO) -EVENT_EVENT1_OPTION1,Fight,(TODO) -EVENT_EVENT1_OPTION2,Run,(TODO) -EVENT_EVENT1_OPTION3,Mysterious Third Option,(TODO) -EVENT_EVENT1_OUTCOME1,"You chose to fight.",(TODO) -EVENT_EVENT1_OUTCOME2,"You chose to run.",(TODO) -EVENT_EVENT1_OUTCOME3,"You chose the third option.",(TODO) \ No newline at end of file +EVENT_EVENT1_DESC,"A bandit approaches you.",(TODO) +EVENT_EVENT1_OPTION1,"Give them a random note",(TODO) +EVENT_EVENT1_OPTION2,"Give them a random relic",(TODO) +EVENT_EVENT1_OPTION3,"Give them half your gold",(TODO) +EVENT_EVENT1_OUTCOME1,"You got robbed of a random note.",(TODO) +EVENT_EVENT1_OUTCOME2,"You got robbed of a random relic.",(TODO) +EVENT_EVENT1_OUTCOME3,"You got robbed of half your gold.",(TODO) \ No newline at end of file diff --git a/Scenes/Puppets/Scripts/PlayerStats.cs b/Scenes/Puppets/Scripts/PlayerStats.cs index 237aa5ca..d3fe2b79 100644 --- a/Scenes/Puppets/Scripts/PlayerStats.cs +++ b/Scenes/Puppets/Scripts/PlayerStats.cs @@ -42,8 +42,30 @@ public void AddRelic(RelicTemplate relic) Scribe.RemoveRelicFromPool(relic); } + public void RemoveRelic(int index) + { + if (index < 0 || index >= CurRelics.Length) + { + GD.Print("index out of range"); + return; + } + + CurRelics = CurRelics.Where((_, i) => i != index).ToArray(); + } + public void AddNote(Note nSelection) { CurNotes = CurNotes.Append(nSelection).ToArray(); } + + public void RemoveNote(int index) + { + if (index < 0 || index >= CurNotes.Length) + { + GD.Print("index out of range"); + return; + } + + CurNotes = CurNotes.Where((_, i) => i != index).ToArray(); + } } From 67ebf1356ca6c00b3471d8d99fac8870c9f33618 Mon Sep 17 00:00:00 2001 From: cornerloan Date: Thu, 8 May 2025 21:35:38 -0700 Subject: [PATCH 10/19] events now on the map, events now have prerequisites Hope you like Italian, I'm making spaghetti --- Classes/Events/EventDatabase.cs | 23 +++++++++++------------ Classes/Events/EventTemplate.cs | 6 +++++- Globals/StageProducer.cs | 5 +++++ Scenes/EventScene/EventScene.cs | 27 +++++++++++++++++++-------- 4 files changed, 40 insertions(+), 21 deletions(-) diff --git a/Classes/Events/EventDatabase.cs b/Classes/Events/EventDatabase.cs index 731f95ec..541c2044 100644 --- a/Classes/Events/EventDatabase.cs +++ b/Classes/Events/EventDatabase.cs @@ -12,15 +12,9 @@ public partial class EventDatabase new EventTemplate( 1, "EVENT_EVENT1_DESC", - new string[] { "EVENT_EVENT1_OPTION1", "EVENT_EVENT1_OPTION2", "EVENT_EVENT1_OPTION3" }, - new string[] - { - "EVENT_EVENT1_OUTCOME1", - "EVENT_EVENT1_OUTCOME2", - "EVENT_EVENT1_OUTCOME3", - }, - new EventAction[] - { + ["EVENT_EVENT1_OPTION1", "EVENT_EVENT1_OPTION2", "EVENT_EVENT1_OPTION3"], + ["EVENT_EVENT1_OUTCOME1", "EVENT_EVENT1_OUTCOME2", "EVENT_EVENT1_OUTCOME3"], + [ () => { int randIndex = StageProducer.GlobalRng.RandiRange( @@ -39,10 +33,15 @@ public partial class EventDatabase }, () => { - StageProducer.PlayerStats.Money = (int)StageProducer.PlayerStats.Money / 2; + StageProducer.PlayerStats.Money /= 2; }, - }, - GD.Load("res://Classes/Events/Assets/TEMP.png") + ], + GD.Load("res://Classes/Events/Assets/TEMP.png"), + [ + () => StageProducer.PlayerStats.CurNotes.Length > 0, + () => StageProducer.PlayerStats.CurRelics.Length > 0, + () => StageProducer.PlayerStats.Money > 0, + ] ), }; } diff --git a/Classes/Events/EventTemplate.cs b/Classes/Events/EventTemplate.cs index 15b42631..8c552568 100644 --- a/Classes/Events/EventTemplate.cs +++ b/Classes/Events/EventTemplate.cs @@ -3,6 +3,7 @@ using Godot; public delegate void EventAction(); +public delegate bool EventCondition(); public partial class EventTemplate { @@ -14,6 +15,7 @@ public partial class EventTemplate // Note: Actions are NOT exported since delegates cannot be serialized public EventAction[] OptionActions; + public EventCondition[] OptionEnabledConditions; public EventTemplate() { } @@ -23,7 +25,8 @@ public EventTemplate( string[] buttonDescriptions, string[] outcomeDescriptions, EventAction[] optionActions, - Texture2D texture + Texture2D texture, + EventCondition[] optionEnabledConditions = null ) { Id = id; @@ -32,5 +35,6 @@ Texture2D texture OutcomeDescriptions = outcomeDescriptions; OptionActions = optionActions; Texture = texture; + OptionEnabledConditions = optionEnabledConditions; } } diff --git a/Globals/StageProducer.cs b/Globals/StageProducer.cs index f228f83e..23829762 100644 --- a/Globals/StageProducer.cs +++ b/Globals/StageProducer.cs @@ -143,6 +143,11 @@ public void PreloadScene(int nextRoomIdx) break; case Stages.Shop: case Stages.Event: + _loadTask = Task.Run(() => + { + _preloadStage = GD.Load(EventScene.LoadPath).Instantiate(); + }); + break; case Stages.Chest: _loadTask = Task.Run(() => { diff --git a/Scenes/EventScene/EventScene.cs b/Scenes/EventScene/EventScene.cs index 5d1cebb1..29f80d6a 100644 --- a/Scenes/EventScene/EventScene.cs +++ b/Scenes/EventScene/EventScene.cs @@ -4,7 +4,7 @@ public partial class EventScene : Node { - public static readonly string LoadPath = "res://Scenes/ChestScene/ChestScene.tscn"; + public static readonly string LoadPath = "res://Scenes/EventScene/EventScene.tscn"; private PlayerPuppet _player; [Export] @@ -23,23 +23,25 @@ public partial class EventScene : Node private EventTemplate _eventReference; - public static EventScene NewEventScene(int eventId = 0) + public static EventScene NewEventScene() { EventScene result = GD.Load(LoadPath).Instantiate(); result._player = GD.Load(PlayerPuppet.LoadPath).Instantiate(); result.PlayerMarker.AddChild(result._player); - result.DisplayEvent(eventId); + result.DisplayEvent(); return result; } //Eventually remove this, once integrated into game public override void _Ready() { + GD.Print("loaded event"); _player = GD.Load(PlayerPuppet.LoadPath).Instantiate(); PlayerMarker.AddChild(_player); + //int eventIndex = StageProducer.GlobalRng.RandiRange(0, EventDatabase.EventDictionary.Length); _eventReference = EventDatabase.EventDictionary[0]; - DisplayEvent(0); + DisplayEvent(); } public override void _Process(double delta) @@ -54,7 +56,7 @@ public override void _Process(double delta) /// Displays the event with the given index. /// /// Index of the event in EventDatabase. - public void DisplayEvent(int eventIndex) + public void DisplayEvent() { _eventDescription.Text = _eventReference.EventDescription; EventSprite.Texture = _eventReference.Texture; @@ -65,18 +67,27 @@ public void DisplayEvent(int eventIndex) { Text = _eventReference.ButtonDescriptions[i], Theme = _buttonTheme, + SizeFlagsVertical = Control.SizeFlags.Expand | Control.SizeFlags.Fill, }; - button.SizeFlagsVertical = Control.SizeFlags.Expand | Control.SizeFlags.Fill; + // Check if the button should be enabled + bool isEnabled = + _eventReference.OptionEnabledConditions == null + || _eventReference.OptionEnabledConditions.Length <= i + || _eventReference.OptionEnabledConditions[i]?.Invoke() != false; - int capturedIndex = i; // was given a warning to capture the index + button.Disabled = !isEnabled; + + int capturedIndex = i; button.Pressed += () => { GD.Print($"Selected option: {_eventReference.ButtonDescriptions[capturedIndex]}"); _eventReference.OptionActions[capturedIndex]?.Invoke(); AnyButtonPressed(capturedIndex); }; - if (capturedIndex == 0) + + // Automatically focus the first *enabled* button + if (capturedIndex == 0 && isEnabled) { button.CallDeferred("grab_focus"); } From ffb119b5943a17571893100731f6f921238f5a37 Mon Sep 17 00:00:00 2001 From: cornerloan Date: Fri, 9 May 2025 00:28:25 -0700 Subject: [PATCH 11/19] =?UTF-8?q?2=20events,=20events=20now=20have=20self?= =?UTF-8?q?=20reference=20=F0=9F=8D=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added parmesan to the spaghetti --- Classes/Events/EventDatabase.cs | 69 +++++++++++++++++++++++++-- Classes/Events/EventTemplate.cs | 2 +- Globals/Translations/Translations.csv | 12 ++++- Scenes/EventScene/EventScene.cs | 9 ++-- 4 files changed, 84 insertions(+), 8 deletions(-) diff --git a/Classes/Events/EventDatabase.cs b/Classes/Events/EventDatabase.cs index 541c2044..4ca580de 100644 --- a/Classes/Events/EventDatabase.cs +++ b/Classes/Events/EventDatabase.cs @@ -15,7 +15,7 @@ public partial class EventDatabase ["EVENT_EVENT1_OPTION1", "EVENT_EVENT1_OPTION2", "EVENT_EVENT1_OPTION3"], ["EVENT_EVENT1_OUTCOME1", "EVENT_EVENT1_OUTCOME2", "EVENT_EVENT1_OUTCOME3"], [ - () => + (self) => { int randIndex = StageProducer.GlobalRng.RandiRange( 0, @@ -23,7 +23,7 @@ public partial class EventDatabase ); StageProducer.PlayerStats.RemoveNote(randIndex); }, - () => + (self) => { int randIndex = StageProducer.GlobalRng.RandiRange( 0, @@ -31,7 +31,7 @@ public partial class EventDatabase ); StageProducer.PlayerStats.RemoveRelic(randIndex); }, - () => + (self) => { StageProducer.PlayerStats.Money /= 2; }, @@ -43,5 +43,68 @@ public partial class EventDatabase () => StageProducer.PlayerStats.Money > 0, ] ), + new EventTemplate( + 1, + "EVENT_EVENT2_DESC", + ["EVENT_EVENT2_OPTION1", "EVENT_EVENT2_OPTION2"], + ["", "EVENT_EVENT1_OUTCOME1"], + [ + (self) => + { + StageProducer.PlayerStats.Money -= 20; + // [do nothing, get money back, win money, get note, get relic, heal] + int spinOutcome = (int) + StageProducer.GlobalRng.RandWeighted([13, 8, 5, 5, 3, 3]); + switch (spinOutcome) + { + case 0: //do nothing AKA lose + GD.Print("owned lol"); + self.OutcomeDescriptions[0] = "EVENT_EVENT1_OUTCOME2"; + break; + case 1: // get money back + GD.Print("refund"); + self.OutcomeDescriptions[0] = "EVENT_EVENT1_OUTCOME3"; + StageProducer.PlayerStats.Money += 20; + break; + case 2: // get triple money + GD.Print("triple money"); + self.OutcomeDescriptions[0] = "EVENT_EVENT1_OUTCOME4"; + StageProducer.PlayerStats.Money += 60; + break; + case 3: // get random note + GD.Print("random note"); + self.OutcomeDescriptions[0] = "EVENT_EVENT1_OUTCOME5"; + StageProducer.PlayerStats.AddNote( + Scribe.GetRandomRewardNotes(1, StageProducer.CurRoom + 10)[0] + ); + break; + case 4: // get random relic + GD.Print("random relic"); + self.OutcomeDescriptions[0] = "EVENT_EVENT1_OUTCOME6"; + StageProducer.PlayerStats.AddRelic( + Scribe.GetRandomRelics( + 1, + StageProducer.CurRoom + 10, + StageProducer.PlayerStats.RarityOdds + )[0] + ); + break; + case 5: + GD.Print("heal"); + self.OutcomeDescriptions[0] = "EVENT_EVENT1_OUTCOME7"; + StageProducer.PlayerStats.CurrentHealth = Math.Max( + StageProducer.PlayerStats.CurrentHealth + 20, + StageProducer.PlayerStats.MaxHealth + ); + break; + } + }, + (self) => { + //does nothing + }, + ], + GD.Load("res://Classes/Events/Assets/TEMP.png"), + [() => StageProducer.PlayerStats.Money > 20, () => true] + ), }; } diff --git a/Classes/Events/EventTemplate.cs b/Classes/Events/EventTemplate.cs index 8c552568..82b3ee47 100644 --- a/Classes/Events/EventTemplate.cs +++ b/Classes/Events/EventTemplate.cs @@ -2,7 +2,7 @@ using FunkEngine; using Godot; -public delegate void EventAction(); +public delegate void EventAction(EventTemplate self); public delegate bool EventCondition(); public partial class EventTemplate diff --git a/Globals/Translations/Translations.csv b/Globals/Translations/Translations.csv index d057a86e..2438e1f1 100644 --- a/Globals/Translations/Translations.csv +++ b/Globals/Translations/Translations.csv @@ -134,4 +134,14 @@ EVENT_EVENT1_OPTION2,"Give them a random relic",(TODO) EVENT_EVENT1_OPTION3,"Give them half your gold",(TODO) EVENT_EVENT1_OUTCOME1,"You got robbed of a random note.",(TODO) EVENT_EVENT1_OUTCOME2,"You got robbed of a random relic.",(TODO) -EVENT_EVENT1_OUTCOME3,"You got robbed of half your gold.",(TODO) \ No newline at end of file +EVENT_EVENT1_OUTCOME3,"You got robbed of half your gold.",(TODO) +EVENT_EVENT2_DESC,"There is a slot machine.",(TODO) +EVENT_EVENT2_OPTION1,"Pay 20g to spin",(TODO) +EVENT_EVENT2_OPTION2,"Ignore the machine",(TODO) +EVENT_EVENT1_OUTCOME1,"You saved your money and moved on.",(TODO) +EVENT_EVENT1_OUTCOME2,"You lost your money.",(TODO) +EVENT_EVENT1_OUTCOME3,"You refunded your money.",(TODO) +EVENT_EVENT1_OUTCOME4,"You tripled your money.",(TODO) +EVENT_EVENT1_OUTCOME5,"You gained a random note.",(TODO) +EVENT_EVENT1_OUTCOME6,"You gained a random relic.",(TODO) +EVENT_EVENT1_OUTCOME7,"You gained some health.",(TODO) \ No newline at end of file diff --git a/Scenes/EventScene/EventScene.cs b/Scenes/EventScene/EventScene.cs index 29f80d6a..931c880f 100644 --- a/Scenes/EventScene/EventScene.cs +++ b/Scenes/EventScene/EventScene.cs @@ -39,8 +39,11 @@ public override void _Ready() _player = GD.Load(PlayerPuppet.LoadPath).Instantiate(); PlayerMarker.AddChild(_player); - //int eventIndex = StageProducer.GlobalRng.RandiRange(0, EventDatabase.EventDictionary.Length); - _eventReference = EventDatabase.EventDictionary[0]; + int eventIndex = StageProducer.GlobalRng.RandiRange( + 0, + EventDatabase.EventDictionary.Length - 1 + ); + _eventReference = EventDatabase.EventDictionary[eventIndex]; DisplayEvent(); } @@ -82,7 +85,7 @@ public void DisplayEvent() button.Pressed += () => { GD.Print($"Selected option: {_eventReference.ButtonDescriptions[capturedIndex]}"); - _eventReference.OptionActions[capturedIndex]?.Invoke(); + _eventReference.OptionActions[capturedIndex]?.Invoke(_eventReference); AnyButtonPressed(capturedIndex); }; From fc2333c64c1f3ff01e18a5f2f17e4891038e061c Mon Sep 17 00:00:00 2001 From: cornerloan Date: Fri, 9 May 2025 13:02:33 -0700 Subject: [PATCH 12/19] Game now saves MaxComboBar, added field medic event We never actually needed to save MaxComboBar since energy drink was an onPickup effect. With this event, we now need to save the MaxComboBar value between sessions. Also adjusted event 2's translations and healing effect since I messed up both of those. --- Classes/Events/EventDatabase.cs | 47 +++++++++++++++++++++------ Globals/SaveSystem.cs | 8 +++-- Globals/StageProducer.cs | 1 + Globals/Translations/Translations.csv | 21 ++++++++---- 4 files changed, 58 insertions(+), 19 deletions(-) diff --git a/Classes/Events/EventDatabase.cs b/Classes/Events/EventDatabase.cs index 4ca580de..9088ed64 100644 --- a/Classes/Events/EventDatabase.cs +++ b/Classes/Events/EventDatabase.cs @@ -47,40 +47,40 @@ public partial class EventDatabase 1, "EVENT_EVENT2_DESC", ["EVENT_EVENT2_OPTION1", "EVENT_EVENT2_OPTION2"], - ["", "EVENT_EVENT1_OUTCOME1"], + ["", "EVENT_EVENT2_OUTCOME1"], [ (self) => { StageProducer.PlayerStats.Money -= 20; // [do nothing, get money back, win money, get note, get relic, heal] int spinOutcome = (int) - StageProducer.GlobalRng.RandWeighted([13, 8, 5, 5, 3, 3]); + StageProducer.GlobalRng.RandWeighted([13, 8, 5, 5, 3, 3]); //TODO: adjust odds switch (spinOutcome) { case 0: //do nothing AKA lose GD.Print("owned lol"); - self.OutcomeDescriptions[0] = "EVENT_EVENT1_OUTCOME2"; + self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME2"; break; case 1: // get money back GD.Print("refund"); - self.OutcomeDescriptions[0] = "EVENT_EVENT1_OUTCOME3"; + self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME3"; StageProducer.PlayerStats.Money += 20; break; case 2: // get triple money GD.Print("triple money"); - self.OutcomeDescriptions[0] = "EVENT_EVENT1_OUTCOME4"; + self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME4"; StageProducer.PlayerStats.Money += 60; break; case 3: // get random note GD.Print("random note"); - self.OutcomeDescriptions[0] = "EVENT_EVENT1_OUTCOME5"; + self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME5"; StageProducer.PlayerStats.AddNote( Scribe.GetRandomRewardNotes(1, StageProducer.CurRoom + 10)[0] ); break; case 4: // get random relic GD.Print("random relic"); - self.OutcomeDescriptions[0] = "EVENT_EVENT1_OUTCOME6"; + self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME6"; StageProducer.PlayerStats.AddRelic( Scribe.GetRandomRelics( 1, @@ -91,8 +91,8 @@ public partial class EventDatabase break; case 5: GD.Print("heal"); - self.OutcomeDescriptions[0] = "EVENT_EVENT1_OUTCOME7"; - StageProducer.PlayerStats.CurrentHealth = Math.Max( + self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME7"; + StageProducer.PlayerStats.CurrentHealth = Math.Min( StageProducer.PlayerStats.CurrentHealth + 20, StageProducer.PlayerStats.MaxHealth ); @@ -104,7 +104,34 @@ public partial class EventDatabase }, ], GD.Load("res://Classes/Events/Assets/TEMP.png"), - [() => StageProducer.PlayerStats.Money > 20, () => true] + [() => StageProducer.PlayerStats.Money >= 20, () => true] + ), + new EventTemplate( + 2, + "EVENT_EVENT3_DESC", + ["EVENT_EVENT3_OPTION1", "EVENT_EVENT3_OPTION2", "EVENT_EVENT3_OPTION3"], + ["EVENT_EVENT3_OUTCOME1", "EVENT_EVENT3_OUTCOME2", "EVENT_EVENT3_OUTCOME3"], + [ + (self) => + { + StageProducer.PlayerStats.CurrentHealth = Math.Min( + StageProducer.PlayerStats.CurrentHealth + 10, + StageProducer.PlayerStats.MaxHealth + ); + }, + (self) => + { + StageProducer.PlayerStats.MaxComboBar -= 5; + }, + (self) => + { + StageProducer.PlayerStats.Money -= 30; + StageProducer.PlayerStats.AddNote(Scribe.NoteDictionary[3]); + StageProducer.PlayerStats.AddNote(Scribe.NoteDictionary[3]); + }, + ], + GD.Load("res://Classes/Events/Assets/TEMP.png"), + [() => true, () => true, () => StageProducer.PlayerStats.Money >= 30] ), }; } diff --git a/Globals/SaveSystem.cs b/Globals/SaveSystem.cs index 7eb6b5b1..57da2020 100644 --- a/Globals/SaveSystem.cs +++ b/Globals/SaveSystem.cs @@ -386,6 +386,7 @@ public class SaveFile public int[] RelicIds { get; init; } public int PlayerHealth { get; init; } public int Shortcuts { get; init; } + public int PlayerMaxCombo { get; init; } public SaveFile( ulong rngSeed, @@ -396,7 +397,8 @@ public SaveFile( int playerHealth, int area, int money, - int shortcuts + int shortcuts, + int playerMaxCombo ) { RngSeed = rngSeed; @@ -408,6 +410,7 @@ int shortcuts Area = area; Money = money; Shortcuts = shortcuts; + PlayerMaxCombo = playerMaxCombo; } } @@ -424,7 +427,8 @@ public static void SaveGame() StageProducer.PlayerStats.CurrentHealth, StageProducer.CurLevel.Id, StageProducer.PlayerStats.Money, - StageProducer.PlayerStats.Shortcuts + StageProducer.PlayerStats.Shortcuts, + StageProducer.PlayerStats.MaxComboBar ); string json = JsonSerializer.Serialize(sv); diff --git a/Globals/StageProducer.cs b/Globals/StageProducer.cs index 23829762..c6c43000 100644 --- a/Globals/StageProducer.cs +++ b/Globals/StageProducer.cs @@ -104,6 +104,7 @@ private bool LoadGame() PlayerStats.CurrentHealth = sv.PlayerHealth; PlayerStats.Money = sv.Money; PlayerStats.Shortcuts = sv.Shortcuts; + PlayerStats.MaxComboBar = sv.PlayerMaxCombo; IsInitialized = true; return true; } diff --git a/Globals/Translations/Translations.csv b/Globals/Translations/Translations.csv index 2438e1f1..cb7e6b36 100644 --- a/Globals/Translations/Translations.csv +++ b/Globals/Translations/Translations.csv @@ -138,10 +138,17 @@ EVENT_EVENT1_OUTCOME3,"You got robbed of half your gold.",(TODO) EVENT_EVENT2_DESC,"There is a slot machine.",(TODO) EVENT_EVENT2_OPTION1,"Pay 20g to spin",(TODO) EVENT_EVENT2_OPTION2,"Ignore the machine",(TODO) -EVENT_EVENT1_OUTCOME1,"You saved your money and moved on.",(TODO) -EVENT_EVENT1_OUTCOME2,"You lost your money.",(TODO) -EVENT_EVENT1_OUTCOME3,"You refunded your money.",(TODO) -EVENT_EVENT1_OUTCOME4,"You tripled your money.",(TODO) -EVENT_EVENT1_OUTCOME5,"You gained a random note.",(TODO) -EVENT_EVENT1_OUTCOME6,"You gained a random relic.",(TODO) -EVENT_EVENT1_OUTCOME7,"You gained some health.",(TODO) \ No newline at end of file +EVENT_EVENT2_OUTCOME1,"You saved your money and moved on.",(TODO) +EVENT_EVENT2_OUTCOME2,"You lost your money.",(TODO) +EVENT_EVENT2_OUTCOME3,"You refunded your money.",(TODO) +EVENT_EVENT2_OUTCOME4,"You tripled your money.",(TODO) +EVENT_EVENT2_OUTCOME5,"You gained a random note.",(TODO) +EVENT_EVENT2_OUTCOME6,"You gained a random relic.",(TODO) +EVENT_EVENT2_OUTCOME7,"You gained some health.",(TODO) +EVENT_EVENT3_DESC,"There is a field medic on the side of the road.",(TODO) +EVENT_EVENT3_OPTION1,"Receive a bit of healing",(TODO) +EVENT_EVENT3_OPTION2,"Decrease max energy",(TODO) +EVENT_EVENT3_OPTION3,"Purchase 2 heal notes (30g)",(TODO) +EVENT_EVENT3_OUTCOME1,"The medic patched you up.\nYou restored 10 Health.",(TODO) +EVENT_EVENT3_OUTCOME2,"The medic gave you a shot of adrenaline.\nMax Energy reduced by 5.",(TODO) +EVENT_EVENT3_OUTCOME3,"The medic sold you some healing supplies.\nAdded 2 heal notes to your inventory.",(TODO) \ No newline at end of file From d4b994f7de9898941ab5ca3c25cbcc396f5fe17a Mon Sep 17 00:00:00 2001 From: cornerloan Date: Fri, 9 May 2025 22:23:42 -0700 Subject: [PATCH 13/19] Finished event 2 Now no longer costs money to play. All spin odds are equal chance to occur. Wheel colors are synced to events, in case we decide to add art to each segment. 4 positive events, 2 negative events --- Classes/Events/Assets/Event2.png | Bin 0 -> 14427 bytes Classes/Events/Assets/Event2.png.import | 34 +++++++++++ Classes/Events/EventDatabase.cs | 73 +++++++++++++++--------- Classes/Events/EventTemplate.cs | 6 +- Globals/Translations/Translations.csv | 20 +++---- Scenes/EventScene/EventScene.cs | 9 ++- 6 files changed, 100 insertions(+), 42 deletions(-) create mode 100644 Classes/Events/Assets/Event2.png create mode 100644 Classes/Events/Assets/Event2.png.import diff --git a/Classes/Events/Assets/Event2.png b/Classes/Events/Assets/Event2.png new file mode 100644 index 0000000000000000000000000000000000000000..b74a438e9e5c0cddeb52d2bef23dc45532def178 GIT binary patch literal 14427 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 Km8unNBK`;C0VH<- literal 0 HcmV?d00001 diff --git a/Classes/Events/Assets/Event2.png.import b/Classes/Events/Assets/Event2.png.import new file mode 100644 index 00000000..ddda9671 --- /dev/null +++ b/Classes/Events/Assets/Event2.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cex5vg2ycajdi" +path="res://.godot/imported/Event2.png-a647bc6675ac54fecafbb5f9d56de04d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Classes/Events/Assets/Event2.png" +dest_files=["res://.godot/imported/Event2.png-a647bc6675ac54fecafbb5f9d56de04d.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 diff --git a/Classes/Events/EventDatabase.cs b/Classes/Events/EventDatabase.cs index 9088ed64..c1adb133 100644 --- a/Classes/Events/EventDatabase.cs +++ b/Classes/Events/EventDatabase.cs @@ -1,5 +1,5 @@ using System; -using System.Collections.Generic; +using System.Threading.Tasks; using Godot; /// @@ -15,7 +15,7 @@ public partial class EventDatabase ["EVENT_EVENT1_OPTION1", "EVENT_EVENT1_OPTION2", "EVENT_EVENT1_OPTION3"], ["EVENT_EVENT1_OUTCOME1", "EVENT_EVENT1_OUTCOME2", "EVENT_EVENT1_OUTCOME3"], [ - (self) => + async (self, node) => { int randIndex = StageProducer.GlobalRng.RandiRange( 0, @@ -23,7 +23,7 @@ public partial class EventDatabase ); StageProducer.PlayerStats.RemoveNote(randIndex); }, - (self) => + async (self, node) => { int randIndex = StageProducer.GlobalRng.RandiRange( 0, @@ -31,7 +31,7 @@ public partial class EventDatabase ); StageProducer.PlayerStats.RemoveRelic(randIndex); }, - (self) => + async (self, node) => { StageProducer.PlayerStats.Money /= 2; }, @@ -49,36 +49,55 @@ public partial class EventDatabase ["EVENT_EVENT2_OPTION1", "EVENT_EVENT2_OPTION2"], ["", "EVENT_EVENT2_OUTCOME1"], [ - (self) => + async (self, node) => { - StageProducer.PlayerStats.Money -= 20; - // [do nothing, get money back, win money, get note, get relic, heal] - int spinOutcome = (int) - StageProducer.GlobalRng.RandWeighted([13, 8, 5, 5, 3, 3]); //TODO: adjust odds + var spinner = node.GetNodeOrNull("EventSprite"); + int spinOutcome = (int)StageProducer.GlobalRng.RandWeighted([1, 1, 1, 1, 1, 1]); + + int outcomeCount = 6; + float sectorAngle = 360f / outcomeCount; + float targetAngle = spinOutcome * sectorAngle; + float fullSpins = 6 * 360f; + float finalRotation = spinner.RotationDegrees % 360f + fullSpins + targetAngle; + + var tween = node.GetTree().CreateTween(); + tween + .TweenProperty(spinner, "rotation_degrees", finalRotation, 2.5f) + .SetTrans(Tween.TransitionType.Cubic) + .SetEase(Tween.EaseType.Out); + + var tcs = new TaskCompletionSource(); + tween.TweenCallback(Callable.From(() => tcs.SetResult(true))); + await tcs.Task; + switch (spinOutcome) { - case 0: //do nothing AKA lose - GD.Print("owned lol"); + case 0: + GD.Print("lost half money"); + StageProducer.PlayerStats.Money /= 2; self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME2"; break; - case 1: // get money back - GD.Print("refund"); + case 1: + GD.Print("took damage"); self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME3"; - StageProducer.PlayerStats.Money += 20; + StageProducer.PlayerStats.CurrentHealth = Math.Max( + 1, + StageProducer.PlayerStats.CurrentHealth - 10 + ); break; - case 2: // get triple money - GD.Print("triple money"); + case 2: + GD.Print("gain money"); self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME4"; - StageProducer.PlayerStats.Money += 60; + StageProducer.PlayerStats.Money += 50; break; - case 3: // get random note + case 3: GD.Print("random note"); self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME5"; StageProducer.PlayerStats.AddNote( Scribe.GetRandomRewardNotes(1, StageProducer.CurRoom + 10)[0] ); break; - case 4: // get random relic + case 4: GD.Print("random relic"); self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME6"; StageProducer.PlayerStats.AddRelic( @@ -98,13 +117,15 @@ public partial class EventDatabase ); break; } + + GD.Print($"new description {self.OutcomeDescriptions[0]}"); }, - (self) => { - //does nothing + async (self, node) => { + // does nothing }, ], - GD.Load("res://Classes/Events/Assets/TEMP.png"), - [() => StageProducer.PlayerStats.Money >= 20, () => true] + GD.Load("res://Classes/Events/Assets/Event2.png"), + [() => true, () => true] ), new EventTemplate( 2, @@ -112,18 +133,18 @@ public partial class EventDatabase ["EVENT_EVENT3_OPTION1", "EVENT_EVENT3_OPTION2", "EVENT_EVENT3_OPTION3"], ["EVENT_EVENT3_OUTCOME1", "EVENT_EVENT3_OUTCOME2", "EVENT_EVENT3_OUTCOME3"], [ - (self) => + async (self, node) => { StageProducer.PlayerStats.CurrentHealth = Math.Min( StageProducer.PlayerStats.CurrentHealth + 10, StageProducer.PlayerStats.MaxHealth ); }, - (self) => + async (self, node) => { StageProducer.PlayerStats.MaxComboBar -= 5; }, - (self) => + async (self, node) => { StageProducer.PlayerStats.Money -= 30; StageProducer.PlayerStats.AddNote(Scribe.NoteDictionary[3]); diff --git a/Classes/Events/EventTemplate.cs b/Classes/Events/EventTemplate.cs index 82b3ee47..912741ab 100644 --- a/Classes/Events/EventTemplate.cs +++ b/Classes/Events/EventTemplate.cs @@ -1,8 +1,8 @@ using System; -using FunkEngine; +using System.Threading.Tasks; using Godot; -public delegate void EventAction(EventTemplate self); +public delegate Task EventAction(EventTemplate self, Node contextNode); public delegate bool EventCondition(); public partial class EventTemplate @@ -12,8 +12,6 @@ public partial class EventTemplate public string[] ButtonDescriptions; public string[] OutcomeDescriptions; public Texture2D Texture; - - // Note: Actions are NOT exported since delegates cannot be serialized public EventAction[] OptionActions; public EventCondition[] OptionEnabledConditions; diff --git a/Globals/Translations/Translations.csv b/Globals/Translations/Translations.csv index cb7e6b36..5a0f51ff 100644 --- a/Globals/Translations/Translations.csv +++ b/Globals/Translations/Translations.csv @@ -135,16 +135,16 @@ EVENT_EVENT1_OPTION3,"Give them half your gold",(TODO) EVENT_EVENT1_OUTCOME1,"You got robbed of a random note.",(TODO) EVENT_EVENT1_OUTCOME2,"You got robbed of a random relic.",(TODO) EVENT_EVENT1_OUTCOME3,"You got robbed of half your gold.",(TODO) -EVENT_EVENT2_DESC,"There is a slot machine.",(TODO) -EVENT_EVENT2_OPTION1,"Pay 20g to spin",(TODO) -EVENT_EVENT2_OPTION2,"Ignore the machine",(TODO) -EVENT_EVENT2_OUTCOME1,"You saved your money and moved on.",(TODO) -EVENT_EVENT2_OUTCOME2,"You lost your money.",(TODO) -EVENT_EVENT2_OUTCOME3,"You refunded your money.",(TODO) -EVENT_EVENT2_OUTCOME4,"You tripled your money.",(TODO) -EVENT_EVENT2_OUTCOME5,"You gained a random note.",(TODO) -EVENT_EVENT2_OUTCOME6,"You gained a random relic.",(TODO) -EVENT_EVENT2_OUTCOME7,"You gained some health.",(TODO) +EVENT_EVENT2_DESC,"There is a wheel with different outcomes.",(TODO) +EVENT_EVENT2_OPTION1,"Spin the wheel",(TODO) +EVENT_EVENT2_OPTION2,"Ignore the cool wheel",(TODO) +EVENT_EVENT2_OUTCOME1,"You decided not to spin the wheel.",(TODO) +EVENT_EVENT2_OUTCOME2,"You lost half your money.",(TODO) +EVENT_EVENT2_OUTCOME3,"You took some damage.",(TODO) +EVENT_EVENT2_OUTCOME4,"You won a lot of money!",(TODO) +EVENT_EVENT2_OUTCOME5,"You gained a random note!",(TODO) +EVENT_EVENT2_OUTCOME6,"You gained a random relic!",(TODO) +EVENT_EVENT2_OUTCOME7,"You gained some health!",(TODO) EVENT_EVENT3_DESC,"There is a field medic on the side of the road.",(TODO) EVENT_EVENT3_OPTION1,"Receive a bit of healing",(TODO) EVENT_EVENT3_OPTION2,"Decrease max energy",(TODO) diff --git a/Scenes/EventScene/EventScene.cs b/Scenes/EventScene/EventScene.cs index 931c880f..769eaf73 100644 --- a/Scenes/EventScene/EventScene.cs +++ b/Scenes/EventScene/EventScene.cs @@ -82,10 +82,15 @@ public void DisplayEvent() button.Disabled = !isEnabled; int capturedIndex = i; - button.Pressed += () => + button.Pressed += async () => { GD.Print($"Selected option: {_eventReference.ButtonDescriptions[capturedIndex]}"); - _eventReference.OptionActions[capturedIndex]?.Invoke(_eventReference); + + var action = _eventReference.OptionActions[capturedIndex]; + if (action != null) + { + await action(_eventReference, this); + } AnyButtonPressed(capturedIndex); }; From 387f3a93f247fffd997812b522e649f31474bb61 Mon Sep 17 00:00:00 2001 From: cornerloan Date: Sat, 10 May 2025 00:06:49 -0700 Subject: [PATCH 14/19] async? more like not async if we have any events that have multiple different text outputs based on RNG we should set their initial output to "" --- Classes/Events/EventDatabase.cs | 121 +++++++++++++++----------------- Classes/Events/EventTemplate.cs | 3 +- Scenes/EventScene/EventScene.cs | 17 +++-- 3 files changed, 69 insertions(+), 72 deletions(-) diff --git a/Classes/Events/EventDatabase.cs b/Classes/Events/EventDatabase.cs index c1adb133..74495586 100644 --- a/Classes/Events/EventDatabase.cs +++ b/Classes/Events/EventDatabase.cs @@ -1,5 +1,4 @@ using System; -using System.Threading.Tasks; using Godot; /// @@ -15,7 +14,7 @@ public partial class EventDatabase ["EVENT_EVENT1_OPTION1", "EVENT_EVENT1_OPTION2", "EVENT_EVENT1_OPTION3"], ["EVENT_EVENT1_OUTCOME1", "EVENT_EVENT1_OUTCOME2", "EVENT_EVENT1_OUTCOME3"], [ - async (self, node) => + (self, node) => { int randIndex = StageProducer.GlobalRng.RandiRange( 0, @@ -23,7 +22,7 @@ public partial class EventDatabase ); StageProducer.PlayerStats.RemoveNote(randIndex); }, - async (self, node) => + (self, node) => { int randIndex = StageProducer.GlobalRng.RandiRange( 0, @@ -31,7 +30,7 @@ public partial class EventDatabase ); StageProducer.PlayerStats.RemoveRelic(randIndex); }, - async (self, node) => + (self, node) => { StageProducer.PlayerStats.Money /= 2; }, @@ -49,10 +48,10 @@ public partial class EventDatabase ["EVENT_EVENT2_OPTION1", "EVENT_EVENT2_OPTION2"], ["", "EVENT_EVENT2_OUTCOME1"], [ - async (self, node) => + (self, node) => { var spinner = node.GetNodeOrNull("EventSprite"); - int spinOutcome = (int)StageProducer.GlobalRng.RandWeighted([1, 1, 1, 1, 1, 1]); + int spinOutcome = (int)StageProducer.GlobalRng.RandiRange(0, 5); int outcomeCount = 6; float sectorAngle = 360f / outcomeCount; @@ -66,61 +65,57 @@ public partial class EventDatabase .SetTrans(Tween.TransitionType.Cubic) .SetEase(Tween.EaseType.Out); - var tcs = new TaskCompletionSource(); - tween.TweenCallback(Callable.From(() => tcs.SetResult(true))); - await tcs.Task; - - switch (spinOutcome) - { - case 0: - GD.Print("lost half money"); - StageProducer.PlayerStats.Money /= 2; - self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME2"; - break; - case 1: - GD.Print("took damage"); - self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME3"; - StageProducer.PlayerStats.CurrentHealth = Math.Max( - 1, - StageProducer.PlayerStats.CurrentHealth - 10 - ); - break; - case 2: - GD.Print("gain money"); - self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME4"; - StageProducer.PlayerStats.Money += 50; - break; - case 3: - GD.Print("random note"); - self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME5"; - StageProducer.PlayerStats.AddNote( - Scribe.GetRandomRewardNotes(1, StageProducer.CurRoom + 10)[0] - ); - break; - case 4: - GD.Print("random relic"); - self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME6"; - StageProducer.PlayerStats.AddRelic( - Scribe.GetRandomRelics( - 1, - StageProducer.CurRoom + 10, - StageProducer.PlayerStats.RarityOdds - )[0] - ); - break; - case 5: - GD.Print("heal"); - self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME7"; - StageProducer.PlayerStats.CurrentHealth = Math.Min( - StageProducer.PlayerStats.CurrentHealth + 20, - StageProducer.PlayerStats.MaxHealth - ); - break; - } - - GD.Print($"new description {self.OutcomeDescriptions[0]}"); + // Defer execution of the outcome until the tween finishes + tween.TweenCallback( + Callable.From(() => + { + switch (spinOutcome) + { + case 0: + StageProducer.PlayerStats.Money /= 2; + self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME2"; + break; + case 1: + self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME3"; + StageProducer.PlayerStats.CurrentHealth = Math.Max( + 1, + StageProducer.PlayerStats.CurrentHealth - 10 + ); + break; + case 2: + self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME4"; + StageProducer.PlayerStats.Money += 50; + break; + case 3: + self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME5"; + StageProducer.PlayerStats.AddNote( + Scribe.GetRandomRewardNotes(1, StageProducer.CurRoom + 10)[ + 0 + ] + ); + break; + case 4: + self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME6"; + StageProducer.PlayerStats.AddRelic( + Scribe.GetRandomRelics( + 1, + StageProducer.CurRoom + 10, + StageProducer.PlayerStats.RarityOdds + )[0] + ); + break; + case 5: + self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME7"; + StageProducer.PlayerStats.CurrentHealth = Math.Min( + StageProducer.PlayerStats.CurrentHealth + 20, + StageProducer.PlayerStats.MaxHealth + ); + break; + } + }) + ); }, - async (self, node) => { + (self, node) => { // does nothing }, ], @@ -133,18 +128,18 @@ public partial class EventDatabase ["EVENT_EVENT3_OPTION1", "EVENT_EVENT3_OPTION2", "EVENT_EVENT3_OPTION3"], ["EVENT_EVENT3_OUTCOME1", "EVENT_EVENT3_OUTCOME2", "EVENT_EVENT3_OUTCOME3"], [ - async (self, node) => + (self, node) => { StageProducer.PlayerStats.CurrentHealth = Math.Min( StageProducer.PlayerStats.CurrentHealth + 10, StageProducer.PlayerStats.MaxHealth ); }, - async (self, node) => + (self, node) => { StageProducer.PlayerStats.MaxComboBar -= 5; }, - async (self, node) => + (self, node) => { StageProducer.PlayerStats.Money -= 30; StageProducer.PlayerStats.AddNote(Scribe.NoteDictionary[3]); diff --git a/Classes/Events/EventTemplate.cs b/Classes/Events/EventTemplate.cs index 912741ab..d16c8ec2 100644 --- a/Classes/Events/EventTemplate.cs +++ b/Classes/Events/EventTemplate.cs @@ -1,8 +1,7 @@ using System; -using System.Threading.Tasks; using Godot; -public delegate Task EventAction(EventTemplate self, Node contextNode); +public delegate void EventAction(EventTemplate self, Node contextNode); public delegate bool EventCondition(); public partial class EventTemplate diff --git a/Scenes/EventScene/EventScene.cs b/Scenes/EventScene/EventScene.cs index 769eaf73..3140a398 100644 --- a/Scenes/EventScene/EventScene.cs +++ b/Scenes/EventScene/EventScene.cs @@ -22,6 +22,7 @@ public partial class EventScene : Node private static Theme _buttonTheme = GD.Load("res://Scenes/UI/Assets/GeneralTheme.tres"); // Store the theme private EventTemplate _eventReference; + private int updateOutputIndex; public static EventScene NewEventScene() { @@ -53,6 +54,11 @@ public override void _Process(double delta) { _buttonContainer.GetChild(0).GrabFocus(); } + + if (_eventDescription.Text == "") + { + _eventDescription.Text = _eventReference.OutcomeDescriptions[updateOutputIndex]; + } } /// @@ -82,15 +88,10 @@ public void DisplayEvent() button.Disabled = !isEnabled; int capturedIndex = i; - button.Pressed += async () => + button.Pressed += () => { GD.Print($"Selected option: {_eventReference.ButtonDescriptions[capturedIndex]}"); - - var action = _eventReference.OptionActions[capturedIndex]; - if (action != null) - { - await action(_eventReference, this); - } + _eventReference.OptionActions[capturedIndex]?.Invoke(_eventReference, this); AnyButtonPressed(capturedIndex); }; @@ -106,6 +107,8 @@ public void DisplayEvent() private void AnyButtonPressed(int capturedIndex) { + updateOutputIndex = capturedIndex; + foreach (var choices in _buttonContainer.GetChildren()) { if (choices is not Button) From a60c792b62f7dffc7eaeb954eb62fb79caf99cb6 Mon Sep 17 00:00:00 2001 From: LifeHckr Date: Sat, 10 May 2025 12:40:46 -0700 Subject: [PATCH 15/19] Refine event scene EventActions take EventScene as a node Conditions and actions can be null instead of holding a func point to () => true Handle continue button in scene instead of ContinuePressed --- Classes/Events/Assets/Event2.png | Bin 14427 -> 1286 bytes Classes/Events/EventDatabase.cs | 21 +++++---- Classes/Events/EventTemplate.cs | 6 ++- Scenes/EventScene/EventScene.cs | 72 +++++++++++++----------------- Scenes/EventScene/EventScene.tscn | 29 ++++++++++-- 5 files changed, 70 insertions(+), 58 deletions(-) diff --git a/Classes/Events/Assets/Event2.png b/Classes/Events/Assets/Event2.png index b74a438e9e5c0cddeb52d2bef23dc45532def178..9d3bc2e9c57be24b0c633afdd05daab660dcf419 100644 GIT binary patch literal 1286 zcmV+h1^N1kP)Px(z)3_wRCt{2oy~FEFc5_wGafhKWKsioNeeE=ZYLMJoTLO_gc_1@8t{cV*h{Y< zfWkj^DSb1ZWE@+B_Pw_YN})JG4@=_DPfb=)8L5jrDYh{t=>e>@zHf_rzET!+RB&Ih z5B`D%nLUr;5oP%EAH9GDI4yW;v14&XVS)^+!-xZ~Zl}VxD)>1_5GNU3Ytr*zCvG2A zco&|G-l^zukfXv&DS8M`Dw@`)wE&Bj!n-&^jGmRrEO;;e`sV_u`{K_5>E|I)+%$O1 z)%7p-fLnd$Suw`o@MtkVt!Y>wJPnI6W_iPM^hMtv?dTl$FF&z?mY zDm~;_$o-tdqovJ6H6dyUuoz>oRs1(Bu-1CdP9?I{V@L!hM6+YXkmUMXOz+MTyd#?6 zcfXJM$rSIBN)oWEmP5oAA2?}AS>y_kReb5KD96U7BIF3LOXmY=?&p+~7J&j4guASea^`svcEkf}>Rs1<1{K1ZDZdqbrFZVI%zA7B^h z{V?;$b)@rA>)9AU@C6^|xB-HnEFvCSw^sK9Y!~!T$u5YvGqYOba9Ug^+#D)CU60KF zt_f?cP5}t}{0j5%6#($-peqgc^Sfcx?Sj_U^ZOfs4-t&Pcd0LbofMxD;G}h?oPV?&nCF1#bTb1SX(n@d5d* z$Q59+*5Xdv+mj0LxgQXgfZFaSB&R@>0GCL}6Wxb#EBA9o4dhV!0fZ!=NAUrfttceG zbr@G-%l&|W1oU!0AuR=40$fv2$T|0K{sW`gK<@2+PV0djQ+!}x3mRE`Ku#-)5#ZX2 z5{Y$x)DJMKwW87P=hSXRDa8lUTF^BKXGkqRFkl8qaz8MB7UUc@yA??*KBu%5<+vZn zOTe`iIph{U>lYYFNs#P*A}0kU#Rtk}z{Mw_wD?88$XM^37fOQ$_Y*NGpo=SN+-I`Z z>|gJg>J#BFCKbgewnSjA2P)LB);4rPpe608ML8{}ig{b?eiwehoR-$(!c$PQ<+!xC zNN@VM>!`{r7hP(%9G7l4bhgj0jSp29y85#94V}B+(pLNw>0ORv?VEGP|<;Y zh3|S0hjnu|Iu#zb1D$I!`mJg2ux=#?cRJAD?LI~eKpdU&_;ydJqPWEdyq^j){P_=G wK!B5T(9|t$;FDCuJzsGP+936ndKJ&@KQ5-KyvcxIIsgCw07*qoM6N<$f@D=tXaE2J literal 14427 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 Km8unNBK`;C0VH<- diff --git a/Classes/Events/EventDatabase.cs b/Classes/Events/EventDatabase.cs index 74495586..e5c5d450 100644 --- a/Classes/Events/EventDatabase.cs +++ b/Classes/Events/EventDatabase.cs @@ -4,7 +4,7 @@ /// /// Holds all game events and their associated logic. /// -public partial class EventDatabase +public class EventDatabase { public static readonly EventTemplate[] EventDictionary = new[] { @@ -18,7 +18,7 @@ public partial class EventDatabase { int randIndex = StageProducer.GlobalRng.RandiRange( 0, - StageProducer.PlayerStats.CurNotes.Length + StageProducer.PlayerStats.CurNotes.Length - 1 ); StageProducer.PlayerStats.RemoveNote(randIndex); }, @@ -26,7 +26,7 @@ public partial class EventDatabase { int randIndex = StageProducer.GlobalRng.RandiRange( 0, - StageProducer.PlayerStats.CurRelics.Length + StageProducer.PlayerStats.CurRelics.Length - 1 ); StageProducer.PlayerStats.RemoveRelic(randIndex); }, @@ -50,8 +50,8 @@ public partial class EventDatabase [ (self, node) => { - var spinner = node.GetNodeOrNull("EventSprite"); - int spinOutcome = (int)StageProducer.GlobalRng.RandiRange(0, 5); + var spinner = node.EventSprite; + int spinOutcome = StageProducer.GlobalRng.RandiRange(0, 5); int outcomeCount = 6; float sectorAngle = 360f / outcomeCount; @@ -59,7 +59,7 @@ public partial class EventDatabase float fullSpins = 6 * 360f; float finalRotation = spinner.RotationDegrees % 360f + fullSpins + targetAngle; - var tween = node.GetTree().CreateTween(); + var tween = node.CreateTween(); tween .TweenProperty(spinner, "rotation_degrees", finalRotation, 2.5f) .SetTrans(Tween.TransitionType.Cubic) @@ -112,15 +112,14 @@ public partial class EventDatabase ); break; } + node.AnyButtonPressed(0); }) ); }, - (self, node) => { - // does nothing - }, + null, ], GD.Load("res://Classes/Events/Assets/Event2.png"), - [() => true, () => true] + [null, null] ), new EventTemplate( 2, @@ -147,7 +146,7 @@ public partial class EventDatabase }, ], GD.Load("res://Classes/Events/Assets/TEMP.png"), - [() => true, () => true, () => StageProducer.PlayerStats.Money >= 30] + [null, null, () => StageProducer.PlayerStats.Money >= 30] ), }; } diff --git a/Classes/Events/EventTemplate.cs b/Classes/Events/EventTemplate.cs index d16c8ec2..104afb86 100644 --- a/Classes/Events/EventTemplate.cs +++ b/Classes/Events/EventTemplate.cs @@ -1,10 +1,12 @@ using System; using Godot; -public delegate void EventAction(EventTemplate self, Node contextNode); +public delegate void EventAction(EventTemplate self, EventScene contextNode); public delegate bool EventCondition(); -public partial class EventTemplate +//TODO: Consider making event option struct for better parallelizing of option parameters + +public class EventTemplate { public int Id; public string EventDescription; diff --git a/Scenes/EventScene/EventScene.cs b/Scenes/EventScene/EventScene.cs index 3140a398..ff565562 100644 --- a/Scenes/EventScene/EventScene.cs +++ b/Scenes/EventScene/EventScene.cs @@ -19,21 +19,19 @@ public partial class EventScene : Node [Export] private VBoxContainer _buttonContainer; - private static Theme _buttonTheme = GD.Load("res://Scenes/UI/Assets/GeneralTheme.tres"); // Store the theme + [Export] + private Button _continueButton; - private EventTemplate _eventReference; - private int updateOutputIndex; + [Export] + private MarginContainer _continueContainer; - public static EventScene NewEventScene() - { - EventScene result = GD.Load(LoadPath).Instantiate(); - result._player = GD.Load(PlayerPuppet.LoadPath).Instantiate(); - result.PlayerMarker.AddChild(result._player); - result.DisplayEvent(); - return result; - } + private static readonly Theme ButtonTheme = GD.Load( + "res://Scenes/UI/Assets/GeneralTheme.tres" + ); // Store the theme + + private EventTemplate _eventReference; + private int _updateOutputIndex; - //Eventually remove this, once integrated into game public override void _Ready() { GD.Print("loaded event"); @@ -57,14 +55,13 @@ public override void _Process(double delta) if (_eventDescription.Text == "") { - _eventDescription.Text = _eventReference.OutcomeDescriptions[updateOutputIndex]; + _eventDescription.Text = _eventReference.OutcomeDescriptions[_updateOutputIndex]; } } /// - /// Displays the event with the given index. + /// Displays the set event. /// - /// Index of the event in EventDatabase. public void DisplayEvent() { _eventDescription.Text = _eventReference.EventDescription; @@ -75,15 +72,25 @@ public void DisplayEvent() var button = new Button { Text = _eventReference.ButtonDescriptions[i], - Theme = _buttonTheme, + Theme = ButtonTheme, SizeFlagsVertical = Control.SizeFlags.Expand | Control.SizeFlags.Fill, }; - // Check if the button should be enabled - bool isEnabled = + bool isEnabled; + if ( _eventReference.OptionEnabledConditions == null || _eventReference.OptionEnabledConditions.Length <= i - || _eventReference.OptionEnabledConditions[i]?.Invoke() != false; + ) + { + GD.PushWarning("Event Conditions are invalid for event: " + _eventReference.Id); + isEnabled = true; + } + else + { // Check if the button should be enabled + isEnabled = + _eventReference.OptionEnabledConditions[i] == null + || _eventReference.OptionEnabledConditions[i].Invoke(); + } button.Disabled = !isEnabled; @@ -105,29 +112,12 @@ public void DisplayEvent() } } - private void AnyButtonPressed(int capturedIndex) + public void AnyButtonPressed(int capturedIndex) { - updateOutputIndex = capturedIndex; - - foreach (var choices in _buttonContainer.GetChildren()) - { - if (choices is not Button) - continue; - choices.QueueFree(); - } - + _updateOutputIndex = capturedIndex; + _buttonContainer.GetParent().Visible = false; + _continueContainer.Visible = _eventReference.OutcomeDescriptions[capturedIndex] != ""; _eventDescription.Text = _eventReference.OutcomeDescriptions[capturedIndex]; - var button = new Button { Text = "EVENT_CONTINUE_BUTTON", Theme = _buttonTheme }; - - button.Pressed += ContinuePressed; - - button.SizeFlagsVertical = Control.SizeFlags.Expand | Control.SizeFlags.Fill; - button.CallDeferred("grab_focus"); - _buttonContainer.AddChild(button); - } - - private void ContinuePressed() - { - StageProducer.LiveInstance.TransitionStage(Stages.Map); + _continueButton.GrabFocus(); } } diff --git a/Scenes/EventScene/EventScene.tscn b/Scenes/EventScene/EventScene.tscn index 7e0d84c4..92dbbd0d 100644 --- a/Scenes/EventScene/EventScene.tscn +++ b/Scenes/EventScene/EventScene.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=8 format=3 uid="uid://u7oppwtmvmci"] +[gd_scene load_steps=10 format=3 uid="uid://u7oppwtmvmci"] [ext_resource type="Script" uid="uid://md1vhln8ji5h" path="res://Scenes/EventScene/EventScene.cs" id="1_x82kl"] [ext_resource type="AudioStream" uid="uid://be5ial13ynf3o" path="res://Audio/Song1.ogg" id="2_vywvm"] @@ -7,14 +7,18 @@ [ext_resource type="Texture2D" uid="uid://8u3xvcma81d" path="res://Scenes/UI/Assets/UI_CrystalFrame.png" id="5_erk58"] [ext_resource type="Script" uid="uid://cp6t6haqyef7o" path="res://Scenes/AreaBasedBackground.cs" id="5_v3lan"] [ext_resource type="Texture2D" uid="uid://burj10os057fx" path="res://Scenes/UI/Assets/UI_CrystalFrameInset.png" id="6_4prsq"] +[ext_resource type="Theme" uid="uid://d37e3tpsbxwak" path="res://Scenes/UI/Assets/GeneralTheme.tres" id="8_4prsq"] +[ext_resource type="Script" uid="uid://cahjluc6v7ked" path="res://Scenes/UI/TitleScreen/Scripts/SceneChange.cs" id="9_lw2xf"] -[node name="EventScene" type="Node2D" node_paths=PackedStringArray("PlayerMarker", "EventSprite", "_eventDescription", "_buttonContainer")] +[node name="EventScene" type="Node2D" node_paths=PackedStringArray("PlayerMarker", "EventSprite", "_eventDescription", "_buttonContainer", "_continueButton", "_continueContainer")] process_mode = 1 script = ExtResource("1_x82kl") PlayerMarker = NodePath("PlayerMarker") EventSprite = NodePath("EventSprite") _eventDescription = NodePath("Control/MarginContainer/PanelContainer/HBoxContainer/DescBox/DescMargin/Description") _buttonContainer = NodePath("Control/MarginContainer/PanelContainer/HBoxContainer/ButtonContainer/VBoxContainer") +_continueButton = NodePath("Control/MarginContainer/PanelContainer/HBoxContainer/ContinueContainer/ContinueButton") +_continueContainer = NodePath("Control/MarginContainer/PanelContainer/HBoxContainer/ContinueContainer") [node name="UILayer" type="CanvasLayer" parent="." node_paths=PackedStringArray("CurSceneNode")] script = ExtResource("2_x82kl") @@ -87,7 +91,7 @@ size_flags_horizontal = 3 size_flags_vertical = 3 theme_override_constants/margin_left = 5 theme_override_constants/margin_top = 5 -theme_override_constants/margin_right = -10 +theme_override_constants/margin_right = 5 theme_override_constants/margin_bottom = 5 [node name="DescBackground" type="NinePatchRect" parent="Control/MarginContainer/PanelContainer/HBoxContainer/DescBox"] @@ -100,6 +104,7 @@ patch_margin_bottom = 7 [node name="DescMargin" type="MarginContainer" parent="Control/MarginContainer/PanelContainer/HBoxContainer/DescBox"] layout_mode = 2 +size_flags_stretch_ratio = 0.0 theme_override_constants/margin_left = 0 theme_override_constants/margin_top = 0 theme_override_constants/margin_right = 0 @@ -117,10 +122,26 @@ text_overrun_behavior = 1 [node name="ButtonContainer" type="MarginContainer" parent="Control/MarginContainer/PanelContainer/HBoxContainer"] layout_mode = 2 -theme_override_constants/margin_left = 10 +theme_override_constants/margin_left = -5 theme_override_constants/margin_top = 7 theme_override_constants/margin_right = 10 theme_override_constants/margin_bottom = 7 [node name="VBoxContainer" type="VBoxContainer" parent="Control/MarginContainer/PanelContainer/HBoxContainer/ButtonContainer"] layout_mode = 2 + +[node name="ContinueContainer" type="MarginContainer" parent="Control/MarginContainer/PanelContainer/HBoxContainer"] +visible = false +layout_mode = 2 +theme_override_constants/margin_left = -5 +theme_override_constants/margin_top = 7 +theme_override_constants/margin_right = 10 +theme_override_constants/margin_bottom = 7 + +[node name="ContinueButton" type="Button" parent="Control/MarginContainer/PanelContainer/HBoxContainer/ContinueContainer"] +layout_mode = 2 +size_flags_vertical = 8 +theme = ExtResource("8_4prsq") +text = "EVENT_CONTINUE_BUTTON" +script = ExtResource("9_lw2xf") +ScenePath = 7 From a2d830d25567dbfd207e26d6212c398694d39bf5 Mon Sep 17 00:00:00 2001 From: LifeHckr Date: Sat, 10 May 2025 12:45:27 -0700 Subject: [PATCH 16/19] Fix Wheel event not resetting Events pull from a common reference, so modifying them modifies future uses. --- Classes/Events/EventDatabase.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Classes/Events/EventDatabase.cs b/Classes/Events/EventDatabase.cs index e5c5d450..c72350d5 100644 --- a/Classes/Events/EventDatabase.cs +++ b/Classes/Events/EventDatabase.cs @@ -113,6 +113,7 @@ public class EventDatabase break; } node.AnyButtonPressed(0); + self.OutcomeDescriptions[0] = ""; //Will need to fix later, currently changes the primary reference }) ); }, From 051e3f72a3ce71a8445509f7e4ec5ff6a3d0ffd5 Mon Sep 17 00:00:00 2001 From: LifeHckr Date: Sat, 10 May 2025 12:49:57 -0700 Subject: [PATCH 17/19] Simplify EventScene Process Better handling different continue container for grab focus --- Scenes/EventScene/EventScene.cs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/Scenes/EventScene/EventScene.cs b/Scenes/EventScene/EventScene.cs index ff565562..eb236c62 100644 --- a/Scenes/EventScene/EventScene.cs +++ b/Scenes/EventScene/EventScene.cs @@ -48,14 +48,12 @@ public override void _Ready() public override void _Process(double delta) { - if (GetViewport().GuiGetFocusOwner() == null && _buttonContainer != null) + if (GetViewport().GuiGetFocusOwner() == null) { - _buttonContainer.GetChild(0).GrabFocus(); - } - - if (_eventDescription.Text == "") - { - _eventDescription.Text = _eventReference.OutcomeDescriptions[_updateOutputIndex]; + if (_continueContainer.Visible) + _continueButton.GrabFocus(); + else + _buttonContainer.GetChild(0).GrabFocus(); } } From d3d3088581443de091aa78ca8de0f11560e85ea8 Mon Sep 17 00:00:00 2001 From: cornerloan Date: Sun, 11 May 2025 19:38:55 -0700 Subject: [PATCH 18/19] Goodbye heathcliff cat, you will be missed Don't forget to RSVP to his funeral. --- Classes/Events/Assets/Event1.png | Bin 0 -> 13993 bytes .../{TEMP.png.import => Event1.png.import} | 8 ++--- Classes/Events/Assets/Event3.png | Bin 0 -> 13993 bytes Classes/Events/Assets/Event3.png.import | 34 ++++++++++++++++++ Classes/Events/Assets/TEMP.png | Bin 26591 -> 0 bytes Classes/Events/EventDatabase.cs | 4 +-- 6 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 Classes/Events/Assets/Event1.png rename Classes/Events/Assets/{TEMP.png.import => Event1.png.import} (68%) create mode 100644 Classes/Events/Assets/Event3.png create mode 100644 Classes/Events/Assets/Event3.png.import delete mode 100644 Classes/Events/Assets/TEMP.png diff --git a/Classes/Events/Assets/Event1.png b/Classes/Events/Assets/Event1.png new file mode 100644 index 0000000000000000000000000000000000000000..302a42986ced62f800ff66e49d967295ed948418 GIT binary patch literal 13993 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 Cv_-%G literal 0 HcmV?d00001 diff --git a/Classes/Events/Assets/TEMP.png.import b/Classes/Events/Assets/Event1.png.import similarity index 68% rename from Classes/Events/Assets/TEMP.png.import rename to Classes/Events/Assets/Event1.png.import index 0d7c4160..2a9b08e8 100644 --- a/Classes/Events/Assets/TEMP.png.import +++ b/Classes/Events/Assets/Event1.png.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://cy15tmixv0b6" -path="res://.godot/imported/TEMP.png-782c35a0eebabf4d103f16dcac6860f5.ctex" +uid="uid://76wufdnhkrvk" +path="res://.godot/imported/Event1.png-2f5f476395c8adde38110b361ff5d5f3.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://Classes/Events/Assets/TEMP.png" -dest_files=["res://.godot/imported/TEMP.png-782c35a0eebabf4d103f16dcac6860f5.ctex"] +source_file="res://Classes/Events/Assets/Event1.png" +dest_files=["res://.godot/imported/Event1.png-2f5f476395c8adde38110b361ff5d5f3.ctex"] [params] diff --git a/Classes/Events/Assets/Event3.png b/Classes/Events/Assets/Event3.png new file mode 100644 index 0000000000000000000000000000000000000000..302a42986ced62f800ff66e49d967295ed948418 GIT binary patch literal 13993 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 Cv_-%G literal 0 HcmV?d00001 diff --git a/Classes/Events/Assets/Event3.png.import b/Classes/Events/Assets/Event3.png.import new file mode 100644 index 00000000..e2a824b9 --- /dev/null +++ b/Classes/Events/Assets/Event3.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c0d0dwwnotlfq" +path="res://.godot/imported/Event3.png-445c0675f61362532d1032be33503df0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Classes/Events/Assets/Event3.png" +dest_files=["res://.godot/imported/Event3.png-445c0675f61362532d1032be33503df0.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 diff --git a/Classes/Events/Assets/TEMP.png b/Classes/Events/Assets/TEMP.png deleted file mode 100644 index c789df6a251ead3400b22187c0b3bff95441fdd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26591 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 iwd3DE|Ni-9ef~eRt-N@!lUqjs0000 diff --git a/Classes/Events/EventDatabase.cs b/Classes/Events/EventDatabase.cs index c72350d5..d6d7cb1d 100644 --- a/Classes/Events/EventDatabase.cs +++ b/Classes/Events/EventDatabase.cs @@ -35,7 +35,7 @@ public class EventDatabase StageProducer.PlayerStats.Money /= 2; }, ], - GD.Load("res://Classes/Events/Assets/TEMP.png"), + GD.Load("res://Classes/Events/Assets/Event1.png"), [ () => StageProducer.PlayerStats.CurNotes.Length > 0, () => StageProducer.PlayerStats.CurRelics.Length > 0, @@ -146,7 +146,7 @@ public class EventDatabase StageProducer.PlayerStats.AddNote(Scribe.NoteDictionary[3]); }, ], - GD.Load("res://Classes/Events/Assets/TEMP.png"), + GD.Load("res://Classes/Events/Assets/Event3.png"), [null, null, () => StageProducer.PlayerStats.Money >= 30] ), }; From a15583c439391b70df12daf5755c5cac245d9c4f Mon Sep 17 00:00:00 2001 From: Jarod Spangler Date: Sun, 11 May 2025 19:48:29 -0700 Subject: [PATCH 19/19] Unscrewing up my screw up --- Globals/StageProducer.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Globals/StageProducer.cs b/Globals/StageProducer.cs index dc95a4f4..535dbce5 100644 --- a/Globals/StageProducer.cs +++ b/Globals/StageProducer.cs @@ -153,7 +153,6 @@ public void PreloadScene(int nextRoomIdx) _preloadStage = GD.Load(ShopScene.LoadPath).Instantiate(); }); break; - case Stages.Event: case Stages.Chest: _loadTask = Task.Run(() => {