| 533 | }; |
| 534 | |
| 535 | struct PC { |
| 536 | // ---- CORE DATA TYPES ---- |
| 537 | struct POLYGONDATA { |
| 538 | int16_t texture; |
| 539 | int16_t otherSideTex; |
| 540 | uint8_t vertex[4]; |
| 541 | }; |
| 542 | |
| 543 | struct VERT { |
| 544 | int16_t x, z, y; |
| 545 | }; |
| 546 | |
| 547 | // (Unfortunately, structs below contain the above two modified structs, so must be duplicated across PS1/PC) |
| 548 | struct VROAD { |
| 549 | VERT normalVec; |
| 550 | VERT forwardVec; |
| 551 | }; |
| 552 | |
| 553 | // ---- EXTRA BLOCKS ---- |
| 554 | struct GEOM_BLOCK { |
| 555 | // XBID = 8 |
| 556 | uint32_t recSize; |
| 557 | uint16_t nVerts; |
| 558 | uint16_t nPoly; |
| 559 | VERT *vertexTable; |
| 560 | POLYGONDATA *polygonTable; |
| 561 | }; |
| 562 | |
| 563 | // ---- TRACK BLOCKS ---- |
| 564 | struct TRKBLOCK { |
| 565 | TRKBLOCK_HEADER *header; |
| 566 | VERT *vertexTable; |
| 567 | POLYGONDATA *polygonTable; |
| 568 | POLY_TYPE *polyTypes; |
| 569 | uint16_t nNeighbours; |
| 570 | uint16_t *blockNeighbours; |
| 571 | uint16_t nStructures; |
| 572 | GEOM_BLOCK *structures; |
| 573 | |
| 574 | uint16_t nStructureReferences; |
| 575 | std::vector<GEOM_REF_BLOCK> structureRefData; |
| 576 | |
| 577 | MEDIAN_BLOCK *medianData; |
| 578 | uint16_t nVroad; |
| 579 | VROAD *vroadData; // Reference using XBID 5 |
| 580 | uint16_t nLanes; |
| 581 | LANE_BLOCK *laneData; |
| 582 | }; |
| 583 | |
| 584 | struct SUPERBLOCK { |
| 585 | uint32_t superBlockSize; |
| 586 | uint32_t nBlocks; |
| 587 | uint32_t padding; |
| 588 | TRKBLOCK *trackBlocks; |
| 589 | }; |
| 590 | |
| 591 | // ---- MASTER TRACK STRUCT ---- |
| 592 | struct TRACK { |
nothing calls this directly
no outgoing calls
no test coverage detected