Add two more values.
This commit is contained in:
parent
016b549d7a
commit
d38606b574
6 changed files with 347 additions and 2 deletions
|
@ -36,6 +36,24 @@
|
|||
|
||||
#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):
|
||||
MainFrame(parent),
|
||||
_profileManager{_mbManager.saveDirectory()}
|
||||
|
@ -519,6 +537,8 @@ void EvtMainFrame::updateProfileStats() {
|
|||
Profile* current_profile = _profileManager.currentProfile();
|
||||
_companyName->SetLabel(current_profile->companyName());
|
||||
_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() {
|
||||
|
|
|
@ -43,7 +43,7 @@ MainFrame::MainFrame( wxWindow* parent, wxWindowID id, const wxString& title, co
|
|||
_managerNotebook = new wxNotebook( _mainPanel, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
_profilePanel = new wxPanel( _managerNotebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
||||
wxBoxSizer* bSizerProfilePanel;
|
||||
bSizerProfilePanel = new wxBoxSizer( wxHORIZONTAL );
|
||||
bSizerProfilePanel = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
wxStaticBoxSizer* sbSizerGeneralInfo;
|
||||
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 );
|
||||
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 );
|
||||
|
||||
|
|
|
@ -445,7 +445,7 @@
|
|||
<object class="wxBoxSizer" expanded="1">
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">bSizerProfilePanel</property>
|
||||
<property name="orient">wxHORIZONTAL</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="1">
|
||||
<property name="border">5</property>
|
||||
|
@ -719,6 +719,250 @@
|
|||
<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">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.
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.
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>
|
||||
|
|
|
@ -52,6 +52,10 @@ class MainFrame : public wxFrame
|
|||
wxStaticText* _companyName;
|
||||
wxStaticText* _creditsLabel;
|
||||
wxStaticText* _credits;
|
||||
wxStaticText* _storyProgressLabel;
|
||||
wxStaticText* _storyProgress;
|
||||
wxStaticText* _lastMissionIdLabel;
|
||||
wxStaticText* _lastMissionId;
|
||||
wxPanel* _massPanel;
|
||||
wxListView* _installedListView;
|
||||
wxButton* _moveButton;
|
||||
|
|
|
@ -35,6 +35,8 @@
|
|||
constexpr char company_name_locator[] = "CompanyName\0\x0c\0\0\0StrProperty";
|
||||
constexpr char active_slot_locator[] = "ActiveFrameSlot\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;
|
||||
|
||||
|
@ -132,12 +134,53 @@ auto Profile::getCredits() -> std::int32_t {
|
|||
_credits = *reinterpret_cast<const std::int32_t*>(iter + 0x20);
|
||||
}
|
||||
else{
|
||||
_lastError = "The profile save seems to be corrupted or the game didn't release the handle on the file.";
|
||||
_credits = -1;
|
||||
}
|
||||
|
||||
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 {
|
||||
if(filename.empty() || (filename.length() < 5 && !Utility::String::endsWith(filename, ".zip"))) {
|
||||
_lastError = "Invalid filename " + filename + " in Profile::backup()";
|
||||
|
|
|
@ -32,6 +32,12 @@ class Profile {
|
|||
auto credits() const -> 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;
|
||||
|
||||
private:
|
||||
|
@ -50,6 +56,10 @@ class Profile {
|
|||
std::int8_t _activeFrameSlot = 0;
|
||||
|
||||
std::int32_t _credits;
|
||||
|
||||
std::int32_t _storyProgress;
|
||||
|
||||
std::int32_t _lastMissionId;
|
||||
};
|
||||
|
||||
#endif //PROFILE_H
|
||||
|
|
Loading…
Reference in a new issue