Compare commits

...

3 commits

5 changed files with 80 additions and 38 deletions

View file

@ -125,7 +125,6 @@ class Application: public Platform::Sdl2Application, public efsw::FileWatchListe
void drawGeneralInfo(); void drawGeneralInfo();
void drawResearchInventory(); void drawResearchInventory();
void drawMaterialRow(Containers::StringView name, std::int32_t tier, GameData::MaterialID id); void drawMaterialRow(Containers::StringView name, std::int32_t tier, GameData::MaterialID id);
void drawUnavailableMaterialRow(Containers::StringView name, std::int32_t tier);
void drawMassManager(); void drawMassManager();
void drawDeleteMassPopup(int mass_index); void drawDeleteMassPopup(int mass_index);
void drawDeleteStagedMassPopup(Containers::StringView filename); void drawDeleteStagedMassPopup(Containers::StringView filename);

View file

@ -313,7 +313,7 @@ Application::drawResearchInventory() {
drawMaterialRow("Lunarite", 4, GameData::MaterialID::Lunarite); drawMaterialRow("Lunarite", 4, GameData::MaterialID::Lunarite);
drawMaterialRow("Asterite", 5, GameData::MaterialID::Asterite); drawMaterialRow("Asterite", 5, GameData::MaterialID::Asterite);
drawMaterialRow("Hallite fragma", 6, GameData::MaterialID::HalliteFragma); drawMaterialRow("Hallite fragma", 6, GameData::MaterialID::HalliteFragma);
drawUnavailableMaterialRow("Unnoctinium", 7); drawMaterialRow("Unnoctinium", 7, GameData::MaterialID::Unnoctinium);
ImGui::TableNextRow(ImGuiTableRowFlags_Headers); ImGui::TableNextRow(ImGuiTableRowFlags_Headers);
ImGui::TableSetColumnIndex(1); ImGui::TableSetColumnIndex(1);
@ -325,7 +325,7 @@ Application::drawResearchInventory() {
drawMaterialRow("Soldus", 4, GameData::MaterialID::Soldus); drawMaterialRow("Soldus", 4, GameData::MaterialID::Soldus);
drawMaterialRow("Synthesized N", 5, GameData::MaterialID::SynthesisedN); drawMaterialRow("Synthesized N", 5, GameData::MaterialID::SynthesisedN);
drawMaterialRow("Nanoc", 6, GameData::MaterialID::Nanoc); drawMaterialRow("Nanoc", 6, GameData::MaterialID::Nanoc);
drawUnavailableMaterialRow("Abyssillite", 7); drawMaterialRow("Abyssillite", 7, GameData::MaterialID::Abyssillite);
ImGui::TableNextRow(ImGuiTableRowFlags_Headers); ImGui::TableNextRow(ImGuiTableRowFlags_Headers);
ImGui::TableSetColumnIndex(1); ImGui::TableSetColumnIndex(1);
@ -337,7 +337,7 @@ Application::drawResearchInventory() {
drawMaterialRow("Quarkium", 4, GameData::MaterialID::Quarkium); drawMaterialRow("Quarkium", 4, GameData::MaterialID::Quarkium);
drawMaterialRow("Alterene", 5, GameData::MaterialID::Alterene); drawMaterialRow("Alterene", 5, GameData::MaterialID::Alterene);
drawMaterialRow("Cosmium", 6, GameData::MaterialID::Cosmium); drawMaterialRow("Cosmium", 6, GameData::MaterialID::Cosmium);
drawUnavailableMaterialRow("Purified quarkium", 7); drawMaterialRow("Purified quarkium", 7, GameData::MaterialID::PurifiedQuarkium);
ImGui::TableNextRow(ImGuiTableRowFlags_Headers); ImGui::TableNextRow(ImGuiTableRowFlags_Headers);
ImGui::TableSetColumnIndex(1); ImGui::TableSetColumnIndex(1);
@ -349,7 +349,7 @@ Application::drawResearchInventory() {
drawMaterialRow("Mineral exoskeletology", 4, GameData::MaterialID::MineralExoskeletology); drawMaterialRow("Mineral exoskeletology", 4, GameData::MaterialID::MineralExoskeletology);
drawMaterialRow("Carbonized skin", 5, GameData::MaterialID::CarbonisedSkin); drawMaterialRow("Carbonized skin", 5, GameData::MaterialID::CarbonisedSkin);
drawMaterialRow("Isolated void particle", 6, GameData::MaterialID::IsolatedVoidParticle); drawMaterialRow("Isolated void particle", 6, GameData::MaterialID::IsolatedVoidParticle);
drawUnavailableMaterialRow("Weaponised physiology", 7); drawMaterialRow("Weaponised physiology", 7, GameData::MaterialID::WeaponisedPhysiology);
ImGui::EndTable(); ImGui::EndTable();
} }
@ -382,17 +382,6 @@ Application::drawMaterialRow(Containers::StringView name, std::int32_t tier, Gam
} }
} }
void
Application::drawUnavailableMaterialRow(Containers::StringView name, std::int32_t tier) {
ImGui::TableNextRow();
ImGui::TableSetColumnIndex(0);
ImGui::Text("T%i", tier);
ImGui::TableSetColumnIndex(1);
ImGui::TextUnformatted(name.cbegin(), name.cend());
ImGui::TableSetColumnIndex(2);
ImGui::TextDisabled("Unavailable as of game version " SAVETOOL_SUPPORTED_GAME_VERSION);
}
void void
Application::drawMassManager() { Application::drawMassManager() {
if(!_massManager) { if(!_massManager) {

View file

@ -25,6 +25,7 @@ enum MaterialID : std::int32_t {
Lunarite = 0xC3503, Lunarite = 0xC3503,
Asterite = 0xC3504, Asterite = 0xC3504,
HalliteFragma = 0xC3505, HalliteFragma = 0xC3505,
Unnoctinium = 0xC3506,
Ednil = 0xC350A, Ednil = 0xC350A,
Nuflalt = 0xC350B, Nuflalt = 0xC350B,
@ -32,6 +33,7 @@ enum MaterialID : std::int32_t {
Soldus = 0xC350D, Soldus = 0xC350D,
SynthesisedN = 0xC350E, SynthesisedN = 0xC350E,
Nanoc = 0xC350F, Nanoc = 0xC350F,
Abyssillite = 0xC3510,
Alcarbonite = 0xC3514, Alcarbonite = 0xC3514,
Keriphene = 0xC3515, Keriphene = 0xC3515,
@ -39,6 +41,7 @@ enum MaterialID : std::int32_t {
Quarkium = 0xC3517, Quarkium = 0xC3517,
Alterene = 0xC3518, Alterene = 0xC3518,
Cosmium = 0xC3519, Cosmium = 0xC3519,
PurifiedQuarkium = 0xC351A,
MixedComposition = 0xDBBA0, MixedComposition = 0xDBBA0,
VoidResidue = 0xDBBA1, VoidResidue = 0xDBBA1,
@ -46,6 +49,7 @@ enum MaterialID : std::int32_t {
MineralExoskeletology = 0xDBBA3, MineralExoskeletology = 0xDBBA3,
CarbonisedSkin = 0xDBBA4, CarbonisedSkin = 0xDBBA4,
IsolatedVoidParticle = 0xDBBA5, IsolatedVoidParticle = 0xDBBA5,
WeaponisedPhysiology = 0xDBBA6,
}; };
} }

View file

@ -37,6 +37,7 @@ static const std::map<std::int32_t, Containers::StringView> melee_grips {
{5, "Guardian Grip (1H)"_s}, {5, "Guardian Grip (1H)"_s},
{6, "Knight Guard Grip (1H)"_s}, {6, "Knight Guard Grip (1H)"_s},
{7, "Saber Guard Grip (1H)"_s}, {7, "Saber Guard Grip (1H)"_s},
{8, "Base Grip (1H)"_s},
{100, "Combat Side Grip (1H)"_s}, {100, "Combat Side Grip (1H)"_s},
{101, "Hollowed Side Grip (1H)"_s}, {101, "Hollowed Side Grip (1H)"_s},
@ -44,39 +45,60 @@ static const std::map<std::int32_t, Containers::StringView> melee_grips {
{103, "Plated Side Grip (1H)"_s}, {103, "Plated Side Grip (1H)"_s},
{104, "Locked Side Grip (1H)"_s}, {104, "Locked Side Grip (1H)"_s},
{105, "Longpoint Side Grip (1H)"_s}, {105, "Longpoint Side Grip (1H)"_s},
{106, "Concave Side Grip (1H)"_s},
{107, "Polehead Side Grip (1H)"_s},
{108, "Base Side Grip (1H)"_s},
{200, "Combat Dual Grip (1H)"_s}, {200, "Combat Dual Grip (1H)"_s},
{201, "Hollowed Dual Grip (1H)"_s}, {201, "Hollowed Dual Grip (1H)"_s},
{202, "Plated Dual Grip (1H)"_s}, {202, "Plated Dual Grip (1H)"_s},
{203, "Concave Dual Grip (1H)"_s},
{204, "Polehead Dual Grip (1H)"_s},
{400, "Combat Twin Grip (1H)"_s}, {400, "Combat Twin Grip (1H)"_s},
{401, "Sepal Twin Grip (1H)"_s}, {401, "Sepal Twin Grip (1H)"_s},
{402, "Hollowed Twin Grip (1H)"_s}, {402, "Hollowed Twin Grip (1H)"_s},
{403, "Knuckle Guard Twin Grip (1H)"_s}, {403, "Knuckle Guard Twin Grip (1H)"_s},
{404, "Arched Twin Grip (1H)"_s}, {404, "Arched Twin Grip (1H)"_s},
{405, "Handguard Twin Grip (1H)"_s},
{406, "Fullguard Twin Grip (1H)"_s},
{407, "Base Twin Grip (1H)"_s},
{1000, "Combat Knuckle (R/L)"_s}, {1000, "Combat Knuckle (R/L)"_s},
{1001, "Battle Fist (R/L)"_s}, {1001, "Battle Fist (R/L)"_s},
{1002, "Guard Knuckle (R/L)"_s}, {1002, "Guard Knuckle (R/L)"_s},
{1003, "Heavy Fist (R/L)"_s},
{1004, "Thick Fist (R/L)"_s},
{1005, "Base Fist (R/L)"_s},
{2000, "Combat Polearm (2H)"_s}, {2000, "Combat Polearm (2H)"_s},
{2001, "Dual Guard Polearm (2H)"_s}, {2001, "Dual Guard Polearm (2H)"_s},
{2002, "Sepal Polearm (2H)"_s}, {2002, "Sepal Polearm (2H)"_s},
{2003, "Fin Polearm (2H)"_s}, {2003, "Fin Polearm (2H)"_s},
{2004, "Arched Polearm (2H)"_s}, {2004, "Arched Polearm (2H)"_s},
{2005, "Sharp Polearm (2H)"_s},
{2006, "Ring Polearm (2H)"_s},
{2007, "Base Polearm (2H)"_s},
{2100, "Combat Side Polearm (2H)"_s}, {2100, "Combat Side Polearm (2H)"_s},
{2101, "Plated Side Polearm (2H)"_s}, {2101, "Plated Side Polearm (2H)"_s},
{2102, "Locked Side Polearm (2H)"_s}, {2102, "Locked Side Polearm (2H)"_s},
{2103, "Fin Side Polearm (2H)"_s}, {2103, "Fin Side Polearm (2H)"_s},
{2104, "Heavy Side Polearm (2H)"_s},
{2105, "Base Side Polearm (2H)"_s},
{2200, "Combat Dual Polearm (2H)"_s}, {2200, "Combat Dual Polearm (2H)"_s},
{2201, "Studded Dual Polearm (2H)"_s},
{2202, "Circular Dual Polearm (2H)"_s},
{2400, "Combat Twin Blade (2H)"_s}, {2400, "Combat Twin Blade (2H)"_s},
{2401, "Guard Twin Blade (2H)"_s}, {2401, "Guard Twin Blade (2H)"_s},
{2402, "Sepal Twin Blade (2H)"_s}, {2402, "Sepal Twin Blade (2H)"_s},
{2403, "Fin Twin Blade (2H)"_s}, {2403, "Fin Twin Blade (2H)"_s},
{2404, "Arched Twin Blade (2H)"_s}, {2404, "Arched Twin Blade (2H)"_s},
{2405, "Holder Twin Blade (2H)"_s},
{2406, "Ring Twin Blade (2H)"_s},
{2407, "Base Twin Blade (2H)"_s},
}; };
static const std::map<std::int32_t, Containers::StringView> melee_assaulters { static const std::map<std::int32_t, Containers::StringView> melee_assaulters {
@ -92,6 +114,7 @@ static const std::map<std::int32_t, Containers::StringView> melee_assaulters {
{9, "Long Flat Gouger"_s}, {9, "Long Flat Gouger"_s},
{10, "Long Curved Blade"_s}, {10, "Long Curved Blade"_s},
{11, "Long Broad Blade"_s}, {11, "Long Broad Blade"_s},
{12, "Base L Sword"_s},
{20, "Long Combat Edge"_s}, {20, "Long Combat Edge"_s},
{21, "Long Attached Edge"_s}, {21, "Long Attached Edge"_s},
@ -105,6 +128,7 @@ static const std::map<std::int32_t, Containers::StringView> melee_assaulters {
{100, "Short Metal Blade"_s}, {100, "Short Metal Blade"_s},
{101, "Short Assault Blade"_s}, {101, "Short Assault Blade"_s},
{102, "Short Fin Blade"_s}, {102, "Short Fin Blade"_s},
{103, "Base S Sword"_s},
{120, "Short Combat Edge"_s}, {120, "Short Combat Edge"_s},
@ -120,6 +144,7 @@ static const std::map<std::int32_t, Containers::StringView> melee_assaulters {
{200, "Bracer"_s}, {200, "Bracer"_s},
{201, "Custom Bracer"_s}, {201, "Custom Bracer"_s},
{202, "Base Hammer"_s},
{210, "Expanded Bracer"_s}, {210, "Expanded Bracer"_s},
{211, "Expanded Custom Bracer"_s}, {211, "Expanded Custom Bracer"_s},
@ -127,10 +152,18 @@ static const std::map<std::int32_t, Containers::StringView> melee_assaulters {
{300, "Heavy Smasher"_s}, {300, "Heavy Smasher"_s},
{301, "Heavy Basher"_s}, {301, "Heavy Basher"_s},
{302, "Heavy Torch Mace"_s}, {302, "Heavy Torch Mace"_s},
{303, "Heavy Spike Club"_s},
{304, "Heavy Diamond Smasher"_s},
{305, "Heavy Spinning Smasher (Motion)"_s},
{306, "Base L Mace"_s},
{400, "Light Smasher"_s}, {400, "Light Smasher"_s},
{401, "Light Basher"_s}, {401, "Light Basher"_s},
{402, "Light Torch Mace"_s}, {402, "Light Torch Mace"_s},
{403, "Light Spike Club"_s},
{404, "Light Diamond Smasher"_s},
{405, "Light Spinning Smasher"_s},
{406, "Base S Mace"_s},
{420, "War Hammer"_s}, {420, "War Hammer"_s},
{421, "Great Hammer"_s}, {421, "Great Hammer"_s},
@ -142,13 +175,16 @@ static const std::map<std::int32_t, Containers::StringView> melee_assaulters {
{500, "Combat Lance"_s}, {500, "Combat Lance"_s},
{501, "Gouger Lance"_s}, {501, "Gouger Lance"_s},
{502, "Pointy Lance"_s},
{503, "Spinning Pointy Lance (Motion)"_s},
{504, "Crystal Lance"_s},
{510, "Piercer"_s}, {510, "Piercer"_s},
{600, "Short Combat Lance"_s}, {600, "Short Combat Lance"_s},
{601, "Short Pointy Lance"_s},
{602, "Short Spinning Pointy Lance (Motion)"_s},
{603, "Short Crystal Lance"_s},
{605, "Short Combat Drill (Motion)"_s}, {605, "Short Combat Drill (Motion)"_s},
{610, "Short Piercer"_s}, {610, "Short Piercer"_s},
{700, "Combat Axe"_s}, {700, "Combat Axe"_s},
@ -264,6 +300,11 @@ static const std::map<std::int32_t, Containers::StringView> bshooter_barrels {
{397, "Short D Base Barrel (Detonate)"_s}, {397, "Short D Base Barrel (Detonate)"_s},
{398, "Medium D Base Barrel (Detonate)"_s}, {398, "Medium D Base Barrel (Detonate)"_s},
{399, "Long D Base Barrel (Detonate)"_s}, {399, "Long D Base Barrel (Detonate)"_s},
{400, "Heavy Burst Barrel (Pile Bunker) (Motion)"_s},
{401, "Under Guard Barrel (Pile Bunker) (Motion)"_s},
{402, "Facthold Barrel (Pile Bunker) (Motion)"_s},
{499, "Long P Base Barrel (Pile Bunker) (Motion)"_s},
}; };
// endregion // endregion
@ -318,6 +359,11 @@ static const std::map<std::int32_t, Containers::StringView> eshooter_busters {
{397, "Short W Base Buster (Wave)"_s}, {397, "Short W Base Buster (Wave)"_s},
{398, "Medium W Base Buster (Wave)"_s}, {398, "Medium W Base Buster (Wave)"_s},
{399, "Long W Base Buster (Wave)"_s}, {399, "Long W Base Buster (Wave)"_s},
{400, "Wiredcharge Buster (Prism) (Motion)"_s},
{402, "Heavyclamp Buster (Prism) (Motion)"_s},
{402, "Curlescent Buster (Prism) (Motion)"_s},
{499, "Long P Base Buster (Prism) (Motion)"_s},
}; };
// endregion // endregion

View file

@ -141,6 +141,7 @@ Profile::refreshValues() {
_materials[GameData::MaterialID::Lunarite] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Lunarite); _materials[GameData::MaterialID::Lunarite] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Lunarite);
_materials[GameData::MaterialID::Asterite] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Asterite); _materials[GameData::MaterialID::Asterite] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Asterite);
_materials[GameData::MaterialID::HalliteFragma] = getResource(PROFILE_MATERIAL, GameData::MaterialID::HalliteFragma); _materials[GameData::MaterialID::HalliteFragma] = getResource(PROFILE_MATERIAL, GameData::MaterialID::HalliteFragma);
_materials[GameData::MaterialID::Unnoctinium] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Unnoctinium);
_materials[GameData::MaterialID::Ednil] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Ednil); _materials[GameData::MaterialID::Ednil] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Ednil);
_materials[GameData::MaterialID::Nuflalt] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Nuflalt); _materials[GameData::MaterialID::Nuflalt] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Nuflalt);
@ -148,6 +149,7 @@ Profile::refreshValues() {
_materials[GameData::MaterialID::Soldus] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Soldus); _materials[GameData::MaterialID::Soldus] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Soldus);
_materials[GameData::MaterialID::SynthesisedN] = getResource(PROFILE_MATERIAL, GameData::MaterialID::SynthesisedN); _materials[GameData::MaterialID::SynthesisedN] = getResource(PROFILE_MATERIAL, GameData::MaterialID::SynthesisedN);
_materials[GameData::MaterialID::Nanoc] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Nanoc); _materials[GameData::MaterialID::Nanoc] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Nanoc);
_materials[GameData::MaterialID::Abyssillite] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Abyssillite);
_materials[GameData::MaterialID::Alcarbonite] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Alcarbonite); _materials[GameData::MaterialID::Alcarbonite] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Alcarbonite);
_materials[GameData::MaterialID::Keriphene] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Keriphene); _materials[GameData::MaterialID::Keriphene] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Keriphene);
@ -155,6 +157,7 @@ Profile::refreshValues() {
_materials[GameData::MaterialID::Quarkium] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Quarkium); _materials[GameData::MaterialID::Quarkium] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Quarkium);
_materials[GameData::MaterialID::Alterene] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Alterene); _materials[GameData::MaterialID::Alterene] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Alterene);
_materials[GameData::MaterialID::Cosmium] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Cosmium); _materials[GameData::MaterialID::Cosmium] = getResource(PROFILE_MATERIAL, GameData::MaterialID::Cosmium);
_materials[GameData::MaterialID::PurifiedQuarkium] = getResource(PROFILE_MATERIAL, GameData::MaterialID::PurifiedQuarkium);
_materials[GameData::MaterialID::MixedComposition] = getResource(PROFILE_QUARK_DATA, GameData::MaterialID::MixedComposition); _materials[GameData::MaterialID::MixedComposition] = getResource(PROFILE_QUARK_DATA, GameData::MaterialID::MixedComposition);
_materials[GameData::MaterialID::VoidResidue] = getResource(PROFILE_QUARK_DATA, GameData::MaterialID::VoidResidue); _materials[GameData::MaterialID::VoidResidue] = getResource(PROFILE_QUARK_DATA, GameData::MaterialID::VoidResidue);
@ -162,6 +165,7 @@ Profile::refreshValues() {
_materials[GameData::MaterialID::MineralExoskeletology] = getResource(PROFILE_QUARK_DATA, GameData::MaterialID::MineralExoskeletology); _materials[GameData::MaterialID::MineralExoskeletology] = getResource(PROFILE_QUARK_DATA, GameData::MaterialID::MineralExoskeletology);
_materials[GameData::MaterialID::CarbonisedSkin] = getResource(PROFILE_QUARK_DATA, GameData::MaterialID::CarbonisedSkin); _materials[GameData::MaterialID::CarbonisedSkin] = getResource(PROFILE_QUARK_DATA, GameData::MaterialID::CarbonisedSkin);
_materials[GameData::MaterialID::IsolatedVoidParticle] = getResource(PROFILE_QUARK_DATA, GameData::MaterialID::IsolatedVoidParticle); _materials[GameData::MaterialID::IsolatedVoidParticle] = getResource(PROFILE_QUARK_DATA, GameData::MaterialID::IsolatedVoidParticle);
_materials[GameData::MaterialID::WeaponisedPhysiology] = getResource(PROFILE_QUARK_DATA, GameData::MaterialID::WeaponisedPhysiology);
_valid = true; _valid = true;
} }
@ -260,7 +264,7 @@ Profile::material(GameData::MaterialID id) const {
bool bool
Profile::setMaterial(GameData::MaterialID id, std::int32_t amount) { Profile::setMaterial(GameData::MaterialID id, std::int32_t amount) {
Containers::StringView container = id > GameData::MaterialID::MixedComposition ? PROFILE_QUARK_DATA : PROFILE_MATERIAL; Containers::StringView container = id >= GameData::MaterialID::MixedComposition ? PROFILE_QUARK_DATA : PROFILE_MATERIAL;
auto mats_prop = _profile.at<Gvas::Types::ArrayProperty>(container); auto mats_prop = _profile.at<Gvas::Types::ArrayProperty>(container);
if(!mats_prop) { if(!mats_prop) {