// resource_pack.hpp - Sistema de empaquetament de recursos // © 2026 JailDesigner // Basat en el sistema de "pollo" con adaptacions per Orni Attack #pragma once #include #include #include #include namespace Resource { // Capçalera del file de paquet struct PackHeader { char magic[4]; // "ORNI" uint32_t version; // Versión del format (1) }; // Entrada de recurs dins el paquet struct ResourceEntry { std::string filename; // Nom del recurs (con barres normals) uint64_t offset; // Posición dins el bloc de dades uint64_t size; // Mida en bytes uint32_t checksum; // Checksum CRC32 per verificació }; // Clase principal per gestionar paquets de recursos class Pack { public: Pack() = default; ~Pack() = default; // Añadir archivos al paquet auto addFile(const std::string& filepath, const std::string& pack_name) -> bool; auto addDirectory(const std::string& dir_path, const std::string& base_path = "") -> bool; // Guardar i load paquets auto savePack(const std::string& pack_file) -> bool; auto loadPack(const std::string& pack_file) -> bool; // Accés a recursos auto getResource(const std::string& filename) -> std::vector; [[nodiscard]] auto hasResource(const std::string& filename) const -> bool; [[nodiscard]] auto getResourceList() const -> std::vector; // Validació [[nodiscard]] auto validatePack() const -> bool; private: // Constants static constexpr const char* MAGIC_HEADER = "ORNI"; static constexpr uint32_t VERSION = 1; static constexpr const char* DEFAULT_ENCRYPT_KEY = "ORNI_RESOURCES_2025"; // Dades del paquet std::unordered_map resources_; std::vector data_; // Funciones auxiliars auto readFile(const std::string& filepath) -> std::vector; [[nodiscard]] auto calculateChecksum(const std::vector& data) const -> uint32_t; void encryptData(std::vector& data, const std::string& key); void decryptData(std::vector& data, const std::string& key); }; } // namespace Resource