HUGO: Merge misc versions of display, intro and scheduler classes

svn-id: r55365
This commit is contained in:
Arnaud Boutonné 2011-01-20 22:50:50 +00:00
parent 6412b1d2c7
commit a321f2a007
16 changed files with 704 additions and 1246 deletions

View File

@ -594,5 +594,112 @@ void Screen::showCursor() {
void Screen::hideCursor() {
CursorMan.showMouse(false);
}
Screen_v1d::Screen_v1d(HugoEngine *vm) : Screen(vm) {
}
Screen_v1d::~Screen_v1d() {
}
/**
* Load font file, construct font ptrs and reverse data bytes
* TODO: This uses hardcoded fonts in hugo.dat, it should be replaced
* by a proper implementation of .FON files
*/
void Screen_v1d::loadFont(int16 fontId) {
debugC(2, kDebugDisplay, "loadFont(%d)", fontId);
assert(fontId < NUM_FONTS);
_fnt = fontId - FIRST_FONT; // Set current font number
if (fontLoadedFl[_fnt]) // If already loaded, return
return;
fontLoadedFl[_fnt] = true;
memcpy(_fontdata[_fnt], _arrayFont[_fnt], _arrayFontSize[_fnt]);
_font[_fnt][0] = _fontdata[_fnt]; // Store height,width of fonts
int16 offset = 2; // Start at fontdata[2] ([0],[1] used for height,width)
// Setup the font array (127 characters)
for (int i = 1; i < 128; i++) {
_font[_fnt][i] = _fontdata[_fnt] + offset;
byte height = *(_fontdata[_fnt] + offset);
byte width = *(_fontdata[_fnt] + offset + 1);
int16 size = height * ((width + 7) >> 3);
for (int j = 0; j < size; j++)
Utils::reverseByte(&_fontdata[_fnt][offset + 2 + j]);
offset += 2 + size;
}
}
/**
* Load fonts from Hugo.dat
* These fonts are a workaround to avoid handling TTF fonts used by DOS versions
* TODO: Properly handle the vector based font files (win31)
*/
void Screen_v1d::loadFontArr(Common::File &in) {
for (int i = 0; i < NUM_FONTS; i++) {
_arrayFontSize[i] = in.readUint16BE();
_arrayFont[i] = (byte *)malloc(sizeof(byte) * _arrayFontSize[i]);
for (int j = 0; j < _arrayFontSize[i]; j++) {
_arrayFont[i][j] = in.readByte();
}
}
}
Screen_v1w::Screen_v1w(HugoEngine *vm) : Screen(vm) {
}
Screen_v1w::~Screen_v1w() {
}
/**
* Load font file, construct font ptrs and reverse data bytes
*/
void Screen_v1w::loadFont(int16 fontId) {
debugC(2, kDebugDisplay, "loadFont(%d)", fontId);
_fnt = fontId - FIRST_FONT; // Set current font number
if (fontLoadedFl[_fnt]) // If already loaded, return
return;
fontLoadedFl[_fnt] = true;
_vm->_file->readUIFItem(fontId, _fontdata[_fnt]);
// Compile font ptrs. Note: First ptr points to height,width of font
_font[_fnt][0] = _fontdata[_fnt]; // Store height,width of fonts
int16 offset = 2; // Start at fontdata[2] ([0],[1] used for height,width)
// Setup the font array (127 characters)
for (int i = 1; i < 128; i++) {
_font[_fnt][i] = _fontdata[_fnt] + offset;
byte height = *(_fontdata[_fnt] + offset);
byte width = *(_fontdata[_fnt] + offset + 1);
int16 size = height * ((width + 7) >> 3);
for (int j = 0; j < size; j++)
Utils::reverseByte(&_fontdata[_fnt][offset + 2 + j]);
offset += 2 + size;
}
}
/**
* Skips the fonts used by the DOS versions
*/
void Screen_v1w::loadFontArr(Common::File &in) {
for (int i = 0; i < NUM_FONTS; i++) {
uint16 numElem = in.readUint16BE();
for (int j = 0; j < numElem; j++)
in.readByte();
}
}
} // End of namespace Hugo

View File

@ -1,100 +0,0 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* $URL$
* $Id$
*
*/
/*
* This code is based on original Hugo Trilogy source code
*
* Copyright (c) 1989-1995 David P. Gray
*
*/
// Display.c - DIB related code for HUGOWIN
#include "common/system.h"
#include "hugo/hugo.h"
#include "hugo/display.h"
#include "hugo/util.h"
namespace Hugo {
Screen_v1d::Screen_v1d(HugoEngine *vm) : Screen(vm) {
}
Screen_v1d::~Screen_v1d() {
}
/**
* Load font file, construct font ptrs and reverse data bytes
* TODO: This uses hardcoded fonts in hugo.dat, it should be replaced
* by a proper implementation of .FON files
*/
void Screen_v1d::loadFont(int16 fontId) {
debugC(2, kDebugDisplay, "loadFont(%d)", fontId);
assert(fontId < NUM_FONTS);
_fnt = fontId - FIRST_FONT; // Set current font number
if (fontLoadedFl[_fnt]) // If already loaded, return
return;
fontLoadedFl[_fnt] = true;
memcpy(_fontdata[_fnt], _arrayFont[_fnt], _arrayFontSize[_fnt]);
_font[_fnt][0] = _fontdata[_fnt]; // Store height,width of fonts
int16 offset = 2; // Start at fontdata[2] ([0],[1] used for height,width)
// Setup the font array (127 characters)
for (int i = 1; i < 128; i++) {
_font[_fnt][i] = _fontdata[_fnt] + offset;
byte height = *(_fontdata[_fnt] + offset);
byte width = *(_fontdata[_fnt] + offset + 1);
int16 size = height * ((width + 7) >> 3);
for (int j = 0; j < size; j++)
Utils::reverseByte(&_fontdata[_fnt][offset + 2 + j]);
offset += 2 + size;
}
}
/**
* Load fonts from Hugo.dat
* These fonts are a workaround to avoid handling TTF fonts used by DOS versions
* TODO: Properly handle the vector based font files (win31)
*/
void Screen_v1d::loadFontArr(Common::File &in) {
for (int i = 0; i < NUM_FONTS; i++) {
_arrayFontSize[i] = in.readUint16BE();
_arrayFont[i] = (byte *)malloc(sizeof(byte) * _arrayFontSize[i]);
for (int j = 0; j < _arrayFontSize[i]; j++) {
_arrayFont[i][j] = in.readByte();
}
}
}
} // End of namespace Hugo

View File

