From 5b1b7e5780acf8b123e8d334f54f0fa34744f2e6 Mon Sep 17 00:00:00 2001 From: Chev <11602755+chev2@users.noreply.github.com> Date: Wed, 24 Aug 2022 16:06:54 -0700 Subject: [PATCH] Add LifeSourcesLight and ZenithRecipeTooltips mods --- LifeSourcesLight/LifeSourcesLight.cs | 17 ++++++ LifeSourcesLight/LifeSourcesLight.csproj | 13 +++++ LifeSourcesLight/LightOverrideHeartCrystal.cs | 22 ++++++++ LifeSourcesLight/LightOverrideLifeFruit.cs | 22 ++++++++ .../Properties/launchSettings.json | 16 ++++++ LifeSourcesLight/build.txt | 5 ++ LifeSourcesLight/description.txt | 1 + LifeSourcesLight/icon.png | Bin 0 -> 5068 bytes README.md | 5 ++ .../HookZenithIngredientTooltips.cs | 53 ++++++++++++++++++ .../Properties/launchSettings.json | 16 ++++++ ZenithRecipeTooltips/ZenithRecipeTooltips.cs | 8 +++ .../ZenithRecipeTooltips.csproj | 13 +++++ ZenithRecipeTooltips/build.txt | 5 ++ ZenithRecipeTooltips/description.txt | 1 + ZenithRecipeTooltips/icon.png | Bin 0 -> 7412 bytes 16 files changed, 197 insertions(+) create mode 100644 LifeSourcesLight/LifeSourcesLight.cs create mode 100644 LifeSourcesLight/LifeSourcesLight.csproj create mode 100644 LifeSourcesLight/LightOverrideHeartCrystal.cs create mode 100644 LifeSourcesLight/LightOverrideLifeFruit.cs create mode 100644 LifeSourcesLight/Properties/launchSettings.json create mode 100644 LifeSourcesLight/build.txt create mode 100644 LifeSourcesLight/description.txt create mode 100644 LifeSourcesLight/icon.png create mode 100644 ZenithRecipeTooltips/HookZenithIngredientTooltips.cs create mode 100644 ZenithRecipeTooltips/Properties/launchSettings.json create mode 100644 ZenithRecipeTooltips/ZenithRecipeTooltips.cs create mode 100644 ZenithRecipeTooltips/ZenithRecipeTooltips.csproj create mode 100644 ZenithRecipeTooltips/build.txt create mode 100644 ZenithRecipeTooltips/description.txt create mode 100644 ZenithRecipeTooltips/icon.png diff --git a/LifeSourcesLight/LifeSourcesLight.cs b/LifeSourcesLight/LifeSourcesLight.cs new file mode 100644 index 0000000..5f7bd47 --- /dev/null +++ b/LifeSourcesLight/LifeSourcesLight.cs @@ -0,0 +1,17 @@ +using Terraria.ModLoader; +using Terraria; +using Terraria.ID; + +namespace LifeSourcesLight +{ + public class LifeSourcesLight : Mod + { + public override void Load() + { + Main.tileLighted[TileID.Heart] = true; + Main.tileLighted[TileID.LifeFruit] = true; + + base.Load(); + } + } +} \ No newline at end of file diff --git a/LifeSourcesLight/LifeSourcesLight.csproj b/LifeSourcesLight/LifeSourcesLight.csproj new file mode 100644 index 0000000..d2b6580 --- /dev/null +++ b/LifeSourcesLight/LifeSourcesLight.csproj @@ -0,0 +1,13 @@ + + + + + LifeSourcesLight + net6.0 + AnyCPU + latest + + + + + \ No newline at end of file diff --git a/LifeSourcesLight/LightOverrideHeartCrystal.cs b/LifeSourcesLight/LightOverrideHeartCrystal.cs new file mode 100644 index 0000000..cd8c442 --- /dev/null +++ b/LifeSourcesLight/LightOverrideHeartCrystal.cs @@ -0,0 +1,22 @@ +using Terraria; +using Terraria.ID; +using Terraria.ModLoader; + +namespace LifeSourcesLight +{ + public class LightOverrideHeartCrystal : GlobalTile + { + // Modify overall light brightness + private static readonly float LifeCrystalBrightCoefficient = 0.7f; + + public override void ModifyLight(int i, int j, int type, ref float r, ref float g, ref float b) + { + if (type == TileID.Heart) + { + r = (255f / 255f) * LifeCrystalBrightCoefficient; + g = (38f / 255f) * LifeCrystalBrightCoefficient; + b = (106f / 255f) * LifeCrystalBrightCoefficient; + } + } + } +} diff --git a/LifeSourcesLight/LightOverrideLifeFruit.cs b/LifeSourcesLight/LightOverrideLifeFruit.cs new file mode 100644 index 0000000..4a76e4d --- /dev/null +++ b/LifeSourcesLight/LightOverrideLifeFruit.cs @@ -0,0 +1,22 @@ +using Terraria; +using Terraria.ID; +using Terraria.ModLoader; + +namespace LifeSourcesLight +{ + public class LightOverrideLifeFruit : GlobalTile + { + // Modify overall light brightness + private static readonly float LifeFruitBrightCoefficient = 0.7f; + + public override void ModifyLight(int i, int j, int type, ref float r, ref float g, ref float b) + { + if (type == TileID.LifeFruit) + { + r = (170f / 255f) * LifeFruitBrightCoefficient; + g = (221f / 255f) * LifeFruitBrightCoefficient; + b = (43f / 255f) * LifeFruitBrightCoefficient; + } + } + } +} diff --git a/LifeSourcesLight/Properties/launchSettings.json b/LifeSourcesLight/Properties/launchSettings.json new file mode 100644 index 0000000..8da89ff --- /dev/null +++ b/LifeSourcesLight/Properties/launchSettings.json @@ -0,0 +1,16 @@ +{ + "profiles": { + "Terraria": { + "commandName": "Executable", + "executablePath": "dotnet", + "commandLineArgs": "$(tMLPath)", + "workingDirectory": "$(tMLSteamPath)" + }, + "TerrariaServer": { + "commandName": "Executable", + "executablePath": "dotnet", + "commandLineArgs": "$(tMLServerPath)", + "workingDirectory": "$(tMLSteamPath)" + } + } +} \ No newline at end of file diff --git a/LifeSourcesLight/build.txt b/LifeSourcesLight/build.txt new file mode 100644 index 0000000..e7267d3 --- /dev/null +++ b/LifeSourcesLight/build.txt @@ -0,0 +1,5 @@ +displayName = Heart Crystal & Life Fruit Glow +author = Chev +version = 1.0.0 +homepage = https://github.com/chev2/terraria-mods +side = Client diff --git a/LifeSourcesLight/description.txt b/LifeSourcesLight/description.txt new file mode 100644 index 0000000..93bd3ca --- /dev/null +++ b/LifeSourcesLight/description.txt @@ -0,0 +1 @@ +Makes heart crystals & life fruits emit light. diff --git a/LifeSourcesLight/icon.png b/LifeSourcesLight/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a84b199d2fa4549d57e263d9d9d48882292808ca GIT binary patch literal 5068 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 RecipeItemIDs = new() + { + { ItemID.CopperShortsword, true }, + { ItemID.EnchantedSword, true }, + { ItemID.BeeKeeper, true }, + { ItemID.Starfury, true }, + { ItemID.Seedler, true }, + { ItemID.TheHorsemansBlade, true }, + { ItemID.InfluxWaver, true }, + { ItemID.StarWrath, true }, + { ItemID.Meowmere, true }, + { ItemID.TerraBlade, true } + }; + + private static readonly string TooltipPrefixColor = "E10643"; + + private static bool IsMaterialTooltip(TooltipLine line) + { + return line.Name == "Material"; + } + + public override void ModifyTooltips(Item item, List tooltips) + { + if (RecipeItemIDs.ContainsKey(item.type)) + { + TooltipLine tooltip = new(Mod, "RequiredForZenith", $"[c/{TooltipPrefixColor}:Required for Zenith]"); + + int materialLineIndex = tooltips.FindIndex(IsMaterialTooltip); + + // If we found the index where the "Material" tooltip is + if (materialLineIndex > 0) + { + tooltips.Insert(materialLineIndex + 1, tooltip); + // If we didn't, just append it to the end + } else + { + tooltips.Add(tooltip); + } + } + + base.ModifyTooltips(item, tooltips); + } + } +} diff --git a/ZenithRecipeTooltips/Properties/launchSettings.json b/ZenithRecipeTooltips/Properties/launchSettings.json new file mode 100644 index 0000000..8da89ff --- /dev/null +++ b/ZenithRecipeTooltips/Properties/launchSettings.json @@ -0,0 +1,16 @@ +{ + "profiles": { + "Terraria": { + "commandName": "Executable", + "executablePath": "dotnet", + "commandLineArgs": "$(tMLPath)", + "workingDirectory": "$(tMLSteamPath)" + }, + "TerrariaServer": { + "commandName": "Executable", + "executablePath": "dotnet", + "commandLineArgs": "$(tMLServerPath)", + "workingDirectory": "$(tMLSteamPath)" + } + } +} \ No newline at end of file diff --git a/ZenithRecipeTooltips/ZenithRecipeTooltips.cs b/ZenithRecipeTooltips/ZenithRecipeTooltips.cs new file mode 100644 index 0000000..f411c51 --- /dev/null +++ b/ZenithRecipeTooltips/ZenithRecipeTooltips.cs @@ -0,0 +1,8 @@ +using Terraria.ModLoader; + +namespace ZenithRecipeTooltips +{ + public class ZenithRecipeTooltips : Mod + { + } +} \ No newline at end of file diff --git a/ZenithRecipeTooltips/ZenithRecipeTooltips.csproj b/ZenithRecipeTooltips/ZenithRecipeTooltips.csproj new file mode 100644 index 0000000..8905caf --- /dev/null +++ b/ZenithRecipeTooltips/ZenithRecipeTooltips.csproj @@ -0,0 +1,13 @@ + + + + + ZenithRecipeTooltips + net6.0 + AnyCPU + latest + + + + + \ No newline at end of file diff --git a/ZenithRecipeTooltips/build.txt b/ZenithRecipeTooltips/build.txt new file mode 100644 index 0000000..409b430 --- /dev/null +++ b/ZenithRecipeTooltips/build.txt @@ -0,0 +1,5 @@ +displayName = Zenith Recipe Tooltips +author = Chev +version = 1.0.0 +homepage = https://github.com/chev2/terraria-mods +side = Client diff --git a/ZenithRecipeTooltips/description.txt b/ZenithRecipeTooltips/description.txt new file mode 100644 index 0000000..f65a176 --- /dev/null +++ b/ZenithRecipeTooltips/description.txt @@ -0,0 +1 @@ +Shows "Required for Zenith" in the tooltips of every sword used in the Zenith crafting recipe. \ No newline at end of file diff --git a/ZenithRecipeTooltips/icon.png b/ZenithRecipeTooltips/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..113ad8b4dbf8e02b37e05339cbeeb8c811036835 GIT binary patch literal 7412 zcmV004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000Uv 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 m{Xez%e