[Scummvm-cvs-logs] CVS: scummvm/scumm gfx.cpp,2.439,2.440 gfx.h,1.116,1.117 intern.h,2.469,2.470 object.cpp,1.235,1.236 room.cpp,1.10,1.11 scumm.cpp,1.472,1.473 scumm.h,1.609,1.610 string.cpp,1.282,1.283
Max Horn
fingolfin at users.sourceforge.net
Thu Apr 28 15:37:11 CEST 2005
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/scumm actor.cpp,1.347,1.348 intern.h,2.468,2.469 scumm.cpp,1.471,1.472 scumm.h,1.608,1.609 string.cpp,1.281,1.282
- Next message: [Scummvm-cvs-logs] CVS: scummvm/scumm scumm.cpp,1.473,1.474 scumm.h,1.610,1.611 string.cpp,1.283,1.284
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32731
Modified Files:
gfx.cpp gfx.h intern.h object.cpp room.cpp scumm.cpp scumm.h
string.cpp
Log Message:
Moved blast text/object code to ScummEngine_v6
Index: gfx.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.cpp,v
retrieving revision 2.439
retrieving revision 2.440
diff -u -d -r2.439 -r2.440
--- gfx.cpp 28 Apr 2005 00:22:05 -0000 2.439
+++ gfx.cpp 28 Apr 2005 22:34:54 -0000 2.440
@@ -444,6 +444,29 @@
}
}
+void ScummEngine_v6::drawDirtyScreenParts() {
+ // For the Full Throttle credits to work properly, the blast
+ // texts have to be drawn before the blast objects. Unless
+ // someone can think of a better way to achieve this effect.
+
+ if (_version >= 7 && VAR(VAR_BLAST_ABOVE_TEXT) == 1) {
+ drawBlastTexts();
+ drawBlastObjects();
+ } else {
+ drawBlastObjects();
+ drawBlastTexts();
+ }
+ if (_version == 8)
+ processUpperActors();
+
+ // Call the original method.
+ ScummEngine::drawDirtyScreenParts();
+
+ // Remove all blasted objects/text again.
+ removeBlastTexts();
+ removeBlastObjects();
+}
+
/**
* Blit the dirty data from the given VirtScreen to the display. If the camera moved,
* a full blit is done, otherwise only the visible dirty areas are updated.
Index: gfx.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/gfx.h,v
retrieving revision 1.116
retrieving revision 1.117
diff -u -d -r1.116 -r1.117
--- gfx.h 2 Apr 2005 14:24:40 -0000 1.116
+++ gfx.h 28 Apr 2005 22:34:54 -0000 1.117
@@ -173,15 +173,6 @@
byte end;
};
-/** BlastObjects to draw */
-struct BlastObject {
- uint16 number;
- Common::Rect rect;
- uint16 scaleX, scaleY;
- uint16 image;
- uint16 mode;
-};
-
/** Bomp graphics data, used as parameter to ScummEngine::drawBomp. */
struct BompDrawData {
Graphics::Surface dst;
Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.469
retrieving revision 2.470
diff -u -d -r2.469 -r2.470
--- intern.h 28 Apr 2005 22:17:22 -0000 2.469
+++ intern.h 28 Apr 2005 22:34:54 -0000 2.470
@@ -414,6 +414,31 @@
int _smushFrameRate;
+ /** BlastObjects to draw */
+ struct BlastObject {
+ uint16 number;
+ Common::Rect rect;
+ uint16 scaleX, scaleY;
+ uint16 image;
+ uint16 mode;
+ };
+
+ int _blastObjectQueuePos;
+ BlastObject _blastObjectQueue[128];
+
+ struct BlastText {
+ int16 xpos, ypos;
+ Common::Rect rect;
+ byte color;
+ byte charset;
+ bool center;
+ byte text[256];
+ };
+
+ int _blastTextQueuePos;
+ BlastText _blastTextQueue[50];
+
+
public:
ScummEngine_v6(GameDetector *detector, OSystem *syst, const ScummGameSettings &gs, uint8 md5sum[16]);
@@ -432,6 +457,7 @@
virtual void readMAXS(int blockSize);
virtual void palManipulateInit(int resID, int start, int end, int time);
+ virtual void drawDirtyScreenParts();
int getStackList(int *args, uint maxnum);
int popRoomAndObj(int *room);
@@ -452,6 +478,20 @@
void useBompCursor(const byte *im, int w, int h);
void grabCursor(int x, int y, int w, int h);
+ void enqueueText(const byte *text, int x, int y, byte color, byte charset, bool center);
+ void drawBlastTexts();
+ void removeBlastTexts();
+
+ void enqueueObject(int objectNumber, int objectX, int objectY, int objectWidth,
+ int objectHeight, int scaleX, int scaleY, int image, int mode);
+ void drawBlastObjects();
+ void drawBlastObject(BlastObject *eo);
+ void removeBlastObjects();
+ void removeBlastObject(BlastObject *eo);
+
+ virtual void clearDrawQueues();
+
+
/* Version 6 script opcodes */
void o6_setBlastObjectWindow();
void o6_pushByte();
@@ -730,6 +770,8 @@
virtual void setCursorFromImg(uint img, uint room, uint imgindex);
+ virtual void clearDrawQueues();
+
/* HE version 70 script opcodes */
void o70_startSound();
void o70_pickupObject();
@@ -929,6 +971,8 @@
virtual void initScummVars();
+ virtual void clearDrawQueues();
+
void loadImgSpot(int resId, int state, int16 &x, int16 &y);
void loadWizCursor(int resId);
void unknownE0(int x1, int y1, int x, int unk1, int unk2, int type, int id);
Index: object.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/object.cpp,v
retrieving revision 1.235
retrieving revision 1.236
diff -u -d -r1.235 -r1.236
--- object.cpp 27 Apr 2005 14:30:20 -0000 1.235
+++ object.cpp 28 Apr 2005 22:34:55 -0000 1.236
@@ -855,6 +855,30 @@
_drawObjectQueNr = 0;
}
+void ScummEngine::clearDrawQueues() {
+ clearDrawObjectQueue();
+}
+
+void ScummEngine_v6::clearDrawQueues() {
+ ScummEngine::clearDrawQueues();
+
+ _blastObjectQueuePos = 0;
+}
+
+void ScummEngine_v70he::clearDrawQueues() {
+ ScummEngine_v6::clearDrawQueues();
+
+ if (_heversion >= 71)
+ _wiz.polygonClear();
+}
+
+void ScummEngine_v80he::clearDrawQueues() {
+ ScummEngine_v70he::clearDrawQueues();
+
+ _wiz.imageNumClear();
+}
+
+
void ScummEngine::clearOwnerOf(int obj) {
int i, j;
uint16 *a;
@@ -1444,7 +1468,7 @@
}
}
-void ScummEngine::enqueueObject(int objectNumber, int objectX, int objectY, int objectWidth,
+void ScummEngine_v6::enqueueObject(int objectNumber, int objectX, int objectY, int objectWidth,
int objectHeight, int scaleX, int scaleY, int image, int mode) {
BlastObject *eo;
@@ -1478,7 +1502,7 @@
eo->mode = mode;
}
-void ScummEngine::drawBlastObjects() {
+void ScummEngine_v6::drawBlastObjects() {
BlastObject *eo;
int i;
@@ -1488,7 +1512,7 @@
}
}
-void ScummEngine::drawBlastObject(BlastObject *eo) {
+void ScummEngine_v6::drawBlastObject(BlastObject *eo) {
VirtScreen *vs;
const byte *bomp, *ptr;
int objnum;
@@ -1552,7 +1576,7 @@
markRectAsDirty(vs->number, bdd.x, bdd.x + bdd.srcwidth, bdd.y, bdd.y + bdd.srcheight);
}
-void ScummEngine::removeBlastObjects() {
+void ScummEngine_v6::removeBlastObjects() {
BlastObject *eo;
int i;
@@ -1560,11 +1584,10 @@
for (i = 0; i < _blastObjectQueuePos; i++, eo++) {
removeBlastObject(eo);
}
-
- clearEnqueue();
+ _blastObjectQueuePos = 0;
}
-void ScummEngine::removeBlastObject(BlastObject *eo) {
+void ScummEngine_v6::removeBlastObject(BlastObject *eo) {
VirtScreen *vs = &virtscr[0];
Common::Rect r;
Index: room.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/room.cpp,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- room.cpp 26 Apr 2005 14:24:29 -0000 1.10
+++ room.cpp 28 Apr 2005 22:34:56 -0000 1.11
@@ -74,15 +74,11 @@
runExitScript();
killScriptsAndResources();
- clearEnqueue();
if (_version >= 4 && _heversion <= 61)
stopCycle(0);
_sound->processSoundQues();
-
- if (_heversion >= 71)
- ((ScummEngine_v70he *)this)->_wiz.polygonClear();
- if (_heversion >= 80)
- ((ScummEngine_v72he *)this)->_wiz.imageNumClear();
+
+ clearDrawQueues();
// For HE80+ games
for (i = 0; i < _numRoomVariables; i++)
@@ -108,8 +104,6 @@
setDirtyColors(0, 255);
}
- clearDrawObjectQueue();
-
VAR(VAR_ROOM) = room;
_fullRedraw = true;
Index: scumm.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.cpp,v
retrieving revision 1.472
retrieving revision 1.473
diff -u -d -r1.472 -r1.473
--- scumm.cpp 28 Apr 2005 22:17:22 -0000 1.472
+++ scumm.cpp 28 Apr 2005 22:34:56 -0000 1.473
@@ -863,10 +863,6 @@
_screenStartStrip = 0;
_screenEndStrip = 0;
_screenTop = 0;
- _blastObjectQueuePos = 0;
- memset(_blastObjectQueue, 0, sizeof(_blastObjectQueue));
- _blastTextQueuePos = 0;
- memset(_blastTextQueue, 0, sizeof(_blastTextQueue));
_drawObjectQueNr = 0;
memset(_drawObjectQue, 0, sizeof(_drawObjectQue));
_palManipStart = 0;
@@ -1236,6 +1232,13 @@
ScummEngine_v6::ScummEngine_v6(GameDetector *detector, OSystem *syst, const ScummGameSettings &gs, uint8 md5sum[16])
: ScummEngine(detector, syst, gs, md5sum) {
+ _blastObjectQueuePos = 0;
+ memset(_blastObjectQueue, 0, sizeof(_blastObjectQueue));
+ _blastTextQueuePos = 0;
+ memset(_blastTextQueue, 0, sizeof(_blastTextQueue));
+
+ _smushFrameRate = 0;
+
VAR_VIDEONAME = 0xFF;
VAR_RANDOM_NR = 0xFF;
VAR_STRING2DRAW = 0xFF;
@@ -1246,8 +1249,6 @@
VAR_TIMEDATE_HOUR = 0xFF;
VAR_TIMEDATE_MINUTE = 0xFF;
VAR_TIMEDATE_SECOND = 0xFF;
-
- _smushFrameRate = 0;
}
ScummEngine_v70he::ScummEngine_v70he(GameDetector *detector, OSystem *syst, const ScummGameSettings &gs, uint8 md5sum[16])
@@ -2137,32 +2138,11 @@
clearClickedStatus();
}
+ // Handle mouse over effects (for verbs).
handleMouseOver(oldEgo != VAR(VAR_EGO));
- //
- // TODO: The whole blast object/text code is V6-8 specific. So it
- // would be nice to move it to ScummEngine_v6. One way to make that
- // possible would be to replace their invocation with two new virtual
- // methods preDrawScreenHook() and postDrawScreenHook().
- //
-
- // For the Full Throttle credits to work properly, the blast
- // texts have to be drawn before the blast objects. Unless
- // someone can think of a better way to achieve this effect.
-
- if (_version >= 7 && VAR(VAR_BLAST_ABOVE_TEXT) == 1) {
- drawBlastTexts();
- drawBlastObjects();
- } else {
- drawBlastObjects();
- drawBlastTexts();
- }
-
- if (_version == 8)
- processUpperActors();
+ // Render everything to the screen.
drawDirtyScreenParts();
- removeBlastTexts();
- removeBlastObjects();
if (_version <= 5)
playActorSounds();
Index: scumm.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scumm.h,v
retrieving revision 1.609
retrieving revision 1.610
diff -u -d -r1.609 -r1.610
--- scumm.h 28 Apr 2005 22:17:23 -0000 1.609
+++ scumm.h 28 Apr 2005 22:34:56 -0000 1.610
@@ -165,15 +165,6 @@
struct VerbSlot;
struct ObjectData;
-struct BlastText {
- int16 xpos, ypos;
- Common::Rect rect;
- byte color;
- byte charset;
- bool center;
- byte text[256];
-};
-
struct V2MouseoverBox {
Common::Rect rect;
byte color;
@@ -780,6 +771,8 @@
void clearDrawObjectQueue();
void processDrawQue();
+ virtual void clearDrawQueues();
+
uint32 getOBCDOffs(int object) const;
byte *getOBCDFromObject(int obj);
const byte *getOBIMFromObject(const ObjectData &od);
@@ -990,7 +983,7 @@
// Screen rendering
byte *_compositeBuf;
byte *_herculesBuf;
- void drawDirtyScreenParts();
+ virtual void drawDirtyScreenParts();
void updateDirtyScreen(VirtScreenNumber slot);
void drawStripToScreen(VirtScreen *vs, int x, int w, int t, int b);
void ditherCGA(byte *dst, int dstPitch, int x, int y, int width, int height) const;
@@ -1022,24 +1015,6 @@
uint _shakeFrame;
void setShake(int mode);
- int _blastObjectQueuePos;
- BlastObject _blastObjectQueue[128];
-
- int _blastTextQueuePos;
- BlastText _blastTextQueue[50];
-
- void enqueueText(const byte *text, int x, int y, byte color, byte charset, bool center);
- void drawBlastTexts();
- void removeBlastTexts();
-
- void enqueueObject(int objectNumber, int objectX, int objectY, int objectWidth,
- int objectHeight, int scaleX, int scaleY, int image, int mode);
- void clearEnqueue() { _blastObjectQueuePos = 0; }
- void drawBlastObjects();
- void drawBlastObject(BlastObject *eo);
- void removeBlastObjects();
- void removeBlastObject(BlastObject *eo);
-
int _drawObjectQueNr;
byte _drawObjectQue[200];
Index: string.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/string.cpp,v
retrieving revision 1.282
retrieving revision 1.283
diff -u -d -r1.282 -r1.283
--- string.cpp 28 Apr 2005 22:17:23 -0000 1.282
+++ string.cpp 28 Apr 2005 22:34:56 -0000 1.283
@@ -755,7 +755,7 @@
_charsetColorMap[i] = _charsetData[charsetno][i];
}
-void ScummEngine::enqueueText(const byte *text, int x, int y, byte color, byte charset, bool center) {
+void ScummEngine_v6::enqueueText(const byte *text, int x, int y, byte color, byte charset, bool center) {
BlastText &bt = _blastTextQueue[_blastTextQueuePos++];
assert(_blastTextQueuePos <= ARRAYSIZE(_blastTextQueue));
@@ -767,7 +767,7 @@
bt.center = center;
}
-void ScummEngine::drawBlastTexts() {
+void ScummEngine_v6::drawBlastTexts() {
byte *buf;
int c;
int i;
@@ -811,7 +811,7 @@
_charset->_ignoreCharsetMask = false;
}
-void ScummEngine::removeBlastTexts() {
+void ScummEngine_v6::removeBlastTexts() {
int i;
for (i = 0; i < _blastTextQueuePos; i++) {
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/scumm actor.cpp,1.347,1.348 intern.h,2.468,2.469 scumm.cpp,1.471,1.472 scumm.h,1.608,1.609 string.cpp,1.281,1.282
- Next message: [Scummvm-cvs-logs] CVS: scummvm/scumm scumm.cpp,1.473,1.474 scumm.h,1.610,1.611 string.cpp,1.283,1.284
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Scummvm-git-logs
mailing list