Add two more values.

This commit is contained in:
Guillaume Jacquemin 2020-10-05 00:55:08 +02:00
parent 016b549d7a
commit d38606b574
6 changed files with 347 additions and 2 deletions

View file

@ -36,6 +36,24 @@
#include "EvtMainFrame.h" #include "EvtMainFrame.h"
static const std::map<std::int32_t, const char*> mission_id_map {{
{25600, "Mission 1 - Training"},
{25856, "Mission 2 - Patrol Operation"},
{26112, "Mission 3 - Fusion Cells in the Snow"},
{26368, "Mission 4 - Earning Changes"},
{26624, "Mission 5 - Unexpected Coordination"},
{26880, "Mission 6 - Empowering Void"},
{27136, "Mission 7 - Logisitics Obstacles"},
{27392, "Mission 8 - Wrath of the Wastelands"},
{27648, "Mission 9 - Suspicious Originator"},
{27904, "Mission 10 - Researchers Data Recovery"},
{28160, "Mission 11 - Tempestuous Sector"},
{28416, "Mission 12 - Clashes of Metal"},
{51200, "Hunting Ground 1 - Desert Pathway Safety"},
{51456, "Hunting Ground 2 - Snowfield Custodian"},
{51712, "Hunting Ground 3 - Abandoned Valley Raid"},
}};
EvtMainFrame::EvtMainFrame(wxWindow* parent): EvtMainFrame::EvtMainFrame(wxWindow* parent):
MainFrame(parent), MainFrame(parent),
_profileManager{_mbManager.saveDirectory()} _profileManager{_mbManager.saveDirectory()}
@ -519,6 +537,8 @@ void EvtMainFrame::updateProfileStats() {
Profile* current_profile = _profileManager.currentProfile(); Profile* current_profile = _profileManager.currentProfile();
_companyName->SetLabel(current_profile->companyName()); _companyName->SetLabel(current_profile->companyName());
_credits->SetLabel(wxString::Format("%i", current_profile->getCredits())); _credits->SetLabel(wxString::Format("%i", current_profile->getCredits()));
_storyProgress->SetLabel(wxString::Format("%i", current_profile->getStoryProgress()));
_lastMissionId->SetLabel(wxString::Format("%s", mission_id_map.find(current_profile->getLastMissionId()) != mission_id_map.end() ? mission_id_map.at(current_profile->lastMissionId()) : std::to_string(current_profile->lastMissionId())));
} }
void EvtMainFrame::initialiseListView() { void EvtMainFrame::initialiseListView() {

View file

@ -43,7 +43,7 @@ MainFrame::MainFrame( wxWindow* parent, wxWindowID id, const wxString& title, co
_managerNotebook = new wxNotebook( _mainPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); _managerNotebook = new wxNotebook( _mainPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
_profilePanel = new wxPanel( _managerNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); _profilePanel = new wxPanel( _managerNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
wxBoxSizer* bSizerProfilePanel; wxBoxSizer* bSizerProfilePanel;
bSizerProfilePanel = new wxBoxSizer( wxHORIZONTAL ); bSizerProfilePanel = new wxBoxSizer( wxVERTICAL );
wxStaticBoxSizer* sbSizerGeneralInfo; wxStaticBoxSizer* sbSizerGeneralInfo;
sbSizerGeneralInfo = new wxStaticBoxSizer( new wxStaticBox( _profilePanel, wxID_ANY, wxT("General information") ), wxVERTICAL ); sbSizerGeneralInfo = new wxStaticBoxSizer( new wxStaticBox( _profilePanel, wxID_ANY, wxT("General information") ), wxVERTICAL );
@ -70,6 +70,30 @@ MainFrame::MainFrame( wxWindow* parent, wxWindowID id, const wxString& title, co
_credits->Wrap( -1 ); _credits->Wrap( -1 );
fgSizerGeneralStats->Add( _credits, 0, wxALL|wxEXPAND, 5 ); fgSizerGeneralStats->Add( _credits, 0, wxALL|wxEXPAND, 5 );
_storyProgressLabel = new wxStaticText( sbSizerGeneralInfo->GetStaticBox(), wxID_ANY, wxT("Story progress:"), wxDefaultPosition, wxDefaultSize, 0 );
_storyProgressLabel->Wrap( -1 );
_storyProgressLabel->SetToolTip( wxT("What this value does or corresponds to is unknown at this point in time. It is only listed here for the sake of completion.") );
fgSizerGeneralStats->Add( _storyProgressLabel, 0, wxALL, 5 );
_storyProgress = new wxStaticText( sbSizerGeneralInfo->GetStaticBox(), wxID_ANY, wxT("0"), wxDefaultPosition, wxDefaultSize, 0 );
_storyProgress->Wrap( -1 );
_storyProgress->SetToolTip( wxT("What this value does or corresponds to is unknown at this point in time. It is only listed here for the sake of completion.") );
fgSizerGeneralStats->Add( _storyProgress, 0, wxALL, 5 );
_lastMissionIdLabel = new wxStaticText( sbSizerGeneralInfo->GetStaticBox(), wxID_ANY, wxT("Last mission ID:"), wxDefaultPosition, wxDefaultSize, 0 );
_lastMissionIdLabel->Wrap( -1 );
_lastMissionIdLabel->SetToolTip( wxT("This corresponds to the last mission menu selection, not the last mission played.\nIf you see just a number instead of the mission name, please report it to the creator of this application.") );
fgSizerGeneralStats->Add( _lastMissionIdLabel, 0, wxALL, 5 );
_lastMissionId = new wxStaticText( sbSizerGeneralInfo->GetStaticBox(), wxID_ANY, wxT("0"), wxDefaultPosition, wxDefaultSize, 0 );
_lastMissionId->Wrap( -1 );
_lastMissionId->SetToolTip( wxT("This corresponds to the last mission menu selection, not the last mission played.\nIf you see just a number instead of the mission name, please report it to the creator of this application.") );
fgSizerGeneralStats->Add( _lastMissionId, 0, wxALL, 5 );
sbSizerGeneralInfo->Add( fgSizerGeneralStats, 1, wxEXPAND, 5 ); sbSizerGeneralInfo->Add( fgSizerGeneralStats, 1, wxEXPAND, 5 );

View file

@ -445,7 +445,7 @@
<object class="wxBoxSizer" expanded="1"> <object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property> <property name="minimum_size"></property>
<property name="name">bSizerProfilePanel</property> <property name="name">bSizerProfilePanel</property>
<property name="orient">wxHORIZONTAL</property> <property name="orient">wxVERTICAL</property>
<property name="permission">none</property> <property name="permission">none</property>
<object class="sizeritem" expanded="1"> <object class="sizeritem" expanded="1">
<property name="border">5</property> <property name="border">5</property>
@ -719,6 +719,250 @@
<property name="wrap">-1</property> <property name="wrap">-1</property>
</object> </object>
</object> </object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Story progress:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">_storyProgressLabel</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip">What this value does or corresponds to is unknown at this point in time. It is only listed here for the sake of completion.</property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">0</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">_storyProgress</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip">What this value does or corresponds to is unknown at this point in time. It is only listed here for the sake of completion.</property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Last mission ID:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">_lastMissionIdLabel</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip">This corresponds to the last mission menu selection, not the last mission played.&#x0A;If you see just a number instead of the mission name, please report it to the creator of this application.</property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">5</property>
<property name="flag">wxALL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">0</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">_lastMissionId</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip">This corresponds to the last mission menu selection, not the last mission played.&#x0A;If you see just a number instead of the mission name, please report it to the creator of this application.</property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
</object> </object>
</object> </object>
</object> </object>

View file

@ -52,6 +52,10 @@ class MainFrame : public wxFrame
wxStaticText* _companyName; wxStaticText* _companyName;
wxStaticText* _creditsLabel; wxStaticText* _creditsLabel;
wxStaticText* _credits; wxStaticText* _credits;
wxStaticText* _storyProgressLabel;
wxStaticText* _storyProgress;
wxStaticText* _lastMissionIdLabel;
wxStaticText* _lastMissionId;
wxPanel* _massPanel; wxPanel* _massPanel;
wxListView* _installedListView; wxListView* _installedListView;
wxButton* _moveButton; wxButton* _moveButton;

View file

@ -35,6 +35,8 @@
constexpr char company_name_locator[] = "CompanyName\0\x0c\0\0\0StrProperty"; constexpr char company_name_locator[] = "CompanyName\0\x0c\0\0\0StrProperty";
constexpr char active_slot_locator[] = "ActiveFrameSlot\0\x0c\0\0\0IntProperty"; constexpr char active_slot_locator[] = "ActiveFrameSlot\0\x0c\0\0\0IntProperty";
constexpr char credits_locator[] = "Credit\0\x0c\0\0\0IntProperty"; constexpr char credits_locator[] = "Credit\0\x0c\0\0\0IntProperty";
constexpr char story_progress_locator[] = "StoryProgress\0\x0c\0\0\0IntProperty";
constexpr char last_mission_id_locator[] = "LastMissionID\0\x0c\0\0\0IntProperty";
using namespace Corrade; using namespace Corrade;
@ -132,12 +134,53 @@ auto Profile::getCredits() -> std::int32_t {
_credits = *reinterpret_cast<const std::int32_t*>(iter + 0x20); _credits = *reinterpret_cast<const std::int32_t*>(iter + 0x20);
} }
else{ else{
_lastError = "The profile save seems to be corrupted or the game didn't release the handle on the file.";
_credits = -1; _credits = -1;
} }
return _credits; return _credits;
} }
auto Profile::storyProgress() -> std::int32_t {
return _storyProgress;
}
auto Profile::getStoryProgress() -> std::int32_t {
auto mmap = Utility::Directory::mapRead(Utility::Directory::join(_profileDirectory, _filename));
auto iter = std::search(mmap.begin(), mmap.end(), &story_progress_locator[0], &story_progress_locator[29]);
if(iter != mmap.end()) {
_storyProgress = *reinterpret_cast<const std::int32_t*>(iter + 0x26);
}
else{
_lastError = "The profile save seems to be corrupted or the game didn't release the handle on the file.";
_storyProgress = -1;
}
return _storyProgress;
}
auto Profile::lastMissionId() -> std::int32_t {
return _lastMissionId;
}
auto Profile::getLastMissionId() -> std::int32_t {
auto mmap = Utility::Directory::mapRead(Utility::Directory::join(_profileDirectory, _filename));
auto iter = std::search(mmap.begin(), mmap.end(), &last_mission_id_locator[0], &last_mission_id_locator[29]);
if(iter != mmap.end()) {
_lastMissionId = *reinterpret_cast<const std::int32_t*>(iter + 0x26);
}
else{
_lastError = "The profile save seems to be corrupted or the game didn't release the handle on the file.";
_lastMissionId = -1;
}
return _lastMissionId;
}
auto Profile::backup(const std::string& filename) -> bool { auto Profile::backup(const std::string& filename) -> bool {
if(filename.empty() || (filename.length() < 5 && !Utility::String::endsWith(filename, ".zip"))) { if(filename.empty() || (filename.length() < 5 && !Utility::String::endsWith(filename, ".zip"))) {
_lastError = "Invalid filename " + filename + " in Profile::backup()"; _lastError = "Invalid filename " + filename + " in Profile::backup()";

View file

@ -32,6 +32,12 @@ class Profile {
auto credits() const -> std::int32_t; auto credits() const -> std::int32_t;
auto getCredits() -> std::int32_t; auto getCredits() -> std::int32_t;
auto storyProgress() -> std::int32_t;
auto getStoryProgress() -> std::int32_t;
auto lastMissionId() -> std::int32_t;
auto getLastMissionId() -> std::int32_t;
auto backup(const std::string& filename) -> bool; auto backup(const std::string& filename) -> bool;
private: private:
@ -50,6 +56,10 @@ class Profile {
std::int8_t _activeFrameSlot = 0; std::int8_t _activeFrameSlot = 0;
std::int32_t _credits; std::int32_t _credits;
std::int32_t _storyProgress;
std::int32_t _lastMissionId;
}; };
#endif //PROFILE_H #endif //PROFILE_H