Open Source Tomb Raider Engine
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

tombraider.bfft 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443
  1. /*
  2. * tombraider.bfft - Tomb Raider 1 - 3 Level File Format Description
  3. * 2014, Thomas Buck <xythobuz@xythobuz.de>
  4. *
  5. * Based on the TR Rosetta Stone (http://www.tnlc.com/eep/tr/TRosettaStone.html)
  6. * Developed for Binspector (https://github.com/binspector/binspector)
  7. */
  8. struct face4_t {
  9. unsigned 16 little vertices[4];
  10. unsigned 16 little texture;
  11. }
  12. struct face3_t {
  13. unsigned 16 little vertices[3];
  14. unsigned 16 little texture;
  15. }
  16. struct vertex_t {
  17. signed 16 little x;
  18. signed 16 little y;
  19. signed 16 little z;
  20. summary "X: ", x, " Y: ", y, " Z: ", z;
  21. }
  22. struct room_vertex_t {
  23. vertex_t vertex;
  24. signed 16 little lighting1;
  25. if (TRversion > 1) {
  26. unsigned 16 little attributes;
  27. signed 16 little lighting2;
  28. }
  29. }
  30. struct room_sprite_t {
  31. signed 16 little vertex;
  32. signed 16 little texture;
  33. }
  34. struct room_door_t {
  35. unsigned 16 little adjoiningRoom;
  36. vertex_t normal;
  37. vertex_t vertices[4];
  38. summary "To: ", adjoiningRoom;
  39. }
  40. struct room_sector_t {
  41. unsigned 16 little floorDataIndex;
  42. unsigned 16 little boxIndex;
  43. unsigned 8 little roomBelow;
  44. signed 8 little floor;
  45. unsigned 8 little roomAbove;
  46. signed 8 little ceiling;
  47. summary "Be.: ", roomBelow, " Ab.: ", roomAbove;
  48. }
  49. struct room_light_t {
  50. signed 32 little x;
  51. signed 32 little y;
  52. signed 32 little z;
  53. unsigned 16 little intensity1;
  54. if (TRversion > 1)
  55. unsigned 16 little intensity2;
  56. unsigned 32 little fade1;
  57. if (TRversion > 1)
  58. unsigned 32 little fade2;
  59. summary "X: ", x, " Y: ", y, " Z: ", z;
  60. }
  61. struct room_mesh_t {
  62. unsigned 32 little x;
  63. unsigned 32 little y;
  64. unsigned 32 little z;
  65. unsigned 16 little rotation;
  66. unsigned 16 little intensity1;
  67. if (TRversion > 1)
  68. unsigned 16 little intensity2;
  69. unsigned 16 little objectID;
  70. summary "ID: ", objectID, " X: ", x, " Y: ", y, " Z: ", z;
  71. }
  72. struct room_t {
  73. // Room Header
  74. signed 32 little x;
  75. signed 32 little z;
  76. signed 32 little yBottom;
  77. signed 32 little yTop;
  78. unsigned 32 little numDataToFollow;
  79. unsigned 16 little numVertices;
  80. room_vertex_t vertices[numVertices];
  81. unsigned 16 little numRectangles;
  82. face4_t rectangles[numRectangles];
  83. unsigned 16 little numTriangles;
  84. face3_t triangles[numTriangles];
  85. unsigned 16 little numSprites;
  86. room_sprite_t sprites[numSprites];
  87. unsigned 16 little numDoors;
  88. room_door_t doors[numDoors];
  89. unsigned 16 little numZSector;
  90. unsigned 16 little numXSector;
  91. room_sector_t sectorData[numZSector * numXSector];
  92. signed 16 little intensity1;
  93. if (TRversion > 1)
  94. signed 16 little intensity2;
  95. if (TRversion == 2)
  96. signed 16 little lightMode;
  97. unsigned 16 little numLights;
  98. room_light_t lights[numLights];
  99. unsigned 16 little numStaticMeshes;
  100. room_mesh_t staticMeshes[numStaticMeshes];
  101. signed 16 little alternateRoom;
  102. unsigned 16 little flags;
  103. if (TRversion == 3)
  104. unsigned 24 little roomLightColor;
  105. summary "X: ", x, " Ybot: ", yBottom, " Ytop: ", yTop, " Z: ", z;
  106. }
  107. struct animation_t {
  108. unsigned 32 little frameOffset;
  109. unsigned 8 little frameRate;
  110. unsigned 8 little frameSize;
  111. unsigned 16 little stateID;
  112. skip unknown[8];
  113. unsigned 16 little frameStart;
  114. unsigned 16 little frameEnd;
  115. unsigned 16 little nextAnimation;
  116. unsigned 16 little nextFrame;
  117. unsigned 16 little numStateChanges;
  118. unsigned 16 little stateChangeOffset;
  119. unsigned 16 little numAnimCommands;
  120. unsigned 16 little animCommandOffset;
  121. summary "State: ", stateID, " To: ", nextAnimation, "-", nextFrame;
  122. }
  123. struct state_change_t {
  124. unsigned 16 little stateID;
  125. unsigned 16 little numAnimDispatches;
  126. unsigned 16 little animDispatchOffset;
  127. summary "State: ", stateID;
  128. }
  129. struct anim_dispatch_t {
  130. signed 16 little low;
  131. signed 16 little high;
  132. signed 16 little nextAnimation;
  133. signed 16 little nextFrame;
  134. summary low, "-", high, " To: ", nextAnimation, "-", nextFrame;
  135. }
  136. struct moveable_t {
  137. unsigned 32 little objectID;
  138. unsigned 16 little numMeshes;
  139. unsigned 16 little startingMesh;
  140. unsigned 32 little meshTree;
  141. unsigned 32 little frameOffset;
  142. unsigned 16 little animation;
  143. summary "ID: ", objectID, " Anim: ", animation;
  144. }
  145. struct static_mesh_t {
  146. unsigned 32 little objectID;
  147. unsigned 16 little mesh;
  148. vertex_t boundingBox[4];
  149. unsigned 16 little flags;
  150. summary "ID: ", objectID;
  151. }
  152. struct object_texture_vert_t {
  153. unsigned 8 little xCoordinate;
  154. unsigned 8 little xPixel;
  155. unsigned 8 little yCoordinate;
  156. unsigned 8 little yPixel;
  157. summary xCoordinate, "-", yCoordinate, ", ", xPixel, "-", yPixel;
  158. }
  159. struct object_texture_t {
  160. unsigned 16 little attribute;
  161. unsigned 16 little tile;
  162. object_texture_vert_t vertices[4];
  163. summary "Tile: ", tile;
  164. }
  165. struct sprite_texture_t {
  166. unsigned 16 little tile;
  167. unsigned 8 little x;
  168. unsigned 8 little y;
  169. unsigned 16 little width;
  170. unsigned 16 little height;
  171. signed 16 little leftSide;
  172. signed 16 little topSide;
  173. signed 16 little rightSide;
  174. signed 16 little bottomSide;
  175. summary x, "-", y, ", ", width, "-", height;
  176. }
  177. struct sprite_sequence_t {
  178. signed 32 little objectID;
  179. signed 16 little negativeLength;
  180. signed 16 little offset;
  181. summary "ID: ", objectID;
  182. }
  183. struct camera_t {
  184. signed 32 little x;
  185. signed 32 little y;
  186. signed 32 little z;
  187. signed 16 little room;
  188. unsigned 16 little unknown;
  189. summary "X: ", x, " Y: ", y, " Z: ", z;
  190. }
  191. struct sound_source_t {
  192. signed 32 little x;
  193. signed 32 little y;
  194. signed 32 little z;
  195. unsigned 16 little soundID;
  196. unsigned 16 little flags;
  197. summary "X: ", x, " Y: ", y, " Z: ", z;
  198. }
  199. struct box_t {
  200. if (TRversion > 1) {
  201. unsigned 8 little zMin;
  202. unsigned 8 little zMax;
  203. unsigned 8 little xMin;
  204. unsigned 8 little xMax;
  205. } else {
  206. signed 32 little zMin;
  207. signed 32 little zMax;
  208. signed 32 little xMin;
  209. signed 32 little xMax;
  210. }
  211. signed 16 little trueFloor;
  212. signed 16 little overlapIndex;
  213. summary "X: ", xMin, "-", xMax, " Z: ", zMin, "-", zMax;
  214. }
  215. struct item_t {
  216. signed 16 little objectID;
  217. signed 16 little room;
  218. signed 32 little x;
  219. signed 32 little y;
  220. signed 32 little z;
  221. signed 16 little angle;
  222. signed 16 little intensity1;
  223. if (TRversion > 1)
  224. signed 16 little intensity2;
  225. unsigned 16 little flags;
  226. summary "ID: ", objectID, " X: ", x, " Y: ", y, " Z: ", z;
  227. }
  228. struct cinematic_frame_t {
  229. signed 16 little rotY;
  230. signed 16 little rotZ;
  231. signed 16 little rotZ2;
  232. signed 16 little posZ;
  233. signed 16 little posY;
  234. signed 16 little posX;
  235. signed 16 little unknown;
  236. signed 16 little rotX;
  237. }
  238. struct sound_details_t {
  239. signed 16 little sample;
  240. signed 16 little volume;
  241. signed 16 little unknown1;
  242. signed 16 little unknown2;
  243. summary sample, " - ", volume;
  244. }
  245. struct main {
  246. unsigned 32 little version;
  247. if (version == 0x20) {
  248. notify "Tomb Raider 1 file detected...";
  249. const TRversion = 1;
  250. } else if (version == 0x2D) {
  251. notify "Tomb Raider 2 file detected...";
  252. const TRversion = 2;
  253. } else if ((version == 0xFF080038) || (version == 0xFF180038)) {
  254. notify "Tomb Raider 3 file detected...";
  255. const TRversion = 3;
  256. } else if ((version == 0xFFFFFFF0) || (version == 0x00345254)) {
  257. die "Tomb Raider 4 file detected but not supported!";
  258. } else {
  259. die "Unknown version number found!";
  260. }
  261. if (TRversion > 1)
  262. skip palettes[256 * 7];
  263. unsigned 32 little numTextiles;
  264. skip textiles[256 * 256 * numTextiles];
  265. if (TRversion > 1)
  266. skip textiles16[256 * 256 * numTextiles * 2];
  267. unsigned 32 little unused;
  268. unsigned 16 little numRooms;
  269. room_t rooms[numRooms];
  270. unsigned 32 little numFloorData;
  271. skip floorData[numFloorData * 2];
  272. unsigned 32 little numMeshData;
  273. skip meshData[numMeshData * 2];
  274. unsigned 32 little numMeshPointers;
  275. unsigned 32 little meshPointers[numMeshPointers];
  276. unsigned 32 little numAnimations;
  277. animation_t animations[numAnimations];
  278. unsigned 32 little numStateChanges;
  279. state_change_t stateChanges[numStateChanges];
  280. unsigned 32 little numAnimDispatches;
  281. anim_dispatch_t animDispatches[numAnimDispatches];
  282. unsigned 32 little numAnimCommands;
  283. signed 16 little animCommands[numAnimCommands];
  284. unsigned 32 little numMeshTrees;
  285. signed 32 little meshTrees[numMeshTrees];
  286. unsigned 32 little numFrames;
  287. skip frames[numFrames * 2];
  288. unsigned 32 little numMoveables;
  289. moveable_t moveables[numMoveables];
  290. unsigned 32 little numStaticMeshes;
  291. static_mesh_t staticMeshes[numStaticMeshes];
  292. if (TRversion < 3) {
  293. unsigned 32 little numObjectTextures;
  294. object_texture_t objectTextures[numObjectTextures];
  295. }
  296. unsigned 32 little numSpriteTextures;
  297. sprite_texture_t spriteTextures[numSpriteTextures];
  298. unsigned 32 little numSpriteSequences;
  299. sprite_sequence_t spriteSequences[numSpriteSequences];
  300. unsigned 32 little numCameras;
  301. camera_t cameras[numCameras];
  302. unsigned 32 little numSoundSources;
  303. sound_source_t soundSources[numSoundSources];
  304. unsigned 32 little numBoxes;
  305. box_t boxes[numBoxes];
  306. unsigned 32 little numOverlaps;
  307. skip overlaps[numOverlaps * 2];
  308. if (TRversion > 1)
  309. skip zones[numBoxes * 10 * 2];
  310. else
  311. skip zones[numBoxes * 6 * 2];
  312. unsigned 32 little numAnimatedTextures;
  313. skip animatedTextures[numAnimatedTextures * 2];
  314. if (TRversion == 3) {
  315. unsigned 32 little numObjectTextures;
  316. object_texture_t objectTextures[numObjectTextures];
  317. }
  318. unsigned 32 little numItems;
  319. item_t items[numItems];
  320. skip lightMap[32 * 256];
  321. if (TRversion == 1)
  322. skip palette[256 * 3];
  323. unsigned 16 little numCinematicFrames;
  324. cinematic_frame_t cinematicFrames[numCinematicFrames];
  325. unsigned 16 little numDemoData;
  326. skip demoData[numDemoData];
  327. if (TRversion > 1)
  328. skip soundMap[370 * 2];
  329. else
  330. skip soundMap[256 * 2];
  331. unsigned 32 little numSoundDetails;
  332. sound_details_t soundDetails[numSoundDetails];
  333. if (TRversion == 1) {
  334. unsigned 32 little numSamples;
  335. skip samples[numSamples];
  336. }
  337. unsigned 32 little numSampleIndices;
  338. skip sampleIndices[numSampleIndices * 4];
  339. }