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

Kirben at users.sourceforge.net Kirben at users.sourceforge.net
Thu Oct 8 11:29:42 CEST 2009


Revision: 44778
          http://scummvm.svn.sourceforge.net/scummvm/?rev=44778&view=rev
Author:   Kirben
Date:     2009-10-08 09:29:42 +0000 (Thu, 08 Oct 2009)

Log Message:
-----------
Update code, with information from Tobias.

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

Modified: tools/trunk/extract_loom_tg16.cpp
===================================================================
--- tools/trunk/extract_loom_tg16.cpp	2009-10-08 09:29:14 UTC (rev 44777)
+++ tools/trunk/extract_loom_tg16.cpp	2009-10-08 09:29:42 UTC (rev 44778)
@@ -680,97 +680,6 @@
 	{ {0x2B4000, 0x2B4000}, {0x0155, 0x0155}, RES_COSTUME }  /* Duplicate of Costume 155 */
 };
 
-static const uint16 roomHeader[88 * 4] = {
-	 0,   0,   0,  0,
-	 1, 320, 144, 61, /* Difference */
-	 2, 960, 144,  7,
-	 3, 320, 144,  7,
-	 4, 640, 144, 32,
-	 5, 704, 144,  5,
-	 6, 320, 144, 47,
-	 7, 448, 144,  2,
-	 8, 912, 144, 14,
-	 9, 320, 144, 17,
-	10, 320, 144, 27,
-	11, 456, 144,  9,
-	12, 320, 144,  3,
-	13, 320, 144, 15,
-	14, 320, 144,  0,
-	15, 424, 144,  6,
-	16, 624, 144,  8,
-	17, 320, 144, 15,
-	18, 320, 144, 12,
-	19, 320, 144,  7,
-	20, 320, 144, 14,
-	21,   0,   0,  0,
-	22, 320, 144, 18,
-	23, 480, 144, 11,
-	24, 768, 144, 17,
-	25, 320, 144,  3,
-	26, 320, 144, 16,
-	27, 320, 144,  0,
-	28, 640, 144, 35,
-	29, 320, 144,  3,
-	30, 960, 144, 18,
-	31, 448, 144, 16,
-	32, 464, 144,  5,
-	33, 320, 144, 15,
-	34, 624, 144, 30,
-	35, 320, 144, 11,
-	36, 480, 144,  3,
-	37, 320, 144,  8,
-	38, 320, 144, 15,
-	39, 320, 144,  0,
-	40, 320, 144,  6,
-	41, 336, 144,  7,
-	42, 320, 144,  2,
-	43, 320, 144, 13,
-	44, 320, 144, 3,
-	45, 320, 144, 26,
-	46, 960, 144, 14,
-	47, 640, 144,  9,
-	48,   0,   0,  0,
-	49, 320, 144, 17,
-	50, 320, 144, 20,
-	51, 320, 144, 23,
-	52, 320, 144,  0,
-	53, 320, 144,  6,
-	54, 320, 144,  3,
-	55, 320, 144,  6,
-	56, 320, 144,  6,
-	57, 320, 144,  5,
-	58, 320, 144,  6,
-	59, 320, 144,  6,
-	60, 320, 144,  5,
-	61, 320, 144,  0,
-	62, 320, 144, 12,
-	63, 320, 144,  6,
-	64, 320, 144,  2,
-	65, 320, 144,  6,
-	66, 320, 144, 33,
-	67, 320, 144,  4,
-	68, 320, 144,  6,
-	69, 320, 144, 23,
-	70, 320, 144,  0, /* Difference */
-	71,   0,   0,  0,
-	72,   0,   0,  0,
-	73,   0,   0,  0,
-	74,   0,   0,  0,
-	75,   0,   0,  0,
-	76,   0,   0,  0,
-	77,   0,   0,  0,
-	78,   0,   0,  0,
-	79, 320, 144,  6,
-	80,   0,   0,  0,
-	81, 320, 144,  0,
-	82,   0,   0,  0,
-	83,   0,   0,  0,
-	84,   0,   0,  0,
-	85,   0,   0,  0,
-	86, 320, 144, 11,
-	87, 320, 144,  3,
-};
-
 uint32 r_offset (p_resource res) {
 	return res->offset[ISO];
 }
@@ -842,13 +751,40 @@
 			write_clong(output, 0, &rlen);
 			write_cword(output, 'OR', &rlen); /* RO - Room */
 
-			/* Hard code room header for now */
+			uint32 roomOffs = ftell(input);
+			uint16 numObjects = 0, roomWidth = 0, roomHeight = 0;
+			while (1) {
+				uint16 slen;
+				uint8 stype;
+
+				slen = read_cword(input, &i);
+				if (slen == 0xFFFF) {
+					break;
+				}
+				stype = read_cbyte(input, &i);
+				slen -= 3;
+				switch (stype) {
+				case 0x07:
+					read_cbyte(input, &i);
+					roomWidth = read_cbyte(input, &i) * 8;
+					roomHeight = read_cbyte(input, &i) * 8;
+					slen -= 3;
+					break;
+				case 0x0E:
+					numObjects += 1;
+					break;
+				default:
+					break;
+				}
+				fseek(input, slen, SEEK_CUR);
+			}
 			write_clong(output, 0xC, &rlen);
 			write_cword(output, 'DH', &rlen);
-			write_cword(output, roomHeader[rid * 4 + 1], &rlen);
-			write_cword(output, roomHeader[rid * 4 + 2], &rlen);
-			write_cword(output, roomHeader[rid * 4 + 3], &rlen);
+			write_cword(output, roomWidth, &rlen);
+			write_cword(output, roomHeight, &rlen);
+			write_cword(output, numObjects, &rlen);
 
+			fseek(input, roomOffs, SEEK_SET);
 			while (1) {
 				uint16 slen;
 				uint8 stype;
@@ -859,18 +795,16 @@
 				stype = read_cbyte(input, &i);
 				slen -= 3;
 				switch (stype) {
-				/* HD, SL, NL, PA - are current unknowns */
+				/* SL, NL - are current unknowns */
 				case 0x06:
-					/* Resource type exists in all rooms */
 					write_clong(output, slen + 6, &rlen);
-					write_cword(output, '6U', &rlen); /* Unknown */
+					write_cword(output, 'AP', &rlen); /* PA - palettes */
 					for (j = 0; j < slen; j++)
 						write_cbyte(output, read_cbyte(input, &i), &rlen);
 					break;
 				case 0x07:
-					/* Resource type exists in all rooms */
 					write_clong(output, slen + 6, &rlen);
-					write_cword(output, '7U', &rlen); /* Unknown */
+					write_cword(output, 'MB', &rlen); /* BM - bitmap */
 					for (j = 0; j < slen; j++)
 						write_cbyte(output, read_cbyte(input, &i), &rlen);
 					break;
@@ -890,7 +824,7 @@
 					break;
 				case 0x08:
 					write_clong(output, slen + 6, &rlen);
-					write_cword(output, 'MB', &rlen); /* BM - bitmap */
+					write_cword(output, 'LT', &rlen); /* TL - tiles */
 					for (j = 0; j < slen; j++)
 						write_cbyte(output, read_cbyte(input, &i), &rlen);
 					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