[Scummvm-cvs-logs] SF.net SVN: scummvm: [30291] tools/trunk/descumm6.cpp

Kirben at users.sourceforge.net Kirben at users.sourceforge.net
Sun Jan 6 12:31:05 CET 2008


Revision: 30291
          http://scummvm.svn.sourceforge.net/scummvm/?rev=30291&view=rev
Author:   Kirben
Date:     2008-01-06 03:31:04 -0800 (Sun, 06 Jan 2008)

Log Message:
-----------
Add basic support for decompiling HE90-99 games.

Modified Paths:
--------------
    tools/trunk/descumm6.cpp

Modified: tools/trunk/descumm6.cpp
===================================================================
--- tools/trunk/descumm6.cpp	2008-01-06 11:01:56 UTC (rev 30290)
+++ tools/trunk/descumm6.cpp	2008-01-06 11:31:04 UTC (rev 30291)
@@ -175,6 +175,9 @@
 				else
 					where += sprintf(where, "var%d", _var & 0xFFF);
 			} else if (_var & 0x8000) {
+				// HE80+
+				// where += sprintf(where, "roomvar%ld", se->data & 0xFFF);
+				// else
 				where += sprintf(where, "bitvar%d", _var & 0x7FFF);
 			} else if (_var & 0x4000) {
 				where += sprintf(where, "localvar%d", _var & 0xFFF);
@@ -1492,18 +1495,142 @@
 		break;
 	case 0x1C: // HE90+
 		ext(output, "x" "wizImageOps\0"
+				"\x20p|setResDefImageWidth,"
+				"\x21p|setResDefImageHeight,"
 				"\x30|processMode1,"
+				"\x31h|processMode3,"
+				"\x32hp|processMode4,"
 				"\x33ppppp|setCaptureRect,"
 				"\x34p|setImageState,"
 				"\x36p|setFlags,"
 				"\x38ppppp|drawWizImage,"
 				"\x39p|setImage,"
+				"\x3Ep|setSourceImage,"
 				"\x41pp|setPosition,"
 				"\x42pp|remapPalette,"
 				"\x43pppp|setClipRect,"
+				"\x56p|setPalette,"
+				"\x5Cp|setScale,"
+				"\x83ppp|processMode7,"
+				"\x85ppppp|proxessMode9,"
+				"\x89p|setDstResNum,"
+				"\x9App|setPosition,"
+				"\xD9|processMode8,"
 				"\xF6p|setupPolygon,"
+				"\xF9pp|remapPalette,"
 				"\xFF|processWizImage");
 		break;
+	case 0x1D: // HE90+
+		ext(output, "rpp|min");
+		break;
+	case 0x1E: // HE90+
+		ext(output, "rpp|max");
+		break;
+	case 0x1F: // HE90+
+		ext(output, "rp|sin");
+		break;
+	case 0x20: // HE90+
+		ext(output, "rp|cos");
+		break;
+	case 0x21: // HE90+
+		ext(output, "rp|sqrt");
+		break;
+	case 0x22: // HE90+
+		ext(output, "rpp|atan2");
+		break;
+	case 0x23: // HE90+
+		ext(output, "rpppp|getSegmentAngle");
+		break;
+	case 0x24: // HE90+
+		ext(output, "rx" "getDistanceBetweenPoints\0"
+				"\x1Cpppp|case28,"
+				"\x1Dpppppp|case29");
+		break;
+	case 0x25: // HE90+
+		ext(output, "rx" "getSpriteInfo\0"
+				"\x1Ep|getPosX,"
+				"\x1Fp|getPosY,"
+				"\x20p|getImageX,"
+				"\x21p|getImageY,"
+				"\x22p|getDistX,"
+				"\x23p|getDistY,"
+				"\x24p|getImageStateCount,"
+				"\x25p|getGroup,"
+				"\x26p|getDisplayX,"
+				"\x27p|getDisplayY,"
+				"\x2App|getFlags,"
+				"\x2Bp|getPriority,"
+//				"\x2Dppp|findSprite,"   // HE90
+				"\x2Dpppp|findSprite,"  // HE98
+//				"\x2Dlpppp|findSprite," // HE99+
+				"\x34p|getImageState,"
+				"\x3Ep|getSourceImage,"
+				"\x3Fp|getImage,"
+				"\x44p|getEraseType,"
+				"\x52p|getFlagAutoAnim,"
+				"\x56p|getPalette,"
+				"\x5Cp|getScale,"
+				"\x61p|getAnimSpeed,"
+				"\x62p|getShadow,"
+				"\x7Cp|getUpdateType,"
+				"\x7Dlp|getClass,"
+				"\x8Bpp|getGeneralProperty,"
+				"\x8Cp|getMaskImage,"
+				"\xC6pp|getUserValue");
+		break;
+	case 0x26: // HE90+
+		ext(output, "x" "setSpriteInfo\0"
+				"\x22p|setDistX,"
+				"\x23p|setDistY,"
+				"\x25p|setGroup,"
+				"\x2App|setFlags,"
+				"\x2Bp|setPriority,"
+				"\x2Cpp|move,"
+				"\x34p|setImageState,"
+				"\x35p|setAngle,"
+				"\x39p|setRange,"  // HE90-98
+//				"\x39pp|setRange," // HE 98.5+
+				"\x3Ep|setSourceImage,"
+				"\x3Fp|setImage,"
+				"\x41pp|setPosition,"
+				"\x44p|setEraseType,"
+				"\x4Dpp|setDist,"
+				"\x52p|setAutoAnimFlag,"
+				"\x56p|setPalette,"
+				"\x5Cp|setScale,"
+				"\x61p|setAnimSpeed,"
+				"\x62p|setAutoShadow,"
+				"\x7Cp|setUpdateType,"
+				"\x7Dl|setClass,"
+				"\x8Bpp|setGeneralProperty,"
+				"\x8Cp|setMaskImage,"
+				"\x9E|resetTables,"
+				"\xC6pp|setUserValue,"
+				"\xD9|resetSprite");
+		break;
+	case 0x27: // HE90+
+		ext(output, "rx" "getSpriteGroupInfo\0"
+				"\x8p|getSpriteArray,"
+				"\x1Ep|getPositionX,"
+				"\x1Fp|getPositionY,"
+				"\x2App|getXYScale?,"
+				"\x2Bp|getPriority,"
+				"\x3Fp|getDstResNum,"
+				"\x8Bpp|dummy");
+		break;
+	case 0x28: // HE90+
+		ext(output, "x" "setSpriteGroupInfo\0"
+				"\x25pp|misc,"
+				"\x2App|setXYScale?,"
+				"\x2Bp|setPriority,"
+				"\x2Cpp|move,"
+				"\x39p|setId,"
+				"\x3Fp|setImage,"
+				"\x41pp|setPosition,"
+				"\x43pppp|setBounds,"
+				"\x5D|resetBounds,"
+				"\xD9|reset");
+		break;
 	case 0x29: // HE90+
 		ext(output, "rx" "getWizData\0"
 				"\x1Epp|imageSpotX,"
@@ -1514,9 +1641,90 @@
 				"\x2Dpppp|isPixelNonTransparentnumber,"
 				"\x42pppp|pixelColor");
 		break;
+	case 0x2A: // HE90+
+		ext(output, "rppp|getActorData");
+		break;
+	case 0x2B: // HE90+
+		ext(output, "lppi|startScriptUnk");
+		break;
+	case 0x2C: // HE90+
+		ext(output, "lppi|jumpToScriptUnk");
+		break;
+	case 0x2D: // HE90+
+		ext(output, "x" "videoOps\0"
+				"\x31h|setFilename,"
+				"\x36|setFlags,"
+				"\x39|setUnk2,"
+				"\x3F|setWizResNumX,"
+				"\xA5|setStatus,"
+				"\xFF|playOrStopVideo,");
+		break;
+	case 0x2F: // HE90+
+		ext(output, "x" "floodfill\0"
+				"\x36|dummy,"
+				"\x39|reset,"
+				"\x41|setXY,"
+				"\x42|setFlags,"
+				"\x43|setBoxRect,"
+				"\xFF|floodfill");
+		break;
+	case 0x30: // HE90+
+		ext(output, "rpp|mod");
+		break;
+	case 0x31: // HE90+
+		ext(output, "rpp|shl");
+		break;
+	case 0x32: // HE90+
+		ext(output, "rpp|shr");
+		break;
+	case 0x33: // HE90+
+		ext(output, "rpp|xor");
+		break;
+	case 0x34:
+		ext(output, "rlp|findAllObjectsWithClassOf");
+		break;
+	case 0x35: // HE90+
+		ext(output, "rllp|getPolygonOverlap");
+		break;
+	case 0x36: // HE90+
+		ext(output, "rppp|cond");
+		break;
+	case 0x37: // HE90+
+		ext(output, "x" "dim2dim2Array\0"
+				"\x2pppppw|bit,"
+				"\x3pppppw|nibble,"
+				"\x4pppppw|byte,"
+				"\x5pppppw|int,"
+				"\x6pppppw|dword,"
+				"\x7pppppw|string");
+		break;
+	case 0x38: // HE90+
+		ext(output, "x" "redim2dimArray\0"
+				"\x4ppppw|byte,"
+				"\x5ppppw|int,"
+				"\x6ppppw|dword");
+		break;
+	case 0x39: // HE90+
+		ext(output, "rwwpppppppp|getLinesIntersectionPoint");
+		break;
+	case 0x3A: // HE90+
+		ext(output, "x" "sortArray\0"
+				"\x81pppppw|sort,");
+		break;
 	case 0x43:
 		writeVar(output, get_word(), pop());
 		break;
+	case 0x44: // HE90+
+		ext(output, "rx" "getObjectData\0"
+				"\x20|getWidth,"
+				"\x21|getHeight,"
+				"\x25|getImageCount,"
+				"\x27|getX,"
+				"\x28|getY,"
+				"\x34|getState,"
+				"\x39p|setId,"
+				"\x8Bp|dummy");
+		break;
 	case 0x45: // HE80+
 		ext(output, "x" "createSound\0"
 				"\x1Bp|create,"
@@ -1524,6 +1732,9 @@
 				"\xE8p|setId,"
 				"\xFF|dummy");
 		break;
+	case 0x46: // HE80+
+		ext(output, "rh|getFileSize");
+		break;
 	case 0x47:
 		writeArray(output, get_word(), NULL, pop(), pop());
 		break;
@@ -1640,7 +1851,16 @@
 		ext(output, "l|beginCutscene");
 		break;
 	case 0x69:
-		ext(output, "|stopMusic");
+		// HE80+
+		ext(output, "x" "windowOps\0"
+				"\x39p|case25,"
+				"\x3Ap|case26,"
+				"\x3Fp|case31,"
+				"\xD9|case185,"
+				"\xF3h|case211,"
+				"\xFF|case223");
+		// else
+		// ext(output, "|stopMusic");
 		break;
 	case 0x6A:
 		ext(output, "p|freezeUnfreeze");
@@ -1649,6 +1869,7 @@
 		ext(output, "x" "cursorCommand\0"
 				"\x13z|setCursorImg,"
 				"\x14z|setCursorImg,"
+				"\x3Czp|setCursorImg,"
 				"\x90|cursorOn,"
 				"\x91|cursorOff,"
 				"\x92|userPutOn,"
@@ -1790,7 +2011,15 @@
 		ext(output, "rp|getInventoryCount");
 		break;
 	case 0x94:
-		ext(output, "rpp|getVerbFromXY");
+		// HE90+
+		ext(output, "rx" "getPaletteData\0"
+				"\x2Dpppppp|,"
+				"\x34ppp|getColorCompontent,"
+				"\x42pp|getColor,"
+				"\x84pp|getColorCompontent2,"
+				"\xD9ppp|getSimilarColor2");
+		// else
+		// ext(output, "rpp|getVerbFromXY");
 		break;
 	case 0x95:
 		ext(output, "|beginOverride");
@@ -1869,6 +2098,9 @@
 				"\x2Bp|layer,"
 				"\xC5p|setCurActor,"
 				"\x40pppp|setClipRect,"
+				"\x41pp|putActor,"
+				"\x43pppp|setActorClipRect,"
+				"\x44p|setHEFlag,"
 				"\x4Cp|setCostume,"
 				"\x4Dpp|setWalkSpeed,"
 				"\x4El|setSound,"
@@ -1893,6 +2125,7 @@
 				"\x62p|setShadowMode,"
 				"\x63pp|setTalkPos,"
 				"\x9Cp|charset,"
+				"\xAFp|setPaletteNum,"
 				"\xC6pp|setAnimVar,"
 				"\xD7|setIgnoreTurnsOn,"
 				"\xD8|setIgnoreTurnsOff,"
@@ -1901,6 +2134,18 @@
 				"\xE1hp|setTalkieSlot");
 		break;
 	case 0x9E:
+		// HE90+
+		ext(output, "x" "paletteOps\0"
+				"\x39p|setPaletteNum,"
+				"\x3Fpp|setPaletteFromImage,"
+				"\x42ppppp|setPaletteColor,"
+				"\x46ppp|copyPaletteColor,"
+				"\x4Cp|setPaletteFromCostume,"
+				"\x56p|copyPalette,"
+				"\xAFpp|setPaletteFromRoom,"
+				"\xD9|restorePalette,"
+				"\xFF|resetPaletteNum");
+		/* else
 		ext(output, "x" "verbOps\0"
 				"\xC4p|setCurVerb,"
 				"\x7Cp|loadImg,"
@@ -1920,6 +2165,7 @@
 				"\x8Bpp|setToObject,"
 				"\x8Cp|setBkColor,"
 				"\xFF|redraw");
+		*/
 		break;
 	case 0x9F:
 		ext(output, "rpp|getActorFromXY");
@@ -1942,6 +2188,38 @@
 			se_a = se_get_string_he();
 			writeArray(output, get_word(), NULL, se_a, se_a);
 			break;
+		case 126:
+			// TODO
+			se_get_list();
+			pop();
+			pop();
+			pop();
+			pop();
+			get_word();
+			break;
+		case 127:
+			// TODO
+			pop();
+			pop();
+			pop();
+			pop();
+			get_word();
+			pop();
+			pop();
+			pop();
+			pop();
+			get_word();
+			break;
+		case 128:
+			// TODO
+			pop();
+			pop();
+			pop();
+			pop();
+			pop();
+			pop();
+			get_word();
+			break;
 		case 194:
 			se_get_list();
 			pop();


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