From 7c9ad56aac27ea9dc799abc50314a0cdaa3fe0d9 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 28 Sep 2012 22:15:59 +1000 Subject: HOPKINS: Implemented many of the previously stubbed methods --- engines/hopkins/events.cpp | 10 +- engines/hopkins/files.cpp | 13 + engines/hopkins/files.h | 2 + engines/hopkins/font.cpp | 10 +- engines/hopkins/globals.cpp | 107 ++++++++ engines/hopkins/globals.h | 45 +++- engines/hopkins/graphics.cpp | 133 +++++++--- engines/hopkins/graphics.h | 8 +- engines/hopkins/hopkins.cpp | 6 +- engines/hopkins/hopkins.h | 1 - engines/hopkins/objects.cpp | 608 ++++++++++++++++++++++++++++++++----------- engines/hopkins/objects.h | 41 ++- engines/hopkins/talk.cpp | 151 +++++++++++ engines/hopkins/talk.h | 4 + 14 files changed, 920 insertions(+), 219 deletions(-) (limited to 'engines/hopkins') diff --git a/engines/hopkins/events.cpp b/engines/hopkins/events.cpp index fc7c12238a..9482b4ce09 100644 --- a/engines/hopkins/events.cpp +++ b/engines/hopkins/events.cpp @@ -36,7 +36,7 @@ EventsManager::EventsManager() { mouse_linux = false; souris_sizex = souris_sizey = 0; ofset_souris_x = ofset_souris_y = 0; - start_x = start_y = 0; + _vm->_eventsManager.start_x = start_y = 0; CASSE = false; souris_n = 0; souris_bb = 0; @@ -85,14 +85,14 @@ void EventsManager::souris_max() { } int EventsManager::XMOUSE() { - souris_x = start_x + g_system->getEventManager()->getMousePos().x; + souris_x = _vm->_eventsManager.start_x + g_system->getEventManager()->getMousePos().x; souris_y = g_system->getEventManager()->getMousePos().y; return souris_x + ofset_souris_x; } int EventsManager::YMOUSE() { - souris_x = start_x + g_system->getEventManager()->getMousePos().x; + souris_x = _vm->_eventsManager.start_x + g_system->getEventManager()->getMousePos().x; souris_y = g_system->getEventManager()->getMousePos().y; return souris_y + ofset_souris_y; @@ -446,13 +446,13 @@ LABEL_65: } _vm->_globals.NBBLOC = 0; - start_x = v4; + _vm->_eventsManager.start_x = v4; ofscroll = v4; SCROLL = v4; } OLD_SCROLL = v4; - start_x = v4; + _vm->_eventsManager.start_x = v4; ofscroll = v4; } diff --git a/engines/hopkins/files.cpp b/engines/hopkins/files.cpp index 4e8eb0d80f..f84b597c9a 100644 --- a/engines/hopkins/files.cpp +++ b/engines/hopkins/files.cpp @@ -125,6 +125,15 @@ void FileManager::DMESS1() { // No implementation in original } +void FileManager::bload(const Common::String &file, byte *buf) { + Common::File f; + if (!f.open(file)) + error("Error openinig file - %s", file.c_str()); + int32 filesize = f.size(); + FileManager::bload_it(f, buf, filesize); + f.close(); +} + int FileManager::bload_it(Common::ReadStream &stream, void *buf, size_t nbytes) { return stream.read(buf, nbytes); } @@ -325,4 +334,8 @@ uint32 FileManager::FLONG(const Common::String &filename) { return size; } +void FileManager::CONSTRUIT_LINUX(const Common::String &file) { + warning("TODO: CONSTRUIT_LINUX"); +} + } // End of namespace Hopkins diff --git a/engines/hopkins/files.h b/engines/hopkins/files.h index b323006110..9a587efa80 100644 --- a/engines/hopkins/files.h +++ b/engines/hopkins/files.h @@ -39,12 +39,14 @@ public: static byte *CHARGE_FICHIER(const Common::String &file); static void DMESS(); static void DMESS1(); + static void bload(const Common::String &file, byte *buf); static int bload_it(Common::ReadStream &stream, void *buf, size_t nbytes); static void F_Censure(); static int CONSTRUIT_SYSTEM(const Common::String &file); static void CONSTRUIT_FICHIER(const Common::String &hop, const Common::String &file); static byte *LIBERE_FICHIER(byte *ptr); static byte *RECHERCHE_CAT(const Common::String &file, int a2); + static void CONSTRUIT_LINUX(const Common::String &file); /** * Returns the size of a file. Throws an error if the file can't be found diff --git a/engines/hopkins/font.cpp b/engines/hopkins/font.cpp index bbf83518a0..5618ea9767 100644 --- a/engines/hopkins/font.cpp +++ b/engines/hopkins/font.cpp @@ -330,7 +330,7 @@ void FontManager::BOITE(int idx, int fileIndex, const Common::String &filename, if (v17 < 0) v17 = -v17; *Txt[idx].field8 = 320 - v17; - v73 = start_x + 320 - v17; + v73 = _vm->_eventsManager.start_x + 320 - v17; v58 = 1; v18 = 0; @@ -432,10 +432,10 @@ LABEL_57: } while (v68 <= 19); if ((unsigned __int16)(Txt[idx].field3FC - 2) > 1u) { - for (i = xp - start_x; largeur_boite + i > 638 && i > -2 && Txt[idx].field3FC]; i -= 2) + for (i = xp - _vm->_eventsManager.start_x; largeur_boite + i > 638 && i > -2 && Txt[idx].field3FC]; i -= 2) ; Txt[idx].field8 = i; - v73 = start_x + i; + v73 = _vm->_eventsManager.start_x + i; } else { if (nbrligne == 639) { while (largeur_boite + v73 > 638 && v73 > -2) @@ -462,8 +462,8 @@ LABEL_57: v27 = -v27; Txt[v26].field8 = 315 - v27; - v28 = start_x + 315 - v27; - v73 = start_x + 315 - v27; + v28 = _vm->_eventsManager.start_x + 315 - v27; + v73 = _vm->_eventsManager.start_x + 315 - v27; Txt[v26].fieldA = 50; v70 = 50; v55 = 50; diff --git a/engines/hopkins/globals.cpp b/engines/hopkins/globals.cpp index 7074e05c0b..7caf57c7b6 100644 --- a/engines/hopkins/globals.cpp +++ b/engines/hopkins/globals.cpp @@ -21,6 +21,7 @@ */ #include "common/textconsole.h" +#include "common/file.h" #include "hopkins/globals.h" #include "hopkins/files.h" #include "hopkins/font.h" @@ -718,4 +719,110 @@ byte *Globals::LIBERE_FICHIER(byte *p) { return PTRNUL; } +void Globals::RESET_CACHE() { + byte *dataP; + + for (int idx = 1; idx <= 5; ++idx) { + dataP = CACHE_BANQUE[idx]; + if (dataP != PTRNUL && dataP) + CACHE_BANQUE[idx] = dos_free2(CACHE_BANQUE[idx]); + CACHE_BANQUE[idx] = PTRNUL; + } + + for (int idx = 0; idx <= 20; ++idx) { + Cache[idx].fieldC = PTRNUL; + Cache[idx].field0 = 0; + Cache[idx].field4 = 0; + Cache[idx].field2 = 0; + Cache[idx].fieldA = 0; + Cache[idx].field6 = 0; + Cache[idx].field8 = 0; + Cache[idx].field10 = 0; + Cache[idx].field12 = 0; + Cache[idx].field14 = 0; + } + + CACHEFLAG = 0; +} + +void Globals::CACHE_ON() { + CACHEFLAG = 1; +} + +void Globals::CACHE_OFF() { + CACHEFLAG = 0; +} + +void Globals::CACHE_SUB(int idx) { + Cache[idx].fieldA = 0; +} + +void Globals::CACHE_ADD(int idx) { + Cache[idx].fieldA = 1; +} + +void Globals::CHARGE_CACHE(const Common::String &file) { + byte *v2; + int v4; + int v5; + int v6; + int v8; + int v9; + int v11; + byte *spriteData; + byte *ptr; + int v14; + int v15; + Common::String v16; + Common::File f; + + RESET_CACHE(); + FileManager::CONSTRUIT_FICHIER(HOPLINK, file); + ptr = FileManager::CHARGE_FICHIER(NFICHIER); + v16 = Common::String((const char *)ptr); + + FileManager::CONSTRUIT_FICHIER(HOPLINK, v16); + + if (!f.exists(NFICHIER)) { + spriteData = FileManager::CHARGE_FICHIER(NFICHIER); + CACHE_BANQUE[1] = spriteData; + v15 = 60; + v14 = 0; + do { + v11 = READ_LE_UINT16((uint16 *)ptr + v15); + v4 = READ_LE_UINT16((uint16 *)ptr + v15 + 1); + v5 = READ_LE_UINT16((uint16 *)ptr + v15 + 2); + v6 = v14; + Cache[v6].field14 = READ_LE_UINT16((uint16 *)ptr + v15 + 4); + Cache[v6].field2 = v11; + Cache[v6].field0 = v4; + Cache[v6].field4 = v5; + Cache[v6].field12 = 1; + if (spriteData == PTRNUL) { + Cache[v14].fieldA = 0; + } else { + v8 = _vm->_objectsManager.Get_Largeur(spriteData, v11); + v9 = _vm->_objectsManager.Get_Hauteur(spriteData, v11); + Cache[v14].fieldC = spriteData; + Cache[v14].field6 = v8; + Cache[v14].field8 = v9; + Cache[v14].fieldA = 1; + } + + if ( !Cache[v14].field0 && !Cache[v14].field4 && !Cache[v14].field2) + Cache[v14].fieldA = 0; + v15 += 5; + ++v14; + } while (v14 <= 21); + CACHE_ON(); + v2 = ptr; + } + dos_free2(v2); +} + +void Globals::B_CACHE_OFF(int idx) { + Bob[idx].field34 = 1; +} + + } // End of namespace Hopkins diff --git a/engines/hopkins/globals.h b/engines/hopkins/globals.h index 9d94873a09..ffb80fd9a0 100644 --- a/engines/hopkins/globals.h +++ b/engines/hopkins/globals.h @@ -72,8 +72,17 @@ struct ListeItem { int field0; int field2; int field4; - int x2; - int y2; + int width; + int height; + int fieldA; +}; + +struct Liste2Item { + int field0; + int field2; + int field4; + int width; + int height; }; struct BobItem { @@ -113,14 +122,6 @@ struct BobItem { int field4A; }; -struct Liste2Item { - int field0; - int field2; - int field4; - int field6; - int field8; -}; - struct BlAnimItem { uint32 v1; uint32 v2; @@ -174,13 +175,19 @@ struct CacheItem { int field6; int field8; int fieldA; + byte *fieldC; int field10; + int field12; int field14; }; // Note: Fields decimal based for now struct Sauvegarde { int field4; + int field80; + int field170; + int field171; + int field172; int field353; int field354; int field355; @@ -249,12 +256,12 @@ public: BqeAnimItem Bqe_Anim[35]; BankItem Bank[8]; BobItem Bob[36]; + ListeItem Liste[6]; Liste2Item Liste2[35]; BlAnimItem BL_ANIM[30]; VBobItem VBob[35]; ObjetWItem ObjetW[300]; BlocItem BLOC[250]; - ListeItem Liste[7]; CacheItem Cache[25]; byte *Winventaire; byte *texte_tmp; @@ -293,10 +300,12 @@ public: int HELICO; uint32 CAT_POSI; uint32 CAT_TAILLE; + bool CAT_FLAG; int iRegul; bool BPP_NOAFF; int SORTIE; int PLANX, PLANY; + int PLANI; int PASSWORD; int NOSPRECRAN; int ECRAN; @@ -322,9 +331,15 @@ public: int opt_music; int opt_txt; int NBTRI; + int AFFLI; + int AFFIVBL; + int NOT_VERIF; bool CACHEFLAG; int AFFINVEN; bool NOPARLE; + bool PLAN_FLAG; + int GOACTION; + int NECESSAIRE; Globals(); ~Globals(); @@ -339,6 +354,14 @@ public: byte *dos_malloc2(int count); byte *dos_free2(byte *p); byte *LIBERE_FICHIER(byte *p); + + void RESET_CACHE(); + void CACHE_ON(); + void CACHE_OFF(); + void CACHE_SUB(int idx); + void CACHE_ADD(int idx); + void CHARGE_CACHE(const Common::String &file); + void B_CACHE_OFF(int idx); }; #define PTRNUL (byte *)NULL diff --git a/engines/hopkins/graphics.cpp b/engines/hopkins/graphics.cpp index d8ad4de283..e1d360e731 100644 --- a/engines/hopkins/graphics.cpp +++ b/engines/hopkins/graphics.cpp @@ -43,7 +43,7 @@ GraphicsManager::GraphicsManager() { nbrligne = 0; Linear = false; VideoPtr = NULL; - start_x = 0; + _vm->_eventsManager.start_x = 0; ofscroll = 0; SCROLL = 0; PCX_L = PCX_H = 0; @@ -262,7 +262,7 @@ void GraphicsManager::INIT_TABLE(int a1, int a2, byte *palette) { int GraphicsManager::SCROLL_ECRAN(int amount) { int result = CLIP(amount, 0, SCREEN_WIDTH); - start_x = result; + _vm->_eventsManager.start_x = result; ofscroll = result; SCROLL = result; return result; @@ -325,6 +325,10 @@ void GraphicsManager::Trans_bloc(byte *destP, byte *srcP, int count, int param1, } while ( !breakFlag); } +void GraphicsManager::Trans_bloc2(byte *surface, byte *col, int size) { + warning("TODO: Trans_bloc2"); +} + // TODO: See if it's feasible and/or desirable to change this to use the Common PCX decoder void GraphicsManager::A_PCX640_480(byte *surface, const Common::String &file, byte *palette, bool typeFlag) { int filesize; @@ -811,9 +815,9 @@ void GraphicsManager::fade_in(const byte *palette, int step, const byte *surface setpal_vga256(palData2); if (Winbpp == 2) { if (SDL_ECHELLE) - m_scroll16A(surface, start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); + m_scroll16A(surface, _vm->_eventsManager.start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); else - m_scroll16(surface, start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); + m_scroll16(surface, _vm->_eventsManager.start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); DD_VBL(); } } @@ -824,9 +828,9 @@ void GraphicsManager::fade_in(const byte *palette, int step, const byte *surface // Refresh the screen if (Winbpp == 2) { if (SDL_ECHELLE) - m_scroll16A(surface, start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); + m_scroll16A(surface, _vm->_eventsManager.start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); else - m_scroll16(surface, start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); + m_scroll16(surface, _vm->_eventsManager.start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); DD_VBL(); } } @@ -859,9 +863,9 @@ void GraphicsManager::fade_out(const byte *palette, int step, const byte *surfac setpal_vga256(palData); if (Winbpp == 2) { if (SDL_ECHELLE) - m_scroll16A(surface, start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); + m_scroll16A(surface, _vm->_eventsManager.start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); else - m_scroll16(surface, start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); + m_scroll16(surface, _vm->_eventsManager.start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); DD_VBL(); } @@ -880,9 +884,9 @@ void GraphicsManager::fade_out(const byte *palette, int step, const byte *surfac setpal_vga256(palData); if (Winbpp == 2) { if (SDL_ECHELLE) - m_scroll16A(surface, start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); + m_scroll16A(surface, _vm->_eventsManager.start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); else - m_scroll16(surface, start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); + m_scroll16(surface, _vm->_eventsManager.start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); DD_VBL(); } @@ -899,7 +903,7 @@ void GraphicsManager::fade_out(const byte *palette, int step, const byte *surfac if (Winbpp == 2) { if (!SDL_ECHELLE) { - m_scroll16(surface, start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); + m_scroll16(surface, _vm->_eventsManager.start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); return DD_VBL(); } goto LABEL_28; @@ -913,12 +917,12 @@ void GraphicsManager::fade_out(const byte *palette, int step, const byte *surfac setpal_vga256(palData); if (Winbpp == 2) { if (!SDL_ECHELLE) { - m_scroll16(surface, start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); + m_scroll16(surface, _vm->_eventsManager.start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); return DD_VBL(); } LABEL_28: - m_scroll16A(surface, start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); + m_scroll16A(surface, _vm->_eventsManager.start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); return DD_VBL(); } } @@ -953,9 +957,9 @@ void GraphicsManager::setpal_vga256_linux(const byte *palette, const byte *surfa if (Winbpp == 2) { if (SDL_ECHELLE) - m_scroll16A(surface, start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); + m_scroll16A(surface, _vm->_eventsManager.start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); else - m_scroll16(surface, start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); + m_scroll16(surface, _vm->_eventsManager.start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); DD_VBL(); } @@ -1494,17 +1498,17 @@ void GraphicsManager::Affiche_Segment_Vesa() { dstRect.top = bloc.y1 * 2 + 30; dstRect.setWidth((bloc.x2 - bloc.x1) * 2); dstRect.setHeight((bloc.y2 - bloc.y1) * 2); - } else if (bloc.x2 > start_x && bloc.x1 < (start_x + SCREEN_WIDTH)) { - if (bloc.x1 < start_x) - bloc.x1 = start_x; - if (bloc.x2 > (start_x + SCREEN_WIDTH)) - bloc.x2 = start_x + SCREEN_WIDTH; + } else if (bloc.x2 > _vm->_eventsManager.start_x && bloc.x1 < (_vm->_eventsManager.start_x + SCREEN_WIDTH)) { + if (bloc.x1 < _vm->_eventsManager.start_x) + bloc.x1 = _vm->_eventsManager.start_x; + if (bloc.x2 > (_vm->_eventsManager.start_x + SCREEN_WIDTH)) + bloc.x2 = _vm->_eventsManager.start_x + SCREEN_WIDTH; if (!SDL_ECHELLE) { // Calculate the bounds int xp = Magic_Number(bloc.x1) - 4; - if (xp < start_x) - xp = start_x; + if (xp < _vm->_eventsManager.start_x) + xp = _vm->_eventsManager.start_x; int yp = Magic_Number(bloc.y1) - 4; if (yp < 0) yp = 0; @@ -1515,30 +1519,30 @@ void GraphicsManager::Affiche_Segment_Vesa() { if (height < 4) height = 4; - if ((xp - start_x + width) > SCREEN_WIDTH) + if ((xp - _vm->_eventsManager.start_x + width) > SCREEN_WIDTH) xp -= 4; if ((height - yp) > (SCREEN_HEIGHT - 40)) yp -= 4; if (Winbpp == 2) { m_scroll16A(VESA_BUFFER, xp, yp, width, height, - Reel_Zoom(xp - start_x, SDL_ECHELLE), Reel_Zoom(yp, SDL_ECHELLE)); + Reel_Zoom(xp - _vm->_eventsManager.start_x, SDL_ECHELLE), Reel_Zoom(yp, SDL_ECHELLE)); } else { m_scroll2A(VESA_BUFFER, xp, yp, width, height, - Reel_Zoom(xp - start_x, SDL_ECHELLE), Reel_Zoom(yp, SDL_ECHELLE)); + Reel_Zoom(xp - _vm->_eventsManager.start_x, SDL_ECHELLE), Reel_Zoom(yp, SDL_ECHELLE)); } - dstRect.left = Reel_Zoom(xp - start_x, SDL_ECHELLE); + dstRect.left = Reel_Zoom(xp - _vm->_eventsManager.start_x, SDL_ECHELLE); dstRect.top = Reel_Zoom(yp, SDL_ECHELLE); dstRect.setWidth(Reel_Zoom(width, SDL_ECHELLE)); dstRect.setHeight(Reel_Zoom(height, SDL_ECHELLE)); } else { if (Winbpp == 2) { m_scroll16(VESA_BUFFER, bloc.x1, bloc.y1, bloc.x2 - bloc.x1, bloc.y2 - bloc.y1, - bloc.x1 - start_x, bloc.y1); + bloc.x1 - _vm->_eventsManager.start_x, bloc.y1); } else { m_scroll(VESA_BUFFER, bloc.x1, bloc.y1, bloc.x2 - bloc.x1, bloc.y2 - bloc.y1, - bloc.x1 - start_x, bloc.y1); + bloc.x1 - _vm->_eventsManager.start_x, bloc.y1); } } } @@ -2131,10 +2135,10 @@ void GraphicsManager::AFFICHE_SPEED(const byte *spriteData, int xp, int yp, int Ajoute_Segment_Vesa(xp, yp, xp + width, yp + height); } -void GraphicsManager::SCOPY(const byte *surface, int x1, int y1, int x2, int y2, byte *destSurface, int destX, int destY) { +void GraphicsManager::SCOPY(const byte *surface, int x1, int y1, int width, int height, byte *destSurface, int destX, int destY) { int top; - int width; - int height; + int croppedWidth; + int croppedHeight; int v11; int height2; int top2; @@ -2142,28 +2146,28 @@ void GraphicsManager::SCOPY(const byte *surface, int x1, int y1, int x2, int y2, left = x1; top = y1; - width = x2; - height = y2; + croppedWidth = width; + croppedHeight = height; if (x1 < min_x) { - width = x2 - (min_x - x1); + croppedWidth = width - (min_x - x1); left = min_x; } if (y1 < min_y) { - height = y2 - (min_y - y1); + croppedHeight = height - (min_y - y1); top = min_y; } top2 = top; - if (top + height > max_y) - height = max_y - top; - v11 = left + width; + if (top + croppedHeight > max_y) + croppedHeight = max_y - top; + v11 = left + croppedWidth; if (v11 > max_x) - width = max_x - left; + croppedWidth = max_x - left; - if (width > 0 && height > 0) { - height2 = height; - Copy_Mem(surface, left, top2, width, height, destSurface, destX, destY); - Ajoute_Segment_Vesa(left, top2, left + width, top2 + height2); + if (croppedWidth > 0 && croppedHeight > 0) { + height2 = croppedHeight; + Copy_Mem(surface, left, top2, croppedWidth, croppedHeight, destSurface, destX, destY); + Ajoute_Segment_Vesa(left, top2, left + croppedWidth, top2 + height2); } } @@ -2241,4 +2245,47 @@ void GraphicsManager::Affiche_Fonte(byte *surface, const byte *spriteData, int x } while (v16 != 1); } +void GraphicsManager::INI_ECRAN(const Common::String &file) { + warning("TODO: INI_ECRAN"); +} + +void GraphicsManager::INI_ECRAN2(const Common::String &file) { + warning("TODO: INI_ECRAN2"); +} + +void GraphicsManager::NB_SCREEN() { + byte *v0; + const byte *v1; + + if (!_vm->_globals.NECESSAIRE) + INIT_TABLE(50, 65, Palette); + if (nbrligne == SCREEN_WIDTH) + Trans_bloc2(VESA_BUFFER, TABLE_COUL, 307200); + if (nbrligne == 1280) + Trans_bloc2(VESA_BUFFER, TABLE_COUL, 614400); + _vm->_graphicsManager.DD_Lock(); + if (Winbpp == 2) { + if (SDL_ECHELLE) + m_scroll16A(VESA_BUFFER, _vm->_eventsManager.start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); + else + m_scroll16(VESA_BUFFER, _vm->_eventsManager.start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); + } + if (Winbpp == 1) { + if (SDL_ECHELLE) + m_scroll2A(VESA_BUFFER, _vm->_eventsManager.start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); + else + m_scroll2(VESA_BUFFER, _vm->_eventsManager.start_x, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0); + } + _vm->_graphicsManager.DD_Unlock(); + + v0 = VESA_SCREEN; + v1 = VESA_BUFFER; + memcpy(VESA_SCREEN, VESA_BUFFER, 0x95FFCu); + v1 = v1 + 614396; + v0 = v0 + 614396; + *v0 = *v1; + *(v0 + 2) = *(v1 + 2); + DD_VBL(); +} + } // End of namespace Hopkins diff --git a/engines/hopkins/graphics.h b/engines/hopkins/graphics.h index 4a567e9a00..8e64e44785 100644 --- a/engines/hopkins/graphics.h +++ b/engines/hopkins/graphics.h @@ -68,7 +68,6 @@ public: Graphics::Surface *VideoPtr; byte *VESA_SCREEN; byte *VESA_BUFFER; - int start_x; int ofscroll; int SCROLL; byte HEADER_PCX[128]; @@ -98,6 +97,7 @@ public: int Largeur; int Compteur_y; int spec_largeur; + bool NOFADE; public: GraphicsManager(); ~GraphicsManager(); @@ -113,6 +113,7 @@ public: void INIT_TABLE(int a1, int a2, byte *a3); int SCROLL_ECRAN(int amount); void Trans_bloc(byte *destP, byte *srcP, int count, int param1, int param2); + void Trans_bloc2(byte *surface, byte *col, int size); void A_PCX640_480(byte *surface, const Common::String &file, byte *palette, bool typeFlag); void Cls_Pal(); void souris_max(); @@ -165,9 +166,12 @@ public: int Reel_Reduc(int v, int percentage); void Affiche_Perfect(byte *destSurface, const byte *srcData, int a3, int a4, int a5, int a6, int a7, int a8); void AFFICHE_SPEED(const byte *spriteData, int xp, int yp, int spriteIndex); - void SCOPY(const byte *surface, int x1, int y1, int x2, int y2, byte *destSurface, int destX, int destY); + void SCOPY(const byte *surface, int x1, int y1, int width, int height, byte *destSurface, int destX, int destY); void Copy_Mem(const byte *srcSurface, int x1, int y1, unsigned int width, int height, byte *destSurface, int destX, int destY); void Affiche_Fonte(byte *surface, const byte *spriteData, int xp, int yp, int characterIndex, int transColour); + void INI_ECRAN(const Common::String &file); + void INI_ECRAN2(const Common::String &file); + void NB_SCREEN(); }; } // End of namespace Hopkins diff --git a/engines/hopkins/hopkins.cpp b/engines/hopkins/hopkins.cpp index a13f9c0cdf..1da0295b35 100644 --- a/engines/hopkins/hopkins.cpp +++ b/engines/hopkins/hopkins.cpp @@ -197,7 +197,7 @@ LABEL_13: if (GLOBALS.SORTIE != 4) break; _globals.DESACTIVE_INVENT = true; - PLAN_BETA(); + _objectsManager.PLAN_BETA(); _globals.DESACTIVE_INVENT = false; } @@ -925,10 +925,6 @@ void HopkinsEngine::REST_SYSTEM() { _eventsManager.CONTROLE_MES(); } -void HopkinsEngine::PLAN_BETA() { - warning("PLAN_BETA"); -} - void HopkinsEngine::PUBQUIT() { _globals.PUBEXIT = 1; _graphicsManager.RESET_SEGMENT_VESA(); diff --git a/engines/hopkins/hopkins.h b/engines/hopkins/hopkins.h index 7692a83643..7930eae32b 100644 --- a/engines/hopkins/hopkins.h +++ b/engines/hopkins/hopkins.h @@ -82,7 +82,6 @@ private: void PASS(); void REST_SYSTEM(); - void PLAN_BETA(); void PERSONAGE(const Common::String &s1, const Common::String &s2, const Common::String &s3, const Common::String &s4, int v); void PERSONAGE2(const Common::String &s1, const Common::String &s2, const Common::String &s3, diff --git a/engines/hopkins/objects.cpp b/engines/hopkins/objects.cpp index 170692d9e4..b943def1bd 100644 --- a/engines/hopkins/objects.cpp +++ b/engines/hopkins/objects.cpp @@ -233,17 +233,17 @@ int ObjectsManager::AJOUTE_OBJET(int objIndex) { void ObjectsManager::AFF_SPRITES() { int v0; - __int16 v1; - __int16 v2; - __int16 destX; - __int16 destY; + int v1; + int v2; + int destX; + int destY; int v5; - __int16 v6; - __int16 v7; - __int16 v8; - __int16 v9; + int v6; + int v7; + int v8; + int v9; int v10; - __int16 v11; + int v11; uint16 *v12; int v13; int v14; @@ -252,24 +252,24 @@ void ObjectsManager::AFF_SPRITES() { int v17; int v18; int v19; - __int16 v20; - __int16 v21; - __int16 v23; - __int16 v24; - __int16 v25; - __int16 v26; - __int16 v27; - __int16 v28; - __int16 v29; - __int16 v30; - __int16 v31; - __int16 v32; - __int16 v33; - signed __int16 v34; - signed __int16 v35; - signed __int16 v36; - __int16 v37; - __int16 v38; + int v20; + int v21; + int v23; + int v24; + int v25; + int v26; + int v27; + int v28; + int v29; + int v30; + int v31; + int v32; + int v33; + signed int v34; + signed int v35; + signed int v36; + int v37; + int v38; uint16 arr[50]; _vm->_globals.NBTRI = 0; @@ -323,8 +323,9 @@ void ObjectsManager::AFF_SPRITES() { if (v9 < _vm->_graphicsManager.min_y) v9 = _vm->_graphicsManager.min_y; - _vm->_graphicsManager.SCOPY(_vm->_graphicsManager.VESA_SCREEN, v29, v24, _vm->_globals.Liste[v31].x2 + 4, - _vm->_globals.Liste[v31].y2 + 4, _vm->_graphicsManager.VESA_BUFFER, v8, v9); + _vm->_graphicsManager.SCOPY(_vm->_graphicsManager.VESA_SCREEN, v29, v24, + _vm->_globals.Liste[v31].width + 4, _vm->_globals.Liste[v31].height + 4, + _vm->_graphicsManager.VESA_BUFFER, v8, v9); _vm->_globals.Liste[v5].field0 = 0; } ++v31; @@ -544,23 +545,23 @@ void ObjectsManager::BOB_ZERO(int idx) { item.field0 = 0; item.field2 = 0; item.field4 = 0; - item.field6 = 0; - item.field8 = 0; + item.width = 0; + item.height = 0; } void ObjectsManager::DEF_BOB(int idx) { int v2; int v3; int v4; - __int16 v5; - __int16 v6; - __int16 v7; - __int16 v8; - __int16 v9; - __int16 v10; + int v5; + int v6; + int v7; + int v8; + int v9; + int v10; int v11; - __int16 v12; - __int16 v13; + int v12; + int v13; v2 = idx; if (_vm->_globals.Bob[v2].field40) { @@ -582,31 +583,31 @@ void ObjectsManager::DEF_BOB(int idx) { _vm->_globals.Liste2[v3].field4 = v13; v4 = idx; - _vm->_globals.Liste2[v3].field6 = _vm->_globals.Bob[v4].field46; - _vm->_globals.Liste2[v3].field8 = _vm->_globals.Bob[v4].field48; + _vm->_globals.Liste2[v3].width = _vm->_globals.Bob[v4].field46; + _vm->_globals.Liste2[v3].height = _vm->_globals.Bob[v4].field48; v5 = _vm->_globals.Liste2[v3].field2; v6 = _vm->_graphicsManager.min_x; if (v5 < _vm->_graphicsManager.min_x) { - _vm->_globals.Liste2[v3].field6 -= _vm->_graphicsManager.min_x - v5; + _vm->_globals.Liste2[v3].width -= _vm->_graphicsManager.min_x - v5; _vm->_globals.Liste2[v3].field2 = v6; } v7 = _vm->_globals.Liste2[v3].field4; v8 = _vm->_graphicsManager.min_y; if (v7 < _vm->_graphicsManager.min_y) { - _vm->_globals.Liste2[v3].field8 -= _vm->_graphicsManager.min_y - v7; + _vm->_globals.Liste2[v3].height -= _vm->_graphicsManager.min_y - v7; _vm->_globals.Liste2[v3].field4 = v8; } v9 = _vm->_globals.Liste2[v3].field2; - if (_vm->_globals.Liste2[v3].field6 + v9 > _vm->_graphicsManager.max_x) - _vm->_globals.Liste2[v3].field6 = _vm->_graphicsManager.max_x - v9; + if (_vm->_globals.Liste2[v3].width + v9 > _vm->_graphicsManager.max_x) + _vm->_globals.Liste2[v3].width = _vm->_graphicsManager.max_x - v9; v10 = _vm->_globals.Liste2[v3].field4; - if (_vm->_globals.Liste2[v3].field8 + v10 > _vm->_graphicsManager.max_y) - _vm->_globals.Liste2[v3].field8 = _vm->_graphicsManager.max_y - v10; + if (_vm->_globals.Liste2[v3].height + v10 > _vm->_graphicsManager.max_y) + _vm->_globals.Liste2[v3].height = _vm->_graphicsManager.max_y - v10; - if (_vm->_globals.Liste2[v3].field6 <= 0 || _vm->_globals.Liste2[v3].field8 <= 0) + if (_vm->_globals.Liste2[v3].width <= 0 || _vm->_globals.Liste2[v3].height <= 0) _vm->_globals.Liste2[v3].field0 = 0; v11 = idx; @@ -614,8 +615,8 @@ void ObjectsManager::DEF_BOB(int idx) { _vm->_graphicsManager.Ajoute_Segment_Vesa( _vm->_globals.Liste2[v11].field2, _vm->_globals.Liste2[v11].field4, - _vm->_globals.Liste2[v11].field2 + _vm->_globals.Liste2[v11].field6, - _vm->_globals.Liste2[v11].field4 + _vm->_globals.Liste2[v11].field8); + _vm->_globals.Liste2[v11].field2 + _vm->_globals.Liste2[v11].width, + _vm->_globals.Liste2[v11].field4 + _vm->_globals.Liste2[v11].height); } } @@ -677,13 +678,13 @@ void ObjectsManager::BOB_OFF(int idx) { void ObjectsManager::SCBOB(int idx) { int v1; - signed __int16 v2; - signed __int16 v3; - signed __int16 v4; - signed __int16 v6; - signed __int16 v7; - __int16 v8; - signed __int16 v9; + signed int v2; + signed int v3; + signed int v4; + signed int v6; + signed int v7; + int v8; + signed int v9; v1 = idx; if (_vm->_globals.Cache[idx].fieldA > 0) { @@ -703,9 +704,9 @@ void ObjectsManager::SCBOB(int idx) { v1 =_vm->_globals.Cache[idx].field14 +_vm->_globals.Cache[idx].field8 + v4; if (v6 > v4) { - if (v6 < (signed __int16)v1) { + if (v6 < (signed int)v1) { v1 = 0; - if (v9 >= v3 && v9 <= (signed __int16)(_vm->_globals.Cache[idx].field6 + v3)) { + if (v9 >= v3 && v9 <= (signed int)(_vm->_globals.Cache[idx].field6 + v3)) { ++_vm->_globals.Cache[idx].fieldA; v1 = 1; } @@ -742,23 +743,23 @@ void ObjectsManager::SCBOB(int idx) { } void ObjectsManager::CALCUL_BOB(int idx) { - __int16 result; - __int16 v3; - __int16 v4; - __int16 v5; - __int16 v6; + int result; + int v3; + int v4; + int v5; + int v6; int v7; int v8; int v9; int v10; int v11; - __int16 v13; - __int16 v14; - __int16 v15; - __int16 v17; - signed __int16 v20; - __int16 v21; - __int16 v22; + int v13; + int v14; + int v15; + int v17; + signed int v20; + int v21; + int v22; _vm->_globals.Bob[idx].field3C = 0; if (_vm->_globals.Bob[idx].field3A == 1) { @@ -786,12 +787,12 @@ void ObjectsManager::CALCUL_BOB(int idx) { v20 = 0; v7 = _vm->_globals.Bob[idx].field36; - if ((signed __int16)v7 < 0) { - v7 = (signed __int16)v7; - if ((signed __int16)v7 < 0) + if ((signed int)v7 < 0) { + v7 = (signed int)v7; + if ((signed int)v7 < 0) v7 = -v7; v20 = v7; - if ((signed __int16)v7 > 95) + if ((signed int)v7 > 95) v20 = 95; } if (_vm->_globals.Bob[idx].field36 > 0) @@ -804,7 +805,7 @@ void ObjectsManager::CALCUL_BOB(int idx) { if (v15 < 0) v8 = -v15; v15 = v8; - v22 = -(signed __int16)_vm->_graphicsManager.Reel_Zoom((signed __int16)v8, v21); + v22 = -(signed int)_vm->_graphicsManager.Reel_Zoom((signed int)v8, v21); } if (v6 >= 0) { v17 = _vm->_graphicsManager.Reel_Zoom(v6, v21); @@ -813,7 +814,7 @@ void ObjectsManager::CALCUL_BOB(int idx) { if (v15 < 0) v9 = -v15; v6 = v9; - v17 = -(signed __int16)_vm->_graphicsManager.Reel_Zoom((signed __int16)v9, v21); + v17 = -(signed int)_vm->_graphicsManager.Reel_Zoom((signed int)v9, v21); } } @@ -825,7 +826,7 @@ void ObjectsManager::CALCUL_BOB(int idx) { if (v15 < 0) v10 = -v15; v15 = v10; - v22 = -(signed __int16)_vm->_graphicsManager.Reel_Reduc((signed __int16)v10, v20); + v22 = -(signed int)_vm->_graphicsManager.Reel_Reduc((signed int)v10, v20); } if (v6 >= 0) { v17 = _vm->_graphicsManager.Reel_Reduc(v6, v20); @@ -833,7 +834,7 @@ void ObjectsManager::CALCUL_BOB(int idx) { v11 = v15; if (v15 < 0) v11 = -v15; - v17 = -(signed __int16)_vm->_graphicsManager.Reel_Reduc((signed __int16)v11, v20); + v17 = -(signed int)_vm->_graphicsManager.Reel_Reduc((signed int)v11, v20); } } @@ -862,25 +863,25 @@ void ObjectsManager::CALCUL_BOB(int idx) { width = _vm->_graphicsManager.Reel_Reduc(width, v20); } - _vm->_globals.Liste2[idx].field6 = width; - _vm->_globals.Liste2[idx].field8 = height; + _vm->_globals.Liste2[idx].width = width; + _vm->_globals.Liste2[idx].height = height; _vm->_globals.Bob[idx].field42 = width; _vm->_globals.Bob[idx].field44 = height; } } void ObjectsManager::VERIFCACHE() { - __int16 v1; - signed __int16 v2; - signed __int16 v3; - signed __int16 v4; - __int16 v5; - __int16 v6; - __int16 v7; - __int16 v8; - __int16 v9; - __int16 v10; - __int16 v11; + int v1; + signed int v2; + signed int v3; + signed int v4; + int v5; + int v6; + int v7; + int v8; + int v9; + int v10; + int v11; v8 = 0; do { @@ -954,7 +955,7 @@ void ObjectsManager::VERIFCACHE() { } void ObjectsManager::INVENT_ANIM() { - __int16 v0; + int v0; signed int v1; if (!DESACTIVE_INVENT) { @@ -1001,16 +1002,16 @@ void ObjectsManager::INVENT_ANIM() { void ObjectsManager::DEF_SPRITE(int idx) { int v2; - __int16 v3; - __int16 v4; + int v3; + int v4; int v5; int v6; - __int16 v7; - __int16 v8; - __int16 v9; - __int16 v10; - __int16 v11; - __int16 v12; + int v7; + int v8; + int v9; + int v10; + int v11; + int v12; int v13; v2 = idx; @@ -1026,29 +1027,29 @@ void ObjectsManager::DEF_SPRITE(int idx) { v5 = idx; v6 = idx; - _vm->_globals.Liste[v5].x2 = Sprite[v6].field30; - _vm->_globals.Liste[v5].y2 = Sprite[v6].field32; + _vm->_globals.Liste[v5].width = Sprite[v6].field30; + _vm->_globals.Liste[v5].height = Sprite[v6].field32; v7 = _vm->_globals.Liste[v5].field2; v8 = _vm->_graphicsManager.min_x; if (v7 < _vm->_graphicsManager.min_x) { - _vm->_globals.Liste[v5].x2 -= _vm->_graphicsManager.min_x - v7; + _vm->_globals.Liste[v5].width -= _vm->_graphicsManager.min_x - v7; _vm->_globals.Liste[v5].field2 = v8; } v9 = _vm->_globals.Liste[v5].field4; v10 = _vm->_graphicsManager.min_y; if (v9 < _vm->_graphicsManager.min_y) { - _vm->_globals.Liste[v5].y2 -= _vm->_graphicsManager.min_y - v9; + _vm->_globals.Liste[v5].height -= _vm->_graphicsManager.min_y - v9; _vm->_globals.Liste[v5].field4 = v10; } v11 = _vm->_globals.Liste[v5].field2; - if (_vm->_globals.Liste[v5].x2 + v11 > _vm->_graphicsManager.max_x) - _vm->_globals.Liste[v5].x2 = _vm->_graphicsManager.max_x - v11; + if (_vm->_globals.Liste[v5].width + v11 > _vm->_graphicsManager.max_x) + _vm->_globals.Liste[v5].width = _vm->_graphicsManager.max_x - v11; v12 = _vm->_globals.Liste[v5].field4; - if ( _vm->_globals.Liste[v5].y2 + v12 > _vm->_graphicsManager.max_y) - _vm->_globals.Liste[v5].y2 = _vm->_graphicsManager.max_y - v12; - if ( _vm->_globals.Liste[v5].x2 <= 0 || _vm->_globals.Liste[v5].y2 <= 0) + if ( _vm->_globals.Liste[v5].height + v12 > _vm->_graphicsManager.max_y) + _vm->_globals.Liste[v5].height = _vm->_graphicsManager.max_y - v12; + if ( _vm->_globals.Liste[v5].width <= 0 || _vm->_globals.Liste[v5].height <= 0) _vm->_globals.Liste[v5].field0 = 0; v13 = idx; @@ -1056,8 +1057,8 @@ void ObjectsManager::DEF_SPRITE(int idx) { _vm->_graphicsManager.Ajoute_Segment_Vesa( _vm->_globals.Liste[v13].field2, _vm->_globals.Liste[v13].field4, - _vm->_globals.Liste[v13].field2 + _vm->_globals.Liste[v13].x2, - _vm->_globals.Liste[v13].field4 + _vm->_globals.Liste[v13].y2); + _vm->_globals.Liste[v13].field2 + _vm->_globals.Liste[v13].width, + _vm->_globals.Liste[v13].field4 + _vm->_globals.Liste[v13].height); } } @@ -1074,21 +1075,21 @@ void ObjectsManager::DEF_CACHE(int idx) { void ObjectsManager::CALCUL_SPRITE(int idx) { int width, height; - __int16 v3; - __int16 v4; - __int16 v5; - __int16 v6; - __int16 v7; - __int16 v8; + int v3; + int v4; + int v5; + int v6; + int v7; + int v8; int v9; int v10; int v11; int v12; int v13; - __int16 v15; - __int16 v16; + int v15; + int v16; int v17; - __int16 v22; + int v22; Sprite[idx + 42].field2A = 0; int v0 = Sprite[idx].field10; @@ -1112,12 +1113,12 @@ void ObjectsManager::CALCUL_SPRITE(int idx) { int reducePercent = 0; v9 = Sprite[idx].fieldC; - if ((signed __int16)v9 < 0) { - v9 = (signed __int16)v9; - if ((signed __int16)v9 < 0) + if ((signed int)v9 < 0) { + v9 = (signed int)v9; + if ((signed int)v9 < 0) v9 = -v9; reducePercent = v9; - if ((signed __int16)v9 > 95) + if ((signed int)v9 > 95) reducePercent = 95; } if (Sprite[idx].fieldC > 0) @@ -1132,7 +1133,7 @@ void ObjectsManager::CALCUL_SPRITE(int idx) { if (v4 < 0) v10 = -v4; v4 = v10; - v22 = -_vm->_graphicsManager.Reel_Zoom((signed __int16)v10, zoomPercent); + v22 = -_vm->_graphicsManager.Reel_Zoom((signed int)v10, zoomPercent); } if (v8 >= 0) { @@ -1142,7 +1143,7 @@ void ObjectsManager::CALCUL_SPRITE(int idx) { if (v4 < 0) v11 = -v4; v8 = v11; - v7 = -_vm->_graphicsManager.Reel_Zoom((signed __int16)v11, zoomPercent); + v7 = -_vm->_graphicsManager.Reel_Zoom((signed int)v11, zoomPercent); } } if (reducePercent) { @@ -1153,7 +1154,7 @@ void ObjectsManager::CALCUL_SPRITE(int idx) { if (v4 < 0) v12 = -v4; v4 = v12; - v22 = -_vm->_graphicsManager.Reel_Reduc((signed __int16)v12, reducePercent); + v22 = -_vm->_graphicsManager.Reel_Reduc((signed int)v12, reducePercent); } if (v8 >= 0) { v7 = _vm->_graphicsManager.Reel_Reduc(v8, reducePercent); @@ -1161,7 +1162,7 @@ void ObjectsManager::CALCUL_SPRITE(int idx) { v13 = v4; if (v4 < 0) v13 = -v4; - v7 = -_vm->_graphicsManager.Reel_Reduc((signed __int16)v13, reducePercent); + v7 = -_vm->_graphicsManager.Reel_Reduc((signed int)v13, reducePercent); } } @@ -1212,25 +1213,25 @@ int ObjectsManager::AvantTri(int a1, int a2, int a3) { void ObjectsManager::AFF_BOB_ANIM() { signed int v1; - __int16 v2; - signed __int16 v5; - __int16 v6; - __int16 v7; - __int16 v8; - signed __int16 v10; - __int16 v11; + int v2; + signed int v5; + int v6; + int v7; + int v8; + signed int v10; + int v11; int v12; int v13; - __int16 v14; + int v14; int v18; int v19; byte *v20; byte *v21; int v22; - __int16 v24; - __int16 v26; - __int16 v27; - __int16 v28; + int v24; + int v26; + int v27; + int v28; int idx = 0; do { @@ -1265,7 +1266,7 @@ void ObjectsManager::AFF_BOB_ANIM() { if (_vm->_globals.BL_ANIM[idx].v1 == 1) _vm->_globals.Bob[idx].field8 = _vm->_globals.BL_ANIM[idx].v2; if ( PERSO_ON == 1 && idx > 20 ) - _vm->_globals.Bob[idx].field8 += _vm->_graphicsManager.start_x; + _vm->_globals.Bob[idx].field8 += _vm->_eventsManager.start_x; _vm->_globals.Bob[idx].fieldA = READ_LE_UINT16(v20 + 2 * v24 + 2); _vm->_globals.Bob[idx].field12 = READ_LE_UINT16(v20 + 2 * v24 + 4); @@ -1284,7 +1285,7 @@ LABEL_37: LABEL_38: v12 = idx; - if ((unsigned __int16)(_vm->_globals.Bob[v12].field1E - 1) <= 1u) + if ((unsigned int)(_vm->_globals.Bob[v12].field1E - 1) <= 1u) _vm->_globals.Bob[v12].field1C = 1; continue; } @@ -1306,7 +1307,7 @@ LABEL_38: if (_vm->_globals.BL_ANIM[idx].v1 == 1) _vm->_globals.Bob[idx].field8 = _vm->_globals.BL_ANIM[idx].v2; if (PERSO_ON == 1 && idx > 20) - _vm->_globals.Bob[idx].field8 += _vm->_graphicsManager.start_x; + _vm->_globals.Bob[idx].field8 += _vm->_eventsManager.start_x; _vm->_globals.Bob[idx].fieldA = READ_LE_UINT16(v21 + 2); _vm->_globals.Bob[idx].field12 = READ_LE_UINT16(v21 + 4); @@ -1354,7 +1355,7 @@ LABEL_38: if (_vm->_globals.Liste2[v27].field0) { _vm->_graphicsManager.SCOPY(_vm->_graphicsManager.VESA_SCREEN, _vm->_globals.Liste2[v27].field2, _vm->_globals.Liste2[v27].field4, - _vm->_globals.Liste2[v27].field6, _vm->_globals.Liste2[v27].field8, + _vm->_globals.Liste2[v27].width, _vm->_globals.Liste2[v27].height, _vm->_graphicsManager.VESA_BUFFER, _vm->_globals.Liste2[v27].field2, _vm->_globals.Liste2[v27].field4); _vm->_globals.Liste2[v27].field0 = 0; @@ -1369,7 +1370,7 @@ LABEL_38: if (_vm->_globals.Liste2[v27].field0) { _vm->_graphicsManager.SCOPY(_vm->_graphicsManager.VESA_SCREEN, _vm->_globals.Liste2[v27].field2, _vm->_globals.Liste2[v27].field4, - _vm->_globals.Liste2[v27].field6, _vm->_globals.Liste2[v27].field8, + _vm->_globals.Liste2[v27].width, _vm->_globals.Liste2[v27].height, _vm->_graphicsManager.VESA_BUFFER, _vm->_globals.Liste2[v27].field2, _vm->_globals.Liste2[v27].field4); _vm->_globals.Liste2[v27].field0 = 0; @@ -1512,4 +1513,319 @@ void ObjectsManager::AFF_VBOB() { } while ( idx <= 29 ); } +int ObjectsManager::XSPR(int idx) { + if (idx > 5) + error("request of the Coord. x a sprite > MAX_SPRITE."); + return Sprite[idx].field8; +} + +int ObjectsManager::YSPR(int idx) { + if (idx > 5) + error("request of the Coord. y a sprite > MAX_SPRITE."); + return Sprite[idx].fieldA; +} + +void ObjectsManager::SPRITE_NOW(const byte *spriteData, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { + _vm->_graphicsManager.Affiche_Perfect(_vm->_graphicsManager.VESA_BUFFER, spriteData, a2, a3, a5, a6, a7, a8); +} + +void ObjectsManager::CLEAR_SPR() { + int idx; + + idx = 0; + do { + Sprite[idx].field1C = PTRNUL; + Sprite[idx].spriteData = PTRNUL; + Sprite[idx].field0 = 0; + ++idx; + } while (idx <= 4); + + idx = 0; + do { + _vm->_globals.Liste[idx].field0 = 0; + _vm->_globals.Liste[idx].field2 = 0; + _vm->_globals.Liste[idx].field4 = 0; + _vm->_globals.Liste[idx].width = 0; + _vm->_globals.Liste[idx].height = 0; + _vm->_globals.Liste[idx].fieldA = 0; + ++idx; + } while (idx <= 4); +} + +void ObjectsManager::SPRITE_ON(int idx) { + if (idx > 5) + error("Tentative d'affichage d'un sprite > MAX_SPRITE."); + + Sprite[idx].field0 = 1; +} + +void ObjectsManager::SPRITE(const byte *spriteData, int a2, int a3, int idx, int a5, int a6, int a7, int a8, int a9) { + if (idx > 5 ) + (8, (int)"Tentative d'affichage d'un sprite > MAX_SPRITE."); + Sprite[idx].spriteData = spriteData; + Sprite[idx].field8 = a2; + Sprite[idx].fieldA = a3; + Sprite[idx].field10 = a5; + Sprite[idx].fieldC = a6; + Sprite[idx].field12 = a8; + Sprite[idx].field14 = a9; + Sprite[idx].field1C = PTRNUL; + Sprite[idx].field20 = 0; + Sprite[idx].field24 = 0; + Sprite[idx].field26 = 0; + Sprite[idx].field22 = 0; + Sprite[idx].field0 = 0; + Sprite[idx].field28 = 0; + Sprite[idx].fieldE = a7; + if (*spriteData == 'R' && *(spriteData + 1) == 'L' && *(spriteData + 2) == 'E') + Sprite[idx].field28 = 1; + + if (Sprite[idx].field28 == 1) { + Sprite[idx].fieldC = 0; + Sprite[idx].fieldE = 0; + } +} + +void ObjectsManager::SPRITE2(const byte *spriteData, int idx, byte *a3, int a4, int a5) { + Sprite[idx].spriteData = spriteData; + Sprite[idx].field1C = a3; + Sprite[idx].field20 = a4; + Sprite[idx].field24 = 0; + Sprite[idx].field26 = 0; + Sprite[idx].fieldC = 0; + Sprite[idx].fieldE = 0; + Sprite[idx].field0 = 1; + Sprite[idx].field22 = 0; + Sprite[idx].field14 = a5; + if (*spriteData == 'R' && *(spriteData + 1) == 'L' && *(spriteData + 2) == 'E') + Sprite[idx].field28 = 1; + + if (Sprite[idx].field28 == 1) { + Sprite[idx].fieldC = 0; + Sprite[idx].fieldE = 0; + } +} + +void ObjectsManager::SPRITE_OFF(int idx) { + Sprite[idx].field0 = 3; + if (Sprite[idx].field1C != PTRNUL) + _vm->_globals.dos_free2(Sprite[idx].field1C); + Sprite[idx].field1C = PTRNUL; +} + +void ObjectsManager::SPRITE_GEL(int idx) { + Sprite[idx].field0 = 3; +} + +int ObjectsManager::SXSPR(int idx) { + if (idx > 5) + error("request of the size of a sprite x > MAX_SPRITE."); + return Get_Largeur(Sprite[idx].spriteData, Sprite[idx].field10); +} + +int ObjectsManager::SYSPR(int idx) { + if (idx > 5) + error("request of the size of a sprite y > MAX_SPRITE."); + return Get_Hauteur(Sprite[idx].spriteData, Sprite[idx].field10); +} + +int ObjectsManager::POSISPR(int idx) { + return Sprite[idx].field22 / 6; +} + +void ObjectsManager::SETPOSISPR(int idx, int a2) { + Sprite[idx].field22 = 6 * a2; + Sprite[idx].field24 = 0; + Sprite[idx].field26 = 0; +} + +void ObjectsManager::SETXSPR(int idx, int xp) { + if (idx > 5) + error("Set the Coord. x a sprite> MAX_SPRITE."); + Sprite[idx].field8 = xp; +} + +void ObjectsManager::SETANISPR(int idx, int a2) { + if (idx > 5) + error("Set the Coord. x a sprite> MAX_SPRITE."); + + Sprite[idx].field10 = a2; +} + +void ObjectsManager::SETYSPR(int idx, int yp) { + if ( idx > 5 ) + error("Set the Coord. y a sprite> MAX_SPRITE."); + Sprite[idx].fieldA = yp; +} + +void ObjectsManager::SETTAILLESPR(int idx, int a2) { + if (idx > 5) + error("Set the Coord. there a sprite> MAX_SPRITE."); + + if (Sprite[idx].field28 != 1) + Sprite[idx].fieldC = a2; +} + +void ObjectsManager::SETFLIPSPR(int idx, int a2) { + if (Sprite[idx].field28 != 1) { + if (idx > 5) + error("Set the Coord. there a sprite> MAX_SPRITE."); + Sprite[idx].fieldE = a2; + } +} + +void ObjectsManager::VERIFZONE() { + warning("VERIFZONE"); +} + +void ObjectsManager::GOHOME2() { + warning("GOHOME2"); +} + +void ObjectsManager::CHARGE_OBSTACLE(const Common::String &file) { + warning("CHARGE_OBSTACLE"); +} + +void ObjectsManager::CHARGE_CACHE(const Common::String &file) { + warning("CHARGE_CACHE"); +} + +void ObjectsManager::CHARGE_ZONE(const Common::String &file) { + warning("CHARGE_ZONE"); +} + +void ObjectsManager::PLAN_BETA() { + int v1; + int v2; + int v3; + int v4; + int v5; + + v1 = 0; + INVENTFLAG = false; + KEY_INVENT = 0; + _vm->_globals.Max_Propre = 1; + _vm->_globals.Max_Ligne_Long = 1; + _vm->_globals.Max_Propre_Gen = 1; + _vm->_globals.Max_Perso_Y = 440; + _vm->_globals.NOSPRECRAN = 1; + _vm->_globals.PLAN_FLAG = 1; + _vm->_graphicsManager.NOFADE = false; + _vm->_globals.NOMARCHE = 0; + sprite_ptr = PTRNUL; + _vm->_globals.SORTIE = 0; + _vm->_globals.AFFLI = 0; + _vm->_globals.AFFIVBL = 0; + _vm->_globals.NOT_VERIF = 1; + _vm->_soundManager.WSOUND(31); + _vm->_globals.iRegul = 1; + _vm->_graphicsManager.LOAD_IMAGE("PLAN"); + CHARGE_OBSTACLE("PLAN.OB2"); + CHARGE_CACHE("PLAN.CA2"); + CHARGE_ZONE("PLAN.ZO2"); + FileManager::CONSTRUIT_SYSTEM("VOITURE.SPR"); + sprite_ptr = FileManager::CHARGE_FICHIER(_vm->_globals.NFICHIER); + _vm->_animationManager.CHARGE_ANIM("PLAN"); + _vm->_graphicsManager.VISU_ALL(); + _vm->_graphicsManager.INI_ECRAN2("PLAN"); + v2 = 0; + do { + _vm->_globals.B_CACHE_OFF(v2++); + } while (v2 <= 15); + _vm->_globals.B_CACHE_OFF(19); + _vm->_globals.B_CACHE_OFF(20); + _vm->_globals.CACHE_ON(); + + if (!_vm->_globals.PLANX && !_vm->_globals.PLANY) { + _vm->_globals.PLANX = 900; + _vm->_globals.PLANY = 319; + _vm->_globals.PLANI = 1; + } + SPRITE(sprite_ptr, _vm->_globals.PLANX, _vm->_globals.PLANY, 0, _vm->_globals.PLANI, 0, 0, 5, 5); + _vm->_eventsManager.souris_xy(_vm->_globals.PLANX, _vm->_globals.PLANY); + my_anim = 0; + _vm->_eventsManager.MOUSE_ON(); + v3 = XSPR(0); + _vm->_graphicsManager.SCROLL_ECRAN(v3 - 320); + _vm->_graphicsManager.ofscroll = XSPR(0) - 320; + SPRITE_ON(0); + _vm->_globals.chemin = PTRNUL; + _vm->_graphicsManager.SETCOLOR3(252, 100, 100, 100); + _vm->_graphicsManager.SETCOLOR3(253, 100, 100, 100); + _vm->_graphicsManager.SETCOLOR3(251, 100, 100, 100); + _vm->_graphicsManager.SETCOLOR3(254, 0, 0, 0); + _vm->_globals.BPP_NOAFF = 1; + + v4 = 0; + do { + _vm->_eventsManager.VBL(); + ++v4; + } while (v4 <= 4); + + _vm->_globals.BPP_NOAFF = 0; + _vm->_globals.iRegul = 1; + _vm->_graphicsManager.FADE_INW(); + _vm->_eventsManager.CHANGE_MOUSE(4); + _vm->_graphicsManager.NOFADE = false; + + do { + v5 = _vm->_eventsManager.BMOUSE(); + if (v5) { + if (_vm->_globals.SAUVEGARDE->field170 == 1 && !_vm->_globals.SAUVEGARDE->field171) { + _vm->_globals.SAUVEGARDE->field171 = 1; + _vm->_globals.NOPARLE = true; + _vm->_talkManager.PARLER_PERSO("APPEL1.pe2"); + _vm->_globals.NOPARLE = false; + v5 = 0; + } + if (_vm->_globals.SAUVEGARDE->field80 == 1 && !_vm->_globals.SAUVEGARDE->field172) { + _vm->_globals.SAUVEGARDE->field172 = 1; + _vm->_globals.NOPARLE = 1; + _vm->_talkManager.PARLER_PERSO("APPEL2.pe2"); + _vm->_globals.NOPARLE = 0; + v5 = 0; + _vm->_eventsManager.souris_bb = false; + } + if (v5 == 1) + BTGAUCHE(); + } + + VERIFZONE(); + GOHOME2(); + + if (_vm->_globals.chemin == PTRNUL && _vm->_globals.GOACTION == 1) + PARADISE(); + _vm->_eventsManager.VBL(); + + if (_vm->_globals.SORTIE) + v1 = 1; + } while (v1 != 1); + + if (!_vm->_graphicsManager.NOFADE) + _vm->_graphicsManager.FADE_OUTW(); + _vm->_globals.iRegul = 0; + _vm->_graphicsManager.NOFADE = false; + _vm->_globals.PLANX = XSPR(0); + _vm->_globals.PLANY = YSPR(0); + _vm->_globals.PLANI = 1; + SPRITE_OFF(0); + _vm->_globals.AFFLI = 0; + sprite_ptr = _vm->_globals.LIBERE_FICHIER(sprite_ptr); + CLEAR_ECRAN(); + _vm->_globals.NOSPRECRAN = 0; + _vm->_globals.PLAN_FLAG = 0; +} + +void ObjectsManager::BTGAUCHE() { + warning("TODO: BTGAUCHE"); +} + +void ObjectsManager::PARADISE() { + warning("TODO: PARADISE"); +} + +void ObjectsManager::CLEAR_ECRAN() { + warning("TODO: CLEAR_ECRAN"); +} + } // End of namespace Hopkins diff --git a/engines/hopkins/objects.h b/engines/hopkins/objects.h index 8212fa7dee..d17764881b 100644 --- a/engines/hopkins/objects.h +++ b/engines/hopkins/objects.h @@ -31,7 +31,7 @@ namespace Hopkins { struct SpriteItem { int field0; - byte *spriteData; + const byte *spriteData; int field8; int fieldA; int fieldC; @@ -39,6 +39,11 @@ struct SpriteItem { int field10; int field12; int field14; + byte *field1C; + int field20; + int field22; + int field24; + int field26; int field28; int field2A; int field2C; @@ -68,6 +73,7 @@ public: byte *inventaire2; byte *SL_SPR; byte *SL_SPR2; + byte *sprite_ptr; bool PERSO_ON; bool SL_FLAG; bool FLAG_VISIBLE; @@ -75,6 +81,9 @@ public: int DESACTIVE_CURSOR; bool BOBTOUS; SpriteItem Sprite[6]; + bool INVENTFLAG; + int KEY_INVENT; + int my_anim; public: ObjectsManager(); void setParent(HopkinsEngine *vm); @@ -112,6 +121,36 @@ public: int AvantTri(int a1, int a2, int a3); void AFF_BOB_ANIM(); void AFF_VBOB(); + + int XSPR(int idx); + int YSPR(int idx); + void SPRITE_NOW(const byte *spriteData, int a2, int a3, int a4, int a5, int a6, int a7, int a8); + + void CLEAR_SPR(); + void SPRITE_ON(int idx); + void SPRITE(const byte *spriteData, int a2, int a3, int idx, int a5, int a6, int a7, int a8, int a9); + void SPRITE2(const byte *spriteData, int idx, byte *a3, int a4, int a5); + void SPRITE_OFF(int idx); + void SPRITE_GEL(int idx); + int SXSPR(int idx); + int SYSPR(int idx); + int POSISPR(int idx); + void SETPOSISPR(int idx, int a2); + void SETXSPR(int idx, int xp); + void SETANISPR(int idx, int a2); + void SETYSPR(int idx, int yp); + void SETTAILLESPR(int idx, int a2); + void SETFLIPSPR(int idx, int a2); + + void VERIFZONE(); + void GOHOME2(); + void CHARGE_OBSTACLE(const Common::String &file); + void CHARGE_CACHE(const Common::String &file); + void CHARGE_ZONE(const Common::String &file); + void PLAN_BETA(); + void BTGAUCHE(); + void PARADISE(); + void CLEAR_ECRAN(); }; } // End of namespace Hopkins diff --git a/engines/hopkins/talk.cpp b/engines/hopkins/talk.cpp index 0051c4efc1..2043f9a245 100644 --- a/engines/hopkins/talk.cpp +++ b/engines/hopkins/talk.cpp @@ -37,6 +37,145 @@ void TalkManager::setParent(HopkinsEngine *vm) { _vm = vm; } +void TalkManager::PARLER_PERSO(const Common::String &filename) { + int v2; + int v3; + int v4; + int v5; + int v6; + int v7; + byte *v8; + byte *v9; + byte *v10; + int v11; + byte v13; + int v14; + int v15; + Common::String v16; + + v15 = 0; + _vm->_fontManager.TEXTE_OFF(5); + _vm->_fontManager.TEXTE_OFF(9); + _vm->_eventsManager.VBL(); + _vm->_graphicsManager.no_scroll = 1; + v13 = _vm->_globals.DESACTIVE_INVENT; + _vm->_globals.DESACTIVE_INVENT = 1; + BUFFERPERSO = FileManager::RECHERCHE_CAT(filename, 5); + TAILLEPERSO = _vm->_globals.CAT_TAILLE; + if (BUFFERPERSO == PTRNUL) { + FileManager::CONSTRUIT_FICHIER(_vm->_globals.HOPANIM, filename); + BUFFERPERSO = FileManager::CHARGE_FICHIER(_vm->_globals.NFICHIER); + TAILLEPERSO = FileManager::FLONG(_vm->_globals.NFICHIER); + } + _vm->_globals.SAUVEGARDE->field4 = 0; + RENVOIE_FICHIER(40, v16, (const char *)BUFFERPERSO); + RENVOIE_FICHIER(0, FQUEST, (const char *)BUFFERPERSO); + RENVOIE_FICHIER(20, FREPON, (const char *)BUFFERPERSO); + if (_vm->_globals.FR == 1) { + FREPON = FQUEST = "RUE.TXT"; + } else if (!_vm->_globals.FR) { + FREPON = FQUEST = "RUEAN.TXT"; + } else if (_vm->_globals.FR == 2) { + FREPON = FQUEST = "RUEES.TXT"; + } + v2 = READ_LE_UINT16((uint16 *)BUFFERPERSO + 40); + v3 = 20 * READ_LE_UINT16((uint16 *)BUFFERPERSO + 42) + 110; + PCHERCHE = 20 * READ_LE_UINT16((uint16 *)BUFFERPERSO + 42) + 110; + PERSOSPR = FileManager::RECHERCHE_CAT(v16, 7); + if (PERSOSPR) { + _vm->_globals.CAT_FLAG = 0; + FileManager::CONSTRUIT_FICHIER(_vm->_globals.HOPANIM, v16); + } else { + _vm->_globals.CAT_FLAG = 1; + FileManager::CONSTRUIT_FICHIER(_vm->_globals.HOPANIM, "RES_SAN.RES"); + } + PERSOSPR = _vm->_objectsManager.CHARGE_SPRITE(_vm->_globals.NFICHIER); + _vm->_globals.CAT_FLAG = 0; + FileManager::CONSTRUIT_LINUX("TEMP.SCR"); + if (_vm->_graphicsManager.nbrligne == 640) + FileManager::SAUVE_FICHIER(_vm->_globals.NFICHIER, _vm->_graphicsManager.VESA_SCREEN, 0x4B000u); + if (_vm->_graphicsManager.nbrligne == 1280) + FileManager::SAUVE_FICHIER(_vm->_globals.NFICHIER, _vm->_graphicsManager.VESA_SCREEN, 0x96000u); + if (!_vm->_graphicsManager.nbrligne) + _vm->_graphicsManager.ofscroll = 0; + _vm->_graphicsManager.NB_SCREEN(); + _vm->_objectsManager.PERSO_ON = 1; + CHERCHE_PAL(v3, 0); + CHERCHE_ANIM0(v3, 0); + ANIM_PERSO_INIT(); + PLIGNE1 = v2; + PLIGNE2 = v2 + 1; + PLIGNE3 = v2 + 2; + PLIGNE4 = v2 + 3; + v14 = _vm->_eventsManager.btsouris; + _vm->_eventsManager.btsouris = 4; + _vm->_eventsManager.CHANGE_MOUSE(0); + if (!_vm->_globals.NOPARLE) { + v4 = v2 + 3; + do { + v5 = DIALOGUE(); + if ((signed __int16)v5 != v4) + v15 = DIALOGUE_REP(v5); + if (v15 == -1) + v5 = v2 + 3; + _vm->_eventsManager.VBL(); + } while ((signed __int16)v5 != v4); + } + if (_vm->_globals.NOPARLE == 1) { + v6 = 1; + do + v7 = DIALOGUE_REP(v6++); + while (v7 != -1); + } + CLEAR_ANIM_PERSO(); + _vm->_globals.NOPARLE = 0; + _vm->_globals.NECESSAIRE = 1; + BUFFERPERSO = FileManager::LIBERE_FICHIER(BUFFERPERSO); + PERSOSPR = FileManager::LIBERE_FICHIER(PERSOSPR); + _vm->_graphicsManager.NB_SCREEN(); + _vm->_globals.NECESSAIRE = 0; + FileManager::CONSTRUIT_LINUX("TEMP.SCR"); + FileManager::bload(_vm->_globals.NFICHIER, _vm->_graphicsManager.VESA_SCREEN); + _vm->_objectsManager.PERSO_ON = 0; + _vm->_eventsManager.btsouris = v14; + + _vm->_eventsManager.CHANGE_MOUSE(v14); + _vm->_graphicsManager.SETCOLOR3(253, 100, 100, 100); + _vm->_graphicsManager.INIT_TABLE(145, 150, _vm->_graphicsManager.Palette); + _vm->_graphicsManager.setpal_vga256(_vm->_graphicsManager.Palette); + _vm->_graphicsManager.DD_LOCK(); + if (_vm->_graphicsManager.Winbpp == 2) { + if (_vm->_graphicsManager.SDL_ECHELLE) + _vm->_graphicsManager.m_scroll16A(_vm->_graphicsManager.VESA_SCREEN, _vm->_eventsManager.start_x, 0, 640, 480, 0, 0); + else + _vm->_graphicsManager.m_scroll16(_vm->_graphicsManager.VESA_SCREEN, _vm->_eventsManager.start_x, 0, 640, 480, 0, 0); + } + if (_vm->_graphicsManager.Winbpp == 1) { + if (_vm->_graphicsManager.SDL_ECHELLE) + _vm->_graphicsManager.m_scroll2A(_vm->_graphicsManager.VESA_SCREEN, _vm->_eventsManager.start_x, 0, 640, 480, 0, 0); + else + _vm->_graphicsManager.m_scroll2(_vm->_graphicsManager.VESA_SCREEN, _vm->_eventsManager.start_x, 0, 640, 480, 0, 0); + } + _vm->_graphicsManager.DD_UNLOCK(); + v8 = _vm->_graphicsManager.VESA_BUFFER; + v9 = _vm->_graphicsManager.VESA_SCREEN; + memcpy(_vm->_graphicsManager.VESA_BUFFER, _vm->_graphicsManager.VESA_SCREEN, 0x95FFCu); + v9 = v9 + 614396; + v8 = v8 + 614396; + *v8 = *v9; + v8 = v8 + 2; + *v8 = *(v9 + 2); + v10 = v8 + 1; + _vm->_globals.DESACTIVE_INVENT = v13; + _vm->_graphicsManager.DD_VBL(); + v11 = 0; + do { + _vm->_eventsManager.VBL(); + ++v11; + } while (v11 <= 4); + _vm->_graphicsManager.no_scroll = 0; +} + void TalkManager::PARLER_PERSO2(const Common::String &filename) { int v1; int v2; @@ -598,4 +737,16 @@ void TalkManager::BOB_VISU_PARLE(int idx) { } } +void TalkManager::CHERCHE_ANIM0(int a1, int a2) { + warning("TODO: CHERCHE_ANIM0"); +} + +void TalkManager::ANIM_PERSO_INIT() { + warning("TODO: ANIM_PERSO_INIT"); +} + +void TalkManager::CLEAR_ANIM_PERSO() { + warning("TODO: CLEAR_ANIM_PERSO"); +} + } // End of namespace Hopkins diff --git a/engines/hopkins/talk.h b/engines/hopkins/talk.h index 6e6cb2d608..137ff983d4 100644 --- a/engines/hopkins/talk.h +++ b/engines/hopkins/talk.h @@ -48,6 +48,7 @@ public: void setParent(HopkinsEngine *vm); void PARLER_PERSO2(const Common::String &filename); + void PARLER_PERSO(const Common::String &filename); void RENVOIE_FICHIER(int srcStart, Common::String &dest, const char *srcData); int DIALOGUE(); int DIALOGUE_REP(int idx); @@ -58,6 +59,9 @@ public: int VERIF_BOITE(__int16 a1, const Common::String &a2, __int16 a3); void VISU_PARLE(); void BOB_VISU_PARLE(int idx); + void CHERCHE_ANIM0(int a1, int a2); + void ANIM_PERSO_INIT(); + void CLEAR_ANIM_PERSO(); }; } // End of namespace Hopkins -- cgit v1.2.3