Skip to content

Commit

Permalink
HOPKINS: Initial implementation of main menu method
Browse files Browse the repository at this point in the history
  • Loading branch information
dreammaster committed Sep 17, 2012
1 parent 0b610c4 commit df41095
Show file tree
Hide file tree
Showing 11 changed files with 521 additions and 165 deletions.
5 changes: 5 additions & 0 deletions engines/hopkins/globals.cpp
Expand Up @@ -704,4 +704,9 @@ byte *Globals::dos_free2(byte *p) {
return PTRNUL;
}

byte *Globals::LIBERE_FICHIER(byte *p) {
dos_free2(p);
return PTRNUL;
}

} // End of namespace Hopkins
1 change: 1 addition & 0 deletions engines/hopkins/globals.h
Expand Up @@ -248,6 +248,7 @@ class Globals {
void CHARGE_OBJET();
byte *dos_malloc2(int count);
byte *dos_free2(byte *p);
byte *LIBERE_FICHIER(byte *p);
};

#define PTRNUL (byte *)NULL
Expand Down
134 changes: 0 additions & 134 deletions engines/hopkins/graphics.cpp
Expand Up @@ -969,138 +969,4 @@ void GraphicsManager::RESET_SEGMENT_VESA() {
warning("TODO: RESET_SEGMENT_VESA");
}

/*------------------------------------------------------------------------*/

byte *ObjectManager::CHANGE_OBJET(int objIndex) {
byte *result = ObjectManager::CAPTURE_OBJET(objIndex, 1);
GLOBALS.Bufferobjet = result;
GLOBALS.Nouv_objet = 1;
GLOBALS.OBJET_EN_COURS = objIndex;
return result;
}

byte *ObjectManager::CAPTURE_OBJET(int objIndex, int mode) {
byte *result = NULL;
byte *dataP;

dataP = 0;
int val1 = GLOBALS.ObjetW[objIndex].field0;
int val2 = GLOBALS.ObjetW[objIndex].field1;

if (mode == 1)
++val2;
if (val1 != GLOBALS.NUM_FICHIER_OBJ) {
if (GLOBALS.ADR_FICHIER_OBJ != PTRNUL)
ObjectManager::DEL_FICHIER_OBJ();
if (val1 == 1) {
FileManager::CONSTRUIT_SYSTEM("OBJET1.SPR");
GLOBALS.ADR_FICHIER_OBJ = ObjectManager::CHARGE_SPRITE(GLOBALS.NFICHIER);
}
GLOBALS.NUM_FICHIER_OBJ = val1;
}

int width = ObjectManager::Get_Largeur(GLOBALS.ADR_FICHIER_OBJ, val2);
int height = ObjectManager::Get_Hauteur(GLOBALS.ADR_FICHIER_OBJ, val2);
GLOBALS.OBJL = width;
GLOBALS.OBJH = height;

switch (mode) {
case 0:
dataP = GLOBALS.dos_malloc2(height * width);
if (dataP == PTRNUL)
error("CAPTURE_OBJET");

ObjectManager::capture_mem_sprite(GLOBALS.ADR_FICHIER_OBJ, dataP, val2);
break;

case 1:
ObjectManager::sprite_alone(GLOBALS.ADR_FICHIER_OBJ, GLOBALS.Bufferobjet, val2);
result = GLOBALS.Bufferobjet;
break;

case 3:
ObjectManager::capture_mem_sprite(GLOBALS.ADR_FICHIER_OBJ, GLOBALS.INVENTAIRE_OBJET, val2);
result = GLOBALS.INVENTAIRE_OBJET;
break;

default:
result = dataP;
break;
}

return result;
}

int ObjectManager::Get_Largeur(const byte *objectData, int objIndex) {
const byte *objP = objectData + 3;
for (int i = objIndex; i; --i)
objP += READ_LE_UINT32(objP) + 16;

return READ_LE_UINT16(objP + 4);
}

int ObjectManager::Get_Hauteur(const byte *objectData, int objIndex) {
const byte *objP = objectData + 3;
for (int i = objIndex; i; --i)
objP += READ_LE_UINT32(objP) + 16;

return READ_LE_UINT16(objP + 6);
}

int ObjectManager::sprite_alone(const byte *objectData, byte *sprite, int objIndex) {
const byte *objP = objectData + 3;
for (int i = objIndex; i; --i) {
objP += READ_LE_UINT32(objP) + 16;
}

objP += 4;
int result = READ_LE_UINT16(objP) * READ_LE_UINT16(objP + 2);

memcpy(sprite + 3, objP - 4, result + 16);
return result;
}

byte *ObjectManager::DEL_FICHIER_OBJ() {
GLOBALS.NUM_FICHIER_OBJ = 0;
if (GLOBALS.ADR_FICHIER_OBJ != PTRNUL)
GLOBALS.ADR_FICHIER_OBJ = FileManager::LIBERE_FICHIER(GLOBALS.ADR_FICHIER_OBJ);

byte *result = PTRNUL;
GLOBALS.ADR_FICHIER_OBJ = PTRNUL;
return result;
}

