Compare commits

...

2 Commits

Author SHA1 Message Date
yaz0r 11d56faa3a Various rename and cleanup 2025-07-25 21:50:43 -07:00
yaz0r f27f434c5a Cleanup to the optimized animations 2025-06-21 23:07:06 -07:00
20 changed files with 591 additions and 575 deletions

View File

@ -17,23 +17,23 @@ int sortCompareFunction(const void* param1, const void* param2)
ASSERT(*(int*)param1 >=0 && *(int*)param1 < NUM_MAX_OBJECT);
ASSERT(*(int*)param2 >=0 && *(int*)param2 < NUM_MAX_OBJECT);
actor1Ptr = &objectTable[*(int*)param1];
actor2Ptr = &objectTable[*(int*)param2];
actor1Ptr = &ListObjets[*(int*)param1];
actor2Ptr = &ListObjets[*(int*)param2];
actor1ZvPtr = &actor1Ptr->zv;
actor2ZvPtr = &actor2Ptr->zv;
if(actor1Ptr->room != currentRoom)
{
copyZv(actor1ZvPtr, &localZv1);
getZvRelativePosition(&localZv1, actor1Ptr->room, currentRoom);
CopyZV(actor1ZvPtr, &localZv1);
AdjustZV(&localZv1, actor1Ptr->room, currentRoom);
actor1ZvPtr = &localZv1;
}
if(actor2Ptr->room != currentRoom)
{
copyZv(actor2ZvPtr, &localZv2);
getZvRelativePosition(&localZv2, actor2Ptr->room, currentRoom);
CopyZV(actor2ZvPtr, &localZv2);
AdjustZV(&localZv2, actor2Ptr->room, currentRoom);
actor2ZvPtr = &localZv2;
}

View File

