Mesen2/Core/NES/HdPacks/HdPackLoader.h
Sour 99e4106761 NES: HD Packs - Fixed regression in some HD packs due to validations added when adding new features to some tags
Also improved error logging, forced the number of errors to display when the pack is loaded starting, and added stricter checks when using hd pack version 109+
2024-06-05 19:42:33 +09:00

60 lines
No EOL
1.9 KiB
C++

#pragma once
#include "pch.h"
#include "NES/HdPacks/HdData.h"
#include "Utilities/ZipReader.h"
#include "Utilities/VirtualFile.h"
enum class HdPackConditionOperator;
class HdPackLoader
{
public:
static bool LoadHdNesPack(string definitionFile, HdPackData &outData);
static bool LoadHdNesPack(VirtualFile &romFile, HdPackData &outData);
private:
HdPackData* _data = nullptr;
bool _loadFromZip = false;
int _currentLine = 0;
int _errorCount = 0;
ZipReader _reader;
string _hdPackDefinitionFile;
string _hdPackFolder;
unordered_map<string, HdPackCondition*> _conditionsByName;
unordered_map<string, HdPackBitmapInfo*> _backgroundsByName;
HdPackLoader();
bool InitializeLoader(VirtualFile &romPath, HdPackData *data);
bool LoadFile(string filename, vector<uint8_t> &fileData);
bool CheckFile(string filename);
bool LoadPack();
void InitializeHdPack();
void LoadCustomPalette();
void ReadTileData(HdTileKey& key, string& tileData, string& palData);
template<typename T> void AddGlobalCondition(string name);
void InitializeGlobalConditions();
//Video
bool ProcessImgTag(string src);
void ProcessPatchTag(vector<string> &tokens);
void ProcessOverscanTag(vector<string> &tokens);
void ProcessConditionTag(vector<string> &tokens, bool createInvertedCondition);
HdPackConditionOperator ParseConditionOperator(string& opString);
void ProcessTileTag(vector<string> &tokens, vector<HdPackCondition*> conditions);
void ProcessBackgroundTag(vector<string> &tokens, vector<HdPackCondition*> conditions);
void ProcessAdditionTag(vector<string>& tokens);
void ProcessFallbackTag(vector<string>& tokens);
void ProcessOptionTag(vector<string>& tokens);
//Audio
int ProcessSoundTrack(string albumString, string trackString, string filename);
void ProcessBgmTag(vector<string> &tokens);
void ProcessSfxTag(vector<string> &tokens);
vector<HdPackCondition*> ParseConditionString(string conditionString);
bool ParseBooleanValue(string value);
};