mirror of
https://github.com/XProger/OpenLara.git
synced 2025-08-19 11:21:31 +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) | \
|
||||
((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) {
|
||||
#if !defined(_OS_PSP) && !defined(_OS_3DS) && !defined(_OS_XBOX)
|
||||
#if !defined(_OS_PSP)
|
||||
Room *room = NULL;
|
||||
|
||||
while (stream.pos < stream.size) {
|
||||
@@ -3926,18 +3980,18 @@ namespace TR {
|
||||
|
||||
switch (chunkType) {
|
||||
// SAT
|
||||
case CHUNK("ROOMFILE") :
|
||||
case SAT_ROOMFILE :
|
||||
ASSERTV(stream.readBE32() == 0x00000000);
|
||||
ASSERTV(stream.readBE32() == 0x00000020);
|
||||
break;
|
||||
case CHUNK("ROOMTINF") :
|
||||
case SAT_ROOMTINF :
|
||||
ASSERTV(stream.readBE32() == 0x00000010);
|
||||
roomTexturesCount = stream.readBE32();
|
||||
roomTextures = roomTexturesCount ? new TextureInfo[roomTexturesCount] : NULL;
|
||||
for (int i = 0; i < roomTexturesCount; i++)
|
||||
readObjectTex(stream, roomTextures[i], TEX_TYPE_ROOM);
|
||||
break;
|
||||
case CHUNK("ROOMTQTR") : {
|
||||
case SAT_ROOMTQTR : {
|
||||
ASSERTV(stream.readBE32() == 0x00000001);
|
||||
roomTexturesDataSize = stream.readBE32();
|
||||
roomTexturesData = roomTexturesDataSize ? new uint8[roomTexturesDataSize] : NULL;
|
||||
@@ -3948,7 +4002,7 @@ namespace TR {
|
||||
*/
|
||||
break;
|
||||
}
|
||||
case CHUNK("ROOMTSUB") :
|
||||
case SAT_ROOMTSUB :
|
||||
ASSERTV(stream.readBE32() == 0x00000001);
|
||||
/*
|
||||
roomTexturesDataSize = stream.readBE32();
|
||||
@@ -3961,34 +4015,34 @@ namespace TR {
|
||||
stream.raw(tsub, sizeof(uint8) * tsubCount);
|
||||
|
||||
break;
|
||||
case CHUNK("ROOMTPAL") : {
|
||||
case SAT_ROOMTPAL : {
|
||||
ASSERTV(stream.readBE32() == 0x00000003);
|
||||
stream.seek(stream.readBE32() * 3);
|
||||
break;
|
||||
}
|
||||
case CHUNK("ROOMSPAL") : {
|
||||
case SAT_ROOMSPAL : {
|
||||
ASSERTV(stream.readLE32() == 0x02000000);
|
||||
stream.seek(stream.readBE32() * 2);
|
||||
break;
|
||||
}
|
||||
case CHUNK("ROOMDATA") :
|
||||
case SAT_ROOMDATA :
|
||||
ASSERTV(stream.readBE32() == 0x00000044);
|
||||
roomsCount = stream.readBE32();
|
||||
rooms = new Room[roomsCount];
|
||||
memset(rooms, 0, sizeof(Room) * roomsCount);
|
||||
break;
|
||||
case CHUNK("ROOMNUMB") :
|
||||
case SAT_ROOMNUMB :
|
||||
ASSERTV(stream.readBE32() == 0x00000000);
|
||||
room = &rooms[stream.readBE32()];
|
||||
break;
|
||||
case CHUNK("MESHPOS ") :
|
||||
case SAT_MESHPOS_ :
|
||||
ASSERT(room);
|
||||
room->info.x = stream.readBE32();
|
||||
room->info.z = stream.readBE32();
|
||||
room->info.yBottom = stream.readBE32();
|
||||
room->info.yTop = stream.readBE32();
|
||||
break;
|
||||
case CHUNK("MESHSIZE") : {
|
||||
case SAT_MESHSIZE : {
|
||||
ASSERT(room);
|
||||
uint32 flag = stream.readBE32();
|
||||
if (flag == 0x00000014) {
|
||||
@@ -4109,7 +4163,7 @@ namespace TR {
|
||||
data.fCount = fIndex;
|
||||
break;
|
||||
}
|
||||
case CHUNK("DOORDATA") : {
|
||||
case SAT_DOORDATA : {
|
||||
int32 roomIndex = stream.readBE32();
|
||||
ASSERT(roomIndex < roomsCount);
|
||||
Room *room = &rooms[roomIndex];
|
||||
@@ -4132,12 +4186,12 @@ namespace TR {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CHUNK("FLOORDAT") :
|
||||
case SAT_FLOORDAT :
|
||||
ASSERT(room);
|
||||
room->zSectors = stream.readBE32();
|
||||
room->xSectors = stream.readBE32();
|
||||
break;
|
||||
case CHUNK("FLOORSIZ") : {
|
||||
case SAT_FLOORSIZ : {
|
||||
ASSERTV(stream.readBE32() == 0x00000008);
|
||||
ASSERT(room && room->sectors == NULL);
|
||||
|
||||
@@ -4158,7 +4212,7 @@ namespace TR {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CHUNK("FLORDATA") :
|
||||
case SAT_FLORDATA :
|
||||
ASSERTV(stream.readBE32() == 0x00000002);
|
||||
ASSERT(floors == NULL);
|
||||
floorsCount = stream.readBE32();
|
||||
@@ -4166,25 +4220,25 @@ namespace TR {
|
||||
for (int i = 0; i < floorsCount; i++)
|
||||
floors[i].value = stream.readBE16();
|
||||
break;
|
||||
case CHUNK("LIGHTAMB") :
|
||||
case SAT_LIGHTAMB :
|
||||
ASSERT(room);
|
||||
room->ambient = stream.readBE32();
|
||||
room->ambient2 = stream.readBE32();
|
||||
break;
|
||||
case CHUNK("RM_FLIP ") : {
|
||||
case SAT_RM_FLIP_ : {
|
||||
ASSERTV(stream.readBE32() == 0x00000002);
|
||||
uint32 value = stream.readBE32();
|
||||
room->alternateRoom = value == 0xFFFFFFFF ? -1 : value;
|
||||
break;
|
||||
}
|
||||
case CHUNK("RM_FLAGS") : {
|
||||
case SAT_RM_FLAGS : {
|
||||
ASSERT(room);
|
||||
ASSERTV(stream.readBE32() == 0x00000002);
|
||||
uint32 value = stream.readBE32();
|
||||
room->flags.water = (value & 0x01) != 0;
|
||||
break;
|
||||
}
|
||||
case CHUNK("LIGHTSIZ") : {
|
||||
case SAT_LIGHTSIZ : {
|
||||
ASSERTV(stream.readBE32() == 0x00000014);
|
||||
ASSERT(room && room->lights == NULL);
|
||||
room->lightsCount = stream.readBE32();
|
||||
@@ -4206,7 +4260,7 @@ namespace TR {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CHUNK("CAMERAS ") :
|
||||
case SAT_CAMERAS_ :
|
||||
ASSERTV(stream.readBE32() == 0x00000010);
|
||||
ASSERT(cameras == NULL);
|
||||
camerasCount = stream.readBE32();
|
||||
@@ -4220,7 +4274,7 @@ namespace TR {
|
||||
cam.flags.boxIndex = stream.readBE16();
|
||||
}
|
||||
break;
|
||||
case CHUNK("SOUNDFX ") : {
|
||||
case SAT_SOUNDFX_ : {
|
||||
uint32 flag = stream.readBE32();
|
||||
if (flag == 0x00000000) { // SND
|
||||
ASSERTV(stream.readBE32() == 0x00000000);
|
||||
@@ -4254,7 +4308,7 @@ namespace TR {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CHUNK("BOXES ") :
|
||||
case SAT_BOXES___ :
|
||||
ASSERTV(stream.readBE32() == 0x00000014);
|
||||
ASSERT(boxes == NULL);
|
||||
boxesCount = stream.readBE32();
|
||||
@@ -4269,7 +4323,7 @@ namespace TR {
|
||||
b.overlap.value = stream.readBE16();
|
||||
}
|
||||
break;
|
||||
case CHUNK("OVERLAPS") :
|
||||
case SAT_OVERLAPS :
|
||||
ASSERTV(stream.readBE32() == 0x00000002);
|
||||
ASSERT(overlaps == NULL);
|
||||
overlapsCount = stream.readBE32();
|
||||
@@ -4277,16 +4331,16 @@ namespace TR {
|
||||
for (int i = 0; i < overlapsCount; i++)
|
||||
overlaps[i].value = stream.readBE16();
|
||||
break;
|
||||
case CHUNK("GND_ZONE") :
|
||||
case CHUNK("GND_ZON2") :
|
||||
case CHUNK("FLY_ZONE") : {
|
||||
case SAT_GND_ZONE :
|
||||
case SAT_GND_ZON2 :
|
||||
case SAT_FLY_ZONE : {
|
||||
ASSERTV(stream.readBE32() == 0x00000002);
|
||||
uint16 **ptr;
|
||||
|
||||
switch (chunkType) {
|
||||
case CHUNK("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 CHUNK("FLY_ZONE") : ptr = zones[0].fly ? &zones[1].fly : &zones[0].fly; break;
|
||||
case SAT_GND_ZONE : ptr = zones[0].ground1 ? &zones[1].ground1 : &zones[0].ground1; break;
|
||||
case SAT_GND_ZON2 : ptr = zones[0].ground2 ? &zones[1].ground2 : &zones[0].ground2; break;
|
||||
case SAT_FLY_ZONE : ptr = zones[0].fly ? &zones[1].fly : &zones[0].fly; break;
|
||||
default : ptr = NULL;
|
||||
}
|
||||
|
||||
@@ -4299,7 +4353,7 @@ namespace TR {
|
||||
(*ptr)[i] = stream.readBE16();
|
||||
break;
|
||||
}
|
||||
case CHUNK("ARANGES ") : {
|
||||
case SAT_ARANGES_ : {
|
||||
ASSERTV(stream.readBE32() == 0x00000008);
|
||||
animTexturesCount = stream.readBE32();
|
||||
animTextures = new AnimTexture[animTexturesCount];
|
||||
@@ -4314,7 +4368,7 @@ namespace TR {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CHUNK("ITEMDATA") : {
|
||||
case SAT_ITEMDATA : {
|
||||
ASSERTV(stream.readBE32() == 0x00000014);
|
||||
entitiesBaseCount = stream.readBE32();
|
||||
entitiesCount = entitiesBaseCount + MAX_RESERVED_ENTITIES;
|
||||
@@ -4333,16 +4387,16 @@ namespace TR {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CHUNK("ROOMEND ") :
|
||||
case SAT_ROOMEND_ :
|
||||
ASSERTV(stream.readBE32() == 0x00000000);
|
||||
ASSERTV(stream.readBE32() == 0x00000000);
|
||||
break;
|
||||
// SAD
|
||||
case CHUNK("OBJFILE ") :
|
||||
case SAD_OBJFILE_ :
|
||||
ASSERTV(stream.readBE32() == 0x00000000);
|
||||
ASSERTV(stream.readBE32() == 0x00000020);
|
||||
break;
|
||||
case CHUNK("ANIMS ") :
|
||||
case SAD_ANIMS___ :
|
||||
ASSERTV(stream.readBE32() == 0x00000022);
|
||||
ASSERT(anims == NULL);
|
||||
animsCount = stream.readBE32();
|
||||
@@ -4367,7 +4421,7 @@ namespace TR {
|
||||
anim.animCommand = stream.readBE16();
|
||||
}
|
||||
break;
|
||||
case CHUNK("CHANGES ") :
|
||||
case SAD_CHANGES_ :
|
||||
ASSERTV(stream.readBE32() == 0x00000008);
|
||||
ASSERT(states == NULL);
|
||||
statesCount = stream.readBE32();
|
||||
@@ -4380,7 +4434,7 @@ namespace TR {
|
||||
ASSERTV(stream.readBE16() == state.rangesOffset); // dummy
|
||||
}
|
||||
break;
|
||||
case CHUNK("RANGES \0") :
|
||||
case SAD_RANGES_z :
|
||||
ASSERTV(stream.readBE32() == 0x00000008);
|
||||
ASSERT(ranges == NULL);
|
||||
rangesCount = stream.readBE32();
|
||||
@@ -4393,7 +4447,7 @@ namespace TR {
|
||||
range.nextFrame = stream.readBE16();
|
||||
}
|
||||
break;
|
||||
case CHUNK("COMMANDS") :
|
||||
case SAD_COMMANDS :
|
||||
ASSERTV(stream.readBE32() == 0x00000002);
|
||||
ASSERT(commands == NULL);
|
||||
commandsCount = stream.readBE32();
|
||||
@@ -4401,7 +4455,7 @@ namespace TR {
|
||||
for (int i = 0; i < commandsCount; i++)
|
||||
commands[i] = stream.readBE16();
|
||||
break;
|
||||
case CHUNK("ANIBONES") :
|
||||
case SAD_ANIBONES :
|
||||
ASSERTV(stream.readBE32() == 0x00000004);
|
||||
ASSERT(nodesData == NULL);
|
||||
nodesDataSize = stream.readBE32();
|
||||
@@ -4409,7 +4463,7 @@ namespace TR {
|
||||
for (int i = 0; i < nodesDataSize; i++)
|
||||
nodesData[i] = stream.readBE32();
|
||||
break;
|
||||
case CHUNK("ANIMOBJ ") :
|
||||
case SAD_ANIMOBJ_ :
|
||||
ASSERTV(stream.readBE32() == 0x00000038);
|
||||
ASSERT(models == NULL);
|
||||
modelsCount = stream.readBE32();
|
||||
@@ -4427,7 +4481,7 @@ namespace TR {
|
||||
ASSERTV(stream.readBE16() == model.animation);
|
||||
}
|
||||
break;
|
||||
case CHUNK("STATOBJ ") :
|
||||
case SAD_STATOBJ_ :
|
||||
ASSERTV(stream.readBE32() == 0x00000020);
|
||||
ASSERT(staticMeshes == NULL);
|
||||
staticMeshesCount = stream.readBE32();
|
||||
@@ -4451,7 +4505,7 @@ namespace TR {
|
||||
mesh.flags = stream.readBE16();
|
||||
}
|
||||
break;
|
||||
case CHUNK("FRAMES ") :
|
||||
case SAD_FRAMES__ :
|
||||
ASSERTV(stream.readBE32() == 0x00000002);
|
||||
ASSERT(frameData == NULL);
|
||||
frameDataSize = stream.readBE32();
|
||||
@@ -4459,7 +4513,7 @@ namespace TR {
|
||||
for (int i = 0; i < frameDataSize; i++)
|
||||
frameData[i] = stream.readBE16();
|
||||
break;
|
||||
case CHUNK("MESHPTRS") :
|
||||
case SAD_MESHPTRS :
|
||||
ASSERTV(stream.readBE32() == 0x00000004);
|
||||
ASSERT(meshOffsets == NULL);
|
||||
meshOffsetsCount = stream.readBE32();
|
||||
@@ -4467,14 +4521,14 @@ namespace TR {
|
||||
for (int i = 0; i < meshOffsetsCount; i++)
|
||||
meshOffsets[i] = stream.readBE32();
|
||||
break;
|
||||
case CHUNK("MESHDATA") :
|
||||
case SAD_MESHDATA :
|
||||
ASSERTV(stream.readBE32() == 0x00000002);
|
||||
ASSERT(meshData == NULL);
|
||||
meshDataSize = stream.readBE32();
|
||||
meshData = meshDataSize ? new uint16[meshDataSize] : NULL;
|
||||
stream.raw(meshData, sizeof(uint16) * meshDataSize);
|
||||
break;
|
||||
case CHUNK("OTEXTINF") :
|
||||
case SAD_OTEXTINF :
|
||||
ASSERTV(stream.readBE32() == 0x00000010);
|
||||
ASSERT(objectTextures == NULL);
|
||||
objectTexturesCount = stream.readBE32();
|
||||
@@ -4484,14 +4538,14 @@ namespace TR {
|
||||
objectTexturesBaseCount = objectTexturesCount;
|
||||
expandObjectTex(objectTextures, objectTexturesCount);
|
||||
break;
|
||||
case CHUNK("OTEXTDAT") : {
|
||||
case SAD_OTEXTDAT : {
|
||||
ASSERTV(stream.readBE32() == 0x00000001);
|
||||
objectTexturesDataSize = stream.readBE32();
|
||||
objectTexturesData = objectTexturesDataSize ? new uint8[objectTexturesDataSize] : NULL;
|
||||
stream.raw(objectTexturesData, objectTexturesDataSize);
|
||||
break;
|
||||
}
|
||||
case CHUNK("ITEXTINF") : {
|
||||
case SAD_ITEXTINF : {
|
||||
ASSERTV(stream.readBE32() == 0x00000014);
|
||||
itemTexturesCount = stream.readBE32();
|
||||
itemTextures = itemTexturesCount ? new TextureInfo[itemTexturesCount * 5] : NULL;
|
||||
@@ -4501,23 +4555,23 @@ namespace TR {
|
||||
expandObjectTex(itemTextures, itemTexturesCount);
|
||||
break;
|
||||
}
|
||||
case CHUNK("ITEXTDAT") : {
|
||||
case SAD_ITEXTDAT : {
|
||||
ASSERTV(stream.readBE32() == 0x00000001);
|
||||
itemTexturesDataSize = stream.readBE32();
|
||||
itemTexturesData = itemTexturesDataSize ? new uint8[itemTexturesDataSize] : NULL;
|
||||
stream.raw(itemTexturesData, itemTexturesDataSize);
|
||||
break;
|
||||
}
|
||||
case CHUNK("OBJEND ") :
|
||||
case SAD_OBJEND__ :
|
||||
ASSERTV(stream.readBE32() == 0x00000000);
|
||||
ASSERTV(stream.readBE32() == 0x00000000);
|
||||
break;
|
||||
// SPR
|
||||
case CHUNK("SPRFILE ") :
|
||||
case SPR_SPRFILE_ :
|
||||
ASSERTV(stream.readBE32() == 0x00000000);
|
||||
ASSERTV(stream.readBE32() == 0x00000020);
|
||||
break;
|
||||
case CHUNK("SPRITINF") : {
|
||||
case SPR_SPRITINF : {
|
||||
ASSERTV(stream.readBE32() == 0x00000010);
|
||||
spriteTexturesCount = stream.readBE32();
|
||||
spriteTextures = spriteTexturesCount ? new TextureInfo[spriteTexturesCount] : NULL;
|
||||
@@ -4525,14 +4579,14 @@ namespace TR {
|
||||
readSpriteTex(stream, spriteTextures[i]);
|
||||
break;
|
||||
}
|
||||
case CHUNK("SPRITDAT") : {
|
||||
case SPR_SPRITDAT : {
|
||||
ASSERTV(stream.readBE32() == 0x00000001);
|
||||
spriteTexturesDataSize = stream.readBE32();
|
||||
spriteTexturesData = spriteTexturesDataSize ? new uint8[spriteTexturesDataSize] : NULL;
|
||||
stream.raw(spriteTexturesData, spriteTexturesDataSize);
|
||||
break;
|
||||
}
|
||||
case CHUNK("OBJECTS ") : {
|
||||
case SPR_OBJECTS_ : {
|
||||
ASSERTV(stream.readBE32() == 0x00000000);
|
||||
spriteSequencesCount = stream.readBE32();
|
||||
spriteSequences = spriteSequencesCount ? new SpriteSequence[spriteSequencesCount] : NULL;
|
||||
@@ -4546,12 +4600,12 @@ namespace TR {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CHUNK("SPRITEND") :
|
||||
case SPR_SPRITEND :
|
||||
ASSERTV(stream.readBE32() == 0x00000000);
|
||||
ASSERTV(stream.readBE32() == 0x00000000);
|
||||
break;
|
||||
// SND
|
||||
case CHUNK("SAMPLUT ") : {
|
||||
case SND_SAMPLUT_ : {
|
||||
ASSERTV(stream.readBE32() == 0x00000002);
|
||||
int count = stream.readBE32();
|
||||
soundsMap = new int16[count];
|
||||
@@ -4559,7 +4613,7 @@ namespace TR {
|
||||
soundsMap[i] = stream.readBE16();
|
||||
break;
|
||||
}
|
||||
case CHUNK("SAMPINFS") : {
|
||||
case SND_SAMPINFS : {
|
||||
ASSERTV(stream.readBE32() == 0x00000008);
|
||||
soundsInfoCount = stream.readBE32();
|
||||
soundsInfo = soundsInfoCount ? new SoundInfo[soundsInfoCount] : NULL;
|
||||
@@ -4574,7 +4628,7 @@ namespace TR {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CHUNK("SAMPLE ") : {
|
||||
case SND_SAMPLE__ : {
|
||||
int32 index = stream.readBE32();
|
||||
int32 size = stream.readBE32();
|
||||
ASSERT(index < soundOffsetsCount);
|
||||
@@ -4584,7 +4638,7 @@ namespace TR {
|
||||
stream.seek(size);
|
||||
break;
|
||||
}
|
||||
case CHUNK("ENDFILE\0") :
|
||||
case SND_ENDFILEz :
|
||||
ASSERTV(stream.readBE32() == 0x00000000);
|
||||
ASSERTV(stream.readBE32() == 0x00000000);
|
||||
break;
|
||||
|
@@ -27,7 +27,7 @@ namespace GAPI {
|
||||
struct Vertex {
|
||||
short4 coord;
|
||||
ubyte4 normal;
|
||||
short4 texCoord;
|
||||
short2 texCoord;
|
||||
ubyte4 color;
|
||||
ubyte4 light;
|
||||
};
|
||||
@@ -778,8 +778,6 @@ namespace GAPI {
|
||||
|
||||
C3D_RenderTarget* checkRenderTarget(Texture *texture, int face, int group, GPU_DEPTHBUF depthFmt) {
|
||||
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;
|
||||
fb.colorBuf = (texture->opt & OPT_CUBEMAP) ? texture->tex.cube->data[face] : texture->tex.data;
|
||||
fb.depthBuf = getDepthBuffer(texture->width, texture->height, group, depthFmt);
|
||||
@@ -826,7 +824,7 @@ namespace GAPI {
|
||||
AttrInfo_Init(&vertexAttribs);
|
||||
AttrInfo_AddLoader(&vertexAttribs, aCoord , GPU_SHORT , 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, aLight , GPU_UNSIGNED_BYTE , 4);
|
||||
|
||||
|
@@ -1655,7 +1655,7 @@ struct Level : IGame {
|
||||
tileData = new AtlasTile();
|
||||
|
||||
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);
|
||||
atlasGlyphs = gAtlas->pack(0);
|
||||
|
||||
|
@@ -647,7 +647,7 @@ struct Texture : GAPI::Texture {
|
||||
}
|
||||
|
||||
static uint8* LoadBIN(Stream &stream, uint32 &width, uint32 &height) {
|
||||
if (strstr(stream.name, "224.")) {
|
||||
if (strstr(stream.name, "224.") || stream.size == 157696) {
|
||||
height = 224;
|
||||
} else {
|
||||
height = 256;
|
||||
|
Reference in New Issue
Block a user