@ -1,94 +0,0 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* $URL$
* $Id$
*
*/
/*
* This code is based on original Hugo Trilogy source code
*
* Copyright (c) 1989-1995 David P. Gray
*
*/
// Display.c - DIB related code for HUGOWIN
#include "common/system.h"
#include "hugo/hugo.h"
#include "hugo/display.h"
#include "hugo/file.h"
#include "hugo/util.h"
namespace Hugo {
Screen_v1w::Screen_v1w(HugoEngine *vm) : Screen(vm) {
}
Screen_v1w::~Screen_v1w() {
}
/**
* Load font file, construct font ptrs and reverse data bytes
*/
void Screen_v1w::loadFont(int16 fontId) {
debugC(2, kDebugDisplay, "loadFont(%d)", fontId);
_fnt = fontId - FIRST_FONT; // Set current font number
if (fontLoadedFl[_fnt]) // If already loaded, return
return;
fontLoadedFl[_fnt] = true;
_vm->_file->readUIFItem(fontId, _fontdata[_fnt]);
// Compile font ptrs. Note: First ptr points to height,width of font
_font[_fnt][0] = _fontdata[_fnt]; // Store height,width of fonts
int16 offset = 2; // Start at fontdata[2] ([0],[1] used for height,width)
// Setup the font array (127 characters)
for (int i = 1; i < 128; i++) {
_font[_fnt][i] = _fontdata[_fnt] + offset;
byte height = *(_fontdata[_fnt] + offset);
byte width = *(_fontdata[_fnt] + offset + 1);
int16 size = height * ((width + 7) >> 3);
for (int j = 0; j < size; j++)
Utils::reverseByte(&_fontdata[_fnt][offset + 2 + j]);
offset += 2 + size;
}
}
/**
* Skips the fonts used by the DOS versions
*/
void Screen_v1w::loadFontArr(Common::File &in) {
for (int i = 0; i < NUM_FONTS; i++) {
uint16 numElem = in.readUint16BE();
for (int j = 0; j < numElem; j++)
in.readByte();
}
}
} // End of namespace Hugo

View File

