mirror of
https://github.com/XProger/OpenLara.git
synced 2025-08-20 03:41:33 +02:00
fix Sega Saturn format support for 3DS and XBOX
This commit is contained in:
168
src/format.h
168
src/format.h
@@ -3909,8 +3909,62 @@ namespace TR {
|
|||||||
#define CHUNK(str) ((uint64)((const char*)(str))[0] | ((uint64)((const char*)(str))[1] << 8) | ((uint64)((const char*)(str))[2] << 16) | ((uint64)((const char*)(str))[3] << 24) | \
|
#define CHUNK(str) ((uint64)((const char*)(str))[0] | ((uint64)((const char*)(str))[1] << 8) | ((uint64)((const char*)(str))[2] << 16) | ((uint64)((const char*)(str))[3] << 24) | \
|
||||||
((uint64)((const char*)(str))[4] << 32) | ((uint64)((const char*)(str))[5] << 40) | ((uint64)((const char*)(str))[6] << 48) | ((uint64)((const char*)(str))[7] << 56))
|
((uint64)((const char*)(str))[4] << 32) | ((uint64)((const char*)(str))[5] << 40) | ((uint64)((const char*)(str))[6] << 48) | ((uint64)((const char*)(str))[7] << 56))
|
||||||
|
|
||||||
|
#define SAT_ROOMFILE 0x454C49464D4F4F52ULL /* CHUNK("ROOMFILE") */
|
||||||
|
#define SAT_ROOMTINF 0x464E49544D4F4F52ULL /* CHUNK("ROOMTINF") */
|
||||||
|
#define SAT_ROOMTQTR 0x525451544D4F4F52ULL /* CHUNK("ROOMTQTR") */
|
||||||
|
#define SAT_ROOMTSUB 0x425553544D4F4F52ULL /* CHUNK("ROOMTSUB") */
|
||||||
|
#define SAT_ROOMTPAL 0x4C4150544D4F4F52ULL /* CHUNK("ROOMTPAL") */
|
||||||
|
#define SAT_ROOMSPAL 0x4C4150534D4F4F52ULL /* CHUNK("ROOMSPAL") */
|
||||||
|
#define SAT_ROOMDATA 0x415441444D4F4F52ULL /* CHUNK("ROOMDATA") */
|
||||||
|
#define SAT_ROOMNUMB 0x424D554E4D4F4F52ULL /* CHUNK("ROOMNUMB") */
|
||||||
|
#define SAT_MESHPOS_ 0x20534F504853454DULL /* CHUNK("MESHPOS ") */
|
||||||
|
#define SAT_MESHSIZE 0x455A49534853454DULL /* CHUNK("MESHSIZE") */
|
||||||
|
#define SAT_DOORDATA 0x41544144524F4F44ULL /* CHUNK("DOORDATA") */
|
||||||
|
#define SAT_FLOORDAT 0x544144524F4F4C46ULL /* CHUNK("FLOORDAT") */
|
||||||
|
#define SAT_FLOORSIZ 0x5A4953524F4F4C46ULL /* CHUNK("FLOORSIZ") */
|
||||||
|
#define SAT_FLORDATA 0x41544144524F4C46ULL /* CHUNK("FLORDATA") */
|
||||||
|
#define SAT_LIGHTAMB 0x424D41544847494CULL /* CHUNK("LIGHTAMB") */
|
||||||
|
#define SAT_RM_FLIP_ 0x2050494C465F4D52ULL /* CHUNK("RM_FLIP ") */
|
||||||
|
#define SAT_RM_FLAGS 0x5347414C465F4D52ULL /* CHUNK("RM_FLAGS") */
|
||||||
|
#define SAT_LIGHTSIZ 0x5A4953544847494CULL /* CHUNK("LIGHTSIZ") */
|
||||||
|
#define SAT_CAMERAS_ 0x20534152454D4143ULL /* CHUNK("CAMERAS ") */
|
||||||
|
#define SAT_SOUNDFX_ 0x205846444E554F53ULL /* CHUNK("SOUNDFX ") */
|
||||||
|
#define SAT_BOXES___ 0x2020205345584F42ULL /* CHUNK("BOXES ") */
|
||||||
|
#define SAT_OVERLAPS 0x5350414C5245564FULL /* CHUNK("OVERLAPS") */
|
||||||
|
#define SAT_GND_ZONE 0x454E4F5A5F444E47ULL /* CHUNK("GND_ZONE") */
|
||||||
|
#define SAT_GND_ZON2 0x324E4F5A5F444E47ULL /* CHUNK("GND_ZON2") */
|
||||||
|
#define SAT_FLY_ZONE 0x454E4F5A5F594C46ULL /* CHUNK("FLY_ZONE") */
|
||||||
|
#define SAT_ARANGES_ 0x205345474E415241ULL /* CHUNK("ARANGES ") */
|
||||||
|
#define SAT_ITEMDATA 0x415441444D455449ULL /* CHUNK("ITEMDATA") */
|
||||||
|
#define SAT_ROOMEND_ 0x20444E454D4F4F52ULL /* CHUNK("ROOMEND ") */
|
||||||
|
#define SAD_OBJFILE_ 0x20454C49464A424FULL /* CHUNK("OBJFILE ") */
|
||||||
|
#define SAD_ANIMS___ 0x202020534D494E41ULL /* CHUNK("ANIMS ") */
|
||||||
|
#define SAD_CHANGES_ 0x205345474E414843ULL /* CHUNK("CHANGES ") */
|
||||||
|
#define SAD_RANGES_z 0x00205345474E4152ULL /* CHUNK("RANGES \0") */
|
||||||
|
#define SAD_COMMANDS 0x53444E414D4D4F43ULL /* CHUNK("COMMANDS") */
|
||||||
|
#define SAD_ANIBONES 0x53454E4F42494E41ULL /* CHUNK("ANIBONES") */
|
||||||
|
#define SAD_ANIMOBJ_ 0x204A424F4D494E41ULL /* CHUNK("ANIMOBJ ") */
|
||||||
|
#define SAD_STATOBJ_ 0x204A424F54415453ULL /* CHUNK("STATOBJ ") */
|
||||||
|
#define SAD_FRAMES__ 0x202053454D415246ULL /* CHUNK("FRAMES ") */
|
||||||
|
#define SAD_MESHPTRS 0x535254504853454DULL /* CHUNK("MESHPTRS") */
|
||||||
|
#define SAD_MESHDATA 0x415441444853454DULL /* CHUNK("MESHDATA") */
|
||||||
|
#define SAD_OTEXTINF 0x464E49545845544FULL /* CHUNK("OTEXTINF") */
|
||||||
|
#define SAD_OTEXTDAT 0x544144545845544FULL /* CHUNK("OTEXTDAT") */
|
||||||
|
#define SAD_ITEXTINF 0x464E495458455449ULL /* CHUNK("ITEXTINF") */
|
||||||
|
#define SAD_ITEXTDAT 0x5441445458455449ULL /* CHUNK("ITEXTDAT") */
|
||||||
|
#define SAD_OBJEND__ 0x2020444E454A424FULL /* CHUNK("OBJEND ") */
|
||||||
|
#define SPR_SPRFILE_ 0x20454C4946525053ULL /* CHUNK("SPRFILE ") */
|
||||||
|
#define SPR_SPRITINF 0x464E495449525053ULL /* CHUNK("SPRITINF") */
|
||||||
|
#define SPR_SPRITDAT 0x5441445449525053ULL /* CHUNK("SPRITDAT") */
|
||||||
|
#define SPR_OBJECTS_ 0x20535443454A424FULL /* CHUNK("OBJECTS ") */
|
||||||
|
#define SPR_SPRITEND 0x444E455449525053ULL /* CHUNK("SPRITEND") */
|
||||||
|
#define SND_SAMPLUT_ 0x2054554C504D4153ULL /* CHUNK("SAMPLUT ") */
|
||||||
|
#define SND_SAMPINFS 0x53464E49504D4153ULL /* CHUNK("SAMPINFS") */
|
||||||
|
#define SND_SAMPLE__ 0x2020454C504D4153ULL /* CHUNK("SAMPLE ") */
|
||||||
|
#define SND_ENDFILEz 0x00454C4946444E45ULL /* CHUNK("ENDFILE\0") */
|
||||||
|
|
||||||
void readSAT(Stream &stream) {
|
void readSAT(Stream &stream) {
|
||||||
#if !defined(_OS_PSP) && !defined(_OS_3DS) && !defined(_OS_XBOX)
|
#if !defined(_OS_PSP)
|
||||||
Room *room = NULL;
|
Room *room = NULL;
|
||||||
|
|
||||||
while (stream.pos < stream.size) {
|
while (stream.pos < stream.size) {
|
||||||
@@ -3926,18 +3980,18 @@ namespace TR {
|
|||||||
|
|
||||||
switch (chunkType) {
|
switch (chunkType) {
|
||||||
// SAT
|
// SAT
|
||||||
case CHUNK("ROOMFILE") :
|
case SAT_ROOMFILE :
|
||||||
ASSERTV(stream.readBE32() == 0x00000000);
|
ASSERTV(stream.readBE32() == 0x00000000);
|
||||||
ASSERTV(stream.readBE32() == 0x00000020);
|
ASSERTV(stream.readBE32() == 0x00000020);
|
||||||
break;
|
break;
|
||||||
case CHUNK("ROOMTINF") :
|
case SAT_ROOMTINF :
|
||||||
ASSERTV(stream.readBE32() == 0x00000010);
|
ASSERTV(stream.readBE32() == 0x00000010);
|
||||||
roomTexturesCount = stream.readBE32();
|
roomTexturesCount = stream.readBE32();
|
||||||
roomTextures = roomTexturesCount ? new TextureInfo[roomTexturesCount] : NULL;
|
roomTextures = roomTexturesCount ? new TextureInfo[roomTexturesCount] : NULL;
|
||||||
for (int i = 0; i < roomTexturesCount; i++)
|
for (int i = 0; i < roomTexturesCount; i++)
|
||||||
readObjectTex(stream, roomTextures[i], TEX_TYPE_ROOM);
|
readObjectTex(stream, roomTextures[i], TEX_TYPE_ROOM);
|
||||||
break;
|
break;
|
||||||
case CHUNK("ROOMTQTR") : {
|
case SAT_ROOMTQTR : {
|
||||||
ASSERTV(stream.readBE32() == 0x00000001);
|
ASSERTV(stream.readBE32() == 0x00000001);
|
||||||
roomTexturesDataSize = stream.readBE32();
|
roomTexturesDataSize = stream.readBE32();
|
||||||
roomTexturesData = roomTexturesDataSize ? new uint8[roomTexturesDataSize] : NULL;
|
roomTexturesData = roomTexturesDataSize ? new uint8[roomTexturesDataSize] : NULL;
|
||||||
@@ -3948,7 +4002,7 @@ namespace TR {
|
|||||||
*/
|
*/
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("ROOMTSUB") :
|
case SAT_ROOMTSUB :
|
||||||
ASSERTV(stream.readBE32() == 0x00000001);
|
ASSERTV(stream.readBE32() == 0x00000001);
|
||||||
/*
|
/*
|
||||||
roomTexturesDataSize = stream.readBE32();
|
roomTexturesDataSize = stream.readBE32();
|
||||||
@@ -3961,34 +4015,34 @@ namespace TR {
|
|||||||
stream.raw(tsub, sizeof(uint8) * tsubCount);
|
stream.raw(tsub, sizeof(uint8) * tsubCount);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case CHUNK("ROOMTPAL") : {
|
case SAT_ROOMTPAL : {
|
||||||
ASSERTV(stream.readBE32() == 0x00000003);
|
ASSERTV(stream.readBE32() == 0x00000003);
|
||||||
stream.seek(stream.readBE32() * 3);
|
stream.seek(stream.readBE32() * 3);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("ROOMSPAL") : {
|
case SAT_ROOMSPAL : {
|
||||||
ASSERTV(stream.readLE32() == 0x02000000);
|
ASSERTV(stream.readLE32() == 0x02000000);
|
||||||
stream.seek(stream.readBE32() * 2);
|
stream.seek(stream.readBE32() * 2);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("ROOMDATA") :
|
case SAT_ROOMDATA :
|
||||||
ASSERTV(stream.readBE32() == 0x00000044);
|
ASSERTV(stream.readBE32() == 0x00000044);
|
||||||
roomsCount = stream.readBE32();
|
roomsCount = stream.readBE32();
|
||||||
rooms = new Room[roomsCount];
|
rooms = new Room[roomsCount];
|
||||||
memset(rooms, 0, sizeof(Room) * roomsCount);
|
memset(rooms, 0, sizeof(Room) * roomsCount);
|
||||||
break;
|
break;
|
||||||
case CHUNK("ROOMNUMB") :
|
case SAT_ROOMNUMB :
|
||||||
ASSERTV(stream.readBE32() == 0x00000000);
|
ASSERTV(stream.readBE32() == 0x00000000);
|
||||||
room = &rooms[stream.readBE32()];
|
room = &rooms[stream.readBE32()];
|
||||||
break;
|
break;
|
||||||
case CHUNK("MESHPOS ") :
|
case SAT_MESHPOS_ :
|
||||||
ASSERT(room);
|
ASSERT(room);
|
||||||
room->info.x = stream.readBE32();
|
room->info.x = stream.readBE32();
|
||||||
room->info.z = stream.readBE32();
|
room->info.z = stream.readBE32();
|
||||||
room->info.yBottom = stream.readBE32();
|
room->info.yBottom = stream.readBE32();
|
||||||
room->info.yTop = stream.readBE32();
|
room->info.yTop = stream.readBE32();
|
||||||
break;
|
break;
|
||||||
case CHUNK("MESHSIZE") : {
|
case SAT_MESHSIZE : {
|
||||||
ASSERT(room);
|
ASSERT(room);
|
||||||
uint32 flag = stream.readBE32();
|
uint32 flag = stream.readBE32();
|
||||||
if (flag == 0x00000014) {
|
if (flag == 0x00000014) {
|
||||||
@@ -4109,7 +4163,7 @@ namespace TR {
|
|||||||
data.fCount = fIndex;
|
data.fCount = fIndex;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("DOORDATA") : {
|
case SAT_DOORDATA : {
|
||||||
int32 roomIndex = stream.readBE32();
|
int32 roomIndex = stream.readBE32();
|
||||||
ASSERT(roomIndex < roomsCount);
|
ASSERT(roomIndex < roomsCount);
|
||||||
Room *room = &rooms[roomIndex];
|
Room *room = &rooms[roomIndex];
|
||||||
@@ -4132,12 +4186,12 @@ namespace TR {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("FLOORDAT") :
|
case SAT_FLOORDAT :
|
||||||
ASSERT(room);
|
ASSERT(room);
|
||||||
room->zSectors = stream.readBE32();
|
room->zSectors = stream.readBE32();
|
||||||
room->xSectors = stream.readBE32();
|
room->xSectors = stream.readBE32();
|
||||||
break;
|
break;
|
||||||
case CHUNK("FLOORSIZ") : {
|
case SAT_FLOORSIZ : {
|
||||||
ASSERTV(stream.readBE32() == 0x00000008);
|
ASSERTV(stream.readBE32() == 0x00000008);
|
||||||
ASSERT(room && room->sectors == NULL);
|
ASSERT(room && room->sectors == NULL);
|
||||||
|
|
||||||
@@ -4158,7 +4212,7 @@ namespace TR {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("FLORDATA") :
|
case SAT_FLORDATA :
|
||||||
ASSERTV(stream.readBE32() == 0x00000002);
|
ASSERTV(stream.readBE32() == 0x00000002);
|
||||||
ASSERT(floors == NULL);
|
ASSERT(floors == NULL);
|
||||||
floorsCount = stream.readBE32();
|
floorsCount = stream.readBE32();
|
||||||
@@ -4166,25 +4220,25 @@ namespace TR {
|
|||||||
for (int i = 0; i < floorsCount; i++)
|
for (int i = 0; i < floorsCount; i++)
|
||||||
floors[i].value = stream.readBE16();
|
floors[i].value = stream.readBE16();
|
||||||
break;
|
break;
|
||||||
case CHUNK("LIGHTAMB") :
|
case SAT_LIGHTAMB :
|
||||||
ASSERT(room);
|
ASSERT(room);
|
||||||
room->ambient = stream.readBE32();
|
room->ambient = stream.readBE32();
|
||||||
room->ambient2 = stream.readBE32();
|
room->ambient2 = stream.readBE32();
|
||||||
break;
|
break;
|
||||||
case CHUNK("RM_FLIP ") : {
|
case SAT_RM_FLIP_ : {
|
||||||
ASSERTV(stream.readBE32() == 0x00000002);
|
ASSERTV(stream.readBE32() == 0x00000002);
|
||||||
uint32 value = stream.readBE32();
|
uint32 value = stream.readBE32();
|
||||||
room->alternateRoom = value == 0xFFFFFFFF ? -1 : value;
|
room->alternateRoom = value == 0xFFFFFFFF ? -1 : value;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("RM_FLAGS") : {
|
case SAT_RM_FLAGS : {
|
||||||
ASSERT(room);
|
ASSERT(room);
|
||||||
ASSERTV(stream.readBE32() == 0x00000002);
|
ASSERTV(stream.readBE32() == 0x00000002);
|
||||||
uint32 value = stream.readBE32();
|
uint32 value = stream.readBE32();
|
||||||
room->flags.water = (value & 0x01) != 0;
|
room->flags.water = (value & 0x01) != 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("LIGHTSIZ") : {
|
case SAT_LIGHTSIZ : {
|
||||||
ASSERTV(stream.readBE32() == 0x00000014);
|
ASSERTV(stream.readBE32() == 0x00000014);
|
||||||
ASSERT(room && room->lights == NULL);
|
ASSERT(room && room->lights == NULL);
|
||||||
room->lightsCount = stream.readBE32();
|
room->lightsCount = stream.readBE32();
|
||||||
@@ -4206,7 +4260,7 @@ namespace TR {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("CAMERAS ") :
|
case SAT_CAMERAS_ :
|
||||||
ASSERTV(stream.readBE32() == 0x00000010);
|
ASSERTV(stream.readBE32() == 0x00000010);
|
||||||
ASSERT(cameras == NULL);
|
ASSERT(cameras == NULL);
|
||||||
camerasCount = stream.readBE32();
|
camerasCount = stream.readBE32();
|
||||||
@@ -4220,7 +4274,7 @@ namespace TR {
|
|||||||
cam.flags.boxIndex = stream.readBE16();
|
cam.flags.boxIndex = stream.readBE16();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CHUNK("SOUNDFX ") : {
|
case SAT_SOUNDFX_ : {
|
||||||
uint32 flag = stream.readBE32();
|
uint32 flag = stream.readBE32();
|
||||||
if (flag == 0x00000000) { // SND
|
if (flag == 0x00000000) { // SND
|
||||||
ASSERTV(stream.readBE32() == 0x00000000);
|
ASSERTV(stream.readBE32() == 0x00000000);
|
||||||
@@ -4254,7 +4308,7 @@ namespace TR {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("BOXES ") :
|
case SAT_BOXES___ :
|
||||||
ASSERTV(stream.readBE32() == 0x00000014);
|
ASSERTV(stream.readBE32() == 0x00000014);
|
||||||
ASSERT(boxes == NULL);
|
ASSERT(boxes == NULL);
|
||||||
boxesCount = stream.readBE32();
|
boxesCount = stream.readBE32();
|
||||||
@@ -4269,7 +4323,7 @@ namespace TR {
|
|||||||
b.overlap.value = stream.readBE16();
|
b.overlap.value = stream.readBE16();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CHUNK("OVERLAPS") :
|
case SAT_OVERLAPS :
|
||||||
ASSERTV(stream.readBE32() == 0x00000002);
|
ASSERTV(stream.readBE32() == 0x00000002);
|
||||||
ASSERT(overlaps == NULL);
|
ASSERT(overlaps == NULL);
|
||||||
overlapsCount = stream.readBE32();
|
overlapsCount = stream.readBE32();
|
||||||
@@ -4277,16 +4331,16 @@ namespace TR {
|
|||||||
for (int i = 0; i < overlapsCount; i++)
|
for (int i = 0; i < overlapsCount; i++)
|
||||||
overlaps[i].value = stream.readBE16();
|
overlaps[i].value = stream.readBE16();
|
||||||
break;
|
break;
|
||||||
case CHUNK("GND_ZONE") :
|
case SAT_GND_ZONE :
|
||||||
case CHUNK("GND_ZON2") :
|
case SAT_GND_ZON2 :
|
||||||
case CHUNK("FLY_ZONE") : {
|
case SAT_FLY_ZONE : {
|
||||||
ASSERTV(stream.readBE32() == 0x00000002);
|
ASSERTV(stream.readBE32() == 0x00000002);
|
||||||
uint16 **ptr;
|
uint16 **ptr;
|
||||||
|
|
||||||
switch (chunkType) {
|
switch (chunkType) {
|
||||||
case CHUNK("GND_ZONE") : ptr = zones[0].ground1 ? &zones[1].ground1 : &zones[0].ground1; break;
|
case SAT_GND_ZONE : ptr = zones[0].ground1 ? &zones[1].ground1 : &zones[0].ground1; break;
|
||||||
case CHUNK("GND_ZON2") : ptr = zones[0].ground2 ? &zones[1].ground2 : &zones[0].ground2; break;
|
case SAT_GND_ZON2 : ptr = zones[0].ground2 ? &zones[1].ground2 : &zones[0].ground2; break;
|
||||||
case CHUNK("FLY_ZONE") : ptr = zones[0].fly ? &zones[1].fly : &zones[0].fly; break;
|
case SAT_FLY_ZONE : ptr = zones[0].fly ? &zones[1].fly : &zones[0].fly; break;
|
||||||
default : ptr = NULL;
|
default : ptr = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4299,7 +4353,7 @@ namespace TR {
|
|||||||
(*ptr)[i] = stream.readBE16();
|
(*ptr)[i] = stream.readBE16();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("ARANGES ") : {
|
case SAT_ARANGES_ : {
|
||||||
ASSERTV(stream.readBE32() == 0x00000008);
|
ASSERTV(stream.readBE32() == 0x00000008);
|
||||||
animTexturesCount = stream.readBE32();
|
animTexturesCount = stream.readBE32();
|
||||||
animTextures = new AnimTexture[animTexturesCount];
|
animTextures = new AnimTexture[animTexturesCount];
|
||||||
@@ -4314,7 +4368,7 @@ namespace TR {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("ITEMDATA") : {
|
case SAT_ITEMDATA : {
|
||||||
ASSERTV(stream.readBE32() == 0x00000014);
|
ASSERTV(stream.readBE32() == 0x00000014);
|
||||||
entitiesBaseCount = stream.readBE32();
|
entitiesBaseCount = stream.readBE32();
|
||||||
entitiesCount = entitiesBaseCount + MAX_RESERVED_ENTITIES;
|
entitiesCount = entitiesBaseCount + MAX_RESERVED_ENTITIES;
|
||||||
@@ -4333,16 +4387,16 @@ namespace TR {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("ROOMEND ") :
|
case SAT_ROOMEND_ :
|
||||||
ASSERTV(stream.readBE32() == 0x00000000);
|
ASSERTV(stream.readBE32() == 0x00000000);
|
||||||
ASSERTV(stream.readBE32() == 0x00000000);
|
ASSERTV(stream.readBE32() == 0x00000000);
|
||||||
break;
|
break;
|
||||||
// SAD
|
// SAD
|
||||||
case CHUNK("OBJFILE ") :
|
case SAD_OBJFILE_ :
|
||||||
ASSERTV(stream.readBE32() == 0x00000000);
|
ASSERTV(stream.readBE32() == 0x00000000);
|
||||||
ASSERTV(stream.readBE32() == 0x00000020);
|
ASSERTV(stream.readBE32() == 0x00000020);
|
||||||
break;
|
break;
|
||||||
case CHUNK("ANIMS ") :
|
case SAD_ANIMS___ :
|
||||||
ASSERTV(stream.readBE32() == 0x00000022);
|
ASSERTV(stream.readBE32() == 0x00000022);
|
||||||
ASSERT(anims == NULL);
|
ASSERT(anims == NULL);
|
||||||
animsCount = stream.readBE32();
|
animsCount = stream.readBE32();
|
||||||
@@ -4367,7 +4421,7 @@ namespace TR {
|
|||||||
anim.animCommand = stream.readBE16();
|
anim.animCommand = stream.readBE16();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CHUNK("CHANGES ") :
|
case SAD_CHANGES_ :
|
||||||
ASSERTV(stream.readBE32() == 0x00000008);
|
ASSERTV(stream.readBE32() == 0x00000008);
|
||||||
ASSERT(states == NULL);
|
ASSERT(states == NULL);
|
||||||
statesCount = stream.readBE32();
|
statesCount = stream.readBE32();
|
||||||
@@ -4380,7 +4434,7 @@ namespace TR {
|
|||||||
ASSERTV(stream.readBE16() == state.rangesOffset); // dummy
|
ASSERTV(stream.readBE16() == state.rangesOffset); // dummy
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CHUNK("RANGES \0") :
|
case SAD_RANGES_z :
|
||||||
ASSERTV(stream.readBE32() == 0x00000008);
|
ASSERTV(stream.readBE32() == 0x00000008);
|
||||||
ASSERT(ranges == NULL);
|
ASSERT(ranges == NULL);
|
||||||
rangesCount = stream.readBE32();
|
rangesCount = stream.readBE32();
|
||||||
@@ -4393,7 +4447,7 @@ namespace TR {
|
|||||||
range.nextFrame = stream.readBE16();
|
range.nextFrame = stream.readBE16();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CHUNK("COMMANDS") :
|
case SAD_COMMANDS :
|
||||||
ASSERTV(stream.readBE32() == 0x00000002);
|
ASSERTV(stream.readBE32() == 0x00000002);
|
||||||
ASSERT(commands == NULL);
|
ASSERT(commands == NULL);
|
||||||
commandsCount = stream.readBE32();
|
commandsCount = stream.readBE32();
|
||||||
@@ -4401,7 +4455,7 @@ namespace TR {
|
|||||||
for (int i = 0; i < commandsCount; i++)
|
for (int i = 0; i < commandsCount; i++)
|
||||||
commands[i] = stream.readBE16();
|
commands[i] = stream.readBE16();
|
||||||
break;
|
break;
|
||||||
case CHUNK("ANIBONES") :
|
case SAD_ANIBONES :
|
||||||
ASSERTV(stream.readBE32() == 0x00000004);
|
ASSERTV(stream.readBE32() == 0x00000004);
|
||||||
ASSERT(nodesData == NULL);
|
ASSERT(nodesData == NULL);
|
||||||
nodesDataSize = stream.readBE32();
|
nodesDataSize = stream.readBE32();
|
||||||
@@ -4409,7 +4463,7 @@ namespace TR {
|
|||||||
for (int i = 0; i < nodesDataSize; i++)
|
for (int i = 0; i < nodesDataSize; i++)
|
||||||
nodesData[i] = stream.readBE32();
|
nodesData[i] = stream.readBE32();
|
||||||
break;
|
break;
|
||||||
case CHUNK("ANIMOBJ ") :
|
case SAD_ANIMOBJ_ :
|
||||||
ASSERTV(stream.readBE32() == 0x00000038);
|
ASSERTV(stream.readBE32() == 0x00000038);
|
||||||
ASSERT(models == NULL);
|
ASSERT(models == NULL);
|
||||||
modelsCount = stream.readBE32();
|
modelsCount = stream.readBE32();
|
||||||
@@ -4427,7 +4481,7 @@ namespace TR {
|
|||||||
ASSERTV(stream.readBE16() == model.animation);
|
ASSERTV(stream.readBE16() == model.animation);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CHUNK("STATOBJ ") :
|
case SAD_STATOBJ_ :
|
||||||
ASSERTV(stream.readBE32() == 0x00000020);
|
ASSERTV(stream.readBE32() == 0x00000020);
|
||||||
ASSERT(staticMeshes == NULL);
|
ASSERT(staticMeshes == NULL);
|
||||||
staticMeshesCount = stream.readBE32();
|
staticMeshesCount = stream.readBE32();
|
||||||
@@ -4451,7 +4505,7 @@ namespace TR {
|
|||||||
mesh.flags = stream.readBE16();
|
mesh.flags = stream.readBE16();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CHUNK("FRAMES ") :
|
case SAD_FRAMES__ :
|
||||||
ASSERTV(stream.readBE32() == 0x00000002);
|
ASSERTV(stream.readBE32() == 0x00000002);
|
||||||
ASSERT(frameData == NULL);
|
ASSERT(frameData == NULL);
|
||||||
frameDataSize = stream.readBE32();
|
frameDataSize = stream.readBE32();
|
||||||
@@ -4459,7 +4513,7 @@ namespace TR {
|
|||||||
for (int i = 0; i < frameDataSize; i++)
|
for (int i = 0; i < frameDataSize; i++)
|
||||||
frameData[i] = stream.readBE16();
|
frameData[i] = stream.readBE16();
|
||||||
break;
|
break;
|
||||||
case CHUNK("MESHPTRS") :
|
case SAD_MESHPTRS :
|
||||||
ASSERTV(stream.readBE32() == 0x00000004);
|
ASSERTV(stream.readBE32() == 0x00000004);
|
||||||
ASSERT(meshOffsets == NULL);
|
ASSERT(meshOffsets == NULL);
|
||||||
meshOffsetsCount = stream.readBE32();
|
meshOffsetsCount = stream.readBE32();
|
||||||
@@ -4467,14 +4521,14 @@ namespace TR {
|
|||||||
for (int i = 0; i < meshOffsetsCount; i++)
|
for (int i = 0; i < meshOffsetsCount; i++)
|
||||||
meshOffsets[i] = stream.readBE32();
|
meshOffsets[i] = stream.readBE32();
|
||||||
break;
|
break;
|
||||||
case CHUNK("MESHDATA") :
|
case SAD_MESHDATA :
|
||||||
ASSERTV(stream.readBE32() == 0x00000002);
|
ASSERTV(stream.readBE32() == 0x00000002);
|
||||||
ASSERT(meshData == NULL);
|
ASSERT(meshData == NULL);
|
||||||
meshDataSize = stream.readBE32();
|
meshDataSize = stream.readBE32();
|
||||||
meshData = meshDataSize ? new uint16[meshDataSize] : NULL;
|
meshData = meshDataSize ? new uint16[meshDataSize] : NULL;
|
||||||
stream.raw(meshData, sizeof(uint16) * meshDataSize);
|
stream.raw(meshData, sizeof(uint16) * meshDataSize);
|
||||||
break;
|
break;
|
||||||
case CHUNK("OTEXTINF") :
|
case SAD_OTEXTINF :
|
||||||
ASSERTV(stream.readBE32() == 0x00000010);
|
ASSERTV(stream.readBE32() == 0x00000010);
|
||||||
ASSERT(objectTextures == NULL);
|
ASSERT(objectTextures == NULL);
|
||||||
objectTexturesCount = stream.readBE32();
|
objectTexturesCount = stream.readBE32();
|
||||||
@@ -4484,14 +4538,14 @@ namespace TR {
|
|||||||
objectTexturesBaseCount = objectTexturesCount;
|
objectTexturesBaseCount = objectTexturesCount;
|
||||||
expandObjectTex(objectTextures, objectTexturesCount);
|
expandObjectTex(objectTextures, objectTexturesCount);
|
||||||
break;
|
break;
|
||||||
case CHUNK("OTEXTDAT") : {
|
case SAD_OTEXTDAT : {
|
||||||
ASSERTV(stream.readBE32() == 0x00000001);
|
ASSERTV(stream.readBE32() == 0x00000001);
|
||||||
objectTexturesDataSize = stream.readBE32();
|
objectTexturesDataSize = stream.readBE32();
|
||||||
objectTexturesData = objectTexturesDataSize ? new uint8[objectTexturesDataSize] : NULL;
|
objectTexturesData = objectTexturesDataSize ? new uint8[objectTexturesDataSize] : NULL;
|
||||||
stream.raw(objectTexturesData, objectTexturesDataSize);
|
stream.raw(objectTexturesData, objectTexturesDataSize);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("ITEXTINF") : {
|
case SAD_ITEXTINF : {
|
||||||
ASSERTV(stream.readBE32() == 0x00000014);
|
ASSERTV(stream.readBE32() == 0x00000014);
|
||||||
itemTexturesCount = stream.readBE32();
|
itemTexturesCount = stream.readBE32();
|
||||||
itemTextures = itemTexturesCount ? new TextureInfo[itemTexturesCount * 5] : NULL;
|
itemTextures = itemTexturesCount ? new TextureInfo[itemTexturesCount * 5] : NULL;
|
||||||
@@ -4501,23 +4555,23 @@ namespace TR {
|
|||||||
expandObjectTex(itemTextures, itemTexturesCount);
|
expandObjectTex(itemTextures, itemTexturesCount);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("ITEXTDAT") : {
|
case SAD_ITEXTDAT : {
|
||||||
ASSERTV(stream.readBE32() == 0x00000001);
|
ASSERTV(stream.readBE32() == 0x00000001);
|
||||||
itemTexturesDataSize = stream.readBE32();
|
itemTexturesDataSize = stream.readBE32();
|
||||||
itemTexturesData = itemTexturesDataSize ? new uint8[itemTexturesDataSize] : NULL;
|
itemTexturesData = itemTexturesDataSize ? new uint8[itemTexturesDataSize] : NULL;
|
||||||
stream.raw(itemTexturesData, itemTexturesDataSize);
|
stream.raw(itemTexturesData, itemTexturesDataSize);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("OBJEND ") :
|
case SAD_OBJEND__ :
|
||||||
ASSERTV(stream.readBE32() == 0x00000000);
|
ASSERTV(stream.readBE32() == 0x00000000);
|
||||||
ASSERTV(stream.readBE32() == 0x00000000);
|
ASSERTV(stream.readBE32() == 0x00000000);
|
||||||
break;
|
break;
|
||||||
// SPR
|
// SPR
|
||||||
case CHUNK("SPRFILE ") :
|
case SPR_SPRFILE_ :
|
||||||
ASSERTV(stream.readBE32() == 0x00000000);
|
ASSERTV(stream.readBE32() == 0x00000000);
|
||||||
ASSERTV(stream.readBE32() == 0x00000020);
|
ASSERTV(stream.readBE32() == 0x00000020);
|
||||||
break;
|
break;
|
||||||
case CHUNK("SPRITINF") : {
|
case SPR_SPRITINF : {
|
||||||
ASSERTV(stream.readBE32() == 0x00000010);
|
ASSERTV(stream.readBE32() == 0x00000010);
|
||||||
spriteTexturesCount = stream.readBE32();
|
spriteTexturesCount = stream.readBE32();
|
||||||
spriteTextures = spriteTexturesCount ? new TextureInfo[spriteTexturesCount] : NULL;
|
spriteTextures = spriteTexturesCount ? new TextureInfo[spriteTexturesCount] : NULL;
|
||||||
@@ -4525,14 +4579,14 @@ namespace TR {
|
|||||||
readSpriteTex(stream, spriteTextures[i]);
|
readSpriteTex(stream, spriteTextures[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("SPRITDAT") : {
|
case SPR_SPRITDAT : {
|
||||||
ASSERTV(stream.readBE32() == 0x00000001);
|
ASSERTV(stream.readBE32() == 0x00000001);
|
||||||
spriteTexturesDataSize = stream.readBE32();
|
spriteTexturesDataSize = stream.readBE32();
|
||||||
spriteTexturesData = spriteTexturesDataSize ? new uint8[spriteTexturesDataSize] : NULL;
|
spriteTexturesData = spriteTexturesDataSize ? new uint8[spriteTexturesDataSize] : NULL;
|
||||||
stream.raw(spriteTexturesData, spriteTexturesDataSize);
|
stream.raw(spriteTexturesData, spriteTexturesDataSize);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("OBJECTS ") : {
|
case SPR_OBJECTS_ : {
|
||||||
ASSERTV(stream.readBE32() == 0x00000000);
|
ASSERTV(stream.readBE32() == 0x00000000);
|
||||||
spriteSequencesCount = stream.readBE32();
|
spriteSequencesCount = stream.readBE32();
|
||||||
spriteSequences = spriteSequencesCount ? new SpriteSequence[spriteSequencesCount] : NULL;
|
spriteSequences = spriteSequencesCount ? new SpriteSequence[spriteSequencesCount] : NULL;
|
||||||
@@ -4546,12 +4600,12 @@ namespace TR {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("SPRITEND") :
|
case SPR_SPRITEND :
|
||||||
ASSERTV(stream.readBE32() == 0x00000000);
|
ASSERTV(stream.readBE32() == 0x00000000);
|
||||||
ASSERTV(stream.readBE32() == 0x00000000);
|
ASSERTV(stream.readBE32() == 0x00000000);
|
||||||
break;
|
break;
|
||||||
// SND
|
// SND
|
||||||
case CHUNK("SAMPLUT ") : {
|
case SND_SAMPLUT_ : {
|
||||||
ASSERTV(stream.readBE32() == 0x00000002);
|
ASSERTV(stream.readBE32() == 0x00000002);
|
||||||
int count = stream.readBE32();
|
int count = stream.readBE32();
|
||||||
soundsMap = new int16[count];
|
soundsMap = new int16[count];
|
||||||
@@ -4559,7 +4613,7 @@ namespace TR {
|
|||||||
soundsMap[i] = stream.readBE16();
|
soundsMap[i] = stream.readBE16();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("SAMPINFS") : {
|
case SND_SAMPINFS : {
|
||||||
ASSERTV(stream.readBE32() == 0x00000008);
|
ASSERTV(stream.readBE32() == 0x00000008);
|
||||||
soundsInfoCount = stream.readBE32();
|
soundsInfoCount = stream.readBE32();
|
||||||
soundsInfo = soundsInfoCount ? new SoundInfo[soundsInfoCount] : NULL;
|
soundsInfo = soundsInfoCount ? new SoundInfo[soundsInfoCount] : NULL;
|
||||||
@@ -4574,7 +4628,7 @@ namespace TR {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("SAMPLE ") : {
|
case SND_SAMPLE__ : {
|
||||||
int32 index = stream.readBE32();
|
int32 index = stream.readBE32();
|
||||||
int32 size = stream.readBE32();
|
int32 size = stream.readBE32();
|
||||||
ASSERT(index < soundOffsetsCount);
|
ASSERT(index < soundOffsetsCount);
|
||||||
@@ -4584,7 +4638,7 @@ namespace TR {
|
|||||||
stream.seek(size);
|
stream.seek(size);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CHUNK("ENDFILE\0") :
|
case SND_ENDFILEz :
|
||||||
ASSERTV(stream.readBE32() == 0x00000000);
|
ASSERTV(stream.readBE32() == 0x00000000);
|
||||||
ASSERTV(stream.readBE32() == 0x00000000);
|
ASSERTV(stream.readBE32() == 0x00000000);
|
||||||
break;
|
break;
|
||||||
|
@@ -27,7 +27,7 @@ namespace GAPI {
|
|||||||
struct Vertex {
|
struct Vertex {
|
||||||
short4 coord;
|
short4 coord;
|
||||||
ubyte4 normal;
|
ubyte4 normal;
|
||||||
short4 texCoord;
|
short2 texCoord;
|
||||||
ubyte4 color;
|
ubyte4 color;
|
||||||
ubyte4 light;
|
ubyte4 light;
|
||||||
};
|
};
|
||||||
@@ -778,8 +778,6 @@ namespace GAPI {
|
|||||||
|
|
||||||
C3D_RenderTarget* checkRenderTarget(Texture *texture, int face, int group, GPU_DEPTHBUF depthFmt) {
|
C3D_RenderTarget* checkRenderTarget(Texture *texture, int face, int group, GPU_DEPTHBUF depthFmt) {
|
||||||
if (!texture->target[face].frameBuf.colorBuf) {
|
if (!texture->target[face].frameBuf.colorBuf) {
|
||||||
LOG("create RT for face:%d %dx%d\n", face, texture->width, texture->height);
|
|
||||||
|
|
||||||
C3D_FrameBuf &fb = texture->target[face].frameBuf;
|
C3D_FrameBuf &fb = texture->target[face].frameBuf;
|
||||||
fb.colorBuf = (texture->opt & OPT_CUBEMAP) ? texture->tex.cube->data[face] : texture->tex.data;
|
fb.colorBuf = (texture->opt & OPT_CUBEMAP) ? texture->tex.cube->data[face] : texture->tex.data;
|
||||||
fb.depthBuf = getDepthBuffer(texture->width, texture->height, group, depthFmt);
|
fb.depthBuf = getDepthBuffer(texture->width, texture->height, group, depthFmt);
|
||||||
@@ -826,7 +824,7 @@ namespace GAPI {
|
|||||||
AttrInfo_Init(&vertexAttribs);
|
AttrInfo_Init(&vertexAttribs);
|
||||||
AttrInfo_AddLoader(&vertexAttribs, aCoord , GPU_SHORT , 4);
|
AttrInfo_AddLoader(&vertexAttribs, aCoord , GPU_SHORT , 4);
|
||||||
AttrInfo_AddLoader(&vertexAttribs, aNormal , GPU_UNSIGNED_BYTE , 4);
|
AttrInfo_AddLoader(&vertexAttribs, aNormal , GPU_UNSIGNED_BYTE , 4);
|
||||||
AttrInfo_AddLoader(&vertexAttribs, aTexCoord , GPU_SHORT , 4);
|
AttrInfo_AddLoader(&vertexAttribs, aTexCoord , GPU_SHORT , 2);
|
||||||
AttrInfo_AddLoader(&vertexAttribs, aColor , GPU_UNSIGNED_BYTE , 4);
|
AttrInfo_AddLoader(&vertexAttribs, aColor , GPU_UNSIGNED_BYTE , 4);
|
||||||
AttrInfo_AddLoader(&vertexAttribs, aLight , GPU_UNSIGNED_BYTE , 4);
|
AttrInfo_AddLoader(&vertexAttribs, aLight , GPU_UNSIGNED_BYTE , 4);
|
||||||
|
|
||||||
|
@@ -1655,7 +1655,7 @@ struct Level : IGame {
|
|||||||
tileData = new AtlasTile();
|
tileData = new AtlasTile();
|
||||||
|
|
||||||
atlasRooms = rAtlas->pack(OPT_MIPMAPS | OPT_VRAM_3DS);
|
atlasRooms = rAtlas->pack(OPT_MIPMAPS | OPT_VRAM_3DS);
|
||||||
atlasObjects = oAtlas->pack(OPT_MIPMAPS | OPT_VRAM_3DS);
|
atlasObjects = oAtlas->pack(OPT_MIPMAPS);
|
||||||
atlasSprites = sAtlas->pack(OPT_MIPMAPS);
|
atlasSprites = sAtlas->pack(OPT_MIPMAPS);
|
||||||
atlasGlyphs = gAtlas->pack(0);
|
atlasGlyphs = gAtlas->pack(0);
|
||||||
|
|
||||||
|
@@ -647,7 +647,7 @@ struct Texture : GAPI::Texture {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static uint8* LoadBIN(Stream &stream, uint32 &width, uint32 &height) {
|
static uint8* LoadBIN(Stream &stream, uint32 &width, uint32 &height) {
|
||||||
if (strstr(stream.name, "224.")) {
|
if (strstr(stream.name, "224.") || stream.size == 157696) {
|
||||||
height = 224;
|
height = 224;
|
||||||
} else {
|
} else {
|
||||||
height = 256;
|
height = 256;
|
||||||
|
Reference in New Issue
Block a user