vbsp.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. #ifndef VBSP_H__INCLUDED
  2. #define VBSP_H__INCLUDED
  3. #include <stdint.h>
  4. enum {
  5. VBSP_Lump_Entity = 0,
  6. VBSP_Lump_Plane = 1,
  7. VBSP_Lump_TexData = 2,
  8. VBSP_Lump_Vertex = 3,
  9. VBSP_Lump_Visibility = 4,
  10. VBSP_Lump_Node = 5,
  11. VBSP_Lump_TexInfo = 6,
  12. VBSP_Lump_Face = 7,
  13. VBSP_Lump_LightMap = 8,
  14. VBSP_Lump_Leaf = 10,
  15. VBSP_Lump_Edge = 12,
  16. VBSP_Lump_Surfedge = 13,
  17. VBSP_Lump_Model = 14,
  18. VBSP_Lump_LeafFace = 16,
  19. VBSP_Lump_DispInfo = 26,
  20. VBSP_Lump_DispVerts = 33,
  21. VBSP_Lump_PakFile = 40,
  22. VBSP_Lump_TexDataStringData = 43,
  23. VBSP_Lump_TexDataStringTable = 44,
  24. VBSP_Lump_LightMapHDR = 53,
  25. VBSP_Lump_FaceHDR = 58,
  26. VBSP_Lump_COUNT = 64
  27. };
  28. #pragma pack(1)
  29. struct VBSPLumpHeader {
  30. uint32_t file_offset;
  31. uint32_t size;
  32. uint32_t version;
  33. char fourCC[4];
  34. };
  35. struct VBSPHeader {
  36. char ident[4];
  37. uint32_t version;
  38. struct VBSPLumpHeader lump_headers[VBSP_Lump_COUNT];
  39. uint32_t map_revision;
  40. };
  41. struct VBSPLumpPlane { float x, y, z, d; };
  42. struct VBSPLumpTexData {
  43. struct { float x, y, z; } reflectivity;
  44. uint32_t name_string_table_id;
  45. uint32_t width, height;
  46. uint32_t view_width, view_height;
  47. };
  48. struct VBSPLumpVertex { float x, y, z; };
  49. struct VBSPLumpVisibility {
  50. uint32_t num_clusters;
  51. uint32_t byte_offsets[8][2];
  52. };
  53. struct VBSPLumpNode {
  54. uint32_t plane;
  55. uint32_t children[2];
  56. int16_t min[3], max[3];
  57. uint16_t first_face, num_faces;
  58. int16_t area;
  59. int16_t padding_;
  60. };
  61. struct VBSPLumpTexInfo {
  62. float texture_vecs[2][4];
  63. float lightmap_vecs[2][4];
  64. uint32_t flags;
  65. uint32_t texdata;
  66. };
  67. struct VBSPLumpFace {
  68. uint16_t plane;
  69. uint8_t side, node;
  70. uint32_t first_edge;
  71. int16_t num_edges;
  72. int16_t texinfo;
  73. int16_t dispinfo;
  74. int16_t surface_fog_volume_id;
  75. uint8_t styles[4];
  76. uint32_t lightmap_offset;
  77. float area;
  78. int32_t lightmap_min[2];
  79. int32_t lightmap_size[2];
  80. uint32_t orig_face;
  81. uint16_t num_primitives;
  82. uint16_t first_primitive;
  83. uint32_t lightmap_smoothing_group;
  84. };
  85. struct VBSPLumpLightMap {
  86. uint8_t r, g, b;
  87. int8_t exponent;
  88. };
  89. struct VBSPLumpLeaf {
  90. uint32_t contents;
  91. uint16_t cluster;
  92. uint16_t area:9;
  93. uint16_t flags:7;
  94. int16_t min[3], max[3];
  95. uint16_t first_leafface, num_leaffaces;
  96. uint16_t first_leafbrush, num_leafbrushes;
  97. int16_t water_data_id;
  98. };
  99. struct VBSPLumpEdge {
  100. uint16_t v[2];
  101. };
  102. struct VBSPLumpModel {
  103. struct { float x, y, z; } min;
  104. struct { float x, y, z; } max;
  105. struct { float x, y, z; } origin;
  106. int32_t head_node;
  107. int32_t first_face, num_faces;
  108. };
  109. struct VBSPLumpDispInfo {
  110. struct { float x, y, z; } start_pos;
  111. int32_t vtx_start;
  112. int32_t tri_start;
  113. int32_t power;
  114. int32_t min_tess;
  115. float smoothing_angle;
  116. int32_t contents;
  117. uint16_t face;
  118. int32_t lightmap_alpha_start; /* not used? */
  119. int32_t lightmap_sample_position_start;
  120. /* FIXME a mistake here?
  121. struct {
  122. struct {
  123. uint16_t index;
  124. uint8_t orientation;
  125. uint8_t span;
  126. uint8_t neighbor_span;
  127. } sub_neighbors[2];
  128. } edge_neighbors[4];
  129. struct {
  130. uint16_t indices[4];
  131. uint8_t num;
  132. } corner_neighbors[4];
  133. */
  134. uint8_t fixme_padding[90];
  135. uint32_t allowed_verts[10];
  136. };
  137. struct VBSPLumpDispVert {
  138. float x, y, z, dist, alpha;
  139. };
  140. #pragma pack()
  141. enum VBSPSurfaceFlags {
  142. VBSP_Surface_Light = 0x0001,
  143. VBSP_Surface_Sky2D = 0x0002,
  144. VBSP_Surface_Sky = 0x0004,
  145. VBSP_Surface_NoDraw = 0x0080,
  146. VBSP_Surface_NoLight = 0x0400
  147. };
  148. #endif /* ifndef VBSP_H__INCLUDED */