[Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.15,2.16 script_v8.cpp,2.33,2.34 scumm.h,1.101,1.102

James Brown ender at users.sourceforge.net
Wed Dec 25 06:32:02 CET 2002


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

Modified Files:
	intern.h script_v8.cpp scumm.h 
Log Message:
Clean up the hack. But it's still kinda a hack. Er. :)


Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.15
retrieving revision 2.16
diff -u -d -r2.15 -r2.16
--- intern.h	25 Dec 2002 00:04:12 -0000	2.15
+++ intern.h	25 Dec 2002 14:31:17 -0000	2.16
@@ -24,7 +24,7 @@
 #define INTERN_H
 
 #include "scumm.h"
-
+class NutRenderer; // V8 Font Renderer
 
 class Scumm_v5 : public Scumm
 {
@@ -405,6 +405,10 @@
 	virtual void writeVar(uint var, int value);
 
 	void decodeParseString(int m, int n);
+
+	/* Version 8 Font Stuff */
+	void loadCharset(int charset);
+	NutRenderer *_fr[4];
 
 	/* Version 8 script opcodes */
 	void o8_mod();

Index: script_v8.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v8.cpp,v
retrieving revision 2.33
retrieving revision 2.34
diff -u -d -r2.33 -r2.34
--- script_v8.cpp	25 Dec 2002 13:51:01 -0000	2.33
+++ script_v8.cpp	25 Dec 2002 14:31:17 -0000	2.34
@@ -36,6 +36,21 @@
 
 #define OPCODE(x)	{ &Scumm_v8::x, #x }
 
+// FIXME: Move this somewhere better :)
+void Scumm_v8::loadCharset(int charset) {
+	char fontname[255];
+	sprintf(fontname, "resource/font%d.nut", charset);
+	warning("Loading charset %s\n", fontname);
+	_fr[charset] = new NutRenderer;
+	if (!(_fr[charset]->loadFont(fontname, (char*)getGameDataPath()))) {
+		delete _fr[charset];
+		_fr[charset] = NULL;
+		return;
+	}
+
+	_fr[charset]->bindDisplay((byte*)virtscr[0].screenPtr, (int32)_realWidth, (int32)_realHeight, (int32)_realWidth);
+}
+
 void Scumm_v8::setupOpcodes()
 {
 	// TODO: any of the o6_ entries are potentially wrong and pure guesses :-)
@@ -496,18 +511,6 @@
 	case 0xCD: {		// SO_PRINT_CHARSET Set print character set
 		// FIXME - TODO
 		int charset = pop();
-		if (_fr[charset] == NULL) {
-			char fontname[255];
-			sprintf(fontname, "resource/font%d.nut", charset);
-			_fr[charset] = new NutRenderer;
-			_fr[charset]->loadFont(fontname, (char*)getGameDataPath());
-			_fr[charset]->bindDisplay((byte*)virtscr[0].screenPtr, (int32)_realWidth, (int32)_realHeight, (int32)_realWidth);
-			if (!_fr[charset])
-				warning("Failed to load font %d from %s%s\n", charset, getGameDataPath(), fontname);
-			else
-				warning("Loaded font %d from %s%s\n", charset, getGameDataPath(), fontname);
-
-		}
 		_string[m].charset = charset;
 	}
 		break;
@@ -523,17 +526,18 @@
 		error("decodeParseString: SO_PRINT_MUMBLE");
 		break;
 	case 0xD1: {
-		// TODO - FIXME
 		_messagePtr = _scriptPointer;
 
 		byte buffer[1024];
 		_msgPtrToAdd = buffer;
 		_scriptPointer = _messagePtr = addMessageToStack(_messagePtr);
 
+		if (_fr[_string[m].charset] == NULL)	// FIXME: Put this elsewhere?
+	                       loadCharset(_string[m].charset);
+
 		if (_fr[_string[m].charset] != NULL) {
 			_fr[_string[m].charset]->drawString((char *)buffer, (int)_string[m].xpos, (int)_string[m].ypos, (unsigned char)_string[m].color, 0);
-		} else {
-			warning("No font loaded in slot %d\n", m);
+			//warning("Printing font loaded in slot %d: %s\n", _string[m].charset, buffer);
 		}
 
 		break;
@@ -754,18 +758,7 @@
 		break;
 	case 0xE7: {		// SO_CHARSET_SET
 		int charset = pop();
-		if (_fr[charset] == NULL) {
-			char fontname[255];
-			sprintf(fontname, "resource/font%d.nut", charset);
-			_fr[charset] = new NutRenderer;
-			_fr[charset]->loadFont(fontname, (char*)getGameDataPath());
-			_fr[charset]->bindDisplay((byte*)virtscr[0].screenPtr, (int32)_realWidth, (int32)_realHeight, (int32)_realWidth);
-			if (!_fr[charset])
-				warning("Failed to load font %d from %s%s\n", charset, getGameDataPath(), fontname);
-			else
-				warning("Loaded font %d from %s%s\n", charset, getGameDataPath(), fontname);
-
-		}
+		loadCharset(charset);
 		break;
 	}
 	case 0xE8:		// SO_CHARSET_COLOR
@@ -897,7 +890,7 @@
 
 	if (subOp == 0x7A) {
 		_curActor = pop();
-		printf("Setting current actor to %d\n", _curActor);
+		//printf("Setting current actor to %d\n", _curActor);
 		return;
 	}
 
@@ -1124,7 +1117,8 @@
 		break;
 	case 0xA6:		// SO_VERB_CHARSET Choose charset for verb
 		// FIXME - TODO
-		pop();
+		vs->charset_nr = pop();
+		//printf("Set to charset %d\n", vs->charset_nr);
 		break;
 	case 0xA7:		// SO_VERB_LINE_SPACING Choose linespacing for verb
 		// FIXME - TODO

Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.101
retrieving revision 1.102
diff -u -d -r1.101 -r1.102
--- scumm.h	25 Dec 2002 13:51:01 -0000	1.101
+++ scumm.h	25 Dec 2002 14:31:17 -0000	1.102
@@ -31,7 +31,6 @@
 #include "common/timer.h"
 #include "common/util.h"
 
-class NutRenderer;
 class GameDetector;
 class NewGui;
 class Dialog;
@@ -680,9 +679,6 @@
 	StringTab _string[6];
 	void actorTalk();
 	void stopTalk();	
-
-	/* FIXME: This should not be here, probably. Hack for CMI v8 fonts */
-	NutRenderer *_fr[4];
 
 	/* Akos Class */
 





More information about the Scummvm-git-logs mailing list