byte *ObjectManager::CHARGE_SPRITE(const Common::String &file) {
FileManager::DMESS1();
return FileManager::CHARGE_FICHIER(file);
}

int ObjectManager::capture_mem_sprite(const byte *objectData, byte *sprite, int objIndex) {
const byte *objP = objectData + 3;
for (int i = objIndex; i; --i) {
objP += READ_LE_UINT32(objP) + 16;
}

objP += 4;
int result = READ_LE_UINT16(objP) * READ_LE_UINT16(objP + 2);

memcpy(sprite, objP + 12, result);
return result;
}

int ObjectManager::AJOUTE_OBJET(int objIndex) {
bool flag = false;
int arrIndex = 0;
do {
++arrIndex;
if (!GLOBALS.INVENTAIRE[arrIndex])
flag = true;
if (arrIndex == 32)
flag = true;
} while (!flag);

GLOBALS.INVENTAIRE[arrIndex] = objIndex;
return arrIndex;
}

} // End of namespace Hopkins
15 changes: 0 additions & 15 deletions engines/hopkins/graphics.h
Expand Up @@ -122,21 +122,6 @@ class GraphicsManager {
void RESET_SEGMENT_VESA();
};

class ObjectManager {
public:
static byte *CHANGE_OBJET(int objIndex);
static byte *CAPTURE_OBJET(int objIndex, int mode);

static int Get_Largeur(const byte *objectData, int objIndex);
static int Get_Hauteur(const byte *objectData, int objIndex);
static int sprite_alone(const byte *objectData, byte *sprite, int objIndex);
static byte *DEL_FICHIER_OBJ();

static byte *CHARGE_SPRITE(const Common::String &file);
static int capture_mem_sprite(const byte *objectData, byte *sprite, int objIndex);
static int AJOUTE_OBJET(int objIndex);
};

} // End of namespace Hopkins

#endif /* HOPKINS_GRAPHICS_H */
11 changes: 3 additions & 8 deletions engines/hopkins/hopkins.cpp
Expand Up @@ -58,8 +58,8 @@ Common::Error HopkinsEngine::run() {
_soundManager.WSOUND_INIT();

GLOBALS.CHARGE_OBJET();
ObjectManager::CHANGE_OBJET(14);
ObjectManager::AJOUTE_OBJET(14);
_objectsManager.CHANGE_OBJET(14);
_objectsManager.AJOUTE_OBJET(14);

GLOBALS.HELICO = 0;
_eventsManager.MOUSE_OFF();
Expand Down Expand Up @@ -102,7 +102,7 @@ Common::Error HopkinsEngine::run() {
GLOBALS.SORTIE = 0;

if (!GLOBALS.SORTIE) {
GLOBALS.SORTIE = MENU();
GLOBALS.SORTIE = _menuManager.MENU();
if (GLOBALS.SORTIE == -1) {
PUBQUIT();
_globals.PERSO = _globals.dos_free2(_globals.PERSO);
Expand Down Expand Up @@ -887,11 +887,6 @@ void HopkinsEngine::COMPUT_HOPKINS(int a1) {
warning("TODO: COMPUT_HOPKINS");
}

int HopkinsEngine::MENU() {
warning("TODO: MENU");
return 0;
}

void HopkinsEngine::ENDEMO() {
warning("TODO: ENDEMO");
}
Expand Down
19 changes: 11 additions & 8 deletions engines/hopkins/hopkins.h
Expand Up @@ -35,6 +35,8 @@
#include "hopkins/events.h"
#include "hopkins/globals.h"
#include "hopkins/graphics.h"
#include "hopkins/menu.h"
#include "hopkins/objects.h"
#include "hopkins/sound.h"

/**
Expand Down Expand Up @@ -76,11 +78,6 @@ class HopkinsEngine : public Engine {

void INIT_SYSTEM();

/**
* Run the introduction sequence
*/
void INTRORUN();

void PASS();
void REST_SYSTEM();
void PLAN_BETA();
Expand All @@ -90,7 +87,6 @@ class HopkinsEngine : public Engine {
const Common::String &s4, int v);
void PUBQUIT();
void COMPUT_HOPKINS(int a1);
int MENU();
void ENDEMO();
void BOOM();
protected:
Expand All @@ -99,10 +95,12 @@ class HopkinsEngine : public Engine {
virtual bool hasFeature(EngineFeature f) const;

public:
Globals _globals;
AnimationManager _animationManager;
EventsManager _eventsManager;
Globals _globals;
GraphicsManager _graphicsManager;
AnimationManager _animationManager;
MenuManager _menuManager;
ObjectsManager _objectsManager;
SoundManager _soundManager;
public:
HopkinsEngine(OSystem *syst, const HopkinsGameDescription *gameDesc);
Expand All @@ -115,6 +113,11 @@ class HopkinsEngine : public Engine {
bool getIsDemo() const;

int getRandomNumber(int maxNumber);

/**
* Run the introduction sequence
*/
void INTRORUN();
};

// Global reference to the HopkinsEngine object
Expand Down

0 comments on commit df41095

Please sign in to comment.