mirror of https://github.com/yaz0r/FITD.git
Mask rework
This commit is contained in:
parent
d95af85906
commit
cea84b5a6d
|
@ -1,4 +1,4 @@
|
|||
/build/vs2019
|
||||
/FitdLib/shaders/generated
|
||||
build/vs2022
|
||||
build
|
||||
data
|
||||
|
|
|
@ -31,12 +31,13 @@ add_subdirectory(${THIRD_PARTY}/zlib ${CMAKE_BINARY_DIR}/zlib/zlib-build)
|
|||
add_subdirectory( FitdLib )
|
||||
add_subdirectory( Fitd )
|
||||
|
||||
#set(USE_ASAN ON CACHE BOOL "" FORCE)
|
||||
if(USE_ASAN)
|
||||
target_link_options(Fitd PRIVATE "-fsanitize=address")
|
||||
target_compile_options(Fitd PRIVATE "-fsanitize=address")
|
||||
target_compile_options(FitdLib PRIVATE "-fsanitize=address")
|
||||
target_compile_options(bimg PRIVATE "-fsanitize=address")
|
||||
target_compile_options(bgfx PRIVATE "-fsanitize=address")
|
||||
target_compile_options(soloud PRIVATE "-fsanitize=address")
|
||||
set(USE_SANITIZER ON)
|
||||
if(USE_SANITIZER)
|
||||
set(SANITIZER_TYPE "address,undefined,leak")
|
||||
target_link_options(Fitd PRIVATE "-fsanitize=${SANITIZER_TYPE}")
|
||||
target_compile_options(Fitd PRIVATE "-fsanitize=${SANITIZER_TYPE}")
|
||||
target_compile_options(FitdLib PRIVATE "-fsanitize=${SANITIZER_TYPE}")
|
||||
target_compile_options(bimg PRIVATE "-fsanitize=${SANITIZER_TYPE}")
|
||||
target_compile_options(bgfx PRIVATE "-fsanitize=${SANITIZER_TYPE}")
|
||||
target_compile_options(soloud PRIVATE "-fsanitize=${SANITIZER_TYPE}")
|
||||
endif()
|
||||
|
|
|
@ -197,7 +197,9 @@ FORCEINLINE u16 READ_LE_U16(void *ptr)
|
|||
#ifdef MACOSX
|
||||
return (((u8*)ptr)[1]<<8)|((u8*)ptr)[0];
|
||||
#else
|
||||
return *(u16*)ptr;
|
||||
u16 temp;
|
||||
memcpy(&temp, ptr, 2);
|
||||
return temp;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -225,7 +227,9 @@ FORCEINLINE u32 READ_LE_U32(void *ptr)
|
|||
#ifdef MACOSX
|
||||
return (((u8*)ptr)[3]<<24)|(((u8*)ptr)[2]<<16)|(((u8*)ptr)[1]<<8)|((u8*)ptr)[0];
|
||||
#else
|
||||
return *(u32*)ptr;
|
||||
u32 temp;
|
||||
memcpy(&temp, ptr, 4);
|
||||
return temp;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -201,10 +201,10 @@ int evalVar(const char* name)
|
|||
actorIdx = ListWorldObjets[objectNumber].objIndex;
|
||||
|
||||
currentLifePtr+=2;
|
||||
actorPtr = &objectTable[actorIdx];
|
||||
|
||||
|
||||
if(actorIdx==-1)
|
||||
{
|
||||
actorPtr = nullptr;
|
||||
switch(var1 & 0x7FFF)
|
||||
{
|
||||
case 0x1F:
|
||||
|
@ -224,6 +224,10 @@ int evalVar(const char* name)
|
|||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
actorPtr = &objectTable[actorIdx];
|
||||
}
|
||||
|
||||
}
|
||||
{
|
||||
|
||||
|
|
|
@ -1338,10 +1338,12 @@ struct maskStruct
|
|||
std::array<u8, 320*200> mask;
|
||||
};
|
||||
|
||||
maskStruct g_maskBuffers[10][10];
|
||||
std::vector<std::vector<maskStruct>> g_maskBuffers;
|
||||
|
||||
void loadMask(int cameraIdx)
|
||||
{
|
||||
g_maskBuffers.clear();
|
||||
|
||||
if (g_gameId == TIMEGATE)
|
||||
return;
|
||||
|
||||
|
@ -1409,7 +1411,7 @@ void loadMask(int cameraIdx)
|
|||
}
|
||||
}
|
||||
|
||||
osystem_createMask(pDestMask->mask, i, j, (unsigned char*)aux, pDestMask->x1, pDestMask->y1, pDestMask->x2, pDestMask->y2);
|
||||
osystem_createMask(pDestMask->mask, i, j, pDestMask->x1, pDestMask->y1, pDestMask->x2, pDestMask->y2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1431,13 +1433,13 @@ void createAITD1Mask()
|
|||
|
||||
for(int maskIdx=0;maskIdx<numMask;maskIdx++)
|
||||
{
|
||||
maskStruct* pDestMask = &g_maskBuffers[viewedRoomIdx][maskIdx];
|
||||
maskStruct theMaskStruct;
|
||||
maskStruct* pDestMask = &theMaskStruct;
|
||||
pDestMask->mask.fill(0);
|
||||
polyBackBuffer = &pDestMask->mask[0];
|
||||
polyBackBuffer = pDestMask->mask.data();
|
||||
|
||||
char* src = data2 + *(u16*)(data+2);
|
||||
|
||||
int numMaskZone = *(s16*)(data);
|
||||
int numMaskZone = READ_LE_U16(data);
|
||||
char* src = data2 + READ_LE_U16(data+2);
|
||||
|
||||
int minX = 319;
|
||||
int maxX = 0;
|
||||
|
@ -1449,12 +1451,12 @@ void createAITD1Mask()
|
|||
data+4,
|
||||
*(s16*)(data) ))*/
|
||||
{
|
||||
int numMaskPoly = *(s16*)src;
|
||||
int numMaskPoly = READ_LE_U16(src);
|
||||
src += 2;
|
||||
|
||||
for(int maskPolyIdx=0;maskPolyIdx<numMaskPoly;maskPolyIdx++)
|
||||
{
|
||||
int numPoints = *(s16*)(src);
|
||||
int numPoints = READ_LE_U16(src);
|
||||
src+=2;
|
||||
|
||||
memcpy(cameraBuffer, src, numPoints*4);
|
||||
|
@ -1482,9 +1484,9 @@ void createAITD1Mask()
|
|||
|
||||
}
|
||||
|
||||
osystem_createMask(pDestMask->mask, viewedRoomIdx, maskIdx, (unsigned char*)aux, minX-1, minY-1, maxX+1, maxY+1);
|
||||
osystem_createMask(pDestMask->mask, viewedRoomIdx, maskIdx, minX-1, minY-1, maxX+1, maxY+1);
|
||||
|
||||
int numOverlay = *(s16*)(data);
|
||||
int numOverlay = READ_LE_U16(data);
|
||||
data+=2;
|
||||
data+=((numOverlay*4)+1)*2;
|
||||
}
|
||||
|
|
|
@ -63,8 +63,8 @@
|
|||
void osystem_playSample(char* samplePtr,int size);
|
||||
// void getMouseStatus(mouseStatusStruct * mouseData);
|
||||
|
||||
void osystem_createMask(const std::array<u8, 320 * 200>& mask, int roomId, int maskId, unsigned char* refImage, int maskX1, int maskY1, int maskX2, int maskY2);
|
||||
void osystem_drawMask(int roomId, int maskId);
|
||||
void osystem_createMask(const std::array<u8, 320 * 200>& mask, int roomId, int maskId, int maskX1, int maskY1, int maskX2, int maskY2);
|
||||
void osystem_drawMask(int roomId, int maskId);
|
||||
|
||||
void osystem_startFrame();
|
||||
void osystem_stopFrame();
|
||||
|
|
|
@ -1182,7 +1182,7 @@ void osystem_flip(unsigned char* videoBuffer)
|
|||
osystem_flushPendingPrimitives();
|
||||
}
|
||||
|
||||
void osystem_createMask(const std::array<u8, 320 * 200>& mask, int roomId, int maskId, unsigned char* refImage, int maskX1, int maskY1, int maskX2, int maskY2)
|
||||
void osystem_createMask(const std::array<u8, 320 * 200>& mask, int roomId, int maskId, int maskX1, int maskY1, int maskX2, int maskY2)
|
||||
{
|
||||
if (maskTextures.size() < roomId + 1)
|
||||
{
|
||||
|
@ -1205,7 +1205,7 @@ void osystem_createMask(const std::array<u8, 320 * 200>& mask, int roomId, int m
|
|||
maskTextures[roomId][maskId].vertexBuffer = BGFX_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
maskTextures[roomId][maskId].maskTexture = bgfx::createTexture2D(320, 200, false, 1, bgfx::TextureFormat::R8U, 0, bgfx::copy(&mask[0], 320 * 200));
|
||||
maskTextures[roomId][maskId].maskTexture = bgfx::createTexture2D(320, 200, false, 1, bgfx::TextureFormat::R8U, 0, bgfx::copy(mask.data(), 320 * 200));
|
||||
maskTextures[roomId][maskId].maskX1 = maskX1;
|
||||
maskTextures[roomId][maskId].maskX2 = maskX2 + 1;
|
||||
maskTextures[roomId][maskId].maskY1 = maskY1;
|
||||
|
|
|
@ -14,8 +14,8 @@ etageVar1 -> table for camera data
|
|||
*/
|
||||
|
||||
std::vector<roomDataStruct> roomDataTable;
|
||||
cameraDataStruct* cameraDataTable[NUM_MAX_CAMERA_IN_ROOM];
|
||||
cameraViewedRoomStruct* currentCameraZoneList[NUM_MAX_CAMERA_IN_ROOM];
|
||||
std::vector<cameraDataStruct*> cameraDataTable;
|
||||
std::vector<cameraViewedRoomStruct*> currentCameraZoneList;
|
||||
|
||||
roomDefStruct* getRoomData(int roomNumber)
|
||||
{
|
||||
|
@ -112,6 +112,11 @@ void ChangeSalle(int roomNumber)
|
|||
int newNumCamera = 0;
|
||||
int newAbsCamera = -1;
|
||||
|
||||
cameraDataTable.clear();
|
||||
|
||||
currentCameraZoneList.clear();
|
||||
currentCameraZoneList.resize(numCameraInRoom, nullptr);
|
||||
|
||||
// load the new camera table and try to keep the same camera (except if changing floor)
|
||||
for(i=0;i<numCameraInRoom;i++)
|
||||
{
|
||||
|
@ -130,7 +135,7 @@ void ChangeSalle(int roomNumber)
|
|||
room_PtrCamera[i] = g_currentFloorCameraRawData + READ_LE_U32(g_currentFloorCameraRawData + currentCameraIdx * 4);
|
||||
}
|
||||
|
||||
cameraDataTable[i] = &(g_currentFloorCameraData[currentCameraIdx]);
|
||||
cameraDataTable.push_back(&g_currentFloorCameraData.at(currentCameraIdx));
|
||||
|
||||
currentCameraIdx = cameraDataTable[i]->numViewedRooms;
|
||||
|
||||
|
@ -143,8 +148,9 @@ void ChangeSalle(int roomNumber)
|
|||
}
|
||||
|
||||
ASSERT(cameraDataTable[i]->viewedRoomTable[j].viewedRoomIdx == currentRoom);
|
||||
if(cameraDataTable[i]->viewedRoomTable[j].viewedRoomIdx == currentRoom)
|
||||
if(cameraDataTable[i]->viewedRoomTable[j].viewedRoomIdx == currentRoom) {
|
||||
currentCameraZoneList[i] = &cameraDataTable[i]->viewedRoomTable[j];
|
||||
}
|
||||
}
|
||||
|
||||
// reajust world coordinates
|
||||
|
|
|
@ -106,8 +106,8 @@ struct roomDataStruct
|
|||
};
|
||||
typedef struct roomDataStruct roomDataStruct;
|
||||
|
||||
extern cameraDataStruct* cameraDataTable[NUM_MAX_CAMERA_IN_ROOM];
|
||||
extern cameraViewedRoomStruct* currentCameraZoneList[NUM_MAX_CAMERA_IN_ROOM];
|
||||
extern std::vector<cameraDataStruct*> cameraDataTable;
|
||||
extern std::vector<cameraViewedRoomStruct*> currentCameraZoneList;
|
||||
extern std::vector<roomDataStruct> roomDataTable;
|
||||
|
||||
roomDefStruct* getRoomData(int roomNumber);
|
||||
|
|
Loading…
Reference in New Issue