[Scummvm-cvs-logs] SF.net SVN: scummvm: [29925] scummvm/trunk/engines/cruise

yazoo at users.sourceforge.net yazoo at users.sourceforge.net
Thu Dec 20 19:21:27 CET 2007


Revision: 29925
          http://scummvm.svn.sourceforge.net/scummvm/?rev=29925&view=rev
Author:   yazoo
Date:     2007-12-20 10:21:27 -0800 (Thu, 20 Dec 2007)

Log Message:
-----------
Fix title screen line drawing code

Modified Paths:
--------------
    scummvm/trunk/engines/cruise/decompiler.cpp
    scummvm/trunk/engines/cruise/function.cpp
    scummvm/trunk/engines/cruise/perso.cpp
    scummvm/trunk/engines/cruise/perso.h
    scummvm/trunk/engines/cruise/script.cpp

Modified: scummvm/trunk/engines/cruise/decompiler.cpp
===================================================================
--- scummvm/trunk/engines/cruise/decompiler.cpp	2007-12-20 17:04:15 UTC (rev 29924)
+++ scummvm/trunk/engines/cruise/decompiler.cpp	2007-12-20 18:21:27 UTC (rev 29925)
@@ -946,7 +946,7 @@
 		}
 	case 0x1E:
 		{
-			sprintf(tempbuffer, "_op_1E(%s,%s,%s,%s,%s,%s)",
+			sprintf(tempbuffer, "_Op_TrackAnim(%s,%s,%s,%s,%s,%s)",
 			    popDecomp(), popDecomp(), popDecomp(), popDecomp(),
 			    popDecomp(), popDecomp());
 			pushDecomp(tempbuffer);

Modified: scummvm/trunk/engines/cruise/function.cpp
===================================================================
--- scummvm/trunk/engines/cruise/function.cpp	2007-12-20 17:04:15 UTC (rev 29924)
+++ scummvm/trunk/engines/cruise/function.cpp	2007-12-20 18:21:27 UTC (rev 29925)
@@ -32,8 +32,6 @@
 
 //#define FUNCTION_DEBUG
 
-opcodeFunction opcodeTablePtr[256];
-
 int16 Op_LoadOverlay(void) {
 	char *pOverlayName;
 	char overlayName[38] = "";
@@ -59,7 +57,7 @@
 	return(overlayLoadResult);
 }
 
-int16 Op_strcpy(void) {
+int16 Op_Strcpy(void) {
 	char *ptr1 = (char *)popPtr();
 	char *ptr2 = (char *)popPtr();
 
@@ -77,7 +75,7 @@
 	return (0);
 }
 
-int16 Op_startScript(void) {
+int16 Op_Exec(void) {
 	int scriptIdx;
 	int ovlIdx;
 	uint8 *ptr;
@@ -151,7 +149,7 @@
 	return (0);
 }
 
-int16 Op_37(void) {
+int16 Op_Narrator(void) {
 	int pop1 = popVar();
 	int pop2 = popVar();
 
@@ -186,7 +184,7 @@
 	return (mouseY);
 }
 
-int16 Op_rand(void) {		// TODO: implement
+int16 Op_Random(void) {		// TODO: implement
 	int var = popVar();
 
 	if (var < 2) {
@@ -207,7 +205,7 @@
 	return (0);
 }
 
-int16 Op_freeAllPerso(void) {
+int16 Op_FreeCT(void) {
 	freeCTP();
 	return (0);
 }
@@ -258,9 +256,9 @@
 	return (0);
 }
 
-int16 Op_freeMediumVar(void) {
+int16 Op_FreePreload(void) {
 	// TODO: implement
-	printf("Op_freeMediumVar, implement\n");
+	printf("Op_FreePreload, implement\n");
 	return (0);
 }
 
@@ -280,7 +278,7 @@
 	return (0);
 }
 
-int16 Op_isFileLoaded(void) {
+int16 Op_FindSet(void) {
 	int16 i;
 	char name[36] = "";
 	char *ptr;
@@ -354,7 +352,7 @@
 	return 0;
 }
 
-int16 Op_2B(void) {
+int16 Op_FindProc(void) {
 	char name[36] = "";
 	char *ptr;
 	int param;
@@ -368,21 +366,21 @@
 	return param;
 }
 
-int16 Op_freeAllMenu(void) {
+int16 Op_KillMenu(void) {
 	// TODO: implement
-	printf("Op_freeAllMenu, implement\n");
+	printf("Op_KillMenu, implement\n");
 
 	return 0;
 }
 
-int16 Op_PlayFXnterPlayerMenu(void) {
+int16 Op_UserMenu(void) {
 	int oldValue = entrerMenuJoueur;
 	entrerMenuJoueur = popVar();
 
 	return oldValue;
 }
 
-int16 Op_ChangeSaveAllowedState(void) {
+int16 Op_UserOn(void) {
 	int oldValue = userEnabled;
 	int newValue = popVar();
 
@@ -393,7 +391,7 @@
 	return oldValue;
 }
 
-int16 Op_changeCutSceneState(void) {
+int16 Op_Display(void) {
 	int oldValue = displayOn;
 	int newValue = popVar();
 
@@ -404,7 +402,7 @@
 	return oldValue;
 }
 
-int16 Op_62(void) {
+int16 Op_FreezeParent(void) {
 	if (currentScriptPtr->var1A == 20) {
 		changeScriptParamInList(currentScriptPtr->var18, currentScriptPtr->var16, &procHead, -1, 9997);
 	} else if (currentScriptPtr->var1A == 30) {
@@ -440,7 +438,7 @@
 	return result;
 }
 
-int16 Op_isFileLoaded2(void) {
+int16 Op_FrameExist(void) {
 	int param;
 
 	param = popVar();
@@ -456,7 +454,7 @@
 	return 0;
 }
 
-int16 Op_loadFile(void) {
+int16 Op_LoadFrame(void) {
 	int param1;
 	int param2;
 	int param3;
@@ -565,7 +563,7 @@
 	return (isOverlayLoaded(name));
 }
 
-int16 Op_2C(void) {
+int16 Op_WriteObject(void) {
 	int16 returnParam;
 
 	int16 param1 = popVar();
@@ -573,7 +571,7 @@
 	int16 param3 = popVar();
 	int16 param4 = popVar();
 
-	getSingleObjectParam(param4, param3, param2, &returnParam);
+getSingleObjectParam(param4, param3, param2, &returnParam);
 	setObjectPosition(param4, param3, param2, param1);
 
 	return returnParam;
@@ -584,7 +582,7 @@
 	return 0;
 }
 
-int16 Op_GetMouseClick3(void) {
+int16 Op_GetMouseButton(void) {
 	int16 dummy;
 	int16 mouseX;
 	int16 mouseY;
@@ -640,13 +638,13 @@
 
 int16 fontFileIndex;
 
-int16 Op_SetFontFileIndex(void) {
+int16 Op_SetFont(void) {
 	fontFileIndex = popVar();
 
 	return 0;
 }
 
-int16 Op_63(void) {
+int16 Op_UnfreezeParent(void) {
 	if (currentScriptPtr->var1A == 0x14) {
 		changeScriptParamInList(currentScriptPtr->var18, currentScriptPtr->var16, &procHead, -1, 0);
 	} else if (currentScriptPtr->var1A == 0x1E) {
@@ -656,15 +654,15 @@
 	return 0;
 }
 
-int16 op7CVar = 0;
+int16 protectionCode = 0;
 
-int16 Op_InitializeStateC(void) {
-	int16 temp = op7CVar;
+int16 Op_ProtectionFlag(void) {
+	int16 temp = protectionCode;
 	int16 newVar;
 
 	newVar = popVar();
 	if (newVar != -1) {
-		op7CVar = newVar;
+		protectionCode = newVar;
 	}
 	return temp;
 }
@@ -693,7 +691,7 @@
 	return 0;
 }
 
-int16 Op_loadAudioResource(void) {
+int16 Op_Preload(void) {
 	popPtr();
 	popVar();
 
@@ -704,12 +702,12 @@
 	return loadCtp((char*)popPtr());
 }
 
-int16 Op_loadMusic(void) {
+int16 Op_LoadSong(void) {
 	popPtr();
 	return 0;
 }
 
-int16 Op_21(void) {
+int16 Op_EndAnim(void) {
 	int param1 = popVar();
 	int param2 = popVar();
 	int overlay = popVar();
@@ -720,7 +718,7 @@
 	return mainProc13(overlay, param2, &actorHead, param1);
 }
 
-int16 Op_InitializeState6(void) {
+int16 Op_Protect(void) {
 	popPtr();
 	popVar();
 
@@ -782,7 +780,7 @@
 	return 0;
 }
 
-int16 Op_66(void) {
+int16 Op_Sizeof(void) {
 	objectParamsQuery params;
 	int index = popVar();
 	int overlay = popVar();
@@ -795,7 +793,7 @@
 	return params.nbState - 1;
 }
 
-int16 Op_SetActiveBackgroundPlane(void) {
+int16 Op_SetActiveBackground(void) {
 	int currentPlane = currentActiveBackgroundPlane;
 	int newPlane = popVar();
 
@@ -809,7 +807,7 @@
 	return currentPlane;
 }
 
-int16 Op_removeBackground(void) {
+int16 Op_RemoveBackground(void) {
 	int backgroundIdx = popVar();
 
 	if(backgroundIdx > 0 && backgroundIdx < 8) {
@@ -831,14 +829,14 @@
 
 int vblLimit;
 
-int16 Op_6A(void) {
+int16 Op_VBL(void) {
 	vblLimit = popVar();
 	return 0;
 }
 
 int op7BVar = 0;
 
-int16 Op_InitializeStateB(void) {
+int16 Op_Sec(void) {
 	int di = popVar();
 	int si = 1 - op7BVar;
 	int sign;
@@ -903,7 +901,7 @@
 	return 0;
 }
 
-int16 Op_InitializeState8(void) {
+int16 Op_Inventory(void) {
 	int si = var41;
 
 	var41 = popVar();
@@ -911,7 +909,7 @@
 	return si;
 }
 
-int16 Op_releaseOverlay(void) {
+int16 Op_RemoveOverlay(void) {
 	int overlayIdx;
 
 	overlayIdx = popVar();
@@ -923,29 +921,22 @@
 	return 0;
 }
 
-int16 Op_SetColorrawLine(void) {
-	/*
-	 * int di = popVar();
-	 * int var_2 = popVar();
-	 * int var_4 = popVar();
-	 * int var_6 = popVar();
-	 * uint8* ptr = (uint8*)popPtr();
-	 */
+int16 Op_ComputeLine(void) {
+	int y2 = popVar();
+	int x2 = popVar();
+	int y1 = popVar();
+	int x1 = popVar();
+	
+	point* pDest = (point*)popPtr();
 
-	popVar();
-	popVar();
-	popVar();
-	popVar();
-	popPtr();
+	int maxValue = cor_droite( x1, y1, x2, y2, pDest);
 
-	//drawLinePtr(var_6, var_4, var_2, ptr);
+	flipGen(pDest, maxValue * 4);
 
-	// flipGen(ptr);
-
-	return 0;
+	return maxValue;
 }
 
-int16 Op_61(void) {
+int16 Op_FindMsg(void) {
 	int si = popVar();
 	popVar();
 
@@ -1202,7 +1193,7 @@
 	return 0;
 }
 
-int16 Op_1E(void) {		// setup actor position
+int16 Op_TrackAnim(void) {		// setup actor position
 	actorStruct *pActor;
 
 	int var0 = popVar();
@@ -1232,13 +1223,13 @@
 	return 0;
 }
 
-int16 Op_45(void) {
+int16 Op_StopSong(void) {
 	printf("Partial op 45 stop sound\n");
 
 	return 0;
 }
 
-int16 Op_AddCellC(void) {
+int16 Op_BgName(void) {
 	popPtr();
 	popVar();
 
@@ -1247,7 +1238,7 @@
 	return 0;
 }
 
-int16 Op_AddCellE(void) {
+int16 Op_StopFX(void) {
 	popVar();
 
 	printf("Partial op 5E (sound related)\n");
@@ -1255,7 +1246,7 @@
 	return 0;
 }
 
-int16 Op_3E(void) {
+int16 Op_PlaySong(void) {
 	printf("Partial op 3E (sound related)\n");
 
 	return 0;
@@ -1265,22 +1256,22 @@
 	flagCt = value;
 }
 
-int16 Op_3A(void) {
+int16 Op_CTOn(void) {
 	setVar49Value(1);
 	return 0;
 }
 
-int16 Op_3B(void) {
+int16 Op_CTOff(void) {
 	setVar49Value(0);
 	return 0;
 }
 
-int16 Op_3F(void) {
+int16 Op_FadeSong(void) {
 	printf("Partial op 3F (sound related)\n");
 	return 0;
 }
 
-int16 Op_40(void) {
+int16 Op_FreeSong(void) {
 	printf("Partial op 40 (sound related)\n");
 	//freeStuff1();
 	freeStuff2();
@@ -1290,7 +1281,7 @@
 	return 0;
 }
 
-int16 Op_6C(void) {
+int16 Op_FreezeOverlay(void) {
 	//int var0;
 	//int var1;
 	int temp;
@@ -1335,7 +1326,7 @@
 	}
 }
 
-int16 Op_60(void) {
+int16 Op_FreezeAni(void) {
 	/*
 	 * int var0;
 	 * int var1;
@@ -1359,7 +1350,7 @@
 	return 0;
 }
 
-int16 Op_6F(void) {
+int16 Op_Itoa(void) {
 	int nbp = popVar();
 	int param[160];
 	char txt[40];
@@ -1390,7 +1381,7 @@
 	return 0;
 }
 
-int16 Op_6E(void) {
+int16 Op_Strcat(void) {
 	char *pSource = (char *)popPtr();
 	char *pDest = (char *)popPtr();
 
@@ -1404,7 +1395,7 @@
 	return 0;
 }
 
-int16 Op_InitializeState2(void) {
+int16 Op_FindSymbol(void) {
 	int var0 = popVar();
 	char *ptr = (char *)popPtr();
 	int var1 = popVar();
@@ -1415,7 +1406,7 @@
 	return getProcParam(var1, var0, ptr);
 }
 
-int16 Op_2A(void) {
+int16 Op_FindObject(void) {
 	char var_26[36];
 	char *ptr = (char *)popPtr();
 	int overlayIdx;
@@ -1478,10 +1469,10 @@
 	return nodeInfo[1];
 }
 
-int16 Op_songExist(void) {
+int16 Op_SongExist(void) {
 	char* songName = (char*)popPtr();
 
-	printf("Unimplemented \"Op_songExist\": %s\n", songName);
+	printf("Unimplemented \"Op_SongExist\": %s\n", songName);
 
 	return 0;
 }
@@ -1574,10 +1565,147 @@
 	return 0;
 }
 
+opcodeFunction opcodeTablePtr[] = 
+{
+	NULL, // 0x00
+	Op_FadeIn,
+	Op_FadeOut,
+	Op_LoadBackground,
+	Op_LoadAbs,
+	Op_AddCell,
+	Op_AddProc,
+	Op_InitializeState,
+	Op_RemoveCell,
+	Op_FreeCell,
+	Op_RemoveProc,
+	Op_RemoveFrame,
+	Op_LoadOverlay,
+	Op_SetColor,
+	Op_PlayFX,
+	NULL,	// used to be debug
+
+	Op_FreeOverlay, // 0x10
+	Op_FindOverlay,
+	NULL,	// used to be exec debug
+	Op_AddMessage,
+	Op_RemoveMessage,
+	Op_UserWait,
+	Op_FreezeCell,
+	Op_LoadCt,
+	Op_AddAnimation,
+	Op_RemoveAnimation,
+	Op_SetZoom,
+	Op_SetObjectAtNode,
+	NULL, // setNodeState, never used ?
+	Op_SetNodeColor,
+	Op_TrackAnim,
+	Op_GetNodeX,
+
+	Op_GetNodeY, // 0x20
+	Op_EndAnim,
+	Op_GetZoom,
+	Op_GetStep,
+	Op_SetStringColors,
+	NULL, // xClick
+	NULL, // yClick
+	NULL, // getPixel
+	Op_UserOn,
+	Op_FreeCT,
+	Op_FindObject,
+	Op_FindProc,
+	Op_WriteObject,
+	NULL, // Op_ReadObject
+	Op_RemoveOverlay,
+	Op_AddBackgroundIncrust,
+
+	Op_RemoveBackgroundIncrust, // 0x30
+	Op_UnmergeBackgroundIncrust,
+	Op_freeBackgroundInscrustList,
+	Op_DialogOn,
+	Op_DialogOff,
+	Op_UserDelay,
+	NULL, // ThemeReset
+	Op_Narrator,
+	Op_RemoveBackground,
+	Op_SetActiveBackground,
+	Op_CTOn,
+	Op_CTOff,
+	Op_Random,
+	Op_LoadSong,
+	Op_PlaySong,
+	Op_FadeSong,
+
+	Op_FreeSong, // 0x40
+	Op_FrameExist,
+	NULL, // SetVolume
+	Op_SongExist,
+	NULL, // TrackPos
+	Op_StopSong,
+	NULL, // RestoreSong
+	NULL, // SongSize
+	NULL, // SetPattern
+	NULL, // SongLoop
+	NULL, // SongPlayed
+	Op_LinkObjects,
+	NULL, // UserClick
+	NULL, // XMenuItem
+	NULL, // YMenuItem
+	NULL, // Menu
+
+	NULL, // AutoControl 0x50
+	NULL, // MouseMove
+	NULL, // MouseEnd
+	NULL, // MsgExist
+	Op_SetFont,
+	NULL, // MergeMsg
+	Op_Display,
+	Op_GetMouseX,
+	Op_GetMouseY,
+	Op_GetMouseButton,
+	Op_FindSet,
+	Op_regenerateBackgroundIncrust,
+	Op_BgName,
+	NULL, // loopFX
+	Op_StopFX,
+	NULL, // freqFX
+
+	Op_FreezeAni, // 0x60
+	Op_FindMsg,
+	Op_FreezeParent,
+	Op_UnfreezeParent,
+	Op_Exec,
+	Op_AutoCell,
+	Op_Sizeof,
+	Op_Preload,
+	Op_FreePreload,
+	NULL, // DeletePreload
+	Op_VBL,
+	Op_LoadFrame,
+	Op_FreezeOverlay,
+	Op_Strcpy,
+	Op_Strcat,
+	Op_Itoa,
+
+	Op_comment, // 0x70
+	Op_ComputeLine,
+	Op_FindSymbol,
+	Op_SetXDial,
+	Op_GetlowMemory,
+	NULL, // aniDir
+	Op_Protect,
+	NULL, // Cls
+	Op_Inventory,
+	Op_UserMenu,
+	NULL, // GetChar
+	Op_Sec,
+	Op_ProtectionFlag,
+	Op_KillMenu,
+};
+
 void setupOpcodeTable(void) {
-	int i;
+//	int i;
 
-	for (i = 0; i < 256; i++) {
+/*	for (i = 0; i < 256; i++) {
 		opcodeTablePtr[i] = NULL;
 	}
 
@@ -1609,19 +1737,19 @@
 	opcodeTablePtr[0x1A] = Op_SetZoom;
 	opcodeTablePtr[0x1B] = Op_SetObjectAtNode;
 	opcodeTablePtr[0x1D] = Op_SetNodeColor;
-	opcodeTablePtr[0x1E] = Op_1E;
+	opcodeTablePtr[0x1E] = Op_TrackAnim;
 	opcodeTablePtr[0x1F] = Op_GetNodeX;
 	opcodeTablePtr[0x20] = Op_GetNodeY;
-	opcodeTablePtr[0x21] = Op_21;
+	opcodeTablePtr[0x21] = Op_EndAnim;
 	opcodeTablePtr[0x22] = Op_GetZoom;
 	opcodeTablePtr[0x23] = Op_GetStep;
 	opcodeTablePtr[0x24] = Op_SetStringColors;
-	opcodeTablePtr[0x28] = Op_ChangeSaveAllowedState;
-	opcodeTablePtr[0x29] = Op_freeAllPerso;
-	opcodeTablePtr[0x2A] = Op_2A;
-	opcodeTablePtr[0x2B] = Op_2B;
-	opcodeTablePtr[0x2C] = Op_2C;
-	opcodeTablePtr[0x2E] = Op_releaseOverlay;
+	opcodeTablePtr[0x28] = Op_UserOn;
+	opcodeTablePtr[0x29] = Op_FreeCT;
+	opcodeTablePtr[0x2A] = Op_FindObject;
+	opcodeTablePtr[0x2B] = Op_FindProc;
+	opcodeTablePtr[0x2C] = Op_WriteObject;
+	opcodeTablePtr[0x2E] = Op_RemoveOverlay;
 	opcodeTablePtr[0x2F] = Op_AddBackgroundIncrust;
 	opcodeTablePtr[0x30] = Op_RemoveBackgroundIncrust;
 	opcodeTablePtr[0x31] = Op_UnmergeBackgroundIncrust;
@@ -1629,55 +1757,55 @@
 	opcodeTablePtr[0x33] = Op_DialogOn;
 	opcodeTablePtr[0x34] = Op_DialogOff;
 	opcodeTablePtr[0x35] = Op_UserDelay;
-	opcodeTablePtr[0x37] = Op_37;
-	opcodeTablePtr[0x38] = Op_removeBackground;
-	opcodeTablePtr[0x39] = Op_SetActiveBackgroundPlane;
-	opcodeTablePtr[0x3A] = Op_3A;
-	opcodeTablePtr[0x3B] = Op_3B;
-	opcodeTablePtr[0x3C] = Op_rand;
-	opcodeTablePtr[0x3D] = Op_loadMusic;
-	opcodeTablePtr[0x3E] = Op_3E;
-	opcodeTablePtr[0x3F] = Op_3F;
-	opcodeTablePtr[0x40] = Op_40;
-	opcodeTablePtr[0x41] = Op_isFileLoaded2;
-	opcodeTablePtr[0x43] = Op_songExist;
-	opcodeTablePtr[0x45] = Op_45;
+	opcodeTablePtr[0x37] = Op_Narrator;
+	opcodeTablePtr[0x38] = Op_RemoveBackground;
+	opcodeTablePtr[0x39] = Op_SetActiveBackground;
+	opcodeTablePtr[0x3A] = Op_CTOn;
+	opcodeTablePtr[0x3B] = Op_CTOff;
+	opcodeTablePtr[0x3C] = Op_Random;
+	opcodeTablePtr[0x3D] = Op_LoadSong;
+	opcodeTablePtr[0x3E] = Op_PlaySong;
+	opcodeTablePtr[0x3F] = Op_FadeSong;
+	opcodeTablePtr[0x40] = Op_FreeSong;
+	opcodeTablePtr[0x41] = Op_FrameExist;
+	opcodeTablePtr[0x43] = Op_SongExist;
+	opcodeTablePtr[0x45] = Op_StopSong;
 	opcodeTablePtr[0x4B] = Op_LinkObjects;
-	opcodeTablePtr[0x54] = Op_SetFontFileIndex;
-	opcodeTablePtr[0x56] = Op_changeCutSceneState;
+	opcodeTablePtr[0x54] = Op_SetFont;
+	opcodeTablePtr[0x56] = Op_Display;
 	opcodeTablePtr[0x57] = Op_GetMouseX;
 	opcodeTablePtr[0x58] = Op_GetMouseY;
-	opcodeTablePtr[0x59] = Op_GetMouseClick3;
-	opcodeTablePtr[0x5A] = Op_isFileLoaded;
+	opcodeTablePtr[0x59] = Op_GetMouseButton;
+	opcodeTablePtr[0x5A] = Op_FindSet;
 	opcodeTablePtr[0x5B] = Op_regenerateBackgroundIncrust;
-	opcodeTablePtr[0x5C] = Op_AddCellC;
-	opcodeTablePtr[0x5E] = Op_AddCellE;
-	opcodeTablePtr[0x60] = Op_60;
-	opcodeTablePtr[0x61] = Op_61;
-	opcodeTablePtr[0x62] = Op_62;
-	opcodeTablePtr[0x63] = Op_63;
-	opcodeTablePtr[0x64] = Op_startScript;
+	opcodeTablePtr[0x5C] = Op_BgName;
+	opcodeTablePtr[0x5E] = Op_StopFX;
+	opcodeTablePtr[0x60] = Op_FreezeAni;
+	opcodeTablePtr[0x61] = Op_FindMsg;
+	opcodeTablePtr[0x62] = Op_FreezeParent;
+	opcodeTablePtr[0x63] = Op_UnfreezeParent;
+	opcodeTablePtr[0x64] = Op_Exec;
 	opcodeTablePtr[0x65] = Op_AutoCell;
-	opcodeTablePtr[0x66] = Op_66;
-	opcodeTablePtr[0x67] = Op_loadAudioResource;
-	opcodeTablePtr[0x68] = Op_freeMediumVar;
-	opcodeTablePtr[0x6A] = Op_6A;
-	opcodeTablePtr[0x6B] = Op_loadFile;
-	opcodeTablePtr[0x6C] = Op_6C;
-	opcodeTablePtr[0x6D] = Op_strcpy;
-	opcodeTablePtr[0x6E] = Op_6E;
-	opcodeTablePtr[0x6F] = Op_6F;
+	opcodeTablePtr[0x66] = Op_Sizeof;
+	opcodeTablePtr[0x67] = Op_Preload;
+	opcodeTablePtr[0x68] = Op_FreePreload;
+	opcodeTablePtr[0x6A] = Op_VBL;
+	opcodeTablePtr[0x6B] = Op_LoadFrame;
+	opcodeTablePtr[0x6C] = Op_FreezeOverlay;
+	opcodeTablePtr[0x6D] = Op_Strcpy;
+	opcodeTablePtr[0x6E] = Op_Strcat;
+	opcodeTablePtr[0x6F] = Op_Itoa;
 	opcodeTablePtr[0x70] = Op_comment;
-	opcodeTablePtr[0x71] = Op_SetColorrawLine;
-	opcodeTablePtr[0x72] = Op_InitializeState2;
+	opcodeTablePtr[0x71] = Op_ComputeLine;
+	opcodeTablePtr[0x72] = Op_FindSymbol;
 	opcodeTablePtr[0x73] = Op_SetXDial;
 	opcodeTablePtr[0x74] = Op_GetlowMemory;
-	opcodeTablePtr[0x76] = Op_InitializeState6;
-	opcodeTablePtr[0x79] = Op_PlayFXnterPlayerMenu;
-	opcodeTablePtr[0x78] = Op_InitializeState8;
-	opcodeTablePtr[0x7B] = Op_InitializeStateB;
-	opcodeTablePtr[0x7C] = Op_InitializeStateC;
-	opcodeTablePtr[0x7D] = Op_freeAllMenu;
+	opcodeTablePtr[0x76] = Op_Protect;
+	opcodeTablePtr[0x79] = Op_UserMenu;
+	opcodeTablePtr[0x78] = Op_Inventory;
+	opcodeTablePtr[0x7B] = Op_Sec;
+	opcodeTablePtr[0x7C] = Op_ProtectionFlag;
+	opcodeTablePtr[0x7D] = Op_KillMenu;*/
 	// TODO: copy the opcodes here
 }
 
@@ -1690,12 +1818,19 @@
 	if (opcode > 0x100)
 		return (-21);
 
+	if(opcode > sizeof(opcodeTablePtr) / sizeof(opcodeFunction)) {
+		printf("Unsupported opcode %d in opcode type 8\n", opcode);
+		pushVar(0);
+	}
+
+
 	if (opcodeTablePtr[opcode]) {
 	//	printf("Function: %d\n",opcode);
 		pushVar(opcodeTablePtr[opcode] ());
 		return (0);
 	} else {
 		printf("Unsupported opcode %d in opcode type 8\n", opcode);
+		pushVar(0);
 		// exit(1);
 	}
 

Modified: scummvm/trunk/engines/cruise/perso.cpp
===================================================================
--- scummvm/trunk/engines/cruise/perso.cpp	2007-12-20 17:04:15 UTC (rev 29924)
+++ scummvm/trunk/engines/cruise/perso.cpp	2007-12-20 18:21:27 UTC (rev 29925)
@@ -57,7 +57,7 @@
 
 int pathVar0;
 
-unsigned int inc_droite2, inc_jo;
+unsigned int inc_jo;
 
 int direction(int x1, int y1, int x2, int y2, int inc_jo1, int inc_jo2) {
 	int h, v, h1, v1;
@@ -87,8 +87,9 @@
 	}
 }
 
-void cor_droite(int x1, int y1, int x2, int y2, int16 cor_joueur[400][2]) {
-	int16 *di = (int16 *) cor_joueur;
+int cor_droite(int x1, int y1, int x2, int y2, point* outputTable) {
+	int numOutput = 0;
+
 	int dx;
 	int dy;
 
@@ -105,9 +106,9 @@
 	int ax;
 	int bx;
 
-	di[0] = x1;
-	di[1] = y1;
-	di += 2;
+	outputTable[numOutput].x = x1;
+	outputTable[numOutput].y = y1;
+	numOutput++;
 
 	dx = x2 - x1;
 	dy = y2 - y1;
@@ -156,17 +157,19 @@
 			dx += bp;
 		}
 
-		di[0] = ax;
-		di[1] = bx;
-		di += 2;
+		outputTable[numOutput].x = ax;
+		outputTable[numOutput].y = bx;
+		numOutput++;
+
 	}
 
 	flag_obstacle = 0;
-	inc_droite2 = (di - (int16 *) cor_joueur) / 2;
+
+	return numOutput;
 }
 
 void processActorWalk(int16 resx_y[4], int16 *inc_droite, int16 *inc_droite0,
-    	int16 *inc_chemin, int16 cor_joueur[400][2],
+    	int16 *inc_chemin, point* cor_joueur,
     	int16 solution0[NUM_NODES + 3][2], int16 *inc_jo1, int16 *inc_jo2,
     	int16 *dir_perso, int16 *inc_jo0, int16 num) {
 		int x1, x2, y1, y2;
@@ -193,11 +196,9 @@
 
 						return;
 					}
-					cor_droite(x1, y1, x2, y2, cor_joueur);
-					*inc_droite0 = inc_droite2;
-					*dir_perso = resx_y[2] =
-					    direction(x1, y1, x2, y2, *inc_jo1,
-					    *inc_jo2);
+					
+					*inc_droite0 = cor_droite(x1, y1, x2, y2, cor_joueur);
+					*dir_perso = resx_y[2] = direction(x1, y1, x2, y2, *inc_jo1, *inc_jo2);
 					*inc_jo0 = inc_jo;
 					u = 1;
 				} else
@@ -215,8 +216,8 @@
 		*inc_chemin = i;
 	}
 
-	resx_y[0] = cor_joueur[*inc_droite][0];
-	resx_y[1] = cor_joueur[*inc_droite][1];
+	resx_y[0] = cor_joueur[*inc_droite].x;
+	resx_y[1] = cor_joueur[*inc_droite].y;
 	resx_y[2] = *dir_perso;
 	resx_y[3] = computeZoom(resx_y[1]);
 

Modified: scummvm/trunk/engines/cruise/perso.h
===================================================================
--- scummvm/trunk/engines/cruise/perso.h	2007-12-20 17:04:15 UTC (rev 29924)
+++ scummvm/trunk/engines/cruise/perso.h	2007-12-20 18:21:27 UTC (rev 29925)
@@ -33,11 +33,16 @@
 	NUM_PERSONS = 10
 };
 
+struct point {
+	int16 x;
+	int16 y;
+};
+
 struct persoStruct {
 	int16 inc_droite;	// 2
 	int16 inc_droite0;	// 2
 	int16 inc_chemin;	// 2
-	int16 coordinates[400][2];	// 1600
+	point coordinates[400];	// 1600
 	int16 solution[NUM_NODES + 3][2];	//((20+3)*2*2)
 	int16 inc_jo1;		// 2
 	int16 inc_jo2;		// 2
@@ -48,6 +53,7 @@
 extern persoStruct *persoTable[NUM_PERSONS];
 extern int16 computedVar14;
 
+int cor_droite(int x1, int y1, int x2, int y2, point* outputTable);
 void freePerso(int persoIdx);
 void freeCTP(void);
 void affiche_chemin(int16 persoIdx, int16 * returnVar);

Modified: scummvm/trunk/engines/cruise/script.cpp
===================================================================
--- scummvm/trunk/engines/cruise/script.cpp	2007-12-20 17:04:15 UTC (rev 29924)
+++ scummvm/trunk/engines/cruise/script.cpp	2007-12-20 18:21:27 UTC (rev 29925)
@@ -188,9 +188,7 @@
 				}
 
 				if (var_6 == 5) {
-					ptr =
-					    overlayTable[byte2].ovlData->
-					    data4Ptr + var_C;
+					ptr = overlayTable[byte2].ovlData->data4Ptr + var_C;
 				} else {
 					ASSERT(0);
 				}
@@ -203,8 +201,7 @@
 			switch (type2) {
 			case 1:
 				{
-					saveShort(ptr + var_A + offset * 2,
-					    var);
+					saveShort(ptr + var_A + offset * 2, var);
 					return 0;
 				}
 			case 2:
@@ -214,8 +211,7 @@
 				}
 			default:
 				{
-					printf
-					    ("Unsupported code in opcodeType1 case 1!\n");
+					printf("Unsupported code in opcodeType1 case 1!\n");
 					exit(1);
 				}
 			}
@@ -258,49 +254,49 @@
 }
 
 int32 opcodeType2(void) {
-	int offset = saveOpcodeVar;
-	int byte1 = getByteFromScript();
-	int byte2 = getByteFromScript();
-	short int short1 = getShortFromScript();
+	int index = 0;
+	switch(currentScriptOpcodeType)
+	{
+	case 5:
+		index = saveOpcodeVar;
+	case 1:
+		{
+			uint8* adresse = NULL;
+			int type = getByteFromScript();
+			int overlay = getByteFromScript();
 
-	ASSERT(currentScriptOpcodeType == 1 || currentScriptOpcodeType == 5);
+			int firstOffset;
+			int offset;
+			firstOffset = offset = getShortFromScript();
+			offset += index;
 
-	if (currentScriptOpcodeType == 5)
-		short1 += saveOpcodeVar;
+			int typ7 = type&7;
+			if(!typ7) {
+				return (-10);
+			}
+			if(!overlay) {
+				adresse = scriptDataPtrTable[typ7];
+			} else {
+				if (!overlayTable[overlay].alreadyLoaded) {
+					return (-7);
+				}
+				if (!overlayTable[overlay].ovlData) {
+					return (-4);
+				}
+				ASSERT(0);
+			}
 
-	ASSERT(byte1 & 7);
+			adresse += offset;
+			int size = (type>>3)&3;
 
-	if (!(byte1 & 7)) {
-		return (-10);
-	}
-
-	if (!byte2) {
-		int type2;
-		uint8 *ptr = scriptDataPtrTable[byte1 & 7] + short1;
-
-		type2 = ((byte1 & 0x18) >> 3);
-
-		ASSERT(type2 == 1 || type2 == 2);
-
-		switch (type2) {
-		case 1:
-			{
-				pushPtr(ptr + offset);
-				return (0);
+			if(size == 1) {
+				adresse += index;
+				pushPtr(adresse);
+			} else if(size == 2) {
+				pushPtr(adresse);
 			}
-		case 2:
-			{
-				pushPtr(ptr);
-				return (0);
-			}
-		default:
-			{
-				return (-10);
-			}
+
 		}
-	} else {
-		printf("Unsupported code in opcodeType2 case 1!\n");
-		exit(1);
 	}
 
 	return 0;
@@ -452,6 +448,7 @@
 	case 7:
 		{
 			currentScriptPtr->var4 = newSi;	//always
+			break;
 		}
 	}
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list