SaveTool: add weapon part mappings and the ability to change parts.
With that, I think I'm ready to push 1.3.2.
This commit is contained in:
parent
1bbbf3cbfd
commit
0fd157f33c
3 changed files with 448 additions and 1 deletions
|
@ -156,6 +156,7 @@ add_executable(MassBuilderSaveTool WIN32
|
|||
Maps/LastMissionId.h
|
||||
Maps/StoryProgress.h
|
||||
Maps/StyleNames.h
|
||||
Maps/WeaponParts.h
|
||||
Maps/WeaponTypes.hpp
|
||||
ToastQueue/ToastQueue.h
|
||||
ToastQueue/ToastQueue.cpp
|
||||
|
|
396
src/Maps/WeaponParts.h
Normal file
396
src/Maps/WeaponParts.h
Normal file
|
@ -0,0 +1,396 @@
|
|||
#pragma once
|
||||
// MassBuilderSaveTool
|
||||
// Copyright (C) 2021-2022 Guillaume Jacquemin
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
#include <map>
|
||||
|
||||
#include <Corrade/Containers/StringView.h>
|
||||
|
||||
#include <Magnum/Types.h>
|
||||
|
||||
using namespace Corrade;
|
||||
using namespace Magnum;
|
||||
|
||||
using namespace Containers::Literals;
|
||||
|
||||
// region Melee
|
||||
static const std::map<Int, Containers::StringView> melee_grips {
|
||||
{0, "Combat Grip (1H)"_s},
|
||||
{1, "Knuckle Guard Grip (1H)"_s},
|
||||
{2, "Dual Guard Grip (1H)"_s},
|
||||
{3, "Sepal Grip (1H)"_s},
|
||||
{4, "Warrior Grip (1H)"_s},
|
||||
{5, "Guardian Grip (1H)"_s},
|
||||
{6, "Knight Guard Grip (1H)"_s},
|
||||
{7, "Saber Guard Grip (1H)"_s},
|
||||
|
||||
{100, "Combat Side Grip (1H)"_s},
|
||||
{101, "Hollowed Side Grip (1H)"_s},
|
||||
{102, "Pulled Back Side Grip (1H)"_s},
|
||||
{103, "Plated Side Grip (1H)"_s},
|
||||
{104, "Locked Side Grip (1H)"_s},
|
||||
{105, "Longpoint Side Grip (1H)"_s},
|
||||
|
||||
{200, "Combat Dual Grip (1H)"_s},
|
||||
{201, "Hollowed Dual Grip (1H)"_s},
|
||||
{202, "Plated Dual Grip (1H)"_s},
|
||||
|
||||
{400, "Combat Twin Grip (1H)"_s},
|
||||
{401, "Sepal Twin Grip (1H)"_s},
|
||||
{402, "Hollowed Twin Grip (1H)"_s},
|
||||
{403, "Knuckle Guard Twin Grip (1H)"_s},
|
||||
{404, "Arched Twin Grip (1H)"_s},
|
||||
|
||||
{1000, "Combat Knuckle (R/L)"_s},
|
||||
{1001, "Battle Fist (R/L)"_s},
|
||||
{1002, "Guard Knuckle (R/L)"_s},
|
||||
|
||||
{2000, "Combat Polearm (2H)"_s},
|
||||
{2001, "Dual Guard Polearm (2H)"_s},
|
||||
{2002, "Sepal Polearm (2H)"_s},
|
||||
{2003, "Fin Polearm (2H)"_s},
|
||||
{2004, "Arched Polearm (2H)"_s},
|
||||
|
||||
{2100, "Combat Side Polearm (2H)"_s},
|
||||
{2101, "Plated Side Polearm (2H)"_s},
|
||||
{2102, "Locked Side Polearm (2H)"_s},
|
||||
{2103, "Fin Side Polearm (2H)"_s},
|
||||
|
||||
{2200, "Combat Dual Polearm (2H)"_s},
|
||||
|
||||
{2400, "Combat Twin Blade (2H)"_s},
|
||||
{2401, "Guard Twin Blade (2H)"_s},
|
||||
{2402, "Sepal Twin Blade (2H)"_s},
|
||||
{2403, "Fin Twin Blade (2H)"_s},
|
||||
{2404, "Arched Twin Blade (2H)"_s},
|
||||
};
|
||||
|
||||
static const std::map<Int, Containers::StringView> melee_assaulters {
|
||||
{0, "Long Metal Blade"_s},
|
||||
{1, "Long Assault Blade"_s},
|
||||
{2, "Long Fin Blade"_s},
|
||||
{3, "Long Double Blades"_s},
|
||||
{4, "Long Straight Blade"_s},
|
||||
{5, "Long Faceted Blade"_s},
|
||||
{6, "Long Interlocked Blade"_s},
|
||||
{7, "Long Frontbreak Blade"_s},
|
||||
{8, "Long Encased Blade"_s},
|
||||
{9, "Long Flat Gouger"_s},
|
||||
{10, "Long Curved Blade"_s},
|
||||
{11, "Long Broad Blade"_s},
|
||||
|
||||
{20, "Long Combat Edge"_s},
|
||||
{21, "Long Attached Edge"_s},
|
||||
|
||||
{40, "Katana Blade"_s},
|
||||
{41, "Custom Katana Blade"_s},
|
||||
|
||||
{60, "Energy Blade (Motion)"_s},
|
||||
{61, "Powered Blade"_s},
|
||||
|
||||
{100, "Short Metal Blade"_s},
|
||||
{101, "Short Assault Blade"_s},
|
||||
{102, "Short Fin Blade"_s},
|
||||
|
||||
{120, "Short Combat Edge"_s},
|
||||
|
||||
{160, "Short Energy Blade (Motion)"_s},
|
||||
{161, "Short Powered Blade"_s},
|
||||
|
||||
{180, "Triclaw"_s},
|
||||
{181, "Straight Triclaw"_s},
|
||||
{182, "Griphold Claw"_s},
|
||||
{183, "Energy Claw"_s},
|
||||
{184, "Openhold Claw"_s},
|
||||
{185, "Hooktusk Claw"_s},
|
||||
|
||||
{200, "Bracer"_s},
|
||||
{201, "Custom Bracer"_s},
|
||||
|
||||
{210, "Expanded Bracer"_s},
|
||||
{211, "Expanded Custom Bracer"_s},
|
||||
|
||||
{300, "Heavy Smasher"_s},
|
||||
{301, "Heavy Basher"_s},
|
||||
{302, "Heavy Torch Mace"_s},
|
||||
|
||||
{400, "Light Smasher"_s},
|
||||
{401, "Light Basher"_s},
|
||||
{402, "Light Torch Mace"_s},
|
||||
|
||||
{420, "War Hammer"_s},
|
||||
{421, "Great Hammer"_s},
|
||||
{422, "Spiked Hammer"_s},
|
||||
{423, "Broadhead Hammer"_s},
|
||||
|
||||
{440, "Morning Star"_s},
|
||||
{441, "Spike Ball"_s},
|
||||
|
||||
{500, "Combat Lance"_s},
|
||||
{501, "Gouger Lance"_s},
|
||||
|
||||
{510, "Piercer"_s},
|
||||
|
||||
{600, "Short Combat Lance"_s},
|
||||
|
||||
{605, "Short Combat Drill (Motion)"_s},
|
||||
|
||||
{610, "Short Piercer"_s},
|
||||
|
||||
{700, "Combat Axe"_s},
|
||||
{701, "Custom Combat Axe"_s},
|
||||
{702, "Piercing Axe"_s},
|
||||
{703, "Frontbreak Axe"_s},
|
||||
{704, "Maiming Axe"_s},
|
||||
{705, "Delta Axe"_s},
|
||||
|
||||
{800, "Combat Scythe"_s},
|
||||
{801, "Reaper Blade"_s},
|
||||
{802, "Clawtooth Scythe"_s},
|
||||
{803, "Wingpoint Scythe"_s},
|
||||
{804, "Snakebone Scythe"_s},
|
||||
|
||||
{900, "Short Combat Scythe"_s},
|
||||
{901, "Short Reaper Blade"_s},
|
||||
{902, "Short Clawtooth Scythe"_s},
|
||||
{903, "Short Wingpoint Scythe"_s},
|
||||
{904, "Short Snakebone Scythe"_s},
|
||||
};
|
||||
// endregion
|
||||
|
||||
// region Shields
|
||||
static const std::map<Int, Containers::StringView> shield_handles {
|
||||
{0, "Balanced Handle"_s},
|
||||
{1, "Expanded Handle"_s},
|
||||
{2, "Lowguard Handle"_s},
|
||||
{3, "Longblocker Handle"_s},
|
||||
{4, "Winged Handle"_s},
|
||||
{5, "Stopper Handle"_s},
|
||||
{6, "Layered Handle"_s},
|
||||
{7, "Riotguard Handle"_s},
|
||||
{8, "Blitz Handle"_s},
|
||||
{9, "Foldable Handle"_s},
|
||||
{10, "Board Handle"_s},
|
||||
{11, "Knight Handle"_s},
|
||||
{12, "Cargwall Handle"_s},
|
||||
|
||||
{100, "Buckler Handle"_s},
|
||||
{101, "Star Handle"_s},
|
||||
};
|
||||
|
||||
static const std::map<Int, Containers::StringView> shield_shells {
|
||||
{0, "Balanced Shell"_s},
|
||||
{1, "Compass Shell"_s},
|
||||
{2, "Uppoint Shell"_s},
|
||||
{3, "Pointed Shell"_s},
|
||||
{4, "Padded Shell"_s},
|
||||
{5, "Pincer Shell"_s},
|
||||
{6, "Fang Shell"_s},
|
||||
{7, "Holder Shell"_s},
|
||||
{8, "Composite Shell"_s},
|
||||
{9, "Mechanical Shell"_s},
|
||||
{10, "Layered Shell"_s},
|
||||
{11, "Parted Shell"_s},
|
||||
{12, "Tapst Shell"_s},
|
||||
{13, "Sidloc Shell"_s},
|
||||
|
||||
{100, "V-Cross Shell"_s},
|
||||
};
|
||||
// endregion
|
||||
|
||||
// region Bullet Shooters
|
||||
static const std::map<Int, Containers::StringView> bshooter_triggers {
|
||||
{0, "BL-Combat Trigger (1H)"_s},
|
||||
{1, "Light Machine Trigger (1H)"_s},
|
||||
{2, "Tactical Trigger (1H)"_s},
|
||||
{3, "Compact Trigger (1H)"_s},
|
||||
{4, "Longhold Trigger (1H)"_s},
|
||||
{5, "Downhold Trigger (1H)"_s},
|
||||
{6, "Cellblock Trigger (1H)"_s},
|
||||
|
||||
{100, "BL-Machine Trigger (2H)"_s},
|
||||
{101, "BL-Short Trigger (2H)"_s},
|
||||
{102, "Shielded Trigger (2H)"_s},
|
||||
{103, "Platedframe Trigger (2H)"_s},
|
||||
{104, "Sidebox Trigger (2H) (Motion)"_s},
|
||||
};
|
||||
|
||||
static const std::map<Int, Containers::StringView> bshooter_barrels {
|
||||
{0, "BL-Combat Barrel (1 shot)"_s},
|
||||
{1, "Shock Absorb Barrel (1 shot) (Motion)"_s},
|
||||
{2, "Muzzlemod Barrel (1 shot)"_s},
|
||||
{3, "Triangular Barrel (1 shot)"_s},
|
||||
{4, "Recoilblock Barrel (1 shot) (Motion)"_s},
|
||||
|
||||
{100, "Six-Barrel Gatling (Auto) (Motion)"_s},
|
||||
{101, "Modded Six-Barrel Gatling (Auto) (Motion)"_s},
|
||||
{102, "Four-Barrel Gatling (Auto) (Motion)"_s},
|
||||
{103, "Retro Style Gatling (Auto) (Motion)"_s},
|
||||
|
||||
{200, "Blast Barrel (Spread)"_s},
|
||||
{201, "Wideblast Barrel (Spread) (Motion)"_s},
|
||||
{202, "Pelleter Barrel (Spread) (Motion)"_s},
|
||||
{203, "Lockhold Barrel (Spread) (Motion)"_s},
|
||||
|
||||
{300, "Propulsive Barrel (Detonate)"_s},
|
||||
{301, "Roundbox Barrel (Detonate)"_s},
|
||||
{302, "ShieldDet Barrel (Detonate)"_s},
|
||||
{303, "RecoilDet Barrel (Detonate) (Motion)"_s},
|
||||
};
|
||||
// endregion
|
||||
|
||||
//region Energy Shooters
|
||||
static const std::map<Int, Containers::StringView> eshooter_triggers {
|
||||
{0, "EN-Rifle Trigger (1H)"_s},
|
||||
{1, "Underarm Trigger (1H)"_s},
|
||||
{2, "EN-Inverted Trigger (1H)"_s},
|
||||
{3, "EN-Submachine Trigger (1H) (Motion)"_s},
|
||||
{4, "EN-Needler Trigger (1H)"_s},
|
||||
{5, "Angular Trigger (1H)"_s},
|
||||
{6, "Exposed Trigger (1H)"_s},
|
||||
|
||||
{100, "EN-Combat Trigger (2H)"_s},
|
||||
{101, "EN-Alternate Trigger (2H)"_s},
|
||||
{102, "Framed Trigger (2H) (Motion)"_s},
|
||||
{103, "Stabilised Trigger (2H)"_s},
|
||||
{104, "EN-Heavy Trigger (2H)"_s},
|
||||
};
|
||||
|
||||
static const std::map<Int, Containers::StringView> eshooter_busters {
|
||||
{0, "EN-Combat Buster (1 shot)"_s},
|
||||
{1, "Delta Cycler (1 shot) (Motion)"_s},
|
||||
{2, "EN-Longbarrel Buster (1 shot)"_s},
|
||||
{3, "Kinetic Buster (1 shot) (Motion)"_s},
|
||||
|
||||
{100, "EN-Rifle Buster (Auto)"_s},
|
||||
{101, "EN-Focus Buster (Auto)"_s},
|
||||
{102, "Machinist Buster (Auto)"_s},
|
||||
{103, "EN-Precision Buster (Auto) (Motion)"_s},
|
||||
|
||||
{200, "Railcharge Buster (Ray) (Motion)"_s},
|
||||
{201, "Clawcharge Buster (Ray)"_s},
|
||||
{202, "Twizelcharge Buster (Ray)"_s},
|
||||
{203, "Deltacharge Buster (Ray)"_s},
|
||||
|
||||
{300, "Subsonic Buster (Wave)"_s},
|
||||
{301, "Amplifier Buster (Wave) (Motion)"_s},
|
||||
{302, "Cyclonwave Buster (Wave)"_s},
|
||||
{303, "Warhorn Buster (Wave) (Motion)"_s},
|
||||
};
|
||||
// endregion
|
||||
|
||||
// region Bullet Launchers
|
||||
static const std::map<Int, Containers::StringView> blauncher_pods {
|
||||
{0, "BL-Delta Pack Launcher (Missile x12)"_s},
|
||||
{1, "BL-Twin Pack Launcher (Missile x12)"_s},
|
||||
{2, "Detector Launcher (Missile x12)"_s},
|
||||
{3, "BL-Triplet Pack Launcher (Missile x12)"_s},
|
||||
{4, "Shielded Launcher (Missile x12)"_s},
|
||||
|
||||
{100, "Warhead Pod (Nuke x2)"_s},
|
||||
{101, "Warhead Launcher (Nuke x2)"_s},
|
||||
{102, "Triangular Warhead Pod (Nuke x2)"_s},
|
||||
{103, "Expanded Warhead Pod (Nuke x2)"_s},
|
||||
{104, "Shielded Warhead Pod (Nuke x2)"_s},
|
||||
|
||||
{200, "Widepack Launcher (Salvo x24)"_s},
|
||||
{201, "Covered Launcher (Salvo x24)"_s},
|
||||
{202, "Double Delta Launcher (Salvo x24)"_s},
|
||||
{203, "Hexagonal Launcher (Salvo x24)"_s},
|
||||
{204, "Shielded Six Launcher (Salvo x24)"_s},
|
||||
|
||||
{300, "Sentinel Cluster Pod (Cluster x40)"_s},
|
||||
{301, "Pincer Cluster Pod (Cluster x40)"_s},
|
||||
{302, "Elliptical Cluster Pod (Cluster x40)"_s},
|
||||
{303, "Sawed Cluster Pod (Cluster x40)"_s},
|
||||
{304, "Pentagonal Cluster Pod (Cluster x40)"_s},
|
||||
};
|
||||
|
||||
static const std::map<Int, Containers::StringView> blauncher_projectiles {
|
||||
{0, "Flathead Missile"_s},
|
||||
{1, "Warhead Missile"_s},
|
||||
{2, "Pointhead Missile"_s},
|
||||
{3, "Marker Missile"_s},
|
||||
{4, "ArB Missile"_s},
|
||||
};
|
||||
// endregion
|
||||
|
||||
// region Energy Launchers
|
||||
static const std::map<Int, Containers::StringView> elauncher_generators {
|
||||
{0, "Fly Unit"_s},
|
||||
{1, "Assault Unit (Motion)"_s},
|
||||
{2, "Falcon Unit"_s},
|
||||
{3, "Drake Unit (Motion)"_s},
|
||||
{4, "Kingfisher Unit"_s},
|
||||
{5, "Tri-Edge Unit"_s},
|
||||
{6, "Flatline Unit"_s},
|
||||
{7, "Boost Unit"_s},
|
||||
{8, "Sparrow Unit"_s},
|
||||
{9, "Guarded Unit"_s},
|
||||
{10, "Sailtail Unit"_s},
|
||||
{11, "Tri-Covered Unit"_s},
|
||||
{12, "Pointy Unit"_s},
|
||||
{13, "Scope-Like Unit"_s},
|
||||
{14, "Rotating Unit (Motion)"_s},
|
||||
{15, "Clamper Unit"_s},
|
||||
{16, "Quadsat Unit"_s},
|
||||
{17, "Squ-Rotating Unit (Motion)"_s},
|
||||
{18, "Bloom Unit"_s},
|
||||
{19, "Edge-Rotating Unit (Motion)"_s},
|
||||
{20, "Shipend Unit"_s},
|
||||
{21, "Revwing Unit"_s},
|
||||
{22, "Viper Unit"_s},
|
||||
{23, "EX Unit"_s},
|
||||
{24, "Aery Unit"_s},
|
||||
{25, "Carrier Unit"_s},
|
||||
{26, "Compartment Unit"_s},
|
||||
{27, "Flatedge Unit"_s},
|
||||
};
|
||||
|
||||
static const std::map<Int, Containers::StringView> elauncher_pods {
|
||||
{0, "EN-Dual Claw Launcher (Echo) (Motion)"_s},
|
||||
{1, "EN-Assault Launcher (Echo)"_s},
|
||||
{2, "EN-Tactical Launcher (Echo)"_s},
|
||||
{3, "EN-Force Focus Launcher (Echo) (Motion)"_s},
|
||||
{4, "EN-Needler Launcher (Echo)"_s},
|
||||
{5, "Spark Launcher (Echo)"_s},
|
||||
{6, "Pinpoint Launcher (Echo)"_s},
|
||||
|
||||
{100, "Raystream Launcher (Beam)"_s},
|
||||
{101, "Perpetum Launcher (Beam)"_s},
|
||||
{102, "Scorcher Launcher (Beam)"_s},
|
||||
{103, "Concentrator Launcher (Beam)"_s},
|
||||
{104, "Crosshair Launcher (Beam)"_s},
|
||||
{105, "Powerlined Launcher (Beam)"_s},
|
||||
{106, "Attached Launcher (Beam)"_s},
|
||||
|
||||
{200, "Hilt Launcher (Slash) (Motion)"_s},
|
||||
{201, "Underangle Launcher (Slash)"_s},
|
||||
{202, "Crossblade Launcher (Slash)"_s},
|
||||
{203, "Deltablade Launcher (Slash) (Motion)"_s},
|
||||
{204, "Spike Launcher (Slash)"_s},
|
||||
{205, "Tri-Pronged Launcher (Slash) (Motion)"_s},
|
||||
{206, "Heavyblade Launcher (Slash)"_s},
|
||||
|
||||
{300, "Covering Launcher (Photon)"_s},
|
||||
{301, "Boxhead Launcher (Photon)"_s},
|
||||
{302, "Stabilised Launcher (Photon)"_s},
|
||||
{303, "Flatline Launcher (Photon)"_s},
|
||||
{304, "Shelled Launcher (Photon)"_s},
|
||||
{305, "Widearm Launcher (Photon)"_s},
|
||||
{306, "Wingspan Launcher (Photon)"_s},
|
||||
};
|
||||
// endregion
|
|
@ -17,6 +17,7 @@
|
|||
#include "../FontAwesome/IconsFontAwesome5.h"
|
||||
|
||||
#include "../Maps/StyleNames.h"
|
||||
#include "../Maps/WeaponParts.h"
|
||||
|
||||
#include "SaveTool.h"
|
||||
|
||||
|
@ -434,7 +435,56 @@ void SaveTool::drawWeaponEditor(Weapon& weapon) {
|
|||
|
||||
auto& part = weapon.parts[_selectedWeaponPart];
|
||||
|
||||
const auto* map = [this, &weapon]()-> const std::map<Int, Containers::StringView>* {
|
||||
switch(weapon.type) {
|
||||
case WeaponType::Melee:
|
||||
return _selectedWeaponPart == 0 ? &melee_grips : &melee_assaulters;
|
||||
case WeaponType::Shield:
|
||||
return _selectedWeaponPart == 0 ? &shield_handles : &shield_shells;
|
||||
case WeaponType::BulletShooter:
|
||||
return _selectedWeaponPart == 0 ? &bshooter_triggers : &bshooter_barrels;
|
||||
case WeaponType::EnergyShooter:
|
||||
return _selectedWeaponPart == 0 ? &eshooter_triggers : &eshooter_busters;
|
||||
case WeaponType::BulletLauncher:
|
||||
return _selectedWeaponPart == 0 ? &blauncher_pods : &blauncher_projectiles;
|
||||
case WeaponType::EnergyLauncher:
|
||||
return _selectedWeaponPart == 0 ? &elauncher_generators : &elauncher_pods;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}();
|
||||
|
||||
CORRADE_INTERNAL_ASSERT(map);
|
||||
|
||||
if(map->find(part.id) != map->cend()) {
|
||||
ImGui::TextUnformatted(map->at(part.id).data());
|
||||
}
|
||||
else if(part.id == -1) {
|
||||
ImGui::TextUnformatted("<none>");
|
||||
}
|
||||
else{
|
||||
ImGui::Text("ID: %i", part.id);
|
||||
}
|
||||
|
||||
if(!map->empty()) {
|
||||
ImGui::SameLine();
|
||||
if(ImGui::SmallButton("Change")) {
|
||||
ImGui::OpenPopup("##WeaponPartPopup");
|
||||
}
|
||||
if(ImGui::BeginPopup("##WeaponPartPopup")) {
|
||||
if(ImGui::BeginListBox("##WeaponParts")) {
|
||||
for(const auto& mapped_part : *map) {
|
||||
if(ImGui::Selectable(mapped_part.second.data(), mapped_part.first == part.id)) {
|
||||
part.id = mapped_part.first;
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::EndListBox();
|
||||
}
|
||||
ImGui::EndPopup();
|
||||
}
|
||||
}
|
||||
|
||||
if(weapon.type == WeaponType::Shield ||
|
||||
(weapon.type == WeaponType::BulletLauncher && _selectedWeaponPart != 0))
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue