[Scummvm-cvs-logs] SF.net SVN: scummvm:[44173] scummvm/trunk/engines/sci

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Thu Sep 17 19:00:51 CEST 2009


Revision: 44173
          http://scummvm.svn.sourceforge.net/scummvm/?rev=44173&view=rev
Author:   fingolfin
Date:     2009-09-17 17:00:36 +0000 (Thu, 17 Sep 2009)

Log Message:
-----------
SCI: Add EngineState::_kernel member for convenience

Modified Paths:
--------------
    scummvm/trunk/engines/sci/console.cpp
    scummvm/trunk/engines/sci/engine/game.cpp
    scummvm/trunk/engines/sci/engine/kernel.h
    scummvm/trunk/engines/sci/engine/kgraphics.cpp
    scummvm/trunk/engines/sci/engine/kmisc.cpp
    scummvm/trunk/engines/sci/engine/kmovement.cpp
    scummvm/trunk/engines/sci/engine/savegame.cpp
    scummvm/trunk/engines/sci/engine/scriptdebug.cpp
    scummvm/trunk/engines/sci/engine/selector.cpp
    scummvm/trunk/engines/sci/engine/state.cpp
    scummvm/trunk/engines/sci/engine/state.h
    scummvm/trunk/engines/sci/engine/vm.cpp
    scummvm/trunk/engines/sci/sci.cpp

Modified: scummvm/trunk/engines/sci/console.cpp
===================================================================
--- scummvm/trunk/engines/sci/console.cpp	2009-09-17 16:56:36 UTC (rev 44172)
+++ scummvm/trunk/engines/sci/console.cpp	2009-09-17 17:00:36 UTC (rev 44173)
@@ -360,8 +360,8 @@
 }
 
 const char *selector_name(EngineState *s, int selector) {
-	if (selector >= 0 && selector < (int)((SciEngine*)g_engine)->getKernel()->getSelectorNamesSize())
-		return ((SciEngine*)g_engine)->getKernel()->getSelectorName(selector).c_str();
+	if (selector >= 0 && selector < (int)s->_kernel->getSelectorNamesSize())
+		return s->_kernel->getSelectorName(selector).c_str();
 	else
 		return "--INVALID--";
 }
@@ -3132,7 +3132,7 @@
 	int have_rects = 0;
 	Common::Rect nsrect, nsrect_clipped, brrect;
 