@ -41,7 +41,6 @@ int SetAnimObjet(int frame, sAnimation* pAnimation, sBody* body)
if(body->m_flags & INFO_OPTIMISE)
{
body->m_groups[i].m_state.m_rotateDelta = keyframe.m_groups[i].m_rotateDelta;
body->m_groups[i].m_state.m_padding = keyframe.m_groups[i].m_padding;
}
}
@ -167,11 +166,11 @@ int manageFall(int actorIdx, ZVStruct* zvPtr)
{
int fallResult = 0;
int i;
int room = objectTable[actorIdx].room;
int room = ListObjets[actorIdx].room;
for(i=0;i<NUM_MAX_OBJECT;i++)
{
tObject* currentTestedActorPtr = &objectTable[i];
tObject* currentTestedActorPtr = &ListObjets[i];
if(currentTestedActorPtr->indexInWorld != -1 && i != actorIdx)
{
@ -180,20 +179,20 @@ int manageFall(int actorIdx, ZVStruct* zvPtr)
if(currentTestedActorPtr->room != room)
{
ZVStruct localZv;
copyZv(zvPtr, &localZv);
getZvRelativePosition(&localZv, room, currentTestedActorPtr->room);
CopyZV(zvPtr, &localZv);
AdjustZV(&localZv, room, currentTestedActorPtr->room);
if(checkZvCollision(&localZv, testedZv))
if(CubeIntersect(&localZv, testedZv))
{
objectTable[i].COL_BY = actorIdx;
ListObjets[i].COL_BY = actorIdx;
fallResult++;
}
}
else
{
if(checkZvCollision(zvPtr, testedZv))
if(CubeIntersect(zvPtr, testedZv))
{
objectTable[i].COL_BY = actorIdx;
ListObjets[i].COL_BY = actorIdx;
fallResult++;
}
}
@ -286,11 +285,11 @@ void GereAnim(void)
currentProcessedActorPtr->END_FRAME = 0;
if(currentProcessedActorPtr->speed == 0)
{
int numObjectCollisions = checkObjectCollisions(currentProcessedActorIdx, &currentProcessedActorPtr->zv);
int numObjectCollisions = CheckObjectCol(currentProcessedActorIdx, &currentProcessedActorPtr->zv);
for(int i = 0; i<numObjectCollisions; i++)
{
objectTable[currentProcessedActorPtr->COL[i]].COL_BY = currentProcessedActorIdx; // collision with current actor
ListObjets[currentProcessedActorPtr->COL[i]].COL_BY = currentProcessedActorIdx; // collision with current actor
}
oldStepY = 0;
@ -357,7 +356,7 @@ void GereAnim(void)
if(stepX || stepY || stepZ) // start of movement management
{
zvPtr = &currentProcessedActorPtr->zv;
copyZv(&currentProcessedActorPtr->zv,&zvLocal);
CopyZV(&currentProcessedActorPtr->zv,&zvLocal);
zvLocal.ZVX1 += stepX;
zvLocal.ZVX2 += stepX;
@ -368,6 +367,7 @@ void GereAnim(void)
zvLocal.ZVZ1 += stepZ;
zvLocal.ZVZ2 += stepZ;
// check for wall collisions
if(currentProcessedActorPtr->dynFlags & 1) // hard collision enabled for actor ?
{
int numCol = AsmCheckListCol(&zvLocal, &roomDataTable[currentProcessedActorPtr->room]);
@ -381,38 +381,42 @@ void GereAnim(void)
currentProcessedActorPtr->HARD_COL = (short)pHardCol->parameter;
}
// climbable wall
if(pHardCol->type == 3)
{
currentProcessedActorPtr->HARD_COL = 255;
}
if(g_gameId == AITD1 || (g_gameId>=JACK && (pHardCol->type != 10 || currentProcessedActorIdx != currentCameraTargetActor)))
if (g_gameId >= JACK) {
// monster collision for floor changes
if ((pHardCol->type == 10) && (currentProcessedActorIdx == currentCameraTargetActor))
continue;
}
if(stepX || stepZ) // move on the X or Z axis ? update to avoid entering the hard col
{
if(stepX || stepZ) // move on the X or Z axis ? update to avoid entering the hard col
{
//ZVStruct tempZv;
//ZVStruct tempZv;
hardColStepX = stepX;
hardColStepZ = stepZ;
hardColStepX = stepX;
hardColStepZ = stepZ;
handleCollision(zvPtr, &zvLocal, &pHardCol->zv);
GereCollision(zvPtr, &zvLocal, &pHardCol->zv);
currentProcessedActorPtr->animNegX += hardColStepX - stepX;
currentProcessedActorPtr->animNegZ += hardColStepZ - stepZ;
currentProcessedActorPtr->animNegX += hardColStepX - stepX;
currentProcessedActorPtr->animNegZ += hardColStepZ - stepZ;
zvLocal.ZVX1 += hardColStepX - stepX;
zvLocal.ZVX2 += hardColStepX - stepX;
zvLocal.ZVZ1 += hardColStepZ - stepZ;
zvLocal.ZVZ2 += hardColStepZ - stepZ;
zvLocal.ZVX1 += hardColStepX - stepX;
zvLocal.ZVX2 += hardColStepX - stepX;
zvLocal.ZVZ1 += hardColStepZ - stepZ;
zvLocal.ZVZ2 += hardColStepZ - stepZ;
stepX = hardColStepX;
stepZ = hardColStepZ;
}
stepX = hardColStepX;
stepZ = hardColStepZ;
}
if(stepY)
{
//assert(0); //not implemented
}
if(stepY)
{
//assert(0); //not implemented
}
}
}
@ -428,13 +432,14 @@ void GereAnim(void)
}
}
int numCol = checkObjectCollisions(currentProcessedActorIdx,&zvLocal); // get the number of actor/actor collision
// check for object collisions
// TODO: AITD2 checks flag collision here
int numCol = CheckObjectCol(currentProcessedActorIdx,&zvLocal); // get the number of actor/actor collision
for(int j=0;j<numCol;j++) // process the actor/actor collision
{
int collisionIndex = currentProcessedActorPtr->COL[j];
tObject* actorTouchedPtr = &objectTable[collisionIndex];
tObject* actorTouchedPtr = &ListObjets[collisionIndex];
actorTouchedPtr->COL_BY = currentProcessedActorIdx;
@ -444,10 +449,10 @@ void GereAnim(void)
{
if(currentProcessedActorPtr->trackMode == 1 /*&& ((gameId == AITD1 && defines.field_1E == 0) || (gameId >= JACK && defines.field_6 == 0))*/) // TODO: check if character isn't dead...
{
foundObject(actorTouchedPtr->indexInWorld, 0);
FoundObjet(actorTouchedPtr->indexInWorld, 0);
}
continue;
}
else
{
if(actorTouchedPtr->objectType & AF_MOVABLE) // can be pushed ?
{
@ -455,7 +460,7 @@ void GereAnim(void)
bool isPushPossible = true;
copyZv(touchedZv, &localZv2);
CopyZV(touchedZv, &localZv2);
localZv2.ZVX1 += stepX;
localZv2.ZVX2 += stepX;
@ -463,17 +468,16 @@ void GereAnim(void)
localZv2.ZVZ1 += stepZ;
localZv2.ZVZ2 += stepZ;
if(!AsmCheckListCol(&localZv2, &roomDataTable[currentProcessedActorPtr->room]))
// check pushed object against walls
if(AsmCheckListCol(&localZv2, &roomDataTable[currentProcessedActorPtr->room]))
{
if(checkObjectCollisions(collisionIndex, &localZv2))
{
isPushPossible = false;
}
}
else
{
isPushPossible = false;
isPushPossible = false;
}
else if (CheckObjectCol(collisionIndex, &localZv2))
{
// if no wall preventing to move object, check is there is a another object in the way
isPushPossible = false;
}
if(!isPushPossible)
{
@ -483,14 +487,14 @@ void GereAnim(void)
{
ZVStruct localZv3;
copyZv(touchedZv, &localZv3);
CopyZV(touchedZv, &localZv3);
getZvRelativePosition(&localZv3, actorTouchedPtr->room, currentProcessedActorPtr->room);
AdjustZV(&localZv3, actorTouchedPtr->room, currentProcessedActorPtr->room);
hardColStepX = stepX;
hardColStepZ = stepZ;
handleCollision(zvPtr, &zvLocal, &localZv3);
GereCollision(zvPtr, &zvLocal, &localZv3);
stepX = hardColStepX;
stepZ = hardColStepZ;
@ -500,7 +504,7 @@ void GereAnim(void)
hardColStepX = stepX;
hardColStepZ = stepZ;
handleCollision(zvPtr, &zvLocal, touchedZv); // manage as hard collision
GereCollision(zvPtr, &zvLocal, touchedZv); // manage as hard collision
stepX = hardColStepX;
stepZ = hardColStepZ;
@ -522,7 +526,7 @@ void GereAnim(void)
actorTouchedPtr->roomX += stepX;
actorTouchedPtr->roomZ += stepZ;
copyZv(&localZv2,touchedZv);
CopyZV(&localZv2,touchedZv);
}
}
else
@ -537,7 +541,7 @@ void GereAnim(void)
hardColStepX = stepX;
hardColStepZ = stepZ;
handleCollision(zvPtr, &zvLocal, touchedZv); // manage as hard collision
GereCollision(zvPtr, &zvLocal, touchedZv); // manage as hard collision
stepX = hardColStepX;
stepZ = hardColStepZ;
@ -546,14 +550,14 @@ void GereAnim(void)
{
ZVStruct localZv3;
copyZv(touchedZv, &localZv3);
CopyZV(touchedZv, &localZv3);
getZvRelativePosition(&localZv3, actorTouchedPtr->room, currentProcessedActorPtr->room);
AdjustZV(&localZv3, actorTouchedPtr->room, currentProcessedActorPtr->room);
hardColStepX = stepX;
hardColStepZ = stepZ;
handleCollision(zvPtr, &zvLocal, &localZv3); // manage as hard collision
GereCollision(zvPtr, &zvLocal, &localZv3); // manage as hard collision
stepX = hardColStepX;
stepZ = hardColStepZ;
@ -590,7 +594,7 @@ void GereAnim(void)
{
zvPtr = &currentProcessedActorPtr->zv;
copyZv(zvPtr, &zvLocal);
CopyZV(zvPtr, &zvLocal);
zvLocal.ZVY2 += 100;
@ -618,7 +622,7 @@ void GereAnim(void)
if(collisionIndex != -1)
{
tObject* actorTouchedPtr = &objectTable[collisionIndex];
tObject* actorTouchedPtr = &ListObjets[collisionIndex];
if(actorTouchedPtr->objectType & AF_MOVABLE)
{
@ -855,9 +859,9 @@ s16 SetInterAnimObjet(int frame, sAnimation* pAnim, sBody* pBody)
}
{
point3dStruct& state = pBody->m_groups[i].m_state.m_rotateDelta;
point3dStruct& previousState = pPreviousKeyframe->m_groups[i].m_rotateDelta;
point3dStruct& nextState = pKeyframe->m_groups[i].m_rotateDelta;
point3dStruct& state = pBody->m_groups[i].m_state.m_rotateDelta.value();
point3dStruct& previousState = pPreviousKeyframe->m_groups[i].m_rotateDelta.value();
point3dStruct& nextState = pKeyframe->m_groups[i].m_rotateDelta.value();
PatchInterAngle(&state.x, previousState.x, nextState.x, bp, bx);
PatchInterAngle(&state.y, previousState.y, nextState.y, bp, bx);

View File

@ -69,14 +69,14 @@ void GereFrappe(void)
//drawProjectedBox(rangeZv.ZVX1,rangeZv.ZVX2,rangeZv.ZVY1,rangeZv.ZVY2,rangeZv.ZVZ1,rangeZv.ZVZ2,60,255);
collision = checkObjectCollisions(currentProcessedActorIdx,&rangeZv);
collision = CheckObjectCol(currentProcessedActorIdx,&rangeZv);
for(i=0;i<collision;i++)
{
tObject* actorPtr2;
currentProcessedActorPtr->HIT = currentProcessedActorPtr->COL[i];
actorPtr2 = &objectTable[currentProcessedActorPtr->COL[i]];
actorPtr2 = &ListObjets[currentProcessedActorPtr->COL[i]];
actorPtr2->HIT_BY = currentProcessedActorIdx;
actorPtr2->hitForce = currentProcessedActorPtr->hitForce;
@ -141,8 +141,8 @@ void GereFrappe(void)
currentProcessedActorPtr->HIT = touchedActor;
objectTable[touchedActor].HIT_BY = currentProcessedActorIdx;
objectTable[touchedActor].hitForce = currentProcessedActorPtr->hitForce;
ListObjets[touchedActor].HIT_BY = currentProcessedActorIdx;
ListObjets[touchedActor].hitForce = currentProcessedActorPtr->hitForce;
currentProcessedActorPtr->animActionType = 0;
}
@ -229,7 +229,7 @@ void GereFrappe(void)
if(actorIdx == -1)
return;
actorPtr = &objectTable[actorIdx];
actorPtr = &ListObjets[actorIdx];
actorPtr->roomX = x;
actorPtr->roomY = y;
@ -287,8 +287,8 @@ void GereFrappe(void)
int z3;
int step;
copyZv(&currentProcessedActorPtr->zv, &rangeZv);
copyZv(&currentProcessedActorPtr->zv, &rangeZv2);
CopyZV(&currentProcessedActorPtr->zv, &rangeZv);
CopyZV(&currentProcessedActorPtr->zv, &rangeZv2);
xtemp = currentProcessedActorPtr->roomX + currentProcessedActorPtr->stepX;
ytemp = currentProcessedActorPtr->roomY + currentProcessedActorPtr->stepY;
@ -328,7 +328,7 @@ void GereFrappe(void)
y2 = y1;
z2 = z1 + animMoveZ;
copyZv(&rangeZv2,&rangeZv);
CopyZV(&rangeZv2,&rangeZv);
rangeZv.ZVX1 = x2 - 200;
rangeZv.ZVX2 = x2 + 200;
@ -337,7 +337,7 @@ void GereFrappe(void)
rangeZv.ZVZ1 = z2 - 200;
rangeZv.ZVZ2 = z2 + 200;
collision = checkObjectCollisions(currentProcessedActorIdx,&rangeZv);
collision = CheckObjectCol(currentProcessedActorIdx,&rangeZv);
if(collision)
{
@ -352,7 +352,7 @@ void GereFrappe(void)
{
int currentActorCol = currentProcessedActorPtr->COL[i];
if(objectTable[currentActorCol].indexInWorld == objPtr->alpha)
if(ListObjets[currentActorCol].indexInWorld == objPtr->alpha)
{
collision2--;
objPtr->x = xtemp;
@ -362,7 +362,7 @@ void GereFrappe(void)
return;
}
if(objectTable[currentActorCol].indexInWorld == CVars[getCVarsIdx((enumCVars)REVERSE_OBJECT)])
if(ListObjets[currentActorCol].indexInWorld == CVars[getCVarsIdx((enumCVars)REVERSE_OBJECT)])
{
objPtr->alpha = CVars[getCVarsIdx((enumCVars)REVERSE_OBJECT)];
currentProcessedActorPtr->beta += 0x200;
@ -376,7 +376,7 @@ void GereFrappe(void)
currentProcessedActorPtr->stepX = 0;
currentProcessedActorPtr->stepZ = 0;
copyZv(&rangeZv2, &rangeZv);
CopyZV(&rangeZv2, &rangeZv);
rangeZv.ZVX1 += x3;
rangeZv.ZVX2 += x3;
@ -385,7 +385,7 @@ void GereFrappe(void)
rangeZv.ZVZ1 += z3;
rangeZv.ZVZ2 += z3;
copyZv(&rangeZv, &currentProcessedActorPtr->zv);
CopyZV(&rangeZv, &currentProcessedActorPtr->zv);
objPtr->x = xtemp;
objPtr->y = ytemp;
@ -399,7 +399,7 @@ void GereFrappe(void)
tObject* actorPtr;
currentProcessedActorPtr->HIT = currentActorCol;
actorPtr = &objectTable[currentActorCol];
actorPtr = &ListObjets[currentActorCol];
actorPtr->HIT_BY = currentProcessedActorIdx;
actorPtr->hitForce = currentProcessedActorPtr->hitForce;
}

View File

@ -4,6 +4,7 @@
#include <vector>
#include <string>
#include <format>
#include <optional>
#endif
#ifdef __APPLE__

View File

@ -235,7 +235,7 @@ void debugger_draw(void)
if (selectedObject > NUM_MAX_OBJECT)
selectedObject = NUM_MAX_OBJECT - 1;
tObject*pObject = &objectTable[selectedObject];
tObject*pObject = &ListObjets[selectedObject];
ImGui::PushItemWidth(100);

View File

@ -9,8 +9,8 @@ int getMatrix(int param1, int actorIdx, int param2)
int matrixWidth = *matrixPtr++;
int matrixHeigh = *matrixPtr++;
matrixPtr+=(objectTable[actorIdx].hardMat-1)*matrixWidth;
matrixPtr+=(objectTable[param2].hardMat-1);
matrixPtr+=(ListObjets[actorIdx].hardMat-1)*matrixWidth;
matrixPtr+=(ListObjets[param2].hardMat-1);
if(g_gameId == AITD3)
{
@ -43,11 +43,11 @@ int getPosRel(tObject* actor1, tObject* actor2)
}
copyZv(&actor2->zv, &localZv);
CopyZV(&actor2->zv, &localZv);
if(actor1->room != actor2->room)
{
getZvRelativePosition(&localZv, actor2->room, actor1->room);
AdjustZV(&localZv, actor2->room, actor1->room);
}
centerX = (localZv.ZVX1 + localZv.ZVX2) / 2;
@ -118,7 +118,7 @@ int testZvEndAnim(tObject* actorPtr,sAnimation* animPtr, int param)
}
ZVStruct localZv;
copyZv(&actorPtr->zv, &localZv);
CopyZV(&actorPtr->zv, &localZv);
walkStep(0,stepX,actorPtr->beta);
@ -210,7 +210,7 @@ int evalVar(const char* name)
}
}
else {
actorPtr = &objectTable[actorIdx];
actorPtr = &ListObjets[actorIdx];
}
}
@ -228,7 +228,7 @@ int evalVar(const char* name)
if(temp1 != -1)
{
return(objectTable[temp1].indexInWorld);
return(ListObjets[temp1].indexInWorld);
}
else
{
@ -256,7 +256,7 @@ int evalVar(const char* name)
}
else
{
return(objectTable[temp].indexInWorld);
return(ListObjets[temp].indexInWorld);
}
break;
@ -271,7 +271,7 @@ int evalVar(const char* name)
}
else
{
return(objectTable[temp].indexInWorld);
return(ListObjets[temp].indexInWorld);
}
break;
@ -332,9 +332,9 @@ int evalVar(const char* name)
}
else
{
int tempX = objectTable[actorNumber].worldX;
int tempY = objectTable[actorNumber].worldY;
int tempZ = objectTable[actorNumber].worldZ;
int tempX = ListObjets[actorNumber].worldX;
int tempY = ListObjets[actorNumber].worldY;
int tempZ = ListObjets[actorNumber].worldZ;
return(calcDist(actorPtr->worldX, actorPtr->worldY, actorPtr->worldZ, tempX, tempY, tempZ));
}
@ -346,7 +346,7 @@ int evalVar(const char* name)
if(actorPtr->COL_BY == -1)
return(-1);
else
return(objectTable[actorPtr->COL_BY].indexInWorld);
return(ListObjets[actorPtr->COL_BY].indexInWorld);
break;
}
case 0x10: // found
@ -379,7 +379,7 @@ int evalVar(const char* name)
return 0;
}
return (getPosRel(actorPtr, &objectTable[ListWorldObjets[objNum].objIndex]));
return (getPosRel(actorPtr, &ListObjets[ListWorldObjets[objNum].objIndex]));
break;
}
@ -412,7 +412,7 @@ int evalVar(const char* name)
return -1;
}
return objectTable[temp1].indexInWorld;
return ListObjets[temp1].indexInWorld;
break;
}
case 0x16:
@ -626,7 +626,7 @@ int evalVar2(const char* name)
}
}
else {
actorPtr = &objectTable[actorIdx];
actorPtr = &ListObjets[actorIdx];
}
}
{
@ -647,7 +647,7 @@ int evalVar2(const char* name)
if(temp1 != -1)
{
return(objectTable[temp1].indexInWorld);
return(ListObjets[temp1].indexInWorld);
}
else
{
@ -685,7 +685,7 @@ int evalVar2(const char* name)
}
else
{
return(objectTable[temp].indexInWorld);
return(ListObjets[temp].indexInWorld);
}
break;
@ -700,7 +700,7 @@ int evalVar2(const char* name)
}
else
{
return(objectTable[temp].indexInWorld);
return(ListObjets[temp].indexInWorld);
}
break;
@ -776,9 +776,9 @@ int evalVar2(const char* name)
}
else
{
tempX = objectTable[objectIdx].worldX;
tempY = objectTable[objectIdx].worldY;
tempZ = objectTable[objectIdx].worldZ;
tempX = ListObjets[objectIdx].worldX;
tempY = ListObjets[objectIdx].worldY;
tempZ = ListObjets[objectIdx].worldZ;
}
return(calcDist(actorPtr->worldX, actorPtr->worldY, actorPtr->worldZ, tempX, tempY, tempZ));
@ -790,7 +790,7 @@ int evalVar2(const char* name)
if(actorPtr->COL_BY == -1)
return(-1);
else
return(objectTable[actorPtr->COL_BY].indexInWorld);
return(ListObjets[actorPtr->COL_BY].indexInWorld);
break;
}
case 0x10: // found
@ -823,7 +823,7 @@ int evalVar2(const char* name)
return 0;
}
return (getPosRel(actorPtr, &objectTable[ListWorldObjets[objNum].objIndex]));
return (getPosRel(actorPtr, &ListObjets[ListWorldObjets[objNum].objIndex]));
break;
}
@ -856,7 +856,7 @@ int evalVar2(const char* name)
return -1;
}
return objectTable[temp1].indexInWorld;
return ListObjets[temp1].indexInWorld;
break;
}
case 0x16:

