#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 _conditionsByName; unordered_map _backgroundsByName; HdPackLoader(); bool InitializeLoader(VirtualFile &romPath, HdPackData *data); bool LoadFile(string filename, vector &fileData); bool CheckFile(string filename); bool LoadPack(); void InitializeHdPack(); void LoadCustomPalette(); void ReadTileData(HdTileKey& key, string& tileData, string& palData); template void AddGlobalCondition(string name); void InitializeGlobalConditions(); //Video bool ProcessImgTag(string src); void ProcessPatchTag(vector &tokens); void ProcessOverscanTag(vector &tokens); void ProcessConditionTag(vector &tokens, bool createInvertedCondition); HdPackConditionOperator ParseConditionOperator(string& opString); void ProcessTileTag(vector &tokens, vector conditions); void ProcessBackgroundTag(vector &tokens, vector conditions); void ProcessAdditionTag(vector& tokens); void ProcessFallbackTag(vector& tokens); void ProcessOptionTag(vector& tokens); //Audio int ProcessSoundTrack(string albumString, string trackString, string filename); void ProcessBgmTag(vector &tokens); void ProcessSfxTag(vector &tokens); vector ParseConditionString(string conditionString); bool ParseBooleanValue(string value); };