-	if (lookup_selector(s->segMan, pos, ((SciEngine*)g_engine)->getKernel()->_selectorCache.nsBottom, NULL) == kSelectorVariable) {
+	if (lookup_selector(s->segMan, pos, s->_kernel->_selectorCache.nsBottom, NULL) == kSelectorVariable) {
 		GETRECT(nsLeft, nsRight, nsBottom, nsTop);
 		GETRECT(lsLeft, lsRight, lsBottom, lsTop);
 		GETRECT(brLeft, brRight, brBottom, brTop);
@@ -3146,7 +3146,7 @@
 	x = GET_SELECTOR(pos, x);
 	y = GET_SELECTOR(pos, y);
 	priority = GET_SELECTOR(pos, priority);
-	if (((SciEngine*)g_engine)->getKernel()->_selectorCache.z > 0) {
+	if (s->_kernel->_selectorCache.z > 0) {
 		z = GET_SELECTOR(pos, z);
 		printf("(%d,%d,%d)\n", x, y, z);
 	} else
@@ -3210,10 +3210,10 @@
 	}
 
 
-	is_view = (lookup_selector(s->segMan, pos, ((SciEngine*)g_engine)->getKernel()->_selectorCache.x, NULL) == kSelectorVariable) &&
-	    (lookup_selector(s->segMan, pos, ((SciEngine*)g_engine)->getKernel()->_selectorCache.brLeft, NULL) == kSelectorVariable) &&
-	    (lookup_selector(s->segMan, pos, ((SciEngine*)g_engine)->getKernel()->_selectorCache.signal, NULL) == kSelectorVariable) &&
-	    (lookup_selector(s->segMan, pos, ((SciEngine*)g_engine)->getKernel()->_selectorCache.nsTop, NULL) == kSelectorVariable);
+	is_view = (lookup_selector(s->segMan, pos, s->_kernel->_selectorCache.x, NULL) == kSelectorVariable) &&
+	    (lookup_selector(s->segMan, pos, s->_kernel->_selectorCache.brLeft, NULL) == kSelectorVariable) &&
+	    (lookup_selector(s->segMan, pos, s->_kernel->_selectorCache.signal, NULL) == kSelectorVariable) &&
+	    (lookup_selector(s->segMan, pos, s->_kernel->_selectorCache.nsTop, NULL) == kSelectorVariable);
 
 	if (!is_view) {
 		printf("Not a dynamic View object.\n");

Modified: scummvm/trunk/engines/sci/engine/game.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/game.cpp	2009-09-17 16:56:36 UTC (rev 44172)
+++ scummvm/trunk/engines/sci/engine/game.cpp	2009-09-17 17:00:36 UTC (rev 44173)
@@ -219,7 +219,7 @@
 
 	s->priority_first = 42; // Priority zone 0 ends here
 
-	if (((SciEngine*)g_engine)->getKernel()->usesOldGfxFunctions())
+	if (s->_kernel->usesOldGfxFunctions())
 		s->priority_last = 200;
 	else
 		s->priority_last = 190;

Modified: scummvm/trunk/engines/sci/engine/kernel.h
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel.h	2009-09-17 16:56:36 UTC (rev 44172)
+++ scummvm/trunk/engines/sci/engine/kernel.h	2009-09-17 17:00:36 UTC (rev 44173)
@@ -193,7 +193,7 @@
 };
 
 #define INV_SEL(_object_, _selector_, _noinvalid_) \
-	s, _object_,  ((SciEngine*)g_engine)->getKernel()->_selectorCache._selector_, _noinvalid_, FAKE_FUNCT_NR, argv, argc, __FILE__, __LINE__
+	s, _object_,  s->_kernel->_selectorCache._selector_, _noinvalid_, FAKE_FUNCT_NR, argv, argc, __FILE__, __LINE__
 /* Kludge for use with invoke_selector(). Used for compatibility with compilers that can't
 ** handle vararg macros.
 */

Modified: scummvm/trunk/engines/sci/engine/kgraphics.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kgraphics.cpp	2009-09-17 16:56:36 UTC (rev 44172)
+++ scummvm/trunk/engines/sci/engine/kgraphics.cpp	2009-09-17 17:00:36 UTC (rev 44173)
@@ -145,7 +145,7 @@
 				return j;
 		return 14; // Maximum
 	} else {
-		if (!((SciEngine*)g_engine)->getKernel()->usesOldGfxFunctions())
+		if (!s->_kernel->usesOldGfxFunctions())
 			return SCI0_VIEW_PRIORITY_14_ZONES(y);
 		else
 			return SCI0_VIEW_PRIORITY(y) == 15 ? 14 : SCI0_VIEW_PRIORITY(y);
@@ -153,7 +153,7 @@
 }
 
 int _find_priority_band(EngineState *s, int nr) {
-	if (!((SciEngine*)g_engine)->getKernel()->usesOldGfxFunctions() && (nr < 0 || nr > 14)) {
+	if (!s->_kernel->usesOldGfxFunctions() && (nr < 0 || nr > 14)) {
 		if (nr == 15)
 			return 0xffff;
 		else {
@@ -162,7 +162,7 @@
 		return 0;
 	}
 
-	if (((SciEngine*)g_engine)->getKernel()->usesOldGfxFunctions() && (nr < 0 || nr > 15)) {
+	if (s->_kernel->usesOldGfxFunctions() && (nr < 0 || nr > 15)) {
 		warning("Attempt to get priority band %d", nr);
 		return 0;
 	}
@@ -172,7 +172,7 @@
 	else {
 		int retval;
 
-		if (!((SciEngine*)g_engine)->getKernel()->usesOldGfxFunctions())
+		if (!s->_kernel->usesOldGfxFunctions())
 			retval = SCI0_PRIORITY_BAND_FIRST_14_ZONES(nr);
 		else
 			retval = SCI0_PRIORITY_BAND_FIRST(nr);
@@ -979,7 +979,7 @@
 	gfx_color_t transparent = s->wm_port->_bgcolor;
 	int picFlags = DRAWPIC01_FLAG_FILL_NORMALLY;
 
-	if (((SciEngine*)g_engine)->getKernel()->usesOldGfxFunctions())
+	if (s->_kernel->usesOldGfxFunctions())
 		add_to_pic = (argc > 2) ? argv[2].toSint16() : false;
 
 	dp.nr = argv[0].toSint16();
@@ -1030,7 +1030,7 @@
 
 	s->priority_first = 42;
 
-	if (((SciEngine*)g_engine)->getKernel()->usesOldGfxFunctions())
+	if (s->_kernel->usesOldGfxFunctions())
 		s->priority_last = 200;
 	else
 		s->priority_last = 190;
@@ -1054,7 +1054,7 @@
 	x = (int16)GET_SEL32V(object, x);
 	original_y = y = (int16)GET_SEL32V(object, y);
 
-	if (((SciEngine*)g_engine)->getKernel()->_selectorCache.z > -1)
+	if (s->_kernel->_selectorCache.z > -1)
 		z = (int16)GET_SEL32V(object, z);
 	else
 		z = 0;
@@ -1105,7 +1105,7 @@
 	SegManager *segMan = s->segMan;
 	Common::Rect absrect = set_base(s, object);
 
-	if (lookup_selector(s->segMan, object, ((SciEngine*)g_engine)->getKernel()->_selectorCache.brLeft, NULL, NULL) != kSelectorVariable)
+	if (lookup_selector(s->segMan, object, s->_kernel->_selectorCache.brLeft, NULL, NULL) != kSelectorVariable)
 		return; // non-fatal
 
 	// Note: there was a check here for a very old version of SCI, which supposedly needed
@@ -1183,7 +1183,7 @@
 	x = (int16)GET_SEL32V(object, x);
 	y = (int16)GET_SEL32V(object, y);
 
-	if (((SciEngine*)g_engine)->getKernel()->_selectorCache.z > -1)
+	if (s->_kernel->_selectorCache.z > -1)
 		z = (int16)GET_SEL32V(object, z);
 	else
 		z = 0;
@@ -1208,7 +1208,7 @@
 	SegManager *segMan = s->segMan;
 	Common::Rect absrect = get_nsrect(s, object, 0);
 
-	if (lookup_selector(s->segMan, object, ((SciEngine*)g_engine)->getKernel()->_selectorCache.nsTop, NULL, NULL) != kSelectorVariable) {
+	if (lookup_selector(s->segMan, object, s->_kernel->_selectorCache.nsTop, NULL, NULL) != kSelectorVariable) {
 		return;
 	} // This isn't fatal
 
@@ -1710,7 +1710,7 @@
 		 * if ((widget->signal & (_K_VIEW_SIG_FLAG_PRIVATE | _K_VIEW_SIG_FLAG_REMOVE | _K_VIEW_SIG_FLAG_NO_UPDATE)) == _K_VIEW_SIG_FLAG_PRIVATE) {
 		 */
 		if ((widget->signal & (_K_VIEW_SIG_FLAG_REMOVE | _K_VIEW_SIG_FLAG_NO_UPDATE)) == 0) {
-			int has_nsrect = lookup_selector(s->segMan, obj, ((SciEngine*)g_engine)->getKernel()->_selectorCache.nsBottom, NULL, NULL) == kSelectorVariable;
+			int has_nsrect = lookup_selector(s->segMan, obj, s->_kernel->_selectorCache.nsBottom, NULL, NULL) == kSelectorVariable;
 
 			if (has_nsrect) {
 				int temp;
@@ -1732,7 +1732,7 @@
 			}
 #ifdef DEBUG_LSRECT
 			else
-				fprintf(stderr, "Not lsRecting %04x:%04x because %d\n", PRINT_REG(obj), lookup_selector(s->segMan, obj, ((SciEngine*)g_engine)->getKernel()->_selectorCache.nsBottom, NULL, NULL));
+				fprintf(stderr, "Not lsRecting %04x:%04x because %d\n", PRINT_REG(obj), lookup_selector(s->segMan, obj, s->_kernel->_selectorCache.nsBottom, NULL, NULL));
 #endif
 
 			if (widget->signal & _K_VIEW_SIG_FLAG_HIDDEN)
@@ -1888,7 +1888,7 @@
 	loop = oldloop = sign_extend_byte(GET_SEL32V(obj, loop));
 	cel = oldcel = sign_extend_byte(GET_SEL32V(obj, cel));
 
-	if (((SciEngine*)g_engine)->getKernel()->_selectorCache.palette)
+	if (s->_kernel->_selectorCache.palette)
 		palette = GET_SEL32V(obj, palette);
 	else
 		palette = 0;
@@ -1909,7 +1909,7 @@
 	}
 
 	ObjVarRef under_bitsp;
-	if (lookup_selector(s->segMan, obj, ((SciEngine*)g_engine)->getKernel()->_selectorCache.underBits, &(under_bitsp), NULL) != kSelectorVariable) {
+	if (lookup_selector(s->segMan, obj, s->_kernel->_selectorCache.underBits, &(under_bitsp), NULL) != kSelectorVariable) {
 		under_bitsp.obj = NULL_REG;
 		under_bits = NULL_REG;
 		debugC(2, kDebugLevelGraphics, "Object at %04x:%04x has no underBits\n", PRINT_REG(obj));
@@ -1917,7 +1917,7 @@
 		under_bits = *under_bitsp.getPointer(s->segMan);
 
 	ObjVarRef signalp;
-	if (lookup_selector(s->segMan, obj, ((SciEngine*)g_engine)->getKernel()->_selectorCache.signal, &(signalp), NULL) != kSelectorVariable) {
+	if (lookup_selector(s->segMan, obj, s->_kernel->_selectorCache.signal, &(signalp), NULL) != kSelectorVariable) {
 		signalp.obj = NULL_REG;
 		signal = 0;
 		debugC(2, kDebugLevelGraphics, "Object at %04x:%04x has no signal selector\n", PRINT_REG(obj));
@@ -2012,7 +2012,7 @@
 	while (view) {
 		reg_t obj = make_reg(view->_ID, view->_subID);
 		int priority, _priority;
-		int has_nsrect = (view->_ID <= 0) ? 0 : lookup_selector(s->segMan, obj, ((SciEngine*)g_engine)->getKernel()->_selectorCache.nsBottom, NULL, NULL) == kSelectorVariable;
+		int has_nsrect = (view->_ID <= 0) ? 0 : lookup_selector(s->segMan, obj, s->_kernel->_selectorCache.nsBottom, NULL, NULL) == kSelectorVariable;
 		int oldsignal = view->signal;
 
 		_k_set_now_seen(s, obj);

Modified: scummvm/trunk/engines/sci/engine/kmisc.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kmisc.cpp	2009-09-17 16:56:36 UTC (rev 44172)
+++ scummvm/trunk/engines/sci/engine/kmisc.cpp	2009-09-17 17:00:36 UTC (rev 44173)
@@ -260,7 +260,7 @@
 reg_t kStub(EngineState *s, int funct_nr, int argc, reg_t *argv) {
 	char tmpbuf[256];
 	snprintf(tmpbuf, sizeof(tmpbuf), "Unimplemented kernel function: 0x%02x (%s) (",
-					funct_nr, ((SciEngine*)g_engine)->getKernel()->getKernelName(funct_nr).c_str());
+					funct_nr, s->_kernel->getKernelName(funct_nr).c_str());
 
 	for (int i = 0; i < argc; i++) {
 		char tmpbuf2[20];

Modified: scummvm/trunk/engines/sci/engine/kmovement.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kmovement.cpp	2009-09-17 16:56:36 UTC (rev 44172)
+++ scummvm/trunk/engines/sci/engine/kmovement.cpp	2009-09-17 17:00:36 UTC (rev 44173)
@@ -269,7 +269,7 @@
 			return;
 		}
 
-		if (lookup_selector(s->segMan, motion_class, ((SciEngine*)g_engine)->getKernel()->_selectorCache.doit, NULL, &fptr) != kSelectorMethod) {
+		if (lookup_selector(s->segMan, motion_class, s->_kernel->_selectorCache.doit, NULL, &fptr) != kSelectorMethod) {
 			warning("bresenham_autodetect failed");
 			handle_movecnt = INCREMENT_MOVECNT; // Most games do this, so best guess
 			return;
@@ -365,7 +365,7 @@
 
 	debugC(2, kDebugLevelBresen, "New data: (x,y)=(%d,%d), di=%d\n", x, y, bdi);
 
-	if (((SciEngine*)g_engine)->getKernel()->_selectorCache.cantBeHere != -1) {
+	if (s->_kernel->_selectorCache.cantBeHere != -1) {
 		invoke_selector(INV_SEL(client, cantBeHere, kStopOnInvalidSelector), 0);
 		s->r_acc = make_reg(0, !s->r_acc.offset);
 	} else {

Modified: scummvm/trunk/engines/sci/engine/savegame.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/savegame.cpp	2009-09-17 16:56:36 UTC (rev 44172)
+++ scummvm/trunk/engines/sci/engine/savegame.cpp	2009-09-17 17:00:36 UTC (rev 44173)
@@ -705,7 +705,7 @@
 	}
 
 	// FIXME: Do in-place loading at some point, instead of creating a new EngineState instance from scratch.
-	retval = new EngineState(s->resMan, s->_flags);
+	retval = new EngineState(s->resMan, s->_kernel, s->_flags);
 
 	// Copy some old data
 	retval->gfx_state = s->gfx_state;

Modified: scummvm/trunk/engines/sci/engine/scriptdebug.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/scriptdebug.cpp	2009-09-17 16:56:36 UTC (rev 44172)
+++ scummvm/trunk/engines/sci/engine/scriptdebug.cpp	2009-09-17 17:00:36 UTC (rev 44173)
@@ -108,7 +108,7 @@
 	uint opcode;
 	int bytecount = 1;
 	int i = 0;
-	Kernel *kernel = ((SciEngine*)g_engine)->getKernel();
+	Kernel *kernel = s->_kernel;
 
 	if (!mobj) {
 		warning("Disassembly failed: Segment %04x non-existant or not a script", pos.segment);

Modified: scummvm/trunk/engines/sci/engine/selector.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/selector.cpp	2009-09-17 16:56:36 UTC (rev 44172)
+++ scummvm/trunk/engines/sci/engine/selector.cpp	2009-09-17 17:00:36 UTC (rev 44173)
@@ -69,7 +69,7 @@
 
 	if (slc_type == kSelectorNone) {
 		warning("Selector '%s' of object at %04x:%04x could not be invoked (%s L%d)",
-		         ((SciEngine*)g_engine)->getKernel()->getSelectorName(selector_id).c_str(), PRINT_REG(object), fname, line);
+		         s->_kernel->getSelectorName(selector_id).c_str(), PRINT_REG(object), fname, line);
 		if (noinvalid == kStopOnInvalidSelector)
 			error("[Kernel] Not recoverable: VM was halted");
 		return 1;

Modified: scummvm/trunk/engines/sci/engine/state.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/state.cpp	2009-09-17 16:56:36 UTC (rev 44172)
+++ scummvm/trunk/engines/sci/engine/state.cpp	2009-09-17 17:00:36 UTC (rev 44173)
@@ -30,8 +30,8 @@
 
 namespace Sci {
 
-EngineState::EngineState(ResourceManager *res, uint32 flags)
-: resMan(res), _flags(flags), _dirseeker(this) {
+EngineState::EngineState(ResourceManager *res, Kernel *kernel, uint32 flags)
+: resMan(res), _kernel(kernel), _flags(flags), _dirseeker(this) {
 
 	game_version = 0;
 
@@ -180,7 +180,7 @@
 kLanguage EngineState::getLanguage() {
 	kLanguage lang = K_LANG_ENGLISH;
 
-	if (((SciEngine*)g_engine)->getKernel()->_selectorCache.printLang != -1) {
+	if (_kernel->_selectorCache.printLang != -1) {
 		lang = (kLanguage)GET_SEL32V(this->game_obj, printLang);
 
 		if ((getSciVersion() == SCI_VERSION_1_1) || (lang == K_LANG_NONE)) {
@@ -227,7 +227,7 @@
 	kLanguage lang = getLanguage();
 	kLanguage subLang = K_LANG_NONE;
 
-	if (((SciEngine*)g_engine)->getKernel()->_selectorCache.subtitleLang != -1)
+	if (_kernel->_selectorCache.subtitleLang != -1)
 		subLang = (kLanguage)GET_SEL32V(this->game_obj, subtitleLang);
 
 	Common::String retval = getLanguageString(str, lang);
@@ -273,7 +273,7 @@
 		reg_t soundClass;
 
 		if (!parse_reg_t(this, "?Sound", &soundClass)) {
-			int sum = methodChecksum(soundClass, ((SciEngine *)g_engine)->getKernel()->_selectorCache.play, -6, 6);
+			int sum = methodChecksum(soundClass, _kernel->_selectorCache.play, -6, 6);
 
 			switch(sum) {
 			case 0x1B2: // SCI0
@@ -310,7 +310,7 @@
 
 SciVersion EngineState::detectSetCursorType() {
 	if (_setCursorType == SCI_VERSION_AUTODETECT) {
-		int sum = methodChecksum(game_obj, ((SciEngine *)g_engine)->getKernel()->_selectorCache.setCursor, 0, 21);
+		int sum = methodChecksum(game_obj, _kernel->_selectorCache.setCursor, 0, 21);
 
 		if ((sum == 0x4D5) || (sum == 0x552)) {
 			// Standard setCursor

Modified: scummvm/trunk/engines/sci/engine/state.h
===================================================================
--- scummvm/trunk/engines/sci/engine/state.h	2009-09-17 16:56:36 UTC (rev 44172)
+++ scummvm/trunk/engines/sci/engine/state.h	2009-09-17 17:00:36 UTC (rev 44173)
@@ -158,7 +158,7 @@
 
 struct EngineState : public Common::Serializable {
 public:
-	EngineState(ResourceManager *res, uint32 flags);
+	EngineState(ResourceManager *res, Kernel *kernel, uint32 flags);
 	virtual ~EngineState();
 
 	virtual void saveLoadWithSerializer(Common::Serializer &ser);
@@ -166,6 +166,7 @@
 	kLanguage getLanguage();
 public:
 	ResourceManager *resMan; /**< The resource manager */
+	Kernel *_kernel;
 
 	const uint32 _flags;			/**< Specific game flags */
 

Modified: scummvm/trunk/engines/sci/engine/vm.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/vm.cpp	2009-09-17 16:56:36 UTC (rev 44172)
+++ scummvm/trunk/engines/sci/engine/vm.cpp	2009-09-17 17:00:36 UTC (rev 44173)
@@ -301,7 +301,7 @@
 			Breakpoint *bp;
 			char method_name [256];
 
-			sprintf(method_name, "%s::%s", s->segMan->getObjectName(send_obj), ((SciEngine *)g_engine)->getKernel()->getSelectorName(selector).c_str());
+			sprintf(method_name, "%s::%s", s->segMan->getObjectName(send_obj), s->_kernel->getSelectorName(selector).c_str());
 
 			bp = s->bp_list;
 			while (bp) {
@@ -936,12 +936,10 @@
 				s->restAdjust = 0; // We just used up the scriptState.restAdjust, remember?
 			}
 
-			Kernel *kernel = ((SciEngine *)g_engine)->getKernel();
-
-			if (opparams[0] >= (int)kernel->_kernelFuncs.size()) {
+			if (opparams[0] >= (int)s->_kernel->_kernelFuncs.size()) {
 				error("Invalid kernel function 0x%x requested", opparams[0]);
 			} else {
-				const KernelFuncWithSignature &kfun = kernel->_kernelFuncs[opparams[0]];
+				const KernelFuncWithSignature &kfun = s->_kernel->_kernelFuncs[opparams[0]];
 				int argc = ASSERT_ARITHMETIC(scriptState.xs->sp[0]);
 
 				if (!oldScriptHeader)
@@ -1768,7 +1766,7 @@
 			script_init_engine(s);
 			game_init(s);
 			sfx_reset_player();
-			_init_stack_base_with_selector(s, ((SciEngine *)g_engine)->getKernel()->_selectorCache.play);
+			_init_stack_base_with_selector(s, s->_kernel->_selectorCache.play);
 
 			send_selector(s, s->game_obj, s->game_obj, s->stack_base, 2, s->stack_base);
 
@@ -1787,7 +1785,7 @@
 					debugC(2, kDebugLevelVM, "Restarting with replay()\n");
 					s->_executionStack.clear(); // Restart with replay
 
-					_init_stack_base_with_selector(s, ((SciEngine *)g_engine)->getKernel()->_selectorCache.replay);
+					_init_stack_base_with_selector(s, s->_kernel->_selectorCache.replay);
 
 					send_selector(s, s->game_obj, s->game_obj, s->stack_base, 2, s->stack_base);
 				}
@@ -1806,7 +1804,7 @@
 	EngineState *s = *_s;
 
 	debugC(2, kDebugLevelVM, "Calling %s::play()\n", s->_gameName.c_str());
-	_init_stack_base_with_selector(s, ((SciEngine *)g_engine)->getKernel()->_selectorCache.play); // Call the play selector
+	_init_stack_base_with_selector(s, s->_kernel->_selectorCache.play); // Call the play selector
 
 	// Now: Register the first element on the execution stack-
 	if (!send_selector(s, s->game_obj, s->game_obj, s->stack_base, 2, s->stack_base)) {

Modified: scummvm/trunk/engines/sci/sci.cpp
===================================================================
--- scummvm/trunk/engines/sci/sci.cpp	2009-09-17 16:56:36 UTC (rev 44172)
+++ scummvm/trunk/engines/sci/sci.cpp	2009-09-17 17:00:36 UTC (rev 44173)
@@ -138,7 +138,7 @@
 	_kernel = new Kernel(_resMan);
 	_vocabulary = new Vocabulary(_resMan);
 
-	_gamestate = new EngineState(_resMan, flags);
+	_gamestate = new EngineState(_resMan, _kernel, flags);
 
 	if (script_init_engine(_gamestate))
 		return Common::kUnknownError;


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