View File

@ -141,10 +141,11 @@ sAnimation* createAnimationFromPtr(void* ptr, int size)
pGroup->m_delta.y = READ_LE_S16(animPtr); animPtr += 2;
pGroup->m_delta.z = READ_LE_S16(animPtr); animPtr += 2;
if (bUseOptim) {
pGroup->m_rotateDelta.x = READ_LE_S16(animPtr); animPtr += 2;
pGroup->m_rotateDelta.y = READ_LE_S16(animPtr); animPtr += 2;
pGroup->m_rotateDelta.z = READ_LE_S16(animPtr); animPtr += 2;
pGroup->m_padding = READ_LE_S16(animPtr); animPtr += 2;
pGroup->m_rotateDelta.emplace();
pGroup->m_rotateDelta.value().x = READ_LE_S16(animPtr); animPtr += 2;
pGroup->m_rotateDelta.value().y = READ_LE_S16(animPtr); animPtr += 2;
pGroup->m_rotateDelta.value().z = READ_LE_S16(animPtr); animPtr += 2;
animPtr += 2;
}
}
}
@ -215,10 +216,11 @@ sBody* createBodyFromPtr(void* ptr)
newBody->m_groups[i].m_state.m_delta.x = READ_LE_S16(bodyBuffer); bodyBuffer += 2;
newBody->m_groups[i].m_state.m_delta.y = READ_LE_S16(bodyBuffer); bodyBuffer += 2;
newBody->m_groups[i].m_state.m_delta.z = READ_LE_S16(bodyBuffer); bodyBuffer += 2;
newBody->m_groups[i].m_state.m_rotateDelta.x = READ_LE_S16(bodyBuffer); bodyBuffer += 2;
newBody->m_groups[i].m_state.m_rotateDelta.y = READ_LE_S16(bodyBuffer); bodyBuffer += 2;
newBody->m_groups[i].m_state.m_rotateDelta.z = READ_LE_S16(bodyBuffer); bodyBuffer += 2;
newBody->m_groups[i].m_state.m_padding = READ_LE_S16(bodyBuffer); bodyBuffer += 2;
newBody->m_groups[i].m_state.m_rotateDelta.emplace();
newBody->m_groups[i].m_state.m_rotateDelta.value().x = READ_LE_S16(bodyBuffer); bodyBuffer += 2;
newBody->m_groups[i].m_state.m_rotateDelta.value().y = READ_LE_S16(bodyBuffer); bodyBuffer += 2;
newBody->m_groups[i].m_state.m_rotateDelta.value().z = READ_LE_S16(bodyBuffer); bodyBuffer += 2;
bodyBuffer += 2;
}
}
else

View File

