vbsp.h 3.2 KB

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