mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-24 03:24:50 +00:00
HUGO: Merge misc versions of display, intro and scheduler classes
svn-id: r55365
This commit is contained in:
parent
6412b1d2c7
commit
a321f2a007
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
Loading…
x
Reference in New Issue
Block a user