From 89c0c666c788989f5a66dc334d341e45ab3e6a3a Mon Sep 17 00:00:00 2001 From: LifeHckr Date: Thu, 8 May 2025 16:04:13 -0700 Subject: [PATCH 1/7] 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 2/7] 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 3/7] 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 4/7] 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 14b38735b0807e5056476145575dd3da0951d2e2 Mon Sep 17 00:00:00 2001 From: LifeHckr Date: Sat, 10 May 2025 22:11:44 -0700 Subject: [PATCH 5/7] Fix Effect Application Effects aren't placed at <= 0 hp Battle Director effectively handles false status application Battle director creates instances of status effects for each enemy, if multiple Renamed GetInstance for clarity --- Classes/StatusEffects/StatusEffect.cs | 2 +- Globals/Scribe.cs | 18 +++++++++++++++--- .../BattleDirector/Scripts/BattleDirector.cs | 13 ++++++++----- Scenes/Puppets/Scripts/PuppetTemplate.cs | 2 ++ 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/Classes/StatusEffects/StatusEffect.cs b/Classes/StatusEffects/StatusEffect.cs index 5229e49f..e36ed1db 100644 --- a/Classes/StatusEffects/StatusEffect.cs +++ b/Classes/StatusEffects/StatusEffect.cs @@ -116,7 +116,7 @@ public StatusEffect InitStatus( return this; } - public StatusEffect GetInstance(int count = 1) + public StatusEffect CreateInstance(int count = 1) { StatusEffect result = GD.Load(LoadPath).Instantiate(); result.SetCount(count); diff --git a/Globals/Scribe.cs b/Globals/Scribe.cs index edcc0e14..944ffcae 100644 --- a/Globals/Scribe.cs +++ b/Globals/Scribe.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Linq; using FunkEngine; @@ -96,7 +97,7 @@ public partial class Scribe : Node { if (timing == Timing.Miss) return; - director.AddStatus(Targetting.Player, StatusEffect.Block.GetInstance()); //todo: should scale with timing???? + director.AddStatus(Targetting.Player, StatusEffect.Block.CreateInstance()); //todo: should scale with timing???? } ), new Note( @@ -135,7 +136,7 @@ public partial class Scribe : Node { if (timing == Timing.Miss) return; - director.AddStatus(Targetting.First, StatusEffect.Poison.GetInstance((int)timing)); + director.AddStatus(Targetting.First, StatusEffect.Poison, (int)timing); } ), new Note( @@ -178,6 +179,17 @@ public partial class Scribe : Node ); } ), + new Note( + 13, + "Parasifly", + GD.Load("res://Classes/Notes/Assets/Note_Parasifly.png"), + 1, + (director, note, timing) => + { + int amt = Math.Max((3 - (int)timing) * note.GetBaseVal(), 0); + director.AddStatus(Targetting.All, StatusEffect.Block, amt); + } + ), }; public static readonly RelicTemplate[] RelicDictionary = new[] @@ -395,7 +407,7 @@ public partial class Scribe : Node e is BattleDirector.Harbinger.OnDamageInstanceArgs dmgArgs && dmgArgs.Dmg.Target == e.BD.Player && dmgArgs.Dmg.Damage > 0 - && e.BD.Player.HasStatus(StatusEffect.Block.GetInstance()) + && e.BD.Player.HasStatus(StatusEffect.Block.CreateInstance()) ) { e.BD.DealDamage(Targetting.First, val, null); diff --git a/Scenes/BattleDirector/Scripts/BattleDirector.cs b/Scenes/BattleDirector/Scripts/BattleDirector.cs index 4a228c1f..1b137ba5 100644 --- a/Scenes/BattleDirector/Scripts/BattleDirector.cs +++ b/Scenes/BattleDirector/Scripts/BattleDirector.cs @@ -371,16 +371,19 @@ public void DealDamage(Targetting targetting, int damage, PuppetTemplate source) } } - public void AddStatus(Targetting targetting, StatusEffect status) + public void AddStatus(Targetting targetting, StatusEffect status, int amount = 1) { + if (amount == 0) + return; PuppetTemplate[] targets = GetTargets(targetting); foreach (PuppetTemplate target in targets) { - target.AddStatusEffect(status); + StatusEffect eff = status.CreateInstance(amount); + if (!target.AddStatusEffect(eff)) + continue; + eff.StatusEnd += RemoveStatus; //If new status, add effect events + AddEvent(eff); } - - status.StatusEnd += RemoveStatus; - AddEvent(status); } public void RemoveStatus(StatusEffect status) diff --git a/Scenes/Puppets/Scripts/PuppetTemplate.cs b/Scenes/Puppets/Scripts/PuppetTemplate.cs index 9f69c969..09b7caec 100644 --- a/Scenes/Puppets/Scripts/PuppetTemplate.cs +++ b/Scenes/Puppets/Scripts/PuppetTemplate.cs @@ -170,6 +170,8 @@ public int GetCurrentHealth() /// public bool AddStatusEffect(StatusEffect effect) { + if (CurrentHealth <= 0) + return false; int index = StatusEffects.FindIndex(sEff => sEff.StatusName == effect.StatusName); if (index != -1) //If status of same name -> stack -> return false { From b3c0e66f5f280c8743071abd7964d339cec692c8 Mon Sep 17 00:00:00 2001 From: LifeHckr Date: Sat, 10 May 2025 22:12:37 -0700 Subject: [PATCH 6/7] Added PFly effects PFly adds shield after death and from enemy note Updated GWS note icon for easier visibility --- Classes/Notes/Assets/Note_GWS.png | Bin 607 -> 455 bytes Classes/Notes/Assets/Note_Parasifly.png | Bin 0 -> 427 bytes .../Notes/Assets/Note_Parasifly.png.import | 34 ++++++++++++++++++ .../Puppets/Enemies/Parasifly/P_Parasifly.cs | 33 ++++++++++++++++- 4 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 Classes/Notes/Assets/Note_Parasifly.png create mode 100644 Classes/Notes/Assets/Note_Parasifly.png.import diff --git a/Classes/Notes/Assets/Note_GWS.png b/Classes/Notes/Assets/Note_GWS.png index be47556ea39dd180cc29d6f9a6c77997e7a3a78a..204ecab92a524d8bf77ef1fed6054333e04d92df 100644 GIT binary patch delta 417 zcmV;S0bc&!1jhrAFneH1*oy^QbKomSvg(m}3 z?Yo{CT+Sd0w+2j?6OR>mRC?w~l$&+cKal~g5LW4>n9aN!TYo<22#mmHZIxilE-79;qnuyGL zCL-$KLQVO%bGHdWD)Peuk0e{AhB)FD$ld!)w#T##JvvGcO z+fdNmd&GlRumy@ru8ri_Nj3;=w6yfz0ehV%>$(8%gJ}Zinfxx?c0d;i*E1eQY7Xyq z!R?Xzdnhie(M4jK2HvrR%bSszL%(R26C*4ALy`dKD;jx8i%Bu1K$LYFnYO>WyT5QX0u-TDS1pjx}ERUabgHFAQSqZdoP zc2`bSklO$Sd;n%44Kt*MKT`4lLNZ12dovtSChU;+-fR8Nx#l%~K0W~eXe)a$up6A3 zXf`0DCL(z6cY~$AZ2_~awIHH!|D^_U`^zGt0OhMOCNk1>U4JyEl&P=t0K^wje1c4mEhI(#T0PmIlfep_W2c8bvMgl2!&7{CqyI2LE|`127j|YDB_w z);)mE7&tL6n}J_1FL*wm1GFSrBLv`jy{hBr;bAr|`*Jl<+5!d~kH^r*S;;-mDVu@4 z2aL5A_xoLir+?=K037%xRPS=-h|+6K#+Vh{7z1Mrys{2??|qVP!dx%v)mp1YlA7dk z!20zY`f&x5ziW!jqz3q*2G%6UZv8YvnqYW+h8RT@YG4mMXbapqH@~)px2#p3o3FJ+ z*4ovxUF1_g)}amX%?3{W=(F&Qa$s)63%^d6;-;MX(SP5jOWY|6D)-6m3g^erk00qg z^%xi1P}dKp3?x245SK+FNcSWxR|L8a3J{{-~Rqq2j$?O0kb}~V1WFW=Xfpxjv^6VIhui^_+m5f)zv=&+f!FDx7UO5KQi4jo18qXeGKot*$^ZZW07*qo IM6N<$g7rKLd;kCd diff --git a/Classes/Notes/Assets/Note_Parasifly.png b/Classes/Notes/Assets/Note_Parasifly.png new file mode 100644 index 0000000000000000000000000000000000000000..67599c7dad1c237f0eb603bb8ac3223d6410170e GIT binary patch literal 427 zcmV;c0aX5pP)Px$Wl2OqR9J;$U>F6XV1NN5K1pLy$N$*G&%WLd*H`A$1y|FxuMDqwBsl^H{jrCr_TB=q1Gw1cM4+bikq^ zX1XiGlFZ#0dWne+oFPESa^z^hW;w9{uLEF~!hjT?JW4vCssjl59F_xM@sAHsoCYWbbaMc%tVmS{AXm@NK0PEV z4Gh01ASD6P!~w{F?zy0HOA;fgO){E<0J + { + e.BD.RandApplyNote(eff.Owner, 13, 1); + } + ), + new EnemyEffect( + this, + BattleEffectTrigger.OnDamageInstance, + 3, + (e, eff, val) => + { + if ( + val <= 0 + || e is not BattleDirector.Harbinger.OnDamageInstanceArgs dArgs + || dArgs.Dmg.Target != eff.Owner + || dArgs.Dmg.Damage < dArgs.Dmg.Target.GetCurrentHealth() + ) + return; + e.BD.AddStatus(Targetting.All, StatusEffect.Block, val); + eff.Value = 0; + } + ), + }; } } From 424da15da93b24a2f0306184f8b1c0de4c0a5dc5 Mon Sep 17 00:00:00 2001 From: LifeHckr Date: Sat, 10 May 2025 22:21:50 -0700 Subject: [PATCH 7/7] Added BossBlood Effects Extra damage on miss/ok and heal --- Classes/Notes/Assets/Note_BossBlood.png | Bin 0 -> 487 bytes .../Notes/Assets/Note_BossBlood.png.import | 34 ++++++++++++++++++ Globals/Scribe.cs | 15 ++++++++ .../Puppets/Enemies/BossBlood/P_BossBlood.cs | 2 ++ 4 files changed, 51 insertions(+) create mode 100644 Classes/Notes/Assets/Note_BossBlood.png create mode 100644 Classes/Notes/Assets/Note_BossBlood.png.import diff --git a/Classes/Notes/Assets/Note_BossBlood.png b/Classes/Notes/Assets/Note_BossBlood.png new file mode 100644 index 0000000000000000000000000000000000000000..4c9fef7f671e1794c972d2157b61cb1b1e66e596 GIT binary patch literal 487 zcmVPx$p-DtRR9J=WmN8DlFcgNrB4$=c;sD4?2M&;}HwcUjT_Tk`1St&6tq|(OfW!j5 zL6$1)9lYcO3>{d~ff0t*QS3IvNsC~}zqIyq-~azF@5O}<9Xk9mdToA`rs-Ez%=i69 zIh_yNq*<12osm*D7IW+>ppM+$x5ZS!sRC6c-$iJP3&Ze7j-$5Zi_0s6T(6~+hWj{< zEBnPsfQEMV>|c{*8Tn|)=gnOq=KST!h`Yi`K$#q15#9rkkA?sSc{#pZE)OF>LwYNw zo3?q6UIB_KX!0pNq_=X;St~%hmr@o^r&jOI=W}B}9}S({I|%?tl7z`*0>E2(&)Cbi zTuN`n*vq+%0|1m#D5Yw1JB?uw1VtzJ`+XyJ^6*&nf<~EmHk<7?hISGm1VV_N=j>P= zIW)WrbR`CZ!Omwagdj;0XL4vb1v+V&yzE%-yOK8+0BiTK9z#8f002ovPDHLkV1o6_+0Os~ literal 0 HcmV?d00001 diff --git a/Classes/Notes/Assets/Note_BossBlood.png.import b/Classes/Notes/Assets/Note_BossBlood.png.import new file mode 100644 index 00000000..e2d09d8d --- /dev/null +++ b/Classes/Notes/Assets/Note_BossBlood.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c6gaprxxf71mm" +path="res://.godot/imported/Note_BossBlood.png-867ef730738d75280fbaf251b1d84cde.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Classes/Notes/Assets/Note_BossBlood.png" +dest_files=["res://.godot/imported/Note_BossBlood.png-867ef730738d75280fbaf251b1d84cde.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/Globals/Scribe.cs b/Globals/Scribe.cs index 944ffcae..6e8a498d 100644 --- a/Globals/Scribe.cs +++ b/Globals/Scribe.cs @@ -190,6 +190,21 @@ public partial class Scribe : Node director.AddStatus(Targetting.All, StatusEffect.Block, amt); } ), + new Note( + 14, + "BossBlood", + GD.Load("res://Classes/Notes/Assets/Note_BossBlood.png"), + 2, + (director, note, timing) => + { + int dmg = (3 - (int)timing) * note.GetBaseVal(); + director.DealDamage(note, dmg, note.Owner); + if (dmg > 0) + note.Owner.Heal((3 - (int)timing)); + }, + default, + Targetting.Player + ), }; public static readonly RelicTemplate[] RelicDictionary = new[] diff --git a/Scenes/Puppets/Enemies/BossBlood/P_BossBlood.cs b/Scenes/Puppets/Enemies/BossBlood/P_BossBlood.cs index 632287ae..1adfff0d 100644 --- a/Scenes/Puppets/Enemies/BossBlood/P_BossBlood.cs +++ b/Scenes/Puppets/Enemies/BossBlood/P_BossBlood.cs @@ -11,6 +11,7 @@ public override void _Ready() MaxHealth = 225; CurrentHealth = MaxHealth; BaseMoney = 15; + InitialNote = (14, 3); base._Ready(); var enemTween = CreateTween(); enemTween.TweenProperty(Sprite, "position", Vector2.Down * 5, 1f).AsRelative(); @@ -29,6 +30,7 @@ public override void _Ready() (e, eff, val) => { eff.Owner.Heal(val); + e.BD.RandApplyNote(eff.Owner, 14, 1); } ), };