@ -34,6 +34,9 @@
#include "hugo/hugo.h"
#include "hugo/intro.h"
#include "hugo/util.h"
#include "hugo/display.h"
#include "hugo/sound.h"
namespace Hugo {
@ -43,4 +46,363 @@ IntroHandler::IntroHandler(HugoEngine *vm) : _vm(vm) {
IntroHandler::~IntroHandler() {
}
intro_v1d::intro_v1d(HugoEngine *vm) : IntroHandler(vm) {
}
intro_v1d::~intro_v1d() {
}
void intro_v1d::preNewGame() {
}
void intro_v1d::introInit() {
introTicks = 0;
surf.w = 320;
surf.h = 200;
surf.pixels = _vm->_screen->getFrontBuffer();
surf.pitch = 320;
surf.bytesPerPixel = 1;
}
bool intro_v1d::introPlay() {
static int state = 0;
byte introSize = _vm->getIntroSize();
if (_vm->getGameStatus().skipIntroFl)
return true;
if (introTicks < introSize) {
switch (state++) {
case 0:
_vm->_screen->drawRectangle(true, 0, 0, 319, 199, _TMAGENTA);
_vm->_screen->drawRectangle(true, 10, 10, 309, 189, _TBLACK);
break;
case 1:
_vm->_screen->drawShape(20, 92,_TLIGHTMAGENTA,_TMAGENTA);
_vm->_screen->drawShape(250,92,_TLIGHTMAGENTA,_TMAGENTA);
// TROMAN, size 10-5
if (!font.loadFromFON("TMSRB.FON", Graphics::WinFontDirEntry("Tms Rmn", 8)))
error("Unable to load font TMSRB.FON, face 'Tms Rmn', size 8");
char buffer[80];
if (_boot.registered)
strcpy(buffer, "Registered Version");
else
strcpy(buffer, "Shareware Version");
font.drawString(&surf, buffer, 0, 163, 320, _TLIGHTMAGENTA, Graphics::kTextAlignCenter);
font.drawString(&surf, COPYRIGHT, 0, 176, 320, _TLIGHTMAGENTA, Graphics::kTextAlignCenter);
if (scumm_stricmp(_boot.distrib, "David P. Gray")) {
sprintf(buffer, "Distributed by %s.", _boot.distrib);
font.drawString(&surf, buffer, 0, 75, 320, _TMAGENTA, Graphics::kTextAlignCenter);
}
// SCRIPT, size 24-16
strcpy(buffer, "Hugo's");
if (font.loadFromFON("SCRIPT.FON")) {
font.drawString(&surf, buffer, 0, 20, 320, _TMAGENTA, Graphics::kTextAlignCenter);
} else {
// Workaround: SCRIPT.FON doesn't load properly at the moment
_vm->_screen->loadFont(2);
_vm->_screen->writeStr(CENTER, 20, buffer, _TMAGENTA);
}
// TROMAN, size 30-24
if (!font.loadFromFON("TMSRB.FON", Graphics::WinFontDirEntry("Tms Rmn", 24)))
error("Unable to load font TMSRB.FON, face 'Tms Rmn', size 24");
strcpy(buffer, "House of Horrors !");
font.drawString(&surf, buffer, 0, 50, 320, _TLIGHTMAGENTA, Graphics::kTextAlignCenter);
break;
case 2:
_vm->_screen->drawRectangle(true, 82, 92, 237, 138, _TBLACK);
// TROMAN, size 16-9
if (!font.loadFromFON("TMSRB.FON", Graphics::WinFontDirEntry("Tms Rmn", 14)))
error("Unable to load font TMSRB.FON, face 'Tms Rmn', size 14");
strcpy(buffer, "S t a r r i n g :");
font.drawString(&surf, buffer, 0, 95, 320, _TMAGENTA, Graphics::kTextAlignCenter);
break;
case 3:
// TROMAN, size 20-9
if (!font.loadFromFON("TMSRB.FON", Graphics::WinFontDirEntry("Tms Rmn", 18)))
error("Unable to load font TMSRB.FON, face 'Tms Rmn', size 18");
strcpy(buffer, "Hugo !");
font.drawString(&surf, buffer, 0, 115, 320, _TLIGHTMAGENTA, Graphics::kTextAlignCenter);
break;
case 4:
_vm->_screen->drawRectangle(true, 82, 92, 237, 138, _TBLACK);
// TROMAN, size 16-9
if (!font.loadFromFON("TMSRB.FON", Graphics::WinFontDirEntry("Tms Rmn", 14)))
error("Unable to load font TMSRB.FON, face 'Tms Rmn', size 14");
strcpy(buffer, "P r o d u c e d b y :");
font.drawString(&surf, buffer, 0, 95, 320, _TMAGENTA, Graphics::kTextAlignCenter);
break;
case 5:
// TROMAN size 16-9
strcpy(buffer, "David P Gray !");
font.drawString(&surf, buffer, 0, 115, 320, _TLIGHTMAGENTA, Graphics::kTextAlignCenter);
break;
case 6:
_vm->_screen->drawRectangle(true, 82, 92, 237, 138, _TBLACK);
// TROMAN, size 16-9
strcpy(buffer, "D i r e c t e d b y :");
font.drawString(&surf, buffer, 0, 95, 320, _TMAGENTA, Graphics::kTextAlignCenter);
break;
case 7:
// TROMAN, size 16-9
strcpy(buffer, "David P Gray !");
font.drawString(&surf, buffer, 0, 115, 320, _TLIGHTMAGENTA, Graphics::kTextAlignCenter);
break;
case 8:
_vm->_screen->drawRectangle(true, 82, 92, 237, 138, _TBLACK);
// TROMAN, size 16-9
strcpy(buffer, "M u s i c b y :");
font.drawString(&surf, buffer, 0, 95, 320, _TMAGENTA, Graphics::kTextAlignCenter);
break;
case 9:
// TROMAN, size 16-9
strcpy(buffer, "David P Gray !");
font.drawString(&surf, buffer, 0, 115, 320, _TLIGHTMAGENTA, Graphics::kTextAlignCenter);
break;
case 10:
_vm->_screen->drawRectangle(true, 82, 92, 237, 138, _TBLACK);
// TROMAN, size 20-14
if (!font.loadFromFON("TMSRB.FON", Graphics::WinFontDirEntry("Tms Rmn", 18)))
error("Unable to load font TMSRB.FON, face 'Tms Rmn', size 18");
strcpy(buffer, "E n j o y !");
font.drawString(&surf, buffer, 0, 100, 320, _TLIGHTMAGENTA, Graphics::kTextAlignCenter);
break;
}
_vm->_screen->displayBackground();
g_system->updateScreen();
g_system->delayMillis(1000);
}
return (++introTicks >= introSize);
}
intro_v2d::intro_v2d(HugoEngine *vm) : IntroHandler(vm) {
}
intro_v2d::~intro_v2d() {
}
void intro_v2d::preNewGame() {
}
void intro_v2d::introInit() {
_vm->_file->readBackground(_vm->_numScreens - 1); // display splash screen
surf.w = 320;
surf.h = 200;
surf.pixels = _vm->_screen->getFrontBuffer();
surf.pitch = 320;
surf.bytesPerPixel = 1;
char buffer[128];
// TROMAN, size 10-5
if (!font.loadFromFON("TMSRB.FON", Graphics::WinFontDirEntry("Tms Rmn", 8)))
error("Unable to load font TMSRB.FON, face 'Tms Rmn', size 8");
if (_boot.registered)
sprintf(buffer, "%s Registered Version", COPYRIGHT);
else
sprintf(buffer, "%s Shareware Version", COPYRIGHT);
font.drawString(&surf, buffer, 0, 186, 320, _TLIGHTRED, Graphics::kTextAlignCenter);
if (scumm_stricmp(_boot.distrib, "David P. Gray")) {
// TROMAN, size 10-5
sprintf(buffer, "Distributed by %s.", _boot.distrib);
font.drawString(&surf, buffer, 0, 1, 320, _TLIGHTRED, Graphics::kTextAlignCenter);
}
_vm->_screen->displayBackground();
g_system->updateScreen();
g_system->delayMillis(5000);
}
bool intro_v2d::introPlay() {
return true;
}
intro_v3d::intro_v3d(HugoEngine *vm) : IntroHandler(vm) {
}
intro_v3d::~intro_v3d() {
}
void intro_v3d::preNewGame() {
}
void intro_v3d::introInit() {
_vm->_file->readBackground(_vm->_numScreens - 1); // display splash screen
surf.w = 320;
surf.h = 200;
surf.pixels = _vm->_screen->getFrontBuffer();
surf.pitch = 320;
surf.bytesPerPixel = 1;
char buffer[128];
if (_boot.registered)
sprintf(buffer, "%s Registered Version", COPYRIGHT);
else
sprintf(buffer,"%s Shareware Version", COPYRIGHT);
// TROMAN, size 10-5
if (!font.loadFromFON("TMSRB.FON", Graphics::WinFontDirEntry("Tms Rmn", 8)))
error("Unable to load font TMSRB.FON, face 'Tms Rmn', size 8");
font.drawString(&surf, buffer, 0, 190, 320, _TBROWN, Graphics::kTextAlignCenter);
if (scumm_stricmp(_boot.distrib, "David P. Gray")) {
sprintf(buffer, "Distributed by %s.", _boot.distrib);
font.drawString(&surf, buffer, 0, 0, 320, _TBROWN, Graphics::kTextAlignCenter);
}
_vm->_screen->displayBackground();
g_system->updateScreen();
g_system->delayMillis(5000);
_vm->_file->readBackground(22); // display screen MAP_3d
_vm->_screen->displayBackground();
introTicks = 0;
_vm->_sound->DOSSongPtr = _vm->_sound->DOSIntroSong;
}
/**
* Hugo 3 - Preamble screen before going into game. Draws path of Hugo's plane.
* Called every tick. Returns TRUE when complete
*/
bool intro_v3d::introPlay() {
if (_vm->getGameStatus().skipIntroFl)
return true;
if (introTicks < _vm->getIntroSize()) {
font.drawString(&surf, ".", _vm->_introX[introTicks], _vm->_introY[introTicks] - DIBOFF_Y, 320, _TBRIGHTWHITE);
_vm->_screen->displayBackground();
// Text boxes at various times
switch (introTicks) {
case 4:
Utils::Box(BOX_OK, "%s", _vm->_textIntro[kIntro1]);
break;
case 9:
Utils::Box(BOX_OK, "%s", _vm->_textIntro[kIntro2]);
break;
case 35:
Utils::Box(BOX_OK, "%s", _vm->_textIntro[kIntro3]);
break;
}
}
return (++introTicks >= _vm->getIntroSize());
}
intro_v1w::intro_v1w(HugoEngine *vm) : IntroHandler(vm) {
}
intro_v1w::~intro_v1w() {
}
void intro_v1w::preNewGame() {
_vm->getGameStatus().viewState = V_INTROINIT;
}
void intro_v1w::introInit() {
}
bool intro_v1w::introPlay() {
return true;
}
intro_v2w::intro_v2w(HugoEngine *vm) : IntroHandler(vm) {
}
intro_v2w::~intro_v2w() {
}
void intro_v2w::preNewGame() {
}
void intro_v2w::introInit() {
_vm->_file->readBackground(_vm->_numScreens - 1); // display splash screen
_vm->_screen->displayBackground();
g_system->updateScreen();
g_system->delayMillis(3000);
}
bool intro_v2w::introPlay() {
return true;
}
intro_v3w::intro_v3w(HugoEngine *vm) : IntroHandler(vm) {
}
intro_v3w::~intro_v3w() {
}
void intro_v3w::preNewGame() {
}
/**
* Hugo 3 - show map and set up for introPlay()
*/
void intro_v3w::introInit() {
_vm->_file->readBackground(_vm->_numScreens - 1); // display splash screen
_vm->_screen->displayBackground();
g_system->updateScreen();
g_system->delayMillis(3000);
_vm->_file->readBackground(22); // display screen MAP_3w
_vm->_screen->displayBackground();
introTicks = 0;
_vm->_screen->loadFont(0);
}
/**
* Hugo 3 - Preamble screen before going into game. Draws path of Hugo's plane.
* Called every tick. Returns TRUE when complete
*/
bool intro_v3w::introPlay() {
if (_vm->getGameStatus().skipIntroFl)
return true;
if (introTicks < _vm->getIntroSize()) {
// Scale viewport x_intro,y_intro to screen (offsetting y)
_vm->_screen->writeStr(_vm->_introX[introTicks], _vm->_introY[introTicks] - DIBOFF_Y, "x", _TBRIGHTWHITE);
_vm->_screen->displayBackground();
// Text boxes at various times
switch (introTicks) {
case 4:
Utils::Box(BOX_OK, "%s", _vm->_textIntro[kIntro1]);
break;
case 9:
Utils::Box(BOX_OK, "%s", _vm->_textIntro[kIntro2]);
break;
case 35:
Utils::Box(BOX_OK, "%s", _vm->_textIntro[kIntro3]);
break;
}
}
return (++introTicks >= _vm->getIntroSize());
}
} // End of namespace Hugo

View File

@ -1,189 +0,0 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* $URL$
* $Id$
*
*/
/*
* This code is based on original Hugo Trilogy source code
*
* Copyright (c) 1989-1995 David P. Gray
*
*/
#include "common/system.h"
#include "hugo/hugo.h"
#include "hugo/intro.h"
#include "hugo/display.h"
namespace Hugo {
intro_v1d::intro_v1d(HugoEngine *vm) : IntroHandler(vm) {
}
intro_v1d::~intro_v1d() {
}
void intro_v1d::preNewGame() {
}
void intro_v1d::introInit() {
introTicks = 0;
surf.w = 320;
surf.h = 200;
surf.pixels = _vm->_screen->getFrontBuffer();
surf.pitch = 320;
surf.bytesPerPixel = 1;
}
bool intro_v1d::introPlay() {
static int state = 0;
byte introSize = _vm->getIntroSize();
if (_vm->getGameStatus().skipIntroFl)
return true;
if (introTicks < introSize) {
switch (state++) {
case 0:
_vm->_screen->drawRectangle(true, 0, 0, 319, 199, _TMAGENTA);
_vm->_screen->drawRectangle(true, 10, 10, 309, 189, _TBLACK);
break;
case 1:
_vm->_screen->drawShape(20, 92,_TLIGHTMAGENTA,_TMAGENTA);
_vm->_screen->drawShape(250,92,_TLIGHTMAGENTA,_TMAGENTA);
// TROMAN, size 10-5
if (!font.loadFromFON("TMSRB.FON", Graphics::WinFontDirEntry("Tms Rmn", 8)))
error("Unable to load font TMSRB.FON, face 'Tms Rmn', size 8");
char buffer[80];
if (_boot.registered)
strcpy(buffer, "Registered Version");
else
strcpy(buffer, "Shareware Version");
font.drawString(&surf, buffer, 0, 163, 320, _TLIGHTMAGENTA, Graphics::kTextAlignCenter);
font.drawString(&surf, COPYRIGHT, 0, 176, 320, _TLIGHTMAGENTA, Graphics::kTextAlignCenter);
if (scumm_stricmp(_boot.distrib, "David P. Gray")) {
sprintf(buffer, "Distributed by %s.", _boot.distrib);
font.drawString(&surf, buffer, 0, 75, 320, _TMAGENTA, Graphics::kTextAlignCenter);
}
// SCRIPT, size 24-16
strcpy(buffer, "Hugo's");
if (font.loadFromFON("SCRIPT.FON")) {
font.drawString(&surf, buffer, 0, 20, 320, _TMAGENTA, Graphics::kTextAlignCenter);
} else {
// Workaround: SCRIPT.FON doesn't load properly at the moment
_vm->_screen->loadFont(2);
_vm->_screen->writeStr(CENTER, 20, buffer, _TMAGENTA);
}
// TROMAN, size 30-24
if (!font.loadFromFON("TMSRB.FON", Graphics::WinFontDirEntry("Tms Rmn", 24)))
error("Unable to load font TMSRB.FON, face 'Tms Rmn', size 24");
strcpy(buffer, "House of Horrors !");
font.drawString(&surf, buffer, 0, 50, 320, _TLIGHTMAGENTA, Graphics::kTextAlignCenter);
break;
case 2:
_vm->_screen->drawRectangle(true, 82, 92, 237, 138, _TBLACK);
// TROMAN, size 16-9
if (!font.loadFromFON("TMSRB.FON", Graphics::WinFontDirEntry("Tms Rmn", 14)))
error("Unable to load font TMSRB.FON, face 'Tms Rmn', size 14");
strcpy(buffer, "S t a r r i n g :");
font.drawString(&surf, buffer, 0, 95, 320, _TMAGENTA, Graphics::kTextAlignCenter);
break;
case 3:
// TROMAN, size 20-9
if (!font.loadFromFON("TMSRB.FON", Graphics::WinFontDirEntry("Tms Rmn", 18)))
error("Unable to load font TMSRB.FON, face 'Tms Rmn', size 18");
strcpy(buffer, "Hugo !");
font.drawString(&surf, buffer, 0, 115, 320, _TLIGHTMAGENTA, Graphics::kTextAlignCenter);
break;
case 4:
_vm->_screen->drawRectangle(true, 82, 92, 237, 138, _TBLACK);
// TROMAN, size 16-9
if (!font.loadFromFON("TMSRB.FON", Graphics::WinFontDirEntry("Tms Rmn", 14)))
error("Unable to load font TMSRB.FON, face 'Tms Rmn', size 14");
strcpy(buffer, "P r o d u c e d b y :");
font.drawString(&surf, buffer, 0, 95, 320, _TMAGENTA, Graphics::kTextAlignCenter);
break;
case 5:
// TROMAN size 16-9
strcpy(buffer, "David P Gray !");
font.drawString(&surf, buffer, 0, 115, 320, _TLIGHTMAGENTA, Graphics::kTextAlignCenter);
break;
case 6:
_vm->_screen->drawRectangle(true, 82, 92, 237, 138, _TBLACK);
// TROMAN, size 16-9
strcpy(buffer, "D i r e c t e d b y :");
font.drawString(&surf, buffer, 0, 95, 320, _TMAGENTA, Graphics::kTextAlignCenter);
break;
case 7:
// TROMAN, size 16-9
strcpy(buffer, "David P Gray !");
font.drawString(&surf, buffer, 0, 115, 320, _TLIGHTMAGENTA, Graphics::kTextAlignCenter);
break;
case 8:
_vm->_screen->drawRectangle(true, 82, 92, 237, 138, _TBLACK);
// TROMAN, size 16-9
strcpy(buffer, "M u s i c b y :");
font.drawString(&surf, buffer, 0, 95, 320, _TMAGENTA, Graphics::kTextAlignCenter);
break;
case 9:
// TROMAN, size 16-9
strcpy(buffer, "David P Gray !");
font.drawString(&surf, buffer, 0, 115, 320, _TLIGHTMAGENTA, Graphics::kTextAlignCenter);
break;
case 10:
_vm->_screen->drawRectangle(true, 82, 92, 237, 138, _TBLACK);
// TROMAN, size 20-14
if (!font.loadFromFON("TMSRB.FON", Graphics::WinFontDirEntry("Tms Rmn", 18)))
error("Unable to load font TMSRB.FON, face 'Tms Rmn', size 18");
strcpy(buffer, "E n j o y !");
font.drawString(&surf, buffer, 0, 100, 320, _TLIGHTMAGENTA, Graphics::kTextAlignCenter);
break;
}
_vm->_screen->displayBackground();
g_system->updateScreen();
g_system->delayMillis(1000);
}
return (++introTicks >= introSize);
}
} // End of namespace Hugo

View File

@ -1,62 +0,0 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* $URL$
* $Id$
*
*/
/*
* This code is based on original Hugo Trilogy source code
*
* Copyright (c) 1989-1995 David P. Gray
*
*/
#include "common/system.h"
#include "hugo/hugo.h"
#include "hugo/intro.h"
#include "hugo/file.h"
namespace Hugo {
intro_v1w::intro_v1w(HugoEngine *vm) : IntroHandler(vm) {
}
intro_v1w::~intro_v1w() {
}
/**
* Auto-start a new game
*/
void intro_v1w::preNewGame() {
_vm->getGameStatus().viewState = V_INTROINIT;
}
void intro_v1w::introInit() {
}
bool intro_v1w::introPlay() {
return true;
}
} // End of namespace Hugo

View File

@ -1,87 +0,0 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* $URL$
* $Id$
*
*/
/*
* This code is based on original Hugo Trilogy source code
*
* Copyright (c) 1989-1995 David P. Gray
*
*/
#include "common/system.h"
#include "hugo/hugo.h"
#include "hugo/intro.h"
#include "hugo/file.h"
#include "hugo/display.h"
namespace Hugo {
intro_v2d::intro_v2d(HugoEngine *vm) : IntroHandler(vm) {
}
intro_v2d::~intro_v2d() {
}
void intro_v2d::preNewGame() {
}
void intro_v2d::introInit() {
_vm->_file->readBackground(_vm->_numScreens - 1); // display splash screen
surf.w = 320;
surf.h = 200;
surf.pixels = _vm->_screen->getFrontBuffer();
surf.pitch = 320;
surf.bytesPerPixel = 1;
char buffer[128];
// TROMAN, size 10-5
if (!font.loadFromFON("TMSRB.FON", Graphics::WinFontDirEntry("Tms Rmn", 8)))
error("Unable to load font TMSRB.FON, face 'Tms Rmn', size 8");
if (_boot.registered)
sprintf(buffer, "%s Registered Version", COPYRIGHT);
else
sprintf(buffer, "%s Shareware Version", COPYRIGHT);
font.drawString(&surf, buffer, 0, 186, 320, _TLIGHTRED, Graphics::kTextAlignCenter);
if (scumm_stricmp(_boot.distrib, "David P. Gray")) {
// TROMAN, size 10-5
sprintf(buffer, "Distributed by %s.", _boot.distrib);
font.drawString(&surf, buffer, 0, 1, 320, _TLIGHTRED, Graphics::kTextAlignCenter);
}
_vm->_screen->displayBackground();
g_system->updateScreen();
g_system->delayMillis(5000);
}
bool intro_v2d::introPlay() {
return true;
}
} // End of namespace Hugo

View File

@ -1,63 +0,0 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* $URL$
* $Id$
*
*/
/*
* This code is based on original Hugo Trilogy source code
*
* Copyright (c) 1989-1995 David P. Gray
*
*/
#include "common/system.h"
#include "hugo/hugo.h"
#include "hugo/intro.h"
#include "hugo/display.h"
namespace Hugo {
intro_v2w::intro_v2w(HugoEngine *vm) : IntroHandler(vm) {
}
intro_v2w::~intro_v2w() {
}
void intro_v2w::preNewGame() {
}
void intro_v2w::introInit() {
_vm->_file->readBackground(_vm->_numScreens - 1); // display splash screen
_vm->_screen->displayBackground();
g_system->updateScreen();
g_system->delayMillis(3000);
}
bool intro_v2w::introPlay() {
return true;
}
} // End of namespace Hugo

View File

@ -1,117 +0,0 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* $URL$
* $Id$
*
*/
/*
* This code is based on original Hugo Trilogy source code
*
* Copyright (c) 1989-1995 David P. Gray
*
*/
#include "common/system.h"
#include "hugo/hugo.h"
#include "hugo/intro.h"
#include "hugo/file.h"
#include "hugo/display.h"
#include "hugo/util.h"
#include "hugo/sound.h"
namespace Hugo {
intro_v3d::intro_v3d(HugoEngine *vm) : IntroHandler(vm) {
}
intro_v3d::~intro_v3d() {
}
void intro_v3d::preNewGame() {
}
void intro_v3d::introInit() {
_vm->_file->readBackground(_vm->_numScreens - 1); // display splash screen
surf.w = 320;
surf.h = 200;
surf.pixels = _vm->_screen->getFrontBuffer();
surf.pitch = 320;
surf.bytesPerPixel = 1;
char buffer[128];
if (_boot.registered)
sprintf(buffer, "%s Registered Version", COPYRIGHT);
else
sprintf(buffer,"%s Shareware Version", COPYRIGHT);
// TROMAN, size 10-5
if (!font.loadFromFON("TMSRB.FON", Graphics::WinFontDirEntry("Tms Rmn", 8)))
error("Unable to load font TMSRB.FON, face 'Tms Rmn', size 8");
font.drawString(&surf, buffer, 0, 190, 320, _TBROWN, Graphics::kTextAlignCenter);
if (scumm_stricmp(_boot.distrib, "David P. Gray")) {
sprintf(buffer, "Distributed by %s.", _boot.distrib);
font.drawString(&surf, buffer, 0, 0, 320, _TBROWN, Graphics::kTextAlignCenter);
}
_vm->_screen->displayBackground();
g_system->updateScreen();
g_system->delayMillis(5000);
_vm->_file->readBackground(22); // display screen MAP_3d
_vm->_screen->displayBackground();
introTicks = 0;
_vm->_sound->DOSSongPtr = _vm->_sound->DOSIntroSong;
}
/**
* Hugo 3 - Preamble screen before going into game. Draws path of Hugo's plane.
* Called every tick. Returns TRUE when complete
*/
bool intro_v3d::introPlay() {
if (_vm->getGameStatus().skipIntroFl)
return true;
if (introTicks < _vm->getIntroSize()) {
font.drawString(&surf, ".", _vm->_introX[introTicks], _vm->_introY[introTicks] - DIBOFF_Y, 320, _TBRIGHTWHITE);
_vm->_screen->displayBackground();
// Text boxes at various times
switch (introTicks) {
case 4:
Utils::Box(BOX_OK, "%s", _vm->_textIntro[kIntro1]);
break;
case 9:
Utils::Box(BOX_OK, "%s", _vm->_textIntro[kIntro2]);
break;
case 35:
Utils::Box(BOX_OK, "%s", _vm->_textIntro[kIntro3]);
break;
}
}
return (++introTicks >= _vm->getIntroSize());
}
} // End of namespace Hugo

View File

@ -1,97 +0,0 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* $URL$
* $Id$
*
*/
/*
* This code is based on original Hugo Trilogy source code
*
* Copyright (c) 1989-1995 David P. Gray
*
*/
#include "common/system.h"
#include "hugo/hugo.h"
#include "hugo/intro.h"
#include "hugo/file.h"
#include "hugo/display.h"
#include "hugo/util.h"
namespace Hugo {
intro_v3w::intro_v3w(HugoEngine *vm) : IntroHandler(vm) {
}
intro_v3w::~intro_v3w() {
}
void intro_v3w::preNewGame() {
}
/**
* Hugo 3 - show map and set up for introPlay()
*/
void intro_v3w::introInit() {
_vm->_file->readBackground(_vm->_numScreens - 1); // display splash screen
_vm->_screen->displayBackground();
g_system->updateScreen();
g_system->delayMillis(3000);
_vm->_file->readBackground(22); // display screen MAP_3w
_vm->_screen->displayBackground();
introTicks = 0;
_vm->_screen->loadFont(0);
}
/**
* Hugo 3 - Preamble screen before going into game. Draws path of Hugo's plane.
* Called every tick. Returns TRUE when complete
*/
bool intro_v3w::introPlay() {
if (_vm->getGameStatus().skipIntroFl)
return true;
if (introTicks < _vm->getIntroSize()) {
// Scale viewport x_intro,y_intro to screen (offsetting y)
_vm->_screen->writeStr(_vm->_introX[introTicks], _vm->_introY[introTicks] - DIBOFF_Y, "x", _TBRIGHTWHITE);
_vm->_screen->displayBackground();
// Text boxes at various times
switch (introTicks) {
case 4:
Utils::Box(BOX_OK, "%s", _vm->_textIntro[kIntro1]);
break;
case 9:
Utils::Box(BOX_OK, "%s", _vm->_textIntro[kIntro2]);
break;
case 35:
Utils::Box(BOX_OK, "%s", _vm->_textIntro[kIntro3]);
break;
}
}
return (++introTicks >= _vm->getIntroSize());
}
} // End of namespace Hugo

View File

@ -4,8 +4,6 @@ MODULE_OBJS := \
console.o \
detection.o \
display.o \
display_v1d.o \
display_v1w.o \
file.o \
file_v1d.o \
file_v2d.o \
@ -14,12 +12,6 @@ MODULE_OBJS := \
file_v2w.o \
hugo.o \
intro.o \
intro_v1d.o \
intro_v2d.o \
intro_v3d.o \
intro_v1w.o \
intro_v2w.o \
intro_v3w.o \
inventory.o \
menu.o \
mouse.o \
@ -35,10 +27,6 @@ MODULE_OBJS := \
parser_v3d.o \
route.o \
schedule.o \
schedule_v1d.o \
schedule_v1w.o \
schedule_v2d.o \
schedule_v3d.o \
sound.o \
util.o

View File

@ -1241,4 +1241,239 @@ event_t *Scheduler::doAction(event_t *curEvent) {
return wrkEvent; // Return next event ptr
}
}
Scheduler_v1d::Scheduler_v1d(HugoEngine *vm) : Scheduler(vm) {
}
Scheduler_v1d::~Scheduler_v1d() {
}
const char *Scheduler_v1d::getCypher() {
return "Copyright (c) 1990, Gray Design Associates";
}
uint32 Scheduler_v1d::getTicks() {
return getDosTicks(false);
}
/**
* Delete an event structure (i.e. return it to the free list)
* Note that event is assumed at head of queue (i.e. earliest). To delete
* an event from the middle of the queue, merely overwrite its action type
* to be ANULL
*/
void Scheduler_v1d::delQueue(event_t *curEvent) {
debugC(4, kDebugSchedule, "delQueue()");
if (curEvent == _headEvent) // If p was the head ptr
_headEvent = curEvent->nextEvent; // then make new head_p
if (_headEvent)
_headEvent->prevEvent = 0; // Mark end of list
else
_tailEvent = 0; // Empty queue
curEvent->nextEvent = _freeEvent; // Return p to free list
if (_freeEvent) // Special case, if free list was empty
_freeEvent->prevEvent = curEvent;
_freeEvent = curEvent;
}
/**
* This is the scheduler which runs every tick. It examines the event queue
* for any events whose time has come. It dequeues these events and performs
* the action associated with the event, returning it to the free queue
*/
void Scheduler_v1d::runScheduler() {
debugC(6, kDebugSchedule, "runScheduler");
uint32 ticker = getTicks(); // The time now, in ticks
event_t *curEvent = _headEvent; // The earliest event
while (curEvent && (curEvent->time <= ticker)) // While mature events found
curEvent = doAction(curEvent); // Perform the action (returns next_p)
}
void Scheduler_v1d::delEventType(action_t actTypeDel) {
// Note: actions are not deleted here, simply turned into NOPs!
event_t *wrkEvent = _headEvent; // The earliest event
while (wrkEvent) { // While events found in list
if (wrkEvent->action->a20.actType == actTypeDel)
wrkEvent->action->a20.actType = ANULL;
wrkEvent = wrkEvent->nextEvent;
}
}
void Scheduler_v1d::promptAction(act *action) {
Utils::Box(BOX_PROMPT, "%s", _vm->_file->fetchString(action->a3.promptIndex));
warning("STUB: doAction(act3)");
// TODO: The answer of the player is not handled currently! Once it'll be read in the messageBox, uncomment this block
#if 0
char response[256];
// TODO: Put user input in response
Utils::strlwr(response);
if (action->a3.encodedFl) {
warning("Encrypted flag set");
decodeString(response);
}
if (strstr(response, _vm->_file->fetchString(action->a3.responsePtr[0]))
insertActionList(action->a3.actPassIndex);
else
insertActionList(action->a3.actFailIndex);
#endif
// HACK: As the answer is not read, currently it's always considered correct
insertActionList(action->a3.actPassIndex);
}
/**
* Decode a response to a prompt
*/
void Scheduler_v1d::decodeString(char *line) {
debugC(1, kDebugSchedule, "decodeString(%s)", line);
static const char *cypher = getCypher();
for(uint16 i = 0; i < strlen(line); i++) {
line[i] = (line[i] + cypher[i]) % '~';
if (line[i] < ' ')
line[i] += ' ';
}
}
Scheduler_v2d::Scheduler_v2d(HugoEngine *vm) : Scheduler_v1d(vm) {
}
Scheduler_v2d::~Scheduler_v2d() {
}
const char *Scheduler_v2d::getCypher() {
return "Copyright 1991, Gray Design Associates";
}
/**
* Delete an event structure (i.e. return it to the free list)
* Historical note: Originally event p was assumed to be at head of queue
* (i.e. earliest) since all events were deleted in order when proceeding to
* a new screen. To delete an event from the middle of the queue, the action
* was overwritten to be ANULL. With the advent of GLOBAL events, delQueue
* was modified to allow deletes anywhere in the list, and the DEL_EVENT
* action was modified to perform the actual delete.
*/
void Scheduler_v2d::delQueue(event_t *curEvent) {
debugC(4, kDebugSchedule, "delQueue()");
if (curEvent == _headEvent) { // If p was the head ptr
_headEvent = curEvent->nextEvent; // then make new head_p
} else { // Unlink p
curEvent->prevEvent->nextEvent = curEvent->nextEvent;
if (curEvent->nextEvent)
curEvent->nextEvent->prevEvent = curEvent->prevEvent;
else
_tailEvent = curEvent->prevEvent;
}
if (_headEvent)
_headEvent->prevEvent = 0; // Mark end of list
else
_tailEvent = 0; // Empty queue
curEvent->nextEvent = _freeEvent; // Return p to free list
if (_freeEvent) // Special case, if free list was empty
_freeEvent->prevEvent = curEvent;
_freeEvent = curEvent;
}
void Scheduler_v2d::delEventType(action_t actTypeDel) {
// Note: actions are not deleted here, simply turned into NOPs!
event_t *wrkEvent = _headEvent; // The earliest event
event_t *saveEvent;
while (wrkEvent) { // While events found in list
saveEvent = wrkEvent->nextEvent;
if (wrkEvent->action->a20.actType == actTypeDel)
delQueue(wrkEvent);
wrkEvent = saveEvent;
}
}
void Scheduler_v2d::promptAction(act *action) {
Utils::Box(BOX_PROMPT, "%s", _vm->_file->fetchString(action->a3.promptIndex));
warning("STUB: doAction(act3), expecting answer %s", _vm->_file->fetchString(action->a3.responsePtr[0]));
// TODO: The answer of the player is not handled currently! Once it'll be read in the messageBox, uncomment this block
#if 0
char *response = Utils::Box(BOX_PROMPT, "%s", _vm->_file->fetchString(action->a3.promptIndex));
bool found = false;
char *tmpStr; // General purpose string ptr
for (dx = 0; !found && (action->a3.responsePtr[dx] != -1); dx++) {
tmpStr = _vm->_file->fetchString(action->a3.responsePtr[dx]);
if (strstr(Utils::strlwr(response) , tmpStr))
found = true;
}
if (found)
insertActionList(action->a3.actPassIndex);
else
insertActionList(action->a3.actFailIndex);
#endif
// HACK: As the answer is not read, currently it's always considered correct
insertActionList(action->a3.actPassIndex);
}
/**
* Decode a string
*/
void Scheduler_v2d::decodeString(char *line) {
debugC(1, kDebugSchedule, "decodeString(%s)", line);
static const char *cypher = getCypher();
for (uint16 i = 0; i < strlen(line); i++)
line[i] -= cypher[i % strlen(cypher)];
debugC(1, kDebugSchedule, "result : %s", line);
}
Scheduler_v3d::Scheduler_v3d(HugoEngine *vm) : Scheduler_v2d(vm) {
}
Scheduler_v3d::~Scheduler_v3d() {
}
const char *Scheduler_v3d::getCypher() {
return "Copyright 1992, Gray Design Associates";
}
Scheduler_v1w::Scheduler_v1w(HugoEngine *vm) : Scheduler_v3d(vm) {
}
Scheduler_v1w::~Scheduler_v1w() {
}
uint32 Scheduler_v1w::getTicks() {
return getWinTicks();
}
/**
* This is the scheduler which runs every tick. It examines the event queue
* for any events whose time has come. It dequeues these events and performs
* the action associated with the event, returning it to the free queue
*/
void Scheduler_v1w::runScheduler() {
debugC(6, kDebugSchedule, "runScheduler");
uint32 ticker = getTicks(); // The time now, in ticks
event_t *curEvent = _headEvent; // The earliest event
while (curEvent && (curEvent->time <= ticker)) // While mature events found
curEvent = doAction(curEvent); // Perform the action (returns next_p)
_vm->getGameStatus().tick++; // Accessed elsewhere via getTicks()
}
} // End of namespace Hugo

View File

@ -1,147 +0,0 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* $URL$
* $Id$
*
*/
/*
* This code is based on original Hugo Trilogy source code
*
* Copyright (c) 1989-1995 David P. Gray
*
*/
// This module contains all the scheduling and timing stuff
#include "common/system.h"
#include "hugo/game.h"
#include "hugo/hugo.h"
#include "hugo/schedule.h"
#include "hugo/file.h"
#include "hugo/display.h"
#include "hugo/util.h"
namespace Hugo {
Scheduler_v1d::Scheduler_v1d(HugoEngine *vm) : Scheduler(vm) {
}
Scheduler_v1d::~Scheduler_v1d() {
}
const char *Scheduler_v1d::getCypher() {
return "Copyright (c) 1990, Gray Design Associates";
}
uint32 Scheduler_v1d::getTicks() {
return getDosTicks(false);
}
/**
* Delete an event structure (i.e. return it to the free list)
* Note that event is assumed at head of queue (i.e. earliest). To delete
* an event from the middle of the queue, merely overwrite its action type
* to be ANULL
*/
void Scheduler_v1d::delQueue(event_t *curEvent) {
debugC(4, kDebugSchedule, "delQueue()");
if (curEvent == _headEvent) // If p was the head ptr
_headEvent = curEvent->nextEvent; // then make new head_p
if (_headEvent)
_headEvent->prevEvent = 0; // Mark end of list
else
_tailEvent = 0; // Empty queue
curEvent->nextEvent = _freeEvent; // Return p to free list
if (_freeEvent) // Special case, if free list was empty
_freeEvent->prevEvent = curEvent;
_freeEvent = curEvent;
}
/**
* This is the scheduler which runs every tick. It examines the event queue
* for any events whose time has come. It dequeues these events and performs
* the action associated with the event, returning it to the free queue
*/
void Scheduler_v1d::runScheduler() {
debugC(6, kDebugSchedule, "runScheduler");
uint32 ticker = getTicks(); // The time now, in ticks
event_t *curEvent = _headEvent; // The earliest event
while (curEvent && (curEvent->time <= ticker)) // While mature events found
curEvent = doAction(curEvent); // Perform the action (returns next_p)
}
void Scheduler_v1d::delEventType(action_t actTypeDel) {
// Note: actions are not deleted here, simply turned into NOPs!
event_t *wrkEvent = _headEvent; // The earliest event
while (wrkEvent) { // While events found in list
if (wrkEvent->action->a20.actType == actTypeDel)
wrkEvent->action->a20.actType = ANULL;
wrkEvent = wrkEvent->nextEvent;
}
}
void Scheduler_v1d::promptAction(act *action) {
Utils::Box(BOX_PROMPT, "%s", _vm->_file->fetchString(action->a3.promptIndex));
warning("STUB: doAction(act3)");
// TODO: The answer of the player is not handled currently! Once it'll be read in the messageBox, uncomment this block
#if 0
char response[256];
// TODO: Put user input in response
Utils::strlwr(response);
if (action->a3.encodedFl) {
warning("Encrypted flag set");
decodeString(response);
}
if (strstr(response, _vm->_file->fetchString(action->a3.responsePtr[0]))
insertActionList(action->a3.actPassIndex);
else
insertActionList(action->a3.actFailIndex);
#endif
// HACK: As the answer is not read, currently it's always considered correct
insertActionList(action->a3.actPassIndex);
}
/**
* Decode a response to a prompt
*/
void Scheduler_v1d::decodeString(char *line) {
debugC(1, kDebugSchedule, "decodeString(%s)", line);
static const char *cypher = getCypher();
for(uint16 i = 0; i < strlen(line); i++) {
line[i] = (line[i] + cypher[i]) % '~';
if (line[i] < ' ')
line[i] += ' ';
}
}
} // End of namespace Hugo

View File

@ -1,76 +0,0 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* $URL$
* $Id$
*
*/
/*
* This code is based on original Hugo Trilogy source code
*
* Copyright (c) 1989-1995 David P. Gray
*
*/
// This module contains all the scheduling and timing stuff
#include "common/system.h"
#include "hugo/game.h"
#include "hugo/hugo.h"
#include "hugo/schedule.h"
#include "hugo/global.h"
#include "hugo/file.h"
#include "hugo/display.h"
#include "hugo/parser.h"
#include "hugo/util.h"
#include "hugo/sound.h"
#include "hugo/object.h"
namespace Hugo {
Scheduler_v1w::Scheduler_v1w(HugoEngine *vm) : Scheduler_v3d(vm) {
}
Scheduler_v1w::~Scheduler_v1w() {
}
uint32 Scheduler_v1w::getTicks() {
return getWinTicks();
}
/**
* This is the scheduler which runs every tick. It examines the event queue
* for any events whose time has come. It dequeues these events and performs
* the action associated with the event, returning it to the free queue
*/
void Scheduler_v1w::runScheduler() {
debugC(6, kDebugSchedule, "runScheduler");
uint32 ticker = getTicks(); // The time now, in ticks
event_t *curEvent = _headEvent; // The earliest event
while (curEvent && (curEvent->time <= ticker)) // While mature events found
curEvent = doAction(curEvent); // Perform the action (returns next_p)
_vm->getGameStatus().tick++; // Accessed elsewhere via getTicks()
}
} // End of namespace Hugo

View File

@ -1,142 +0,0 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* $URL$
* $Id$
*
*/
/*
* This code is based on original Hugo Trilogy source code
*
* Copyright (c) 1989-1995 David P. Gray
*
*/
// This module contains all the scheduling and timing stuff
#include "common/system.h"
#include "hugo/game.h"
#include "hugo/hugo.h"
#include "hugo/schedule.h"
#include "hugo/global.h"
#include "hugo/file.h"
#include "hugo/display.h"
#include "hugo/util.h"
namespace Hugo {
Scheduler_v2d::Scheduler_v2d(HugoEngine *vm) : Scheduler_v1d(vm) {
}
Scheduler_v2d::~Scheduler_v2d() {
}
const char *Scheduler_v2d::getCypher() {
return "Copyright 1991, Gray Design Associates";
}
/**
* Delete an event structure (i.e. return it to the free list)
* Historical note: Originally event p was assumed to be at head of queue
* (i.e. earliest) since all events were deleted in order when proceeding to
* a new screen. To delete an event from the middle of the queue, the action
* was overwritten to be ANULL. With the advent of GLOBAL events, delQueue
* was modified to allow deletes anywhere in the list, and the DEL_EVENT
* action was modified to perform the actual delete.
*/
void Scheduler_v2d::delQueue(event_t *curEvent) {
debugC(4, kDebugSchedule, "delQueue()");
if (curEvent == _headEvent) { // If p was the head ptr
_headEvent = curEvent->nextEvent; // then make new head_p
} else { // Unlink p
curEvent->prevEvent->nextEvent = curEvent->nextEvent;
if (curEvent->nextEvent)
curEvent->nextEvent->prevEvent = curEvent->prevEvent;
else
_tailEvent = curEvent->prevEvent;
}
if (_headEvent)
_headEvent->prevEvent = 0; // Mark end of list
else
_tailEvent = 0; // Empty queue
curEvent->nextEvent = _freeEvent; // Return p to free list
if (_freeEvent) // Special case, if free list was empty
_freeEvent->prevEvent = curEvent;
_freeEvent = curEvent;
}
void Scheduler_v2d::delEventType(action_t actTypeDel) {
// Note: actions are not deleted here, simply turned into NOPs!
event_t *wrkEvent = _headEvent; // The earliest event
event_t *saveEvent;
while (wrkEvent) { // While events found in list
saveEvent = wrkEvent->nextEvent;
if (wrkEvent->action->a20.actType == actTypeDel)
delQueue(wrkEvent);
wrkEvent = saveEvent;
}
}
void Scheduler_v2d::promptAction(act *action) {
Utils::Box(BOX_PROMPT, "%s", _vm->_file->fetchString(action->a3.promptIndex));
warning("STUB: doAction(act3), expecting answer %s", _vm->_file->fetchString(action->a3.responsePtr[0]));
// TODO: The answer of the player is not handled currently! Once it'll be read in the messageBox, uncomment this block
#if 0
char *response = Utils::Box(BOX_PROMPT, "%s", _vm->_file->fetchString(action->a3.promptIndex));
bool found = false;
char *tmpStr; // General purpose string ptr
for (dx = 0; !found && (action->a3.responsePtr[dx] != -1); dx++) {
tmpStr = _vm->_file->fetchString(action->a3.responsePtr[dx]);
if (strstr(Utils::strlwr(response) , tmpStr))
found = true;
}
if (found)
insertActionList(action->a3.actPassIndex);
else
insertActionList(action->a3.actFailIndex);
#endif
// HACK: As the answer is not read, currently it's always considered correct
insertActionList(action->a3.actPassIndex);
}
/**
* Decode a string
*/
void Scheduler_v2d::decodeString(char *line) {
debugC(1, kDebugSchedule, "decodeString(%s)", line);
static const char *cypher = getCypher();
for (uint16 i = 0; i < strlen(line); i++)
line[i] -= cypher[i % strlen(cypher)];
debugC(1, kDebugSchedule, "result : %s", line);
}
} // End of namespace Hugo

View File

@ -1,60 +0,0 @@
/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* $URL$
* $Id$
*
*/
/*
* This code is based on original Hugo Trilogy source code
*
* Copyright (c) 1989-1995 David P. Gray
*
*/
// This module contains all the scheduling and timing stuff
#include "common/system.h"
#include "hugo/game.h"
#include "hugo/hugo.h"
#include "hugo/schedule.h"
#include "hugo/global.h"
#include "hugo/file.h"
#include "hugo/display.h"
#include "hugo/parser.h"
#include "hugo/util.h"
#include "hugo/sound.h"
#include "hugo/object.h"
namespace Hugo {
Scheduler_v3d::Scheduler_v3d(HugoEngine *vm) : Scheduler_v2d(vm) {
}
Scheduler_v3d::~Scheduler_v3d() {
}
const char *Scheduler_v3d::getCypher() {
return "Copyright 1992, Gray Design Associates";
}
} // End of namespace Hugo