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

kirben at users.sourceforge.net kirben at users.sourceforge.net
Sat Mar 3 13:50:03 CET 2007


Revision: 25950
          http://scummvm.svn.sourceforge.net/scummvm/?rev=25950&view=rev
Author:   kirben
Date:     2007-03-03 04:50:01 -0800 (Sat, 03 Mar 2007)

Log Message:
-----------
Add BM resource type and a hard coded room header for now.,

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

Modified: tools/trunk/extract_loom_tg16.c
===================================================================
--- tools/trunk/extract_loom_tg16.c	2007-03-03 10:10:46 UTC (rev 25949)
+++ tools/trunk/extract_loom_tg16.c	2007-03-03 12:50:01 UTC (rev 25950)
@@ -691,6 +691,97 @@
 	{ {0x2B4000}, {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];
 }
@@ -716,7 +807,18 @@
 		rlen = r_length(res);
 		writeUint16LE(output,(uint16)(rlen+4));
 		writeUint16LE(output,0);
-		for (i = 0; i < rlen; i++)
+
+		/* Skip 4 bytes */
+		read_cword(input,&i);
+		read_cword(input,&i);
+
+		/* Write expected charset header */
+		writeByte(output, 0x63);
+		writeByte(output, 0x01);
+		writeByte(output, 0x80);
+		writeByte(output, 0x08);
+
+		for (i = 0; i < rlen - 4; i++)
 			writeByte(output,readByte(input));
 		break;
 	case RES_GLOBDATA:
@@ -741,9 +843,6 @@
 			junk = read_cbyte(input,&i);
 			rtype = read_cbyte(input,&i);
 			rid = read_cbyte(input,&i);
-/*
-			notice("room res len %04X, junk %02X, type %02X, id %02X",rlen,junk,rtype,rid);
-*/
 			if (rlen != r_length(res))
 				error("extract_resource(room) - length mismatch while extracting resource (was %04X, expected %04X)",rlen,r_length(res));
 			if (rtype != 0x01)
@@ -752,30 +851,62 @@
 			rlen = 0;
 			write_clong(output,0,&rlen);
 			write_cword(output,'OR',&rlen);	/* RO - Room */
+
+			/* Hard code room header for now */
+			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);
+
 			while (1) {
 				uint16 slen;
 				uint8 stype;
-/* BM, HD, SL, NL, PA - current unknowns
-				notice("reading local resource at offset %04X of %04X",i,len);
-*/
+
 				slen = read_cword(input,&i);
 				if (slen == 0xFFFF)
 					break;
 				stype = read_cbyte(input,&i);
 				slen -= 3;
-				switch (stype)
-				{
-/*
-				case 0x00:	break;
-				case 0x01:	break;
-				case 0x02:	break;
-				case 0x03:	break;
-				case 0x04:	break;
-				case 0x05:	break;
-				case 0x06:	break;
-				case 0x07:	break;
-				case 0x08:	break;	BM?
-*/
+				switch (stype) {
+				/* HD, SL, NL, PA - are current unknowns */
+				case 0x05:
+					/* 61 resources, specific to room 1 */
+					write_clong(output,slen+6,&rlen);
+					write_cword(output,'5U',&rlen);	/* Unknown */
+					for (j = 0; j < slen; j++)
+						write_cbyte(output,read_cbyte(input,&i),&rlen);
+					break;
+				case 0x06:
+					/* Resource type exists in all rooms */
+					write_clong(output,slen+6,&rlen);
+					write_cword(output,'6U',&rlen);	/* Unknown */
+					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 */
+					for (j = 0; j < slen; j++)
+						write_cbyte(output,read_cbyte(input,&i),&rlen);
+					break;
+				case 0x0A:
+					/* Resource type doesn't exists in all rooms */
+					write_clong(output,slen+6,&rlen);
+					write_cword(output,'AU',&rlen);	/* Unknown */
+					for (j = 0; j < slen; j++)
+						write_cbyte(output,read_cbyte(input,&i),&rlen);
+					break;
+
+
+
+				case 0x08:
+					write_clong(output,slen+6,&rlen);
+					write_cword(output,'MB',&rlen);	/* BM - bitmap */
+					for (j = 0; j < slen; j++)
+						write_cbyte(output,read_cbyte(input,&i),&rlen);
+					break;
 				case 0x09:
 					read_cword(input,&i);	slen -= 2;	/* skip first 2 bytes */
 					write_clong(output,slen+6,&rlen);
@@ -783,10 +914,6 @@
 					for (j = 0; j < slen; j++)
 						write_cbyte(output,read_cbyte(input,&i),&rlen);
 					break;
-/*
-				case 0x0A:
-					break;
-*/
 				case 0x0B:
 					write_clong(output,slen+6,&rlen);
 					write_cword(output,'NE',&rlen);	/* EN - entrance script */
@@ -825,7 +952,7 @@
 					break;
 				default:
 					fseek(input,slen,SEEK_CUR);
-					warning("extract_resource(room) - unknown resource tag encountered: len %04X type %02X",slen,stype);
+					error("extract_resource(room) - unknown resource tag encountered: len %04X type %02X",slen,stype);
 				}
 			}
 			fseek(output,off,SEEK_SET);


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