mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-14 13:50:13 +00:00
TINSEL: Move background related functions into a new Background class
This commit is contained in:
parent
eed258261a
commit
64b750ab2e
@ -55,7 +55,7 @@ goto done
|
||||
echo.
|
||||
echo Creating project files with all engines enabled (stable and unstable)
|
||||
echo.
|
||||
create_project ..\.. --enable-all-engines --disable-fluidsynth --msvc
|
||||
create_project ..\.. --enable-all-engines --disable-fluidsynth --msvc --build-events --enable-vkeybd --enable-updates --enable-faad --enable-mpeg2
|
||||
goto done
|
||||
|
||||
:stable
|
||||
|
@ -1610,7 +1610,7 @@ void GetActorTagPos(int actor, int *pTagX, int *pTagY, bool bAbsolute) {
|
||||
*pTagY = aTop;
|
||||
|
||||
if (!bAbsolute) {
|
||||
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
*pTagX -= Loffset;
|
||||
*pTagY -= Toffset;
|
||||
}
|
||||
|
@ -23,7 +23,9 @@
|
||||
|
||||
#include "tinsel/background.h"
|
||||
#include "tinsel/cliprect.h" // object clip rect defs
|
||||
#include "tinsel/font.h"
|
||||
#include "tinsel/graphics.h"
|
||||
#include "tinsel/multiobj.h"
|
||||
#include "tinsel/sched.h" // process sheduler defs
|
||||
#include "tinsel/object.h"
|
||||
#include "tinsel/pid.h" // process identifiers
|
||||
@ -31,15 +33,10 @@
|
||||
|
||||
namespace Tinsel {
|
||||
|
||||
// FIXME: Avoid non-const global vars
|
||||
|
||||
// current background
|
||||
const BACKGND *g_pCurBgnd = NULL;
|
||||
|
||||
/**
|
||||
* Called to initialize a background.
|
||||
*/
|
||||
void InitBackground() {
|
||||
void Background::InitBackground() {
|
||||
// structure for playfields
|
||||
// FIXME: Avoid non-const global vars
|
||||
static PLAYFIELD playfield[] = {
|
||||
@ -80,7 +77,7 @@ void InitBackground() {
|
||||
PLAYFIELD* pPlayfield; // pointer to current playfield
|
||||
|
||||
// set current background
|
||||
g_pCurBgnd = &backgnd;
|
||||
_pCurBgnd = &backgnd;
|
||||
|
||||
// init background sky color
|
||||
SetBgndColor(backgnd.rgbSkyColor);
|
||||
@ -113,17 +110,17 @@ void InitBackground() {
|
||||
* @param newYpos New y position
|
||||
*/
|
||||
|
||||
void PlayfieldSetPos(int which, int newXpos, int newYpos) {
|
||||
void Background::PlayfieldSetPos(int which, int newXpos, int newYpos) {
|
||||
PLAYFIELD *pPlayfield; // pointer to relavent playfield
|
||||
|
||||
// make sure there is a background
|
||||
assert(g_pCurBgnd != NULL);
|
||||
assert(_pCurBgnd != NULL);
|
||||
|
||||
// make sure the playfield number is in range
|
||||
assert(which >= 0 && which < g_pCurBgnd->numPlayfields);
|
||||
assert(which >= 0 && which < _pCurBgnd->numPlayfields);
|
||||
|
||||
// get playfield pointer
|
||||
pPlayfield = g_pCurBgnd->fieldArray + which;
|
||||
pPlayfield = _pCurBgnd->fieldArray + which;
|
||||
|
||||
// set new integer position
|
||||
pPlayfield->fieldX = intToFrac(newXpos);
|
||||
@ -140,17 +137,17 @@ void PlayfieldSetPos(int which, int newXpos, int newYpos) {
|
||||
* @param pYpos Returns current y position
|
||||
*/
|
||||
|
||||
void PlayfieldGetPos(int which, int *pXpos, int *pYpos) {
|
||||
void Background::PlayfieldGetPos(int which, int *pXpos, int *pYpos) {
|
||||
PLAYFIELD *pPlayfield; // pointer to relavent playfield
|
||||
|
||||
// make sure there is a background
|
||||
assert(g_pCurBgnd != NULL);
|
||||
assert(_pCurBgnd != NULL);
|
||||
|
||||
// make sure the playfield number is in range
|
||||
assert(which >= 0 && which < g_pCurBgnd->numPlayfields);
|
||||
assert(which >= 0 && which < _pCurBgnd->numPlayfields);
|
||||
|
||||
// get playfield pointer
|
||||
pPlayfield = g_pCurBgnd->fieldArray + which;
|
||||
pPlayfield = _pCurBgnd->fieldArray + which;
|
||||
|
||||
// get current integer position
|
||||
*pXpos = fracToInt(pPlayfield->fieldX);
|
||||
@ -162,17 +159,17 @@ void PlayfieldGetPos(int which, int *pXpos, int *pYpos) {
|
||||
* @param which Which playfield
|
||||
*/
|
||||
|
||||
int PlayfieldGetCenterX(int which) {
|
||||
int Background::PlayfieldGetCenterX(int which) {
|
||||
PLAYFIELD *pPlayfield; // pointer to relavent playfield
|
||||
|
||||
// make sure there is a background
|
||||
assert(g_pCurBgnd != NULL);
|
||||
assert(_pCurBgnd != NULL);
|
||||
|
||||
// make sure the playfield number is in range
|
||||
assert(which >= 0 && which < g_pCurBgnd->numPlayfields);
|
||||
assert(which >= 0 && which < _pCurBgnd->numPlayfields);
|
||||
|
||||
// get playfield pointer
|
||||
pPlayfield = g_pCurBgnd->fieldArray + which;
|
||||
pPlayfield = _pCurBgnd->fieldArray + which;
|
||||
|
||||
// get current integer position
|
||||
return fracToInt(pPlayfield->fieldX) + SCREEN_WIDTH/2;
|
||||
@ -183,17 +180,17 @@ int PlayfieldGetCenterX(int which) {
|
||||
* @param which Which playfield
|
||||
*/
|
||||
|
||||
OBJECT **GetPlayfieldList(int which) {
|
||||
OBJECT **Background::GetPlayfieldList(int which) {
|
||||
PLAYFIELD *pPlayfield; // pointer to relavent playfield
|
||||
|
||||
// make sure there is a background
|
||||
assert(g_pCurBgnd != NULL);
|
||||
assert(_pCurBgnd != NULL);
|
||||
|
||||
// make sure the playfield number is in range
|
||||
assert(which >= 0 && which < g_pCurBgnd->numPlayfields);
|
||||
assert(which >= 0 && which < _pCurBgnd->numPlayfields);
|
||||
|
||||
// get playfield pointer
|
||||
pPlayfield = g_pCurBgnd->fieldArray + which;
|
||||
pPlayfield = _pCurBgnd->fieldArray + which;
|
||||
|
||||
// return the display list pointer for this playfield
|
||||
return &pPlayfield->pDispList;
|
||||
@ -205,19 +202,19 @@ OBJECT **GetPlayfieldList(int which) {
|
||||
* to scroll each playfield before it is drawn.
|
||||
*/
|
||||
|
||||
void DrawBackgnd() {
|
||||
void Background::DrawBackgnd() {
|
||||
int i; // playfield counter
|
||||
PLAYFIELD *pPlay; // playfield pointer
|
||||
int prevX, prevY; // save interger part of position
|
||||
Common::Point ptWin; // window top left
|
||||
|
||||
if (g_pCurBgnd == NULL)
|
||||
if (_pCurBgnd == NULL)
|
||||
return; // no current background
|
||||
|
||||
// scroll each background playfield
|
||||
for (i = 0; i < g_pCurBgnd->numPlayfields; i++) {
|
||||
for (i = 0; i < _pCurBgnd->numPlayfields; i++) {
|
||||
// get pointer to correct playfield
|
||||
pPlay = g_pCurBgnd->fieldArray + i;
|
||||
pPlay = _pCurBgnd->fieldArray + i;
|
||||
|
||||
// save integer part of position
|
||||
prevX = fracToInt(pPlay->fieldX);
|
||||
@ -254,11 +251,11 @@ void DrawBackgnd() {
|
||||
for (RectList::const_iterator r = clipRects.begin(); r != clipRects.end(); ++r) {
|
||||
// clear the clip rectangle on the virtual screen
|
||||
// for each background playfield
|
||||
for (i = 0; i < g_pCurBgnd->numPlayfields; i++) {
|
||||
for (i = 0; i < _pCurBgnd->numPlayfields; i++) {
|
||||
Common::Rect rcPlayClip; // clip rect for this playfield
|
||||
|
||||
// get pointer to correct playfield
|
||||
pPlay = g_pCurBgnd->fieldArray + i;
|
||||
pPlay = _pCurBgnd->fieldArray + i;
|
||||
|
||||
// convert fixed point window pos to a int
|
||||
ptWin.x = fracToInt(pPlay->fieldX);
|
||||
@ -284,4 +281,33 @@ void DrawBackgnd() {
|
||||
ResetClipRect();
|
||||
}
|
||||
|
||||
int Background::BgWidth() {
|
||||
assert(_pBG[0]);
|
||||
return MultiRightmost(_pBG[0]) + 1;
|
||||
}
|
||||
|
||||
int Background::BgHeight() {
|
||||
assert(_pBG[0]);
|
||||
return MultiLowest(_pBG[0]) + 1;
|
||||
}
|
||||
|
||||
void Background::SetBackPal(SCNHANDLE hPal) {
|
||||
_hBgPal = hPal;
|
||||
|
||||
_font->FettleFontPal(_hBgPal);
|
||||
CreateTranslucentPalette(_hBgPal);
|
||||
}
|
||||
|
||||
void Background::DropBackground() {
|
||||
_pBG[0] = NULL; // No background
|
||||
|
||||
if (!TinselV2)
|
||||
_hBgPal = 0; // No background palette
|
||||
}
|
||||
|
||||
void Background::ChangePalette(SCNHANDLE hPal) {
|
||||
SwapPalette(FindPalette(_hBgPal), hPal);
|
||||
SetBackPal(hPal);
|
||||
}
|
||||
|
||||
} // End of namespace Tinsel
|
||||
|
@ -27,7 +27,9 @@
|
||||
#include "common/coroutines.h"
|
||||
#include "common/frac.h"
|
||||
#include "common/rect.h"
|
||||
#include "tinsel/anim.h" // for ANIM
|
||||
#include "tinsel/dw.h" // for SCNHANDLE
|
||||
#include "tinsel/object.h" // for POBJECT
|
||||
#include "tinsel/palette.h" // palette definitions
|
||||
|
||||
namespace Tinsel {
|
||||
@ -73,40 +75,90 @@ struct BACKGND {
|
||||
|* Background Function Prototypes *|
|
||||
\*----------------------------------------------------------------------*/
|
||||
|
||||
void InitBackground();
|
||||
#define MAX_BG 10
|
||||
|
||||
void StartupBackground(CORO_PARAM, SCNHANDLE hFilm);
|
||||
class Font;
|
||||
|
||||
void PlayfieldSetPos( // Sets the xy position of the specified playfield in the current background
|
||||
int which, // which playfield
|
||||
int newXpos, // new x position
|
||||
int newYpos); // new y position
|
||||
class Background {
|
||||
public:
|
||||
Background(Font *font) : _font(font), _pCurBgnd(nullptr), _hBgPal(0), _BGspeed(0), _hBackground(0), _bDoFadeIn(false), _bgReels(0) {}
|
||||
|
||||
void PlayfieldGetPos( // Returns the xy position of the specified playfield in the current background
|
||||
int which, // which playfield
|
||||
int *pXpos, // returns current x position
|
||||
int *pYpos); // returns current y position
|
||||
void InitBackground();
|
||||
|
||||
int PlayfieldGetCenterX( // Returns the xy position of the specified playfield in the current background
|
||||
int which); // which playfield
|
||||
void DrawBackgnd(); // Draws all playfields for the current background
|
||||
|
||||
OBJECT **GetPlayfieldList( // Returns the display list for the specified playfield
|
||||
int which); // which playfield
|
||||
void RedrawBackgnd(); // Completely redraws all the playfield object lists for the current background
|
||||
|
||||
void KillPlayfieldList( // Kills all the objects on the display list for the specified playfield
|
||||
int which); // which playfield
|
||||
/**
|
||||
* Called before scene change.
|
||||
*/
|
||||
void DropBackground();
|
||||
|
||||
void DrawBackgnd(); // Draws all playfields for the current background
|
||||
void ResetBackground() { _pCurBgnd = nullptr; }
|
||||
|
||||
void RedrawBackgnd(); // Completely redraws all the playfield object lists for the current background
|
||||
void StartupBackground(CORO_PARAM, SCNHANDLE hFilm);
|
||||
|
||||
OBJECT *GetBgObject();
|
||||
void PlayfieldSetPos( // Sets the xy position of the specified playfield in the current background
|
||||
int which, // which playfield
|
||||
int newXpos, // new x position
|
||||
int newYpos); // new y position
|
||||
|
||||
SCNHANDLE BgPal();
|
||||
void PlayfieldGetPos( // Returns the xy position of the specified playfield in the current background
|
||||
int which, // which playfield
|
||||
int* pXpos, // returns current x position
|
||||
int* pYpos); // returns current y position
|
||||
|
||||
int BgWidth();
|
||||
int PlayfieldGetCenterX( // Returns the xy position of the specified playfield in the current background
|
||||
int which); // which playfield
|
||||
|
||||
int BgHeight();
|
||||
OBJECT** GetPlayfieldList( // Returns the display list for the specified playfield
|
||||
int which); // which playfield
|
||||
|
||||
OBJECT* GetBgObject() { return _pBG[0]; }
|
||||
|
||||
void ChangePalette(SCNHANDLE hPal);
|
||||
|
||||
SCNHANDLE BgPal() { return _hBgPal; }
|
||||
|
||||
void SetDoFadeIn(bool tf) { _bDoFadeIn = tf; }
|
||||
|
||||
bool GetDoFadeIn() { return _bDoFadeIn; }
|
||||
|
||||
/**
|
||||
* Return the current scene handle.
|
||||
*/
|
||||
SCNHANDLE GetBgroundHandle() { return _hBackground; }
|
||||
|
||||
/**
|
||||
* Return the width of the current background.
|
||||
*/
|
||||
int BgWidth();
|
||||
|
||||
/**
|
||||
* Return the height of the current background.
|
||||
*/
|
||||
int BgHeight();
|
||||
|
||||
void SetBackPal(SCNHANDLE hPal);
|
||||
|
||||
int getBgSpeed() { return _BGspeed; }
|
||||
|
||||
private:
|
||||
Font *_font;
|
||||
|
||||
// current background
|
||||
const BACKGND *_pCurBgnd;
|
||||
|
||||
SCNHANDLE _hBgPal; // Background's palette
|
||||
int _BGspeed;
|
||||
SCNHANDLE _hBackground; // Current scene handle - stored in case of Save_Scene()
|
||||
bool _bDoFadeIn;
|
||||
|
||||
public:
|
||||
int _bgReels;
|
||||
POBJECT _pBG[MAX_BG];
|
||||
ANIM _thisAnim[MAX_BG]; // used by BGmainProcess()
|
||||
};
|
||||
|
||||
} // End of namespace Tinsel
|
||||
|
||||
|
@ -42,70 +42,10 @@
|
||||
|
||||
namespace Tinsel {
|
||||
|
||||
//----------------- LOCAL GLOBAL DATA --------------------
|
||||
|
||||
#define MAX_BG 10
|
||||
|
||||
// FIXME: Avoid non-const global vars
|
||||
static SCNHANDLE g_hBgPal = 0; // Background's palette
|
||||
static POBJECT g_pBG[MAX_BG];
|
||||
static ANIM g_thisAnim[MAX_BG]; // used by BGmainProcess()
|
||||
static int g_BGspeed = 0;
|
||||
static SCNHANDLE g_hBackground = 0; // Current scene handle - stored in case of Save_Scene()
|
||||
static bool g_bDoFadeIn = false;
|
||||
static int g_bgReels;
|
||||
|
||||
/**
|
||||
* GetBgObject
|
||||
*/
|
||||
OBJECT *GetBgObject() {
|
||||
return g_pBG[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* BackPal
|
||||
*/
|
||||
SCNHANDLE BgPal() {
|
||||
return g_hBgPal;
|
||||
}
|
||||
|
||||
/**
|
||||
* SetDoFadeIn
|
||||
*/
|
||||
void SetDoFadeIn(bool tf) {
|
||||
g_bDoFadeIn = tf;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called before scene change.
|
||||
*/
|
||||
void DropBackground() {
|
||||
g_pBG[0] = NULL; // No background
|
||||
|
||||
if (!TinselV2)
|
||||
g_hBgPal = 0; // No background palette
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the width of the current background.
|
||||
*/
|
||||
int BgWidth() {
|
||||
assert(g_pBG[0]);
|
||||
return MultiRightmost(g_pBG[0]) + 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the height of the current background.
|
||||
*/
|
||||
int BgHeight() {
|
||||
assert(g_pBG[0]);
|
||||
return MultiLowest(g_pBG[0]) + 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Run main animation that comprises the scene background.
|
||||
*/
|
||||
static void BGmainProcess(CORO_PARAM, const void *param) {
|
||||
void BGmainProcess(CORO_PARAM, const void *param) {
|
||||
// COROUTINE
|
||||
CORO_BEGIN_CONTEXT;
|
||||
CORO_END_CONTEXT(_ctx);
|
||||
@ -117,7 +57,7 @@ static void BGmainProcess(CORO_PARAM, const void *param) {
|
||||
const MULTI_INIT *pmi;
|
||||
|
||||
// get the stuff copied to process when it was created
|
||||
if (g_pBG[0] == NULL) {
|
||||
if (_vm->_bg->_pBG[0] == NULL) {
|
||||
/*** At start of scene ***/
|
||||
|
||||
if (!TinselV2) {
|
||||
@ -127,40 +67,40 @@ static void BGmainProcess(CORO_PARAM, const void *param) {
|
||||
pmi = (const MULTI_INIT *)LockMem(FROM_32(pReel->mobj));
|
||||
|
||||
// Initialize and insert the object, and initialize its script.
|
||||
g_pBG[0] = MultiInitObject(pmi);
|
||||
MultiInsertObject(GetPlayfieldList(FIELD_WORLD), g_pBG[0]);
|
||||
InitStepAnimScript(&g_thisAnim[0], g_pBG[0], FROM_32(pReel->script), g_BGspeed);
|
||||
g_bgReels = 1;
|
||||
_vm->_bg->_pBG[0] = MultiInitObject(pmi);
|
||||
MultiInsertObject(_vm->_bg->GetPlayfieldList(FIELD_WORLD), _vm->_bg->_pBG[0]);
|
||||
InitStepAnimScript(&_vm->_bg->_thisAnim[0], _vm->_bg->_pBG[0], FROM_32(pReel->script), _vm->_bg->getBgSpeed());
|
||||
_vm->_bg->_bgReels = 1;
|
||||
} else {
|
||||
/*** At start of scene ***/
|
||||
pFilm = (const FILM *)LockMem(g_hBackground);
|
||||
g_bgReels = FROM_32(pFilm->numreels);
|
||||
pFilm = (const FILM *)LockMem(_vm->_bg->GetBgroundHandle());
|
||||
_vm->_bg->_bgReels = FROM_32(pFilm->numreels);
|
||||
|
||||
int i;
|
||||
for (i = 0; i < g_bgReels; i++) {
|
||||
for (i = 0; i < _vm->_bg->_bgReels; i++) {
|
||||
// Get the MULTI_INIT structure
|
||||
pmi = (PMULTI_INIT) LockMem(FROM_32(pFilm->reels[i].mobj));
|
||||
|
||||
// Initialize and insert the object, and initialize its script.
|
||||
g_pBG[i] = MultiInitObject(pmi);
|
||||
MultiInsertObject(GetPlayfieldList(FIELD_WORLD), g_pBG[i]);
|
||||
MultiSetZPosition(g_pBG[i], 0);
|
||||
InitStepAnimScript(&g_thisAnim[i], g_pBG[i], FROM_32(pFilm->reels[i].script), g_BGspeed);
|
||||
_vm->_bg->_pBG[i] = MultiInitObject(pmi);
|
||||
MultiInsertObject(_vm->_bg->GetPlayfieldList(FIELD_WORLD), _vm->_bg->_pBG[i]);
|
||||
MultiSetZPosition(_vm->_bg->_pBG[i], 0);
|
||||
InitStepAnimScript(&_vm->_bg->_thisAnim[i], _vm->_bg->_pBG[i], FROM_32(pFilm->reels[i].script), _vm->_bg->getBgSpeed());
|
||||
|
||||
if (i > 0)
|
||||
g_pBG[i-1]->pSlave = g_pBG[i];
|
||||
_vm->_bg->_pBG[i-1]->pSlave = _vm->_bg->_pBG[i];
|
||||
}
|
||||
}
|
||||
|
||||
if (g_bDoFadeIn) {
|
||||
if (_vm->_bg->GetDoFadeIn()) {
|
||||
FadeInFast();
|
||||
g_bDoFadeIn = false;
|
||||
_vm->_bg->SetDoFadeIn(false);
|
||||
} else if (TinselV2)
|
||||
PokeInTagColor();
|
||||
|
||||
for (;;) {
|
||||
for (int i = 0; i < g_bgReels; i++) {
|
||||
if (StepAnimScript(&g_thisAnim[i]) == ScriptFinished)
|
||||
for (int i = 0; i < _vm->_bg->_bgReels; i++) {
|
||||
if (StepAnimScript(&_vm->_bg->_thisAnim[i]) == ScriptFinished)
|
||||
error("Background animation has finished");
|
||||
}
|
||||
|
||||
@ -170,16 +110,16 @@ static void BGmainProcess(CORO_PARAM, const void *param) {
|
||||
// New background during scene
|
||||
if (!TinselV2) {
|
||||
pReel = (const FREEL *)param;
|
||||
InitStepAnimScript(&g_thisAnim[0], g_pBG[0], FROM_32(pReel->script), g_BGspeed);
|
||||
StepAnimScript(&g_thisAnim[0]);
|
||||
InitStepAnimScript(&_vm->_bg->_thisAnim[0], _vm->_bg->_pBG[0], FROM_32(pReel->script), _vm->_bg->getBgSpeed());
|
||||
StepAnimScript(&_vm->_bg->_thisAnim[0]);
|
||||
} else {
|
||||
pFilm = (const FILM *)LockMem(g_hBackground);
|
||||
assert(g_bgReels == (int32)FROM_32(pFilm->numreels));
|
||||
pFilm = (const FILM *)LockMem(_vm->_bg->GetBgroundHandle());
|
||||
assert(_vm->_bg->_bgReels == (int32)FROM_32(pFilm->numreels));
|
||||
|
||||
// Just re-initialize the scripts.
|
||||
for (int i = 0; i < g_bgReels; i++) {
|
||||
InitStepAnimScript(&g_thisAnim[i], g_pBG[i], pFilm->reels[i].script, g_BGspeed);
|
||||
StepAnimScript(&g_thisAnim[i]);
|
||||
for (int i = 0; i < _vm->_bg->_bgReels; i++) {
|
||||
InitStepAnimScript(&_vm->_bg->_thisAnim[i], _vm->_bg->_pBG[i], pFilm->reels[i].script, _vm->_bg->getBgSpeed());
|
||||
StepAnimScript(&_vm->_bg->_thisAnim[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -190,7 +130,7 @@ static void BGmainProcess(CORO_PARAM, const void *param) {
|
||||
/**
|
||||
* Runs secondary reels for a scene background
|
||||
*/
|
||||
static void BGotherProcess(CORO_PARAM, const void *param) {
|
||||
void BGotherProcess(CORO_PARAM, const void *param) {
|
||||
// COROUTINE
|
||||
CORO_BEGIN_CONTEXT;
|
||||
OBJECT *pObj;
|
||||
@ -204,9 +144,9 @@ static void BGotherProcess(CORO_PARAM, const void *param) {
|
||||
|
||||
// Initialize and insert the object, and initialize its script.
|
||||
_ctx->pObj = MultiInitObject(pmi);
|
||||
MultiInsertObject(GetPlayfieldList(FIELD_WORLD), _ctx->pObj);
|
||||
MultiInsertObject(_vm->_bg->GetPlayfieldList(FIELD_WORLD), _ctx->pObj);
|
||||
|
||||
InitStepAnimScript(&_ctx->anim, g_pBG[0], FROM_32(pReel->script), g_BGspeed);
|
||||
InitStepAnimScript(&_ctx->anim, _vm->_bg->_pBG[0], FROM_32(pReel->script), _vm->_bg->getBgSpeed());
|
||||
|
||||
while (StepAnimScript(&_ctx->anim) != ScriptFinished)
|
||||
CORO_SLEEP(1);
|
||||
@ -214,29 +154,13 @@ static void BGotherProcess(CORO_PARAM, const void *param) {
|
||||
CORO_END_CODE;
|
||||
}
|
||||
|
||||
/**
|
||||
* AetBgPal()
|
||||
*/
|
||||
void SetBackPal(SCNHANDLE hPal) {
|
||||
g_hBgPal = hPal;
|
||||
|
||||
_vm->_font->FettleFontPal(g_hBgPal);
|
||||
CreateTranslucentPalette(g_hBgPal);
|
||||
}
|
||||
|
||||
void ChangePalette(SCNHANDLE hPal) {
|
||||
SwapPalette(FindPalette(g_hBgPal), hPal);
|
||||
|
||||
SetBackPal(hPal);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given the scene background film, extracts the palette handle for
|
||||
* everything else's use, then starts a display process for each reel
|
||||
* in the film.
|
||||
* @param hFilm Scene background film
|
||||
*/
|
||||
void StartupBackground(CORO_PARAM, SCNHANDLE hFilm) {
|
||||
void Background::StartupBackground(CORO_PARAM, SCNHANDLE hFilm) {
|
||||
CORO_BEGIN_CONTEXT;
|
||||
CORO_END_CONTEXT(_ctx);
|
||||
|
||||
@ -245,14 +169,14 @@ void StartupBackground(CORO_PARAM, SCNHANDLE hFilm) {
|
||||
const FILM *pfilm;
|
||||
IMAGE *pim;
|
||||
|
||||
g_hBackground = hFilm; // Save handle in case of Save_Scene()
|
||||
_hBackground = hFilm; // Save handle in case of Save_Scene()
|
||||
|
||||
pim = GetImageFromFilm(hFilm, 0, NULL, NULL, &pfilm);
|
||||
|
||||
SetBackPal(FROM_32(pim->hImgPal));
|
||||
|
||||
// Extract the film speed
|
||||
g_BGspeed = ONE_SECOND / FROM_32(pfilm->frate);
|
||||
_BGspeed = ONE_SECOND / FROM_32(pfilm->frate);
|
||||
|
||||
// Start display process for each reel in the film
|
||||
CoroScheduler.createProcess(PID_REEL, BGmainProcess, &pfilm->reels[0], sizeof(FREEL));
|
||||
@ -262,7 +186,7 @@ void StartupBackground(CORO_PARAM, SCNHANDLE hFilm) {
|
||||
CoroScheduler.createProcess(PID_REEL, BGotherProcess, &pfilm->reels[i], sizeof(FREEL));
|
||||
}
|
||||
|
||||
if (g_pBG[0] == NULL)
|
||||
if (_pBG[0] == NULL)
|
||||
ControlStartOff();
|
||||
|
||||
if (TinselV2 && (coroParam != Common::nullContext))
|
||||
@ -271,11 +195,4 @@ void StartupBackground(CORO_PARAM, SCNHANDLE hFilm) {
|
||||
CORO_END_CODE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the current scene handle.
|
||||
*/
|
||||
SCNHANDLE GetBgroundHandle() {
|
||||
return g_hBackground;
|
||||
}
|
||||
|
||||
} // End of namespace Tinsel
|
||||
|
@ -440,7 +440,7 @@ void BMVPlayer::FettleMovieText() {
|
||||
for (i = 0; i < 2; i++) {
|
||||
if (texts[i].pText) {
|
||||
if (currentFrame > texts[i].dieFrame) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), texts[i].pText);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), texts[i].pText);
|
||||
texts[i].pText = NULL;
|
||||
} else {
|
||||
MultiForceRedraw(texts[i].pText);
|
||||
@ -480,7 +480,7 @@ void BMVPlayer::BmvDrawText(bool bDraw) {
|
||||
rcPlayClip.top = y;
|
||||
rcPlayClip.right = x+w;
|
||||
rcPlayClip.bottom = y+h;
|
||||
UpdateClipRect(GetPlayfieldList(FIELD_STATUS), &ptWin, &rcPlayClip);
|
||||
UpdateClipRect(_vm->_bg->GetPlayfieldList(FIELD_STATUS), &ptWin, &rcPlayClip);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -509,12 +509,12 @@ void BMVPlayer::MovieText(CORO_PARAM, int stringId, int x, int y, int fontId, CO
|
||||
}
|
||||
|
||||
if (texts[index].pText)
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), texts[index].pText);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), texts[index].pText);
|
||||
|
||||
LoadSubString(stringId, 0, _vm->_font->TextBufferAddr(), TBUFSZ);
|
||||
|
||||
texts[index].dieFrame = currentFrame + duration;
|
||||
texts[index].pText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
|
||||
texts[index].pText = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS),
|
||||
_vm->_font->TextBufferAddr(),
|
||||
0,
|
||||
x, y,
|
||||
@ -734,7 +734,7 @@ void BMVPlayer::FinishBMV() {
|
||||
// Ditch any text objects
|
||||
for (i = 0; i < 2; i++) {
|
||||
if (texts[i].pText) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), texts[i].pText);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), texts[i].pText);
|
||||
texts[i].pText = NULL;
|
||||
}
|
||||
}
|
||||
@ -1025,7 +1025,7 @@ bool BMVPlayer::DoSoundFrame() {
|
||||
void BMVPlayer::CopyMovieToScreen() {
|
||||
// Not if not up and running yet!
|
||||
if (!screenBuffer || (currentFrame == 0)) {
|
||||
DrawBackgnd();
|
||||
_vm->_bg->DrawBackgnd();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -121,15 +121,15 @@ static void InitCurTrailObj(int i, int x, int y) {
|
||||
|
||||
// Get rid of old object
|
||||
if (g_ntrailData[i].trailObj != NULL)
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_ntrailData[i].trailObj);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_ntrailData[i].trailObj);
|
||||
|
||||
pim = GetImageFromFilm(g_hCursorFilm, i+1, &pfr, &pmi, &pfilm);// Get pointer to image
|
||||
assert(BgPal()); // No background palette
|
||||
pim->hImgPal = TO_32(BgPal());
|
||||
assert(_vm->_bg->BgPal()); // No background palette
|
||||
pim->hImgPal = TO_32(_vm->_bg->BgPal());
|
||||
|
||||
// Initialize and insert the object, set its Z-pos, and hide it
|
||||
g_ntrailData[i].trailObj = MultiInitObject(pmi);
|
||||
MultiInsertObject(GetPlayfieldList(FIELD_STATUS), g_ntrailData[i].trailObj);
|
||||
MultiInsertObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_ntrailData[i].trailObj);
|
||||
MultiSetZPosition(g_ntrailData[i].trailObj, Z_CURSORTRAIL);
|
||||
MultiSetAniXY(g_ntrailData[i].trailObj, x, y);
|
||||
|
||||
@ -170,7 +170,7 @@ void SetCursorXY(int newx, int newy) {
|
||||
int x, y;
|
||||
int Loffset, Toffset; // Screen offset
|
||||
|
||||
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
newx -= Loffset;
|
||||
newy -= Toffset;
|
||||
|
||||
@ -205,7 +205,7 @@ bool GetCursorXYNoWait(int *x, int *y, bool absolute) {
|
||||
|
||||
if (absolute) {
|
||||
int Loffset, Toffset; // Screen offset
|
||||
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
*x += Loffset;
|
||||
*y += Toffset;
|
||||
}
|
||||
@ -267,7 +267,7 @@ void DwHideCursor() {
|
||||
|
||||
for (i = 0; i < g_numTrails; i++) {
|
||||
if (g_ntrailData[i].trailObj != NULL) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_ntrailData[i].trailObj);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_ntrailData[i].trailObj);
|
||||
g_ntrailData[i].trailObj = NULL;
|
||||
}
|
||||
}
|
||||
@ -304,7 +304,7 @@ void HideCursorTrails() {
|
||||
|
||||
for (i = 0; i < g_numTrails; i++) {
|
||||
if (g_ntrailData[i].trailObj != NULL) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_ntrailData[i].trailObj);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_ntrailData[i].trailObj);
|
||||
g_ntrailData[i].trailObj = NULL;
|
||||
}
|
||||
}
|
||||
@ -357,7 +357,7 @@ IMAGE *GetImageFromFilm(SCNHANDLE hFilm, int reel, const FREEL **ppfr, const MUL
|
||||
*/
|
||||
void DelAuxCursor() {
|
||||
if (g_AcurObj != NULL) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_AcurObj);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_AcurObj);
|
||||
g_AcurObj = NULL;
|
||||
}
|
||||
}
|
||||
@ -376,14 +376,14 @@ void SetAuxCursor(SCNHANDLE hFilm) {
|
||||
DelAuxCursor(); // Get rid of previous
|
||||
|
||||
// WORKAROUND: There's no palette when loading a DW1 savegame with a held item, so exit if so
|
||||
if (!BgPal())
|
||||
if (!_vm->_bg->BgPal())
|
||||
return;
|
||||
|
||||
GetCursorXY(&x, &y, false); // Note: also waits for cursor to appear
|
||||
|
||||
pim = GetImageFromFilm(hFilm, 0, &pfr, &pmi, &pfilm);// Get pointer to image
|
||||
assert(BgPal()); // no background palette
|
||||
pim->hImgPal = TO_32(BgPal()); // Poke in the background palette
|
||||
assert(_vm->_bg->BgPal()); // no background palette
|
||||
pim->hImgPal = TO_32(_vm->_bg->BgPal()); // Poke in the background palette
|
||||
|
||||
g_ACoX = (short)(FROM_16(pim->imgWidth)/2 - ((int16) FROM_16(pim->anioffX)));
|
||||
g_ACoY = (short)((FROM_16(pim->imgHeight) & ~C16_FLAG_MASK)/2 -
|
||||
@ -391,7 +391,7 @@ void SetAuxCursor(SCNHANDLE hFilm) {
|
||||
|
||||
// Initialize and insert the auxillary cursor object
|
||||
g_AcurObj = MultiInitObject(pmi);
|
||||
MultiInsertObject(GetPlayfieldList(FIELD_STATUS), g_AcurObj);
|
||||
MultiInsertObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_AcurObj);
|
||||
|
||||
// Initialize the animation and set its position
|
||||
InitStepAnimScript(&g_AcurAnim, g_AcurObj, FROM_32(pfr->script), ONE_SECOND / FROM_32(pfilm->frate));
|
||||
@ -489,16 +489,16 @@ static void InitCurObj() {
|
||||
|
||||
PokeInPalette(pmi);
|
||||
} else {
|
||||
assert(BgPal()); // no background palette
|
||||
assert(_vm->_bg->BgPal()); // no background palette
|
||||
|
||||
pim = GetImageFromFilm(g_hCursorFilm, 0, &pfr, &pmi, &pFilm);// Get pointer to image
|
||||
pim->hImgPal = TO_32(BgPal());
|
||||
pim->hImgPal = TO_32(_vm->_bg->BgPal());
|
||||
|
||||
g_AcurObj = NULL; // No auxillary cursor
|
||||
}
|
||||
|
||||
g_McurObj = MultiInitObject(pmi);
|
||||
MultiInsertObject(GetPlayfieldList(FIELD_STATUS), g_McurObj);
|
||||
MultiInsertObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_McurObj);
|
||||
|
||||
InitStepAnimScript(&g_McurAnim, g_McurObj, FROM_32(pfr->script), ONE_SECOND / FROM_32(pFilm->frate));
|
||||
}
|
||||
@ -556,7 +556,7 @@ void CursorProcess(CORO_PARAM, const void *) {
|
||||
|
||||
CORO_BEGIN_CODE(_ctx);
|
||||
|
||||
while (!g_hCursorFilm || !BgPal())
|
||||
while (!g_hCursorFilm || !_vm->_bg->BgPal())
|
||||
CORO_SLEEP(1);
|
||||
|
||||
InitCurObj();
|
||||
@ -580,7 +580,7 @@ void CursorProcess(CORO_PARAM, const void *) {
|
||||
for (int i = 0; i < g_numTrails; i++) {
|
||||
if (g_ntrailData[i].trailObj != NULL) {
|
||||
if (StepAnimScript(&g_ntrailData[i].trailAnim) == ScriptFinished) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_ntrailData[i].trailObj);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_ntrailData[i].trailObj);
|
||||
g_ntrailData[i].trailObj = NULL;
|
||||
}
|
||||
}
|
||||
@ -635,9 +635,9 @@ void DwInitCursor(SCNHANDLE bfilm) {
|
||||
void DropCursor() {
|
||||
if (TinselV2) {
|
||||
if (g_AcurObj)
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_AcurObj);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_AcurObj);
|
||||
if (g_McurObj)
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_McurObj);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_McurObj);
|
||||
|
||||
g_restart = 0;
|
||||
}
|
||||
@ -650,7 +650,7 @@ void DropCursor() {
|
||||
|
||||
for (int i = 0; i < g_numTrails; i++) {
|
||||
if (g_ntrailData[i].trailObj != NULL) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_ntrailData[i].trailObj);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_ntrailData[i].trailObj);
|
||||
g_ntrailData[i].trailObj = NULL;
|
||||
}
|
||||
}
|
||||
|
@ -1217,7 +1217,7 @@ static void HopAction() {
|
||||
static void DumpIconArray() {
|
||||
for (int i = 0; i < MAX_ICONS; i++) {
|
||||
if (g_iconArray[i] != NULL) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[i]);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[i]);
|
||||
g_iconArray[i] = NULL;
|
||||
}
|
||||
}
|
||||
@ -1229,7 +1229,7 @@ static void DumpIconArray() {
|
||||
static void DumpDobjArray() {
|
||||
for (int i = 0; i < MAX_WCOMP; i++) {
|
||||
if (g_DobjArray[i] != NULL) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_DobjArray[i]);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_DobjArray[i]);
|
||||
g_DobjArray[i] = NULL;
|
||||
}
|
||||
}
|
||||
@ -1241,7 +1241,7 @@ static void DumpDobjArray() {
|
||||
static void DumpObjArray() {
|
||||
for (int i = 0; i < MAX_WCOMP; i++) {
|
||||
if (g_objArray[i] != NULL) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_objArray[i]);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_objArray[i]);
|
||||
g_objArray[i] = NULL;
|
||||
}
|
||||
}
|
||||
@ -1517,15 +1517,15 @@ static void InvLoadGame() {
|
||||
rGame = cd.selBox;
|
||||
cd.selBox = NOBOX;
|
||||
if (g_iconArray[HL3] != NULL) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL3]);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[HL3]);
|
||||
g_iconArray[HL3] = NULL;
|
||||
}
|
||||
if (g_iconArray[HL2] != NULL) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL2]);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[HL2]);
|
||||
g_iconArray[HL2] = NULL;
|
||||
}
|
||||
if (g_iconArray[HL1] != NULL) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
g_iconArray[HL1] = NULL;
|
||||
}
|
||||
RestoreGame(rGame+cd.extraBase);
|
||||
@ -1593,19 +1593,19 @@ static bool InvKeyIn(const Common::KeyState &kbd) {
|
||||
* and replace it with freshly edited text.
|
||||
*/
|
||||
if (g_iconArray[HL3] != NULL) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL3]);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[HL3]);
|
||||
g_iconArray[HL3] = NULL;
|
||||
}
|
||||
g_iconArray[HL3] = ObjectTextOut(
|
||||
GetPlayfieldList(FIELD_STATUS), g_sedit, 0,
|
||||
_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_sedit, 0,
|
||||
g_InvD[g_ino].inventoryX + cd.box[cd.selBox].xpos + 2,
|
||||
g_InvD[g_ino].inventoryY + cd.box[cd.selBox].ypos + TYOFF,
|
||||
_vm->_font->GetTagFontHandle(), 0);
|
||||
if (MultiRightmost(g_iconArray[HL3]) > MAX_NAME_RIGHT) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL3]);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[HL3]);
|
||||
UpdateString(Common::KeyState(Common::KEYCODE_BACKSPACE));
|
||||
g_iconArray[HL3] = ObjectTextOut(
|
||||
GetPlayfieldList(FIELD_STATUS), g_sedit, 0,
|
||||
_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_sedit, 0,
|
||||
g_InvD[g_ino].inventoryX + cd.box[cd.selBox].xpos + 2,
|
||||
g_InvD[g_ino].inventoryY + cd.box[cd.selBox].ypos + TYOFF,
|
||||
_vm->_font->GetTagFontHandle(), 0);
|
||||
@ -1636,20 +1636,20 @@ static void Select(int i, bool force) {
|
||||
|
||||
// Clear previous selected highlight and text
|
||||
if (g_iconArray[HL2] != NULL) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL2]);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[HL2]);
|
||||
g_iconArray[HL2] = NULL;
|
||||
}
|
||||
if (g_iconArray[HL3] != NULL) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL3]);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[HL3]);
|
||||
g_iconArray[HL3] = NULL;
|
||||
}
|
||||
|
||||
// New highlight box
|
||||
switch (cd.box[i].boxType) {
|
||||
case RGROUP:
|
||||
g_iconArray[HL2] = RectangleObject(BgPal(),
|
||||
g_iconArray[HL2] = RectangleObject(_vm->_bg->BgPal(),
|
||||
(TinselV2 ? HighlightColor() : COL_HILIGHT), cd.box[i].w, cd.box[i].h);
|
||||
MultiInsertObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL2]);
|
||||
MultiInsertObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[HL2]);
|
||||
MultiSetAniXY(g_iconArray[HL2],
|
||||
g_InvD[g_ino].inventoryX + cd.box[i].xpos,
|
||||
g_InvD[g_ino].inventoryY + cd.box[i].ypos);
|
||||
@ -1679,7 +1679,7 @@ static void Select(int i, bool force) {
|
||||
#endif
|
||||
|
||||
g_iconArray[HL3] = ObjectTextOut(
|
||||
GetPlayfieldList(FIELD_STATUS), g_sedit, 0,
|
||||
_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_sedit, 0,
|
||||
g_InvD[g_ino].inventoryX + cd.box[i].xpos + 2,
|
||||
#ifdef JAPAN
|
||||
g_InvD[g_ino].inventoryY + cd.box[i].ypos + 2,
|
||||
@ -1697,8 +1697,8 @@ static void Select(int i, bool force) {
|
||||
break;
|
||||
|
||||
case FRGROUP:
|
||||
g_iconArray[HL2] = RectangleObject(BgPal(), COL_HILIGHT, cd.box[i].w+6, cd.box[i].h+6);
|
||||
MultiInsertObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL2]);
|
||||
g_iconArray[HL2] = RectangleObject(_vm->_bg->BgPal(), COL_HILIGHT, cd.box[i].w+6, cd.box[i].h+6);
|
||||
MultiInsertObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[HL2]);
|
||||
MultiSetAniXY(g_iconArray[HL2],
|
||||
g_InvD[g_ino].inventoryX + cd.box[i].xpos - 2,
|
||||
g_InvD[g_ino].inventoryY + cd.box[i].ypos - 2);
|
||||
@ -2276,24 +2276,24 @@ static void InvBoxes(bool InBody, int curX, int curY) {
|
||||
// unhigh-light box (if one was)
|
||||
cd.pointBox = NOBOX;
|
||||
if (g_iconArray[HL1] != NULL) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
g_iconArray[HL1] = NULL;
|
||||
}
|
||||
} else if (index != cd.pointBox) {
|
||||
cd.pointBox = index;
|
||||
// A new box is pointed to - high-light it
|
||||
if (g_iconArray[HL1] != NULL) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
g_iconArray[HL1] = NULL;
|
||||
}
|
||||
if ((cd.box[cd.pointBox].boxType == ARSBUT && cd.selBox != NOBOX) ||
|
||||
///* I don't agree */ cd.box[cd.pointBox].boxType == RGROUP ||
|
||||
cd.box[cd.pointBox].boxType == AATBUT ||
|
||||
cd.box[cd.pointBox].boxType == AABUT) {
|
||||
g_iconArray[HL1] = RectangleObject(BgPal(),
|
||||
g_iconArray[HL1] = RectangleObject(_vm->_bg->BgPal(),
|
||||
(TinselV2 ? HighlightColor() : COL_HILIGHT),
|
||||
cd.box[cd.pointBox].w, cd.box[cd.pointBox].h);
|
||||
MultiInsertObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
MultiInsertObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
MultiSetAniXY(g_iconArray[HL1],
|
||||
g_InvD[g_ino].inventoryX + cd.box[cd.pointBox].xpos,
|
||||
g_InvD[g_ino].inventoryY + cd.box[cd.pointBox].ypos);
|
||||
@ -2347,7 +2347,7 @@ static void ButtonPress(CORO_PARAM, CONFBOX *box) {
|
||||
// Replace highlight image with normal image
|
||||
pfilm = (const FILM *)LockMem(g_hWinParts);
|
||||
if (g_iconArray[HL1] != NULL)
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
pfilm = (const FILM *)LockMem(g_hWinParts);
|
||||
g_iconArray[HL1] = AddObject(&pfilm->reels[box->bi+NORMGRAPH], -1);
|
||||
MultiSetAniXY(g_iconArray[HL1], g_InvD[g_ino].inventoryX + box->xpos, g_InvD[g_ino].inventoryY + box->ypos);
|
||||
@ -2360,7 +2360,7 @@ static void ButtonPress(CORO_PARAM, CONFBOX *box) {
|
||||
|
||||
// Replace normal image with depresses image
|
||||
pfilm = (const FILM *)LockMem(g_hWinParts);
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
g_iconArray[HL1] = AddObject(&pfilm->reels[box->bi+DOWNGRAPH], -1);
|
||||
MultiSetAniXY(g_iconArray[HL1], g_InvD[g_ino].inventoryX + box->xpos, g_InvD[g_ino].inventoryY + box->ypos);
|
||||
MultiSetZPosition(g_iconArray[HL1], Z_INV_ICONS+1);
|
||||
@ -2372,7 +2372,7 @@ static void ButtonPress(CORO_PARAM, CONFBOX *box) {
|
||||
|
||||
// Replace depressed image with normal image
|
||||
pfilm = (const FILM *)LockMem(g_hWinParts);
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
g_iconArray[HL1] = AddObject(&pfilm->reels[box->bi+NORMGRAPH], -1);
|
||||
MultiSetAniXY(g_iconArray[HL1], g_InvD[g_ino].inventoryX + box->xpos, g_InvD[g_ino].inventoryY + box->ypos);
|
||||
MultiSetZPosition(g_iconArray[HL1], Z_INV_ICONS+1);
|
||||
@ -2395,7 +2395,7 @@ static void ButtonToggle(CORO_PARAM, CONFBOX *box) {
|
||||
|
||||
// Remove hilight image
|
||||
if (g_iconArray[HL1] != NULL) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
g_iconArray[HL1] = NULL;
|
||||
}
|
||||
|
||||
@ -2426,7 +2426,7 @@ static void ButtonToggle(CORO_PARAM, CONFBOX *box) {
|
||||
// New state, depressed image
|
||||
pfilm = (const FILM *)LockMem(g_hWinParts);
|
||||
if (g_iconArray[HL1] != NULL)
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
g_iconArray[HL1] = AddObject(&pfilm->reels[box->bi+DOWNGRAPH], -1);
|
||||
MultiSetAniXY(g_iconArray[HL1], g_InvD[g_ino].inventoryX + box->xpos, g_InvD[g_ino].inventoryY + box->ypos);
|
||||
MultiSetZPosition(g_iconArray[HL1], Z_INV_ICONS+1);
|
||||
@ -2437,7 +2437,7 @@ static void ButtonToggle(CORO_PARAM, CONFBOX *box) {
|
||||
return;
|
||||
|
||||
// New state, normal
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
g_iconArray[HL1] = NULL;
|
||||
|
||||
// Hold normal image for 1 frame
|
||||
@ -2448,7 +2448,7 @@ static void ButtonToggle(CORO_PARAM, CONFBOX *box) {
|
||||
// New state, highlighted
|
||||
pfilm = (const FILM *)LockMem(g_hWinParts);
|
||||
if (g_iconArray[HL1] != NULL)
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[HL1]);
|
||||
g_iconArray[HL1] = AddObject(&pfilm->reels[box->bi+HIGRAPH], -1);
|
||||
MultiSetAniXY(g_iconArray[HL1], g_InvD[g_ino].inventoryX + box->xpos, g_InvD[g_ino].inventoryY + box->ypos);
|
||||
MultiSetZPosition(g_iconArray[HL1], Z_INV_ICONS+1);
|
||||
@ -2573,11 +2573,11 @@ static OBJECT *AddInvObject(int num, const FREEL **pfreel, const FILM **pfilm) {
|
||||
pim = GetImageFromFilm(invObj->hIconFilm, 0, pfreel, &pmi, pfilm);
|
||||
|
||||
// Poke in the background palette
|
||||
pim->hImgPal = TO_32(BgPal());
|
||||
pim->hImgPal = TO_32(_vm->_bg->BgPal());
|
||||
|
||||
// Set up the multi-object
|
||||
pPlayObj = MultiInitObject(pmi);
|
||||
MultiInsertObject(GetPlayfieldList(FIELD_STATUS), pPlayObj);
|
||||
MultiInsertObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), pPlayObj);
|
||||
|
||||
return pPlayObj;
|
||||
}
|
||||
@ -2639,7 +2639,7 @@ static void AddBackground(OBJECT **rect, OBJECT **title, int extraH, int extraV,
|
||||
g_RectObject = *rect = TranslucentObject(width, height);
|
||||
|
||||
// add it to display list and position it
|
||||
MultiInsertObject(GetPlayfieldList(FIELD_STATUS), *rect);
|
||||
MultiInsertObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), *rect);
|
||||
MultiSetAniXY(*rect, g_InvD[g_ino].inventoryX + NM_BG_POS_X,
|
||||
g_InvD[g_ino].inventoryY + NM_BG_POS_Y);
|
||||
MultiSetZPosition(*rect, Z_INV_BRECT);
|
||||
@ -2650,14 +2650,14 @@ static void AddBackground(OBJECT **rect, OBJECT **title, int extraH, int extraV,
|
||||
// Create text object using title string
|
||||
if (textFrom == FROM_HANDLE) {
|
||||
LoadStringRes(g_InvD[g_ino].hInvTitle, _vm->_font->TextBufferAddr(), TBUFSZ);
|
||||
*title = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(), 0,
|
||||
*title = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(), 0,
|
||||
g_InvD[g_ino].inventoryX + width/2, g_InvD[g_ino].inventoryY + M_TOFF,
|
||||
_vm->_font->GetTagFontHandle(), TXT_CENTER);
|
||||
assert(*title); // Inventory title string produced NULL text
|
||||
MultiSetZPosition(*title, Z_INV_HTEXT);
|
||||
} else if (textFrom == FROM_STRING && cd.ixHeading != NO_HEADING) {
|
||||
LoadStringRes(g_configStrings[cd.ixHeading], _vm->_font->TextBufferAddr(), TBUFSZ);
|
||||
*title = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(), 0,
|
||||
*title = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(), 0,
|
||||
g_InvD[g_ino].inventoryX + width/2, g_InvD[g_ino].inventoryY + M_TOFF,
|
||||
_vm->_font->GetTagFontHandle(), TXT_CENTER);
|
||||
assert(*title); // Inventory title string produced NULL text
|
||||
@ -2681,7 +2681,7 @@ static void AddTitle(POBJECT *title, int extraH) {
|
||||
// Create text object using title string
|
||||
if (g_InvD[g_ino].hInvTitle != (SCNHANDLE)NO_HEADING) {
|
||||
LoadStringRes(g_InvD[g_ino].hInvTitle, _vm->_font->TextBufferAddr(), TBUFSZ);
|
||||
*title = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(), 0,
|
||||
*title = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(), 0,
|
||||
g_InvD[g_ino].inventoryX + (width/2)+NM_BG_POS_X, g_InvD[g_ino].inventoryY + NM_TOFF,
|
||||
_vm->_font->GetTagFontHandle(), TXT_CENTER, 0);
|
||||
assert(*title);
|
||||
@ -2702,7 +2702,7 @@ static OBJECT *AddObject(const FREEL *pfreel, int num) {
|
||||
pim = GetImageFromReel(pfreel, &pmi);
|
||||
|
||||
// Poke in the background palette
|
||||
pim->hImgPal = TO_32(BgPal());
|
||||
pim->hImgPal = TO_32(_vm->_bg->BgPal());
|
||||
|
||||
// Horrible bodge involving global variables to save
|
||||
// width and/or height of some window frame components
|
||||
@ -2717,7 +2717,7 @@ static OBJECT *AddObject(const FREEL *pfreel, int num) {
|
||||
|
||||
// Set up and insert the multi-object
|
||||
pPlayObj = MultiInitObject(pmi);
|
||||
MultiInsertObject(GetPlayfieldList(FIELD_STATUS), pPlayObj);
|
||||
MultiInsertObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), pPlayObj);
|
||||
|
||||
return pPlayObj;
|
||||
}
|
||||
@ -2750,9 +2750,9 @@ static void AddBox(int *pi, const int i) {
|
||||
break;
|
||||
|
||||
// Give us a box
|
||||
g_iconArray[*pi] = RectangleObject(BgPal(), TinselV2 ? BoxColor() : COL_BOX,
|
||||
g_iconArray[*pi] = RectangleObject(_vm->_bg->BgPal(), TinselV2 ? BoxColor() : COL_BOX,
|
||||
cd.box[i].w, cd.box[i].h);
|
||||
MultiInsertObject(GetPlayfieldList(FIELD_STATUS), g_iconArray[*pi]);
|
||||
MultiInsertObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_iconArray[*pi]);
|
||||
MultiSetAniXY(g_iconArray[*pi], x, y);
|
||||
MultiSetZPosition(g_iconArray[*pi], Z_INV_BRECT + 1);
|
||||
*pi += 1;
|
||||
@ -2762,14 +2762,14 @@ static void AddBox(int *pi, const int i) {
|
||||
(!TinselV2 && (cd.box[i].ixText == USE_POINTER))) {
|
||||
if (cd.box[i].boxText != NULL) {
|
||||
if (cd.box[i].boxType == RGROUP) {
|
||||
g_iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), cd.box[i].boxText, 0,
|
||||
g_iconArray[*pi] = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS), cd.box[i].boxText, 0,
|
||||
#ifdef JAPAN
|
||||
x + 2, y+2, GetTagFontHandle(), 0);
|
||||
#else
|
||||
x + 2, y + TYOFF, _vm->_font->GetTagFontHandle(), 0);
|
||||
#endif
|
||||
} else {
|
||||
g_iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), cd.box[i].boxText, 0,
|
||||
g_iconArray[*pi] = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS), cd.box[i].boxText, 0,
|
||||
#ifdef JAPAN
|
||||
// Note: it never seems to go here!
|
||||
x + cd.box[i].w/2, y+2, GetTagFontHandle(), TXT_CENTER);
|
||||
@ -2795,10 +2795,10 @@ static void AddBox(int *pi, const int i) {
|
||||
}
|
||||
|
||||
if (TinselV2 && (cd.box[i].boxType == RGROUP))
|
||||
g_iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(),
|
||||
g_iconArray[*pi] = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(),
|
||||
0, x + 2, y + TYOFF, _vm->_font->GetTagFontHandle(), 0, 0);
|
||||
else
|
||||
g_iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
|
||||
g_iconArray[*pi] = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS),
|
||||
_vm->_font->TextBufferAddr(), 0,
|
||||
#ifdef JAPAN
|
||||
x + cd.box[i].w/2, y+2, GetTagFontHandle(), TXT_CENTER);
|
||||
@ -2855,7 +2855,7 @@ static void AddBox(int *pi, const int i) {
|
||||
assert(cd.box[i].ixText != USE_POINTER);
|
||||
LoadStringRes(g_configStrings[cd.box[i].ixText], _vm->_font->TextBufferAddr(), TBUFSZ);
|
||||
}
|
||||
g_iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
|
||||
g_iconArray[*pi] = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS),
|
||||
_vm->_font->TextBufferAddr(), 0, x + MDTEXT_XOFF, y + MDTEXT_YOFF, _vm->_font->GetTagFontHandle(), TXT_RIGHT);
|
||||
MultiSetZPosition(g_iconArray[*pi], Z_INV_ITEXT);
|
||||
*pi += 1;
|
||||
@ -2882,11 +2882,11 @@ static void AddBox(int *pi, const int i) {
|
||||
}
|
||||
|
||||
if (cd.box[i].boxType == TOGGLE2) {
|
||||
g_iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
|
||||
g_iconArray[*pi] = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS),
|
||||
_vm->_font->TextBufferAddr(), 0, x + cd.box[i].w / 2, y + TOG2_YOFF,
|
||||
_vm->_font->GetTagFontHandle(), TXT_CENTER, 0);
|
||||
} else {
|
||||
g_iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
|
||||
g_iconArray[*pi] = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS),
|
||||
_vm->_font->TextBufferAddr(), 0, x + MDTEXT_XOFF, y + MDTEXT_YOFF,
|
||||
_vm->_font->GetTagFontHandle(), TXT_RIGHT, 0);
|
||||
}
|
||||
@ -2921,7 +2921,7 @@ static void AddBox(int *pi, const int i) {
|
||||
assert(cd.box[i].ixText != USE_POINTER);
|
||||
LoadStringRes(g_configStrings[cd.box[i].ixText], _vm->_font->TextBufferAddr(), TBUFSZ);
|
||||
}
|
||||
g_iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
|
||||
g_iconArray[*pi] = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS),
|
||||
_vm->_font->TextBufferAddr(), 0, x+MDTEXT_XOFF, y+MDTEXT_YOFF, _vm->_font->GetTagFontHandle(), TXT_RIGHT);
|
||||
MultiSetZPosition(g_iconArray[*pi], Z_INV_ITEXT);
|
||||
*pi += 1;
|
||||
@ -2946,7 +2946,7 @@ static void AddBox(int *pi, const int i) {
|
||||
// Stick in the text
|
||||
assert(cd.box[i].textMethod == TM_INDEX);
|
||||
LoadStringRes(SysString(cd.box[i].ixText), _vm->_font->TextBufferAddr(), TBUFSZ);
|
||||
g_iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
|
||||
g_iconArray[*pi] = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS),
|
||||
_vm->_font->TextBufferAddr(), 0, x + cd.box[i].w / 2, y + TOG2_YOFF,
|
||||
_vm->_font->GetTagFontHandle(), TXT_CENTER, 0);
|
||||
MultiSetZPosition(g_iconArray[*pi], Z_INV_ITEXT);
|
||||
@ -2958,7 +2958,7 @@ static void AddBox(int *pi, const int i) {
|
||||
break;
|
||||
|
||||
LoadStringRes(LanguageDesc(g_displayedLanguage), _vm->_font->TextBufferAddr(), TBUFSZ);
|
||||
g_iconArray[*pi] = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(), 0,
|
||||
g_iconArray[*pi] = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(), 0,
|
||||
x + cd.box[i].w / 2, y + ROT_YOFF, _vm->_font->GetTagFontHandle(), TXT_CENTER, 0);
|
||||
MultiSetZPosition(g_iconArray[*pi], Z_INV_ITEXT);
|
||||
*pi += 1;
|
||||
@ -3131,7 +3131,7 @@ static void ConstructInventory(InventoryType filling) {
|
||||
// Dispose of anything it may be replacing
|
||||
for (int i = 0; i < MAX_WCOMP; i++) {
|
||||
if (retObj[i] != NULL) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), retObj[i]);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), retObj[i]);
|
||||
retObj[i] = NULL;
|
||||
}
|
||||
}
|
||||
@ -3411,7 +3411,7 @@ static void AlterCursor(int num) {
|
||||
pim = GetImageFromFilm(g_hWinParts, num, &pfreel);
|
||||
|
||||
// Poke in the background palette
|
||||
pim->hImgPal = TO_32(BgPal());
|
||||
pim->hImgPal = TO_32(_vm->_bg->BgPal());
|
||||
|
||||
SetTempCursor(FROM_32(pfreel->script));
|
||||
}
|
||||
@ -3718,7 +3718,7 @@ extern void HideConversation(bool bHide) {
|
||||
int Loffset, Toffset;
|
||||
|
||||
GetActorMidTop(g_thisConvActor, &x, &y);
|
||||
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
x -= Loffset;
|
||||
y -= Toffset;
|
||||
} else {
|
||||
@ -3773,7 +3773,7 @@ extern void HideConversation(bool bHide) {
|
||||
&& g_thisConvActor) {
|
||||
int Loffset, Toffset;
|
||||
|
||||
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
y = GetActorBottom(g_thisConvActor) - MultiHighest(g_RectObject) +
|
||||
SysVar(SV_CONV_BELOW_Y);
|
||||
y -= Toffset;
|
||||
|
@ -417,7 +417,7 @@ void PlayerEvent(PLR_EVENT pEvent, const Common::Point &coOrds) {
|
||||
|
||||
if (TinselV2 && InventoryActive()) {
|
||||
int x, y;
|
||||
PlayfieldGetPos(FIELD_WORLD, &x, &y);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &x, &y);
|
||||
EventToInventory(pEvent, Common::Point(coOrds.x - x, coOrds.y - y));
|
||||
return;
|
||||
}
|
||||
|
@ -31,8 +31,6 @@ namespace Tinsel {
|
||||
// Accessed using TextBufferAddr(), this is how big it is:
|
||||
#define TBUFSZ 512
|
||||
|
||||
class TinselEngine;
|
||||
|
||||
class Font {
|
||||
public:
|
||||
Font() : _hTagFont(0), _hTalkFont(0), _hRegularTalkFont(0), _hRegularTagFont(0), _tBuffer("") {
|
||||
|
@ -133,7 +133,7 @@ static int ClickedOnPath(int clickX, int clickY, int *ptgtX, int *ptgtY) {
|
||||
In a Blocking polygon - try searching down and up.
|
||||
If still nowhere (for now) give up!
|
||||
------------------------------------------------------*/
|
||||
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
|
||||
for (i = clickY+1; i < SCREEN_HEIGHT + Toffset; i++) {
|
||||
// Don't leave the path system
|
||||
@ -180,7 +180,7 @@ static int ClickedOnRefer(HPOLYGON hRefpoly, int clickX, int clickY, int *ptgtX,
|
||||
int end; // Extreme of the scene
|
||||
int Loffset, Toffset;
|
||||
|
||||
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
*ptgtX = *ptgtY = -1;
|
||||
|
||||
switch (PolySubtype(hRefpoly)) {
|
||||
@ -190,7 +190,7 @@ static int ClickedOnRefer(HPOLYGON hRefpoly, int clickX, int clickY, int *ptgtX,
|
||||
break;
|
||||
|
||||
case REF_DOWN: // Search downwards
|
||||
end = BgHeight();
|
||||
end = _vm->_bg->BgHeight();
|
||||
for (i = clickY+1; i < end; i++)
|
||||
if (InPolygon(clickX, i, PATH) != NOPOLY
|
||||
&& InPolygon(clickX, i, BLOCK) == NOPOLY) {
|
||||
@ -211,7 +211,7 @@ static int ClickedOnRefer(HPOLYGON hRefpoly, int clickX, int clickY, int *ptgtX,
|
||||
break;
|
||||
|
||||
case REF_RIGHT: // Search to the right
|
||||
end = BgWidth();
|
||||
end = _vm->_bg->BgWidth();
|
||||
for (i = clickX+1; i < end; i++)
|
||||
if (InPolygon(i, clickY, PATH) != NOPOLY
|
||||
&& InPolygon(i, clickY, BLOCK) == NOPOLY) {
|
||||
@ -252,7 +252,7 @@ static int ClickedOnNothing(int clickX, int clickY, int *ptgtX, int *ptgtY) {
|
||||
int end; // Extreme of the scene
|
||||
int Loffset, Toffset;
|
||||
|
||||
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
|
||||
switch (g_DefaultRefer) {
|
||||
case REF_DEFAULT:
|
||||
@ -266,7 +266,7 @@ static int ClickedOnNothing(int clickX, int clickY, int *ptgtX, int *ptgtY) {
|
||||
return ClickedOnPath(clickX, i, ptgtX, ptgtY);
|
||||
}
|
||||
// Try searching down and up (offscreen).
|
||||
end = BgHeight();
|
||||
end = _vm->_bg->BgHeight();
|
||||
for (i = clickY+1; i < end; i++)
|
||||
if (InPolygon(clickX, i, PATH) != NOPOLY) {
|
||||
return ClickedOnPath(clickX, i, ptgtX, ptgtY);
|
||||
@ -285,7 +285,7 @@ static int ClickedOnNothing(int clickX, int clickY, int *ptgtX, int *ptgtY) {
|
||||
break;
|
||||
|
||||
case REF_DOWN:
|
||||
end = BgHeight();
|
||||
end = _vm->_bg->BgHeight();
|
||||
for (i = clickY+1; i < end; i++)
|
||||
if (InPolygon(clickX, i, PATH) != NOPOLY) {
|
||||
return ClickedOnPath(clickX, i, ptgtX, ptgtY);
|
||||
@ -300,7 +300,7 @@ static int ClickedOnNothing(int clickX, int clickY, int *ptgtX, int *ptgtY) {
|
||||
break;
|
||||
|
||||
case REF_RIGHT:
|
||||
end = BgWidth();
|
||||
end = _vm->_bg->BgWidth();
|
||||
for (i = clickX + 1; i < end; i++)
|
||||
if (InPolygon(i, clickY, PATH) != NOPOLY) {
|
||||
return ClickedOnPath(i, clickY, ptgtX, ptgtY);
|
||||
|
@ -147,16 +147,16 @@ void CursorPositionProcess(CORO_PARAM, const void *) {
|
||||
Loffset != _ctx->prevsX || Toffset != _ctx->prevsY) {
|
||||
// kill current text objects
|
||||
if (_ctx->cpText) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), _ctx->cpText);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _ctx->cpText);
|
||||
}
|
||||
if (_ctx->cpathText) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), _ctx->cpathText);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _ctx->cpathText);
|
||||
_ctx->cpathText = NULL;
|
||||
}
|
||||
|
||||
// New text objects
|
||||
sprintf(PositionString, "%d %d", aniX + Loffset, aniY + Toffset);
|
||||
_ctx->cpText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), PositionString,
|
||||
_ctx->cpText = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS), PositionString,
|
||||
0, CPOSX, POSY, GetTagFontHandle(), TXT_CENTER);
|
||||
if (g_DispPath) {
|
||||
HPOLYGON hp = InPolygon(aniX + Loffset, aniY + Toffset, PATH);
|
||||
@ -168,7 +168,7 @@ void CursorPositionProcess(CORO_PARAM, const void *) {
|
||||
PolyCornerX(hp, 1), PolyCornerY(hp, 1),
|
||||
PolyCornerX(hp, 2), PolyCornerY(hp, 2),
|
||||
PolyCornerX(hp, 3), PolyCornerY(hp, 3));
|
||||
_ctx->cpathText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), PositionString,
|
||||
_ctx->cpathText = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS), PositionString,
|
||||
0, 4, POSY+ 10, GetTagFontHandle(), 0);
|
||||
}
|
||||
|
||||
@ -184,11 +184,11 @@ void CursorPositionProcess(CORO_PARAM, const void *) {
|
||||
if (Overrun != _ctx->prevOver) {
|
||||
// kill current text objects
|
||||
if (_ctx->opText) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), _ctx->opText);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _ctx->opText);
|
||||
}
|
||||
|
||||
sprintf(PositionString, "%d", Overrun);
|
||||
_ctx->opText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), PositionString,
|
||||
_ctx->opText = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS), PositionString,
|
||||
0, OPOSX, POSY, GetTagFontHandle(), TXT_CENTER);
|
||||
|
||||
// update previous value
|
||||
@ -209,12 +209,12 @@ void CursorPositionProcess(CORO_PARAM, const void *) {
|
||||
Loffset != _ctx->prevsX || Toffset != _ctx->prevsY) {
|
||||
// Kill current text objects
|
||||
if (_ctx->rpText) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), _ctx->rpText);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _ctx->rpText);
|
||||
}
|
||||
|
||||
// create new text object list
|
||||
sprintf(PositionString, "%d %d", aniX, aniY);
|
||||
_ctx->rpText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), PositionString,
|
||||
_ctx->rpText = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS), PositionString,
|
||||
0, LPOSX, POSY, GetTagFontHandle(), TXT_CENTER);
|
||||
|
||||
// update previous position
|
||||
@ -229,11 +229,11 @@ void CursorPositionProcess(CORO_PARAM, const void *) {
|
||||
if (g_bShowString && g_newestString != _ctx->prevString) {
|
||||
// kill current text objects
|
||||
if (_ctx->spText) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), _ctx->spText);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _ctx->spText);
|
||||
}
|
||||
|
||||
sprintf(PositionString, "String: %d", g_newestString);
|
||||
_ctx->spText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), PositionString,
|
||||
_ctx->spText = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS), PositionString,
|
||||
0, SPOSX, POSY+10, GetTalkFontHandle(), TXT_CENTER);
|
||||
|
||||
// update previous value
|
||||
@ -401,7 +401,7 @@ static bool ActorTag(int curX, int curY, HotSpotTag *pTag, OBJECT **ppText) {
|
||||
SaveTaggedPoly(NOPOLY); // No tagged polygon
|
||||
|
||||
if (*ppText)
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), *ppText);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), *ppText);
|
||||
|
||||
if (ActorTagIsWanted(actor)) {
|
||||
GetActorTagPos(actor, &tagX, &tagY, false);
|
||||
@ -409,7 +409,7 @@ static bool ActorTag(int curX, int curY, HotSpotTag *pTag, OBJECT **ppText) {
|
||||
|
||||
// May have buggered cursor
|
||||
EndCursorFollowed();
|
||||
*ppText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), g_tagBuffer,
|
||||
*ppText = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS), g_tagBuffer,
|
||||
0, tagX, tagY, _vm->_font->GetTagFontHandle(), TXT_CENTER, 0);
|
||||
assert(*ppText);
|
||||
MultiSetZPosition(*ppText, Z_TAG_TEXT);
|
||||
@ -446,22 +446,22 @@ static bool ActorTag(int curX, int curY, HotSpotTag *pTag, OBJECT **ppText) {
|
||||
// Display actor's tag
|
||||
|
||||
if (*ppText)
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), *ppText);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), *ppText);
|
||||
|
||||
*pTag = ACTOR_HOTSPOT_TAG;
|
||||
SaveTaggedActor(ano); // This actor tagged
|
||||
SaveTaggedPoly(NOPOLY); // No tagged polygon
|
||||
|
||||
PlayfieldGetPos(FIELD_WORLD, &tagX, &tagY);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &tagX, &tagY);
|
||||
LoadStringRes(GetActorTag(ano), _vm->_font->TextBufferAddr(), TBUFSZ);
|
||||
*ppText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(),
|
||||
*ppText = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(),
|
||||
0, xtext - tagX, ytext - tagY, _vm->_font->GetTagFontHandle(), TXT_CENTER);
|
||||
assert(*ppText); // Actor tag string produced NULL text
|
||||
MultiSetZPosition(*ppText, Z_TAG_TEXT);
|
||||
} else {
|
||||
// Maintain actor tag's position
|
||||
|
||||
PlayfieldGetPos(FIELD_WORLD, &newX, &newY);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &newX, &newY);
|
||||
if (newX != tagX || newY != tagY) {
|
||||
MultiMoveRelXY(*ppText, tagX - newX, tagY - newY);
|
||||
tagX = newX;
|
||||
@ -511,7 +511,7 @@ static bool PolyTag(HotSpotTag *pTag, OBJECT **ppText) {
|
||||
// This poly is entitled to be tagged
|
||||
if (hp != GetTaggedPoly()) {
|
||||
if (*ppText) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), *ppText);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), *ppText);
|
||||
*ppText = NULL;
|
||||
}
|
||||
*pTag = POLY_HOTSPOT_TAG;
|
||||
@ -535,14 +535,14 @@ static bool PolyTag(HotSpotTag *pTag, OBJECT **ppText) {
|
||||
|
||||
if (newPoly) {
|
||||
if (*ppText)
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), *ppText);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), *ppText);
|
||||
|
||||
if (!TinselV2)
|
||||
*pTag = POLY_HOTSPOT_TAG;
|
||||
SaveTaggedActor(0); // No tagged actor
|
||||
SaveTaggedPoly(hp); // This polygon tagged
|
||||
|
||||
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
GetTagTag(hp, &hTagtext, &tagx, &tagy);
|
||||
|
||||
int strLen;
|
||||
@ -558,7 +558,7 @@ static bool PolyTag(HotSpotTag *pTag, OBJECT **ppText) {
|
||||
// May have buggered cursor
|
||||
EndCursorFollowed();
|
||||
|
||||
*ppText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
|
||||
*ppText = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS),
|
||||
_vm->_font->TextBufferAddr(), 0, tagx - Loffset, tagy - Toffset,
|
||||
_vm->_font->GetTagFontHandle(), TXT_CENTER, 0);
|
||||
} else if (TinselV2) {
|
||||
@ -568,11 +568,11 @@ static bool PolyTag(HotSpotTag *pTag, OBJECT **ppText) {
|
||||
StartCursorFollowed();
|
||||
|
||||
GetCursorXYNoWait(&curX, &curY, false);
|
||||
*ppText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(),
|
||||
*ppText = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(),
|
||||
0, curX, curY, _vm->_font->GetTagFontHandle(), TXT_CENTER, 0);
|
||||
} else {
|
||||
// Handle displaying the tag text on-screen
|
||||
*ppText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(),
|
||||
*ppText = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(),
|
||||
0, tagx - Loffset, tagy - Toffset,
|
||||
_vm->_font->GetTagFontHandle(), TXT_CENTER);
|
||||
assert(*ppText); // Polygon tag string produced NULL text
|
||||
@ -586,18 +586,18 @@ static bool PolyTag(HotSpotTag *pTag, OBJECT **ppText) {
|
||||
* New feature: Don't go off the side of the background
|
||||
*/
|
||||
shift = MultiRightmost(*ppText) + Loffset + 2;
|
||||
if (shift >= BgWidth()) // Not off right
|
||||
MultiMoveRelXY(*ppText, BgWidth() - shift, 0);
|
||||
if (shift >= _vm->_bg->BgWidth()) // Not off right
|
||||
MultiMoveRelXY(*ppText, _vm->_bg->BgWidth() - shift, 0);
|
||||
shift = MultiLeftmost(*ppText) + Loffset - 1;
|
||||
if (shift <= 0) // Not off left
|
||||
MultiMoveRelXY(*ppText, -shift, 0);
|
||||
shift = MultiLowest(*ppText) + Toffset;
|
||||
if (shift > BgHeight()) // Not off bottom
|
||||
MultiMoveRelXY(*ppText, 0, BgHeight() - shift);
|
||||
if (shift > _vm->_bg->BgHeight()) // Not off bottom
|
||||
MultiMoveRelXY(*ppText, 0, _vm->_bg->BgHeight() - shift);
|
||||
}
|
||||
} else if (TinselV2 && (*ppText)) {
|
||||
if (!PolyTagFollowsCursor(hp)) {
|
||||
PlayfieldGetPos(FIELD_WORLD, &nLoff, &nToff);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &nLoff, &nToff);
|
||||
if (nLoff != Loffset || nToff != Toffset) {
|
||||
MultiMoveRelXY(*ppText, Loffset - nLoff, Toffset - nToff);
|
||||
Loffset = nLoff;
|
||||
@ -612,7 +612,7 @@ static bool PolyTag(HotSpotTag *pTag, OBJECT **ppText) {
|
||||
}
|
||||
}
|
||||
} else if (!TinselV2) {
|
||||
PlayfieldGetPos(FIELD_WORLD, &nLoff, &nToff);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &nLoff, &nToff);
|
||||
if (nLoff != Loffset || nToff != Toffset) {
|
||||
MultiMoveRelXY(*ppText, Loffset - nLoff, Toffset - nToff);
|
||||
Loffset = nLoff;
|
||||
@ -662,7 +662,7 @@ void TagProcess(CORO_PARAM, const void *) {
|
||||
&& !PolyTag(&_ctx->Tag, &_ctx->pText)) {
|
||||
// Nothing tagged. Remove tag, if there is one
|
||||
if (_ctx->pText) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), _ctx->pText);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _ctx->pText);
|
||||
_ctx->pText = NULL;
|
||||
|
||||
if (TinselV2)
|
||||
@ -677,7 +677,7 @@ void TagProcess(CORO_PARAM, const void *) {
|
||||
// Remove tag, if there is one
|
||||
if (_ctx->pText) {
|
||||
// kill current text objects
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), _ctx->pText);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _ctx->pText);
|
||||
_ctx->pText = NULL;
|
||||
_ctx->Tag = NO_HOTSPOT_TAG;
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ static void PokeInPalette(SCNHANDLE hMulFrame) {
|
||||
// get pointer to image
|
||||
pim = (IMAGE *)LockMem(READ_32(pFrame)); // handle to image
|
||||
|
||||
pim->hImgPal = TO_32(BgPal());
|
||||
pim->hImgPal = TO_32(_vm->_bg->BgPal());
|
||||
}
|
||||
}
|
||||
|
||||
@ -101,7 +101,7 @@ void PokeInPalette(const MULTI_INIT *pmi) {
|
||||
// get pointer to image
|
||||
pim = (IMAGE *)LockMem(READ_32(pFrame)); // handle to image
|
||||
|
||||
pim->hImgPal = TO_32(BgPal());
|
||||
pim->hImgPal = TO_32(_vm->_bg->BgPal());
|
||||
}
|
||||
}
|
||||
|
||||
@ -496,9 +496,9 @@ static void t1PlayReel(CORO_PARAM, const PPINIT *ppi) {
|
||||
// Set up and insert the multi-object
|
||||
_ctx->pPlayObj = MultiInitObject(pmi);
|
||||
if (!ppi->bTop)
|
||||
MultiInsertObject(GetPlayfieldList(FIELD_WORLD), _ctx->pPlayObj);
|
||||
MultiInsertObject(_vm->_bg->GetPlayfieldList(FIELD_WORLD), _ctx->pPlayObj);
|
||||
else
|
||||
MultiInsertObject(GetPlayfieldList(FIELD_STATUS), _ctx->pPlayObj);
|
||||
MultiInsertObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _ctx->pPlayObj);
|
||||
|
||||
// If co-ordinates are specified, use specified.
|
||||
// Otherwise, use actor's position if there are not embedded co-ords.
|
||||
@ -640,9 +640,9 @@ static void t1PlayReel(CORO_PARAM, const PPINIT *ppi) {
|
||||
|
||||
// Ditch the object
|
||||
if (!ppi->bTop)
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_WORLD), _ctx->pPlayObj);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_WORLD), _ctx->pPlayObj);
|
||||
else
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), _ctx->pPlayObj);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _ctx->pPlayObj);
|
||||
|
||||
if (_ctx->mActor) {
|
||||
if (!_ctx->replaced)
|
||||
@ -769,9 +769,9 @@ static void t2PlayReel(CORO_PARAM, int x, int y, bool bRestore, int speed, SCNHA
|
||||
// Set up and insert the multi-object
|
||||
_ctx->pPlayObj = MultiInitObject(_ctx->pmi);
|
||||
if (!bTop)
|
||||
MultiInsertObject(GetPlayfieldList(FIELD_WORLD), _ctx->pPlayObj);
|
||||
MultiInsertObject(_vm->_bg->GetPlayfieldList(FIELD_WORLD), _ctx->pPlayObj);
|
||||
else
|
||||
MultiInsertObject(GetPlayfieldList(FIELD_STATUS), _ctx->pPlayObj);
|
||||
MultiInsertObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _ctx->pPlayObj);
|
||||
|
||||
/*
|
||||
* More action for moving actors
|
||||
@ -917,9 +917,9 @@ static void t2PlayReel(CORO_PARAM, int x, int y, bool bRestore, int speed, SCNHA
|
||||
|
||||
// Ditch the object
|
||||
if (!bTop)
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_WORLD), _ctx->pPlayObj);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_WORLD), _ctx->pPlayObj);
|
||||
else
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), _ctx->pPlayObj);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _ctx->pPlayObj);
|
||||
|
||||
// Restore moving actor is nessesary
|
||||
if (_ctx->pMover != NULL && _ctx->bPrinciple && !_ctx->bReplaced)
|
||||
|
@ -85,7 +85,7 @@ static void CheckBrightness(PMOVER pMover) {
|
||||
else
|
||||
pMover->brightness--; // ramp down
|
||||
|
||||
DimPartPalette(BgPal(),
|
||||
DimPartPalette(_vm->_bg->BgPal(),
|
||||
pMover->startColor,
|
||||
pMover->paletteLength,
|
||||
pMover->brightness);
|
||||
@ -102,10 +102,10 @@ void MoverBrightness(PMOVER pMover, int brightness) {
|
||||
// if BgPal is NULL, and has been changed for ScummVM to a simple assert
|
||||
|
||||
// This is changed from a ProcessGiveWay in DW2 to an assert in ScummVM
|
||||
assert(BgPal());
|
||||
assert(_vm->_bg->BgPal());
|
||||
|
||||
// Do it all immediately
|
||||
DimPartPalette(BgPal(), pMover->startColor, pMover->paletteLength, brightness);
|
||||
DimPartPalette(_vm->_bg->BgPal(), pMover->startColor, pMover->paletteLength, brightness);
|
||||
|
||||
// The actor is probably hidden at this point,
|
||||
pMover->brightness = brightness;
|
||||
@ -200,7 +200,7 @@ void SetMoverInEffect(int index, bool tf) {
|
||||
void KillMover(PMOVER pMover) {
|
||||
if (pMover->bActive) {
|
||||
pMover->bActive = false;
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_WORLD), pMover->actorObj);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_WORLD), pMover->actorObj);
|
||||
pMover->actorObj = NULL;
|
||||
assert(CoroScheduler.getCurrentProcess() != pMover->pProc);
|
||||
CoroScheduler.killProcess(pMover->pProc);
|
||||
@ -697,7 +697,7 @@ static void MoverProcessHelper(int X, int Y, int id, PMOVER pMover) {
|
||||
IMAGE *pim;
|
||||
|
||||
|
||||
assert(BgPal()); // Can't start actor without a background palette
|
||||
assert(_vm->_bg->BgPal()); // Can't start actor without a background palette
|
||||
assert(pMover->walkReels[0][FORWARD]); // Starting actor process without walk reels
|
||||
|
||||
InitMover(pMover);
|
||||
@ -711,7 +711,7 @@ static void MoverProcessHelper(int X, int Y, int id, PMOVER pMover) {
|
||||
|
||||
// get pointer to image
|
||||
pim = (IMAGE *)LockMem(READ_32(pFrame)); // handle to image
|
||||
pim->hImgPal = TO_32(BgPal());
|
||||
pim->hImgPal = TO_32(_vm->_bg->BgPal());
|
||||
//---
|
||||
pMover->actorObj = MultiInitObject(pmi);
|
||||
|
||||
@ -719,7 +719,7 @@ static void MoverProcessHelper(int X, int Y, int id, PMOVER pMover) {
|
||||
pMover->actorID = id;
|
||||
|
||||
// add it to display list
|
||||
MultiInsertObject(GetPlayfieldList(FIELD_WORLD), pMover->actorObj);
|
||||
MultiInsertObject(_vm->_bg->GetPlayfieldList(FIELD_WORLD), pMover->actorObj);
|
||||
storeActorReel(id, NULL, 0, pMover->actorObj, 0, 0, 0);
|
||||
|
||||
InitStepAnimScript(&pMover->actorAnim, pMover->actorObj, FROM_32(pfilm->reels[0].script), ONE_SECOND / FROM_32(pfilm->frate));
|
||||
@ -813,7 +813,7 @@ void T2MoverProcess(CORO_PARAM, const void *param) {
|
||||
pMover->bActive = true;
|
||||
|
||||
// add it to display list
|
||||
MultiInsertObject( GetPlayfieldList(FIELD_WORLD), pMover->actorObj );
|
||||
MultiInsertObject(_vm->_bg->GetPlayfieldList(FIELD_WORLD), pMover->actorObj);
|
||||
|
||||
InitStepAnimScript(&pMover->actorAnim, pMover->actorObj, pFilm->reels[0].script, ONE_SECOND/pFilm->frate);
|
||||
pMover->stepCount = 0;
|
||||
|
@ -51,10 +51,6 @@ namespace Tinsel {
|
||||
|
||||
//----------------- EXTERN FUNCTIONS --------------------
|
||||
|
||||
// in BG.C
|
||||
extern SCNHANDLE GetBgroundHandle();
|
||||
extern void SetDoFadeIn(bool tf);
|
||||
|
||||
// In DOS_DW.C
|
||||
void RestoreMasterProcess(INT_CONTEXT *pic);
|
||||
|
||||
@ -107,10 +103,10 @@ static bool g_bNoFade = false;
|
||||
*/
|
||||
void DoSaveScene(SAVED_DATA *sd) {
|
||||
sd->SavedSceneHandle = GetSceneHandle();
|
||||
sd->SavedBgroundHandle = GetBgroundHandle();
|
||||
sd->SavedBgroundHandle = _vm->_bg->GetBgroundHandle();
|
||||
SaveMovers(sd->SavedMoverInfo);
|
||||
sd->NumSavedActors = SaveActors(sd->SavedActorInfo);
|
||||
PlayfieldGetPos(FIELD_WORLD, &sd->SavedLoffset, &sd->SavedToffset);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &sd->SavedLoffset, &sd->SavedToffset);
|
||||
SaveInterpretContexts(sd->SavedICInfo);
|
||||
sd->SavedControl = ControlIsOn();
|
||||
sd->SavedNoBlocking = GetNoBlocking();
|
||||
@ -338,15 +334,15 @@ static int DoRestoreSceneFrame(SAVED_DATA *sd, int n) {
|
||||
// Start up the scene
|
||||
StartNewScene(sd->SavedSceneHandle, NO_ENTRY_NUM);
|
||||
|
||||
SetDoFadeIn(!g_bNoFade);
|
||||
_vm->_bg->SetDoFadeIn(!g_bNoFade);
|
||||
g_bNoFade = false;
|
||||
StartupBackground(Common::nullContext, sd->SavedBgroundHandle);
|
||||
_vm->_bg->StartupBackground(Common::nullContext, sd->SavedBgroundHandle);
|
||||
|
||||
if (TinselV2) {
|
||||
Offset(EX_USEXY, sd->SavedLoffset, sd->SavedToffset);
|
||||
} else {
|
||||
KillScroll();
|
||||
PlayfieldSetPos(FIELD_WORLD, sd->SavedLoffset, sd->SavedToffset);
|
||||
_vm->_bg->PlayfieldSetPos(FIELD_WORLD, sd->SavedLoffset, sd->SavedToffset);
|
||||
SetNoBlocking(sd->SavedNoBlocking);
|
||||
}
|
||||
|
||||
|
@ -54,9 +54,6 @@ namespace Tinsel {
|
||||
|
||||
//----------------- EXTERNAL FUNCTIONS ---------------------
|
||||
|
||||
// in BG.C
|
||||
extern void DropBackground();
|
||||
|
||||
// in EFFECT.C
|
||||
extern void EffectPolyProcess(CORO_PARAM, const void *);
|
||||
|
||||
@ -317,7 +314,7 @@ void EndScene() {
|
||||
|
||||
DropPolygons(); // No polygons
|
||||
DropScroll(); // No no-scrolls
|
||||
DropBackground(); // No background
|
||||
_vm->_bg->DropBackground(); // No background
|
||||
DropMovers(); // No moving actors
|
||||
DropCursor(); // No cursor
|
||||
DropActors(); // No actor reels running
|
||||
@ -372,7 +369,7 @@ void PrimeScene() {
|
||||
CoroScheduler.createProcess(PID_TAG, PointProcess, NULL, 0);
|
||||
|
||||
// init the current background
|
||||
InitBackground();
|
||||
_vm->_bg->InitBackground();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -136,7 +136,7 @@ static void NeedScroll(int direction) {
|
||||
int Loffset, Toffset;
|
||||
|
||||
// get background offsets
|
||||
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
|
||||
switch (direction) {
|
||||
case LEFT: /* Picture will go left, 'camera' right */
|
||||
@ -247,7 +247,7 @@ static void ScrollImage() {
|
||||
int curX, curY;
|
||||
|
||||
// get background offsets
|
||||
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
|
||||
/*
|
||||
* Keeping cursor on a tag?
|
||||
@ -333,7 +333,7 @@ static void ScrollImage() {
|
||||
if (g_ScrollCursor)
|
||||
AdjustCursorXY(OldLoffset - Loffset, OldToffset - Toffset);
|
||||
|
||||
PlayfieldSetPos(FIELD_WORLD, Loffset, Toffset);
|
||||
_vm->_bg->PlayfieldSetPos(FIELD_WORLD, Loffset, Toffset);
|
||||
}
|
||||
|
||||
|
||||
@ -356,7 +356,7 @@ static void MonitorScroll() {
|
||||
if (g_oldx == newx && g_oldy == newy)
|
||||
return;
|
||||
|
||||
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
|
||||
/*
|
||||
* Approaching right side or left side of the screen?
|
||||
@ -420,11 +420,11 @@ void ScrollProcess(CORO_PARAM, const void *) {
|
||||
|
||||
// In Tinsel v2, scenes may play movies, so the background may not always
|
||||
// already be initialized like it is in v1
|
||||
while (!GetBgObject())
|
||||
while (!_vm->_bg->GetBgObject())
|
||||
CORO_SLEEP(1);
|
||||
|
||||
g_ImageH = BgHeight(); // Dimensions
|
||||
g_ImageW = BgWidth(); // of this scene.
|
||||
g_ImageH = _vm->_bg->BgHeight(); // Dimensions
|
||||
g_ImageW = _vm->_bg->BgWidth(); // of this scene.
|
||||
|
||||
// Give up if there'll be no purpose in this process
|
||||
if (g_ImageW == SCREEN_WIDTH && g_ImageH == SCREEN_HEIGHT)
|
||||
@ -482,7 +482,7 @@ void ScrollTo(int x, int y, int xIter, int yIter) {
|
||||
g_scrollPixelsX = xIter != 0 ? xIter : (TinselV2 ? g_sd.xSpeed : SCROLLPIXELS);
|
||||
g_scrollPixelsY = yIter != 0 ? yIter : (TinselV2 ? g_sd.ySpeed : SCROLLPIXELS);
|
||||
|
||||
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset); // get background offsets
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset); // get background offsets
|
||||
|
||||
g_LeftScroll = x - Loffset;
|
||||
g_DownScroll = y - Toffset;
|
||||
|
@ -373,7 +373,7 @@ bool SoundManager::offscreenChecks(int x, int &y) {
|
||||
return true;
|
||||
|
||||
// convert x to offset from screen center
|
||||
x -= PlayfieldGetCenterX(FIELD_WORLD);
|
||||
x -= _vm->_bg->PlayfieldGetCenterX(FIELD_WORLD);
|
||||
|
||||
if (x < -SCREEN_WIDTH || x > SCREEN_WIDTH) {
|
||||
// A long way offscreen, ignore it
|
||||
@ -392,7 +392,7 @@ int8 SoundManager::getPan(int x) {
|
||||
if (x == -1)
|
||||
return 0;
|
||||
|
||||
x -= PlayfieldGetCenterX(FIELD_WORLD);
|
||||
x -= _vm->_bg->PlayfieldGetCenterX(FIELD_WORLD);
|
||||
|
||||
if (x == 0)
|
||||
return 0;
|
||||
|
@ -86,9 +86,6 @@ extern bool g_bNoPause;
|
||||
|
||||
//----------------- EXTERNAL FUNCTIONS ---------------------
|
||||
|
||||
// in BG.CPP
|
||||
extern void ChangePalette(SCNHANDLE hPal);
|
||||
|
||||
// in PDISPLAY.CPP
|
||||
extern void EnableTags();
|
||||
extern void DisableTags();
|
||||
@ -329,27 +326,27 @@ void Walk(CORO_PARAM, int actor, int x, int y, SCNHANDLE film, int hold, bool ig
|
||||
static void DecodeExtreme(EXTREME extreme, int *px, int *py) {
|
||||
int Loffset, Toffset;
|
||||
|
||||
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
|
||||
switch (extreme) {
|
||||
case EX_BOTTOM:
|
||||
*px = Loffset;
|
||||
*py = BgHeight() - SCREEN_HEIGHT;
|
||||
*py = _vm->_bg->BgHeight() - SCREEN_HEIGHT;
|
||||
break;
|
||||
case EX_BOTTOMLEFT:
|
||||
*px = 0;
|
||||
*py = BgHeight() - SCREEN_HEIGHT;
|
||||
*py = _vm->_bg->BgHeight() - SCREEN_HEIGHT;
|
||||
break;
|
||||
case EX_BOTTOMRIGHT:
|
||||
*px = BgWidth() - SCREEN_WIDTH;
|
||||
*py = BgHeight() - SCREEN_HEIGHT;
|
||||
*px = _vm->_bg->BgWidth() - SCREEN_WIDTH;
|
||||
*py = _vm->_bg->BgHeight() - SCREEN_HEIGHT;
|
||||
break;
|
||||
case EX_LEFT:
|
||||
*px = 0;
|
||||
*py = Toffset;
|
||||
break;
|
||||
case EX_RIGHT:
|
||||
*px = BgWidth() - SCREEN_WIDTH;
|
||||
*px = _vm->_bg->BgWidth() - SCREEN_WIDTH;
|
||||
*py = Toffset;
|
||||
break;
|
||||
case EX_TOP:
|
||||
@ -360,7 +357,7 @@ static void DecodeExtreme(EXTREME extreme, int *px, int *py) {
|
||||
*px = *py = 0;
|
||||
break;
|
||||
case EX_TOPRIGHT:
|
||||
*px = BgWidth() - SCREEN_WIDTH;
|
||||
*px = _vm->_bg->BgWidth() - SCREEN_WIDTH;
|
||||
*py = 0;
|
||||
break;
|
||||
default:
|
||||
@ -414,7 +411,7 @@ static void ScrollMonitorProcess(CORO_PARAM, const void *param) {
|
||||
break;
|
||||
}
|
||||
|
||||
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
|
||||
} while (Loffset != psm->x || Toffset != psm->y);
|
||||
|
||||
@ -639,7 +636,7 @@ static void AuxScale(int actor, int scale, SCNHANDLE *rp) {
|
||||
* Defines the background image for a scene.
|
||||
*/
|
||||
static void Background(CORO_PARAM, SCNHANDLE bfilm) {
|
||||
StartupBackground(coroParam, bfilm);
|
||||
_vm->_bg->StartupBackground(coroParam, bfilm);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1378,7 +1375,7 @@ static void KillProcess(uint32 procID) {
|
||||
static int LToffset(int lort) {
|
||||
int Loffset, Toffset;
|
||||
|
||||
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
return (lort == SCREENXPOS) ? Loffset : Toffset;
|
||||
}
|
||||
|
||||
@ -1472,7 +1469,7 @@ void Offset(EXTREME extreme, int x, int y) {
|
||||
if (TinselV2)
|
||||
DecodeExtreme(extreme, &x, &y);
|
||||
|
||||
PlayfieldSetPos(FIELD_WORLD, x, y);
|
||||
_vm->_bg->PlayfieldSetPos(FIELD_WORLD, x, y);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1907,8 +1904,8 @@ static void Print(CORO_PARAM, int x, int y, SCNHANDLE text, int time, bool bSust
|
||||
// Print the text
|
||||
if (TinselV2) {
|
||||
int Loffset, Toffset;
|
||||
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
_ctx->pText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
_ctx->pText = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS),
|
||||
_vm->_font->TextBufferAddr(), 0, x - Loffset, y - Toffset, _vm->_font->GetTagFontHandle(),
|
||||
TXT_CENTER, 0);
|
||||
assert(_ctx->pText);
|
||||
@ -1920,8 +1917,8 @@ static void Print(CORO_PARAM, int x, int y, SCNHANDLE text, int time, bool bSust
|
||||
|
||||
} else if (bJapDoPrintText || (!isJapanMode() && (_vm->_config->_useSubtitles || !_ctx->bSample))) {
|
||||
int Loffset, Toffset; // Screen position
|
||||
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
_ctx->pText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(),
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
_ctx->pText = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(),
|
||||
0, x - Loffset, y - Toffset,
|
||||
TinselV2 ? _vm->_font->GetTagFontHandle() : _vm->_font->GetTalkFontHandle(), TXT_CENTER);
|
||||
assert(_ctx->pText); // string produced NULL text
|
||||
@ -1933,14 +1930,14 @@ static void Print(CORO_PARAM, int x, int y, SCNHANDLE text, int time, bool bSust
|
||||
*/
|
||||
int shift;
|
||||
shift = MultiRightmost(_ctx->pText) + 2;
|
||||
if (shift >= BgWidth()) // Not off right
|
||||
MultiMoveRelXY(_ctx->pText, BgWidth() - shift, 0);
|
||||
if (shift >= _vm->_bg->BgWidth()) // Not off right
|
||||
MultiMoveRelXY(_ctx->pText, _vm->_bg->BgWidth() - shift, 0);
|
||||
shift = MultiLeftmost(_ctx->pText) - 1;
|
||||
if (shift <= 0) // Not off left
|
||||
MultiMoveRelXY(_ctx->pText, -shift, 0);
|
||||
shift = MultiLowest(_ctx->pText);
|
||||
if (shift > BgHeight()) // Not off bottom
|
||||
MultiMoveRelXY(_ctx->pText, 0, BgHeight() - shift);
|
||||
if (shift > _vm->_bg->BgHeight()) // Not off bottom
|
||||
MultiMoveRelXY(_ctx->pText, 0, _vm->_bg->BgHeight() - shift);
|
||||
}
|
||||
|
||||
// Give up if nothing printed and no sample
|
||||
@ -1995,7 +1992,7 @@ static void Print(CORO_PARAM, int x, int y, SCNHANDLE text, int time, bool bSust
|
||||
|
||||
// Delete the text
|
||||
if (_ctx->pText != NULL)
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), _ctx->pText);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _ctx->pText);
|
||||
_vm->_mixer->stopHandle(_ctx->handle);
|
||||
|
||||
CORO_END_CODE;
|
||||
@ -2086,7 +2083,7 @@ static void PrintObj(CORO_PARAM, const SCNHANDLE hText, const INV_OBJECT *pinvo,
|
||||
else
|
||||
LoadStringRes(hText, _vm->_font->TextBufferAddr(), TBUFSZ);
|
||||
|
||||
_ctx->pText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(),
|
||||
_ctx->pText = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(),
|
||||
0, _ctx->textx, _ctx->texty, _vm->_font->GetTagFontHandle(), TXT_CENTER);
|
||||
assert(_ctx->pText); // PrintObj() string produced NULL text
|
||||
|
||||
@ -2126,7 +2123,7 @@ static void PrintObj(CORO_PARAM, const SCNHANDLE hText, const INV_OBJECT *pinvo,
|
||||
// Give way to non-POINTED-generated text
|
||||
if (g_bNotPointedRunning) {
|
||||
// Delete the text, and wait for the all-clear
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), _ctx->pText);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _ctx->pText);
|
||||
_ctx->pText = NULL;
|
||||
|
||||
while (g_bNotPointedRunning)
|
||||
@ -2138,7 +2135,7 @@ static void PrintObj(CORO_PARAM, const SCNHANDLE hText, const INV_OBJECT *pinvo,
|
||||
|
||||
// Re-display in the same place
|
||||
LoadStringRes(hText, _vm->_font->TextBufferAddr(), TBUFSZ);
|
||||
_ctx->pText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
|
||||
_ctx->pText = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS),
|
||||
_vm->_font->TextBufferAddr(), 0, _ctx->textx, _ctx->texty, _vm->_font->GetTagFontHandle(),
|
||||
TXT_CENTER, 0);
|
||||
assert(_ctx->pText);
|
||||
@ -2214,7 +2211,7 @@ static void PrintObj(CORO_PARAM, const SCNHANDLE hText, const INV_OBJECT *pinvo,
|
||||
|
||||
// Delete the text, if haven't already
|
||||
if (_ctx->pText)
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), _ctx->pText);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _ctx->pText);
|
||||
|
||||
// If it hasn't already finished, stop sample
|
||||
if (_ctx->bSample)
|
||||
@ -2244,7 +2241,7 @@ static void PrintObjPointed(CORO_PARAM, const SCNHANDLE text, const INV_OBJECT *
|
||||
// Give way to non-POINTED-generated text
|
||||
if (g_bNotPointedRunning) {
|
||||
// Delete the text, and wait for the all-clear
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), pText);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), pText);
|
||||
pText = NULL;
|
||||
while (g_bNotPointedRunning)
|
||||
CORO_SLEEP(1);
|
||||
@ -2255,7 +2252,7 @@ static void PrintObjPointed(CORO_PARAM, const SCNHANDLE text, const INV_OBJECT *
|
||||
|
||||
// Re-display in the same place
|
||||
LoadStringRes(text, _vm->_font->TextBufferAddr(), TBUFSZ);
|
||||
pText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(),
|
||||
pText = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _vm->_font->TextBufferAddr(),
|
||||
0, textx, texty, _vm->_font->GetTagFontHandle(), TXT_CENTER);
|
||||
assert(pText); // PrintObj() string produced NULL text
|
||||
MultiSetZPosition(pText, Z_INV_ITEXT);
|
||||
@ -2545,7 +2542,7 @@ static void Scroll(CORO_PARAM, EXTREME extreme, int xp, int yp, int xIter, int y
|
||||
if (_ctx->thisScroll != g_scrollNumber)
|
||||
CORO_KILL_SELF();
|
||||
|
||||
PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &Loffset, &Toffset);
|
||||
} while (Loffset != _ctx->x || Toffset != _ctx->y);
|
||||
} else if (TinselV2 && myEscape) {
|
||||
SCROLL_MONITOR sm;
|
||||
@ -2684,7 +2681,7 @@ static void SetPalette(SCNHANDLE hPal, bool escOn, int myEscape) {
|
||||
if (escOn && myEscape != GetEscEvents())
|
||||
return;
|
||||
|
||||
ChangePalette(hPal);
|
||||
_vm->_bg->ChangePalette(hPal);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -3310,7 +3307,7 @@ static void TalkOrSay(CORO_PARAM, SPEECH_TYPE speechType, SCNHANDLE hText, int x
|
||||
*/
|
||||
int xshift, yshift;
|
||||
|
||||
PlayfieldGetPos(FIELD_WORLD, &_ctx->Loffset, &_ctx->Toffset);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &_ctx->Loffset, &_ctx->Toffset);
|
||||
if ((_ctx->whatSort == IS_SAY) || (_ctx->whatSort == IS_TALK))
|
||||
GetActorMidTop(_ctx->actor, &_ctx->x, &_ctx->y);
|
||||
|
||||
@ -3324,7 +3321,7 @@ static void TalkOrSay(CORO_PARAM, SPEECH_TYPE speechType, SCNHANDLE hText, int x
|
||||
_ctx->y -= _ctx->Toffset;
|
||||
}
|
||||
|
||||
_ctx->pText = ObjectTextOut(GetPlayfieldList(FIELD_STATUS),
|
||||
_ctx->pText = ObjectTextOut(_vm->_bg->GetPlayfieldList(FIELD_STATUS),
|
||||
_vm->_font->TextBufferAddr(), 0, _ctx->x - _ctx->Loffset, _ctx->y - _ctx->Toffset,
|
||||
_vm->_font->GetTalkFontHandle(), TXT_CENTER);
|
||||
assert(_ctx->pText); // talk() string produced NULL text;
|
||||
@ -3387,7 +3384,7 @@ static void TalkOrSay(CORO_PARAM, SPEECH_TYPE speechType, SCNHANDLE hText, int x
|
||||
if (_ctx->pText != NULL) {
|
||||
int nLoff, nToff;
|
||||
|
||||
PlayfieldGetPos(FIELD_WORLD, &nLoff, &nToff);
|
||||
_vm->_bg->PlayfieldGetPos(FIELD_WORLD, &nLoff, &nToff);
|
||||
if (nLoff != _ctx->Loffset || nToff != _ctx->Toffset) {
|
||||
MultiMoveRelXY(_ctx->pText, _ctx->Loffset - nLoff, _ctx->Toffset - nToff);
|
||||
_ctx->Loffset = nLoff;
|
||||
@ -3445,7 +3442,7 @@ static void TalkOrSay(CORO_PARAM, SPEECH_TYPE speechType, SCNHANDLE hText, int x
|
||||
} while (1);
|
||||
|
||||
if (_ctx->pText != NULL) {
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), _ctx->pText);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _ctx->pText);
|
||||
_ctx->pText = NULL;
|
||||
}
|
||||
if (TinselV2 && _ctx->bSample)
|
||||
@ -3460,7 +3457,7 @@ static void TalkOrSay(CORO_PARAM, SPEECH_TYPE speechType, SCNHANDLE hText, int x
|
||||
if (_ctx->bTalkReel)
|
||||
CORO_INVOKE_2(FinishTalkingReel, _ctx->pActor, _ctx->actor);
|
||||
if (_ctx->pText != NULL)
|
||||
MultiDeleteObject(GetPlayfieldList(FIELD_STATUS), _ctx->pText);
|
||||
MultiDeleteObject(_vm->_bg->GetPlayfieldList(FIELD_STATUS), _ctx->pText);
|
||||
|
||||
if (TinselV2) {
|
||||
if ((_ctx->whatSort == IS_SAY) || (_ctx->whatSort == IS_SAYAT)) {
|
||||
|
@ -64,11 +64,6 @@ namespace Tinsel {
|
||||
|
||||
//----------------- EXTERNAL FUNCTIONS ---------------------
|
||||
|
||||
// In BG.CPP
|
||||
extern void SetDoFadeIn(bool tf);
|
||||
extern void DropBackground();
|
||||
extern const BACKGND *g_pCurBgnd;
|
||||
|
||||
// In CURSOR.CPP
|
||||
extern void CursorProcess(CORO_PARAM, const void *);
|
||||
|
||||
@ -678,12 +673,12 @@ bool ChangeScene(bool bReset) {
|
||||
|
||||
switch (g_NextScene.trans) {
|
||||
case TRANS_CUT:
|
||||
SetDoFadeIn(false);
|
||||
_vm->_bg->SetDoFadeIn(false);
|
||||
break;
|
||||
|
||||
case TRANS_FADE:
|
||||
default:
|
||||
SetDoFadeIn(true);
|
||||
_vm->_bg->SetDoFadeIn(true);
|
||||
break;
|
||||
}
|
||||
} else
|
||||
@ -854,6 +849,7 @@ TinselEngine::TinselEngine(OSystem *syst, const TinselGameDescription *gameDesc)
|
||||
|
||||
TinselEngine::~TinselEngine() {
|
||||
_system->getAudioCDManager()->stop();
|
||||
delete _bg;
|
||||
delete _font;
|
||||
delete _bmv;
|
||||
delete _sound;
|
||||
@ -897,6 +893,7 @@ Common::Error TinselEngine::run() {
|
||||
_sound = new SoundManager(this);
|
||||
_bmv = new BMVPlayer();
|
||||
_font = new Font();
|
||||
_bg = new Background(_font);
|
||||
|
||||
// Initialize backend
|
||||
if (getGameID() == GID_DW2) {
|
||||
@ -1013,7 +1010,7 @@ Common::Error TinselEngine::run() {
|
||||
_vm->_config->writeToDisk();
|
||||
|
||||
EndScene();
|
||||
g_pCurBgnd = NULL;
|
||||
_bg->ResetBackground();
|
||||
|
||||
return Common::kNoError;
|
||||
}
|
||||
@ -1036,7 +1033,7 @@ void TinselEngine::NextGameCycle() {
|
||||
_bmv->CopyMovieToScreen();
|
||||
else
|
||||
// redraw background
|
||||
DrawBackgnd();
|
||||
_bg->DrawBackgnd();
|
||||
|
||||
// Why waste resources on yet another process?
|
||||
FettleTimers();
|
||||
@ -1101,10 +1098,10 @@ void TinselEngine::CreateConstProcesses() {
|
||||
void TinselEngine::RestartGame() {
|
||||
HoldItem(INV_NOICON); // Holding nothing
|
||||
|
||||
DropBackground(); // No background
|
||||
_bg->DropBackground(); // No background
|
||||
|
||||
// Ditches existing infrastructure background
|
||||
InitBackground();
|
||||
_bg->InitBackground();
|
||||
|
||||
// Next scene change won't need to fade out
|
||||
// -> reset the count used by ChangeScene
|
||||
|
@ -56,6 +56,7 @@ class MidiDriver;
|
||||
class MidiMusicPlayer;
|
||||
class PCMMusicPlayer;
|
||||
class SoundManager;
|
||||
class Background;
|
||||
class Font;
|
||||
|
||||
typedef Common::List<Common::Rect> RectList;
|
||||
@ -197,6 +198,7 @@ public:
|
||||
MidiMusicPlayer *_midiMusic;
|
||||
PCMMusicPlayer *_pcmMusic;
|
||||
BMVPlayer *_bmv;
|
||||
Background* _bg;
|
||||
Font *_font;
|
||||
|
||||
Config *_config;
|
||||
|
Loading…
Reference in New Issue
Block a user