#pragma once #include #include #include #include #include namespace dingosdk { struct StartPointInfo { std::string name; bool is_default{}; }; struct LevelInfo { std::string asset; std::string display_name; std::vector start_points; std::string manifest_start_point; std::uint8_t level_flag68{}; // Manifest rows are detached-level destinations, never base/root levels. bool manifest_only{}; // Declared by a mod's reskate-levels.json (a custom map). bool custom{}; }; struct WorldCatalog { bool available{}; std::string issue; std::vector levels; }; struct SublevelInfo { std::string asset; std::uint32_t state{}; }; struct SublevelCatalog { bool available{}; bool active{}; std::string issue; std::vector levels; }; struct WorldDescription { bool available{}; std::string level, start_point, lm_level, lm_start_point; std::string game_mode, hosted_mode; bool attributes_available{}; std::uint32_t field28{}; std::array flags{}; }; // Read the inspected build's asset metadata only. Call with a validated image // and preferably from a paused main-thread boundary for a consistent snapshot. WorldCatalog read_world_catalog(HANDLE process, std::uintptr_t image_base); // Server detached-sublevel metadata only; active also requires a current root. // Header revalidation detects observed changes, but is not a synchronization lock. SublevelCatalog read_server_sublevels(HANDLE process, std::uintptr_t image_base); WorldDescription read_world_description(HANDLE process, std::uintptr_t descriptor); std::string world_catalog_json(const WorldCatalog& catalog); std::string sublevel_catalog_json(const SublevelCatalog& catalog); std::string world_description_json(const WorldDescription& description); }