More cleanup
Few bug fix svn-id: r26666
This commit is contained in:
parent
339c39f8b7
commit
fe8d2a8e7f
19 changed files with 467 additions and 617 deletions
|
@ -774,11 +774,7 @@ void processAnimation(void) {
|
||||||
getMultipleObjectParam(currentActor->overlayNumber,
|
getMultipleObjectParam(currentActor->overlayNumber,
|
||||||
currentActor->idx, ¶ms);
|
currentActor->idx, ¶ms);
|
||||||
|
|
||||||
if (((animationStart && !currentActor->flag)
|
if (((animationStart && !currentActor->flag) || (!animationStart && currentActor->x_dest != -1 && currentActor->y_dest != -1)) && (currentActor->type == 0)) {
|
||||||
|| (!animationStart
|
|
||||||
&& currentActor->x_dest != -1
|
|
||||||
&& currentActor->y_dest != -1))
|
|
||||||
&& (currentActor->type == 0)) {
|
|
||||||
// mouse animation
|
// mouse animation
|
||||||
if (!animationStart) {
|
if (!animationStart) {
|
||||||
var34 = currentActor->x_dest;
|
var34 = currentActor->x_dest;
|
||||||
|
@ -790,11 +786,7 @@ void processAnimation(void) {
|
||||||
currentActor->flag = 1;
|
currentActor->flag = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
currentActor->pathId =
|
currentActor->pathId = computePathfinding(returnVar2, params.X, params.Y, var34, var35, currentActor->stepX, currentActor->stepY, currentActor->pathId);
|
||||||
computePathfinding(returnVar2, params.X,
|
|
||||||
params.Y, var34, var35,
|
|
||||||
currentActor->stepX, currentActor->stepY,
|
|
||||||
currentActor->pathId);
|
|
||||||
|
|
||||||
if (currentActor->pathId == -1) {
|
if (currentActor->pathId == -1) {
|
||||||
if ((currentActor->endDirection != -1)
|
if ((currentActor->endDirection != -1)
|
||||||
|
@ -1136,31 +1128,19 @@ void processAnimation(void) {
|
||||||
}
|
}
|
||||||
case ANIM_PHASE_END:
|
case ANIM_PHASE_END:
|
||||||
{
|
{
|
||||||
int newA =
|
int newA = raoul_end[currentActor->startDirection][0];
|
||||||
raoul_end[currentActor->
|
|
||||||
startDirection][0];
|
|
||||||
|
|
||||||
set_anim(currentActor->
|
set_anim(currentActor->overlayNumber, currentActor->idx, currentActor->start, currentActor->x, currentActor->y, newA, currentActor->poly);
|
||||||
overlayNumber,
|
|
||||||
currentActor->idx,
|
|
||||||
currentActor->start,
|
|
||||||
currentActor->x,
|
|
||||||
currentActor->y, newA,
|
|
||||||
currentActor->poly);
|
|
||||||
|
|
||||||
currentActor->pathId = -2;
|
currentActor->pathId = -2;
|
||||||
currentActor->phase =
|
currentActor->phase = ANIM_PHASE_WAIT;
|
||||||
ANIM_PHASE_WAIT;
|
|
||||||
currentActor->flag = 0;
|
currentActor->flag = 0;
|
||||||
currentActor->endDirection =
|
currentActor->endDirection = -1;
|
||||||
-1;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
printf
|
printf("Unimplemented currentActor->phase=%d in processAnimation()\n", currentActor->phase);
|
||||||
("Unimplemented currentActor->phase=%d in processAnimation()\n",
|
|
||||||
currentActor->phase);
|
|
||||||
// exit(1);
|
// exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,10 +64,13 @@ struct actorStruct {
|
||||||
|
|
||||||
typedef struct actorStruct actorStruct;
|
typedef struct actorStruct actorStruct;
|
||||||
|
|
||||||
int16 mainProc13(int overlayIdx, int param1, actorStruct * pStartEntry,
|
extern int raoul_move[][13];
|
||||||
int param2);
|
extern int raoul_end[][13];
|
||||||
actorStruct *findActor(int overlayIdx, int param1, actorStruct * pStartEntry,
|
extern int raoul_stat[][13];
|
||||||
int param2);
|
extern int raoul_invstat[][13];
|
||||||
|
|
||||||
|
int16 mainProc13(int overlayIdx, int param1, actorStruct * pStartEntry, int param2);
|
||||||
|
actorStruct *findActor(int overlayIdx, int param1, actorStruct * pStartEntry, int param2);
|
||||||
void processAnimation(void);
|
void processAnimation(void);
|
||||||
void getPixel(int x, int y);
|
void getPixel(int x, int y);
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,15 @@ void resetPtr(cellStruct *ptr) {
|
||||||
ptr->prev = NULL;
|
ptr->prev = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void freeMessageList(cellStruct *objPtr) {
|
||||||
|
/* if (objPtr) {
|
||||||
|
if(objPtr->next)
|
||||||
|
free(objPtr->next);
|
||||||
|
|
||||||
|
free(objPtr);
|
||||||
|
} */
|
||||||
|
}
|
||||||
|
|
||||||
void loadSavegameDataSub2(FILE *f) {
|
void loadSavegameDataSub2(FILE *f) {
|
||||||
unsigned short int n_chunks;
|
unsigned short int n_chunks;
|
||||||
int i;
|
int i;
|
||||||
|
@ -60,9 +69,7 @@ void loadSavegameDataSub2(FILE *f) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cellStruct *addCell(int16 overlayIdx, int16 param2, cellStruct *pHead,
|
cellStruct *addCell(cellStruct *pHead, int16 overlayIdx, int16 objIdx, int16 type, int16 backgroundPlane, int16 scriptOverlay, int16 scriptNumber, int16 scriptType) {
|
||||||
int16 scriptType, int16 scriptNumber, int16 scriptOverlay, int16 param3,
|
|
||||||
int16 param4) {
|
|
||||||
int16 var;
|
int16 var;
|
||||||
|
|
||||||
cellStruct *newElement;
|
cellStruct *newElement;
|
||||||
|
@ -70,7 +77,7 @@ cellStruct *addCell(int16 overlayIdx, int16 param2, cellStruct *pHead,
|
||||||
cellStruct *currentHead2;
|
cellStruct *currentHead2;
|
||||||
cellStruct *currentHead3;
|
cellStruct *currentHead3;
|
||||||
|
|
||||||
if (getSingleObjectParam(overlayIdx, param2, 2, &var) < 0) {
|
if (getSingleObjectParam(overlayIdx, objIdx, 2, &var) < 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,8 +92,7 @@ cellStruct *addCell(int16 overlayIdx, int16 param2, cellStruct *pHead,
|
||||||
if (currentHead2->type != 5) {
|
if (currentHead2->type != 5) {
|
||||||
int16 lvar2;
|
int16 lvar2;
|
||||||
|
|
||||||
getSingleObjectParam(currentHead2->overlay,
|
getSingleObjectParam(currentHead2->overlay, currentHead2->idx, 2, &lvar2);
|
||||||
currentHead2->idx, 2, &lvar2);
|
|
||||||
|
|
||||||
if (lvar2 > var)
|
if (lvar2 > var)
|
||||||
break;
|
break;
|
||||||
|
@ -98,9 +104,9 @@ cellStruct *addCell(int16 overlayIdx, int16 param2, cellStruct *pHead,
|
||||||
|
|
||||||
if (currentHead2) {
|
if (currentHead2) {
|
||||||
if ((currentHead2->overlay == overlayIdx) &&
|
if ((currentHead2->overlay == overlayIdx) &&
|
||||||
(currentHead2->backgroundPlane == param3) &&
|
(currentHead2->backgroundPlane == backgroundPlane) &&
|
||||||
(currentHead2->idx == param2) &&
|
(currentHead2->idx == objIdx) &&
|
||||||
(currentHead2->type == param4))
|
(currentHead2->type == type))
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -115,25 +121,26 @@ cellStruct *addCell(int16 overlayIdx, int16 param2, cellStruct *pHead,
|
||||||
newElement->next = currentHead3->next;
|
newElement->next = currentHead3->next;
|
||||||
currentHead3->next = newElement;
|
currentHead3->next = newElement;
|
||||||
|
|
||||||
newElement->idx = param2;
|
newElement->idx = objIdx;
|
||||||
newElement->type = param4;
|
newElement->type = type;
|
||||||
newElement->backgroundPlane = param3;
|
newElement->backgroundPlane = backgroundPlane;
|
||||||
newElement->overlay = overlayIdx;
|
newElement->overlay = overlayIdx;
|
||||||
newElement->freeze = 0;
|
newElement->freeze = 0;
|
||||||
newElement->field_16 = scriptNumber;
|
newElement->parent = scriptNumber;
|
||||||
newElement->field_18 = scriptOverlay;
|
newElement->parentOverlay = scriptOverlay;
|
||||||
newElement->gfxPtr = NULL;
|
newElement->gfxPtr = NULL;
|
||||||
newElement->followObjectIdx = param2;
|
newElement->followObjectIdx = objIdx;
|
||||||
newElement->followObjectOverlayIdx = overlayIdx;
|
newElement->followObjectOverlayIdx = overlayIdx;
|
||||||
newElement->field_1A = scriptType;
|
newElement->parentType = scriptType;
|
||||||
newElement->field_20 = 0;
|
|
||||||
newElement->field_22 = 0;
|
newElement->animStart = 0;
|
||||||
newElement->nextAnimDelay = 0;
|
newElement->animEnd = 0;
|
||||||
newElement->field_2C = 0;
|
newElement->animWait = 0;
|
||||||
newElement->currentAnimDelay = 0;
|
newElement->animSignal = 0;
|
||||||
newElement->field_2A = 0;
|
newElement->animCounter = 0;
|
||||||
|
newElement->animType = 0;
|
||||||
newElement->animStep = 0;
|
newElement->animStep = 0;
|
||||||
newElement->field_30 = 0;
|
newElement->animLoop = 0;
|
||||||
|
|
||||||
if (currentHead) {
|
if (currentHead) {
|
||||||
newElement->prev = currentHead->prev;
|
newElement->prev = currentHead->prev;
|
||||||
|
@ -146,4 +153,208 @@ cellStruct *addCell(int16 overlayIdx, int16 param2, cellStruct *pHead,
|
||||||
return newElement;
|
return newElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void createTextObject(int overlayIdx, int oldVar8, cellStruct *pObject, int scriptNumber, int scriptOverlayNumber, int backgroundPlane, int16 color, int oldVar2, int oldVar4, int oldVar6) {
|
||||||
|
|
||||||
|
char *ax;
|
||||||
|
cellStruct *savePObject = pObject;
|
||||||
|
cellStruct *cx;
|
||||||
|
|
||||||
|
cellStruct *pNewElement;
|
||||||
|
cellStruct *si = pObject->next;
|
||||||
|
cellStruct *var_2;
|
||||||
|
|
||||||
|
while (si) {
|
||||||
|
pObject = si;
|
||||||
|
si = si->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
var_2 = si;
|
||||||
|
|
||||||
|
pNewElement = (cellStruct *) malloc(sizeof(cellStruct));
|
||||||
|
|
||||||
|
pNewElement->next = pObject->next;
|
||||||
|
pObject->next = pNewElement;
|
||||||
|
|
||||||
|
pNewElement->idx = oldVar8;
|
||||||
|
pNewElement->type = 5;
|
||||||
|
pNewElement->backgroundPlane = backgroundPlane;
|
||||||
|
pNewElement->overlay = overlayIdx;
|
||||||
|
pNewElement->x = oldVar6;
|
||||||
|
pNewElement->field_C = oldVar4;
|
||||||
|
pNewElement->spriteIdx = oldVar2;
|
||||||
|
pNewElement->color = color;
|
||||||
|
pNewElement->freeze = 0;
|
||||||
|
pNewElement->parent = scriptNumber;
|
||||||
|
pNewElement->parentOverlay = scriptOverlayNumber;
|
||||||
|
pNewElement->gfxPtr = NULL;
|
||||||
|
|
||||||
|
if (var_2) {
|
||||||
|
cx = var_2;
|
||||||
|
} else {
|
||||||
|
cx = savePObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
pNewElement->prev = cx->prev;
|
||||||
|
cx->prev = pNewElement;
|
||||||
|
|
||||||
|
ax = getText(oldVar8, overlayIdx);
|
||||||
|
|
||||||
|
if (ax) {
|
||||||
|
pNewElement->gfxPtr = renderText(oldVar2, (uint8 *) ax);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void removeCell(cellStruct *objPtr, int ovlNumber, int objectIdx, int objType, int backgroundPlane ) {
|
||||||
|
cellStruct *currentObj = objPtr->next;
|
||||||
|
cellStruct *previous;
|
||||||
|
|
||||||
|
while (currentObj) {
|
||||||
|
if (((currentObj->overlay == ovlNumber) || (ovlNumber == -1)) &&
|
||||||
|
((currentObj->idx == objectIdx) || (objectIdx == -1)) &&
|
||||||
|
((currentObj->type == objType) || (objType == -1)) &&
|
||||||
|
((currentObj->backgroundPlane == backgroundPlane) || (backgroundPlane == -1))) {
|
||||||
|
currentObj->type = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
currentObj = currentObj->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
previous = objPtr;
|
||||||
|
currentObj = objPtr->next;
|
||||||
|
|
||||||
|
while (currentObj) {
|
||||||
|
cellStruct *si;
|
||||||
|
|
||||||
|
si = currentObj;
|
||||||
|
|
||||||
|
if (si->type == -1) {
|
||||||
|
cellStruct *dx;
|
||||||
|
previous->next = si->next;
|
||||||
|
|
||||||
|
dx = si->next;
|
||||||
|
|
||||||
|
if (!si->next) {
|
||||||
|
dx = objPtr;
|
||||||
|
}
|
||||||
|
|
||||||
|
dx->prev = si->prev;
|
||||||
|
|
||||||
|
// TODO: complelty wrong
|
||||||
|
//freeMessageList(si);
|
||||||
|
|
||||||
|
free(si);
|
||||||
|
|
||||||
|
currentObj = dx;
|
||||||
|
} else {
|
||||||
|
currentObj = si->next;
|
||||||
|
previous = si;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void freezeCell(cellStruct * pObject, int overlayIdx, int objIdx, int objType, int backgroundPlane, int oldFreeze, int newFreeze ) {
|
||||||
|
while (pObject) {
|
||||||
|
if ((pObject->overlay == overlayIdx) || (overlayIdx == -1)) {
|
||||||
|
if ((pObject->idx == objIdx) || (objIdx == -1)) {
|
||||||
|
if ((pObject->type == objType) || (objType == -1)) {
|
||||||
|
if ((pObject->backgroundPlane == backgroundPlane) || (backgroundPlane == -1)) {
|
||||||
|
if ((pObject->freeze == oldFreeze) || (oldFreeze == -1)) {
|
||||||
|
pObject->freeze = newFreeze;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pObject = pObject->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sortCells(int16 param1, int16 param2, cellStruct *objPtr) {
|
||||||
|
int16 var;
|
||||||
|
cellStruct *var8_;
|
||||||
|
cellStruct *var40;
|
||||||
|
cellStruct *var3E;
|
||||||
|
cellStruct *currentObjPtrPrevious;
|
||||||
|
cellStruct *currentObjPtr2;
|
||||||
|
cellStruct *match;
|
||||||
|
|
||||||
|
getSingleObjectParam(param1, param2, 2, &var);
|
||||||
|
|
||||||
|
currentObjPtrPrevious = objPtr;
|
||||||
|
currentObjPtr2 = objPtr->next;
|
||||||
|
|
||||||
|
match = NULL;
|
||||||
|
var40 = NULL;
|
||||||
|
var3E = NULL;
|
||||||
|
var8_ = objPtr;
|
||||||
|
|
||||||
|
while (currentObjPtr2) {
|
||||||
|
if ((currentObjPtr2->overlay == param1) && (currentObjPtr2->idx == param2)) {// found
|
||||||
|
currentObjPtrPrevious->next = currentObjPtr2->next;
|
||||||
|
|
||||||
|
if (currentObjPtr2->next) {
|
||||||
|
currentObjPtr2->next->prev =
|
||||||
|
currentObjPtr2->prev;
|
||||||
|
} else {
|
||||||
|
objPtr->prev = currentObjPtr2->prev;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (var40) {
|
||||||
|
var40->prev = currentObjPtr2;
|
||||||
|
} else {
|
||||||
|
var3E = currentObjPtr2;
|
||||||
|
}
|
||||||
|
|
||||||
|
currentObjPtr2->prev = NULL;
|
||||||
|
|
||||||
|
currentObjPtr2->next = var40;
|
||||||
|
|
||||||
|
var40 = currentObjPtr2;
|
||||||
|
|
||||||
|
if (match == NULL) {
|
||||||
|
match = currentObjPtr2;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (currentObjPtr2->type == 5) {
|
||||||
|
var2 = 32000;
|
||||||
|
} else {
|
||||||
|
int16 varC;
|
||||||
|
|
||||||
|
getSingleObjectParam(currentObjPtr2->overlay,
|
||||||
|
currentObjPtr2->idx, 2, &varC);
|
||||||
|
|
||||||
|
var2 = varC;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (var > var2) {
|
||||||
|
var8_ = currentObjPtr2;
|
||||||
|
}
|
||||||
|
|
||||||
|
currentObjPtrPrevious = currentObjPtrPrevious->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
currentObjPtr2 = currentObjPtr2->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (match) {
|
||||||
|
cellStruct *temp;
|
||||||
|
|
||||||
|
temp = var8_->next;
|
||||||
|
|
||||||
|
var8_->next = var40;
|
||||||
|
match->next = temp;
|
||||||
|
|
||||||
|
if (objPtr != var8_) {
|
||||||
|
var40->prev = var8_;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!temp) {
|
||||||
|
temp = match;
|
||||||
|
}
|
||||||
|
|
||||||
|
temp->prev = match;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // End of namespace Cruise
|
} // End of namespace Cruise
|
||||||
|
|
|
@ -38,26 +38,26 @@ struct cellStruct {
|
||||||
int16 idx;
|
int16 idx;
|
||||||
int16 type;
|
int16 type;
|
||||||
int16 overlay;
|
int16 overlay;
|
||||||
int16 field_A;
|
int16 x;
|
||||||
int16 field_C;
|
int16 field_C;
|
||||||
int16 spriteIdx;
|
int16 spriteIdx;
|
||||||
int16 color;
|
int16 color;
|
||||||
int16 backgroundPlane;
|
int16 backgroundPlane;
|
||||||
int16 freeze;
|
int16 freeze;
|
||||||
int16 field_16;
|
int16 parent;
|
||||||
int16 field_18;
|
int16 parentOverlay;
|
||||||
int16 field_1A;
|
int16 parentType;
|
||||||
int16 followObjectOverlayIdx;
|
int16 followObjectOverlayIdx;
|
||||||
int16 followObjectIdx;
|
int16 followObjectIdx;
|
||||||
int16 field_20;
|
int16 animStart;
|
||||||
int16 field_22;
|
int16 animEnd;
|
||||||
int16 nextAnimDelay;
|
int16 animWait;
|
||||||
int16 animStep;
|
int16 animStep;
|
||||||
int16 field_28;
|
int16 animChange;
|
||||||
int16 field_2A;
|
int16 animType;
|
||||||
int16 field_2C;
|
int16 animSignal;
|
||||||
int16 currentAnimDelay;
|
int16 animCounter;
|
||||||
int16 field_30;
|
int16 animLoop;
|
||||||
gfxEntryStruct *gfxPtr;
|
gfxEntryStruct *gfxPtr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -65,9 +65,11 @@ extern cellStruct cellHead;
|
||||||
|
|
||||||
void resetPtr(cellStruct * ptr);
|
void resetPtr(cellStruct * ptr);
|
||||||
void loadSavegameDataSub2(FILE * f);
|
void loadSavegameDataSub2(FILE * f);
|
||||||
cellStruct *addCell(int16 overlayIdx, int16 param2, cellStruct * pHead,
|
cellStruct *addCell(cellStruct *pHead, int16 overlayIdx, int16 objIdx, int16 type, int16 backgroundPlane, int16 scriptOverlay, int16 scriptNumber, int16 scriptType);
|
||||||
int16 scriptType, int16 scriptNumber, int16 scriptOverlay, int16 param3,
|
void createTextObject(int overlayIdx, int oldVar8, cellStruct * pObject, int scriptNumber, int scriptOverlayNumber, int backgroundPlane, int16 color, int oldVar2, int oldVar4, int oldVar6);
|
||||||
int16 param4);
|
void removeCell(cellStruct *objPtr, int ovlNumber, int objectIdx, int objType, int backgroundPlane );
|
||||||
|
void freezeCell(cellStruct * pObject, int overlayIdx, int objIdx, int objType, int backgroundPlane, int oldFreeze, int newFreeze );
|
||||||
|
void sortCells(int16 param1, int16 param2, cellStruct *objPtr);
|
||||||
|
|
||||||
} // End of namespace Cruise
|
} // End of namespace Cruise
|
||||||
|
|
||||||
|
|
|
@ -480,8 +480,8 @@ int initAllData(void) {
|
||||||
|
|
||||||
initBigVar3();
|
initBigVar3();
|
||||||
|
|
||||||
resetPtr2(&scriptHandle2);
|
resetPtr2(&procHead);
|
||||||
resetPtr2(&scriptHandle1);
|
resetPtr2(&relHead);
|
||||||
|
|
||||||
resetPtr(&cellHead);
|
resetPtr(&cellHead);
|
||||||
|
|
||||||
|
@ -579,9 +579,8 @@ int initAllData(void) {
|
||||||
if (bootOverlayNumber) {
|
if (bootOverlayNumber) {
|
||||||
positionInStack = 0;
|
positionInStack = 0;
|
||||||
|
|
||||||
attacheNewScriptToTail(bootOverlayNumber, &scriptHandle2, 0,
|
attacheNewScriptToTail(bootOverlayNumber, &procHead, 0, 20, 0, 0, scriptType_PROC);
|
||||||
20, 0, 0, scriptType_20);
|
scriptFunc2(bootOverlayNumber, &procHead, 1, 0);
|
||||||
scriptFunc2(bootOverlayNumber, &scriptHandle2, 1, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpyuint8(systemStrings.bootScriptName, "AUTO00");
|
strcpyuint8(systemStrings.bootScriptName, "AUTO00");
|
||||||
|
@ -878,7 +877,7 @@ int buildInventorySub1(int overlayIdx, int objIdx) {
|
||||||
getObjectDataFromOverlay(overlayIdx, objIdx);
|
getObjectDataFromOverlay(overlayIdx, objIdx);
|
||||||
|
|
||||||
if (pObjectData) {
|
if (pObjectData) {
|
||||||
return pObjectData->var1;
|
return pObjectData->type;
|
||||||
} else {
|
} else {
|
||||||
return -11;
|
return -11;
|
||||||
}
|
}
|
||||||
|
@ -1029,7 +1028,7 @@ int callInventoryObject(int param0, int param1, int x, int y) {
|
||||||
var_34->stringNameOffset) {
|
var_34->stringNameOffset) {
|
||||||
if (pObject) {
|
if (pObject) {
|
||||||
if (pObject->
|
if (pObject->
|
||||||
var1 !=
|
type !=
|
||||||
3) {
|
3) {
|
||||||
char var_214[80];
|
char var_214[80];
|
||||||
char var_1C4[80];
|
char var_1C4[80];
|
||||||
|
@ -1163,7 +1162,7 @@ int callInventoryObject(int param0, int param1, int x, int y) {
|
||||||
if (strlen(var_214)) {
|
if (strlen(var_214)) {
|
||||||
attacheNewScriptToTail
|
attacheNewScriptToTail
|
||||||
(var_1E,
|
(var_1E,
|
||||||
&scriptHandle1,
|
&relHead,
|
||||||
var_34->
|
var_34->
|
||||||
field_2,
|
field_2,
|
||||||
30,
|
30,
|
||||||
|
@ -1171,7 +1170,7 @@ int callInventoryObject(int param0, int param1, int x, int y) {
|
||||||
scriptNumber,
|
scriptNumber,
|
||||||
currentScriptPtr->
|
currentScriptPtr->
|
||||||
overlayNumber,
|
overlayNumber,
|
||||||
scriptType_30);
|
scriptType_REL);
|
||||||
} else {
|
} else {
|
||||||
if (var_22->specialString1) {
|
if (var_22->specialString1) {
|
||||||
ptr = getObjectName(var_34->varNameOffset, var_22->specialString1);
|
ptr = getObjectName(var_34->varNameOffset, var_22->specialString1);
|
||||||
|
@ -1531,11 +1530,11 @@ void mainLoop(void) {
|
||||||
enableUser = 0;
|
enableUser = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
manageScripts(&scriptHandle1);
|
manageScripts(&relHead);
|
||||||
manageScripts(&scriptHandle2);
|
manageScripts(&procHead);
|
||||||
|
|
||||||
removeFinishedScripts(&scriptHandle1);
|
removeFinishedScripts(&relHead);
|
||||||
removeFinishedScripts(&scriptHandle2);
|
removeFinishedScripts(&procHead);
|
||||||
|
|
||||||
processAnimation();
|
processAnimation();
|
||||||
|
|
||||||
|
|
|
@ -185,8 +185,7 @@ int updateResFileEntry(int height, int width, int entryNumber, int resType) {
|
||||||
return (-2);
|
return (-2);
|
||||||
|
|
||||||
filesDatabase[entryNumber].widthInColumn = width;
|
filesDatabase[entryNumber].widthInColumn = width;
|
||||||
filesDatabase[entryNumber].subData.ptr2 =
|
filesDatabase[entryNumber].subData.ptr2 = filesDatabase[entryNumber].subData.ptr + size;
|
||||||
filesDatabase[entryNumber].subData.ptr + size;
|
|
||||||
filesDatabase[entryNumber].width = width / 8;
|
filesDatabase[entryNumber].width = width / 8;
|
||||||
filesDatabase[entryNumber].resType = resType;
|
filesDatabase[entryNumber].resType = resType;
|
||||||
filesDatabase[entryNumber].height = height;
|
filesDatabase[entryNumber].height = height;
|
||||||
|
@ -225,16 +224,14 @@ int createResFileEntry(int width, int height, int resType) {
|
||||||
width = (width * 8) / 5;
|
width = (width * 8) / 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
filesDatabase[entryNumber].subData.ptr =
|
filesDatabase[entryNumber].subData.ptr = (uint8 *) mallocAndZero(size + div);
|
||||||
(uint8 *) mallocAndZero(size + div);
|
|
||||||
|
|
||||||
if (filesDatabase[entryNumber].subData.ptr) {
|
if (filesDatabase[entryNumber].subData.ptr) {
|
||||||
return (-2);
|
return (-2);
|
||||||
}
|
}
|
||||||
|
|
||||||
filesDatabase[entryNumber].widthInColumn = width;
|
filesDatabase[entryNumber].widthInColumn = width;
|
||||||
filesDatabase[entryNumber].subData.ptr2 =
|
filesDatabase[entryNumber].subData.ptr2 = filesDatabase[entryNumber].subData.ptr + size;
|
||||||
filesDatabase[entryNumber].subData.ptr + size;
|
|
||||||
filesDatabase[entryNumber].width = width / 8;
|
filesDatabase[entryNumber].width = width / 8;
|
||||||
filesDatabase[entryNumber].resType = resType;
|
filesDatabase[entryNumber].resType = resType;
|
||||||
filesDatabase[entryNumber].height = height;
|
filesDatabase[entryNumber].height = height;
|
||||||
|
|
|
@ -837,7 +837,7 @@ int decompFunction(void) {
|
||||||
}
|
}
|
||||||
case 0x8:
|
case 0x8:
|
||||||
{
|
{
|
||||||
sprintf(tempbuffer, "_removeObjectFromList(%s,%s,%s)",
|
sprintf(tempbuffer, "_removeCell(%s,%s,%s)",
|
||||||
popDecomp(), popDecomp(), popDecomp());
|
popDecomp(), popDecomp(), popDecomp());
|
||||||
pushDecomp(tempbuffer);
|
pushDecomp(tempbuffer);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -75,7 +75,7 @@ static const CRUISEGameDescription gameDescriptions[] = {
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
"cruise",
|
"cruise",
|
||||||
"",
|
"256 colors",
|
||||||
AD_ENTRY1("D1", "a90d2b9ead6b4d812cd14268672cf178"),
|
AD_ENTRY1("D1", "a90d2b9ead6b4d812cd14268672cf178"),
|
||||||
Common::EN_ANY,
|
Common::EN_ANY,
|
||||||
Common::kPlatformPC,
|
Common::kPlatformPC,
|
||||||
|
|
|
@ -30,19 +30,6 @@ namespace Cruise {
|
||||||
|
|
||||||
opcodeFunction opcodeTablePtr[256];
|
opcodeFunction opcodeTablePtr[256];
|
||||||
|
|
||||||
struct actorTableStruct {
|
|
||||||
int data[13];
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct actorTableStruct actorTableStruct;
|
|
||||||
|
|
||||||
actorTableStruct actorTable1[] = {
|
|
||||||
{ { 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
|
|
||||||
{ { 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
|
|
||||||
{ { 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
|
|
||||||
{ {-38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
|
|
||||||
};
|
|
||||||
|
|
||||||
int16 Op_LoadOverlay(void) {
|
int16 Op_LoadOverlay(void) {
|
||||||
uint8 *originalScriptName;
|
uint8 *originalScriptName;
|
||||||
uint8 scriptName[38];
|
uint8 scriptName[38];
|
||||||
|
@ -116,9 +103,9 @@ int16 Op_startScript(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
ptr =
|
ptr =
|
||||||
attacheNewScriptToTail(ovlIdx, &scriptHandle2, scriptIdx,
|
attacheNewScriptToTail(ovlIdx, &procHead, scriptIdx,
|
||||||
currentScriptPtr->type, currentScriptPtr->scriptNumber,
|
currentScriptPtr->type, currentScriptPtr->scriptNumber,
|
||||||
currentScriptPtr->overlayNumber, scriptType_Minus20);
|
currentScriptPtr->overlayNumber, scriptType_MinusPROC);
|
||||||
|
|
||||||
if (!ptr)
|
if (!ptr)
|
||||||
return (0);
|
return (0);
|
||||||
|
@ -156,9 +143,7 @@ int16 Op_AddProc(void) {
|
||||||
if (!overlay)
|
if (!overlay)
|
||||||
return (0);
|
return (0);
|
||||||
|
|
||||||
attacheNewScriptToTail(overlay, &scriptHandle2, pop2,
|
attacheNewScriptToTail(overlay, &procHead, pop2, currentScriptPtr->type, currentScriptPtr->scriptNumber, currentScriptPtr->overlayNumber, scriptType_PROC);
|
||||||
currentScriptPtr->type, currentScriptPtr->scriptNumber,
|
|
||||||
currentScriptPtr->overlayNumber, scriptType_20);
|
|
||||||
|
|
||||||
if (pop1 > 0) {
|
if (pop1 > 0) {
|
||||||
printf("Unsupported art send in op6!\n");
|
printf("Unsupported art send in op6!\n");
|
||||||
|
@ -287,8 +272,7 @@ int16 Op_RemoveMessage(void) {
|
||||||
overlay = currentScriptPtr->overlayNumber;
|
overlay = currentScriptPtr->overlayNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
removeObjectFromList(overlay, idx, &cellHead,
|
removeCell(&cellHead, overlay, idx, 5, currentActiveBackgroundPlane);
|
||||||
currentActiveBackgroundPlane, 5);
|
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
@ -349,7 +333,7 @@ int16 Op_RemoveProc(void) {
|
||||||
overlay = currentScriptPtr->overlayNumber;
|
overlay = currentScriptPtr->overlayNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
removeScript(overlay, idx, &scriptHandle2);
|
removeScript(overlay, idx, &procHead);
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
@ -423,10 +407,10 @@ int16 Op_changeCutSceneState(void) {
|
||||||
int16 Op_62(void) {
|
int16 Op_62(void) {
|
||||||
if (currentScriptPtr->var1A == 20) {
|
if (currentScriptPtr->var1A == 20) {
|
||||||
changeScriptParamInList(currentScriptPtr->var18,
|
changeScriptParamInList(currentScriptPtr->var18,
|
||||||
currentScriptPtr->var16, &scriptHandle2, 9997, -1);
|
currentScriptPtr->var16, &procHead, 9997, -1);
|
||||||
} else if (currentScriptPtr->var1A == 30) {
|
} else if (currentScriptPtr->var1A == 30) {
|
||||||
changeScriptParamInList(currentScriptPtr->var18,
|
changeScriptParamInList(currentScriptPtr->var18,
|
||||||
currentScriptPtr->var16, &scriptHandle1, 9997, -1);
|
currentScriptPtr->var16, &relHead, 9997, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -541,7 +525,7 @@ int16 Op_InitializeState(void) {
|
||||||
if (!ovlIdx)
|
if (!ovlIdx)
|
||||||
ovlIdx = currentScriptPtr->overlayNumber;
|
ovlIdx = currentScriptPtr->overlayNumber;
|
||||||
|
|
||||||
Op_InitializeStateSub(ovlIdx, objIdx, param1);
|
objInit(ovlIdx, objIdx, param1);
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
@ -613,38 +597,34 @@ int16 Op_GetMouseClick3(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int16 Op_AddCell(void) {
|
int16 Op_AddCell(void) {
|
||||||
int16 param1 = popVar();
|
int16 objType = popVar();
|
||||||
int16 param2 = popVar();
|
int16 objIdx = popVar();
|
||||||
int16 overlayIdx = popVar();
|
int16 overlayIdx = popVar();
|
||||||
|
|
||||||
if (!overlayIdx)
|
if (!overlayIdx)
|
||||||
overlayIdx = currentScriptPtr->overlayNumber;
|
overlayIdx = currentScriptPtr->overlayNumber;
|
||||||
|
|
||||||
addCell(overlayIdx, param2, &cellHead, currentScriptPtr->type,
|
addCell(&cellHead, overlayIdx, objIdx, objType, currentActiveBackgroundPlane, currentScriptPtr->overlayNumber, currentScriptPtr->scriptNumber, currentScriptPtr->type);
|
||||||
currentScriptPtr->scriptNumber, currentScriptPtr->overlayNumber,
|
|
||||||
currentActiveBackgroundPlane, param1);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int16 Op_2F(void) {
|
int16 Op_AddBackgroundIncrust(void) {
|
||||||
int16 param1 = popVar();
|
|
||||||
int16 param2 = popVar();
|
|
||||||
|
|
||||||
|
int16 objType = popVar();
|
||||||
|
int16 objIdx = popVar();
|
||||||
int16 overlayIdx = popVar();
|
int16 overlayIdx = popVar();
|
||||||
|
|
||||||
if (!overlayIdx)
|
if (!overlayIdx)
|
||||||
overlayIdx = currentScriptPtr->overlayNumber;
|
overlayIdx = currentScriptPtr->overlayNumber;
|
||||||
|
|
||||||
addBackgroundIncrust(overlayIdx, param2, &backgroundIncrustHead,
|
addBackgroundIncrust(overlayIdx, objIdx, &backgroundIncrustHead, currentScriptPtr->scriptNumber, currentScriptPtr->overlayNumber, currentActiveBackgroundPlane, objType);
|
||||||
currentScriptPtr->scriptNumber, currentScriptPtr->overlayNumber,
|
|
||||||
currentActiveBackgroundPlane, param1);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int16 Op_RemoveCell(void) {
|
int16 Op_RemoveCell(void) {
|
||||||
var1 = popVar();
|
int objType = popVar();
|
||||||
int objectIdx = popVar();
|
int objectIdx = popVar();
|
||||||
int ovlNumber = popVar();
|
int ovlNumber = popVar();
|
||||||
|
|
||||||
|
@ -652,8 +632,7 @@ int16 Op_RemoveCell(void) {
|
||||||
ovlNumber = currentScriptPtr->overlayNumber;
|
ovlNumber = currentScriptPtr->overlayNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
removeObjectFromList(ovlNumber, objectIdx, &cellHead,
|
removeCell(&cellHead, ovlNumber, objectIdx, objType, currentActiveBackgroundPlane);
|
||||||
currentActiveBackgroundPlane, var1);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -669,10 +648,10 @@ int16 Op_SetFontFileIndex(void) {
|
||||||
int16 Op_63(void) {
|
int16 Op_63(void) {
|
||||||
if (currentScriptPtr->var1A == 0x14) {
|
if (currentScriptPtr->var1A == 0x14) {
|
||||||
changeScriptParamInList(currentScriptPtr->var18,
|
changeScriptParamInList(currentScriptPtr->var18,
|
||||||
currentScriptPtr->var16, &scriptHandle2, 0, -1);
|
currentScriptPtr->var16, &procHead, 0, -1);
|
||||||
} else if (currentScriptPtr->var1A == 0x1E) {
|
} else if (currentScriptPtr->var1A == 0x1E) {
|
||||||
changeScriptParamInList(currentScriptPtr->var18,
|
changeScriptParamInList(currentScriptPtr->var18,
|
||||||
currentScriptPtr->var16, &scriptHandle1, 0, -1);
|
currentScriptPtr->var16, &relHead, 0, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -770,47 +749,39 @@ int16 Op_AutoCell(void) {
|
||||||
if (!overlay)
|
if (!overlay)
|
||||||
overlay = currentScriptPtr->overlayNumber;
|
overlay = currentScriptPtr->overlayNumber;
|
||||||
|
|
||||||
pObject =
|
pObject = addCell(&cellHead, overlay, obj, 4, currentActiveBackgroundPlane, currentScriptPtr->overlayNumber, currentScriptPtr->scriptNumber, currentScriptPtr->type);
|
||||||
addCell(overlay, obj, &cellHead, currentScriptPtr->type,
|
|
||||||
currentScriptPtr->scriptNumber, currentScriptPtr->overlayNumber,
|
|
||||||
currentActiveBackgroundPlane, 4);
|
|
||||||
|
|
||||||
if (!pObject)
|
if (!pObject)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
pObject->field_2C = signal;
|
pObject->animSignal = signal;
|
||||||
pObject->field_30 = loop;
|
pObject->animLoop = loop;
|
||||||
pObject->nextAnimDelay = wait;
|
pObject->animWait = wait;
|
||||||
pObject->animStep = animStep;
|
pObject->animStep = animStep;
|
||||||
pObject->field_22 = end;
|
pObject->animEnd = end;
|
||||||
pObject->field_20 = start;
|
pObject->animStart = start;
|
||||||
pObject->field_2A = type;
|
pObject->animType = type;
|
||||||
pObject->field_28 = change;
|
pObject->animChange = change;
|
||||||
|
|
||||||
if (type) {
|
if (type) {
|
||||||
if (currentScriptPtr->type == 20) {
|
if (currentScriptPtr->type == scriptType_PROC) {
|
||||||
changeScriptParamInList(currentScriptPtr->
|
changeScriptParamInList(currentScriptPtr->overlayNumber, currentScriptPtr->scriptNumber, &procHead, 9996, -1);
|
||||||
overlayNumber, currentScriptPtr->scriptNumber,
|
} else if (currentScriptPtr->type == scriptType_REL) {
|
||||||
&scriptHandle2, 9996, -1);
|
changeScriptParamInList(currentScriptPtr->overlayNumber, currentScriptPtr->scriptNumber, &relHead, 9996, -1);
|
||||||
} else if (currentScriptPtr->type == 30) {
|
|
||||||
changeScriptParamInList(currentScriptPtr->
|
|
||||||
overlayNumber, currentScriptPtr->scriptNumber,
|
|
||||||
&scriptHandle1, 9996, -1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (change == 5) {
|
if (change == 5) {
|
||||||
Op_InitializeStateSub(pObject->overlay, pObject->idx, start);
|
objInit(pObject->overlay, pObject->idx, start);
|
||||||
} else {
|
} else {
|
||||||
setObjectPosition(pObject->overlay, pObject->idx,
|
setObjectPosition(pObject->overlay, pObject->idx, pObject->animChange, start);
|
||||||
pObject->field_28, start);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wait < 0) {
|
if (wait < 0) {
|
||||||
objectParamsQuery params;
|
objectParamsQuery params;
|
||||||
|
|
||||||
getMultipleObjectParam(overlay, obj, ¶ms);
|
getMultipleObjectParam(overlay, obj, ¶ms);
|
||||||
pObject->currentAnimDelay = params.var6 - 1;
|
pObject->animCounter = params.var6 - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -927,7 +898,7 @@ void removeBackgroundIncrust(int overlay, int idx,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int16 Op_removeBackgroundIncrust(void) {
|
int16 Op_RemoveBackgroundIncrust(void) {
|
||||||
int idx = popVar();
|
int idx = popVar();
|
||||||
int overlay = popVar();
|
int overlay = popVar();
|
||||||
|
|
||||||
|
@ -1178,11 +1149,11 @@ int16 Op_AddAnimation(void) {
|
||||||
si->stepX = stepX;
|
si->stepX = stepX;
|
||||||
si->stepY = stepY;
|
si->stepY = stepY;
|
||||||
|
|
||||||
int newFrame = ABS(actorTable1[direction].data[0]) - 1;
|
int newFrame = ABS(raoul_end[direction][0]) - 1;
|
||||||
|
|
||||||
int zoom = computeZoom(params.Y);
|
int zoom = computeZoom(params.Y);
|
||||||
|
|
||||||
if (actorTable1[direction].data[0] < 0) {
|
if (raoul_end[direction][0] < 0) {
|
||||||
zoom = -zoom;
|
zoom = -zoom;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1332,47 +1303,19 @@ int16 Op_6C(void) {
|
||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
void configureAllObjects(int overlayIdx, cellStruct * pObject, int _var4,
|
|
||||||
int _var0, int _var1, int _var2, int _var3) {
|
|
||||||
while (pObject) {
|
|
||||||
if ((pObject->overlay == overlayIdx) || (overlayIdx == -1)) {
|
|
||||||
if ((pObject->idx == _var4) || (_var4 == -1)) {
|
|
||||||
if ((pObject->type == _var3) || (_var3 == -1)) {
|
|
||||||
if ((pObject->backgroundPlane == _var2) || (_var2 == -1)) {
|
|
||||||
if ((pObject->freeze == _var1) || (_var1 == -1)) {
|
|
||||||
pObject->freeze = _var0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pObject = pObject->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int16 Op_FreezeCell(void) {
|
int16 Op_FreezeCell(void) {
|
||||||
/*
|
int newFreezz = popVar();
|
||||||
* int var0;
|
int oldFreeze = popVar();
|
||||||
* int var1;
|
int backgroundPlante = popVar();
|
||||||
* int var2;
|
int objType = popVar();
|
||||||
* int var3;
|
int objIdx = popVar();
|
||||||
* int var4;
|
int overlayIdx = popVar();
|
||||||
* int var5;
|
|
||||||
*/
|
|
||||||
|
|
||||||
var0 = popVar();
|
if (!overlayIdx) {
|
||||||
var1 = popVar();
|
overlayIdx = currentScriptPtr->overlayNumber;
|
||||||
var2 = popVar();
|
|
||||||
var3 = popVar();
|
|
||||||
var4 = popVar();
|
|
||||||
var5 = popVar();
|
|
||||||
|
|
||||||
if (!var5) {
|
|
||||||
var5 = currentScriptPtr->overlayNumber;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
configureAllObjects(var5, &cellHead, var4, var0, var1, var2, var3);
|
freezeCell(&cellHead, overlayIdx, objIdx, objType, backgroundPlante, oldFreeze, newFreezz);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1509,8 +1452,8 @@ void setupOpcodeTable(void) {
|
||||||
opcodeTablePtr[0x2B] = Op_2B;
|
opcodeTablePtr[0x2B] = Op_2B;
|
||||||
opcodeTablePtr[0x2C] = Op_2C;
|
opcodeTablePtr[0x2C] = Op_2C;
|
||||||
opcodeTablePtr[0x2E] = Op_releaseOverlay;
|
opcodeTablePtr[0x2E] = Op_releaseOverlay;
|
||||||
opcodeTablePtr[0x2F] = Op_2F;
|
opcodeTablePtr[0x2F] = Op_AddBackgroundIncrust;
|
||||||
opcodeTablePtr[0x30] = Op_removeBackgroundIncrust;
|
opcodeTablePtr[0x30] = Op_RemoveBackgroundIncrust;
|
||||||
opcodeTablePtr[0x32] = Op_freeBackgroundInscrustList;
|
opcodeTablePtr[0x32] = Op_freeBackgroundInscrustList;
|
||||||
opcodeTablePtr[0x37] = Op_37;
|
opcodeTablePtr[0x37] = Op_37;
|
||||||
opcodeTablePtr[0x38] = Op_removeBackground;
|
opcodeTablePtr[0x38] = Op_removeBackground;
|
||||||
|
|
|
@ -29,43 +29,55 @@ namespace Cruise {
|
||||||
|
|
||||||
int currentTransparent;
|
int currentTransparent;
|
||||||
|
|
||||||
struct drawVar1Struct {
|
struct autoCellStruct {
|
||||||
struct drawVar1Struct *next;
|
struct autoCellStruct *next;
|
||||||
short int field_2;
|
short int ovlIdx;
|
||||||
short int field_4;
|
short int objIdx;
|
||||||
short int field_6;
|
short int type;
|
||||||
short int field_8;
|
short int newValue;
|
||||||
cellStruct *field_A;
|
cellStruct *pCell;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct drawVar1Struct drawVar1Struct;
|
typedef struct autoCellStruct autoCellStruct;
|
||||||
|
|
||||||
drawVar1Struct drawVar1;
|
autoCellStruct autoCellHead;
|
||||||
|
|
||||||
void mainDraw6(void) {
|
void addAutoCell(int overlayIdx, int idx, int type, int newVal, cellStruct *pObject) {
|
||||||
drawVar1Struct *pCurrent = drawVar1.next;
|
autoCellStruct *pNewEntry;
|
||||||
|
|
||||||
|
pNewEntry = new autoCellStruct;
|
||||||
|
|
||||||
|
pNewEntry->next = autoCellHead.next;
|
||||||
|
autoCellHead.next = pNewEntry;
|
||||||
|
|
||||||
|
pNewEntry->ovlIdx = overlayIdx;
|
||||||
|
pNewEntry->objIdx = idx;
|
||||||
|
pNewEntry->type = type;
|
||||||
|
pNewEntry->newValue = newVal;
|
||||||
|
pNewEntry->pCell = pObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
void freeAutoCell(void) {
|
||||||
|
autoCellStruct *pCurrent = autoCellHead.next;
|
||||||
|
|
||||||
while (pCurrent) {
|
while (pCurrent) {
|
||||||
drawVar1Struct *next = pCurrent->next;
|
autoCellStruct *next = pCurrent->next;
|
||||||
|
|
||||||
if (pCurrent->field_6 == 5) {
|
if (pCurrent->type == 5) {
|
||||||
Op_InitializeStateSub(pCurrent->field_2,
|
objInit(pCurrent->ovlIdx, pCurrent->objIdx, pCurrent->newValue);
|
||||||
pCurrent->field_4, pCurrent->field_8);
|
|
||||||
} else {
|
} else {
|
||||||
setObjectPosition(pCurrent->field_2, pCurrent->field_4,
|
setObjectPosition(pCurrent->ovlIdx, pCurrent->objIdx, pCurrent->type, pCurrent->newValue);
|
||||||
pCurrent->field_6, pCurrent->field_8);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pCurrent->field_A->nextAnimDelay < 0) {
|
if (pCurrent->pCell->animWait < 0) {
|
||||||
objectParamsQuery params;
|
objectParamsQuery params;
|
||||||
|
|
||||||
getMultipleObjectParam(pCurrent->field_2,
|
getMultipleObjectParam(pCurrent->ovlIdx, pCurrent->objIdx, ¶ms);
|
||||||
pCurrent->field_4, ¶ms);
|
|
||||||
|
|
||||||
pCurrent->field_A->currentAnimDelay = params.var6 - 1;
|
pCurrent->pCell->animCounter = params.var6 - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
free(pCurrent);
|
delete pCurrent;
|
||||||
|
|
||||||
pCurrent = next;
|
pCurrent = next;
|
||||||
}
|
}
|
||||||
|
@ -683,22 +695,6 @@ void mainDrawSub4(int objX1, int var_6, cellStruct *currentObjPtr,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void mainDraw5(int overlayIdx, int idx, int field_28, cellStruct *pObject,
|
|
||||||
int newVal) {
|
|
||||||
drawVar1Struct *pNewEntry;
|
|
||||||
|
|
||||||
pNewEntry = (drawVar1Struct *) malloc(sizeof(drawVar1Struct));
|
|
||||||
|
|
||||||
pNewEntry->next = drawVar1.next;
|
|
||||||
drawVar1.next = pNewEntry;
|
|
||||||
|
|
||||||
pNewEntry->field_2 = overlayIdx;
|
|
||||||
pNewEntry->field_4 = idx;
|
|
||||||
pNewEntry->field_6 = field_28;
|
|
||||||
pNewEntry->field_8 = newVal;
|
|
||||||
pNewEntry->field_A = pObject;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
void drawCtp(void) {
|
void drawCtp(void) {
|
||||||
int i;
|
int i;
|
||||||
|
@ -875,7 +871,7 @@ void mainDraw(int16 param) {
|
||||||
(char *)gfxModuleData.pPage10);
|
(char *)gfxModuleData.pPage10);
|
||||||
}
|
}
|
||||||
|
|
||||||
drawVar1.next = NULL;
|
autoCellHead.next = NULL;
|
||||||
|
|
||||||
currentObjPtr = cellHead.next;
|
currentObjPtr = cellHead.next;
|
||||||
|
|
||||||
|
@ -926,8 +922,7 @@ void mainDraw(int16 param) {
|
||||||
objZ2 += objZ1;
|
objZ2 += objZ1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((params.var5 >= 0) && (objZ2 >= 0)
|
if ((params.var5 >= 0) && (objZ2 >= 0) && filesDatabase[objZ2].subData.ptr) {
|
||||||
&& filesDatabase[objZ2].subData.ptr) {
|
|
||||||
if (filesDatabase[objZ2].subData.resourceType == 8) // Poly
|
if (filesDatabase[objZ2].subData.resourceType == 8) // Poly
|
||||||
{
|
{
|
||||||
mainDrawPolygons(objZ2, currentObjPtr, objX2, params.scale, objY2, (char *)gfxModuleData.pPage10, (char *)filesDatabase[objZ2].subData.ptr); // poly
|
mainDrawPolygons(objZ2, currentObjPtr, objX2, params.scale, objY2, (char *)gfxModuleData.pPage10, (char *)filesDatabase[objZ2].subData.ptr); // poly
|
||||||
|
@ -935,88 +930,44 @@ void mainDraw(int16 param) {
|
||||||
{
|
{
|
||||||
} else if (filesDatabase[objZ2].resType == 1) //(num plan == 1)
|
} else if (filesDatabase[objZ2].resType == 1) //(num plan == 1)
|
||||||
{
|
{
|
||||||
} else if (filesDatabase[objZ2].subData.
|
} else if (filesDatabase[objZ2].subData.resourceType == 4) {
|
||||||
resourceType == 4) {
|
|
||||||
objX1 = filesDatabase[objZ2].width; // width
|
objX1 = filesDatabase[objZ2].width; // width
|
||||||
spriteHeight = filesDatabase[objZ2].height; // height
|
spriteHeight = filesDatabase[objZ2].height; // height
|
||||||
|
|
||||||
if (filesDatabase[objZ2].subData.ptr) {
|
if (filesDatabase[objZ2].subData.ptr) {
|
||||||
currentTransparent =
|
currentTransparent = filesDatabase[objZ2].subData.transparency;
|
||||||
filesDatabase[objZ2].
|
|
||||||
subData.transparency;
|
|
||||||
|
|
||||||
mainDrawSub4(objX1,
|
mainDrawSub4(objX1, spriteHeight, currentObjPtr, (char *)filesDatabase[objZ2].subData.ptr, objY2, objX2,(char *)gfxModuleData.pPage10,(char *)filesDatabase[objZ2].subData.ptr);
|
||||||
spriteHeight,
|
|
||||||
currentObjPtr,
|
|
||||||
(char *)
|
|
||||||
filesDatabase[objZ2].
|
|
||||||
subData.ptr, objY2, objX2,
|
|
||||||
(char *)gfxModuleData.
|
|
||||||
pPage10,
|
|
||||||
(char *)
|
|
||||||
filesDatabase[objZ2].
|
|
||||||
subData.ptr);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((currentObjPtr->animStep != 0) && (param == 0)) {
|
if ((currentObjPtr->animStep != 0) && (param == 0)) {
|
||||||
if (currentObjPtr->currentAnimDelay <= 0) {
|
if (currentObjPtr->animCounter <= 0) {
|
||||||
int newVal;
|
int newVal;
|
||||||
bool change = true;
|
bool change = true;
|
||||||
|
|
||||||
newVal =
|
newVal = getValueFromObjectQuerry(¶ms, currentObjPtr->animChange) + currentObjPtr->animStep;
|
||||||
getValueFromObjectQuerry(¶ms,
|
|
||||||
currentObjPtr->field_28) +
|
|
||||||
currentObjPtr->animStep;
|
|
||||||
|
|
||||||
if (currentObjPtr->animStep > 0) {
|
if (currentObjPtr->animStep > 0) {
|
||||||
if (newVal >
|
if (newVal > currentObjPtr->animEnd) {
|
||||||
currentObjPtr->field_22) {
|
if (currentObjPtr->animLoop) {
|
||||||
if (currentObjPtr->
|
newVal = currentObjPtr->animStart;
|
||||||
field_30) {
|
currentObjPtr->animLoop--;
|
||||||
newVal =
|
|
||||||
currentObjPtr->
|
|
||||||
field_20;
|
|
||||||
currentObjPtr->
|
|
||||||
field_30--;
|
|
||||||
} else {
|
} else {
|
||||||
int16 data2;
|
int16 data2;
|
||||||
data2 =
|
data2 = currentObjPtr->animStart;
|
||||||
currentObjPtr->
|
|
||||||
field_20;
|
|
||||||
|
|
||||||
change = false;
|
change = false;
|
||||||
currentObjPtr->
|
currentObjPtr->animStep = 0;
|
||||||
animStep =
|
|
||||||
0;
|
|
||||||
|
|
||||||
if (currentObjPtr->field_2A) // should we resume the script ?
|
if (currentObjPtr->animType) // should we resume the script ?
|
||||||
{
|
{
|
||||||
if (currentObjPtr->field_1A == 20) {
|
if (currentObjPtr->parentType == 20) {
|
||||||
changeScriptParamInList
|
changeScriptParamInList(currentObjPtr->parentOverlay, currentObjPtr->parent, &procHead, 0, -1);
|
||||||
(currentObjPtr->
|
}
|
||||||
field_18,
|
else if(currentObjPtr->parentType == 30) {
|
||||||
currentObjPtr->
|
changeScriptParamInList(currentObjPtr->parentOverlay, currentObjPtr->parent, &relHead, 0, -1);
|
||||||
field_16,
|
|
||||||
&scriptHandle2,
|
|
||||||
0,
|
|
||||||
-1);
|
|
||||||
} else
|
|
||||||
if
|
|
||||||
(currentObjPtr->
|
|
||||||
field_1A
|
|
||||||
==
|
|
||||||
30)
|
|
||||||
{
|
|
||||||
changeScriptParamInList
|
|
||||||
(currentObjPtr->
|
|
||||||
field_18,
|
|
||||||
currentObjPtr->
|
|
||||||
field_16,
|
|
||||||
&scriptHandle1,
|
|
||||||
0,
|
|
||||||
-1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
newVal = data2;
|
newVal = data2;
|
||||||
|
@ -1029,50 +980,25 @@ void mainDraw(int16 param) {
|
||||||
* } */
|
* } */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentObjPtr->nextAnimDelay >= 0) {
|
if (currentObjPtr->animWait >= 0) {
|
||||||
currentObjPtr->
|
currentObjPtr->animCounter = currentObjPtr->animWait;
|
||||||
currentAnimDelay =
|
|
||||||
currentObjPtr->
|
|
||||||
nextAnimDelay;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((currentObjPtr->field_2C >= 0)
|
if ((currentObjPtr->animSignal >= 0) && (currentObjPtr->animSignal == newVal) && (currentObjPtr->animType != 0)) {
|
||||||
&& (currentObjPtr->field_2C ==
|
if (currentObjPtr->parentType == 20) {
|
||||||
newVal)
|
changeScriptParamInList(currentObjPtr->parentOverlay, currentObjPtr->parent, &procHead, 0, -1);
|
||||||
&& (currentObjPtr->field_2A !=
|
} else if (currentObjPtr->parentType == 30) {
|
||||||
0)) {
|
changeScriptParamInList(currentObjPtr->parentOverlay, currentObjPtr->parent, &relHead, 0, -1);
|
||||||
if (currentObjPtr->field_1A ==
|
|
||||||
20) {
|
|
||||||
changeScriptParamInList
|
|
||||||
(currentObjPtr->
|
|
||||||
field_18,
|
|
||||||
currentObjPtr->
|
|
||||||
field_16,
|
|
||||||
&scriptHandle2, 0,
|
|
||||||
-1);
|
|
||||||
} else if (currentObjPtr->
|
|
||||||
field_1A == 30) {
|
|
||||||
changeScriptParamInList
|
|
||||||
(currentObjPtr->
|
|
||||||
field_18,
|
|
||||||
currentObjPtr->
|
|
||||||
field_16,
|
|
||||||
&scriptHandle1, 0,
|
|
||||||
-1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
currentObjPtr->field_2A = 0;
|
currentObjPtr->animType = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (change) {
|
if (change) {
|
||||||
mainDraw5(currentObjPtr->
|
addAutoCell(currentObjPtr->overlay, currentObjPtr->idx, currentObjPtr->animChange, newVal, currentObjPtr);
|
||||||
overlay,
|
|
||||||
currentObjPtr->idx,
|
|
||||||
currentObjPtr->field_28,
|
|
||||||
currentObjPtr, newVal);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
currentObjPtr->currentAnimDelay--;
|
currentObjPtr->animCounter--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1082,7 +1008,7 @@ void mainDraw(int16 param) {
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------------------------------------//
|
//----------------------------------------------------------------------------------------------------------------//
|
||||||
|
|
||||||
mainDraw6();
|
freeAutoCell();
|
||||||
var20 = 0;
|
var20 = 0;
|
||||||
|
|
||||||
//-------------------------------------------------- DRAW OBJECTS TYPE 5 (MSG)-----------------------------------------//
|
//-------------------------------------------------- DRAW OBJECTS TYPE 5 (MSG)-----------------------------------------//
|
||||||
|
@ -1091,10 +1017,7 @@ void mainDraw(int16 param) {
|
||||||
|
|
||||||
while (currentObjPtr) {
|
while (currentObjPtr) {
|
||||||
if (currentObjPtr->type == 5 && currentObjPtr->freeze == 0) {
|
if (currentObjPtr->type == 5 && currentObjPtr->freeze == 0) {
|
||||||
mainSprite(currentObjPtr->field_A,
|
mainSprite(currentObjPtr->x, currentObjPtr->field_C, currentObjPtr->gfxPtr, gfxModuleData.pPage10, currentObjPtr->color, currentObjPtr->spriteIdx);
|
||||||
currentObjPtr->field_C, currentObjPtr->gfxPtr,
|
|
||||||
gfxModuleData.pPage10, currentObjPtr->color,
|
|
||||||
currentObjPtr->spriteIdx);
|
|
||||||
var20 = 1;
|
var20 = 1;
|
||||||
}
|
}
|
||||||
currentObjPtr = currentObjPtr->next;
|
currentObjPtr = currentObjPtr->next;
|
||||||
|
|
|
@ -73,14 +73,14 @@ int16 getMultipleObjectParam(int16 overlayIdx, int16 objectIdx,
|
||||||
|
|
||||||
ovlData = overlayTable[overlayIdx].ovlData;
|
ovlData = overlayTable[overlayIdx].ovlData;
|
||||||
|
|
||||||
switch (ptr->var1) {
|
switch (ptr->type) {
|
||||||
case 0:
|
case 0:
|
||||||
{
|
{
|
||||||
ptr2 = &ovlData->objData2SourceTable[ptr->var5];
|
ptr2 = &ovlData->objData2SourceTable[ptr->var5];
|
||||||
|
|
||||||
var_14 = globalVars[*(int16 *) (&overlayTable[overlayIdx].field_14 + ptr->var6)];
|
var_14 = globalVars[*(int16 *) (&overlayTable[overlayIdx].state + ptr->stateTableIdx)];
|
||||||
|
|
||||||
var_A = ptr2->var5;
|
var_A = ptr2->state;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -88,25 +88,25 @@ int16 getMultipleObjectParam(int16 overlayIdx, int16 objectIdx,
|
||||||
{
|
{
|
||||||
ptr2 = &ovlData->objData2WorkTable[ptr->var4];
|
ptr2 = &ovlData->objData2WorkTable[ptr->var4];
|
||||||
|
|
||||||
var_A = var_14 = ptr2->var5;
|
var_A = var_14 = ptr2->state;
|
||||||
size = var_A + ptr->var5;
|
size = var_A + ptr->var5;
|
||||||
|
|
||||||
if (ptr->var5 + var_14 <= ovlData->size8) {
|
if (ptr->var5 + var_14 <= ovlData->size8) {
|
||||||
var_A = ovlData->objData2SourceTable[ptr->var5 + var_14].var5;
|
var_A = ovlData->objData2SourceTable[ptr->var5 + var_14].state;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
printf("unsupported case %d in getMultipleObjectParam\n", ptr->var1);
|
printf("unsupported case %d in getMultipleObjectParam\n", ptr->type);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
returnParam->X = ptr2->X;
|
returnParam->X = ptr2->X;
|
||||||
returnParam->Y = ptr2->Y;
|
returnParam->Y = ptr2->Y;
|
||||||
returnParam->baseFileIdx = ptr2->baseFileIdx;
|
returnParam->baseFileIdx = ptr2->Z;
|
||||||
returnParam->fileIdx = ptr2->var3;
|
returnParam->fileIdx = ptr2->frame;
|
||||||
returnParam->scale = ptr2->scale;
|
returnParam->scale = ptr2->scale;
|
||||||
returnParam->var5 = var_14;
|
returnParam->var5 = var_14;
|
||||||
returnParam->var6 = var_A;
|
returnParam->var6 = var_A;
|
||||||
|
@ -115,11 +115,11 @@ int16 getMultipleObjectParam(int16 overlayIdx, int16 objectIdx,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setObjectPosition(int16 param1, int16 objIdx, int16 param3, int16 param4) {
|
void setObjectPosition(int16 ovlIdx, int16 objIdx, int16 param3, int16 param4) {
|
||||||
objDataStruct *ptr;
|
objDataStruct *ptr;
|
||||||
objectParams *ptr2;
|
objectParams *ptr2;
|
||||||
|
|
||||||
ptr = getObjectDataFromOverlay(param1, objIdx);
|
ptr = getObjectDataFromOverlay(ovlIdx, objIdx);
|
||||||
|
|
||||||
if (!ptr) {
|
if (!ptr) {
|
||||||
return;
|
return;
|
||||||
|
@ -127,10 +127,10 @@ void setObjectPosition(int16 param1, int16 objIdx, int16 param3, int16 param4) {
|
||||||
}
|
}
|
||||||
//overlayTable[param1].ovlData
|
//overlayTable[param1].ovlData
|
||||||
|
|
||||||
switch (ptr->var1) {
|
switch (ptr->type) {
|
||||||
case 1:
|
case 1:
|
||||||
{
|
{
|
||||||
ptr2 = &overlayTable[param1].ovlData->objData2WorkTable[ptr->var4];
|
ptr2 = &overlayTable[ovlIdx].ovlData->objData2WorkTable[ptr->var4];
|
||||||
|
|
||||||
switch (param3) {
|
switch (param3) {
|
||||||
case 0: // x
|
case 0: // x
|
||||||
|
@ -143,14 +143,15 @@ void setObjectPosition(int16 param1, int16 objIdx, int16 param3, int16 param4) {
|
||||||
ptr2->Y = param4;
|
ptr2->Y = param4;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 2: // base file
|
case 2: // z
|
||||||
{
|
{
|
||||||
ptr2->baseFileIdx = param4;
|
ptr2->Z = param4;
|
||||||
|
sortCells(ovlIdx, objIdx, &cellHead);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 3:
|
case 3:
|
||||||
{
|
{
|
||||||
ptr2->var3 = param4;
|
ptr2->frame = param4;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 4: // scale
|
case 4: // scale
|
||||||
|
@ -160,7 +161,7 @@ void setObjectPosition(int16 param1, int16 objIdx, int16 param3, int16 param4) {
|
||||||
}
|
}
|
||||||
case 5: // box colision
|
case 5: // box colision
|
||||||
{
|
{
|
||||||
ptr2->var5 = param4;
|
ptr2->state = param4;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -178,94 +179,7 @@ void setObjectPosition(int16 param1, int16 objIdx, int16 param3, int16 param4) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Op_InitializeStateSub1(int16 param1, int16 param2, cellStruct *objPtr) {
|
int16 objInit(int ovlIdx, int objIdx, int newState) {
|
||||||
int16 var;
|
|
||||||
cellStruct *var8_;
|
|
||||||
cellStruct *var40;
|
|
||||||
cellStruct *var3E;
|
|
||||||
cellStruct *currentObjPtrPrevious;
|
|
||||||
cellStruct *currentObjPtr2;
|
|
||||||
cellStruct *match;
|
|
||||||
|
|
||||||
getSingleObjectParam(param1, param2, 2, &var);
|
|
||||||
|
|
||||||
currentObjPtrPrevious = objPtr;
|
|
||||||
currentObjPtr2 = objPtr->next;
|
|
||||||
|
|
||||||
match = NULL;
|
|
||||||
var40 = NULL;
|
|
||||||
var3E = NULL;
|
|
||||||
var8_ = objPtr;
|
|
||||||
|
|
||||||
while (currentObjPtr2) {
|
|
||||||
if ((currentObjPtr2->overlay == param1) && (currentObjPtr2->idx == param2)) {// found
|
|
||||||
currentObjPtrPrevious->next = currentObjPtr2->next;
|
|
||||||
|
|
||||||
if (currentObjPtr2->next) {
|
|
||||||
currentObjPtr2->next->prev =
|
|
||||||
currentObjPtr2->prev;
|
|
||||||
} else {
|
|
||||||
objPtr->prev = currentObjPtr2->prev;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (var40) {
|
|
||||||
var40->prev = currentObjPtr2;
|
|
||||||
} else {
|
|
||||||
var3E = currentObjPtr2;
|
|
||||||
}
|
|
||||||
|
|
||||||
currentObjPtr2->prev = NULL;
|
|
||||||
|
|
||||||
currentObjPtr2->next = var40;
|
|
||||||
|
|
||||||
var40 = currentObjPtr2;
|
|
||||||
|
|
||||||
if (match == NULL) {
|
|
||||||
match = currentObjPtr2;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (currentObjPtr2->type == 5) {
|
|
||||||
var2 = 32000;
|
|
||||||
} else {
|
|
||||||
int16 varC;
|
|
||||||
|
|
||||||
getSingleObjectParam(currentObjPtr2->overlay,
|
|
||||||
currentObjPtr2->idx, 2, &varC);
|
|
||||||
|
|
||||||
var2 = varC;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (var > var2) {
|
|
||||||
var8_ = currentObjPtr2;
|
|
||||||
}
|
|
||||||
|
|
||||||
currentObjPtrPrevious = currentObjPtrPrevious->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
currentObjPtr2 = currentObjPtr2->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (match) {
|
|
||||||
cellStruct *temp;
|
|
||||||
|
|
||||||
temp = var8_->next;
|
|
||||||
|
|
||||||
var8_->next = var40;
|
|
||||||
match->next = temp;
|
|
||||||
|
|
||||||
if (objPtr != var8_) {
|
|
||||||
var40->prev = var8_;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!temp) {
|
|
||||||
temp = match;
|
|
||||||
}
|
|
||||||
|
|
||||||
temp->prev = match;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int16 Op_InitializeStateSub(int ovlIdx, int objIdx, int param2) {
|
|
||||||
objDataStruct *ptr;
|
objDataStruct *ptr;
|
||||||
// uint16 param;
|
// uint16 param;
|
||||||
ovlDataStruct *ovlData;
|
ovlDataStruct *ovlData;
|
||||||
|
@ -277,39 +191,38 @@ int16 Op_InitializeStateSub(int ovlIdx, int objIdx, int param2) {
|
||||||
|
|
||||||
ovlData = overlayTable[ovlIdx].ovlData;
|
ovlData = overlayTable[ovlIdx].ovlData;
|
||||||
|
|
||||||
switch (ptr->var1) {
|
switch (ptr->type) {
|
||||||
case 0:
|
case THEME:
|
||||||
|
case MULTIPLE:
|
||||||
{
|
{
|
||||||
globalVars[overlayTable[ovlIdx].field_14 + ptr->var6] =
|
globalVars[overlayTable[ovlIdx].state + ptr->stateTableIdx] = newState;
|
||||||
param2;
|
sortCells(ovlIdx, objIdx, &cellHead);
|
||||||
Op_InitializeStateSub1(ovlIdx, param2, &cellHead);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 1:
|
case UNIQUE:
|
||||||
|
break;
|
||||||
|
case VARIABLE:
|
||||||
{
|
{
|
||||||
objectParams *destEntry;
|
objectParams *destEntry;
|
||||||
objectParams *sourceEntry;
|
objectParams *sourceEntry;
|
||||||
|
|
||||||
if (ptr->var5 + param2 > ovlData->size8) {
|
if (ptr->var5 + newState > ovlData->size8) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
destEntry = &ovlData->objData2WorkTable[ptr->var4];
|
destEntry = &ovlData->objData2WorkTable[ptr->var4];
|
||||||
sourceEntry =
|
sourceEntry = &ovlData->objData2SourceTable[ptr->var5 + newState];
|
||||||
&ovlData->objData2SourceTable[ptr->var5 + param2];
|
|
||||||
|
|
||||||
memcpy(destEntry, sourceEntry, sizeof(objectParams));
|
memcpy(destEntry, sourceEntry, sizeof(objectParams));
|
||||||
|
|
||||||
destEntry->var5 = param2;
|
destEntry->state = newState;
|
||||||
|
|
||||||
Op_InitializeStateSub1(ovlIdx, param2, &cellHead);
|
sortCells(ovlIdx, objIdx, &cellHead);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
printf
|
printf("Unsupported param = %d in objInit\n", ptr->type);
|
||||||
("Unsupported param = %d in Op_InitializeStateSub\n",
|
|
||||||
ptr->var1);
|
|
||||||
// exit(1);
|
// exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -317,8 +230,7 @@ int16 Op_InitializeStateSub(int ovlIdx, int objIdx, int param2) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int16 getSingleObjectParam(int16 overlayIdx, int16 param2, int16 param3,
|
int16 getSingleObjectParam(int16 overlayIdx, int16 param2, int16 param3, int16 *returnParam) {
|
||||||
int16 *returnParam) {
|
|
||||||
int var_A = 0;
|
int var_A = 0;
|
||||||
//char* ptr3 = NULL;
|
//char* ptr3 = NULL;
|
||||||
objDataStruct *ptr;
|
objDataStruct *ptr;
|
||||||
|
@ -332,11 +244,11 @@ int16 getSingleObjectParam(int16 overlayIdx, int16 param2, int16 param3,
|
||||||
|
|
||||||
ovlData = overlayTable[overlayIdx].ovlData;
|
ovlData = overlayTable[overlayIdx].ovlData;
|
||||||
|
|
||||||
switch (ptr->var1) {
|
switch (ptr->type) {
|
||||||
case 0:
|
case 0:
|
||||||
case 3:
|
case 3:
|
||||||
{
|
{
|
||||||
var_A = globalVars[ptr->var6];
|
var_A = globalVars[ptr->stateTableIdx];
|
||||||
|
|
||||||
ptr2 = &ovlData->objData2SourceTable[ptr->var5];
|
ptr2 = &ovlData->objData2SourceTable[ptr->var5];
|
||||||
break;
|
break;
|
||||||
|
@ -345,13 +257,12 @@ int16 getSingleObjectParam(int16 overlayIdx, int16 param2, int16 param3,
|
||||||
{
|
{
|
||||||
ptr2 = &ovlData->objData2WorkTable[ptr->var4];
|
ptr2 = &ovlData->objData2WorkTable[ptr->var4];
|
||||||
|
|
||||||
var_A = ptr2->var5;
|
var_A = ptr2->state;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
printf("Unsupported case %d in getSingleObjectParam\n",
|
printf("Unsupported case %d in getSingleObjectParam\n",ptr->type);
|
||||||
ptr->var1);
|
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -369,12 +280,12 @@ int16 getSingleObjectParam(int16 overlayIdx, int16 param2, int16 param3,
|
||||||
}
|
}
|
||||||
case 2:
|
case 2:
|
||||||
{
|
{
|
||||||
*returnParam = ptr2->baseFileIdx;
|
*returnParam = ptr2->Z;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 3:
|
case 3:
|
||||||
{
|
{
|
||||||
*returnParam = ptr2->var3;
|
*returnParam = ptr2->frame;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 4:
|
case 4:
|
||||||
|
@ -389,9 +300,7 @@ int16 getSingleObjectParam(int16 overlayIdx, int16 param2, int16 param3,
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
printf
|
printf("Unsupported case %d in getSingleObjectParam case 1\n", param3);
|
||||||
("Unsupported case %d in getSingleObjectParam case 1\n",
|
|
||||||
param3);
|
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,10 +53,8 @@ struct objectParamsQuery {
|
||||||
typedef struct objectParamsQuery objectParamsQuery;
|
typedef struct objectParamsQuery objectParamsQuery;
|
||||||
|
|
||||||
objDataStruct *getObjectDataFromOverlay(int ovlIdx, int objIdx);
|
objDataStruct *getObjectDataFromOverlay(int ovlIdx, int objIdx);
|
||||||
int16 getSingleObjectParam(int16 overlayIdx, int16 param2, int16 param3,
|
int16 getSingleObjectParam(int16 overlayIdx, int16 param2, int16 param3, int16 * returnParam);
|
||||||
int16 * returnParam);
|
int16 getMultipleObjectParam(int16 overlayIdx, int16 objectIdx, objectParamsQuery * returnParam);
|
||||||
int16 getMultipleObjectParam(int16 overlayIdx, int16 objectIdx,
|
|
||||||
objectParamsQuery * returnParam);
|
|
||||||
|
|
||||||
} // End of namespace Cruise
|
} // End of namespace Cruise
|
||||||
|
|
||||||
|
|
|
@ -420,9 +420,9 @@ int loadOverlay(uint8 *scriptName) {
|
||||||
scriptPtr += 2;
|
scriptPtr += 2;
|
||||||
flipShort(&ovlData->objDataTable[i].var0);
|
flipShort(&ovlData->objDataTable[i].var0);
|
||||||
|
|
||||||
ovlData->objDataTable[i].var1 = *(int16 *) scriptPtr;
|
ovlData->objDataTable[i].type = *(int16 *) scriptPtr;
|
||||||
scriptPtr += 2;
|
scriptPtr += 2;
|
||||||
flipShort(&ovlData->objDataTable[i].var1);
|
flipShort(&ovlData->objDataTable[i].type);
|
||||||
|
|
||||||
ovlData->objDataTable[i].var2 = *(int16 *) scriptPtr;
|
ovlData->objDataTable[i].var2 = *(int16 *) scriptPtr;
|
||||||
scriptPtr += 2;
|
scriptPtr += 2;
|
||||||
|
@ -440,16 +440,16 @@ int loadOverlay(uint8 *scriptName) {
|
||||||
scriptPtr += 2;
|
scriptPtr += 2;
|
||||||
flipShort(&ovlData->objDataTable[i].var5);
|
flipShort(&ovlData->objDataTable[i].var5);
|
||||||
|
|
||||||
ovlData->objDataTable[i].var6 = *(int16 *) scriptPtr;
|
ovlData->objDataTable[i].stateTableIdx = *(int16 *) scriptPtr;
|
||||||
scriptPtr += 2;
|
scriptPtr += 2;
|
||||||
flipShort(&ovlData->objDataTable[i].var6);
|
flipShort(&ovlData->objDataTable[i].stateTableIdx);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scriptNotLoadedBefore) {
|
if (scriptNotLoadedBefore) {
|
||||||
//int var1;
|
//int var1;
|
||||||
//int var2;
|
//int var2;
|
||||||
|
|
||||||
overlayTable[scriptIdx].field_14 = (char)setup1;
|
overlayTable[scriptIdx].state = (char)setup1;
|
||||||
|
|
||||||
var1 = loadScriptSub1(scriptIdx, 3);
|
var1 = loadScriptSub1(scriptIdx, 3);
|
||||||
var2 = loadScriptSub1(scriptIdx, 0);
|
var2 = loadScriptSub1(scriptIdx, 0);
|
||||||
|
@ -733,11 +733,11 @@ int releaseOverlay(const char *name) {
|
||||||
overlayTable[overlayIdx].var16 = NULL;
|
overlayTable[overlayIdx].var16 = NULL;
|
||||||
} */
|
} */
|
||||||
|
|
||||||
removeScript(overlayIdx, -1, &scriptHandle2);
|
removeScript(overlayIdx, -1, &procHead);
|
||||||
removeScript(overlayIdx, -1, &scriptHandle2);
|
removeScript(overlayIdx, -1, &procHead);
|
||||||
|
|
||||||
removeScript(overlayIdx, -1, &scriptHandle1);
|
removeScript(overlayIdx, -1, &relHead);
|
||||||
removeScript(overlayIdx, -1, &scriptHandle1);
|
removeScript(overlayIdx, -1, &relHead);
|
||||||
|
|
||||||
printf("releaseOverlay: finish !\n");
|
printf("releaseOverlay: finish !\n");
|
||||||
|
|
||||||
|
|
|
@ -106,14 +106,19 @@ struct importDataStruct {
|
||||||
|
|
||||||
typedef struct importDataStruct importDataStruct;
|
typedef struct importDataStruct importDataStruct;
|
||||||
|
|
||||||
|
#define MULTIPLE 0
|
||||||
|
#define VARIABLE 1
|
||||||
|
#define UNIQUE 2
|
||||||
|
#define THEME 3
|
||||||
|
|
||||||
struct objDataStruct {
|
struct objDataStruct {
|
||||||
int16 var0;
|
int16 var0;
|
||||||
int16 var1;
|
int16 type;
|
||||||
int16 var2;
|
int16 var2;
|
||||||
int16 var3;
|
int16 var3;
|
||||||
int16 var4;
|
int16 var4;
|
||||||
int16 var5;
|
int16 var5;
|
||||||
int16 var6;
|
int16 stateTableIdx;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct objDataStruct objDataStruct;
|
typedef struct objDataStruct objDataStruct;
|
||||||
|
@ -121,10 +126,10 @@ typedef struct objDataStruct objDataStruct;
|
||||||
struct objectParams {
|
struct objectParams {
|
||||||
int16 X;
|
int16 X;
|
||||||
int16 Y;
|
int16 Y;
|
||||||
int16 baseFileIdx;
|
int16 Z;
|
||||||
int16 var3;
|
int16 frame;
|
||||||
int16 scale;
|
int16 scale;
|
||||||
int16 var5;
|
int16 state;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct objectParams objectParams;
|
typedef struct objectParams objectParams;
|
||||||
|
@ -169,7 +174,7 @@ struct overlayStruct {
|
||||||
char overlayName[14];
|
char overlayName[14];
|
||||||
ovlDataStruct *ovlData;
|
ovlDataStruct *ovlData;
|
||||||
short int alreadyLoaded;
|
short int alreadyLoaded;
|
||||||
char field_14;
|
char state;
|
||||||
char field_15;
|
char field_15;
|
||||||
char field_16;
|
char field_16;
|
||||||
char field_17;
|
char field_17;
|
||||||
|
|
|
@ -264,8 +264,8 @@ int loadSavegameData(int saveGameIdx) {
|
||||||
fread(mediumVar, 0x880, 1, fileHandle);
|
fread(mediumVar, 0x880, 1, fileHandle);
|
||||||
|
|
||||||
loadSavegameDataSub1(fileHandle);
|
loadSavegameDataSub1(fileHandle);
|
||||||
loadScriptsFromSave(fileHandle, &scriptHandle2);
|
loadScriptsFromSave(fileHandle, &procHead);
|
||||||
loadScriptsFromSave(fileHandle, &scriptHandle1);
|
loadScriptsFromSave(fileHandle, &relHead);
|
||||||
|
|
||||||
loadSavegameDataSub2(fileHandle);
|
loadSavegameDataSub2(fileHandle);
|
||||||
loadBackgroundIncrustFromSave(fileHandle);
|
loadBackgroundIncrustFromSave(fileHandle);
|
||||||
|
|
|
@ -26,8 +26,8 @@
|
||||||
|
|
||||||
namespace Cruise {
|
namespace Cruise {
|
||||||
|
|
||||||
scriptInstanceStruct scriptHandle1;
|
scriptInstanceStruct relHead;
|
||||||
scriptInstanceStruct scriptHandle2;
|
scriptInstanceStruct procHead;
|
||||||
|
|
||||||
scriptInstanceStruct *currentScriptPtr;
|
scriptInstanceStruct *currentScriptPtr;
|
||||||
|
|
||||||
|
|
|
@ -28,10 +28,10 @@
|
||||||
namespace Cruise {
|
namespace Cruise {
|
||||||
|
|
||||||
enum scriptTypeEnum {
|
enum scriptTypeEnum {
|
||||||
scriptType_Minus20 = -20,
|
scriptType_MinusPROC = -20,
|
||||||
scriptType_Minus30 = -30,
|
scriptType_Minus30 = -30,
|
||||||
scriptType_20 = 20,
|
scriptType_PROC = 20,
|
||||||
scriptType_30 = 30
|
scriptType_REL = 30
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef enum scriptTypeEnum scriptTypeEnum;
|
typedef enum scriptTypeEnum scriptTypeEnum;
|
||||||
|
@ -55,8 +55,8 @@ struct scriptInstanceStruct {
|
||||||
|
|
||||||
typedef struct scriptInstanceStruct scriptInstanceStruct;
|
typedef struct scriptInstanceStruct scriptInstanceStruct;
|
||||||
|
|
||||||
extern scriptInstanceStruct scriptHandle1;
|
extern scriptInstanceStruct relHead;
|
||||||
extern scriptInstanceStruct scriptHandle2;
|
extern scriptInstanceStruct procHead;
|
||||||
extern scriptInstanceStruct *currentScriptPtr;
|
extern scriptInstanceStruct *currentScriptPtr;
|
||||||
|
|
||||||
void setupFuncArray(void);
|
void setupFuncArray(void);
|
||||||
|
|
|
@ -39,68 +39,6 @@ int16 readB16(void *ptr) {
|
||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
void freeObject(cellStruct *objPtr) {
|
|
||||||
if (objPtr) {
|
|
||||||
/* if(objPtr->next)
|
|
||||||
* free(objPtr->next); */
|
|
||||||
|
|
||||||
//free(objPtr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void removeObjectFromList(int ovlNumber, int objectIdx, cellStruct *objPtr,
|
|
||||||
int backgroundPlane, int arg) {
|
|
||||||
cellStruct *currentObj = objPtr->next;
|
|
||||||
cellStruct *previous;
|
|
||||||
|
|
||||||
while (currentObj) {
|
|
||||||
cellStruct *si;
|
|
||||||
|
|
||||||
si = currentObj;
|
|
||||||
|
|
||||||
if ((si->overlay == ovlNumber || ovlNumber == -1) &&
|
|
||||||
(si->idx == objectIdx || objectIdx == -1) &&
|
|
||||||
(si->type == arg || arg == -1) &&
|
|
||||||
(si->backgroundPlane == backgroundPlane
|
|
||||||
|| backgroundPlane == -1)) {
|
|
||||||
si->type = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
currentObj = si->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
previous = objPtr;
|
|
||||||
currentObj = objPtr->next;
|
|
||||||
|
|
||||||
while (currentObj) {
|
|
||||||
cellStruct *si;
|
|
||||||
|
|
||||||
si = currentObj;
|
|
||||||
|
|
||||||
if (si->type == -1) {
|
|
||||||
cellStruct *dx;
|
|
||||||
previous->next = si->next;
|
|
||||||
|
|
||||||
dx = si->next;
|
|
||||||
|
|
||||||
if (!si->next) {
|
|
||||||
dx = objPtr;
|
|
||||||
}
|
|
||||||
|
|
||||||
dx->prev = si->prev;
|
|
||||||
|
|
||||||
freeObject(si);
|
|
||||||
|
|
||||||
free(si);
|
|
||||||
|
|
||||||
currentObj = dx;
|
|
||||||
} else {
|
|
||||||
currentObj = si->next;
|
|
||||||
previous = si;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
char *getText(int textIndex, int overlayIndex) {
|
char *getText(int textIndex, int overlayIndex) {
|
||||||
if (!overlayTable[overlayIndex].ovlData) {
|
if (!overlayTable[overlayIndex].ovlData) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -114,57 +52,4 @@ char *getText(int textIndex, int overlayIndex) {
|
||||||
string;
|
string;
|
||||||
}
|
}
|
||||||
|
|
||||||
void createTextObject(int overlayIdx, int oldVar8, cellStruct *pObject,
|
|
||||||
int scriptNumber, int scriptOverlayNumber, int backgroundPlane,
|
|
||||||
int16 color, int oldVar2, int oldVar4, int oldVar6) {
|
|
||||||
|
|
||||||
char *ax;
|
|
||||||
cellStruct *savePObject = pObject;
|
|
||||||
cellStruct *cx;
|
|
||||||
|
|
||||||
cellStruct *pNewElement;
|
|
||||||
cellStruct *si = pObject->next;
|
|
||||||
cellStruct *var_2;
|
|
||||||
|
|
||||||
while (si) {
|
|
||||||
pObject = si;
|
|
||||||
si = si->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
var_2 = si;
|
|
||||||
|
|
||||||
pNewElement = (cellStruct *) malloc(sizeof(cellStruct));
|
|
||||||
|
|
||||||
pNewElement->next = pObject->next;
|
|
||||||
pObject->next = pNewElement;
|
|
||||||
|
|
||||||
pNewElement->idx = oldVar8;
|
|
||||||
pNewElement->type = 5;
|
|
||||||
pNewElement->backgroundPlane = backgroundPlane;
|
|
||||||
pNewElement->overlay = overlayIdx;
|
|
||||||
pNewElement->field_A = oldVar6;
|
|
||||||
pNewElement->field_C = oldVar4;
|
|
||||||
pNewElement->spriteIdx = oldVar2;
|
|
||||||
pNewElement->color = color;
|
|
||||||
pNewElement->freeze = 0;
|
|
||||||
pNewElement->field_16 = scriptNumber;
|
|
||||||
pNewElement->field_18 = scriptOverlayNumber;
|
|
||||||
pNewElement->gfxPtr = NULL;
|
|
||||||
|
|
||||||
if (var_2) {
|
|
||||||
cx = var_2;
|
|
||||||
} else {
|
|
||||||
cx = savePObject;
|
|
||||||
}
|
|
||||||
|
|
||||||
pNewElement->prev = cx->prev;
|
|
||||||
cx->prev = pNewElement;
|
|
||||||
|
|
||||||
ax = getText(oldVar8, overlayIdx);
|
|
||||||
|
|
||||||
if (ax) {
|
|
||||||
pNewElement->gfxPtr = renderText(oldVar2, (uint8 *) ax);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} // End of namespace Cruise
|
} // End of namespace Cruise
|
||||||
|
|
|
@ -35,13 +35,8 @@ extern uint16 main15;
|
||||||
|
|
||||||
int16 readB16(void *ptr);
|
int16 readB16(void *ptr);
|
||||||
|
|
||||||
void createTextObject(int overlayIdx, int oldVar8, cellStruct * pObject,
|
int16 objInit(int ovlIdx, int param1, int param2);
|
||||||
int scriptNumber, int scriptOverlayNumber, int backgroundPlane,
|
char *getText(int textIndex, int overlayIndex);
|
||||||
int16 color, int oldVar2, int oldVar4, int oldVar6);
|
|
||||||
void removeObjectFromList(int ovlNumber, int objectIdx, cellStruct * objPtr,
|
|
||||||
int backgroundPlane, int arg);
|
|
||||||
int16 Op_InitializeStateSub(int ovlIdx, int param1, int param2);
|
|
||||||
|
|
||||||
} // End of namespace Cruise
|
} // End of namespace Cruise
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue