aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/cge/bitmap.cpp10
-rw-r--r--engines/cge/btfile.cpp25
-rw-r--r--engines/cge/cfile.cpp6
-rw-r--r--engines/cge/cge.cpp33
-rw-r--r--engines/cge/cge.h39
-rw-r--r--engines/cge/cge_main.cpp235
-rw-r--r--engines/cge/cge_main.h39
-rw-r--r--engines/cge/config.cpp128
-rw-r--r--engines/cge/detection.cpp6
-rw-r--r--engines/cge/ems.cpp4
-rw-r--r--engines/cge/game.cpp8
-rw-r--r--engines/cge/game.h4
-rw-r--r--engines/cge/general.cpp31
-rw-r--r--engines/cge/gettext.cpp10
-rw-r--r--engines/cge/gettext.h11
-rw-r--r--engines/cge/jbw.h23
-rw-r--r--engines/cge/mixer.cpp12
-rw-r--r--engines/cge/mixer.h8
-rw-r--r--engines/cge/mouse.cpp2
-rw-r--r--engines/cge/mouse.h12
-rw-r--r--engines/cge/snail.cpp17
-rw-r--r--engines/cge/snail.h7
-rw-r--r--engines/cge/sound.cpp8
-rw-r--r--engines/cge/startup.cpp2
-rw-r--r--engines/cge/talk.cpp32
-rw-r--r--engines/cge/talk.h10
-rw-r--r--engines/cge/text.cpp20
-rw-r--r--engines/cge/text.h5
-rw-r--r--engines/cge/vga13h.cpp55
-rw-r--r--engines/cge/vga13h.h7
-rw-r--r--engines/cge/vmenu.cpp22
-rw-r--r--engines/cge/vmenu.h12
32 files changed, 449 insertions, 394 deletions
diff --git a/engines/cge/bitmap.cpp b/engines/cge/bitmap.cpp
index 4112ccb380..943f1cf154 100644
--- a/engines/cge/bitmap.cpp
+++ b/engines/cge/bitmap.cpp
@@ -202,18 +202,18 @@ BMP_PTR BITMAP::Code(void) {
int bpl;
if (V) { // 2nd pass - fill the hide table
- for (i = 0; i < H; i ++) {
+ for (i = 0; i < H; i++) {
B[i].skip = 0xFFFF;
B[i].hide = 0x0000;
}
}
- for (bpl = 0; bpl < 4; bpl ++) { // once per each bitplane
+ for (bpl = 0; bpl < 4; bpl++) { // once per each bitplane
uint8 *bm = M;
bool skip = (bm[bpl] == TRANS);
uint16 j;
cnt = 0;
- for (i = 0; i < H; i ++) { // once per each line
+ for (i = 0; i < H; i++) { // once per each line
uint8 pix;
for (j = bpl; j < W; j += 4) {
pix = bm[j];
@@ -282,7 +282,7 @@ BMP_PTR BITMAP::Code(void) {
B = (HideDesc *)(V + sizV);
}
cnt = 0;
- for (i = 0; i < H; i ++) {
+ for (i = 0; i < H; i++) {
if (B[i].skip == 0xFFFF) { // whole line is skipped
B[i].skip = (cnt + SCR_WID) >> 2;
cnt = 0;
@@ -334,7 +334,7 @@ bool BITMAP::SolidAt(int x, int y) {
while (true) {
uint16 w, t;
- w = * (uint16 *) m;
+ w = *(uint16 *) m;
m += 2;
t = w & 0xC000;
w &= 0x3FFF;
diff --git a/engines/cge/btfile.cpp b/engines/cge/btfile.cpp
index a6ba3d85b0..db0ebc2d5f 100644
--- a/engines/cge/btfile.cpp
+++ b/engines/cge/btfile.cpp
@@ -42,7 +42,7 @@ namespace CGE {
BTFILE::BTFILE(const char *name, IOMODE mode, CRYPT *crpt)
: IOHAND(name, mode, crpt) {
- for (int i = 0; i < BT_LEVELS; i ++) {
+ for (int i = 0; i < BT_LEVELS; i++) {
Buff[i].Page = new BT_PAGE;
Buff[i].PgNo = BT_NONE;
Buff[i].Indx = -1;
@@ -54,7 +54,7 @@ BTFILE::BTFILE(const char *name, IOMODE mode, CRYPT *crpt)
BTFILE::~BTFILE(void) {
- for (int i = 0; i < BT_LEVELS; i ++) {
+ for (int i = 0; i < BT_LEVELS; i++) {
PutPage(i);
delete Buff[i].Page;
}
@@ -72,7 +72,7 @@ void BTFILE::PutPage(int lev, bool hard) {
BT_PAGE *BTFILE::GetPage(int lev, uint16 pgn) {
if (Buff[lev].PgNo != pgn) {
- uint32 pos = pgn * sizeof(BT_PAGE);
+ int32 pos = pgn * sizeof(BT_PAGE);
PutPage(lev);
Buff[lev].PgNo = pgn;
if (Size() > pos) {
@@ -90,9 +90,6 @@ BT_PAGE *BTFILE::GetPage(int lev, uint16 pgn) {
return Buff[lev].Page;
}
-// Does this work, or does it have to compare the entire buffer?
-#define memicmp(s1, s2, n) scumm_strnicmp((const char *)s1, (const char *)s2, n)
-
BT_KEYPACK *BTFILE::Find(const char *key) {
int lev = 0;
uint16 nxt = BT_ROOT;
@@ -101,8 +98,9 @@ BT_KEYPACK *BTFILE::Find(const char *key) {
// search
if (pg->Hea.Down != BT_NONE) {
int i;
- for (i = 0; i < pg->Hea.Count; i ++) {
- if (memicmp(key, pg->Inn[i].Key, BT_KEYLEN) < 0)
+ for (i = 0; i < pg->Hea.Count; i++) {
+ // Does this work, or does it have to compare the entire buffer?
+ if (scumm_strnicmp((const char *) key, (const char*)pg->Inn[i].Key, BT_KEYLEN) < 0)
break;
}
nxt = (i) ? pg->Inn[i - 1].Down : pg->Hea.Down;
@@ -110,9 +108,10 @@ BT_KEYPACK *BTFILE::Find(const char *key) {
++ lev;
} else {
int i;
- for (i = 0; i < pg->Hea.Count - 1; i ++)
+ for (i = 0; i < pg->Hea.Count - 1; i++) {
if (scumm_stricmp((const char *)key, (const char *)pg->Lea[i].Key) <= 0)
break;
+ }
Buff[lev].Indx = i;
return &pg->Lea[i];
}
@@ -122,7 +121,7 @@ BT_KEYPACK *BTFILE::Find(const char *key) {
int keycomp(const void *k1, const void *k2) {
- return memicmp(k1, k2, BT_KEYLEN);
+ return scumm_strnicmp((const char *) k1, (const char*) k2, BT_KEYLEN);
}
@@ -136,15 +135,15 @@ void BTFILE::Make(BT_KEYPACK *keypack, uint16 count) {
*Leaf = GetPage(1, n);
Root->Hea.Down = n;
PutPage(0, true);
- while (count --) {
+ while (count--) {
if (Leaf->Hea.Count >= ArrayCount(Leaf->Lea)) {
PutPage(1, true); // save filled page
Leaf = GetPage(1, ++n); // take empty page
memcpy(Root->Inn[Root->Hea.Count].Key, keypack->Key, BT_KEYLEN);
- Root->Inn[Root->Hea.Count ++].Down = n;
+ Root->Inn[Root->Hea.Count++].Down = n;
Buff[0].Updt = true;
}
- Leaf->Lea[Leaf->Hea.Count ++] = * (keypack ++);
+ Leaf->Lea[Leaf->Hea.Count++] = *(keypack++);
Buff[1].Updt = true;
}
}
diff --git a/engines/cge/cfile.cpp b/engines/cge/cfile.cpp
index da56587ebe..85e51a94c1 100644
--- a/engines/cge/cfile.cpp
+++ b/engines/cge/cfile.cpp
@@ -126,7 +126,7 @@ uint16 IOBUF::Read(uint8 *buf) {
Ptr += n;
if (eol) {
++ Ptr;
- * (buf ++) = '\n';
+ *(buf++) = '\n';
++ total;
if (Ptr >= Lim)
ReadBuff();
@@ -186,14 +186,14 @@ int IOBUF::Read(void) {
if (Lim == 0)
return -1;
}
- return Buff[Ptr ++];
+ return Buff[Ptr++];
}
void IOBUF::Write(uint8 b) {
if (Lim >= IOBUF_SIZE)
WriteBuff();
- Buff[Lim ++] = b;
+ Buff[Lim++] = b;
}
diff --git a/engines/cge/cge.cpp b/engines/cge/cge.cpp
index 287586e092..2fd196f509 100644
--- a/engines/cge/cge.cpp
+++ b/engines/cge/cge.cpp
@@ -45,7 +45,8 @@ CGEEngine::CGEEngine(OSystem *syst, const ADGameDescription *gameDescription)
// Debug/console setup
DebugMan.addDebugChannel(kCGEDebug, "general", "CGE general debug channel");
- debug("CGEEngine::CGEEngine");
+ _isDemo = _gameDescription->flags & ADGF_DEMO;
+
}
void CGEEngine::setup() {
@@ -58,22 +59,22 @@ void CGEEngine::setup() {
VGA::init();
// Initialise engine objects
- Text = new TEXT(ProgName(), 128);
+ Text = new TEXT(this, ProgName(), 128);
Vga = new VGA(M13H);
Heart = new HEART;
- Hero = new WALK(NULL);
- Sys = new SYSTEM();
- PocLight = new SPRITE(LI);
- Mouse = new MOUSE;
+ Hero = new WALK(this, NULL);
+ Sys = new SYSTEM(this);
+ PocLight = new SPRITE(this, LI);
+ Mouse = new MOUSE(this);
for (int i = 0; i < POCKET_NX; i++)
- Pocket[i] = new SPRITE(NULL);
- Sprite = new SPRITE(NULL);
- MiniCave = new SPRITE(NULL);
- Shadow = new SPRITE(NULL);
- HorzLine = new SPRITE(HL);
- InfoLine = new INFO_LINE(INFO_W);
- CavLight = new SPRITE(PR);
- DebugLine = new INFO_LINE(SCR_WID);
+ Pocket[i] = new SPRITE(this, NULL);
+ Sprite = new SPRITE(this, NULL);
+ MiniCave = new SPRITE(this, NULL);
+ Shadow = new SPRITE(this, NULL);
+ HorzLine = new SPRITE(this, HL);
+ InfoLine = new INFO_LINE(this, INFO_W);
+ CavLight = new SPRITE(this, PR);
+ DebugLine = new INFO_LINE(this, SCR_WID);
MB[0] = new BITMAP("BRICK");
MB[1] = NULL;
HL[0] = new BITMAP("HLINE");
@@ -91,8 +92,8 @@ void CGEEngine::setup() {
LI[2] = new BITMAP("LITE2");
LI[3] = new BITMAP("LITE3");
LI[4] = NULL;
- Snail = new SNAIL(false);
- Snail_ = new SNAIL(true);
+ Snail = new SNAIL(this, false);
+ Snail_ = new SNAIL(this, true);
OffUseCount = atoi(Text->getText(OFF_USE_COUNT));
}
diff --git a/engines/cge/cge.h b/engines/cge/cge.h
index f8857f045f..c3f241b2fe 100644
--- a/engines/cge/cge.h
+++ b/engines/cge/cge.h
@@ -23,6 +23,7 @@
#ifndef CGE_H
#define CGE_H
+#include "cge/general.h"
#include "common/random.h"
#include "engines/engine.h"
#include "gui/debugger.h"
@@ -47,15 +48,51 @@ public:
~CGEEngine();
const ADGameDescription *_gameDescription;
+ bool _isDemo;
virtual Common::Error run();
GUI::Debugger *getDebugger() {
return _console;
}
+ void cge_main();
+ void SwitchCave(int cav);
+ void StartCountDown();
+ void Quit();
+ void ResetQSwitch();
+ void OptionTouch(int opt, uint16 mask);
+ void LoadGame(XFILE &file, bool tiny);
+ void SetMapBrick(int x, int z);
+ void SwitchMapping();
+ void LoadSprite(const char *fname, int ref, int cav, int col, int row, int pos);
+ void LoadScript(const char *fname);
+ void LoadUser();
+ void RunGame();
+ bool ShowTitle(const char *name);
+ void Movie(const char *ext);
+ void TakeName();
+ void Inf(const char *txt);
+ void SelectSound();
+ void SNSelect();
+ void dummy() {}
+ void NONE();
+ void SB();
+ void CaveDown();
+ void XCave();
+ void QGame();
+ void SBM();
+ void GUS();
+ void GUSM();
+ void MIDI();
+ void AUTO();
+ void SetPortD();
+ void SetPortM();
+ void SetIRQ();
+ void SetDMA();
+ void MainLoop();
+
private:
CGEConsole *_console;
-
void setup();
};
diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp
index d49f71cd99..cd8a8ff9df 100644
--- a/engines/cge/cge_main.cpp
+++ b/engines/cge/cge_main.cpp
@@ -44,6 +44,7 @@
#include "cge/gettext.h"
#include "cge/mixer.h"
#include "cge/cge_main.h"
+#include "cge/cge.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -54,7 +55,7 @@
namespace CGE {
#define STACK_SIZ (K(2))
-#define SVGCHKSUM (1956+Now+OldLev+Game+Music+DemoText)
+#define SVGCHKSUM (1956 + Now + OldLev + Game + Music + DemoText)
#define SVG0NAME ("{{INIT}}" SVG_EXT)
#define SVG0FILE CFILE
@@ -141,7 +142,6 @@ static int Startup = 1;
int OffUseCount;
uint16 *intStackPtr = false;
-
HXY HeroXY[CAVE_MAX] = {{0, 0}};
BAR Barriers[1 + CAVE_MAX] = { { 0xFF, 0xFF } };
@@ -247,12 +247,12 @@ struct SAVTAB {
};
-static void LoadGame(XFILE &file, bool tiny = false) {
+void CGEEngine::LoadGame(XFILE &file, bool tiny = false) {
SAVTAB *st;
SPRITE *spr;
int i;
- for (st = SavTab; st->Ptr; st ++) {
+ for (st = SavTab; st->Ptr; st++) {
if (file.Error)
error("Bad SVG");
file.Read((uint8 *)((tiny || st->Flg) ? st->Ptr : &i), st->Len);
@@ -273,22 +273,22 @@ static void LoadGame(XFILE &file, bool tiny = false) {
if (! tiny) { // load sprites & pocket
while (! file.Error) {
- SPRITE S(NULL);
+ SPRITE S(this, NULL);
uint16 n = file.Read((uint8 *) &S, sizeof(S));
if (n != sizeof(S))
break;
S.Prev = S.Next = NULL;
- spr = (scumm_stricmp(S.File + 2, "MUCHA") == 0) ? new FLY(NULL)
- : new SPRITE(NULL);
+ spr = (scumm_stricmp(S.File + 2, "MUCHA") == 0) ? new FLY(this, NULL)
+ : new SPRITE(this, NULL);
if (spr == NULL)
error("No core");
*spr = S;
Vga->SpareQ->Append(spr);
}
- for (i = 0; i < POCKET_NX; i ++) {
+ for (i = 0; i < POCKET_NX; i++) {
register int r = pocref[i];
Pocket[i] = (r < 0) ? NULL : Vga->SpareQ->Locate(r);
}
@@ -307,7 +307,7 @@ static void SaveGame(XFILE &file) {
SPRITE *spr;
int i;
- for (i = 0; i < POCKET_NX; i ++) {
+ for (i = 0; i < POCKET_NX; i++) {
register SPRITE *s = Pocket[i];
pocref[i] = (s) ? s->Ref : -1;
}
@@ -315,7 +315,7 @@ static void SaveGame(XFILE &file) {
volume[0] = SNDDrvInfo.VOL2.D;
volume[1] = SNDDrvInfo.VOL2.M;
- for (st = SavTab; st->Ptr; st ++) {
+ for (st = SavTab; st->Ptr; st++) {
if (file.Error)
error("Bad SVG");
file.Write((uint8 *) st->Ptr, st->Len);
@@ -384,8 +384,8 @@ CLUSTER Trace[MAX_FIND_LEVEL];
int FindLevel;
-WALK::WALK(BMP_PTR *shpl)
- : SPRITE(shpl), Dir(NO_DIR), TracePtr(-1) {
+WALK::WALK(CGEEngine *vm, BMP_PTR *shpl)
+ : SPRITE(vm, shpl), Dir(NO_DIR), TracePtr(-1), _vm(vm) {
}
@@ -449,7 +449,7 @@ int WALK::Distance(SPRITE *spr) {
dz = - dz;
dx = dx * dx + dz * dz;
- for (dz = 1; dz * dz < dx; dz ++)
+ for (dz = 1; dz * dz < dx; dz++)
;
return dz - 1;
@@ -484,7 +484,7 @@ void WALK::FindWay(CLUSTER c) {
extern uint16 Target;
if (c != Here) {
- for (FindLevel = 1; FindLevel <= MAX_FIND_LEVEL; FindLevel ++) {
+ for (FindLevel = 1; FindLevel <= MAX_FIND_LEVEL; FindLevel++) {
signed char x, z;
Here.Split(x, z);
Target = (z << 8) | x;
@@ -544,13 +544,15 @@ void WALK::Reach(SPRITE *spr, int mode) {
class SQUARE : public SPRITE {
public:
- SQUARE(void);
+ SQUARE(CGEEngine *vm);
void Touch(uint16 mask, int x, int y);
+private:
+ CGEEngine *_vm;
};
-SQUARE::SQUARE(void)
- : SPRITE(MB) {
+SQUARE::SQUARE(CGEEngine *vm)
+ : SPRITE(vm, MB), _vm(vm) {
Flags.Kill = true;
Flags.BDel = false;
}
@@ -565,8 +567,8 @@ void SQUARE::Touch(uint16 mask, int x, int y) {
}
-static void SetMapBrick(int x, int z) {
- SQUARE *s = new SQUARE;
+void CGEEngine::SetMapBrick(int x, int z) {
+ SQUARE *s = new SQUARE(this);
if (s) {
static char n[] = "00:00";
s->Goto(x * MAP_XGRID, MAP_TOP + z * MAP_ZGRID);
@@ -578,10 +580,9 @@ static void SetMapBrick(int x, int z) {
}
}
-void dummy(void) {}
-static void SwitchMapping(void);
+//static void SwitchMapping(void);
static void SwitchColorMode(void);
-static void StartCountDown(void);
+//static void StartCountDown(void);
static void SwitchDebug(void);
static void SwitchMusic(void);
static void KillSprite(void);
@@ -596,16 +597,17 @@ static void KeyClick(void) {
}
-static void ResetQSwitch(void) {
+void CGEEngine::ResetQSwitch() {
SNPOST_(SNSEQ, 123, 0, NULL);
KeyClick();
}
-static void Quit(void) {
- static CHOICE QuitMenu[] = { { NULL, StartCountDown },
- { NULL, ResetQSwitch },
- { NULL, dummy }
+void CGEEngine::Quit() {
+ static CHOICE QuitMenu[] = {
+ { NULL, &CGEEngine::StartCountDown },
+ { NULL, &CGEEngine::ResetQSwitch },
+ { NULL, &CGEEngine::dummy }
};
if (Snail->Idle() && ! Hero->Flags.Hide) {
@@ -615,7 +617,7 @@ static void Quit(void) {
} else {
QuitMenu[0].Text = Text->getText(QUIT_TEXT);
QuitMenu[1].Text = Text->getText(NOQUIT_TEXT);
- (new VMENU(QuitMenu, -1, -1))->SetName(Text->getText(QUIT_TITLE));
+ (new VMENU(this, QuitMenu, -1, -1))->SetName(Text->getText(QUIT_TITLE));
SNPOST_(SNSEQ, 123, 1, NULL);
KeyClick();
}
@@ -652,7 +654,7 @@ static void PostMiniStep(int stp) {
void SYSTEM::SetPal(void) {
int i;
DAC *p = VGA::SysPal + 256 - ArrayCount(StdPal);
- for (i = 0; i < ArrayCount(StdPal); i ++) {
+ for (i = 0; i < ArrayCount(StdPal); i++) {
p[i].R = StdPal[i].R >> 2;
p[i].G = StdPal[i].G >> 2;
p[i].B = StdPal[i].B >> 2;
@@ -743,7 +745,7 @@ static void CaveUp(void) {
}
-static void CaveDown(void) {
+void CGEEngine::CaveDown() {
SPRITE *spr;
if (! HorzLine->Flags.Hide)
SwitchMapping();
@@ -761,13 +763,13 @@ static void CaveDown(void) {
}
-static void XCave(void) {
+void CGEEngine::XCave() {
CaveDown();
CaveUp();
}
-static void QGame(void) {
+void CGEEngine::QGame() {
CaveDown();
OldLev = Lev;
SaveSound();
@@ -778,7 +780,7 @@ static void QGame(void) {
}
-void SwitchCave(int cav) {
+void CGEEngine::SwitchCave(int cav) {
if (cav != Now) {
Heart->Enable = false;
if (cav < 0) {
@@ -792,11 +794,10 @@ void SwitchCave(int cav) {
if (Hero) {
Hero->Park();
Hero->Step(0);
-#ifndef DEMO
+ if (!_isDemo)
///// protection: auto-destruction on! ----------------------
- Vga->SpareQ->Show = STARTUP::Summa * (cav <= CAVE_MAX);
+ Vga->SpareQ->Show = STARTUP::Summa * (cav <= CAVE_MAX);
/////--------------------------------------------------------
-#endif
}
CavLight->Goto(CAVE_X + ((Now - 1) % CAVE_NX) * CAVE_DX + CAVE_SX,
CAVE_Y + ((Now - 1) / CAVE_NX) * CAVE_DY + CAVE_SY);
@@ -811,7 +812,7 @@ void SwitchCave(int cav) {
}
}
-SYSTEM::SYSTEM() : SPRITE(NULL) {
+SYSTEM::SYSTEM(CGEEngine *vm) : SPRITE(vm, NULL), _vm(vm) {
FunDel = HEROFUN0;
SetPal();
Tick();
@@ -819,7 +820,6 @@ SYSTEM::SYSTEM() : SPRITE(NULL) {
void SYSTEM::Touch(uint16 mask, int x, int y) {
static int pp = 0;
- void SwitchCave(int cav);
FunTouch();
@@ -861,7 +861,7 @@ void SYSTEM::Touch(uint16 mask, int x, int y) {
if (KEYBOARD::Key[ALT])
SaveMapping();
else
- SwitchMapping();
+ _vm->SwitchMapping();
break;
case F1:
SwitchDebug();
@@ -910,7 +910,7 @@ void SYSTEM::Touch(uint16 mask, int x, int y) {
break;
case F10 :
if (Snail->Idle() && ! Hero->Flags.Hide)
- StartCountDown();
+ _vm->StartCountDown();
break;
case 'J':
if (pp == 0)
@@ -955,14 +955,14 @@ void SYSTEM::Touch(uint16 mask, int x, int y) {
if (mask & L_UP) {
if (cav && Snail->Idle() && Hero->TracePtr < 0)
- SwitchCave(cav);
+ _vm->SwitchCave(cav);
if (!HorzLine->Flags.Hide) {
if (y >= MAP_TOP && y < MAP_TOP + MAP_HIG) {
int8 x1, z1;
XZ(x, y).Split(x1, z1);
CLUSTER::Map[z1][x1] = 1;
- SetMapBrick(x1, z1);
+ _vm->SetMapBrick(x1, z1);
}
} else
{
@@ -1056,18 +1056,17 @@ static void SwitchMusic(void) {
}
-static void StartCountDown(void) {
+void CGEEngine::StartCountDown() {
//SNPOST(SNSEQ, 123, 0, NULL);
SwitchCave(-1);
}
-#ifndef DEMO
-static void TakeName(void) {
+void CGEEngine::TakeName() {
if (GET_TEXT::Ptr)
SNPOST_(SNKILL, -1, 0, GET_TEXT::Ptr);
else {
- GET_TEXT *tn = new GET_TEXT(Text->getText(GETNAME_PROMPT), UsrFnam, 8, KeyClick);
+ GET_TEXT *tn = new GET_TEXT(this, Text->getText(GETNAME_PROMPT), UsrFnam, 8, KeyClick);
if (tn) {
tn->SetName(Text->getText(GETNAME_TITLE));
tn->Center();
@@ -1077,15 +1076,14 @@ static void TakeName(void) {
}
}
}
-#endif
-static void SwitchMapping(void) {
+void CGEEngine::SwitchMapping() {
if (HorzLine->Flags.Hide) {
int i;
- for (i = 0; i < MAP_ZCNT; i ++) {
+ for (i = 0; i < MAP_ZCNT; i++) {
int j;
- for (j = 0; j < MAP_XCNT; j ++) {
+ for (j = 0; j < MAP_XCNT; j++) {
if (CLUSTER::Map[i][j])
SetMapBrick(j, i);
}
@@ -1227,7 +1225,7 @@ static void SwitchDebug(void) {
}
-static void OptionTouch(int opt, uint16 mask) {
+void CGEEngine::OptionTouch(int opt, uint16 mask) {
switch (opt) {
case 1 :
if (mask & L_UP)
@@ -1239,7 +1237,7 @@ static void OptionTouch(int opt, uint16 mask) {
else if (mask & R_UP)
if (! MIXER::Appear) {
MIXER::Appear = true;
- new MIXER(BUTTON_X, BUTTON_Y);
+ new MIXER(this, BUTTON_X, BUTTON_Y);
}
break;
case 3 :
@@ -1258,7 +1256,7 @@ void SPRITE::Touch(uint16 mask, int x, int y) {
if (mask & (R_DN | L_DN))
Sprite = this;
if (Ref / 10 == 12) {
- OptionTouch(Ref % 10, mask);
+ _vm->OptionTouch(Ref % 10, mask);
return;
}
if (Flags.Syst)
@@ -1310,7 +1308,7 @@ void SPRITE::Touch(uint16 mask, int x, int y) {
if ((mask & L_UP) && Snail->Idle()) {
if (Flags.Kept) {
int n;
- for (n = 0; n < POCKET_NX; n ++) {
+ for (n = 0; n < POCKET_NX; n++) {
if (Pocket[n] == this) {
SelectPocket(n);
break;
@@ -1323,7 +1321,7 @@ void SPRITE::Touch(uint16 mask, int x, int y) {
}
-static void LoadSprite(const char *fname, int ref, int cav, int col = 0, int row = 0, int pos = 0) {
+void CGEEngine::LoadSprite(const char *fname, int ref, int cav, int col = 0, int row = 0, int pos = 0) {
static const char *Comd[] = { "Name", "Type", "Phase", "East",
"Left", "Right", "Top", "Bottom",
"Seq", "Near", "Take",
@@ -1390,7 +1388,7 @@ static void LoadSprite(const char *fname, int ref, int cav, int col = 0, int row
// make sprite of choosen type
switch (type) {
case 1 : { // AUTO
- Sprite = new SPRITE(NULL);
+ Sprite = new SPRITE(this, NULL);
if (Sprite) {
Sprite->Goto(col, row);
//Sprite->Time = 1;//-----------$$$$$$$$$$$$$$$$
@@ -1398,7 +1396,7 @@ static void LoadSprite(const char *fname, int ref, int cav, int col = 0, int row
break;
}
case 2 : { // WALK
- WALK *w = new WALK(NULL);
+ WALK *w = new WALK(this, NULL);
if (w && ref == 1) {
w->Goto(col, row);
if (Hero)
@@ -1435,7 +1433,7 @@ static void LoadSprite(const char *fname, int ref, int cav, int col = 0, int row
l->By = 13;
l->Cx = 300;
l->Cy = 500;
- * (long *) &l->Dx = 0; // movex * cnt
+ *(long *) &l->Dx = 0; // movex * cnt
l->Goto(col, row);
}
Sprite = l;
@@ -1443,13 +1441,13 @@ static void LoadSprite(const char *fname, int ref, int cav, int col = 0, int row
break;
}
case 5 : { // FLY
- FLY *f = new FLY(NULL);
+ FLY *f = new FLY(this, NULL);
Sprite = f;
//////Sprite->Time = 1;//-----------$$$$$$$$$$$$$$
break;
}
default: { // DEAD
- Sprite = new SPRITE(NULL);
+ Sprite = new SPRITE(this, NULL);
if (Sprite)
Sprite->Goto(col, row);
break;
@@ -1473,7 +1471,7 @@ static void LoadSprite(const char *fname, int ref, int cav, int col = 0, int row
}
-static void LoadScript(const char *fname) {
+void CGEEngine::LoadScript(const char *fname) {
char line[LINE_MAX];
char *SpN;
int SpI, SpA, SpX, SpY, SpZ;
@@ -1533,30 +1531,29 @@ static void LoadScript(const char *fname) {
}
-static void MainLoop(void) {
+void CGEEngine::MainLoop() {
SayDebug();
-#ifdef DEMO
- static uint32 tc = 0;
- if (/* FIXME: TimerCount - tc >= ((182L*6L) * 5L) && */ Talk == NULL && Snail.Idle()) {
- if (Text->getText(DemoText)) {
- SNPOST(SNSOUND, -1, 4, NULL); // drumla
- SNPOST(SNINF, -1, DemoText, NULL);
- SNPOST(SNLABEL, -1, -1, NULL);
- if (Text->getText(++ DemoText) == NULL)
- DemoText = DEMO_TEXT + 1;
+ if (_isDemo) {
+ static uint32 tc = 0;
+ if (/* FIXME: TimerCount - tc >= ((182L * 6L) * 5L) && */ Talk == NULL && Snail->Idle()) {
+ if (Text->getText(DemoText)) {
+ SNPOST(SNSOUND, -1, 4, NULL); // drumla
+ SNPOST(SNINF, -1, DemoText, NULL);
+ SNPOST(SNLABEL, -1, -1, NULL);
+ if (Text->getText(++ DemoText) == NULL)
+ DemoText = DEMO_TEXT + 1;
+ }
+ //FIXME: tc = TimerCount;
}
- //FIXME: tc = TimerCount;
}
-#endif
-
Vga->Show();
Snail_->RunCom();
Snail->RunCom();
}
-void LoadUser(void) {
+void CGEEngine::LoadUser() {
// set scene
if (STARTUP::Mode == 0) { // user .SVG file found
CFILE cfile = CFILE(UsrPath(UsrFnam), REA, RCrypt);
@@ -1577,7 +1574,7 @@ void LoadUser(void) {
}
-static void RunGame(void) {
+void CGEEngine::RunGame() {
Text->Clear();
Text->Preload(100, 1000);
LoadHeroXY();
@@ -1688,7 +1685,7 @@ static void RunGame(void) {
}
-void Movie(const char *ext) {
+void CGEEngine::Movie(const char *ext) {
const char *fn = ProgName(ext);
if (INI_FILE::Exist(fn)) {
LoadScript(fn);
@@ -1710,13 +1707,13 @@ void Movie(const char *ext) {
}
-bool ShowTitle(const char *name) {
+bool CGEEngine::ShowTitle(const char *name) {
BITMAP::Pal = VGA::SysPal;
BMP_PTR LB[] = { new BITMAP(name), NULL };
BITMAP::Pal = NULL;
bool usr_ok = false;
- SPRITE D(LB);
+ SPRITE D(this, LB);
D.Flags.Kill = true;
D.Flags.BDel = true;
D.Center();
@@ -1751,42 +1748,43 @@ bool ShowTitle(const char *name) {
}
if (STARTUP::Mode < 2) {
-#ifdef DEMO
- strcpy(UsrFnam, ProgName(SVG_EXT));
- usr_ok = true;
-#else
- //-----------------------------------------
+ if (_isDemo) {
+ strcpy(UsrFnam, ProgName(SVG_EXT));
+ usr_ok = true;
+ } else {
+ //-----------------------------------------
#ifndef EVA
#ifdef CD
- STARTUP::Summa |= (0xC0 + (DriveCD(0) << 6)) & 0xFF;
+ STARTUP::Summa |= (0xC0 + (DriveCD(0) << 6)) & 0xFF;
#else
-// Boot * b = ReadBoot(getdisk());
- warning("ShowTitle: FIXME ReadBoot");
- Boot *b = ReadBoot(0);
- uint32 sn = (b->XSign == 0x29) ? b->Serial : b->lTotSecs;
- free(b);
- sn -= ((IDENT *)Copr)->disk;
- STARTUP::Summa |= Lo(sn) | Hi(sn);
+// Boot * b = ReadBoot(getdisk());
+ warning("ShowTitle: FIXME ReadBoot");
+ Boot *b = ReadBoot(0);
+ uint32 sn = (b->XSign == 0x29) ? b->Serial : b->lTotSecs;
+ free(b);
+ sn -= ((IDENT *)Copr)->disk;
+ STARTUP::Summa |= Lo(sn) | Hi(sn);
#endif
+ //-----------------------------------------
+ Movie("X00"); // paylist
+ Vga->CopyPage(1, 2);
+ Vga->CopyPage(0, 1);
+ Vga->ShowQ->Append(Mouse);
+ //Mouse.On();
+ Heart->Enable = true;
+ for (TakeName(); GET_TEXT::Ptr;)
+ MainLoop();
+ Heart->Enable = false;
+ if (KEYBOARD::Last() == Enter && *UsrFnam)
+ usr_ok = true;
+ if (usr_ok)
+ strcat(UsrFnam, SVG_EXT);
+ //Mouse.Off();
+ Vga->ShowQ->Clear();
+ Vga->CopyPage(0, 2);
#endif
- //-----------------------------------------
- Movie("X00"); // paylist
- Vga->CopyPage(1, 2);
- Vga->CopyPage(0, 1);
- Vga->ShowQ->Append(Mouse);
- //Mouse.On();
- Heart->Enable = true;
- for (TakeName(); GET_TEXT::Ptr;)
- MainLoop();
- Heart->Enable = false;
- if (KEYBOARD::Last() == Enter && *UsrFnam)
- usr_ok = true;
- if (usr_ok)
- strcat(UsrFnam, SVG_EXT);
- //Mouse.Off();
- Vga->ShowQ->Clear();
- Vga->CopyPage(0, 2);
-#endif
+ }
+
if (usr_ok && STARTUP::Mode == 0) {
const char *n = UsrPath(UsrFnam);
if (CFILE::Exist(n)) {
@@ -1808,11 +1806,10 @@ bool ShowTitle(const char *name) {
Vga->CopyPage(0, 2);
-#ifdef DEMO
- return true;
-#else
- return (STARTUP::Mode == 2 || usr_ok);
-#endif
+ if (_isDemo)
+ return true;
+ else
+ return (STARTUP::Mode == 2 || usr_ok);
}
@@ -1824,7 +1821,7 @@ void StkDump (void) {
*/
-void cge_main(void) {
+void CGEEngine::cge_main(void) {
uint16 intStack[STACK_SIZ / 2];
intStackPtr = intStack;
@@ -1841,17 +1838,15 @@ void cge_main(void) {
HorzLine->Flags.Hide = true;
//srand((uint16) Timer());
- Sys = new SYSTEM;
+ Sys = new SYSTEM(this);
if (Music && STARTUP::SoundOk)
LoadMIDI(0);
if (STARTUP::Mode < 2)
Movie(LGO_EXT);
if (ShowTitle("WELCOME")) {
-#ifndef DEMO
- if (STARTUP::Mode == 1)
+ if ((!_isDemo) && (STARTUP::Mode == 1))
Movie("X02"); // intro
-#endif
RunGame();
Startup = 2;
if (FINIS)
diff --git a/engines/cge/cge_main.h b/engines/cge/cge_main.h
index f3a95e786c..146c3cb6c9 100644
--- a/engines/cge/cge_main.h
+++ b/engines/cge/cge_main.h
@@ -35,11 +35,11 @@
namespace CGE {
#define TSEQ 96
-#define HTALK (TSEQ+4)
-#define TOO_FAR (TSEQ+5)
-#define NO_WAY (TSEQ+5)
-#define POC_FUL (TSEQ+5)
-#define OFF_USE (TSEQ+6)
+#define HTALK (TSEQ + 4)
+#define TOO_FAR (TSEQ + 5)
+#define NO_WAY (TSEQ + 5)
+#define POC_FUL (TSEQ + 5)
+#define OFF_USE (TSEQ + 6)
#define EXIT_OK_TEXT 40
#define NOMUSIC_TEXT 98
#define BADSVG_TEXT 99
@@ -57,25 +57,21 @@ namespace CGE {
#define DEMO_TEXT 300
#define NOSOUND_TEXT 310
#define PAN_HIG 40
-#define WORLD_HIG (SCR_HIG-PAN_HIG)
+#define WORLD_HIG (SCR_HIG - PAN_HIG)
#define INFO_X 177
#define INFO_Y 164
#define INFO_W 140
-
-#if defined(DEMO)
#define CAVE_X 4
#define CAVE_Y 166
#define CAVE_SX 0
#define CAVE_SY 0
+
+#ifdef DEMO
#define CAVE_DX 23
#define CAVE_DY 29
#define CAVE_NX 3
#define CAVE_NY 1
#else
-#define CAVE_X 4
-#define CAVE_Y 166
-#define CAVE_SX 0
-#define CAVE_SY 0
#define CAVE_DX 9
#define CAVE_DY 10
#define CAVE_NX 8
@@ -101,7 +97,7 @@ namespace CGE {
#define SHP_MAX 1024
#define STD_DELAY 3
#define LEV_MAX 5
-#define CAVE_MAX (CAVE_NX*CAVE_NY)
+#define CAVE_MAX (CAVE_NX * CAVE_NY)
#define MAX_FIND_LEVEL 3
#define MAX_DISTANCE 3
#define INI_EXT ".INI"
@@ -111,8 +107,8 @@ namespace CGE {
#define WALKSIDE 10
#define BUSY_REF 500
#define SYSTIMERATE 6 // 12 Hz
-#define HEROFUN0 (40*12)
-#define HEROFUN1 ( 2*12)
+#define HEROFUN0 (40 * 12)
+#define HEROFUN1 ( 2 * 12)
#define PAIN (Flag[0])
#define FINIS (Flag[3])
@@ -122,12 +118,14 @@ class SYSTEM : public SPRITE {
public:
int FunDel;
- SYSTEM();
+ SYSTEM(CGEEngine *vm);
void SetPal();
void FunTouch();
void Touch(uint16 mask, int x, int y);
void Tick();
+private:
+ CGEEngine *_vm;
};
@@ -144,9 +142,10 @@ public:
class WALK : public SPRITE {
public:
CLUSTER Here;
- enum DIR { NO_DIR = -1, NN, EE, SS, WW } Dir;
int TracePtr;
- WALK(BMP_PTR *shpl);
+
+ enum DIR { NO_DIR = -1, NN, EE, SS, WW } Dir;
+ WALK(CGEEngine *vm, BMP_PTR *shpl);
void Tick(void);
void FindWay(CLUSTER c);
void FindWay(SPRITE *spr);
@@ -155,6 +154,9 @@ public:
void Park(void);
bool Lower(SPRITE *spr);
void Reach(SPRITE *spr, int mode = -1);
+private:
+ CGEEngine *_vm;
+
};
@@ -163,7 +165,6 @@ CLUSTER XZ(COUPLE xy);
void ExpandSprite(SPRITE *spr);
void ContractSprite(SPRITE *spr);
-void cge_main(void);
extern WALK *Hero;
extern VGA *Vga;
diff --git a/engines/cge/config.cpp b/engines/cge/config.cpp
index 9ffda8d635..4aa4f40c8a 100644
--- a/engines/cge/config.cpp
+++ b/engines/cge/config.cpp
@@ -78,92 +78,92 @@ static int DevName[] = {
};
static CHOICE DevMenu[] = {
- { NULL, NONE },
- { NULL, SB },
- { NULL, SBM },
- { NULL, GUS },
- { NULL, GUSM },
- { NULL, MIDI },
- { NULL, AUTO },
- { NULL, NULL }
+ { NULL, &CGEEngine::NONE },
+ { NULL, &CGEEngine::SB },
+ { NULL, &CGEEngine::SBM },
+ { NULL, &CGEEngine::GUS },
+ { NULL, &CGEEngine::GUSM },
+ { NULL, &CGEEngine::MIDI },
+ { NULL, &CGEEngine::AUTO },
+ { NULL, NULL }
};
static CHOICE DigiPorts[] = {
- { " 210h", SetPortD },
- { " 220h", SetPortD },
- { " 230h", SetPortD },
- { " 240h", SetPortD },
- { " 250h", SetPortD },
- { " 260h", SetPortD },
- { "AUTO ", SetPortD },
+ { " 210h", &CGEEngine::SetPortD },
+ { " 220h", &CGEEngine::SetPortD },
+ { " 230h", &CGEEngine::SetPortD },
+ { " 240h", &CGEEngine::SetPortD },
+ { " 250h", &CGEEngine::SetPortD },
+ { " 260h", &CGEEngine::SetPortD },
+ { "AUTO ", &CGEEngine::SetPortD },
{ NULL, NULL }
};
static CHOICE MIDIPorts[] = {
- { " 220h", SetPortM },
- { " 230h", SetPortM },
- { " 240h", SetPortM },
- { " 250h", SetPortM },
- { " 300h", SetPortM },
- { " 320h", SetPortM },
- { " 330h", SetPortM },
- { " 340h", SetPortM },
- { " 350h", SetPortM },
- { " 360h", SetPortM },
- { "AUTO ", SetPortM },
+ { " 220h", &CGEEngine::SetPortM },
+ { " 230h", &CGEEngine::SetPortM },
+ { " 240h", &CGEEngine::SetPortM },
+ { " 250h", &CGEEngine::SetPortM },
+ { " 300h", &CGEEngine::SetPortM },
+ { " 320h", &CGEEngine::SetPortM },
+ { " 330h", &CGEEngine::SetPortM },
+ { " 340h", &CGEEngine::SetPortM },
+ { " 350h", &CGEEngine::SetPortM },
+ { " 360h", &CGEEngine::SetPortM },
+ { "AUTO ", &CGEEngine::SetPortM },
{ NULL, NULL }
};
static CHOICE BlsterIRQ[] = {
- { "IRQ 2", SetIRQ },
- { "IRQ 5", SetIRQ },
- { "IRQ 7", SetIRQ },
- { "IRQ 10", SetIRQ },
- { "AUTO ", SetIRQ },
+ { "IRQ 2", &CGEEngine::SetIRQ },
+ { "IRQ 5", &CGEEngine::SetIRQ },
+ { "IRQ 7", &CGEEngine::SetIRQ },
+ { "IRQ 10", &CGEEngine::SetIRQ },
+ { "AUTO ", &CGEEngine::SetIRQ },
{ NULL, NULL }
};
static CHOICE GravisIRQ[] = {
- { "IRQ 2", SetIRQ },
- { "IRQ 5", SetIRQ },
- { "IRQ 7", SetIRQ },
- { "IRQ 11", SetIRQ },
- { "IRQ 12", SetIRQ },
- { "IRQ 15", SetIRQ },
- { "AUTO ", SetIRQ },
+ { "IRQ 2", &CGEEngine::SetIRQ },
+ { "IRQ 5", &CGEEngine::SetIRQ },
+ { "IRQ 7", &CGEEngine::SetIRQ },
+ { "IRQ 11", &CGEEngine::SetIRQ },
+ { "IRQ 12", &CGEEngine::SetIRQ },
+ { "IRQ 15", &CGEEngine::SetIRQ },
+ { "AUTO ", &CGEEngine::SetIRQ },
{ NULL, NULL }
};
static CHOICE GravisDMA[] = {
- { "DMA 1", SetDMA },
- { "DMA 3", SetDMA },
- { "DMA 5", SetDMA },
- { "DMA 6", SetDMA },
- { "DMA 7", SetDMA },
- { "AUTO ", SetDMA },
+ { "DMA 1", &CGEEngine::SetDMA },
+ { "DMA 3", &CGEEngine::SetDMA },
+ { "DMA 5", &CGEEngine::SetDMA },
+ { "DMA 6", &CGEEngine::SetDMA },
+ { "DMA 7", &CGEEngine::SetDMA },
+ { "AUTO ", &CGEEngine::SetDMA },
{ NULL, NULL }
};
static CHOICE BlsterDMA[] = {
- { "DMA 0", SetDMA },
- { "DMA 1", SetDMA },
- { "DMA 3", SetDMA },
- { "AUTO ", SetDMA },
+ { "DMA 0", &CGEEngine::SetDMA },
+ { "DMA 1", &CGEEngine::SetDMA },
+ { "DMA 3", &CGEEngine::SetDMA },
+ { "AUTO ", &CGEEngine::SetDMA },
{ NULL, NULL }
};
-void SelectSound(void) {
+void CGEEngine::SelectSound() {
int i;
Sound.Close();
if (VMENU::Addr)
SNPOST_(SNKILL, -1, 0, VMENU::Addr);
Inf(Text->getText(STYPE_TEXT));
Talk->Goto(Talk->X, FONT_HIG / 2);
- for (i = 0; i < ArrayCount(DevName); i ++)
+ for (i = 0; i < ArrayCount(DevName); i++)
DevMenu[i].Text = Text->getText(DevName[i]);
- (new VMENU(DevMenu, SCR_WID / 2, Talk->Y + Talk->H + TEXT_VM + FONT_HIG))->SetName(Text->getText(MENU_TEXT));
+ (new VMENU(this, DevMenu, SCR_WID / 2, Talk->Y + Talk->H + TEXT_VM + FONT_HIG))->SetName(Text->getText(MENU_TEXT));
}
@@ -195,10 +195,10 @@ static uint16 xdeco(const char *str) {
static CHOICE *Cho;
static int Hlp;
-static void SNSelect(void) {
+void CGEEngine::SNSelect() {
Inf(Text->getText(Hlp));
Talk->Goto(Talk->X, FONT_HIG / 2);
- (new VMENU(Cho, SCR_WID / 2, Talk->Y + Talk->H + TEXT_VM + FONT_HIG))->SetName(Text->getText(MENU_TEXT));
+ (new VMENU(this, Cho, SCR_WID / 2, Talk->Y + Talk->H + TEXT_VM + FONT_HIG))->SetName(Text->getText(MENU_TEXT));
}
@@ -211,14 +211,14 @@ static void Select(CHOICE *cho, int hlp) {
}
-static void NONE(void) {
+void CGEEngine::NONE() {
SNDDrvInfo.DDEV = DEV_QUIET;
SNDDrvInfo.MDEV = DEV_QUIET;
Sound.Open();
}
-static void SB(void) {
+void CGEEngine::SB() {
SNDDrvInfo.DDEV = DEV_SB;
SNDDrvInfo.MDEV = DEV_SB;
Reset();
@@ -226,7 +226,7 @@ static void SB(void) {
}
-static void SBM(void) {
+void CGEEngine::SBM() {
SNDDrvInfo.DDEV = DEV_SB;
SNDDrvInfo.MDEV = DEV_GM;
Reset();
@@ -234,7 +234,7 @@ static void SBM(void) {
}
-static void GUS(void) {
+void CGEEngine::GUS() {
SNDDrvInfo.DDEV = DEV_GUS;
SNDDrvInfo.MDEV = DEV_GUS;
Reset();
@@ -242,7 +242,7 @@ static void GUS(void) {
}
-static void GUSM(void) {
+void CGEEngine::GUSM() {
SNDDrvInfo.DDEV = DEV_GUS;
SNDDrvInfo.MDEV = DEV_GM;
Reset();
@@ -250,7 +250,7 @@ static void GUSM(void) {
}
-static void MIDI(void) {
+void CGEEngine::MIDI() {
SNDDrvInfo.DDEV = DEV_QUIET;
SNDDrvInfo.MDEV = DEV_GM;
SNDDrvInfo.MBASE = DETECT;
@@ -258,7 +258,7 @@ static void MIDI(void) {
}
-static void AUTO(void) {
+void CGEEngine::AUTO() {
SNDDrvInfo.DDEV = DEV_AUTO;
SNDDrvInfo.MDEV = DEV_AUTO;
Reset();
@@ -266,25 +266,25 @@ static void AUTO(void) {
}
-static void SetPortD(void) {
+void CGEEngine::SetPortD() {
SNDDrvInfo.DBASE = xdeco(DigiPorts[VMENU::Recent].Text);
Select((SNDDrvInfo.DDEV == DEV_SB) ? BlsterIRQ : GravisIRQ, SIRQ_TEXT);
}
-static void SetPortM(void) {
+void CGEEngine::SetPortM() {
SNDDrvInfo.MBASE = xdeco(MIDIPorts[VMENU::Recent].Text);
Sound.Open();
}
-static void SetIRQ(void) {
+void CGEEngine::SetIRQ() {
SNDDrvInfo.DIRQ = ddeco(((SNDDrvInfo.DDEV == DEV_SB) ? BlsterIRQ : GravisIRQ)[VMENU::Recent].Text);
Select((SNDDrvInfo.DDEV == DEV_SB) ? BlsterDMA : GravisDMA, SDMA_TEXT);
}
-static void SetDMA(void) {
+void CGEEngine::SetDMA() {
SNDDrvInfo.DDMA = ddeco(((SNDDrvInfo.DDEV == DEV_SB) ? BlsterDMA : GravisDMA)[VMENU::Recent].Text);
if (SNDDrvInfo.MDEV != SNDDrvInfo.DDEV)
Select(MIDIPorts, MPORT_TEXT);
diff --git a/engines/cge/detection.cpp b/engines/cge/detection.cpp
index f522f872c9..f03a42fb35 100644
--- a/engines/cge/detection.cpp
+++ b/engines/cge/detection.cpp
@@ -64,7 +64,7 @@ static const ADGameDescription gameDescriptions[] = {
{"vol.dat", 0, "75d385a6074c58b69f7730481f256051", 1796710},
AD_LISTEND
},
- Common::PL_POL, Common::kPlatformPC, ADGF_NO_FLAGS, GUIO_NONE
+ Common::PL_POL, Common::kPlatformPC, ADGF_DEMO, GUIO_NONE
},
{
"soltys", "Soltys Demo",
@@ -73,7 +73,7 @@ static const ADGameDescription gameDescriptions[] = {
{"vol.dat", 0, "c5d9b15863cab61dc125551576dece04", 1075272},
AD_LISTEND
},
- Common::PL_POL, Common::kPlatformPC, ADGF_NO_FLAGS, GUIO_NONE
+ Common::PL_POL, Common::kPlatformPC, ADGF_DEMO, GUIO_NONE
},
AD_TABLE_END_MARKER
};
@@ -160,7 +160,7 @@ SaveStateList CGEMetaEngine::listSaves(const char *target) const {
SaveStateList saveList;
int slotNum = 0;
- for (Common::StringArray::const_iterator filename = filenames.begin(); filename != filenames.end(); ++filename) {
+ for (Common::StringArray::const_iterator filename = filenames.begin(); filename != filenames.end(); filename++) {
// Obtain the last 3 digits of the filename, since they correspond to the save slot
slotNum = atoi(filename->c_str() + filename->size() - 3);
diff --git a/engines/cge/ems.cpp b/engines/cge/ems.cpp
index c21bc356dc..f1f7ece708 100644
--- a/engines/cge/ems.cpp
+++ b/engines/cge/ems.cpp
@@ -142,8 +142,8 @@ EMS *EMM::Alloc(uint16 siz) {
if (cnt > 4)
{
top = (top + PAGE_MASK) & 0xFFFFC000L;
- ++ pgn;
- -- cnt;
+ pgn++;
+ cnt--;
}
if (size <= Lim - top)
diff --git a/engines/cge/game.cpp b/engines/cge/game.cpp
index 58334f2e53..21e8ceddeb 100644
--- a/engines/cge/game.cpp
+++ b/engines/cge/game.cpp
@@ -35,7 +35,7 @@ uint8 *Glass(DAC *pal, uint8 r, uint8 g, uint8 b) {
uint8 *x = new uint8[256];
if (x) {
uint16 i;
- for (i = 0; i < 256; i ++) {
+ for (i = 0; i < 256; i++) {
x[i] = Closest(pal, MkDAC(((uint16)(pal[i].R) * r) / 255,
((uint16)(pal[i].G) * g) / 255,
((uint16)(pal[i].B) * b) / 255));
@@ -50,7 +50,7 @@ uint8 *Mark(DAC *pal) {
uint8 *x = new uint8[256];
if (x) {
uint16 i;
- for (i = 0; i < 256; i ++) {
+ for (i = 0; i < 256; i++) {
x[i] = Closest(pal, MkDAC(f(pal[i].R),
f(pal[i].G),
f(pal[i].B)));
@@ -67,8 +67,8 @@ int FLY::L = 20,
FLY::B = 100;
-FLY::FLY(BITMAP **shpl)
- : SPRITE(shpl), Tx(0), Ty(0) {
+FLY::FLY(CGEEngine *vm, BITMAP **shpl)
+ : SPRITE(vm, shpl), Tx(0), Ty(0), _vm(vm) {
Step(new_random(2));
Goto(L + new_random(R - L - W), T + new_random(B - T - H));
}
diff --git a/engines/cge/game.h b/engines/cge/game.h
index 1d65d0c767..7892b1c93f 100644
--- a/engines/cge/game.h
+++ b/engines/cge/game.h
@@ -48,8 +48,10 @@ class FLY : public SPRITE {
static int L, T, R, B;
public:
int Tx, Ty;
- FLY(BITMAP **shpl);
+ FLY(CGEEngine *vm, BITMAP **shpl);
void Tick(void);
+private:
+ CGEEngine *_vm;
};
} // End of namespace CGE
diff --git a/engines/cge/general.cpp b/engines/cge/general.cpp
index a851957b21..b07ddbc362 100644
--- a/engines/cge/general.cpp
+++ b/engines/cge/general.cpp
@@ -148,24 +148,23 @@ unsigned FastRand(unsigned s) {
}
uint16 RCrypt(void *buf, uint16 siz, uint16 seed) {
- /*
- if (buf && siz) {
- uint8 * q = BUF + (siz-1);
- seed = FastRand(seed);
- * (BUF ++) ^= seed;
- while (buf < q) * (BUF ++) ^= FastRand();
- if (buf == q) * BUF ^= (seed = FastRand());
- }
- return seed;
- */
- warning("STUB: RCrypt");
- return 0;
+ if (buf && siz) {
+ byte *b = static_cast<byte *>(buf);
+ byte *q = b + (siz - 1);
+ seed = FastRand(seed);
+ *b++ ^= seed;
+ while (buf < q)
+ *b++ ^= FastRand();
+ if (buf == q)
+ *b ^= (seed = FastRand());
+ }
+ return seed;
}
uint16 XCrypt(void *buf, uint16 siz, uint16 seed) {
byte *b = static_cast<byte *>(buf);
- for (uint16 i = 0; i < siz; i ++)
+ for (uint16 i = 0; i < siz; i++)
*b++ ^= seed;
return seed;
@@ -175,7 +174,7 @@ uint16 atow(const char *a) {
uint16 w = 0;
if (a)
while (IsDigit(*a))
- w = (10 * w) + (*(a ++) & 0xF);
+ w = (10 * w) + (*(a++) & 0xF);
return w;
}
@@ -183,7 +182,7 @@ uint16 xtow(const char *x) {
uint16 w = 0;
if (x) {
while (IsHxDig(*x)) {
- register uint16 d = * (x ++);
+ register uint16 d = *(x++);
if (d > '9')
d -= 'A' - ('9' + 1);
w = (w << 4) | (d & 0xF);
@@ -332,7 +331,7 @@ DATACK *LoadWave(XFILE *file, EMM *emm) {
int TakeEnum(const char **tab, const char *txt) {
const char **e;
if (txt) {
- for (e = tab; *e; e ++) {
+ for (e = tab; *e; e++) {
if (scumm_stricmp(txt, *e) == 0) {
return e - tab;
}
diff --git a/engines/cge/gettext.cpp b/engines/cge/gettext.cpp
index c1d54099f8..69e19b175c 100644
--- a/engines/cge/gettext.cpp
+++ b/engines/cge/gettext.cpp
@@ -36,9 +36,9 @@ namespace CGE {
GET_TEXT *GET_TEXT::Ptr = NULL;
-GET_TEXT::GET_TEXT(const char *info, char *text, int size, void (*click)(void))
- : Text(text), Size(min<int>(size, GTMAX)), Len(min<int>(Size, strlen(text))),
- Cntr(GTBLINK), Click(click), OldKeybClient(KEYBOARD::SetClient(this)) {
+GET_TEXT::GET_TEXT(CGEEngine *vm, const char *info, char *text, int size, void (*click)(void))
+ : TALK(vm), Text(text), Size(min<int>(size, GTMAX)), Len(min<int>(Size, strlen(text))),
+ Cntr(GTBLINK), Click(click), OldKeybClient(KEYBOARD::SetClient(this)), _vm(vm) {
int i = 2 * TEXT_HM + Font->Width(info);
Ptr = this;
Mode = RECT;
@@ -82,7 +82,7 @@ void GET_TEXT::Touch(uint16 mask, int x, int y) {
case Enter :
Buff[Len] = '\0';
strcpy(Text, Buff);
- for (p = Text; *p; p ++) {
+ for (p = Text; *p; p++) {
char *q = strchr(ogon, *p);
if (q)
*p = bezo[q - ogon];
@@ -110,7 +110,7 @@ void GET_TEXT::Touch(uint16 mask, int x, int y) {
if (Len < Size && 2 * TEXT_HM + Font->Width(Buff) + Font->Wid[x] <= W) {
Buff[Len + 2] = Buff[Len + 1];
Buff[Len + 1] = Buff[Len];
- Buff[Len ++] = x;
+ Buff[Len++] = x;
}
}
break;
diff --git a/engines/cge/gettext.h b/engines/cge/gettext.h
index 3fc7e4ff34..c868232677 100644
--- a/engines/cge/gettext.h
+++ b/engines/cge/gettext.h
@@ -42,13 +42,16 @@ class GET_TEXT : public TALK {
uint16 Size, Len;
uint16 Cntr;
SPRITE *OldKeybClient;
- void (*Click)(void);
+ void (*Click)();
public:
static GET_TEXT *Ptr;
- GET_TEXT(const char *info, char *text, int size, void (*click)(void) = NULL);
- ~GET_TEXT(void);
+ GET_TEXT(CGEEngine *vm, const char *info, char *text, int size, void (*click)(void) = NULL);
+ ~GET_TEXT();
void Touch(uint16 mask, int x, int y);
- void Tick(void);
+ void Tick();
+
+private:
+ CGEEngine *_vm;
};
} // End of namespace CGE
diff --git a/engines/cge/jbw.h b/engines/cge/jbw.h
index 82647ed49a..12c6609f4e 100644
--- a/engines/cge/jbw.h
+++ b/engines/cge/jbw.h
@@ -34,7 +34,6 @@ namespace CGE {
// Defines found in cge.mak
#define VOL
-//#define DEMO
#define INI_FILE VFILE // Or is it CFILE?
#define PIC_FILE VFILE
#define BMP_MODE 0
@@ -56,8 +55,8 @@ namespace CGE {
#define IsAlNum(c) (IsAlpha(c) || IsDigit(c))
#define IsHxDig(c) (IsDigit(c) || ((c) >= 'A' && (c) <= 'F') || ((c) >= 'a' && (c) <= 'f'))
-#define farnew(t,n) ((t *) malloc(sizeof(t) * (n)))
-#define ArrayCount(a) (sizeof(a)/sizeof((a)[0]))
+#define farnew(t, n) ((t *) malloc(sizeof(t) * (n)))
+#define ArrayCount(a) (sizeof(a) / sizeof((a)[0]))
#define MAX_TIMER 0x1800B0L
typedef void (MouseFunType)(void);
@@ -66,8 +65,8 @@ typedef void (MouseFunType)(void);
#define Hi(d) (((int *) &d)[1])
#define LoWord(d) ((uint16) Lo(d))
#define HiWord(d) ((uint16) Hi(d))
-#define K(n) (1024*(n))
-#define MASK(n) ((1<<n)-1)
+#define K(n) (1024 * (n))
+#define MASK(n) ((1 << n) - 1)
typedef enum {
NoKey = 0, CtrlA, CtrlB, CtrlC, CtrlD, CtrlE, CtrlF, CtrlG, CtrlH,
@@ -135,18 +134,12 @@ struct KeyStatStruct {
#define CGA_Cursor 0x0607
#define OFF_Cursor 0x2000
-#define TimerCount (* ((volatile long *) ((void _seg *) 0x40 + (void *) 0x6C)))
-#define KeyStat (* ((volatile struct KeyStatStruct *) ((void _seg *) 0x40 + (void *) 0x17)))
-#define BreakFlag (* ((volatile uint8 *) ((void _seg *) 0x40 + (void *) 0x71)))
-#define PostFlag (* ((volatile uint16 *) ((void _seg *) 0x40 + (void *) 0x72)))
+#define TimerCount (*((volatile long *) ((void _seg *) 0x40 + (void *) 0x6C)))
+#define KeyStat (*((volatile struct KeyStatStruct *) ((void _seg *) 0x40 + (void *) 0x17)))
+#define BreakFlag (*((volatile uint8 *) ((void _seg *) 0x40 + (void *) 0x71)))
+#define PostFlag (*((volatile uint16 *) ((void _seg *) 0x40 + (void *) 0x72)))
#define POST ((void (*)(void)) ((void _seg *) 0xF000 + (void *) 0xFFF0))
-#ifdef DEMO
-#define Demo(x) x
-#else
-#define Demo(x)
-#endif
-
#ifdef __cplusplus
#define EC extern "C"
diff --git a/engines/cge/mixer.cpp b/engines/cge/mixer.cpp
index 6a3a45553a..864fb6cdba 100644
--- a/engines/cge/mixer.cpp
+++ b/engines/cge/mixer.cpp
@@ -40,7 +40,7 @@ extern MOUSE *Mouse;
bool MIXER::Appear = false;
-MIXER::MIXER(int x, int y) : SPRITE(NULL), Fall(MIX_FALL) {
+MIXER::MIXER(CGEEngine *vm, int x, int y) : SPRITE(vm, NULL), Fall(MIX_FALL), _vm(vm) {
Appear = true;
mb[0] = new BITMAP("VOLUME");
mb[1] = NULL;
@@ -55,7 +55,7 @@ MIXER::MIXER(int x, int y) : SPRITE(NULL), Fall(MIX_FALL) {
// slaves
int i;
- for (i = 0; i < MIX_MAX; i ++) {
+ for (i = 0; i < MIX_MAX; i++) {
static char fn[] = "V00";
wtom(i, fn + 1, 10, 2);
lb[i] = new BITMAP(fn);
@@ -64,8 +64,8 @@ MIXER::MIXER(int x, int y) : SPRITE(NULL), Fall(MIX_FALL) {
}
lb[i] = NULL;
- for (i = 0; i < ArrayCount(Led); i ++) {
- register SPRITE *spr = new SPRITE(lb);
+ for (i = 0; i < ArrayCount(Led); i++) {
+ register SPRITE *spr = new SPRITE(_vm, lb);
spr->SetSeq(ls);
spr->Goto(x + 2 + 12 * i, y + 8);
spr->Flags.Tran = true;
@@ -77,7 +77,7 @@ MIXER::MIXER(int x, int y) : SPRITE(NULL), Fall(MIX_FALL) {
Led[ArrayCount(Led) - 1]->Flags.BDel = true;
Vga->ShowQ->Insert(this);
- for (i = 0; i < ArrayCount(Led); i ++)
+ for (i = 0; i < ArrayCount(Led); i++)
Vga->ShowQ->Insert(Led[i]);
//--- reset balance
@@ -124,7 +124,7 @@ void MIXER::Tick(void) {
if (Fall)
--Fall;
else {
- for (int i = 0; i < ArrayCount(Led); i ++)
+ for (int i = 0; i < ArrayCount(Led); i++)
SNPOST_(SNKILL, -1, 0, Led[i]);
SNPOST_(SNKILL, -1, 0, this);
}
diff --git a/engines/cge/mixer.h b/engines/cge/mixer.h
index 81bc7c7cdf..d589aceaea 100644
--- a/engines/cge/mixer.h
+++ b/engines/cge/mixer.h
@@ -48,10 +48,12 @@ class MIXER : public SPRITE {
void Update(void);
public:
static bool Appear;
- MIXER(int x, int y);
- ~MIXER(void);
+ MIXER(CGEEngine *vm, int x, int y);
+ ~MIXER();
void Touch(uint16 mask, int x, int y);
- void Tick(void);
+ void Tick();
+private:
+ CGEEngine *_vm;
};
} // End of namespace CGE
diff --git a/engines/cge/mouse.cpp b/engines/cge/mouse.cpp
index 8ad12742d3..10953291f2 100644
--- a/engines/cge/mouse.cpp
+++ b/engines/cge/mouse.cpp
@@ -39,7 +39,7 @@ MOUSE_FUN *MOUSE::OldMouseFun = NULL;
uint16 MOUSE::OldMouseMask = 0;
-MOUSE::MOUSE(BITMAP **shpl) : SPRITE(shpl), Busy(NULL), Hold(NULL), hx(0) {
+MOUSE::MOUSE(CGEEngine *vm, BITMAP **shpl) : SPRITE(vm, shpl), Busy(NULL), Hold(NULL), hx(0), _vm(vm) {
static SEQ ms[] = {
{ 0, 0, 0, 0, 1 },
{ 1, 1, 0, 0, 1 }
diff --git a/engines/cge/mouse.h b/engines/cge/mouse.h
index 78f43665cd..61503fadd1 100644
--- a/engines/cge/mouse.h
+++ b/engines/cge/mouse.h
@@ -69,12 +69,14 @@ public:
int Buttons;
SPRITE *Busy;
//SPRITE * Touched;
- MOUSE(BITMAP **shpl = MC);
- ~MOUSE(void);
- void On(void);
- void Off(void);
+ MOUSE(CGEEngine *vm, BITMAP **shpl = MC);
+ ~MOUSE();
+ void On();
+ void Off();
static void ClrEvt(SPRITE *spr = NULL);
- void Tick(void);
+ void Tick();
+private:
+ CGEEngine *_vm;
};
} // End of namespace CGE
diff --git a/engines/cge/snail.cpp b/engines/cge/snail.cpp
index a07cf9d09b..24ed08c140 100644
--- a/engines/cge/snail.cpp
+++ b/engines/cge/snail.cpp
@@ -287,7 +287,7 @@ void ContractSprite(SPRITE *spr) {
}
int FindPocket(SPRITE *spr) {
- for (int i = 0; i < POCKET_NX; i ++)
+ for (int i = 0; i < POCKET_NX; i++)
if (Pocket[i] == spr)
return i;
return -1;
@@ -345,7 +345,7 @@ void FeedSnail(SPRITE *spr, SNLIST snq) {
if (FindPocket(NULL) < 0) { // no empty pockets?
SNAIL::COM *p;
- for (p = c; p->Com != SNNEXT; p ++) { // find KEEP command
+ for (p = c; p->Com != SNNEXT; p++) { // find KEEP command
if (p->Com == SNKEEP) {
PocFul();
return;
@@ -423,10 +423,10 @@ const char *SNAIL::ComTxt[] = {
};
-SNAIL::SNAIL(bool turbo)
+SNAIL::SNAIL(CGEEngine *vm, bool turbo)
: Turbo(turbo), Busy(false), TextDelay(false),
Pause(0), TalkEnable(true),
- Head(0), Tail(0), SNList(farnew(COM, 256)) {
+ Head(0), Tail(0), SNList(farnew(COM, 256)), _vm(vm) {
}
@@ -438,7 +438,7 @@ SNAIL::~SNAIL(void) {
void SNAIL::AddCom(SNCOM com, int ref, int val, void *ptr) {
_disable();
- COM *snc = &SNList[Head ++];
+ COM *snc = &SNList[Head++];
snc->Com = com;
snc->Ref = ref;
snc->Val = val;
@@ -849,7 +849,7 @@ void SNFlash(bool on) {
DAC *pal = farnew(DAC, PAL_CNT);
if (pal) {
memcpy(pal, VGA::SysPal, PAL_SIZ);
- for (int i = 0; i < PAL_CNT; i ++) {
+ for (int i = 0; i < PAL_CNT; i++) {
register int c;
c = pal[i].R << 1;
pal[i].R = (c < 64) ? c : 63;
@@ -906,7 +906,6 @@ static void SNMouse(bool on) {
void SNAIL::RunCom(void) {
static int count = 1;
-// extern void SwitchCave(int);
if (! Busy) {
Busy = true;
uint8 tmphea = Head;
@@ -954,13 +953,13 @@ void SNAIL::RunCom(void) {
if (sprel && TalkEnable) {
if (sprel == Hero && sprel->SeqTest(-1))
sprel->Step(HTALK);
- Say(Text->getText(snc->Val), sprel);
+ Text->Say(Text->getText(snc->Val), sprel);
Sys->FunDel = HEROFUN0;
}
break;
case SNINF :
if (TalkEnable) {
- Inf(Text->getText(snc->Val));
+ _vm->Inf(Text->getText(snc->Val));
Sys->FunDel = HEROFUN0;
}
break;
diff --git a/engines/cge/snail.h b/engines/cge/snail.h
index 54c7809fda..9449a8081e 100644
--- a/engines/cge/snail.h
+++ b/engines/cge/snail.h
@@ -29,6 +29,7 @@
#define __SNAIL__
#include "cge/jbw.h"
+#include "cge/cge.h"
namespace CGE {
@@ -89,12 +90,14 @@ public:
uint16 Pause;
static const char *ComTxt[];
bool TalkEnable;
- SNAIL(bool turbo = false);
- ~SNAIL(void);
+ SNAIL(CGEEngine *vm, bool turbo = false);
+ ~SNAIL();
void RunCom(void);
void AddCom(SNCOM com, int ref = 0, int val = 0, void *ptr = NULL);
void InsCom(SNCOM com, int ref = 0, int val = 0, void *ptr = NULL);
bool Idle(void);
+private:
+ CGEEngine *_vm;
};
diff --git a/engines/cge/sound.cpp b/engines/cge/sound.cpp
index 04e5d9464a..4a7b63fb08 100644
--- a/engines/cge/sound.cpp
+++ b/engines/cge/sound.cpp
@@ -82,7 +82,7 @@ void SOUND::Stop(void) {
FX::FX(int size) : Emm(0L), Current(NULL) {
Cache = new HAN[size];
- for (Size = 0; Size < size; Size ++) {
+ for (Size = 0; Size < size; Size++) {
Cache[Size].Ref = 0;
Cache[Size].Wav = NULL;
}
@@ -97,7 +97,7 @@ FX::~FX(void) {
void FX::Clear(void) {
HAN *p, * q;
- for (p = Cache, q = p + Size; p < q; p ++) {
+ for (p = Cache, q = p + Size; p < q; p++) {
if (p->Ref) {
p->Ref = 0;
delete p->Wav;
@@ -112,7 +112,7 @@ void FX::Clear(void) {
int FX::Find(int ref) {
HAN *p, * q;
int i = 0;
- for (p = Cache, q = p + Size; p < q; p ++) {
+ for (p = Cache, q = p + Size; p < q; p++) {
if (p->Ref == ref)
break;
else
@@ -126,7 +126,7 @@ void FX::Preload(int ref0) {
HAN *CacheLim = Cache + Size;
int ref;
- for (ref = ref0; ref < ref0 + 10; ref ++) {
+ for (ref = ref0; ref < ref0 + 10; ref++) {
static char fname[] = "FX00000.WAV";
wtom(ref, fname + 2, 10, 5);
INI_FILE file = INI_FILE(fname);
diff --git a/engines/cge/startup.cpp b/engines/cge/startup.cpp
index 631a64d732..4895ce9861 100644
--- a/engines/cge/startup.cpp
+++ b/engines/cge/startup.cpp
@@ -150,7 +150,7 @@ const char *UsrPath(const char *nam) {
if (j)
if (buf[--j] == '\n')
buf[j] = '\0';
- if (memicmp(buf, key, i) == 0)
+ if (scumm_strnicmp((const char *) buf, (const char*) key, i) == 0)
ok = true;
}
if (ok) {
diff --git a/engines/cge/talk.cpp b/engines/cge/talk.cpp
index 1739511a49..b67d9082ac 100644
--- a/engines/cge/talk.cpp
+++ b/engines/cge/talk.cpp
@@ -66,7 +66,7 @@ void FONT::Load(void) {
f.Read(Wid, WID_SIZ);
if (! f.Error) {
uint16 i, p = 0;
- for (i = 0; i < POS_SIZ; i ++) {
+ for (i = 0; i < POS_SIZ; i++) {
Pos[i] = p;
p += Wid[i];
}
@@ -80,7 +80,7 @@ uint16 FONT::Width(const char *text) {
uint16 w = 0;
if (text)
while (* text)
- w += Wid[*(text ++)];
+ w += Wid[*(text++)];
return w;
}
@@ -91,14 +91,14 @@ void FONT::Save(void) {
if (! f.Error) {
f.Write(Wid, WID_SIZ);
if (! f.Error)
- f.Write(Map, Pos[POS_SIZ-1] + Wid[WID_SIZ-1]);
+ f.Write(Map, Pos[POS_SIZ - 1] + Wid[WID_SIZ - 1]);
}
}
*/
-TALK::TALK(const char *tx, TBOX_STYLE mode)
- : SPRITE(NULL), Mode(mode) {
+TALK::TALK(CGEEngine *vm, const char *tx, TBOX_STYLE mode)
+ : SPRITE(vm, NULL), Mode(mode), _vm(vm) {
TS[0] = TS[1] = NULL;
Flags.Syst = true;
Update(tx);
@@ -106,8 +106,8 @@ TALK::TALK(const char *tx, TBOX_STYLE mode)
}
-TALK::TALK(void)
- : SPRITE(NULL), Mode(PURE) {
+TALK::TALK(CGEEngine *vm)
+ : SPRITE(vm, NULL), Mode(PURE), _vm(vm) {
TS[0] = TS[1] = NULL;
Flags.Syst = true;
}
@@ -115,7 +115,7 @@ TALK::TALK(void)
/*
TALK::~TALK (void) {
- for (uint16 i = 0; i < ShpCnt; i ++) {
+ for (uint16 i = 0; i < ShpCnt; i++) {
if (FP_SEG(ShpList[i]) != _DS) { // small model: always false
delete ShpList[i];
ShpList[i] = NULL;
@@ -135,7 +135,7 @@ void TALK::Update(const char *tx) {
if (!TS[0]) {
uint16 k = 2 * hmarg;
mh = 2 * vmarg + FONT_HIG;
- for (p = tx; *p; p ++) {
+ for (p = tx; *p; p++) {
if (*p == '|' || *p == '\n') {
mh += FONT_HIG + TEXT_LS;
if (k > mw)
@@ -203,9 +203,9 @@ BITMAP *TALK::Box(uint16 w, uint16 h) {
*p = LGRAY;
}
p = b;
- for (int i = 0; i < r; i ++) {
+ for (int i = 0; i < r; i++) {
int j;
- for (j = 0; j < r - i; j ++) {
+ for (j = 0; j < r - i; j++) {
p[j] = TRANS;
p[w - j - 1] = TRANS;
q[j] = TRANS;
@@ -256,10 +256,10 @@ void TALK::PutLine(int line, const char *text) {
uint16 cw = Font->Wid[*text], i;
uint8 *fp = Font->Map + Font->Pos[*text];
- for (i = 0; i < cw; i ++) {
+ for (i = 0; i < cw; i++) {
register uint16 b = fp[i];
uint16 n;
- for (n = 0; n < FONT_HIG; n ++) {
+ for (n = 0; n < FONT_HIG; n++) {
if (b & 1)
*p = TEXT_FG;
b >>= 1;
@@ -275,7 +275,7 @@ void TALK::PutLine(int line, const char *text) {
}
-INFO_LINE::INFO_LINE(uint16 w) : OldTxt(NULL) {
+INFO_LINE::INFO_LINE(CGEEngine *vm, uint16 w) : TALK(vm), OldTxt(NULL), _vm(vm) {
TS[0] = new BITMAP(w, FONT_HIG, TEXT_BG);
SetShapeList(TS);
}
@@ -293,7 +293,7 @@ void INFO_LINE::Update(const char *tx) {
// claer whole rectangle
memset(v + 2, TEXT_BG, dsiz); // data bytes
memcpy(v + lsiz, v, psiz - lsiz); // tricky replicate lines
- * (uint16 *)(v + psiz - 2) = EOI; // plane trailer uint16
+ *(uint16 *)(v + psiz - 2) = EOI; // plane trailer uint16
memcpy(v + psiz, v, 3 * psiz); // tricky replicate planes
// paint text line
@@ -306,7 +306,7 @@ void INFO_LINE::Update(const char *tx) {
for (uint16 i = 0; i < cw; i++) {
register uint16 b = fp[i];
- for (uint16 n = 0; n < FONT_HIG; n ++) {
+ for (uint16 n = 0; n < FONT_HIG; n++) {
if (b & 1)
*p = TEXT_FG;
b >>= 1;
diff --git a/engines/cge/talk.h b/engines/cge/talk.h
index 67b4fc91d6..ba4952c3e6 100644
--- a/engines/cge/talk.h
+++ b/engines/cge/talk.h
@@ -75,20 +75,24 @@ protected:
BITMAP *Box(uint16 w, uint16 h);
public:
FONT *Font;
- TALK(const char *tx, TBOX_STYLE mode = PURE);
- TALK(void);
+ TALK(CGEEngine *vm, const char *tx, TBOX_STYLE mode = PURE);
+ TALK(CGEEngine *vm);
//~TALK (void);
virtual void Update(const char *tx);
virtual void Update(void) {}
void PutLine(int line, const char *text);
+private:
+ CGEEngine *_vm;
};
class INFO_LINE : public TALK {
const char *OldTxt;
public:
- INFO_LINE(uint16 wid);
+ INFO_LINE(CGEEngine *vm, uint16 wid);
void Update(const char *tx);
+private:
+ CGEEngine *_vm;
};
} // End of namespace CGE
diff --git a/engines/cge/text.cpp b/engines/cge/text.cpp
index ee94983352..6d7341af0a 100644
--- a/engines/cge/text.cpp
+++ b/engines/cge/text.cpp
@@ -42,20 +42,20 @@ namespace CGE {
TEXT *Text;
TALK *Talk = NULL;
-TEXT::TEXT(const char *fname, int size) {
+TEXT::TEXT(CGEEngine *vm, const char *fname, int size) : _vm(vm) {
Cache = new HAN[size];
MergeExt(FileName, fname, SAY_EXT);
if (!INI_FILE::Exist(FileName))
error("No talk (%s)\n", FileName);
- for (Size = 0; Size < size; Size ++) {
+ for (Size = 0; Size < size; Size++) {
Cache[Size].Ref = 0;
Cache[Size].Txt = NULL;
}
}
-TEXT::~TEXT(void) {
+TEXT::~TEXT() {
Clear();
delete[] Cache;
}
@@ -63,7 +63,7 @@ TEXT::~TEXT(void) {
void TEXT::Clear(int from, int upto) {
HAN *p, * q;
- for (p = Cache, q = p + Size; p < q; p ++) {
+ for (p = Cache, q = p + Size; p < q; p++) {
if (p->Ref && p->Ref >= from && p->Ref < upto) {
p->Ref = 0;
delete p->Txt;
@@ -76,7 +76,7 @@ void TEXT::Clear(int from, int upto) {
int TEXT::Find(int ref) {
HAN *p, * q;
int i = 0;
- for (p = Cache, q = p + Size; p < q; p ++) {
+ for (p = Cache, q = p + Size; p < q; p++) {
if (p->Ref == ref)
break;
else
@@ -180,14 +180,14 @@ char *TEXT::getText(int ref) {
}
-void Say(const char *txt, SPRITE *spr) {
+void TEXT::Say(const char *txt, SPRITE *spr) {
KillText();
- Talk = new TALK(txt, ROUND);
+ Talk = new TALK(_vm, txt, ROUND);
if (Talk) {
bool east = spr->Flags.East;
int x = (east) ? (spr->X + spr->W - 2) : (spr->X + 2);
int y = spr->Y + 2;
- SPRITE *spike = new SPRITE(SP);
+ SPRITE *spike = new SPRITE(_vm, SP);
uint16 sw = spike->W;
if (east) {
@@ -221,9 +221,9 @@ void Say(const char *txt, SPRITE *spr) {
}
}
-void Inf(const char *txt) {
+void CGEEngine::Inf(const char *txt) {
KillText();
- Talk = new TALK(txt, RECT);
+ Talk = new TALK(this, txt, RECT);
if (Talk) {
Talk->Flags.Kill = true;
Talk->Flags.BDel = true;
diff --git a/engines/cge/text.h b/engines/cge/text.h
index 64e3b1d669..161b2e813a 100644
--- a/engines/cge/text.h
+++ b/engines/cge/text.h
@@ -61,11 +61,14 @@ class TEXT {
char *Load(int idx, int ref);
int Find(int ref);
public:
- TEXT(const char *fname, int size);
+ TEXT(CGEEngine *vm, const char *fname, int size);
~TEXT(void);
void Clear(int from = 1, int upto = 0x7FFF);
void Preload(int from = 1, int upto = 0x7FFF);
char *getText(int ref);
+ void Say(const char *txt, SPRITE *spr);
+private:
+ CGEEngine *_vm;
};
diff --git a/engines/cge/vga13h.cpp b/engines/cge/vga13h.cpp
index f5fde14122..1804d25aa9 100644
--- a/engines/cge/vga13h.cpp
+++ b/engines/cge/vga13h.cpp
@@ -37,6 +37,7 @@
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
+#include "cge/cge.h"
namespace CGE {
@@ -235,14 +236,16 @@ extern "C" void TimerProc (void)
// decrement external timer uint16
if (Heart->XTimer)
- if (*Heart->XTimer) -- *Heart->XTimer;
- else Heart->XTimer = NULL;
+ if (*Heart->XTimer)
+ *Heart->XTimer--;
+ else
+ Heart->XTimer = NULL;
if (! run && Heart->Enable) // check overrun flag
{
static uint16 oldSP, oldSS;
- ++ run; // disable 2nd call until current lasts
+ run++; // disable 2nd call until current lasts
asm mov ax,ds
asm mov oldSS,ss
asm mov oldSP,sp
@@ -258,7 +261,7 @@ extern "C" void TimerProc (void)
}
asm mov ss,oldSS
asm mov sp,oldSP
- -- run;
+ run--;
}
}
*/
@@ -299,14 +302,16 @@ void ENGINE::NewTimer(...) {
// decrement external timer uint16
if (Heart->XTimer)
- if (*Heart->XTimer) -- *Heart->XTimer;
- else Heart->XTimer = NULL;
+ if (*Heart->XTimer)
+ *Heart->XTimer--;
+ else
+ Heart->XTimer = NULL;
if (! run && Heart->Enable) // check overrun flag
{
static uint16 oldSP, oldSS;
- ++ run; // disable 2nd call until current lasts
+ run++; // disable 2nd call until current lasts
asm mov ax,ds
asm mov oldSS,ss
asm mov oldSP,sp
@@ -322,7 +327,7 @@ void ENGINE::NewTimer(...) {
}
asm mov ss,oldSS
asm mov sp,oldSP
- -- run;
+ run--;
}
*/
@@ -343,10 +348,10 @@ void HEART::SetXTimer(uint16 *ptr, uint16 time) {
}
-SPRITE::SPRITE(BMP_PTR *shp)
+SPRITE::SPRITE(CGEEngine *vm, BMP_PTR *shp)
: X(0), Y(0), Z(0), NearPtr(0), TakePtr(0),
Next(NULL), Prev(NULL), SeqPtr(NO_SEQ), Time(0), //Delay(0),
- Ext(NULL), Ref(-1), Cave(0) {
+ Ext(NULL), Ref(-1), Cave(0), _vm(vm) {
memset(File, 0, sizeof(File));
*((uint16 *)&Flags) = 0;
SetShapeList(shp);
@@ -404,7 +409,7 @@ BMP_PTR *SPRITE::SetShapeList(BMP_PTR *shp) {
void SPRITE::MoveShapes(uint8 *buf) {
BMP_PTR *p;
- for (p = Ext->ShpList; *p; p ++) {
+ for (p = Ext->ShpList; *p; p++) {
buf += (*p)->MoveVmap(buf);
}
}
@@ -509,14 +514,14 @@ SPRITE *SPRITE::Expand(void) {
break;
}
case 1 : { // Phase
- shplist[shpcnt ++] = new BITMAP(strtok(NULL, " \t,;/"));
+ shplist[shpcnt++] = new BITMAP(strtok(NULL, " \t,;/"));
break;
}
case 2 : { // Seq
seq = (SEQ *) realloc(seq, (seqcnt + 1) * sizeof(*seq));
if (seq == NULL)
error("No core [%s]", fname);
- SEQ *s = &seq[seqcnt ++];
+ SEQ *s = &seq[seqcnt++];
s->Now = atoi(strtok(NULL, " \t,;/"));
if (s->Now > maxnow)
maxnow = s->Now;
@@ -542,7 +547,7 @@ SPRITE *SPRITE::Expand(void) {
if (nea == NULL)
error("No core [%s]", fname);
else {
- SNAIL::COM *c = &nea[neacnt ++];
+ SNAIL::COM *c = &nea[neacnt++];
if ((c->Com = (SNCOM) TakeEnum(SNAIL::ComTxt, strtok(NULL, " \t,;/"))) < 0)
error("%s [%s]", NumStr("Bad NEAR in ######", lcnt), fname);
c->Ref = atoi(strtok(NULL, " \t,;/"));
@@ -558,7 +563,7 @@ SPRITE *SPRITE::Expand(void) {
if (tak == NULL)
error("No core [%s]", fname);
else {
- SNAIL::COM *c = &tak[takcnt ++];
+ SNAIL::COM *c = &tak[takcnt++];
if ((c->Com = (SNCOM) TakeEnum(SNAIL::ComTxt, strtok(NULL, " \t,;/"))) < 0)
error("%s [%s]", NumStr("Bad NEAR in ######", lcnt), fname);
c->Ref = atoi(strtok(NULL, " \t,;/"));
@@ -571,7 +576,7 @@ SPRITE *SPRITE::Expand(void) {
}
}
} else { // no sprite description: try to read immediately from .BMP
- shplist[shpcnt ++] = new BITMAP(File);
+ shplist[shpcnt++] = new BITMAP(File);
}
shplist[shpcnt] = NULL;
if (seq) {
@@ -608,7 +613,7 @@ SPRITE *SPRITE::Contract(void) {
delete[] e->Name;
if (Flags.BDel && e->ShpList) {
int i;
- for (i = 0; e->ShpList[i]; i ++)
+ for (i = 0; e->ShpList[i]; i++)
delete e->ShpList[i];
if (MemType(e->ShpList) == NEAR_MEM)
delete[] e->ShpList;
@@ -664,7 +669,7 @@ void SPRITE::MakeXlat(uint8 *x) {
if (Flags.Xlat)
KillXlat();
- for (b = Ext->ShpList; *b; b ++)
+ for (b = Ext->ShpList; *b; b++)
(*b)->M = x;
Flags.Xlat = true;
}
@@ -684,7 +689,7 @@ void SPRITE::KillXlat(void) {
free(m);
break;
}
- for (b = Ext->ShpList; *b; b ++)
+ for (b = Ext->ShpList; *b; b++)
(*b)->M = NULL;
Flags.Xlat = false;
}
@@ -918,7 +923,7 @@ VGA::VGA(int mode)
bool std = true;
int i;
- for (i = 10; i < 20; i ++) {
+ for (i = 10; i < 20; i++) {
char *txt = Text->getText(i);
if (txt) {
// puts(txt);
@@ -1163,9 +1168,9 @@ void BITMAP::XShow(int x, int y) {
/*
uint8 rmsk = x % 4,
mask = 1 << rmsk,
- * scr = VGA::Page[1] + y * (SCR_WID / 4) + x / 4;
- uint8 * m = (char *) M;
- uint8 * v = V;
+ *scr = VGA::Page[1] + y * (SCR_WID / 4) + x / 4;
+ uint8 *m = (char *) M;
+ uint8 *v = V;
asm push bx
asm push si
@@ -1304,9 +1309,9 @@ void BITMAP::Show(int x, int y) {
void BITMAP::Hide(int x, int y) {
/*
- uint8 * scr = VGA::Page[1] + y * (SCR_WID / 4) + x / 4;
+ uint8 *scr = VGA::Page[1] + y * (SCR_WID / 4) + x / 4;
uint16 d = FP_OFF(VGA::Page[2]) - FP_OFF(VGA::Page[1]);
- HideDesc * b = B;
+ HideDesc *b = B;
uint16 extra = ((x & 3) != 0);
uint16 h = H;
diff --git a/engines/cge/vga13h.h b/engines/cge/vga13h.h
index edbeebf727..cf4252e5c2 100644
--- a/engines/cge/vga13h.h
+++ b/engines/cge/vga13h.h
@@ -33,6 +33,7 @@
#include <stddef.h>
#include "cge/bitmap.h"
#include "cge/snail.h"
+#include "cge/cge.h"
namespace CGE {
@@ -198,7 +199,7 @@ public:
inline bool Active(void) {
return Ext != NULL;
}
- SPRITE(BMP_PTR *shp);
+ SPRITE(CGEEngine *vm, BMP_PTR *shp);
virtual ~SPRITE(void);
BMP_PTR Shp(void);
BMP_PTR *SetShapeList(BMP_PTR *shp);
@@ -223,6 +224,8 @@ public:
SNAIL::COM *SnList(SNLIST type);
virtual void Touch(uint16 mask, int x, int y);
virtual void Tick(void);
+private:
+ CGEEngine *_vm;
};
@@ -301,7 +304,7 @@ uint8 Closest(CBLK *pal, CBLK x) {
if (!L)
++L;
uint16 R = f(x.R, L), G = f(x.G, L), B = f(x.B, L);
- for (i = 0; i < 256; i ++) {
+ for (i = 0; i < 256; i++) {
uint16 l = pal[i].R + pal[i].G + pal[i].B;
if (! l)
++l;
diff --git a/engines/cge/vmenu.cpp b/engines/cge/vmenu.cpp
index cb2c2013f4..7db5a79f85 100644
--- a/engines/cge/vmenu.cpp
+++ b/engines/cge/vmenu.cpp
@@ -45,7 +45,7 @@ namespace CGE {
-MENU_BAR::MENU_BAR(uint16 w) {
+MENU_BAR::MENU_BAR(CGEEngine *vm, uint16 w) : TALK(vm), _vm(vm) {
int h = FONT_HIG + 2 * MB_VM, i = (w += 2 * MB_HM) * h;
uint8 *p = farnew(uint8, i), * p1, * p2;
@@ -54,7 +54,7 @@ MENU_BAR::MENU_BAR(uint16 w) {
memset(p + i - w, MB_RB, w);
p1 = p;
p2 = p + i - 1;
- for (i = 0; i < h; i ++) {
+ for (i = 0; i < h; i++) {
*p1 = MB_LT;
*p2 = MB_RB;
p1 += w;
@@ -76,14 +76,14 @@ char *VMGather(CHOICE *list) {
CHOICE *cp;
int len = 0, h = 0;
- for (cp = list; cp->Text; cp ++) {
+ for (cp = list; cp->Text; cp++) {
len += strlen(cp->Text);
++h;
}
vmgt = new char[len + h];
if (vmgt) {
*vmgt = '\0';
- for (cp = list; cp->Text; cp ++) {
+ for (cp = list; cp->Text; cp++) {
if (*vmgt)
strcat(vmgt, "|");
strcat(vmgt, cp->Text);
@@ -98,14 +98,14 @@ VMENU *VMENU::Addr = NULL;
int VMENU::Recent = -1;
-VMENU::VMENU(CHOICE *list, int x, int y)
- : TALK(VMGather(list), RECT), Menu(list), Bar(NULL) {
+VMENU::VMENU(CGEEngine *vm, CHOICE *list, int x, int y)
+ : TALK(vm, VMGather(list), RECT), Menu(list), Bar(NULL), _vm(vm) {
CHOICE *cp;
Addr = this;
delete[] vmgt;
Items = 0;
- for (cp = list; cp->Text; cp ++)
+ for (cp = list; cp->Text; cp++)
++Items;
Flags.BDel = true;
Flags.Kill = true;
@@ -114,7 +114,7 @@ VMENU::VMENU(CHOICE *list, int x, int y)
else
Goto(x - W / 2, y - (TEXT_VM + FONT_HIG / 2));
Vga->ShowQ->Insert(this, Vga->ShowQ->Last());
- Bar = new MENU_BAR(W - 2 * TEXT_HM);
+ Bar = new MENU_BAR(_vm, W - 2 * TEXT_HM);
Bar->Goto(X + TEXT_HM - MB_HM, Y + TEXT_VM - MB_VM);
Vga->ShowQ->Insert(Bar, Vga->ShowQ->Last());
}
@@ -126,7 +126,7 @@ VMENU::~VMENU(void) {
void VMENU::Touch(uint16 mask, int x, int y) {
-#define h (FONT_HIG + TEXT_LS)
+ uint16 h = FONT_HIG + TEXT_LS;
bool ok = false;
if (Items) {
@@ -147,10 +147,10 @@ void VMENU::Touch(uint16 mask, int x, int y) {
if (ok && (mask & L_UP)) {
Items = 0;
SNPOST_(SNKILL, -1, 0, this);
- Menu[Recent = n].Proc();
+ //Menu[Recent = n].Proc();
+ warning("Missing call to proc()");
}
}
-#undef h
}
} // End of namespace CGE
diff --git a/engines/cge/vmenu.h b/engines/cge/vmenu.h
index ecec9d51b5..61645d2c55 100644
--- a/engines/cge/vmenu.h
+++ b/engines/cge/vmenu.h
@@ -38,13 +38,15 @@ namespace CGE {
typedef struct {
char *Text;
- void (* Proc)(void);
+ void (CGEEngine::*Proc)();
} CHOICE;
class MENU_BAR : public TALK {
public:
- MENU_BAR(uint16 w);
+ MENU_BAR(CGEEngine *vm, uint16 w);
+private:
+ CGEEngine *_vm;
};
@@ -55,9 +57,11 @@ public:
static VMENU *Addr;
static int Recent;
MENU_BAR *Bar;
- VMENU(CHOICE *list, int x, int y);
- ~VMENU(void);
+ VMENU(CGEEngine *vm, CHOICE *list, int x, int y);
+ ~VMENU();
void Touch(uint16 mask, int x, int y);
+private:
+ CGEEngine *_vm;
};
} // End of namespace CGE