aboutsummaryrefslogtreecommitdiff
path: root/engines/sci
diff options
context:
space:
mode:
authorFilippos Karapetis2009-10-25 22:33:08 +0000
committerFilippos Karapetis2009-10-25 22:33:08 +0000
commitb5feeb60b64a62434ace4f316b51aa7849b2702e (patch)
tree42864894b6604939fb6fa42bfed3a7f49884bfc5 /engines/sci
parent1a4b61739832a1f1d597b9c56e67dd8b80b32f76 (diff)
downloadscummvm-rg350-b5feeb60b64a62434ace4f316b51aa7849b2702e.tar.gz
scummvm-rg350-b5feeb60b64a62434ace4f316b51aa7849b2702e.tar.bz2
scummvm-rg350-b5feeb60b64a62434ace4f316b51aa7849b2702e.zip
Moved the cel count calculation to the new graphics code
svn-id: r45379
Diffstat (limited to 'engines/sci')
-rw-r--r--engines/sci/console.cpp4
-rw-r--r--engines/sci/engine/kgraphics.cpp21
-rw-r--r--engines/sci/gfx/operations.cpp16
-rw-r--r--engines/sci/gfx/operations.h12
-rw-r--r--engines/sci/gui/gui.cpp11
-rw-r--r--engines/sci/gui/gui.h1
6 files changed, 21 insertions, 44 deletions
diff --git a/engines/sci/console.cpp b/engines/sci/console.cpp
index d63a8709dd..3cff8ca840 100644
--- a/engines/sci/console.cpp
+++ b/engines/sci/console.cpp
@@ -1077,9 +1077,9 @@ bool Console::cmdViewInfo(int argc, const char **argv) {
DebugPrintf("has %d loops:\n", loops);
for (i = 0; i < loops; i++) {
- int j, cels;
+ int j, cels = _vm->_gamestate->_gui->getCelCount(view, i);
- DebugPrintf("Loop %d: %d cels.\n", i, cels = gfxop_lookup_view_get_cels(_vm->_gamestate->gfx_state, view, i));
+ DebugPrintf("Loop %d: %d cels.\n", i, cels);
for (j = 0; j < cels; j++) {
int width;
int height;
diff --git a/engines/sci/engine/kgraphics.cpp b/engines/sci/engine/kgraphics.cpp
index 9a2257722b..e1f5dd8469 100644
--- a/engines/sci/engine/kgraphics.cpp
+++ b/engines/sci/engine/kgraphics.cpp
@@ -413,30 +413,23 @@ reg_t kNumLoops(EngineState *s, int argc, reg_t *argv) {
SegManager *segMan = s->_segMan;
reg_t obj = argv[0];
int view = GET_SEL32V(segMan, obj, view);
- int loops_nr = s->_gui->getLoopCount(view);
+ int loopCount = s->_gui->getLoopCount(view);
- if (loops_nr < 0) {
- error("view.%d (0x%x) not found", view, view);
- return NULL_REG;
- }
-
- debugC(2, kDebugLevelGraphics, "NumLoops(view.%d) = %d\n", view, loops_nr);
+ debugC(2, kDebugLevelGraphics, "NumLoops(view.%d) = %d\n", view, loopCount);
- return make_reg(0, loops_nr);
+ return make_reg(0, loopCount);
}
reg_t kNumCels(EngineState *s, int argc, reg_t *argv) {
SegManager *segMan = s->_segMan;
reg_t obj = argv[0];
- int loop = GET_SEL32V(segMan, obj, loop);
int view = GET_SEL32V(segMan, obj, view);
- int cel = 0xffff;
-
- s->gfx_state->gfxResMan->getView(view, &loop, &cel, 0);
+ int loop = GET_SEL32V(segMan, obj, loop);
+ int celCount = s->_gui->getCelCount(view, loop);
- debugC(2, kDebugLevelGraphics, "NumCels(view.%d, %d) = %d\n", view, loop, cel + 1);
+ debugC(2, kDebugLevelGraphics, "NumCels(view.%d, %d) = %d\n", view, loop, celCount);
- return make_reg(0, cel + 1);
+ return make_reg(0, celCount);
}
reg_t kOnControl(EngineState *s, int argc, reg_t *argv) {
diff --git a/engines/sci/gfx/operations.cpp b/engines/sci/gfx/operations.cpp
index 9edba13ae8..305252d672 100644
--- a/engines/sci/gfx/operations.cpp
+++ b/engines/sci/gfx/operations.cpp
@@ -1284,22 +1284,6 @@ sci_event_t gfxop_get_event(GfxState *state, unsigned int mask) {
// View operations
-int gfxop_lookup_view_get_cels(GfxState *state, int nr, int loop) {
- int real_loop = loop, cel = 0;
- gfxr_view_t *view = NULL;
-
- view = state->gfxResMan->getView(nr, &real_loop, &cel, 0);
-
- if (!view) {
- warning("[GFX] Attempt to retrieve number of cels from invalid/broken view %d", nr);
- return 0;
- } else if (real_loop != loop) {
- warning("[GFX] Loop number was corrected from %d to %d in view %d", loop, real_loop, nr);
- }
-
- return view->loops[real_loop].cels_nr;
-}
-
void gfxop_get_cel_parameters(GfxState *state, int nr, int loop, int cel, int *width, int *height, Common::Point *offset) {
gfxr_view_t *view = NULL;
gfx_pixmap_t *pxm = NULL;
diff --git a/engines/sci/gfx/operations.h b/engines/sci/gfx/operations.h
index 6e6ff938e5..1e3dd41b52 100644
--- a/engines/sci/gfx/operations.h
+++ b/engines/sci/gfx/operations.h
@@ -334,18 +334,6 @@ sci_event_t gfxop_get_event(GfxState *state, unsigned int mask);
/** @{ */
/**
- * Determines the number of cels associated stored in a loop.
- *
- * @param[in] state The state to look up in
- * @param[in] nr Number of the view to look up in
- * @param[in] loop Number of the loop the number of cels of are to be
- * investigated
- * @return The number of cels in that loop, or GFX_ERROR if either the
- * view or the loop didn't exist
- */
-int gfxop_lookup_view_get_cels(GfxState *state, int nr, int loop);
-
-/**
* Retrieves the width and height of a cel.
*
* @param[in] state The state to use
diff --git a/engines/sci/gui/gui.cpp b/engines/sci/gui/gui.cpp
index a9f5915801..40434de5ff 100644
--- a/engines/sci/gui/gui.cpp
+++ b/engines/sci/gui/gui.cpp
@@ -690,6 +690,17 @@ int16 SciGui::getLoopCount(int view) {
return loopCount;
}
+int16 SciGui::getCelCount(int view, int loop) {
+ SciGuiView *tmpView = new SciGuiView(_s->resMan, _screen, _palette, view);
+ if (!tmpView)
+ return -1;
+
+ uint16 celCount = tmpView->getLoopInfo(loop)->celCount;
+ delete tmpView;
+
+ return celCount;
+}
+
bool SciGui::debugUndither(bool flag) {
_screen->unditherSetState(flag);
return false;
diff --git a/engines/sci/gui/gui.h b/engines/sci/gui/gui.h
index d7df04fb84..08ac12686a 100644
--- a/engines/sci/gui/gui.h
+++ b/engines/sci/gui/gui.h
@@ -127,6 +127,7 @@ public:
int16 getCelHeight(int view, int loop, int cel);
int16 getLoopCount(int view);
+ int16 getCelCount(int view, int loop);
virtual bool debugUndither(bool flag);
virtual bool debugShowMap(int mapNo);