@ -493,7 +493,7 @@ void DrawFoundWindow(int menuState, int objectName, int zoomFactor)
}
}
void foundObject(int objIdx, int param)
void FoundObjet(int objIdx, int param)
{
tWorldObject* objPtr;

View File

@ -87,7 +87,7 @@ int InitSpecialObjet(int mode, int X, int Y, int Z, int stage, int room, int alp
s16 localSpecialTable[4];
memcpy(localSpecialTable, specialTable, 8);
tObject* currentActorPtr = objectTable.data();
tObject* currentActorPtr = ListObjets.data();
int i;
for (i = 0; i < NUM_MAX_OBJECT; i++) // count the number of active actors
@ -131,7 +131,7 @@ int InitSpecialObjet(int mode, int X, int Y, int Z, int stage, int room, int alp
if (zvPtr)
{
actorZvPtr = &currentActorPtr->zv;
copyZv(zvPtr, actorZvPtr);
CopyZV(zvPtr, actorZvPtr);
}
switch (mode)
@ -226,7 +226,7 @@ void getHardClip()
zvCol.ZVZ1 = READ_LE_S16(etageData + 0x08);
zvCol.ZVZ2 = READ_LE_S16(etageData + 0x0A);
if (checkZvCollision(zvPtr, &zvCol))
if (CubeIntersect(zvPtr, &zvCol))
{
hardClip.ZVX1 = zvCol.ZVX1;
hardClip.ZVX2 = zvCol.ZVX2;
@ -502,7 +502,7 @@ void processLife(int lifeNum, bool callFoundLife)
if (currentProcessedActorIdx != -1)
{
currentProcessedActorPtr = &objectTable[currentProcessedActorIdx];
currentProcessedActorPtr = &ListObjets[currentProcessedActorIdx];
goto processOpcode;
}
@ -1284,9 +1284,9 @@ void processLife(int lifeNum, bool callFoundLife)
currentProcessedActorPtr->gamma = ListWorldObjets[object].gamma;
}
else {
currentProcessedActorPtr->alpha = objectTable[localObjectIndex].alpha;
currentProcessedActorPtr->beta = objectTable[localObjectIndex].beta;
currentProcessedActorPtr->gamma = objectTable[localObjectIndex].gamma;
currentProcessedActorPtr->alpha = ListObjets[localObjectIndex].alpha;
currentProcessedActorPtr->beta = ListObjets[localObjectIndex].beta;
currentProcessedActorPtr->gamma = ListObjets[localObjectIndex].gamma;
}
break;
}
@ -1408,7 +1408,7 @@ void processLife(int lifeNum, bool callFoundLife)
}
case 1: // flow
{
currentProcessedActorPtr = &objectTable[currentProcessedActorPtr->HIT_BY];
currentProcessedActorPtr = &ListObjets[currentProcessedActorPtr->HIT_BY];
InitSpecialObjet(1,
currentProcessedActorPtr->roomX + currentProcessedActorPtr->stepX + currentProcessedActorPtr->hotPoint.x,
@ -1458,17 +1458,17 @@ void processLife(int lifeNum, bool callFoundLife)
if (g_gameId == AITD1)
{
foundObject(lifeTempVar1, 1);
FoundObjet(lifeTempVar1, 1);
}
else
{
if (callFoundLife)
{
foundObject(lifeTempVar1, 2);
FoundObjet(lifeTempVar1, 2);
}
else
{
foundObject(lifeTempVar1, 1);
FoundObjet(lifeTempVar1, 1);
}
}
@ -1947,7 +1947,7 @@ void processLife(int lifeNum, bool callFoundLife)
currentWorldTarget = lifeTempVar1;
currentCameraTargetActor = lifeTempVar2;
lifeTempVar3 = objectTable[currentCameraTargetActor].room;
lifeTempVar3 = ListObjets[currentCameraTargetActor].room;
if (lifeTempVar3 != currentRoom)
{
@ -1959,19 +1959,19 @@ void processLife(int lifeNum, bool callFoundLife)
{
// security case, the target actor may be still be in list while already changed of stage
// TODO: check if AITD1 could use the same code (quite probable as it's only security)
if (objectTable[lifeTempVar2].stage != g_currentFloor)
if (ListObjets[lifeTempVar2].stage != g_currentFloor)
{
currentWorldTarget = lifeTempVar1;
FlagChangeEtage = 1;
NewNumEtage = objectTable[lifeTempVar2].stage;
NewNumSalle = objectTable[lifeTempVar2].room;
NewNumEtage = ListObjets[lifeTempVar2].stage;
NewNumSalle = ListObjets[lifeTempVar2].room;
}
else
{
currentWorldTarget = lifeTempVar1;
currentCameraTargetActor = lifeTempVar2;
lifeTempVar3 = objectTable[currentCameraTargetActor].room;
lifeTempVar3 = ListObjets[currentCameraTargetActor].room;
if (lifeTempVar3 != currentRoom)
{

View File

@ -197,7 +197,7 @@ void executeFoundLife(int objIdx)
if(actorIdx==-1)
{
tObject* currentActorEntryPtr = &objectTable[NUM_MAX_OBJECT-1];
tObject* currentActorEntryPtr = &ListObjets[NUM_MAX_OBJECT-1];
int currentActorEntry = NUM_MAX_OBJECT-1;
while(currentActorEntry>=0)
@ -212,14 +212,14 @@ void executeFoundLife(int objIdx)
if(currentActorEntry==-1) // no space, we will have to overwrite the last actor !
{
currentActorEntry = NUM_MAX_OBJECT-1;
currentActorEntryPtr = &objectTable[NUM_MAX_OBJECT-1];
currentActorEntryPtr = &ListObjets[NUM_MAX_OBJECT-1];
}
actorIdx = currentActorEntry;
var_2 = 1;
currentProcessedActorPtr = &objectTable[actorIdx];
currentLifeActorPtr = &objectTable[actorIdx];
currentProcessedActorPtr = &ListObjets[actorIdx];
currentLifeActorPtr = &ListObjets[actorIdx];
currentProcessedActorIdx = actorIdx;
currentLifeActorIdx = actorIdx;
@ -1184,7 +1184,7 @@ void LoadWorld(void)
for(i=0;i<NUM_MAX_OBJECT;i++)
{
objectTable[i].indexInWorld = -1;
ListObjets[i].indexInWorld = -1;
}
if(g_gameId == AITD1)
@ -1662,7 +1662,7 @@ void InitViewedRoomList()
void DeleteObjet(int index) // remove actor
{
tObject *actorPtr = &objectTable[index];
tObject *actorPtr = &ListObjets[index];
if(actorPtr->indexInWorld == -2) // flow
{
@ -1776,7 +1776,7 @@ void pointRotate(int x, int y, int z, int* destX, int* destY, int* destZ)
}
}
void copyZv(ZVStruct* source, ZVStruct* dest)
void CopyZV(ZVStruct* source, ZVStruct* dest)
{
memcpy(dest,source,sizeof(ZVStruct));
}
@ -1842,7 +1842,7 @@ void updateAllActorAndObjectsAITD2()
{
for (int i = 0; i < NUM_MAX_OBJECT; i++)
{
tObject* pObject = &objectTable[i];
tObject* pObject = &ListObjets[i];
if (pObject->indexInWorld == -1)
{
@ -1957,7 +1957,7 @@ void updateAllActorAndObjectsAITD2()
if (currentObject->objIndex != -1)
{
currentProcessedActorPtr = &objectTable[currentObject->objIndex];
currentProcessedActorPtr = &ListObjets[currentObject->objIndex];
currentProcessedActorIdx = currentObject->objIndex;
if (currentWorldTarget == i)
@ -1997,7 +1997,7 @@ void GenereActiveList()
for(int i=0;i<NUM_MAX_OBJECT;i++)
{
tObject* currentActor = &objectTable[i];
tObject* currentActor = &ListObjets[i];
if (currentActor->indexInWorld == -1)
continue;
@ -2095,7 +2095,7 @@ void GenereActiveList()
if(currentObject->objIndex != -1)
{
currentProcessedActorPtr = &objectTable[currentObject->objIndex];
currentProcessedActorPtr = &ListObjets[currentObject->objIndex];
currentProcessedActorIdx = currentObject->objIndex;
if(currentWorldTarget == i)
@ -2141,9 +2141,9 @@ void GenereAffList()
{
NbAffObjets = 0;
for(int i=0;i< objectTable.size();i++)
for(int i=0;i< ListObjets.size();i++)
{
tObject* actorPtr = &objectTable[i];
tObject* actorPtr = &ListObjets[i];
if(actorPtr->indexInWorld != -1 && actorPtr->bodyNum != -1)
{
if(checkActorInRoom(actorPtr->room))
@ -2207,9 +2207,9 @@ void InitView()
{
if(currentCameraTargetActor != -1)
{
x = objectTable[currentCameraTargetActor].worldX + objectTable[currentCameraTargetActor].stepX;
x = ListObjets[currentCameraTargetActor].worldX + ListObjets[currentCameraTargetActor].stepX;
y = debufferVar_topCameraZoom;
z = objectTable[currentCameraTargetActor].worldZ + objectTable[currentCameraTargetActor].stepZ;
z = ListObjets[currentCameraTargetActor].worldZ + ListObjets[currentCameraTargetActor].stepZ;
}
}
#endif
@ -2322,7 +2322,7 @@ s16 updateActorRotation(RealValue* rotatePtr)
void removeFromBGIncrust(int actorIdx)
{
tObject* actorPtr = &objectTable[actorIdx];
tObject* actorPtr = &ListObjets[actorIdx];
actorPtr->objectType &= ~AF_BOXIFY;
@ -2380,7 +2380,7 @@ void deleteObject(int objIdx)
if(actorIdx != -1)
{
actorPtr = &objectTable[actorIdx];
actorPtr = &ListObjets[actorIdx];
actorPtr->room = -1;
actorPtr->stage = -1;
@ -2471,16 +2471,16 @@ void drawZv(tObject* actorPtr)
{
ZVStruct localZv;
if( actorPtr->room != objectTable[currentCameraTargetActor].room )
if( actorPtr->room != ListObjets[currentCameraTargetActor].room )
{
if (objectTable[currentCameraTargetActor].room == -1) {
if (ListObjets[currentCameraTargetActor].room == -1) {
return;
}
getZvRelativePosition(&localZv, actorPtr->room, objectTable[currentCameraTargetActor].room);
AdjustZV(&localZv, actorPtr->room, ListObjets[currentCameraTargetActor].room);
}
else
{
copyZv(&actorPtr->zv,&localZv);
CopyZV(&actorPtr->zv,&localZv);
}
drawZv(localZv);
@ -2644,7 +2644,7 @@ void drawRoomZv(ZVStruct* zoneData, int color, int transparency)
cameraZv.ZVZ1 += translateZ;
cameraZv.ZVZ2 += translateZ;
if(checkZvCollision(&cameraZv,zoneData))
if(CubeIntersect(&cameraZv,zoneData))
{
return;
}
@ -2665,7 +2665,7 @@ void drawRoomZvLine(ZVStruct* zoneData, int color)
cameraZv.ZVZ1 += translateZ;
cameraZv.ZVZ2 += translateZ;
if(checkZvCollision(&cameraZv,zoneData))
if(CubeIntersect(&cameraZv,zoneData))
{
return;
}
@ -2728,7 +2728,7 @@ void drawZone(char* zoneData,int color)
tempZv.ZVZ1 = READ_LE_S16(zoneData+0x08);
tempZv.ZVZ2 = READ_LE_S16(zoneData+0x0A);
if(checkZvCollision(&cameraZv,&tempZv))
if(CubeIntersect(&cameraZv,&tempZv))
{
return;
}
@ -2768,7 +2768,7 @@ void drawSceZone(int roomNumber)
memcpy(&dataLocal,&roomDataTable[roomNumber].sceZoneTable[i].zv,sizeof(ZVStruct));
if(roomNumber!=currentRoom)
{
getZvRelativePosition(&dataLocal,roomNumber,currentRoom);
AdjustZV(&dataLocal,roomNumber,currentRoom);
}
// if(roomDataTable[roomNumber].sceZoneTable[i].parameter == 4)
@ -2788,11 +2788,11 @@ void drawHardCol(int roomNumber)
/*if(roomDataTable[roomNumber].hardColTable[i].type != 9)
continue;*/
copyZv(&roomDataTable[roomNumber].hardColTable[i].zv,&dataLocal);
CopyZV(&roomDataTable[roomNumber].hardColTable[i].zv,&dataLocal);
if(roomNumber!=currentRoom)
{
getZvRelativePosition(&dataLocal,roomNumber,currentRoom);
AdjustZV(&dataLocal,roomNumber,currentRoom);
}
switch(roomDataTable[roomNumber].hardColTable[i].type)
@ -3032,7 +3032,7 @@ void AllRedraw(int flagFlip)
osystem_CopyBlockPhys((unsigned char*)logicalScreen, 0, 0, 320, 200);
}
else {
tObject* actorPtr = &objectTable[currentDrawActor];
tObject* actorPtr = &ListObjets[currentDrawActor];
// this is commented out to draw actors backed into the background
//if(actorPtr->_flags & (AF_ANIMATED + AF_DRAWABLE + AF_SPECIAL))
@ -3188,13 +3188,13 @@ void walkStep(int angle1, int angle2, int angle3)
void addActorToBgInscrust(int actorIdx)
{
objectTable[actorIdx].objectType |= AF_BOXIFY + AF_DRAWABLE;
objectTable[actorIdx].objectType &= ~AF_ANIMATED;
ListObjets[actorIdx].objectType |= AF_BOXIFY + AF_DRAWABLE;
ListObjets[actorIdx].objectType &= ~AF_ANIMATED;
//FlagRefreshAux2 = 1;
}
int checkZvCollision(ZVStruct* zvPtr1,ZVStruct* zvPtr2)
int CubeIntersect(ZVStruct* zvPtr1,ZVStruct* zvPtr2)
{
if(zvPtr1->ZVX1 >= zvPtr2->ZVX2)
return 0;
@ -3217,7 +3217,7 @@ int checkZvCollision(ZVStruct* zvPtr1,ZVStruct* zvPtr2)
return 1;
}
void getZvRelativePosition(ZVStruct* zvPtr, int startRoom, int destRoom)
void AdjustZV(ZVStruct* zvPtr, int startRoom, int destRoom)
{
unsigned int Xdif = 10*(roomDataTable[destRoom].worldX - roomDataTable[startRoom].worldX);
unsigned int Ydif = 10*(roomDataTable[destRoom].worldY - roomDataTable[startRoom].worldY);
@ -3231,11 +3231,11 @@ void getZvRelativePosition(ZVStruct* zvPtr, int startRoom, int destRoom)
zvPtr->ZVZ2 += Zdif;
}
int checkObjectCollisions(int actorIdx, ZVStruct* zvPtr)
int CheckObjectCol(int actorIdx, ZVStruct* zvPtr)
{
int currentCollisionSlot = 0;
tObject* currentActor = objectTable.data();
int actorRoom = objectTable[actorIdx].room;
int actorRoom = ListObjets[actorIdx].room;
for(int i=0;i<3;i++)
{
@ -3244,38 +3244,41 @@ int checkObjectCollisions(int actorIdx, ZVStruct* zvPtr)
for(int i=0;i<NUM_MAX_OBJECT;i++)
{
if(currentActor->indexInWorld != -1 && i!=actorIdx)
{
ZVStruct* currentActorZv = &currentActor->zv;
tObject* currentActor = &ListObjets.at(i);
if(currentActor->room != actorRoom)
{
ZVStruct localZv;
if (currentActor->indexInWorld == -1)
continue;
if (i == actorIdx)
continue;
copyZv(zvPtr,&localZv);
ZVStruct* currentActorZv = &currentActor->zv;
getZvRelativePosition(&localZv,actorRoom,currentActor->room);
if (currentActor->room != actorRoom)
{
ZVStruct localZv;
if(checkZvCollision(&localZv,currentActorZv))
{
currentProcessedActorPtr->COL[currentCollisionSlot++] = i;
CopyZV(zvPtr, &localZv);
if(currentCollisionSlot == 3)
return(3);
}
}
else
{
if(checkZvCollision(zvPtr,currentActorZv))
{
currentProcessedActorPtr->COL[currentCollisionSlot++] = i;
AdjustZV(&localZv, actorRoom, currentActor->room);
if(currentCollisionSlot == 3)
return(3);
}
}
}
currentActor++;
if (CubeIntersect(&localZv, currentActorZv))
{
currentProcessedActorPtr->COL[currentCollisionSlot++] = i;
if (currentCollisionSlot == 3)
return(3);
}
}
else
{
if (CubeIntersect(zvPtr, currentActorZv))
{
currentProcessedActorPtr->COL[currentCollisionSlot++] = i;
if (currentCollisionSlot == 3)
return(3);
}
}
}
return(currentCollisionSlot);
@ -3319,7 +3322,7 @@ void take(int objIdx)
objPtr->stage = -1;
}
void hardColSuB1Sub1(int flag)
void Glisser(int flag)
{
switch(flag)
{
@ -3342,48 +3345,54 @@ void hardColSuB1Sub1(int flag)
}
}
void handleCollision(ZVStruct* startZv, ZVStruct* zvPtr2, ZVStruct* zvPtr3)
void GereCollision(ZVStruct* oldZv, ZVStruct* animatedZv, ZVStruct* fixZv)
{
s32 flag = 0;
s32 var_8;
s32 oldpos = 0;
s32 oldtype;
s32 halfX;
s32 halfZ;
s32 var_A;
s32 var_6;
s32 pos;
s32 type;
if(startZv->ZVX2 > zvPtr3->ZVX1)
if(oldZv->ZVX2 > fixZv->ZVX1)
{
if(zvPtr3->ZVX2 <= startZv->ZVX1)
if(fixZv->ZVX2 <= oldZv->ZVX1)
{
flag = 8;
oldpos = 8; // right
}
else {
oldpos = 0; // center
}
}
else
{
flag = 4;
oldpos = 4; // left
}
if(startZv->ZVZ2 > zvPtr3->ZVZ1)
if(oldZv->ZVZ2 > fixZv->ZVZ1)
{
if(startZv->ZVZ1 >= zvPtr3->ZVZ2)
if(oldZv->ZVZ1 >= fixZv->ZVZ2)
{
flag |= 2;
oldpos |= 2;
}
else {
oldpos |= 0; // center
}
}
else
{
flag |= 1;
oldpos |= 1;
}
if( flag == 5 || flag == 9 || flag == 6 || flag == 10 )
if( (oldpos == 5) || (oldpos == 9) || (oldpos == 6) || (oldpos == 10) )
{
var_8 = 2;
oldtype = 2; // corner
}
else
{
if(!flag)
if(oldpos == 0)
{
var_8 = 0;
oldtype = 0;
hardColStepZ = 0;
hardColStepX = 0;
@ -3392,99 +3401,100 @@ void handleCollision(ZVStruct* startZv, ZVStruct* zvPtr2, ZVStruct* zvPtr3)
}
else
{
var_8 = 1;
oldtype = 1; // corner
}
}
halfX = (zvPtr2->ZVX1 + zvPtr2->ZVX2) / 2;
halfZ = (zvPtr2->ZVZ1 + zvPtr2->ZVZ2) / 2;
halfX = (animatedZv->ZVX1 + animatedZv->ZVX2) / 2;
halfZ = (animatedZv->ZVZ1 + animatedZv->ZVZ2) / 2;
if(zvPtr3->ZVX1 > halfX)
if(fixZv->ZVX1 > halfX)
{
var_A = 4;
pos = 4; // left
}
else
{
if(zvPtr3->ZVX2 < halfX)
if(fixZv->ZVX2 < halfX)
{
var_A = 0;
pos = 0; // center
}
else
{
var_A = 8;
pos = 8; // right
}
}
if(zvPtr3->ZVZ1 > halfZ)
if(fixZv->ZVZ1 > halfZ)
{
var_A |= 1;
pos |= 1; // up
}
else
{
if(zvPtr3->ZVZ2 < halfZ)
if(fixZv->ZVZ2 < halfZ)
{
var_A |= 0; // once again, not that much usefull
pos |= 0; // center
}
else
{
var_A |= 2;
pos |= 2; // bellow
}
}
if( var_A == 5 || var_A == 9 || var_A == 6 || var_A == 10 )
if( (pos == 5) || (pos == 9) || (pos == 6) || (pos == 10) )
{
var_6 = 2;
type = 2; // corner
}
else
{
if(!var_A)
if(pos == 0)
{
var_6 = 0;
type = 0; // center
}
else
{
var_6 = 1;
type = 1; // border
}
}
if(var_8 == 1)
if(oldtype == 1) // border
{
hardColSuB1Sub1(flag);
return;
Glisser(oldpos);
}
else
{
if ((type == 1) && (pos & oldpos))
{
Glisser(pos);
}
else {
if ((pos == oldpos) || (pos+oldpos == 15))
{
int Xmod = abs(animatedZv->ZVX1 - oldZv->ZVX1); // recheck
int Zmod = abs(animatedZv->ZVZ1 - oldZv->ZVZ1);
if(var_6 == 1 && (var_A & flag))
{
hardColSuB1Sub1(var_A);
return;
}
if(var_A == flag || flag == 15)
{
int Xmod = abs(zvPtr2->ZVX1 - startZv->ZVX1); // recheck
int Zmod = abs(zvPtr2->ZVZ1 - startZv->ZVZ1);
if(Xmod > Zmod)
{
hardColStepZ = 0;
}
else
{
hardColStepX = 0;
}
}
else
{
if(!var_6 || (var_6 == 1 && !(var_A & flag)))
{
hardColStepZ = 0;
hardColStepX = 0;
}
else
{
hardColSuB1Sub1(flag&var_A);
}
}
if (Xmod > Zmod)
{
hardColStepZ = 0;
}
else
{
hardColStepX = 0;
}
}
else
{
if ((type == 0) || ((type == 1) && ((pos & oldpos) == 0)))
{
hardColStepZ = 0;
hardColStepX = 0;
}
else
{
Glisser(oldpos & pos);
}
}
}
}
}
int AsmCheckListCol(ZVStruct* zvPtr, roomDataStruct* pRoomData)
@ -3605,7 +3615,7 @@ int findBestCamera(void)
int foundAngle = 32000;
int foundCamera = -1;
tObject* actorPtr = &objectTable[currentCameraTargetActor];
tObject* actorPtr = &ListObjets[currentCameraTargetActor];
int x1 = actorPtr->zv.ZVX1/10;
int x2 = actorPtr->zv.ZVX2/10;
@ -3658,7 +3668,7 @@ void GereSwitchCamera(void)
int zvz1;
int zvz2;
actorPtr = &objectTable[currentCameraTargetActor];
actorPtr = &ListObjets[currentCameraTargetActor];
zvx1 = actorPtr->zv.ZVX1/10;
zvx2 = actorPtr->zv.ZVX2/10;
@ -3890,9 +3900,9 @@ int checkLineProjectionWithActors( int actorIdx, int X, int Y, int Z, int beta,
}
else
{
for(int i=0;i<objectTable.size();i++)
for(int i=0;i<ListObjets.size();i++)
{
tObject* currentActorPtr = &objectTable[i];
tObject* currentActorPtr = &ListObjets[i];
if(currentActorPtr->indexInWorld != -1 && i != actorIdx && !(currentActorPtr->objectType & AF_SPECIAL))
{
ZVStruct* zvPtr = &currentActorPtr->zv;
@ -3901,10 +3911,10 @@ int checkLineProjectionWithActors( int actorIdx, int X, int Y, int Z, int beta,
{
ZVStruct localZv2;
copyZv(&localZv, &localZv2);
getZvRelativePosition(&localZv2, room, currentActorPtr->room);
CopyZV(&localZv, &localZv2);
AdjustZV(&localZv2, room, currentActorPtr->room);
if(!checkZvCollision(&localZv2,zvPtr))
if(!CubeIntersect(&localZv2,zvPtr))
{
currentActorPtr++;
continue;
@ -3912,7 +3922,7 @@ int checkLineProjectionWithActors( int actorIdx, int X, int Y, int Z, int beta,
}
else
{
if(!checkZvCollision(&localZv,zvPtr))
if(!CubeIntersect(&localZv,zvPtr))
{
currentActorPtr++;
continue;
@ -3940,7 +3950,7 @@ void PutAtObjet(int objIdx, int objIdxToPutAt)
if(objPtrToPutAt->objIndex != -1)
{
tObject* actorToPutAtPtr = &objectTable[objPtrToPutAt->objIndex];
tObject* actorToPutAtPtr = &ListObjets[objPtrToPutAt->objIndex];
DeleteInventoryObjet(objIdx);
@ -4046,7 +4056,7 @@ void throwStoppedAt(int x, int z)
while(!foundPosition)
{
walkStep(0,-step,currentProcessedActorPtr->beta+0x200);
copyZv(&zvLocal,&zvCopy);
CopyZV(&zvLocal,&zvCopy);
x2 = x + animMoveX;
z2 = z + animMoveZ;

View File

@ -14,7 +14,7 @@ void GereSwitchCamera(void);
void GenereActiveList();
void GenereAffList();
void AllRedraw(int mode);
int checkObjectCollisions(int actorIdx, ZVStruct* zvPtr);
int CheckObjectCol(int actorIdx, ZVStruct* zvPtr);
int checkLineProjectionWithActors( int actorIdx, int X, int Y, int Z, int beta, int room, int param );
int AsmCheckListCol(ZVStruct* zvPtr, roomDataStruct* pRoomData);
void DeleteInventoryObjet(int objIdx);
@ -38,12 +38,12 @@ void OpenProgram(void);
void freeAll(void);
void startGame(int startupEtage, int startupRoom, int allowSystemMenu);
void AffRect(int x1, int y1, int x2, int y2, char color); // fast recode. No RE
void copyZv(ZVStruct* source, ZVStruct* dest);
void getZvRelativePosition(ZVStruct* zvPtr, int startRoom, int destRoom);
void CopyZV(ZVStruct* source, ZVStruct* dest);
void AdjustZV(ZVStruct* zvPtr, int startRoom, int destRoom);
void take(int objIdx);
void foundObject(int objIdx, int param);
void FoundObjet(int objIdx, int param);
void hit(int animNumber,int arg_2,int arg_4,int arg_6,int hitForce,int arg_A);
int checkZvCollision(ZVStruct* zvPtr1,ZVStruct* zvPtr2);
int CubeIntersect(ZVStruct* zvPtr1,ZVStruct* zvPtr2);
void PutAtObjet(int objIdx, int objIdxToPutAt);
void SetClip(int left, int top, int right, int bottom);
@ -64,7 +64,7 @@ void deleteObject(int objIdx);
void removeFromBGIncrust(int actorIdx);
void makeMessage(int messageIdx);
int drawTextOverlay(void);
void handleCollision(ZVStruct* startZv, ZVStruct* zvPtr2, ZVStruct* zvPtr3);
void GereCollision(ZVStruct* startZv, ZVStruct* zvPtr2, ZVStruct* zvPtr3);
void addActorToBgInscrust(int actorIdx);

View File

@ -113,7 +113,7 @@ void PlayWorld(int allowSystemMenu, int deltaTime)
for(currentProcessedActorIdx = 0; currentProcessedActorIdx < NUM_MAX_OBJECT; currentProcessedActorIdx++)
{
currentProcessedActorPtr = &objectTable[currentProcessedActorIdx];
currentProcessedActorPtr = &ListObjets[currentProcessedActorIdx];
if(currentProcessedActorPtr->indexInWorld >= 0)
{
currentProcessedActorPtr->COL_BY = -1;
@ -126,7 +126,7 @@ void PlayWorld(int allowSystemMenu, int deltaTime)
for(currentProcessedActorIdx = 0; currentProcessedActorIdx < NUM_MAX_OBJECT; currentProcessedActorIdx++)
{
currentProcessedActorPtr = &objectTable[currentProcessedActorIdx];
currentProcessedActorPtr = &ListObjets[currentProcessedActorIdx];
if(currentProcessedActorPtr->indexInWorld >= 0)
{
int flag = currentProcessedActorPtr->objectType;
@ -150,7 +150,7 @@ void PlayWorld(int allowSystemMenu, int deltaTime)
for(currentProcessedActorIdx = 0; currentProcessedActorIdx < NUM_MAX_OBJECT; currentProcessedActorIdx++)
{
currentProcessedActorPtr = &objectTable[currentProcessedActorIdx];
currentProcessedActorPtr = &ListObjets[currentProcessedActorIdx];
if(currentProcessedActorPtr->indexInWorld >= 0)
{
if(currentProcessedActorPtr->life != -1)
@ -209,7 +209,7 @@ void PlayWorld(int allowSystemMenu, int deltaTime)
for (currentProcessedActorIdx = 0; currentProcessedActorIdx < NUM_MAX_OBJECT; currentProcessedActorIdx++)
{
currentProcessedActorPtr = &objectTable[currentProcessedActorIdx];
currentProcessedActorPtr = &ListObjets[currentProcessedActorIdx];
if (currentProcessedActorPtr->indexInWorld >= 0)
{
if (currentProcessedActorPtr->life != -1)

View File

@ -4,7 +4,7 @@ int InitObjet(int body, int typeZv, int hardZvIdx, s16 objectType, int x, int y,
{
int i;
int j;
tObject* actorPtr = objectTable.data();
tObject* actorPtr = ListObjets.data();
ZVStruct* zvPtr;
for(i=0;i<NUM_MAX_OBJECT;i++)
@ -200,7 +200,7 @@ int InitObjet(int body, int typeZv, int hardZvIdx, s16 objectType, int x, int y,
{
if((roomDataTable[room].hardColTable[hardColIdx].type == 9) && (roomDataTable[room].hardColTable[hardColIdx].parameter == hardZvIdx))
{
copyZv(&roomDataTable[room].hardColTable[hardColIdx].zv, zvPtr);
CopyZV(&roomDataTable[room].hardColTable[hardColIdx].zv, zvPtr);
x = 0;
y = 0;

View File

@ -105,7 +105,7 @@ int FitdInit(int argc, char* argv[])
// Game is running in dos resolution 13h, ie 320x200x256, but is displayed in 4:3, so pixel are not square (1.6:1)
// We still need to create a 4:3 window for the actual display on screen.
int scale = 4;
int resolution[2] = { 320 * scale, 240 * scale };
int resolution[2] = { 80 * 4 * scale, 80 * 3 * scale };
gWindowBGFX = SDL_CreateWindow("FITD", resolution[0], resolution[1], flags);

View File

@ -344,7 +344,7 @@ int AnimNuage(int x,int y,int z,int alpha,int beta,int gamma, sBody* pBody)
break;
}
InitGroupeRot(pGroup[0].m_state.m_rotateDelta.x, pGroup[0].m_state.m_rotateDelta.y, pGroup[0].m_state.m_rotateDelta.z);
InitGroupeRot(pGroup->m_state.m_rotateDelta.value().x, pGroup->m_state.m_rotateDelta.value().y, pGroup->m_state.m_rotateDelta.value().z);
RotateGroupeOptimise(pGroup);
}
}

View File

@ -162,7 +162,7 @@ void ChangeSalle(int roomNumber)
for(i=0;i<NUM_MAX_OBJECT;i++)
{
if(objectTable[i].indexInWorld != -1)
if(ListObjets[i].indexInWorld != -1)
{
/* if(gameId == AITD1) // special case. In AITD1, the load room function was always triggered just after the actor was moved in the new room.
// it is not always the case in later games. Maybe we could generalize the AITD2 way...
@ -175,15 +175,15 @@ void ChangeSalle(int roomNumber)
{
if(i!=currentCameraTargetActor)
{
objectTable[i].worldX -= var_E;
objectTable[i].worldY += var_C;
objectTable[i].worldZ += var_A;
ListObjets[i].worldX -= var_E;
ListObjets[i].worldY += var_C;
ListObjets[i].worldZ += var_A;
}
else
{
objectTable[i].worldX = objectTable[i].roomX;
objectTable[i].worldY = objectTable[i].roomY;
objectTable[i].worldZ = objectTable[i].roomZ;
ListObjets[i].worldX = ListObjets[i].roomX;
ListObjets[i].worldY = ListObjets[i].roomY;
ListObjets[i].worldZ = ListObjets[i].roomZ;
}
}
}

View File

@ -278,228 +278,228 @@ int loadSave(int saveNumber)
for(i=0;i<NUM_MAX_OBJECT;i++)
{
ASSERT(sizeof(objectTable[i].indexInWorld) == 2);
fread(&objectTable[i].indexInWorld,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].indexInWorld) == 2);
fread(&ListObjets[i].indexInWorld,2,1,fHandle);
ASSERT(sizeof(objectTable[i].bodyNum) == 2);
fread(&objectTable[i].bodyNum,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].bodyNum) == 2);
fread(&ListObjets[i].bodyNum,2,1,fHandle);
ASSERT(sizeof(objectTable[i].objectType) == 2);
fread(&objectTable[i].objectType,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].objectType) == 2);
fread(&ListObjets[i].objectType,2,1,fHandle);
ASSERT(sizeof(objectTable[i].dynFlags) == 2);
fread(&objectTable[i].dynFlags,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].dynFlags) == 2);
fread(&ListObjets[i].dynFlags,2,1,fHandle);
// ASSERT(sizeof(actorTable[i].zv.ZVX1) == 2);
fread(&objectTable[i].zv.ZVX1,2,1,fHandle);
objectTable[i].zv.ZVX1 = (s16)objectTable[i].zv.ZVX1;
fread(&ListObjets[i].zv.ZVX1,2,1,fHandle);
ListObjets[i].zv.ZVX1 = (s16)ListObjets[i].zv.ZVX1;
// ASSERT(sizeof(actorTable[i].zv.ZVX2) == 2);
fread(&objectTable[i].zv.ZVX2,2,1,fHandle);
objectTable[i].zv.ZVX2 = (s16)objectTable[i].zv.ZVX2;
fread(&ListObjets[i].zv.ZVX2,2,1,fHandle);
ListObjets[i].zv.ZVX2 = (s16)ListObjets[i].zv.ZVX2;
// ASSERT(sizeof(actorTable[i].zv.ZVY1) == 2);
fread(&objectTable[i].zv.ZVY1,2,1,fHandle);
objectTable[i].zv.ZVY1 = (s16)objectTable[i].zv.ZVY1;
fread(&ListObjets[i].zv.ZVY1,2,1,fHandle);
ListObjets[i].zv.ZVY1 = (s16)ListObjets[i].zv.ZVY1;
// ASSERT(sizeof(actorTable[i].zv.ZVY2) == 2);
fread(&objectTable[i].zv.ZVY2,2,1,fHandle);
objectTable[i].zv.ZVY2 = (s16)objectTable[i].zv.ZVY2;
fread(&ListObjets[i].zv.ZVY2,2,1,fHandle);
ListObjets[i].zv.ZVY2 = (s16)ListObjets[i].zv.ZVY2;
// ASSERT(sizeof(actorTable[i].zv.ZVZ1) == 2);
fread(&objectTable[i].zv.ZVZ1,2,1,fHandle);
objectTable[i].zv.ZVZ1 = (s16)objectTable[i].zv.ZVZ1;
fread(&ListObjets[i].zv.ZVZ1,2,1,fHandle);
ListObjets[i].zv.ZVZ1 = (s16)ListObjets[i].zv.ZVZ1;
// ASSERT(sizeof(actorTable[i].zv.ZVZ2) == 2);
fread(&objectTable[i].zv.ZVZ2,2,1,fHandle);
objectTable[i].zv.ZVZ2 = (s16)objectTable[i].zv.ZVZ2;
fread(&ListObjets[i].zv.ZVZ2,2,1,fHandle);
ListObjets[i].zv.ZVZ2 = (s16)ListObjets[i].zv.ZVZ2;
ASSERT(sizeof(objectTable[i].screenXMin) == 2);
fread(&objectTable[i].screenXMin,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].screenXMin) == 2);
fread(&ListObjets[i].screenXMin,2,1,fHandle);
ASSERT(sizeof(objectTable[i].screenYMin) == 2);
fread(&objectTable[i].screenYMin,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].screenYMin) == 2);
fread(&ListObjets[i].screenYMin,2,1,fHandle);
ASSERT(sizeof(objectTable[i].screenXMax) == 2);
fread(&objectTable[i].screenXMax,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].screenXMax) == 2);
fread(&ListObjets[i].screenXMax,2,1,fHandle);
ASSERT(sizeof(objectTable[i].screenYMax) == 2);
fread(&objectTable[i].screenYMax,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].screenYMax) == 2);
fread(&ListObjets[i].screenYMax,2,1,fHandle);
ASSERT(sizeof(objectTable[i].roomX) == 2);
fread(&objectTable[i].roomX,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].roomX) == 2);
fread(&ListObjets[i].roomX,2,1,fHandle);
ASSERT(sizeof(objectTable[i].roomY) == 2);
fread(&objectTable[i].roomY,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].roomY) == 2);
fread(&ListObjets[i].roomY,2,1,fHandle);
ASSERT(sizeof(objectTable[i].roomZ) == 2);
fread(&objectTable[i].roomZ,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].roomZ) == 2);
fread(&ListObjets[i].roomZ,2,1,fHandle);
ASSERT(sizeof(objectTable[i].worldX) == 2);
fread(&objectTable[i].worldX,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].worldX) == 2);
fread(&ListObjets[i].worldX,2,1,fHandle);
ASSERT(sizeof(objectTable[i].worldY) == 2);
fread(&objectTable[i].worldY,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].worldY) == 2);
fread(&ListObjets[i].worldY,2,1,fHandle);
ASSERT(sizeof(objectTable[i].worldZ) == 2);
fread(&objectTable[i].worldZ,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].worldZ) == 2);
fread(&ListObjets[i].worldZ,2,1,fHandle);
ASSERT(sizeof(objectTable[i].alpha) == 2);
fread(&objectTable[i].alpha,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].alpha) == 2);
fread(&ListObjets[i].alpha,2,1,fHandle);
ASSERT(sizeof(objectTable[i].beta) == 2);
fread(&objectTable[i].beta,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].beta) == 2);
fread(&ListObjets[i].beta,2,1,fHandle);
ASSERT(sizeof(objectTable[i].gamma) == 2);
fread(&objectTable[i].gamma,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].gamma) == 2);
fread(&ListObjets[i].gamma,2,1,fHandle);
ASSERT(sizeof(objectTable[i].room) == 2);
fread(&objectTable[i].room,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].room) == 2);
fread(&ListObjets[i].room,2,1,fHandle);
ASSERT(sizeof(objectTable[i].stage) == 2);
fread(&objectTable[i].stage,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].stage) == 2);
fread(&ListObjets[i].stage,2,1,fHandle);
ASSERT(sizeof(objectTable[i].lifeMode) == 2);
fread(&objectTable[i].lifeMode,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].lifeMode) == 2);
fread(&ListObjets[i].lifeMode,2,1,fHandle);
ASSERT(sizeof(objectTable[i].life) == 2);
fread(&objectTable[i].life,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].life) == 2);
fread(&ListObjets[i].life,2,1,fHandle);
ASSERT(sizeof(objectTable[i].CHRONO) == 4);
fread(&objectTable[i].CHRONO,4,1,fHandle);
ASSERT(sizeof(ListObjets[i].CHRONO) == 4);
fread(&ListObjets[i].CHRONO,4,1,fHandle);
ASSERT(sizeof(objectTable[i].ROOM_CHRONO) == 4);
fread(&objectTable[i].ROOM_CHRONO,4,1,fHandle);
ASSERT(sizeof(ListObjets[i].ROOM_CHRONO) == 4);
fread(&ListObjets[i].ROOM_CHRONO,4,1,fHandle);
ASSERT(sizeof(objectTable[i].ANIM) == 2);
fread(&objectTable[i].ANIM,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].ANIM) == 2);
fread(&ListObjets[i].ANIM,2,1,fHandle);
ASSERT(sizeof(objectTable[i].animType) == 2);
fread(&objectTable[i].animType,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].animType) == 2);
fread(&ListObjets[i].animType,2,1,fHandle);
ASSERT(sizeof(objectTable[i].animInfo) == 2);
fread(&objectTable[i].animInfo,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].animInfo) == 2);
fread(&ListObjets[i].animInfo,2,1,fHandle);
ASSERT(sizeof(objectTable[i].newAnim) == 2);
fread(&objectTable[i].newAnim,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].newAnim) == 2);
fread(&ListObjets[i].newAnim,2,1,fHandle);
ASSERT(sizeof(objectTable[i].newAnimType) == 2);
fread(&objectTable[i].newAnimType,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].newAnimType) == 2);
fread(&ListObjets[i].newAnimType,2,1,fHandle);
ASSERT(sizeof(objectTable[i].newAnimInfo) == 2);
fread(&objectTable[i].newAnimInfo,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].newAnimInfo) == 2);
fread(&ListObjets[i].newAnimInfo,2,1,fHandle);
ASSERT(sizeof(objectTable[i].frame) == 2);
fread(&objectTable[i].frame,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].frame) == 2);
fread(&ListObjets[i].frame,2,1,fHandle);
ASSERT(sizeof(objectTable[i].numOfFrames) == 2);
fread(&objectTable[i].numOfFrames,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].numOfFrames) == 2);
fread(&ListObjets[i].numOfFrames,2,1,fHandle);
ASSERT(sizeof(objectTable[i].END_FRAME) == 2);
fread(&objectTable[i].END_FRAME,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].END_FRAME) == 2);
fread(&ListObjets[i].END_FRAME,2,1,fHandle);
ASSERT(sizeof(objectTable[i].flagEndAnim) == 2);
fread(&objectTable[i].flagEndAnim,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].flagEndAnim) == 2);
fread(&ListObjets[i].flagEndAnim,2,1,fHandle);
ASSERT(sizeof(objectTable[i].trackMode) == 2);
fread(&objectTable[i].trackMode,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].trackMode) == 2);
fread(&ListObjets[i].trackMode,2,1,fHandle);
ASSERT(sizeof(objectTable[i].trackNumber) == 2);
fread(&objectTable[i].trackNumber,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].trackNumber) == 2);
fread(&ListObjets[i].trackNumber,2,1,fHandle);
ASSERT(sizeof(objectTable[i].MARK) == 2);
fread(&objectTable[i].MARK,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].MARK) == 2);
fread(&ListObjets[i].MARK,2,1,fHandle);
ASSERT(sizeof(objectTable[i].positionInTrack) == 2);
fread(&objectTable[i].positionInTrack,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].positionInTrack) == 2);
fread(&ListObjets[i].positionInTrack,2,1,fHandle);
ASSERT(sizeof(objectTable[i].stepX) == 2);
fread(&objectTable[i].stepX,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].stepX) == 2);
fread(&ListObjets[i].stepX,2,1,fHandle);
ASSERT(sizeof(objectTable[i].stepY) == 2);
fread(&objectTable[i].stepY,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].stepY) == 2);
fread(&ListObjets[i].stepY,2,1,fHandle);
ASSERT(sizeof(objectTable[i].stepZ) == 2); // 45
fread(&objectTable[i].stepZ,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].stepZ) == 2); // 45
fread(&ListObjets[i].stepZ,2,1,fHandle);
loadInterpolatedValue(&objectTable[i].YHandler,fHandle);
loadInterpolatedValue(&ListObjets[i].YHandler,fHandle);
ASSERT(sizeof(objectTable[i].falling) == 2);
fread(&objectTable[i].falling,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].falling) == 2);
fread(&ListObjets[i].falling,2,1,fHandle);
loadInterpolatedValue(&objectTable[i].rotate,fHandle);
loadInterpolatedValue(&ListObjets[i].rotate,fHandle);
ASSERT(sizeof(objectTable[i].direction) == 2);
fread(&objectTable[i].direction,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].direction) == 2);
fread(&ListObjets[i].direction,2,1,fHandle);
ASSERT(sizeof(objectTable[i].speed) == 2);
fread(&objectTable[i].speed,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].speed) == 2);
fread(&ListObjets[i].speed,2,1,fHandle);
loadInterpolatedValue(&objectTable[i].speedChange,fHandle);
loadInterpolatedValue(&ListObjets[i].speedChange,fHandle);
ASSERT(sizeof(objectTable[i].COL[0]) == 2);
fread(&objectTable[i].COL[0],2,1,fHandle);
ASSERT(sizeof(ListObjets[i].COL[0]) == 2);
fread(&ListObjets[i].COL[0],2,1,fHandle);
ASSERT(sizeof(objectTable[i].COL[1]) == 2);
fread(&objectTable[i].COL[1],2,1,fHandle);
ASSERT(sizeof(ListObjets[i].COL[1]) == 2);
fread(&ListObjets[i].COL[1],2,1,fHandle);
ASSERT(sizeof(objectTable[i].COL[2]) == 2);
fread(&objectTable[i].COL[2],2,1,fHandle);
ASSERT(sizeof(ListObjets[i].COL[2]) == 2);
fread(&ListObjets[i].COL[2],2,1,fHandle);
ASSERT(sizeof(objectTable[i].COL_BY) == 2);
fread(&objectTable[i].COL_BY,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].COL_BY) == 2);
fread(&ListObjets[i].COL_BY,2,1,fHandle);
ASSERT(sizeof(objectTable[i].HARD_DEC) == 2);
fread(&objectTable[i].HARD_DEC,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].HARD_DEC) == 2);
fread(&ListObjets[i].HARD_DEC,2,1,fHandle);
ASSERT(sizeof(objectTable[i].HARD_COL) == 2);
fread(&objectTable[i].HARD_COL,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].HARD_COL) == 2);
fread(&ListObjets[i].HARD_COL,2,1,fHandle);
ASSERT(sizeof(objectTable[i].HIT) == 2);
fread(&objectTable[i].HIT,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].HIT) == 2);
fread(&ListObjets[i].HIT,2,1,fHandle);
ASSERT(sizeof(objectTable[i].HIT_BY) == 2);
fread(&objectTable[i].HIT_BY,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].HIT_BY) == 2);
fread(&ListObjets[i].HIT_BY,2,1,fHandle);
ASSERT(sizeof(objectTable[i].animActionType) == 2);
fread(&objectTable[i].animActionType,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].animActionType) == 2);
fread(&ListObjets[i].animActionType,2,1,fHandle);
ASSERT(sizeof(objectTable[i].animActionANIM) == 2);
fread(&objectTable[i].animActionANIM,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].animActionANIM) == 2);
fread(&ListObjets[i].animActionANIM,2,1,fHandle);
ASSERT(sizeof(objectTable[i].animActionFRAME) == 2);
fread(&objectTable[i].animActionFRAME,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].animActionFRAME) == 2);
fread(&ListObjets[i].animActionFRAME,2,1,fHandle);
ASSERT(sizeof(objectTable[i].animActionParam) == 2);
fread(&objectTable[i].animActionParam,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].animActionParam) == 2);
fread(&ListObjets[i].animActionParam,2,1,fHandle);
ASSERT(sizeof(objectTable[i].hitForce) == 2);
fread(&objectTable[i].hitForce,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].hitForce) == 2);
fread(&ListObjets[i].hitForce,2,1,fHandle);
ASSERT(sizeof(objectTable[i].hotPointID) == 2);
fread(&objectTable[i].hotPointID,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].hotPointID) == 2);
fread(&ListObjets[i].hotPointID,2,1,fHandle);
ASSERT(sizeof(objectTable[i].hotPoint.x) == 2);
fread(&objectTable[i].hotPoint.x,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].hotPoint.x) == 2);
fread(&ListObjets[i].hotPoint.x,2,1,fHandle);
ASSERT(sizeof(objectTable[i].hotPoint.y) == 2);
fread(&objectTable[i].hotPoint.x,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].hotPoint.y) == 2);
fread(&ListObjets[i].hotPoint.x,2,1,fHandle);
ASSERT(sizeof(objectTable[i].hotPoint.z) == 2);
fread(&objectTable[i].hotPoint.x,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].hotPoint.z) == 2);
fread(&ListObjets[i].hotPoint.x,2,1,fHandle);
}
fclose(fHandle);
for(i=0;i<NUM_MAX_OBJECT;i++)
{
if(objectTable[i].indexInWorld != -1 && objectTable[i].bodyNum != -1)
if(ListObjets[i].indexInWorld != -1 && ListObjets[i].bodyNum != -1)
{
sBody* bodyPtr = HQR_Get(HQ_Bodys,objectTable[i].bodyNum);
sBody* bodyPtr = HQR_Get(HQ_Bodys,ListObjets[i].bodyNum);
if(objectTable[i].ANIM != -1)
if(ListObjets[i].ANIM != -1)
{
sAnimation* animPtr = HQR_Get(HQ_Anims,objectTable[i].ANIM);
SetAnimObjet(objectTable[i].frame,animPtr,bodyPtr);
sAnimation* animPtr = HQR_Get(HQ_Anims,ListObjets[i].ANIM);
SetAnimObjet(ListObjets[i].frame,animPtr,bodyPtr);
}
}
}
@ -556,13 +556,13 @@ int makeSaveFile(int entry)
// For safety, destroy special objects before mallocs
for(i=0;i<NUM_MAX_OBJECT;i++)
{
if (objectTable[i].indexInWorld == -2) // Special objects
if (ListObjets[i].indexInWorld == -2) // Special objects
{
objectTable[i].indexInWorld = -1;
if (objectTable[i].ANIM == 4)
ListObjets[i].indexInWorld = -1;
if (ListObjets[i].ANIM == 4)
{
CVars[getCVarsIdx(FOG_FLAG)] = 0;
HQ_Free_Malloc(HQ_Memory, objectTable[i].frame);
HQ_Free_Malloc(HQ_Memory, ListObjets[i].frame);
}
}
}
@ -772,211 +772,211 @@ int makeSaveFile(int entry)
for(i=0;i<NUM_MAX_OBJECT;i++)
{
ASSERT(sizeof(objectTable[i].indexInWorld) == 2);
fwrite(&objectTable[i].indexInWorld,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].indexInWorld) == 2);
fwrite(&ListObjets[i].indexInWorld,2,1,fHandle);
ASSERT(sizeof(objectTable[i].bodyNum) == 2);
fwrite(&objectTable[i].bodyNum,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].bodyNum) == 2);
fwrite(&ListObjets[i].bodyNum,2,1,fHandle);
ASSERT(sizeof(objectTable[i].objectType) == 2);
fwrite(&objectTable[i].objectType,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].objectType) == 2);
fwrite(&ListObjets[i].objectType,2,1,fHandle);
ASSERT(sizeof(objectTable[i].dynFlags) == 2);
fwrite(&objectTable[i].dynFlags,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].dynFlags) == 2);
fwrite(&ListObjets[i].dynFlags,2,1,fHandle);
// ASSERT(sizeof(actorTable[i].zv.ZVX1) == 2);
fwrite(&objectTable[i].zv.ZVX1,2,1,fHandle);
objectTable[i].zv.ZVX1 = (s16)objectTable[i].zv.ZVX1;
fwrite(&ListObjets[i].zv.ZVX1,2,1,fHandle);
ListObjets[i].zv.ZVX1 = (s16)ListObjets[i].zv.ZVX1;
// ASSERT(sizeof(actorTable[i].zv.ZVX2) == 2);
fwrite(&objectTable[i].zv.ZVX2,2,1,fHandle);
objectTable[i].zv.ZVX2 = (s16)objectTable[i].zv.ZVX2;
fwrite(&ListObjets[i].zv.ZVX2,2,1,fHandle);
ListObjets[i].zv.ZVX2 = (s16)ListObjets[i].zv.ZVX2;
// ASSERT(sizeof(actorTable[i].zv.ZVY1) == 2);
fwrite(&objectTable[i].zv.ZVY1,2,1,fHandle);
fwrite(&ListObjets[i].zv.ZVY1,2,1,fHandle);
// ASSERT(sizeof(actorTable[i].zv.ZVY2) == 2);
fwrite(&objectTable[i].zv.ZVY2,2,1,fHandle);
fwrite(&ListObjets[i].zv.ZVY2,2,1,fHandle);
// ASSERT(sizeof(actorTable[i].zv.ZVZ1) == 2);
fwrite(&objectTable[i].zv.ZVZ1,2,1,fHandle);
fwrite(&ListObjets[i].zv.ZVZ1,2,1,fHandle);
// ASSERT(sizeof(actorTable[i].zv.ZVZ2) == 2);
fwrite(&objectTable[i].zv.ZVZ2,2,1,fHandle);
fwrite(&ListObjets[i].zv.ZVZ2,2,1,fHandle);
ASSERT(sizeof(objectTable[i].screenXMin) == 2);
fwrite(&objectTable[i].screenXMin,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].screenXMin) == 2);
fwrite(&ListObjets[i].screenXMin,2,1,fHandle);
ASSERT(sizeof(objectTable[i].screenYMin) == 2);
fwrite(&objectTable[i].screenYMin,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].screenYMin) == 2);
fwrite(&ListObjets[i].screenYMin,2,1,fHandle);
ASSERT(sizeof(objectTable[i].screenXMax) == 2);
fwrite(&objectTable[i].screenXMax,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].screenXMax) == 2);
fwrite(&ListObjets[i].screenXMax,2,1,fHandle);
ASSERT(sizeof(objectTable[i].screenYMax) == 2);
fwrite(&objectTable[i].screenYMax,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].screenYMax) == 2);
fwrite(&ListObjets[i].screenYMax,2,1,fHandle);
ASSERT(sizeof(objectTable[i].roomX) == 2);
fwrite(&objectTable[i].roomX,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].roomX) == 2);
fwrite(&ListObjets[i].roomX,2,1,fHandle);
ASSERT(sizeof(objectTable[i].roomY) == 2);
fwrite(&objectTable[i].roomY,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].roomY) == 2);
fwrite(&ListObjets[i].roomY,2,1,fHandle);
ASSERT(sizeof(objectTable[i].roomZ) == 2);
fwrite(&objectTable[i].roomZ,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].roomZ) == 2);
fwrite(&ListObjets[i].roomZ,2,1,fHandle);
ASSERT(sizeof(objectTable[i].worldX) == 2);
fwrite(&objectTable[i].worldX,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].worldX) == 2);
fwrite(&ListObjets[i].worldX,2,1,fHandle);
ASSERT(sizeof(objectTable[i].worldY) == 2);
fwrite(&objectTable[i].worldY,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].worldY) == 2);
fwrite(&ListObjets[i].worldY,2,1,fHandle);
ASSERT(sizeof(objectTable[i].worldZ) == 2);
fwrite(&objectTable[i].worldZ,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].worldZ) == 2);
fwrite(&ListObjets[i].worldZ,2,1,fHandle);
ASSERT(sizeof(objectTable[i].alpha) == 2);
fwrite(&objectTable[i].alpha,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].alpha) == 2);
fwrite(&ListObjets[i].alpha,2,1,fHandle);
ASSERT(sizeof(objectTable[i].beta) == 2);
fwrite(&objectTable[i].beta,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].beta) == 2);
fwrite(&ListObjets[i].beta,2,1,fHandle);
ASSERT(sizeof(objectTable[i].gamma) == 2);
fwrite(&objectTable[i].gamma,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].gamma) == 2);
fwrite(&ListObjets[i].gamma,2,1,fHandle);
ASSERT(sizeof(objectTable[i].room) == 2);
fwrite(&objectTable[i].room,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].room) == 2);
fwrite(&ListObjets[i].room,2,1,fHandle);
ASSERT(sizeof(objectTable[i].stage) == 2);
fwrite(&objectTable[i].stage,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].stage) == 2);
fwrite(&ListObjets[i].stage,2,1,fHandle);
ASSERT(sizeof(objectTable[i].lifeMode) == 2);
fwrite(&objectTable[i].lifeMode,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].lifeMode) == 2);
fwrite(&ListObjets[i].lifeMode,2,1,fHandle);
ASSERT(sizeof(objectTable[i].life) == 2);
fwrite(&objectTable[i].life,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].life) == 2);
fwrite(&ListObjets[i].life,2,1,fHandle);
ASSERT(sizeof(objectTable[i].CHRONO) == 4);
fwrite(&objectTable[i].CHRONO,4,1,fHandle);
ASSERT(sizeof(ListObjets[i].CHRONO) == 4);
fwrite(&ListObjets[i].CHRONO,4,1,fHandle);
ASSERT(sizeof(objectTable[i].ROOM_CHRONO) == 4);
fwrite(&objectTable[i].ROOM_CHRONO,4,1,fHandle);
ASSERT(sizeof(ListObjets[i].ROOM_CHRONO) == 4);
fwrite(&ListObjets[i].ROOM_CHRONO,4,1,fHandle);
ASSERT(sizeof(objectTable[i].ANIM) == 2);
fwrite(&objectTable[i].ANIM,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].ANIM) == 2);
fwrite(&ListObjets[i].ANIM,2,1,fHandle);
ASSERT(sizeof(objectTable[i].animType) == 2);
fwrite(&objectTable[i].animType,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].animType) == 2);
fwrite(&ListObjets[i].animType,2,1,fHandle);
ASSERT(sizeof(objectTable[i].animInfo) == 2);
fwrite(&objectTable[i].animInfo,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].animInfo) == 2);
fwrite(&ListObjets[i].animInfo,2,1,fHandle);
ASSERT(sizeof(objectTable[i].newAnim) == 2);
fwrite(&objectTable[i].newAnim,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].newAnim) == 2);
fwrite(&ListObjets[i].newAnim,2,1,fHandle);
ASSERT(sizeof(objectTable[i].newAnimType) == 2);
fwrite(&objectTable[i].newAnimType,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].newAnimType) == 2);
fwrite(&ListObjets[i].newAnimType,2,1,fHandle);
ASSERT(sizeof(objectTable[i].newAnimInfo) == 2);
fwrite(&objectTable[i].newAnimInfo,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].newAnimInfo) == 2);
fwrite(&ListObjets[i].newAnimInfo,2,1,fHandle);
ASSERT(sizeof(objectTable[i].frame) == 2);
fwrite(&objectTable[i].frame,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].frame) == 2);
fwrite(&ListObjets[i].frame,2,1,fHandle);
ASSERT(sizeof(objectTable[i].numOfFrames) == 2);
fwrite(&objectTable[i].numOfFrames,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].numOfFrames) == 2);
fwrite(&ListObjets[i].numOfFrames,2,1,fHandle);
ASSERT(sizeof(objectTable[i].END_FRAME) == 2);
fwrite(&objectTable[i].END_FRAME,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].END_FRAME) == 2);
fwrite(&ListObjets[i].END_FRAME,2,1,fHandle);
ASSERT(sizeof(objectTable[i].flagEndAnim) == 2);
fwrite(&objectTable[i].flagEndAnim,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].flagEndAnim) == 2);
fwrite(&ListObjets[i].flagEndAnim,2,1,fHandle);
ASSERT(sizeof(objectTable[i].trackMode) == 2);
fwrite(&objectTable[i].trackMode,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].trackMode) == 2);
fwrite(&ListObjets[i].trackMode,2,1,fHandle);
ASSERT(sizeof(objectTable[i].trackNumber) == 2);
fwrite(&objectTable[i].trackNumber,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].trackNumber) == 2);
fwrite(&ListObjets[i].trackNumber,2,1,fHandle);
ASSERT(sizeof(objectTable[i].MARK) == 2);
fwrite(&objectTable[i].MARK,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].MARK) == 2);
fwrite(&ListObjets[i].MARK,2,1,fHandle);
ASSERT(sizeof(objectTable[i].positionInTrack) == 2);
fwrite(&objectTable[i].positionInTrack,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].positionInTrack) == 2);
fwrite(&ListObjets[i].positionInTrack,2,1,fHandle);
ASSERT(sizeof(objectTable[i].stepX) == 2);
fwrite(&objectTable[i].stepX,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].stepX) == 2);
fwrite(&ListObjets[i].stepX,2,1,fHandle);
ASSERT(sizeof(objectTable[i].stepY) == 2);
fwrite(&objectTable[i].stepY,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].stepY) == 2);
fwrite(&ListObjets[i].stepY,2,1,fHandle);
ASSERT(sizeof(objectTable[i].stepZ) == 2); // 45
fwrite(&objectTable[i].stepZ,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].stepZ) == 2); // 45
fwrite(&ListObjets[i].stepZ,2,1,fHandle);
saveInterpolatedValue(&objectTable[i].YHandler,fHandle);
saveInterpolatedValue(&ListObjets[i].YHandler,fHandle);
ASSERT(sizeof(objectTable[i].falling) == 2);
fwrite(&objectTable[i].falling,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].falling) == 2);
fwrite(&ListObjets[i].falling,2,1,fHandle);
saveInterpolatedValue(&objectTable[i].rotate,fHandle);
saveInterpolatedValue(&ListObjets[i].rotate,fHandle);
ASSERT(sizeof(objectTable[i].direction) == 2);
fwrite(&objectTable[i].direction,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].direction) == 2);
fwrite(&ListObjets[i].direction,2,1,fHandle);
ASSERT(sizeof(objectTable[i].speed) == 2);
fwrite(&objectTable[i].speed,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].speed) == 2);
fwrite(&ListObjets[i].speed,2,1,fHandle);
saveInterpolatedValue(&objectTable[i].speedChange,fHandle);
saveInterpolatedValue(&ListObjets[i].speedChange,fHandle);
ASSERT(sizeof(objectTable[i].COL[0]) == 2);
fwrite(&objectTable[i].COL[0],2,1,fHandle);
ASSERT(sizeof(ListObjets[i].COL[0]) == 2);
fwrite(&ListObjets[i].COL[0],2,1,fHandle);
ASSERT(sizeof(objectTable[i].COL[1]) == 2);
fwrite(&objectTable[i].COL[1],2,1,fHandle);
ASSERT(sizeof(ListObjets[i].COL[1]) == 2);
fwrite(&ListObjets[i].COL[1],2,1,fHandle);
ASSERT(sizeof(objectTable[i].COL[2]) == 2);
fwrite(&objectTable[i].COL[2],2,1,fHandle);
ASSERT(sizeof(ListObjets[i].COL[2]) == 2);
fwrite(&ListObjets[i].COL[2],2,1,fHandle);
ASSERT(sizeof(objectTable[i].COL_BY) == 2);
fwrite(&objectTable[i].COL_BY,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].COL_BY) == 2);
fwrite(&ListObjets[i].COL_BY,2,1,fHandle);
ASSERT(sizeof(objectTable[i].HARD_DEC) == 2);
fwrite(&objectTable[i].HARD_DEC,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].HARD_DEC) == 2);
fwrite(&ListObjets[i].HARD_DEC,2,1,fHandle);
ASSERT(sizeof(objectTable[i].HARD_COL) == 2);
fwrite(&objectTable[i].HARD_COL,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].HARD_COL) == 2);
fwrite(&ListObjets[i].HARD_COL,2,1,fHandle);
ASSERT(sizeof(objectTable[i].HIT) == 2);
fwrite(&objectTable[i].HIT,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].HIT) == 2);
fwrite(&ListObjets[i].HIT,2,1,fHandle);
ASSERT(sizeof(objectTable[i].HIT_BY) == 2);
fwrite(&objectTable[i].HIT_BY,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].HIT_BY) == 2);
fwrite(&ListObjets[i].HIT_BY,2,1,fHandle);
ASSERT(sizeof(objectTable[i].animActionType) == 2);
fwrite(&objectTable[i].animActionType,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].animActionType) == 2);
fwrite(&ListObjets[i].animActionType,2,1,fHandle);
ASSERT(sizeof(objectTable[i].animActionANIM) == 2);
fwrite(&objectTable[i].animActionANIM,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].animActionANIM) == 2);
fwrite(&ListObjets[i].animActionANIM,2,1,fHandle);
ASSERT(sizeof(objectTable[i].animActionFRAME) == 2);
fwrite(&objectTable[i].animActionFRAME,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].animActionFRAME) == 2);
fwrite(&ListObjets[i].animActionFRAME,2,1,fHandle);
ASSERT(sizeof(objectTable[i].animActionParam) == 2);
fwrite(&objectTable[i].animActionParam,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].animActionParam) == 2);
fwrite(&ListObjets[i].animActionParam,2,1,fHandle);
ASSERT(sizeof(objectTable[i].hitForce) == 2);
fwrite(&objectTable[i].hitForce,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].hitForce) == 2);
fwrite(&ListObjets[i].hitForce,2,1,fHandle);
ASSERT(sizeof(objectTable[i].hotPointID) == 2);
fwrite(&objectTable[i].hotPointID,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].hotPointID) == 2);
fwrite(&ListObjets[i].hotPointID,2,1,fHandle);
ASSERT(sizeof(objectTable[i].hotPoint.x) == 2);
fwrite(&objectTable[i].hotPoint.x,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].hotPoint.x) == 2);
fwrite(&ListObjets[i].hotPoint.x,2,1,fHandle);
ASSERT(sizeof(objectTable[i].hotPoint.y) == 2);
fwrite(&objectTable[i].hotPoint.x,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].hotPoint.y) == 2);
fwrite(&ListObjets[i].hotPoint.x,2,1,fHandle);
ASSERT(sizeof(objectTable[i].hotPoint.z) == 2);
fwrite(&objectTable[i].hotPoint.x,2,1,fHandle);
ASSERT(sizeof(ListObjets[i].hotPoint.z) == 2);
fwrite(&ListObjets[i].hotPoint.x,2,1,fHandle);
}
fclose(fHandle);

View File

@ -242,7 +242,7 @@ void processTrack(void)
}
else
{
tObject* followedActorPtr = &objectTable[followedActorIdx];
tObject* followedActorPtr = &ListObjets[followedActorIdx];
int targetRoomNumber = followedActorPtr->room;
int targetX = followedActorPtr->roomX;

View File

@ -71,7 +71,7 @@ char* screenSm3;
char* screenSm4;
char* screenSm5;
std::array<tObject, NUM_MAX_OBJECT> objectTable;
std::array<tObject, NUM_MAX_OBJECT> ListObjets;
s16 currentWorldTarget;

View File

@ -306,7 +306,7 @@ extern char* screenSm3;
extern char* screenSm4;
extern char* screenSm5;
extern std::array<tObject, NUM_MAX_OBJECT> objectTable;
extern std::array<tObject, NUM_MAX_OBJECT> ListObjets;
extern s16 currentWorldTarget;
@ -504,8 +504,7 @@ struct sGroupState
s16 m_type; // 0
point3dStruct m_delta; // 2
// (AITD2+) if Info_optimise
point3dStruct m_rotateDelta; // 8
s16 m_padding;
std::optional<point3dStruct> m_rotateDelta; // 8
// 8 / 0x10
};