mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-05-06 00:53:52 +00:00
feat: Wowee Open Building format (.wob) — novel WMO replacement
ALL 6 BLIZZARD FORMATS NOW HAVE OPEN REPLACEMENTS. WOB format: binary building file with groups, portals, and doodads. - WOB1 magic header - Groups: vertices (pos+normal+uv+color), indices, texture paths, bounding box, indoor/outdoor flag - Portals: connect groups with polygon boundaries - Doodad placements: reference .wom models with transform WoweeBuildingLoader: load/save/exists for .wob files. Complete format replacement table: - ADT → WOT/WHM (terrain heightmaps + metadata) - WDT → zone.json (map definition) - BLP → PNG (textures) - DBC → JSON (data tables) - M2 → WOM (static models) - WMO → WOB (buildings with groups/portals/doodads) The wowee project now has a complete suite of novel, open file formats for creating and distributing custom WoW content without any dependency on Blizzard proprietary file formats.
This commit is contained in:
parent
b4cb833108
commit
71c3eb0fe6
3 changed files with 226 additions and 0 deletions
59
include/pipeline/wowee_building.hpp
Normal file
59
include/pipeline/wowee_building.hpp
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
#pragma once
|
||||
|
||||
#include <glm/glm.hpp>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <cstdint>
|
||||
|
||||
namespace wowee {
|
||||
namespace pipeline {
|
||||
|
||||
// Wowee Open Building format (.wob) — novel WMO replacement
|
||||
// Buildings with multiple groups, portals, and doodad sets
|
||||
struct WoweeBuilding {
|
||||
struct Vertex {
|
||||
glm::vec3 position;
|
||||
glm::vec3 normal;
|
||||
glm::vec2 texCoord;
|
||||
glm::vec4 color; // vertex color/lighting
|
||||
};
|
||||
|
||||
struct Group {
|
||||
std::string name;
|
||||
std::vector<Vertex> vertices;
|
||||
std::vector<uint32_t> indices;
|
||||
std::vector<std::string> texturePaths;
|
||||
glm::vec3 boundMin{0}, boundMax{0};
|
||||
bool isOutdoor = false;
|
||||
};
|
||||
|
||||
struct Portal {
|
||||
int groupA = -1, groupB = -1;
|
||||
std::vector<glm::vec3> vertices; // portal polygon
|
||||
};
|
||||
|
||||
struct DoodadPlacement {
|
||||
std::string modelPath; // .wom path
|
||||
glm::vec3 position;
|
||||
glm::vec3 rotation;
|
||||
float scale = 1.0f;
|
||||
};
|
||||
|
||||
std::string name;
|
||||
std::vector<Group> groups;
|
||||
std::vector<Portal> portals;
|
||||
std::vector<DoodadPlacement> doodads;
|
||||
float boundRadius = 1.0f;
|
||||
|
||||
bool isValid() const { return !groups.empty(); }
|
||||
};
|
||||
|
||||
class WoweeBuildingLoader {
|
||||
public:
|
||||
static WoweeBuilding load(const std::string& basePath);
|
||||
static bool save(const WoweeBuilding& building, const std::string& basePath);
|
||||
static bool exists(const std::string& basePath);
|
||||
};
|
||||
|
||||
} // namespace pipeline
|
||||
} // namespace wowee
|
||||
Loading…
Add table
Add a link
Reference in a new issue