[Scummvm-cvs-logs] CVS: scummvm/scumm object.cpp,1.27,1.28 script_v8.cpp,2.29,2.30 scumm.h,1.97,1.98

James Brown ender at users.sourceforge.net
Tue Dec 24 20:31:07 CET 2002


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv29674/scumm

Modified Files:
	object.cpp script_v8.cpp scumm.h 
Log Message:
Skeleton for hacky font support using Smush's FontRenderer. Doesn't work (uncomment the loadFont line in script_v8 to test). 
Aquadran, where are you? :)



Index: object.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/object.cpp,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- object.cpp	25 Dec 2002 03:48:27 -0000	1.27
+++ object.cpp	25 Dec 2002 04:30:23 -0000	1.28
@@ -1326,7 +1326,7 @@
 	if (!bomp)
 		error("object %d is not a blast object", eo->number);
 
-	hexdump(bomp,32);
+	//hexdump(bomp,32);
 
 	if (_features & GF_AFTER_V8) {
 		bdd.srcwidth = READ_LE_UINT32(&((BompHeader *)bomp)->v8.width);

Index: script_v8.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v8.cpp,v
retrieving revision 2.29
retrieving revision 2.30
diff -u -d -r2.29 -r2.30
--- script_v8.cpp	25 Dec 2002 03:48:27 -0000	2.29
+++ script_v8.cpp	25 Dec 2002 04:30:23 -0000	2.30
@@ -26,6 +26,9 @@
 #include "sound.h"
 #include "verbs.h"
 
+#include "smush/player.h"
+#include "smush/frenderer.h"
+
 /*
  * NO, we do NOT support CMI yet :-) This file is mostly a placeholder and a place
  * to grow real support in. For now, only a few opcodes are implemented, and they
@@ -34,6 +37,17 @@
 
 #define OPCODE(x)	{ &Scumm_v8::x, #x }
 
+// FIXME: Copied from smush/player.cpp - this should probably go somewhere sensible :)
+static FontRenderer *loadFont(const char * file, const char * directory, bool original = false) {
+#ifdef DEBUG
+        debug(5, "loading font from \"%s\"", file);
+#endif
+        FontRenderer * fr = new FontRenderer(original);
+        SmushPlayer p(fr, false, false);
+        p.play(file, directory);
+        return fr;
+}
+
 void Scumm_v8::setupOpcodes()
 {
 	// TODO: any of the o6_ entries are potentially wrong and pure guesses :-)
@@ -493,7 +507,8 @@
 		break;
 	case 0xCD:		// SO_PRINT_CHARSET Set print character set
 		// FIXME - TODO
-		pop();
+		_string[m].charset = pop();
+		printf("so_print_charset(%d)\n", _string[m].charset);
 		break;
 	case 0xCE:
 		_string[m].center = false;
@@ -506,15 +521,23 @@
 	case 0xD0:		// SO_PRINT_MUMBLE
 		error("decodeParseString: SO_PRINT_MUMBLE");
 		break;
-	case 0xD1:
+	case 0xD1: {
 		// TODO - FIXME
 		_messagePtr = _scriptPointer;
 
+		Point screenSize(_realHeight, _realWidth);
 		byte buffer[1024];
 		_msgPtrToAdd = buffer;
 		_scriptPointer = _messagePtr = addMessageToStack(_messagePtr);
+
+		if (_fr[_string[m].charset] != NULL) {
+			_fr[_string[m].charset]->drawStringAbsolute((const char*)buffer, (char*)virtscr[0].screenPtr, screenSize, (int16)_string[m].xpos, (int16)_string[m].ypos);
+			printf("Drawn message(%d)\n", m);
+		}
+
 //		printf("Message(%d): '%s'\n", m, buffer);
 		break;
+	}
 	case 0xD2:		// SO_PRINT_WRAP Set print wordwrap
 		error("decodeParseString: SO_PRINT_MUMBLE");
 		break;
@@ -729,11 +752,20 @@
 	case 0xE6:		// SO_CURSOR_TRANSPARENT Set cursor transparent color
 		makeCursorColorTransparent(pop());
 		break;
-	case 0xE7:		// SO_CHARSET_SET
+	case 0xE7: {		// SO_CHARSET_SET
 		// FIXME - TODO
-		pop();
-//		initCharset(pop());
+		int charset = pop();
+		if (_fr[charset] == NULL) {
+			char fontname[255];
+			sprintf(fontname, "resource/font%d.nut", charset);
+
+//			_fr[charset] = loadFont(fontname, getGameDataPath(), true);
+
+			if (!_fr[charset])
+				warning("Failed to load font %d from %s%s\n", charset, getGameDataPath(), fontname);
+		}
 		break;
+	}
 	case 0xE8:		// SO_CHARSET_COLOR
 		getStackList(args, sizeof(args) / sizeof(args[0]));
 		for (i = 0; i < 16; i++)
@@ -1125,6 +1157,7 @@
 	// TODO
 	int16 args[30];
 	getStackList(args, sizeof(args) / sizeof(args[0]));
+	warning("o8_kludge %d\n", args[0]);
 
 	switch (args[0]) {
 	case 11:
@@ -1177,7 +1210,7 @@
 	// TODO
 	int16 args[30];
 	getStackList(args, sizeof(args) / sizeof(args[0]));
-
+	warning("o8_kludge2 %d\n", args[0]);
 	switch (args[0]) {
 	case 0xCE:		// getRGBSlot
 	case 0xD3:		// getKeyState

Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.97
retrieving revision 1.98
diff -u -d -r1.97 -r1.98
--- scumm.h	25 Dec 2002 03:48:27 -0000	1.97
+++ scumm.h	25 Dec 2002 04:30:23 -0000	1.98
@@ -31,6 +31,7 @@
 #include "common/timer.h"
 #include "common/util.h"
 
+class FontRenderer;
 class GameDetector;
 class NewGui;
 class Dialog;
@@ -679,6 +680,9 @@
 	StringTab _string[6];
 	void actorTalk();
 	void stopTalk();	
+
+	/* FIXME: This should not be here, probably. Hack for CMI v8 fonts */
+	FontRenderer *_fr[4];
 
 	/* Akos Class */
 





More information about the Scummvm-git-logs mailing list