diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/hopkins/globals.cpp | 24 | ||||
-rw-r--r-- | engines/hopkins/globals.h | 18 | ||||
-rw-r--r-- | engines/hopkins/graphics.cpp | 42 | ||||
-rw-r--r-- | engines/hopkins/graphics.h | 2 | ||||
-rw-r--r-- | engines/hopkins/objects.cpp | 154 | ||||
-rw-r--r-- | engines/hopkins/objects.h | 2 |
6 files changed, 119 insertions, 123 deletions
diff --git a/engines/hopkins/globals.cpp b/engines/hopkins/globals.cpp index df6bd6798e..d6a2f328d9 100644 --- a/engines/hopkins/globals.cpp +++ b/engines/hopkins/globals.cpp @@ -422,26 +422,26 @@ void Globals::INIT_ANIM() { void Globals::INIT_VBOB() { for (int idx = 0; idx < 30; ++idx) { VBob[idx].field4 = 0; - VBob[idx].field6 = 0; - VBob[idx].field8 = 0; - VBob[idx].fieldA = 0; + VBob[idx].xp = 0; + VBob[idx].yp = 0; + VBob[idx].frameIndex = 0; VBob[idx].fieldC = 0; - VBob[idx].field10 = g_PTRNUL; - VBob[idx].field0 = g_PTRNUL; - VBob[idx].field1C = g_PTRNUL; + VBob[idx].surface = g_PTRNUL; + VBob[idx].spriteData = g_PTRNUL; + VBob[idx].oldSpriteData = g_PTRNUL; } } void Globals::CLEAR_VBOB() { for (int idx = 0; idx < 30; ++idx) { VBob[idx].field4 = 0; - VBob[idx].field6 = 0; - VBob[idx].field8 = 0; - VBob[idx].fieldA = 0; + VBob[idx].xp = 0; + VBob[idx].yp = 0; + VBob[idx].frameIndex = 0; VBob[idx].fieldC = 0; - VBob[idx].field10 = g_PTRNUL; - VBob[idx].field0 = g_PTRNUL; - VBob[idx].field1C = g_PTRNUL; + VBob[idx].surface = g_PTRNUL; + VBob[idx].spriteData = g_PTRNUL; + VBob[idx].oldSpriteData = g_PTRNUL; } } diff --git a/engines/hopkins/globals.h b/engines/hopkins/globals.h index 15c44f74d7..841972084c 100644 --- a/engines/hopkins/globals.h +++ b/engines/hopkins/globals.h @@ -132,18 +132,18 @@ struct BlAnimItem { }; struct VBobItem { - byte *field0; + byte *spriteData; int field4; - int field6; - int field8; - int fieldA; + int xp; + int yp; + int frameIndex; int fieldC; int fieldE; - byte *field10; - int field14; - int field16; - int field18; - byte *field1C; + byte *surface; + int oldX; + int oldY; + int oldFrameIndex; + byte *oldSpriteData; }; struct ObjetWItem { diff --git a/engines/hopkins/graphics.cpp b/engines/hopkins/graphics.cpp index 64af872727..d603c63546 100644 --- a/engines/hopkins/graphics.cpp +++ b/engines/hopkins/graphics.cpp @@ -1675,36 +1675,36 @@ void GraphicsManager::CopyAsm(const byte *surface) { } while (v4); } -void GraphicsManager::Restore_Mem(byte *a1, const byte *a2, int a3, int a4, unsigned int a5, int a6) { +void GraphicsManager::Restore_Mem(byte *destSurface, const byte *src, int xp, int yp, int width, int height) { byte *v6; int v7; - const byte *v8; + const byte *srcP; unsigned int i; - int v10; + int yCtr; - v6 = a3 + nbrligne2 * a4 + a1; - v7 = a6; - v8 = a2; + v6 = xp + nbrligne2 * yp + destSurface; + v7 = height; + srcP = src; do { - v10 = v7; - if (a5 & 1) { - memcpy(v6, v8, a5); - v8 += a5; - v6 += a5; - } else if (a5 & 2) { - for (i = a5 >> 1; i; --i) { - *(uint16 *)v6 = *(uint16 *)v8; - v8 += 2; + yCtr = v7; + if (width & 1) { + memcpy(v6, srcP, width); + srcP += width; + v6 += width; + } else if (width & 2) { + for (i = width >> 1; i; --i) { + *(uint16 *)v6 = *(uint16 *)srcP; + srcP += 2; v6 += 2; } } else { - memcpy(v6, v8, 4 * (a5 >> 2)); - v8 += 4 * (a5 >> 2); - v6 += 4 * (a5 >> 2); + memcpy(v6, srcP, 4 * (width >> 2)); + srcP += 4 * (width >> 2); + v6 += 4 * (width >> 2); } - v6 = nbrligne2 + v6 - a5; - v7 = v10 - 1; - } while (v10 != 1); + v6 = nbrligne2 + v6 - width; + v7 = yCtr - 1; + } while (yCtr != 1); } int GraphicsManager::Reel_Zoom(int v, int percentage) { diff --git a/engines/hopkins/graphics.h b/engines/hopkins/graphics.h index 18f600a184..affbe01b77 100644 --- a/engines/hopkins/graphics.h +++ b/engines/hopkins/graphics.h @@ -167,7 +167,7 @@ public: int Magic_Number(int v); void Affiche_Segment_Vesa(); void CopyAsm(const byte *surface); - void Restore_Mem(byte *a1, const byte *a2, int a3, int a4, unsigned int a5, int a6); + void Restore_Mem(byte *destSurface, const byte *src, int xp, int yp, int width, int height); int Reel_Zoom(int v, int percentage); int Reel_Reduc(int v, int percentage); void Affiche_Perfect(byte *surface, const byte *srcData, int xp300, int yp300, int frameIndex, int a6, int a7, int a8); diff --git a/engines/hopkins/objects.cpp b/engines/hopkins/objects.cpp index 8857e8eacc..bc82807c17 100644 --- a/engines/hopkins/objects.cpp +++ b/engines/hopkins/objects.cpp @@ -1426,108 +1426,104 @@ void ObjectsManager::AFF_VBOB() { int idx = 0; do { if (_vm->_globals.VBob[idx].field4 == 4) { - width = Get_Largeur(_vm->_globals.VBob[idx].field0, _vm->_globals.VBob[idx].fieldA); - height = Get_Hauteur(_vm->_globals.VBob[idx].field0, _vm->_globals.VBob[idx].fieldA); + width = Get_Largeur(_vm->_globals.VBob[idx].spriteData, _vm->_globals.VBob[idx].frameIndex); + height = Get_Hauteur(_vm->_globals.VBob[idx].spriteData, _vm->_globals.VBob[idx].frameIndex); - _vm->_graphicsManager.Restore_Mem(_vm->_graphicsManager.VESA_SCREEN, - _vm->_globals.VBob[idx].field10, _vm->_globals.VBob[idx].field6, - _vm->_globals.VBob[idx].field8, - width, height); + _vm->_graphicsManager.Restore_Mem(_vm->_graphicsManager.VESA_SCREEN, + _vm->_globals.VBob[idx].surface, _vm->_globals.VBob[idx].xp, + _vm->_globals.VBob[idx].yp, width, height); _vm->_graphicsManager.Restore_Mem( - _vm->_graphicsManager.VESA_BUFFER, _vm->_globals.VBob[idx].field10, - _vm->_globals.VBob[idx].field6, _vm->_globals.VBob[idx].field8, + _vm->_graphicsManager.VESA_BUFFER, _vm->_globals.VBob[idx].surface, + _vm->_globals.VBob[idx].xp, _vm->_globals.VBob[idx].yp, width, height); _vm->_graphicsManager.Ajoute_Segment_Vesa( - _vm->_globals.VBob[idx].field6, _vm->_globals.VBob[idx].field8, - _vm->_globals.VBob[idx].field6 + width, - height + _vm->_globals.VBob[idx].field8); + _vm->_globals.VBob[idx].xp, _vm->_globals.VBob[idx].yp, + _vm->_globals.VBob[idx].xp + width, height + _vm->_globals.VBob[idx].yp); - if (g_PTRNUL != _vm->_globals.VBob[idx].field10) - _vm->_globals.dos_free2(_vm->_globals.VBob[idx].field10); + if (_vm->_globals.VBob[idx].surface != g_PTRNUL) + _vm->_globals.dos_free2(_vm->_globals.VBob[idx].surface); _vm->_globals.VBob[idx].field4 = 0; - _vm->_globals.VBob[idx].field10 = g_PTRNUL; - _vm->_globals.VBob[idx].field0 = g_PTRNUL; - _vm->_globals.VBob[idx].field6 = 0; - _vm->_globals.VBob[idx].field8 = 0; - _vm->_globals.VBob[idx].field14 = 0; - _vm->_globals.VBob[idx].field16 = 0; - _vm->_globals.VBob[idx].fieldA = 0; - _vm->_globals.VBob[idx].field18 = 0; - _vm->_globals.VBob[idx].field1C = g_PTRNUL; + _vm->_globals.VBob[idx].surface = g_PTRNUL; + _vm->_globals.VBob[idx].spriteData = g_PTRNUL; + _vm->_globals.VBob[idx].xp = 0; + _vm->_globals.VBob[idx].yp = 0; + _vm->_globals.VBob[idx].oldX = 0; + _vm->_globals.VBob[idx].oldY = 0; + _vm->_globals.VBob[idx].frameIndex = 0; + _vm->_globals.VBob[idx].oldFrameIndex = 0; + _vm->_globals.VBob[idx].oldSpriteData = g_PTRNUL; } if (_vm->_globals.VBob[idx].field4 == 3) { - width = Get_Largeur(_vm->_globals.VBob[idx].field1C, _vm->_globals.VBob[idx].field18); - height = Get_Hauteur(_vm->_globals.VBob[idx].field1C, _vm->_globals.VBob[idx].field18); + width = Get_Largeur(_vm->_globals.VBob[idx].oldSpriteData, _vm->_globals.VBob[idx].oldFrameIndex); + height = Get_Hauteur(_vm->_globals.VBob[idx].oldSpriteData, _vm->_globals.VBob[idx].oldFrameIndex); _vm->_graphicsManager.Restore_Mem(_vm->_graphicsManager.VESA_SCREEN, - _vm->_globals.VBob[idx].field10, _vm->_globals.VBob[idx].field14, - _vm->_globals.VBob[idx].field16, + _vm->_globals.VBob[idx].surface, _vm->_globals.VBob[idx].oldX, + _vm->_globals.VBob[idx].oldY, width, height); _vm->_graphicsManager.Restore_Mem(_vm->_graphicsManager.VESA_BUFFER, - _vm->_globals.VBob[idx].field10, _vm->_globals.VBob[idx].field14, - _vm->_globals.VBob[idx].field16, - width, height); + _vm->_globals.VBob[idx].surface, _vm->_globals.VBob[idx].oldX, + _vm->_globals.VBob[idx].oldY, width, height); - _vm->_graphicsManager.Ajoute_Segment_Vesa(_vm->_globals.VBob[idx].field14, - _vm->_globals.VBob[idx].field16, _vm->_globals.VBob[idx].field14 + width, - _vm->_globals.VBob[idx].field16 + height); + _vm->_graphicsManager.Ajoute_Segment_Vesa(_vm->_globals.VBob[idx].oldX, + _vm->_globals.VBob[idx].oldY, _vm->_globals.VBob[idx].oldX + width, + _vm->_globals.VBob[idx].oldY + height); _vm->_globals.VBob[idx].field4 = 1; - _vm->_globals.VBob[idx].field1C = _vm->_globals.VBob[idx].field0; + _vm->_globals.VBob[idx].oldSpriteData = _vm->_globals.VBob[idx].spriteData; - if (g_PTRNUL != _vm->_globals.VBob[idx].field10) - _vm->_globals.dos_free2(_vm->_globals.VBob[idx].field10); + if (_vm->_globals.VBob[idx].surface != g_PTRNUL) + _vm->_globals.dos_free2(_vm->_globals.VBob[idx].surface); - _vm->_globals.VBob[idx].field10 = g_PTRNUL; - _vm->_globals.VBob[idx].field14 = _vm->_globals.VBob[idx].field6; - _vm->_globals.VBob[idx].field16 = _vm->_globals.VBob[idx].field8; - _vm->_globals.VBob[idx].field18 = _vm->_globals.VBob[idx].fieldA; + _vm->_globals.VBob[idx].surface = g_PTRNUL; + _vm->_globals.VBob[idx].oldX = _vm->_globals.VBob[idx].xp; + _vm->_globals.VBob[idx].oldY = _vm->_globals.VBob[idx].yp; + _vm->_globals.VBob[idx].oldFrameIndex = _vm->_globals.VBob[idx].frameIndex; } if (_vm->_globals.VBob[idx].field4 == 1) { - width = Get_Largeur(_vm->_globals.VBob[idx].field0, _vm->_globals.VBob[idx].fieldA); - height = Get_Hauteur(_vm->_globals.VBob[idx].field0, _vm->_globals.VBob[idx].fieldA); + width = Get_Largeur(_vm->_globals.VBob[idx].spriteData, _vm->_globals.VBob[idx].frameIndex); + height = Get_Hauteur(_vm->_globals.VBob[idx].spriteData, _vm->_globals.VBob[idx].frameIndex); - if (g_PTRNUL != _vm->_globals.VBob[idx].field10) - _vm->_globals.dos_free2(_vm->_globals.VBob[idx].field10); + if (_vm->_globals.VBob[idx].surface != g_PTRNUL) + _vm->_globals.dos_free2(_vm->_globals.VBob[idx].surface); byte *surface = _vm->_globals.dos_malloc2(height * width); - _vm->_globals.VBob[idx].field10 = surface; + _vm->_globals.VBob[idx].surface = surface; _vm->_graphicsManager.Capture_Mem(_vm->_graphicsManager.VESA_SCREEN, surface, - _vm->_globals.VBob[idx].field6, _vm->_globals.VBob[idx].field8, width, height); + _vm->_globals.VBob[idx].xp, _vm->_globals.VBob[idx].yp, width, height); - byte *v10 = _vm->_globals.VBob[idx].field0; + byte *v10 = _vm->_globals.VBob[idx].spriteData; if (*v10 == 78) { _vm->_graphicsManager.Affiche_Perfect(_vm->_graphicsManager.VESA_SCREEN, v10, - _vm->_globals.VBob[idx].field6 + 300, - _vm->_globals.VBob[idx].field8 + 300, - _vm->_globals.VBob[idx].fieldA, + _vm->_globals.VBob[idx].xp + 300, _vm->_globals.VBob[idx].yp + 300, + _vm->_globals.VBob[idx].frameIndex, 0, 0, 0); _vm->_graphicsManager.Affiche_Perfect(_vm->_graphicsManager.VESA_BUFFER, - _vm->_globals.VBob[idx].field0, - _vm->_globals.VBob[idx].field6 + 300, _vm->_globals.VBob[idx].field8 + 300, - _vm->_globals.VBob[idx].fieldA, + _vm->_globals.VBob[idx].spriteData, + _vm->_globals.VBob[idx].xp + 300, _vm->_globals.VBob[idx].yp + 300, + _vm->_globals.VBob[idx].frameIndex, 0, 0, 0); } else { _vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager.VESA_BUFFER, - v10, _vm->_globals.VBob[idx].field6 + 300, _vm->_globals.VBob[idx].field8 + 300, - _vm->_globals.VBob[idx].fieldA); + v10, _vm->_globals.VBob[idx].xp + 300, _vm->_globals.VBob[idx].yp + 300, + _vm->_globals.VBob[idx].frameIndex); - _vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager.VESA_SCREEN, _vm->_globals.VBob[idx].field0, - _vm->_globals.VBob[idx].field6 + 300, _vm->_globals.VBob[idx].field8 + 300, - _vm->_globals.VBob[idx].fieldA); + _vm->_graphicsManager.Sprite_Vesa(_vm->_graphicsManager.VESA_SCREEN, _vm->_globals.VBob[idx].spriteData, + _vm->_globals.VBob[idx].xp + 300, _vm->_globals.VBob[idx].yp + 300, + _vm->_globals.VBob[idx].frameIndex); } - _vm->_graphicsManager.Ajoute_Segment_Vesa(_vm->_globals.VBob[idx].field6, - _vm->_globals.VBob[idx].field8, _vm->_globals.VBob[idx].field6 + width, - _vm->_globals.VBob[idx].field8 + height); + _vm->_graphicsManager.Ajoute_Segment_Vesa(_vm->_globals.VBob[idx].xp, + _vm->_globals.VBob[idx].yp , _vm->_globals.VBob[idx].xp + width, + _vm->_globals.VBob[idx].yp + height); _vm->_globals.VBob[idx].field4 = 2; } ++idx; @@ -4407,35 +4403,35 @@ void ObjectsManager::BOB_VIVANT(int idx) { } } -void ObjectsManager::VBOB(byte *a1, int idx, int a3, int a4, int a5) { +void ObjectsManager::VBOB(byte *src, int idx, int xp, int yp, int frameIndex) { if (idx > 29) error("MAX_VBOB exceeded"); if (_vm->_globals.VBob[idx].field4 <= 1) { _vm->_globals.VBob[idx].field4 = 1; - _vm->_globals.VBob[idx].field6 = a3; - _vm->_globals.VBob[idx].field8 = a4; - _vm->_globals.VBob[idx].fieldA = a5; - _vm->_globals.VBob[idx].field14 = a3; - _vm->_globals.VBob[idx].field16 = a4; - _vm->_globals.VBob[idx].field18 = a5; - _vm->_globals.VBob[idx].field0 = a1; - _vm->_globals.VBob[idx].field1C = a1; - if (_vm->_globals.VBob[idx].field10 != g_PTRNUL) - _vm->_globals.VBob[idx].field10 = _vm->_globals.dos_free2(_vm->_globals.VBob[idx].field10); + _vm->_globals.VBob[idx].xp = xp; + _vm->_globals.VBob[idx].yp = yp; + _vm->_globals.VBob[idx].frameIndex = frameIndex; + _vm->_globals.VBob[idx].oldX = xp; + _vm->_globals.VBob[idx].oldY = yp; + _vm->_globals.VBob[idx].oldFrameIndex = frameIndex; + _vm->_globals.VBob[idx].spriteData = src; + _vm->_globals.VBob[idx].oldSpriteData = src; + if (_vm->_globals.VBob[idx].surface != g_PTRNUL) + _vm->_globals.VBob[idx].surface = _vm->_globals.dos_free2(_vm->_globals.VBob[idx].surface); } int f4 = _vm->_globals.VBob[idx].field4; if (f4 == 2 || f4 == 4) { _vm->_globals.VBob[idx].field4 = 3; - _vm->_globals.VBob[idx].field14 = _vm->_globals.VBob[idx].field6; - _vm->_globals.VBob[idx].field16 = _vm->_globals.VBob[idx].field8; - _vm->_globals.VBob[idx].field1C = _vm->_globals.VBob[idx].field0; - _vm->_globals.VBob[idx].field18 = _vm->_globals.VBob[idx].fieldA; - _vm->_globals.VBob[idx].field6 = a3; - _vm->_globals.VBob[idx].field8 = a4; - _vm->_globals.VBob[idx].fieldA = a5; - _vm->_globals.VBob[idx].field0 = a1; + _vm->_globals.VBob[idx].oldX = _vm->_globals.VBob[idx].xp; + _vm->_globals.VBob[idx].oldY = _vm->_globals.VBob[idx].yp; + _vm->_globals.VBob[idx].oldSpriteData = _vm->_globals.VBob[idx].spriteData; + _vm->_globals.VBob[idx].oldFrameIndex = _vm->_globals.VBob[idx].frameIndex; + _vm->_globals.VBob[idx].xp = xp; + _vm->_globals.VBob[idx].yp = yp; + _vm->_globals.VBob[idx].frameIndex = frameIndex; + _vm->_globals.VBob[idx].spriteData = src; } } diff --git a/engines/hopkins/objects.h b/engines/hopkins/objects.h index 331245215d..d9f15abdea 100644 --- a/engines/hopkins/objects.h +++ b/engines/hopkins/objects.h @@ -203,7 +203,7 @@ public: void OPTI_OBJET(); void SPECIAL_JEU(); void BOB_VIVANT(int a1); - void VBOB(byte *a1, int a2, int a3, int a4, int a5); + void VBOB(byte *src, int idx, int xp, int yp, int frameIndex); void VBOB_OFF(int idx); void ACTION_DOS(int idx); void ACTION_DROITE(int idx); |