From ed53c05ad4b412a5d418dea4bb3805d5d1772d5e Mon Sep 17 00:00:00 2001 From: dann1 Date: Sat, 18 Nov 2023 19:39:36 -0600 Subject: [PATCH] Expand name replacers --- .../Data/SKSE/Plugins/ImmersiveActivate.ini | 4 + src/Renamer.cpp | 97 ++----------------- src/Renamer.h | 96 ++++++++++++++++++ src/Settings.cpp | 2 + src/Settings.h | 2 + 5 files changed, 114 insertions(+), 87 deletions(-) diff --git a/Skyrim/Data/SKSE/Plugins/ImmersiveActivate.ini b/Skyrim/Data/SKSE/Plugins/ImmersiveActivate.ini index 9adf914..120425e 100644 --- a/Skyrim/Data/SKSE/Plugins/ImmersiveActivate.ini +++ b/Skyrim/Data/SKSE/Plugins/ImmersiveActivate.ini @@ -120,6 +120,8 @@ Instruments = Instrument Jewelry = Jewel ;Replace Key name Keys = Key +;Replace Ore veins name +Veins = Ore ;Replace Ore and Ingots name Metals = Metal ;Replace names of the rest of the non-specified items. Mostly clutter. @@ -142,6 +144,8 @@ Papers = Document Remains = Remains ;Replace Flora and Harvestable resources name Resources = Resource +;Replace Coin Purses name +Purses = Purse ;Replace Hand Jewelry name Rings = Ring ;Replace Septims name (Coin Purse) diff --git a/src/Renamer.cpp b/src/Renamer.cpp index 6c69a6c..2c5aab6 100644 --- a/src/Renamer.cpp +++ b/src/Renamer.cpp @@ -1,10 +1,6 @@ #include "Renamer.h" #include "Settings.h" -// Object Names have 2 or lines. Replacing the whole name leads to plain white text. -// Action: Talk, Sleep with optional color formatting -// Name: Camilla Carlotta, Bed (Owned) -// Embedded Images: empty tag triangle, or locked std::string ReplaceRefText(const std::string& original, const std::string& replacement) { std::vector lines; @@ -41,86 +37,6 @@ std::string DecideSkip(std::string a_setting_value, std::string a_text) return ReplaceRefText(a_text, a_setting_value); } -struct Weapons -{ - const std::vector blades = { "WeapTypeSword", "WeapTypeGreatsword", "WeapTypeDagger" }; - const std::vector axes = { "WeapTypeWarAxe", "WeapTypeBattleaxe" }; - const std::vector bludgeons = { "WeapTypeMace", "WeapTypeWarhammer" }; - const std::vector staffs = { "VendorItemStaff", "WeapTypeStaff" }; - const std::vector ranged = { "WeapTypeBow" }; -}; - -struct Armors -{ - const std::vector head = { "ArmorHelmet" }; - const std::vector chest = { "ArmorCuirass" }; - const std::vector hands = { "ArmorGauntlets" }; - const std::vector feet = { "ArmorBoots" }; - const std::vector shield = { "ArmorShield" }; - const std::vector cloth = { "ArmorClothing" }; -}; - -struct Flasks -{ - const std::vector flasks = { "VendorItemPotion", "VendorItemPoison" }; -}; - -struct Jewels -{ - const std::vector finger = { "ClothingRing" }; - const std::vector neck = { "ClothingNecklace" }; - const std::vector head = { "ClothingCirclet" }; -}; - -struct Books -{ - const std::uint32_t bookBurnt = 0x000E3CB7; -}; -struct Provisions -{ - const std::vector treats = { "OCF_AlchFood_Treat", "OCF_AlchFood_Baked" }; - const std::vector organs = { "OCF_IngrRemains_Organ" }; - const std::vector cheeses = { "OCF_AlchFood_Cheese" }; - const std::vector breads = { "OCF_AlchFood_Bread" }; - const std::vector meats = { "OCF_AlchFood_Seafood", "OCF_AlchFood_Meat" }; - const std::vector produces = { "OCF_AlchFood_Vegetable", "OCF_AlchFood_Fruit" }; -}; - -struct Shapes -{ - const std::vector claws = { "OCF_RelicNordic_DragonClaw" }; - const std::vector strip = { "OCF_AnimalHideStrip" }; - const std::vector bottles = { "OCF_VesselBottle" }; - const std::vector bowls = { "OCF_VesselBowl" }; - const std::vector pots = { "OCF_VesselPot" }; - const std::vector baskets = { "OCF_VesselBasket" }; - const std::vector buckets = { "OCF_VesselBucket" }; - const std::vector plates = { "OCF_VesselPlate" }; - const std::vector jars = { "OCF_VesselTankard" }; - const std::vector jugs = { "OCF_VesselJug" }; - const std::vector cups = { "OCF_VesselCup" }; - const std::vector waterskins = { "OCF_VesselWaterskin" }; - const std::vector brooms = { "OCF_ToolBroom" }; - const std::vector shovels = { "OCF_ToolShovel" }; - const std::vector lanterns = { "OCF_ToolLantern" }; -}; -struct Materials -{ - const std::vector bone = { "OCF_IngrRemains_Bone" }; - const std::vector shell = { "OCF_IngrRemains_Plate" }; - const std::vector metal = { "VendorItemOreIngot" }; - const std::vector wood = { "VendorItemFirewood" }; - const std::vector leather = { "VendorItemAnimalHide" }; -}; - -struct Misc -{ - const std::vector gems = { "VendorItemGem", "VendorItemSoulGem" }; - const std::vector remains = { "VendorItemAnimalPart" }; - const std::vector instruments = { "VendorItemBardInstrument" }; - const std::vector utensils = { "OCF_WeapTypeCutlery1H" }; -}; - std::string ReplaceFormTypeText(const RE::TESObjectREFRPtr& a_object, std::string a_text, const Settings* s) { const auto a_baseObject = a_object->GetBaseObject(); @@ -143,8 +59,10 @@ std::string ReplaceFormTypeText(const RE::TESObjectREFRPtr& a_object, std::strin logger::debug("{}", a_text); logger::debug("------------- Original Name End ---------------------"); #endif + Shapes shapes; + // TODO: Make everything skippable switch (a_formType) { case RE::FormType::NPC: case RE::FormType::LeveledNPC: @@ -171,7 +89,6 @@ std::string ReplaceFormTypeText(const RE::TESObjectREFRPtr& a_object, std::strin case RE::FormType::Tree: if (a_object->NameIncludes("Purse")) return ReplaceRefText(a_text, s->rMoneyPurse.text); - return ReplaceRefText(a_text, s->rResource.text); case RE::FormType::Ingredient: return ReplaceRefText(a_text, s->rIngredient.text); @@ -210,7 +127,9 @@ std::string ReplaceFormTypeText(const RE::TESObjectREFRPtr& a_object, std::strin { Weapons weapons; - if (a_baseObject->HasAnyKeywordByEditorID(weapons.blades)) { + if (a_baseObject->HasAnyKeywordByEditorID(weapons.rods)) { + return ReplaceRefText(a_text, "Rod"); + } else if (a_baseObject->HasAnyKeywordByEditorID(weapons.blades)) { return ReplaceRefText(a_text, s->rWeaponBlade.text); } else if (a_baseObject->HasAnyKeywordByEditorID(weapons.axes)) { return ReplaceRefText(a_text, s->rWeaponAxe.text); @@ -261,6 +180,10 @@ std::string ReplaceFormTypeText(const RE::TESObjectREFRPtr& a_object, std::strin } case RE::FormType::Scroll: case RE::FormType::Note: + // TODO: Notes have the Type: Book/Tome set in the Form record. Workarounds + // YNAM - ITMNoteUp + // INAM - HighPolynote - unreliable + // MODL - Note.nif - unreliable return ReplaceRefText(a_text, s->rPaper.text); case RE::FormType::Book: return ReplaceRefText(a_text, s->rBook.text); @@ -310,7 +233,7 @@ std::string ReplaceFormTypeText(const RE::TESObjectREFRPtr& a_object, std::strin return ReplaceRefText(a_text, "Utensil"); } else if (a_baseObject->HasAnyKeywordByEditorID(misc.gems)) { return ReplaceRefText(a_text, s->rMiscGem.text); - } else if (a_baseFormID == books.bookBurnt) { + } else if (books.contains(a_baseFormID)) { return ReplaceRefText(a_text, s->rBook.text); } else if (a_baseObject->HasAnyKeywordByEditorID(misc.instruments)) { return ReplaceRefText(a_text, s->rMiscBard.text); diff --git a/src/Renamer.h b/src/Renamer.h index 35605cf..f5954bf 100644 --- a/src/Renamer.h +++ b/src/Renamer.h @@ -2,3 +2,99 @@ #include "Settings.h" std::string ReplaceFormTypeText(const RE::TESObjectREFRPtr& a_object, std::string a_text, const Settings* s); + +struct Weapons +{ + const std::vector blades = { "WeapTypeSword", "WeapTypeGreatsword", "WeapTypeDagger" }; + const std::vector axes = { "WeapTypeWarAxe", "WeapTypeBattleaxe" }; + const std::vector bludgeons = { "WeapTypeMace", "WeapTypeWarhammer" }; + const std::vector staffs = { "VendorItemStaff", "WeapTypeStaff" }; + const std::vector ranged = { "WeapTypeBow" }; + const std::vector rods = { "ccBGSSSE001_FishingPoleKW" }; +}; + +struct Armors +{ + const std::vector head = { "ArmorHelmet" }; + const std::vector chest = { "ArmorCuirass" }; + const std::vector hands = { "ArmorGauntlets" }; + const std::vector feet = { "ArmorBoots" }; + const std::vector shield = { "ArmorShield" }; + const std::vector cloth = { "ArmorClothing" }; +}; + +struct Flasks +{ + const std::vector flasks = { "VendorItemPotion", "VendorItemPoison" }; +}; + +struct Jewels +{ + const std::vector finger = { "ClothingRing" }; + const std::vector neck = { "ClothingNecklace" }; + const std::vector head = { "ClothingCirclet" }; +}; + +struct Provisions +{ + const std::vector treats = { "OCF_AlchFood_Treat", "OCF_AlchFood_Baked" }; + const std::vector organs = { "OCF_IngrRemains_Organ" }; + const std::vector cheeses = { "OCF_AlchFood_Cheese" }; + const std::vector breads = { "OCF_AlchFood_Bread" }; + const std::vector meats = { "OCF_AlchFood_Seafood", "OCF_AlchFood_Meat" }; + const std::vector produces = { "OCF_AlchFood_Vegetable", "OCF_AlchFood_Fruit" }; +}; + +struct Shapes +{ + const std::vector claws = { "OCF_RelicNordic_DragonClaw" }; + const std::vector strip = { "OCF_AnimalHideStrip" }; + const std::vector bottles = { "OCF_VesselBottle" }; + const std::vector bowls = { "OCF_VesselBowl" }; + const std::vector pots = { "OCF_VesselPot" }; + const std::vector baskets = { "OCF_VesselBasket" }; + const std::vector buckets = { "OCF_VesselBucket" }; + const std::vector plates = { "OCF_VesselPlate" }; + const std::vector jars = { "OCF_VesselTankard" }; + const std::vector jugs = { "OCF_VesselJug" }; + const std::vector cups = { "OCF_VesselCup" }; + const std::vector waterskins = { "OCF_VesselWaterskin" }; + const std::vector brooms = { "OCF_ToolBroom" }; + const std::vector shovels = { "OCF_ToolShovel" }; + const std::vector lanterns = { "OCF_ToolLantern" }; +}; +struct Materials +{ + const std::vector bone = { "OCF_IngrRemains_Bone" }; + const std::vector shell = { "OCF_IngrRemains_Plate" }; + const std::vector metal = { "VendorItemOreIngot" }; + const std::vector wood = { "VendorItemFirewood" }; + const std::vector leather = { "VendorItemAnimalHide" }; +}; + +struct Misc +{ + const std::vector gems = { "VendorItemGem", "VendorItemSoulGem" }; + const std::vector remains = { "VendorItemAnimalPart" }; + const std::vector instruments = { "VendorItemBardInstrument" }; + const std::vector utensils = { "OCF_WeapTypeCutlery1H" }; +}; + +struct Books +{ + const std::uint32_t bookBurnt = 0x000E3CB7; + const std::uint32_t bookRuined = 0x000CE70B; + const std::uint32_t bookRuined2 = 0x000E4897; + + std::array allBooks = { bookBurnt, bookRuined, bookRuined2 }; + + bool contains(std::uint32_t baseFormID) + { + for (const auto& bookID : allBooks) { + if (baseFormID == bookID) { + return true; + } + } + return false; + } +}; diff --git a/src/Settings.cpp b/src/Settings.cpp index 9bd3fde..87e3c4d 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -110,6 +110,8 @@ bool Settings::LoadSettings() get_value(rNPCDragon.text, section, "NPCsDragons"); get_value(rPaper.text, section, "Papers"); get_value(rResource.text, section, "Resources"); + get_value(rResourcePurse.text, section, "Purses"); + get_value(rResourceVein.text, section, "Veins"); get_value(rWeapon.text, section, "Weapons"); get_value(rWeaponAxe.text, section, "WeaponsAxe"); get_value(rWeaponBlade.text, section, "WeaponsBlade"); diff --git a/src/Settings.h b/src/Settings.h index 059e370..0d8772b 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -99,6 +99,8 @@ class Settings Replacer rNPCDragon{ "Dragon" }; Replacer rPaper{ "Document" }; Replacer rResource{ "Resource" }; + Replacer rResourcePurse{ "Purse" }; + Replacer rResourceVein{ "Ore" }; Replacer rWeapon{ "Weapon" }; Replacer rWeaponAxe{ "Axe" }; Replacer rWeaponBlade{ "Blade" };