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

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Mon Feb 1 18:04:21 CET 2010


Revision: 47799
          http://scummvm.svn.sourceforge.net/scummvm/?rev=47799&view=rev
Author:   thebluegr
Date:     2010-02-01 17:04:20 +0000 (Mon, 01 Feb 2010)

Log Message:
-----------
Added an initial implementation of kGetHighPlanePri

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/kernel.cpp
    scummvm/trunk/engines/sci/engine/kernel.h
    scummvm/trunk/engines/sci/engine/kernel32.cpp
    scummvm/trunk/engines/sci/graphics/gui32.cpp
    scummvm/trunk/engines/sci/graphics/gui32.h

Modified: scummvm/trunk/engines/sci/engine/kernel.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel.cpp	2010-02-01 16:58:17 UTC (rev 47798)
+++ scummvm/trunk/engines/sci/engine/kernel.cpp	2010-02-01 17:04:20 UTC (rev 47799)
@@ -348,6 +348,7 @@
 	DEFUN("DeletePlane", kDeletePlane, "o"),
 	DEFUN("UpdatePlane", kUpdatePlane, "o"),
 	DEFUN("RepaintPlane", kRepaintPlane, "o"),
+	DEFUN("GetHighPlanePri", kGetHighPlanePri, ""),
 	DEFUN("FrameOut", kFrameOut, ""),
 	DEFUN("ListEachElementDo", kListEachElementDo, "li.*"),
 	DEFUN("ListFirstTrue", kListFirstTrue, "li.*"),

Modified: scummvm/trunk/engines/sci/engine/kernel.h
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel.h	2010-02-01 16:58:17 UTC (rev 47798)
+++ scummvm/trunk/engines/sci/engine/kernel.h	2010-02-01 17:04:20 UTC (rev 47799)
@@ -413,6 +413,7 @@
 reg_t kDeletePlane(EngineState *s, int argc, reg_t *argv);
 reg_t kUpdatePlane(EngineState *s, int argc, reg_t *argv);
 reg_t kRepaintPlane(EngineState *s, int argc, reg_t *argv);
+reg_t kGetHighPlanePri(EngineState *s, int argc, reg_t *argv);
 reg_t kFrameOut(EngineState *s, int argc, reg_t *argv);
 reg_t kListIndexOf(EngineState *s, int argc, reg_t *argv);
 reg_t kListEachElementDo(EngineState *s, int argc, reg_t *argv);

Modified: scummvm/trunk/engines/sci/engine/kernel32.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel32.cpp	2010-02-01 16:58:17 UTC (rev 47798)
+++ scummvm/trunk/engines/sci/engine/kernel32.cpp	2010-02-01 17:04:20 UTC (rev 47799)
@@ -721,6 +721,11 @@
 	return NULL_REG;
 }
 
+reg_t kGetHighPlanePri(EngineState *s, int argc, reg_t *argv) {
+	warning("kGetHighPlanePri: %d", s->_gui32->getHighPlanePri());
+	return make_reg(0, s->_gui32->getHighPlanePri());
+}
+
 reg_t kFrameOut(EngineState *s, int argc, reg_t *argv) {
 	// This kernel call likely seems to be doing the screen updates,
 	// as its called right after a view is updated

Modified: scummvm/trunk/engines/sci/graphics/gui32.cpp
===================================================================
--- scummvm/trunk/engines/sci/graphics/gui32.cpp	2010-02-01 16:58:17 UTC (rev 47798)
+++ scummvm/trunk/engines/sci/graphics/gui32.cpp	2010-02-01 17:04:20 UTC (rev 47799)
@@ -44,7 +44,7 @@
 namespace Sci {
 
 SciGui32::SciGui32(EngineState *state, GfxScreen *screen, GfxPalette *palette, GfxCache *cache, Cursor *cursor)
-	: _s(state), _screen(screen), _palette(palette), _cache(cache), _cursor(cursor) {
+	: _s(state), _screen(screen), _palette(palette), _cache(cache), _cursor(cursor), _highPlanePri(0) {
 
 	_compare = new GfxCompare(_s->_segMan, _s->_kernel, _cache, _screen);
 }
@@ -231,6 +231,9 @@
 
 void SciGui32::addPlane(reg_t object) {
 	_planes.push_back(object);
+	byte planePri = GET_SEL32V(_s->_segMan, object, priority) & 0xF;
+	if (planePri > _highPlanePri)
+		_highPlanePri = planePri;
 }
 
 void SciGui32::updatePlane(reg_t object) {
@@ -240,9 +243,18 @@
 	for (uint32 planeNr = 0; planeNr < _planes.size(); planeNr++) {
 		if (_planes[planeNr] == object) {
 			_planes.remove_at(planeNr);
-			return;
+			break;
 		}
 	}
+
+	// Recalculate highPlanePri
+	_highPlanePri = 0;
+
+	for (uint32 planeNr = 0; planeNr < _planes.size(); planeNr++) {
+		byte planePri = GET_SEL32V(_s->_segMan, _planes[planeNr], priority) & 0xF;
+		if (planePri > _highPlanePri)
+			_highPlanePri = planePri;
+	}
 }
 
 void SciGui32::frameOut() {

Modified: scummvm/trunk/engines/sci/graphics/gui32.h
===================================================================
--- scummvm/trunk/engines/sci/graphics/gui32.h	2010-02-01 16:58:17 UTC (rev 47798)
+++ scummvm/trunk/engines/sci/graphics/gui32.h	2010-02-01 17:04:20 UTC (rev 47799)
@@ -69,6 +69,7 @@
 	void addPlane(reg_t object);
 	void updatePlane(reg_t object);
 	void deletePlane(reg_t object);
+	byte getHighPlanePri() { return _highPlanePri; }
 	void frameOut();
 	void globalToLocal(int16 *x, int16 *y, reg_t planeObj);
 	void localToGlobal(int16 *x, int16 *y, reg_t planeObj);
@@ -91,6 +92,7 @@
 private:
 	Common::Array<reg_t> _screenItems;
 	Common::Array<reg_t> _planes;
+	byte _highPlanePri;
 };
 
 } // End of namespace Sci


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